Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1105 commits
Select commit Hold shift + click to select a range
85b96d3
chore: rename builder loop scripts
XelHaku May 8, 2026
ce6f945
feat: add google chat channel seam
XelHaku May 8, 2026
a07b1d5
fix: avoid dashboard flag shorthand collision
XelHaku May 8, 2026
8790a76
fix: align installer public surface tests
XelHaku May 8, 2026
8262469
fix: include panic excerpt in crash stderr
XelHaku May 8, 2026
11b0f94
fix: route Goncho sqlite opens through busy-timeout helper
XelHaku May 8, 2026
39a40e2
feat: add Matrix sender filter parity
XelHaku May 8, 2026
79a4d44
fix: clarify update check copy
XelHaku May 8, 2026
84a816f
feat: add Microsoft Graph helper parity
XelHaku May 8, 2026
c62652b
fix: show empty kanban list placeholder
XelHaku May 8, 2026
d8bfc75
fix: reject unknown active profiles
XelHaku May 8, 2026
209e077
fix: fall back to build vcs metadata
XelHaku May 8, 2026
6236b75
feat: expand cron deliver all routing intent
XelHaku May 8, 2026
f19d98c
feat: surface profile distribution metadata
XelHaku May 8, 2026
cef57de
fix: reject plugin subcommand typos
XelHaku May 8, 2026
c06d706
fix: reject parent command typos
XelHaku May 8, 2026
f88165e
feat: add config get command
XelHaku May 8, 2026
7cbac04
fix: show unset config values
XelHaku May 8, 2026
f52007e
test: isolate tui save export fixtures
XelHaku May 8, 2026
b907460
fix: treat missing turns table as empty
XelHaku May 8, 2026
6133044
test: cover legacy xdg uninstall cleanup
XelHaku May 8, 2026
c0bc2f2
fix: remove legacy xdg state on uninstall
XelHaku May 8, 2026
34a1003
fix: treat fresh install state as empty
XelHaku May 8, 2026
50107a0
test: isolate discord channel home state
XelHaku May 8, 2026
c233d2a
feat: track msgraph webhook platform drift
XelHaku May 8, 2026
5d0fefe
fix: suggest parent command typos
XelHaku May 8, 2026
12882e0
fix: report empty goncho system status
XelHaku May 8, 2026
f9283df
feat: emit onboard wizard json plan
XelHaku May 8, 2026
c5b7315
fix: avoid duplicate mcp login errors
XelHaku May 8, 2026
893dba7
chore: ignore whatsapp bridge node modules
XelHaku May 8, 2026
f9a72ec
fix: normalize cli json degraded states
XelHaku May 8, 2026
44fd73e
docs: document native Windows installer
XelHaku May 8, 2026
b280461
tools: refresh Hermes ea86714 parity manifest
XelHaku May 8, 2026
055365a
fix: normalize gateway discovery json beacons
XelHaku May 8, 2026
e319d6a
fix: normalize gateway status json empties
XelHaku May 8, 2026
683a8a1
test: cover fresh install json inventory surfaces
XelHaku May 8, 2026
e1cd6e5
feat: emit config get json
XelHaku May 8, 2026
4e88c5d
test: assert json surfaces carry build provenance
XelHaku May 8, 2026
432dcd9
feat: track teams pipeline plugin metadata
XelHaku May 8, 2026
36166d1
test: refresh docs home install assertion
XelHaku May 8, 2026
66d4607
feat: add TUI websocket attach transport
XelHaku May 8, 2026
f4de981
fix: emit kanban not-found JSON
XelHaku May 8, 2026
ad9ea10
feat: add matrix bootstrap parity boundary
XelHaku May 8, 2026
6ebcbc1
docs: refresh Hermes Teams docs mirror
XelHaku May 8, 2026
4eb7ee2
feat: add mattermost bootstrap boundary
XelHaku May 8, 2026
d59e78e
ci: add termux release artifact coverage
XelHaku May 8, 2026
96bb4a9
docs: lead README with methodology positioning
XelHaku May 8, 2026
5cf07d6
web: align landing with methodology positioning
XelHaku May 8, 2026
aa06433
feat: add project-mode execute code sandbox
XelHaku May 8, 2026
edcdae3
feat: normalize cron approval mode
XelHaku May 8, 2026
0bb06f2
feat: bind native tui kanban slash command
XelHaku May 8, 2026
50360d2
test: make logs fallback test deterministic
XelHaku May 8, 2026
ed07cdc
docs: close Windows installer parity row
XelHaku May 8, 2026
5f71a88
feat: add Windows gateway scheduled task lifecycle
XelHaku May 8, 2026
4e50334
fix: route gateway kanban through shared runner
XelHaku May 8, 2026
d8c7e6c
feat: wire execute code mode config
XelHaku May 8, 2026
6343e6d
test: stabilize kanban dispatcher shutdown checks
XelHaku May 8, 2026
995324d
feat: add kanban dashboard dispatch quick path
XelHaku May 8, 2026
bb40ae3
fix: port shift-enter tui newline parity
XelHaku May 8, 2026
a3e3799
docs: reconcile shift-enter parity row
XelHaku May 8, 2026
ee276b1
fix: align TUI quit slash with Hermes
XelHaku May 8, 2026
894917a
test: refresh Hermes patch tool parity manifest
XelHaku May 9, 2026
7a848e0
feat: serialize Hermes fast-mode overrides
XelHaku May 9, 2026
98a2103
feat: add Kanban triage specify parity
XelHaku May 9, 2026
a69064c
test: stabilize Discord manager smoke
XelHaku May 9, 2026
02d82bf
ci: enforce release archive size cap
XelHaku May 9, 2026
41a4180
docs: close release archive size gate row
XelHaku May 9, 2026
fd885bf
ci: add release notes artifact sizes
XelHaku May 9, 2026
8d89ca3
feat: add slack manifest generator
XelHaku May 9, 2026
caa5e7e
release: prepare v0.2.0 (v2026.5.8)
XelHaku May 9, 2026
db1ebab
fix: bound gateway startup disconnect cleanup
XelHaku May 9, 2026
d88af1f
Merge remote-tracking branch 'origin/main' into development
XelHaku May 9, 2026
38132c5
fix: route kanban commands through current board
XelHaku May 9, 2026
2461b8b
feat: inject release build date provenance
XelHaku May 9, 2026
efa53a7
fix: target install's managed checkout in gormes update, not cwd
XelHaku May 9, 2026
7d54a4c
fix: remove dangling published-binary symlink during uninstall
XelHaku May 9, 2026
e85049c
fix: bind Matrix E2EE bootstrap device id
XelHaku May 9, 2026
f85ce0f
fix: publish install.sh and install.ps1 as release assets
XelHaku May 9, 2026
94e81c0
feat: add singularity command preflight contract
XelHaku May 9, 2026
0b083e1
feat: add Camofox browser bridge
XelHaku May 9, 2026
4083f8c
fix: pause interrupted gateway goals
XelHaku May 9, 2026
1113ed4
fix(tui): trim soft-wrap markdown spaces
XelHaku May 9, 2026
604b8cc
feat: add kanban run history command
XelHaku May 9, 2026
2799814
feat: add kanban boards read model
XelHaku May 9, 2026
a832d47
docs: add nix flake packaging contract
XelHaku May 9, 2026
030196f
feat: add kanban board override flag
XelHaku May 9, 2026
d32f459
fix: preserve kanban named board roots
XelHaku May 9, 2026
065195a
fix: cap gateway shutdown disconnects
XelHaku May 9, 2026
16a0dc8
ci: attest release sboms
XelHaku May 9, 2026
fbe7c31
docs: close release sbom attestation row
XelHaku May 9, 2026
245f405
feat: add kanban dashboard run history
XelHaku May 9, 2026
549f987
feat: add kanban gc retention
XelHaku May 9, 2026
8da222a
fix: release signal lock before close returns
XelHaku May 9, 2026
f613d44
feat: prefer Windows release binary installs
XelHaku May 9, 2026
c0e36ce
feat: honor cron approval mode for terminal tools
XelHaku May 9, 2026
c017e58
ci: add OCI image smoke workflow
XelHaku May 9, 2026
a744dc5
feat: add QQ Bot transport bootstrap seam
XelHaku May 9, 2026
c0f82a2
test: guard cron origin delivery identity
XelHaku May 9, 2026
e402fba
fix: normalize partial cron job records
XelHaku May 9, 2026
cb4a841
web: add cron dashboard page
XelHaku May 9, 2026
651a3bc
fix: preserve Telegram DM topic routing
XelHaku May 9, 2026
653b8f2
ci: attest release build provenance
XelHaku May 9, 2026
8ef697e
feat: support delegate task batches
XelHaku May 9, 2026
797cec2
fix: align kanban comment handoff policy
XelHaku May 9, 2026
25f0038
docs: close delegate task batch parity row
XelHaku May 9, 2026
fe73b1e
fix: preserve google chat relay sender type
XelHaku May 9, 2026
2ae7457
feat: add gateway approval queue resolver
XelHaku May 9, 2026
b6eb484
feat: add cron standalone sender fallback
XelHaku May 9, 2026
a56fa86
feat: complete behavioral pattern extraction
XelHaku May 9, 2026
dded33f
feat: add profile clone-all create policy
XelHaku May 9, 2026
2f77348
web: add built-with Gormes proof page
XelHaku May 9, 2026
821710f
fix: mirror telegram streaming edit safety
XelHaku May 9, 2026
16975d7
web: sync release date alias
XelHaku May 9, 2026
8888d66
feat: add Feishu update prompt cards
XelHaku May 9, 2026
cba7a92
docs: sync release prep target matrix
XelHaku May 9, 2026
4acdc45
feat: add curator archive prune commands
XelHaku May 9, 2026
8dbccff
fix: coerce stringified tool-call arguments
XelHaku May 9, 2026
74b2ffd
feat: add kanban stats command
XelHaku May 9, 2026
3e6ba75
docs: close Kanban operator surface row
XelHaku May 9, 2026
eb5b2d0
feat: add claw cleanup compatibility
XelHaku May 9, 2026
960362e
fix: default top-level logout provider
XelHaku May 9, 2026
0694458
docs: close logout fallback progress row
XelHaku May 9, 2026
31ed4c9
feat: add V4A patch mode to native patch tool
XelHaku May 9, 2026
53dc79b
fix: deliver fast discord final frames
XelHaku May 9, 2026
268ab53
feat: classify minimax oauth provider
XelHaku May 9, 2026
467eaa3
feat: restore fallback provider CLI
XelHaku May 9, 2026
065c99c
fix: align Telegram table row-label rendering
XelHaku May 9, 2026
eab566a
feat: add Google Chat standalone cron sender
XelHaku May 9, 2026
2e54a1a
feat: support V4A patch moves
XelHaku May 9, 2026
15e41bf
chore: sync release benchmark metadata
XelHaku May 9, 2026
4b1ddb5
feat: clear slash confirmations on reset
XelHaku May 9, 2026
d98f67f
Emit JSON for invalid input errors
XelHaku May 9, 2026
b069b6e
Add Kanban notify subscriptions
XelHaku May 9, 2026
8903271
feat: add structured lint evidence to file tools
XelHaku May 9, 2026
13f1251
fix: surface home-tree wildcard under honest `gormes-home` group
XelHaku May 9, 2026
6dc8ee4
fix: emit JSON on cobra typo-with-suggestion under any parent
XelHaku May 9, 2026
8548dff
fix: cover gateway --json edge + install.sh apply-by-default
XelHaku May 9, 2026
7ccc41d
ci: sync Go toolchain floor with go.mod
XelHaku May 9, 2026
c455542
chore: prepare v0.2.1 release metadata
XelHaku May 9, 2026
ff75627
chore: sync benchmark Go floor metadata
XelHaku May 9, 2026
8f6a886
Merge remote-tracking branch 'origin/main' into development
XelHaku May 9, 2026
5cdf918
fix: expand mixed platform toolset composites
XelHaku May 9, 2026
92195a1
fix: align cron auth-header scanner parity
XelHaku May 9, 2026
c8b82e0
docs: rebalance README runtime-first per feedback
XelHaku May 9, 2026
fa24df4
chore: refresh benchmark metadata
XelHaku May 9, 2026
1f753fb
fix: emit subcommand_required JSON for parent --json (no subcommand)
XelHaku May 9, 2026
2a03a39
feat: support Telegram guest mention mode
XelHaku May 9, 2026
2cf52bb
release: prepare v0.2.2 (v2026.5.9)
XelHaku May 9, 2026
aefb657
feat: add python lint evidence to file tools
XelHaku May 9, 2026
623b3c2
fix: notify context engine on session reset
XelHaku May 9, 2026
17f15db
docs: add provider default model progress row
XelHaku May 9, 2026
75d6d6b
fix: refresh Hermes memory guidance
XelHaku May 9, 2026
2fe58a6
fix: resolve provider default models
XelHaku May 9, 2026
45b99ad
docs: complete provider default model row
XelHaku May 9, 2026
ec96747
feat: add OpenRouter Grok affinity header
XelHaku May 9, 2026
8f11335
feat: add Telegram STT fallback resolver
XelHaku May 9, 2026
c45981c
fix: guard Kanban schema migration races
XelHaku May 9, 2026
9392efc
docs: update progress for STT and Kanban rows
XelHaku May 9, 2026
4cc22f3
fix: include Teams in channel capabilities
XelHaku May 9, 2026
3b70b9e
fix: preserve detached Windows gateway interrupts
XelHaku May 9, 2026
02feec3
fix: propagate ACP session cwd
XelHaku May 9, 2026
5eef1fd
fix: refresh Google Chat install hint
XelHaku May 9, 2026
bc7f6a9
feat: add OpenRouter Pareto request plugin
XelHaku May 9, 2026
90527cc
feat: prefer Groq STT transcriber selection
XelHaku May 9, 2026
d42a770
docs: file pure-Go STT exploration row
XelHaku May 9, 2026
4697531
docs: refresh benchmark data
XelHaku May 9, 2026
d6080ea
feat: add kanban worker log command
XelHaku May 9, 2026
295f10f
feat: silence Telegram placeholders by default
XelHaku May 9, 2026
9ed239e
feat: add shell completion command
XelHaku May 9, 2026
3b7d2a9
docs: plan WASI STT path
XelHaku May 9, 2026
7719e49
chore: refresh benchmark metadata
XelHaku May 9, 2026
e474f40
feat: add wazero WASI smoke harness
XelHaku May 9, 2026
c0b50ef
fix: preserve proxy replay metadata
XelHaku May 10, 2026
0854af3
ci: name sbom attestations in release notes
XelHaku May 10, 2026
6491559
fix: add shell lint evidence to file tools
XelHaku May 10, 2026
1f52c59
feat: bind FAL image generation queue API
XelHaku May 10, 2026
87de831
feat: pass gateway photos as image parts
XelHaku May 10, 2026
630a1b1
fix: preserve config comments on set
XelHaku May 10, 2026
316e21c
docs: record parity sweep progress
XelHaku May 10, 2026
2dff0db
fix(provider): classify generic timeout messages
XelHaku May 10, 2026
0a7f8d0
fix: preserve gateway image attachments
XelHaku May 10, 2026
9b4cb4b
feat: add whisper wasi discovery fixture
XelHaku May 10, 2026
02a6632
docs: sync Hermes optional skill mirror
XelHaku May 10, 2026
672ca9a
feat: surface curator rename summaries
XelHaku May 10, 2026
e85a016
chore: log gateway image attachment conversion
XelHaku May 10, 2026
72aa8e2
fix: admit image-only channel turns
XelHaku May 10, 2026
28e3a09
feat: pin kanban board for chat tools
XelHaku May 10, 2026
f893416
feat: add kanban notify delivery engine
XelHaku May 10, 2026
95864c2
web: refresh landing methodology copy
XelHaku May 10, 2026
9b6b78f
feat: add native image path hints
XelHaku May 10, 2026
a212de5
docs: correct image hint row scope
XelHaku May 10, 2026
998768b
ci: align gormes.ai deploy guards with methodology hero
XelHaku May 10, 2026
61f0f7d
chore: refresh benchmark snapshots
XelHaku May 10, 2026
baaafde
feat: retry text-only on vision rejection
XelHaku May 10, 2026
3ac400c
fix: preserve fallback credential aliases
XelHaku May 10, 2026
22ce092
test: allow landing e2e port override
XelHaku May 10, 2026
cee6308
Merge remote-tracking branch 'origin/main' into development
XelHaku May 10, 2026
ab11191
release: prepare v0.2.3 (v2026.5.9)
XelHaku May 10, 2026
a4ab890
Merge remote-tracking branch 'origin/main' into development
XelHaku May 10, 2026
c55961e
Implement image input mode routing
XelHaku May 10, 2026
4c8413e
feat: add native vision tool results
XelHaku May 10, 2026
c39fc3f
feat: add gateway restart notification opt-out
XelHaku May 10, 2026
9c902de
fix: add telegram audio transcription diagnostics
XelHaku May 10, 2026
cb8144d
docs: mirror upstream Hermes user stories
XelHaku May 10, 2026
5f16d66
fix: add stream drop retry diagnostics
XelHaku May 10, 2026
d0d407e
fix: polish kanban slash help UX
XelHaku May 10, 2026
2e1c81e
fix: harden background review skill prompts
XelHaku May 10, 2026
54fdfd6
web: use local Astro binary for landing e2e
XelHaku May 10, 2026
6503128
fix: mirror Codex Spark model metadata
XelHaku May 10, 2026
940ffbb
Add Whisper tiny.en model cache helper
XelHaku May 10, 2026
ede139c
fix(stt): read Groq response as text, matches response_format=text re…
XelHaku May 10, 2026
c1b6358
feat(channels/telegram): expand STT failure diagnostics
XelHaku May 10, 2026
31f15d5
release: prepare v0.2.4 (v2026.5.10)
XelHaku May 10, 2026
a9cc905
feat: add WASI Whisper transcriber
XelHaku May 10, 2026
54fcd36
Merge remote-tracking branch 'origin/main' into development
XelHaku May 10, 2026
bbb1121
fix: parse OpenAI STT text responses
XelHaku May 10, 2026
8aab7de
feat: wire WASI Whisper into Telegram STT
XelHaku May 10, 2026
4c5301b
feat: add WASI Whisper audio preprocessing package
XelHaku May 10, 2026
32abdf8
feat: bind WASI Whisper audio preprocessing
XelHaku May 10, 2026
55db52c
feat: record WASI Whisper benchmark evidence
XelHaku May 10, 2026
236aef9
fix: add patch no-match recovery hints
XelHaku May 10, 2026
55d86b8
feat: add kanban tail event follower
XelHaku May 10, 2026
90f945f
feat: add fuzzy patch replace strategies
XelHaku May 10, 2026
3f3b4ce
fix: normalize unicode fuzzy patch matches
XelHaku May 10, 2026
bd494eb
feat(provider): add stream drop upstream diagnostics
XelHaku May 10, 2026
c26cd4a
test(landing): avoid e2e port collisions
XelHaku May 10, 2026
dbfebf5
fix: guard curator prompt against transient failures
XelHaku May 10, 2026
c4ca8c7
feat: add block-anchor patch matching
XelHaku May 10, 2026
0267b27
fix: fuzzy match V4A patch hunks
XelHaku May 10, 2026
5974cc0
fix: rollback failed v4a patch applies
XelHaku May 10, 2026
2e9e6f1
ci: smoke release binary metadata
XelHaku May 10, 2026
940f91c
fix: bind release date alias to GitHub releases
XelHaku May 10, 2026
ee53c91
feat: add context-aware patch replacement
XelHaku May 10, 2026
e6db938
feat: add Kanban orchestrator board tools
XelHaku May 10, 2026
5dbd504
fix: verify patch replace persistence
XelHaku May 10, 2026
bcab223
fix: stabilize kanban tool list order
XelHaku May 10, 2026
ee03c1c
fix: cover Hermes bundled platform plugins
XelHaku May 10, 2026
2b61a85
fix: harden kanban worker spawn resolution
XelHaku May 10, 2026
3fd5dd0
fix: harden kanban corrupt timestamp reads
XelHaku May 10, 2026
935f911
fix: shape browser console CDP results
XelHaku May 10, 2026
64a5494
feat: expand Hermes i18n locale parity
XelHaku May 10, 2026
81553ed
fix(uninstall): scope to managed home + prefer recoverable trash over…
XelHaku May 10, 2026
cea8737
fix(hermes): collapse double /v1 prefix in OpenAI-compatible URL builder
XelHaku May 10, 2026
cc3d2f4
release: prepare v0.2.5 (v2026.5.10)
XelHaku May 10, 2026
b60a0e3
fix(tooltrace): show URL/query head, not tail, in tool-call previews
XelHaku May 10, 2026
3b7952f
chore(cron): add opencode-tuned prompt for the local-model builder lane
XelHaku May 10, 2026
897b88f
chore(cron): teach opencode prompt about strict tool-call schemas
XelHaku May 10, 2026
b0537e3
docs(progress): plan gateway /model interactive provider/model picker
XelHaku May 10, 2026
b37d072
fix(gateway): align tool-progress preview tests with head-edge trunca…
XelHaku May 11, 2026
855cc74
Merge remote-tracking branch 'origin/main' into development
XelHaku May 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ CI runs `go test ./... -count=1`, `go run ./cmd/progress validate`, and `git dif
| Phase | Status | Shipped |
|-------|--------|---------|
| Phase 1 — The Dashboard | ✅ | 4/4 subphases |
| Phase 2 — The Gateway | | 21/21 subphases |
| Phase 2 — The Gateway | 🔨 | 20/21 subphases |
| Phase 3 — The Black Box (Memory) | ✅ | 15/15 subphases |
| Phase 4 — The Brain Transplant | ✅ | 13/13 subphases |
| Phase 5 — The Final Purge | 🔨 | 18/23 subphases |
Expand Down
14 changes: 7 additions & 7 deletions internal/gateway/render_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ func TestFormatToolProgressPlain_ToolTraceFixtureMatrix(t *testing.T) {
}
}

func TestFormatToolProgressPlain_TruncatedWebPreviewsKeepRightEdge(t *testing.T) {
func TestFormatToolProgressPlain_TruncatedWebPreviewsKeepLeftEdge(t *testing.T) {
f := kernel.RenderFrame{SoulEvents: []kernel.SoulEntry{
{At: time.Now(), Text: "tool: web_extract: https://docs.openclaw.ai/concepts/multi-agent"},
{At: time.Now(), Text: "tool: browser_navigate: https://docs.openclaw.ai/concepts/multi-agent"},
Expand All @@ -139,12 +139,12 @@ func TestFormatToolProgressPlain_TruncatedWebPreviewsKeepRightEdge(t *testing.T)

got := FormatToolProgressPlain(f)
for _, want := range []string{
`📄 web_extract: "...docs.openclaw.ai/concepts/multi-agent"`,
`🌐 browser_navigate: "...docs.openclaw.ai/concepts/multi-agent"`,
`🔍 web_search: "...concepts/multi-agent strings in tools"`,
`📄 web_extract: "https://docs.openclaw.ai/concepts/mul..."`,
`🌐 browser_navigate: "https://docs.openclaw.ai/concepts/mul..."`,
`🔍 web_search: "site:docs.openclaw.ai/concepts/multi-..."`,
} {
if !strings.Contains(got, want) {
t.Fatalf("FormatToolProgressPlain missing right-edge preview %q in:\n%s", want, got)
t.Fatalf("FormatToolProgressPlain missing left-edge preview %q in:\n%s", want, got)
}
}
}
Expand Down Expand Up @@ -191,8 +191,8 @@ func TestFormatToolProgressPlain_MineruGatewayTranscriptShape(t *testing.T) {
for _, want := range []string{
`📚 skill_view: "gormes-hermes-parity"`,
`⏰ cronjob: "list"`,
`🌐 browser_navigate: "...www.reddit.com/r/WebAfterAI/s/example"`,
`🌐 browser_navigate: "...old.reddit.com/r/WebAfterAI/s/example"`,
`🌐 browser_navigate: "https://www.reddit.com/r/WebAfterAI/s..."`,
`🌐 browser_navigate: "https://old.reddit.com/r/WebAfterAI/s..."`,
`💻 terminal: "curl -L https://example.test/post.json"`,
`📸 browser_snapshot...`,
`💻 terminal: "curl -L https://example.test/post.json" (×2)`,
Expand Down
8 changes: 6 additions & 2 deletions internal/progress/progress_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -459,8 +459,12 @@ func TestLoad_RealFile_Phase2ExecutionQueue(t *testing.T) {
if routing.Priority != "P1" {
t.Fatalf("Phase 2.B.5 priority = %q, want P1", routing.Priority)
}
if got := routing.DerivedStatus(); got != StatusComplete {
t.Fatalf("Phase 2.B.5 = %q, want complete — all session-context and delivery-routing rows shipped", got)
switch got := routing.DerivedStatus(); got {
case StatusComplete, StatusInProgress:
// complete or reopened by a newly discovered gateway slash-handler
// gap such as `Gateway /model interactive provider/model picker`
default:
t.Fatalf("Phase 2.B.5 = %q, want complete or in_progress", got)
}
routingItems := itemsByName(routing.Items)
topicCloseout := routingItems["Telegram topic mode off/help/auth/debounce closeout"]
Expand Down
7 changes: 6 additions & 1 deletion internal/tooltrace/tooltrace.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,8 +196,13 @@ func quoteAndTruncate(toolName, s string, limit int) string {
}

func rightEdgePreviewTool(name string) bool {
// File-path arguments keep the tail (filename matters more than the
// directory chain). URLs and search queries keep the head: the domain
// or the first words of the query are the user-meaningful part, and a
// `"...et.com/market-data/..."` preview hides which site Gormes is
// actually visiting.
switch strings.TrimSpace(name) {
case "web_search", "web_extract", "web_crawl", "browser_navigate", "read_file", "write_file", "patch":
case "read_file", "write_file", "patch":
return true
default:
return false
Expand Down
55 changes: 55 additions & 0 deletions internal/tooltrace/tooltrace_preview_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package tooltrace

import "testing"

// Live regression 2026-05-10: an operator on Telegram saw tool-call previews
// rendered as `🔍 web_search: "...et docs websocket WSS Quickstart CLOB"`
// and `📄 web_extract: "...et.com/market-data/websocket/overview"`. Both
// hide the user-meaningful start (the search query's first words and the
// URL's domain) behind a leading "...". Search queries and URLs must keep
// their head; only file-path tool args (read_file/write_file/patch) keep
// the tail because the filename usually matters more than the directory
// chain.

func TestFormatPlain_PreservesUrlAndQueryHead(t *testing.T) {
cases := []struct {
name string
in string
want string
}{
{
name: "web_search keeps head of query",
in: "tool: web_search: polymarket docs websocket WSS Quickstart CLOB",
want: `🔍 web_search: "polymarket docs websocket WSS Quickst..."`,
},
{
name: "web_extract keeps domain at head of URL",
in: "tool: web_extract: https://docs.polymarket.com/market-data/websocket/overview",
want: `📄 web_extract: "https://docs.polymarket.com/market-da..."`,
},
{
name: "browser_navigate keeps domain at head of URL",
in: "tool: browser_navigate: https://docs.polymarket.com/market-data/websocket/overview",
want: `🌐 browser_navigate: "https://docs.polymarket.com/market-da..."`,
},
{
name: "read_file keeps tail (filename)",
in: "tool: read_file: internal/channels/telegram/document_cache.go",
want: `📖 read_file: "...l/channels/telegram/document_cache.go"`,
},
{
name: "write_file keeps tail (filename)",
in: "tool: write_file: internal/channels/telegram/document_cache.go",
want: `🔧 write_file: "...l/channels/telegram/document_cache.go"`,
},
}

for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
got := FormatPlain(tc.in)
if got != tc.want {
t.Fatalf("FormatPlain(%q)\n got: %s\nwant: %s", tc.in, got, tc.want)
}
})
}
}
87 changes: 85 additions & 2 deletions scripts/gormes-builder-cron.sh
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,85 @@ sync_development_branch() {
die "$BRANCH diverged from origin/$BRANCH; skipping automated builder run"
}

opencode_prompt() {
cat <<'PROMPT'
You are an autonomous coding agent (opencode + a local ollama model — typically
qwen3-coder:30b MoE) running from cron inside the Gormes repository. The
codexu/codex backend is rate-limited until 2026-05-14, so this loop is keeping
forward motion with a smaller local model. Bias toward small, safe, finished
work over big plans.

Skill loading
- The repo's gormes-* skills are SKILL.md instruction files, not MCP servers.
- Use the `skill` tool to load a skill by name (e.g. `skill gormes-git`). The
tool returns the SKILL.md content; read it and follow the instructions
manually. Do NOT call `skill_mcp` for these — they have no MCP endpoint.
- The full skill catalog is under docs/development-skills/gormes-*/SKILL.md.
The same files are symlinked into ~/.config/opencode/skills/ for
discoverability.

Tool-schema reminders (opencode is strict about these — wrong shape = no-op)
- `bash`: REQUIRES both `command` (the shell command) and `description` (one
short sentence describing what it does). Omitting `description` errors out.
- `read`: takes `file_path` (absolute path preferred).
- `edit`: takes `file_path`, `old_string`, `new_string`. The old_string must
match exactly (whitespace + newlines included) and be unique in the file.
- `write`: takes `file_path` and `content`. Use only for new files; prefer
`edit` for changes to existing files.
- When in doubt, run a single `bash` with `git status --short` first — it is
the cheapest way to ground yourself in the worktree state.

Mandatory branch + safety rules
- Stay on the existing `development` branch only. Do not create branches or
worktrees. If HEAD is not `development`, stop and report the blocker.
- Preserve any user or parallel-agent changes you find. If you do not
understand untracked files (IDENTITY.md, SOUL.md, TOOLS.md, memory/*, etc.),
leave them alone — they are not your work.
- Never force-push. Never bypass hooks. Never recreate cmd/planner-loop or
cmd/builder-loop.

Single focused goal per cycle (pick the FIRST that applies)

1. Worktree is dirty with YOUR previous-cycle work?
Load `gormes-git`, follow it to commit + push only the files you authored
this cycle (skip unfamiliar untracked files). Then exit cleanly.

2. Worktree is dirty with files you cannot attribute to yourself?
Do not touch them. Run `go test ./... -count=1` and report the result.
Exit cleanly. Leave the worktree as you found it.

3. Worktree is clean and you can read progress.json?
Pick ONE small, builder-ready row from
docs/content/building-gormes/architecture_plan/progress.json (priority P1
or P2, slice_size small, contract_status ready, blocked_by empty). Load
`gormes-builder` and `gormes-tdd-slice`, follow them to implement that
one row with a red→green→refactor loop. Run `go run ./cmd/progress
validate` and `git diff --check` afterwards. If validation fails, fix
the validation only (do not chase scope creep).

4. You are unsure or any tool returns confusing output?
Stop. Write a one-line summary of what you tried and what blocked you.
Exit with status 0 — the next cron tick is in 60s, the user can read
the log.

Hard constraints
- Do exactly ONE bounded thing this cycle. Do not chain row-implementation +
parity sweep + planner work.
- Do NOT add new progress.json rows. Do NOT do parity audits. Those are for
the codex backend which has the cognitive headroom.
- If a step requires more than ~5 tool calls to complete, you are over your
size budget. Save what you have and exit.
- Run validation gates immediately after edits, not at the end of a long
chain — partial green is better than untested wholeness.
- Do not edit files outside the row's `write_scope`. If the row's scope is
unclear, fall back to goal #4 (report and exit).

When you cannot continue
- Use plain text "I am stopping because: <reason>". Do not pretend success.
- Exit. The cron wrapper will retry in 60 seconds.
PROMPT
}

codex_prompt() {
cat <<'PROMPT'
You are Codex running from cron inside the Gormes repository.
Expand Down Expand Up @@ -171,15 +250,19 @@ main() {

if [[ "${1:-}" == "--dry-run" ]]; then
log "dry run: would execute $BACKEND builder prompt with timeout $RUN_TIMEOUT"
codex_prompt
if [[ "$BACKEND" == "opencode" ]]; then
opencode_prompt
else
codex_prompt
fi
exit 0
fi

set +e
local status
if [[ "$BACKEND" == "opencode" ]]; then
local opencode_log="$LOG_DIR/$RUN_ID.opencode.jsonl"
codex_prompt | timeout "$RUN_TIMEOUT" "$resolved_bin" run \
opencode_prompt | timeout "$RUN_TIMEOUT" "$resolved_bin" run \
--model "$OPENCODE_MODEL" \
--dir "$REPO_ROOT" \
--format json \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,12 @@ classification and row-backed implementation queue.
## Progress

<!-- PROGRESS:START kind=docs-full-checklist -->
**Overall:** 87/100 subphases shipped · 10 in progress · 3 planned
**Overall:** 86/100 subphases shipped · 11 in progress · 3 planned

| Phase | Status | Shipped |
|-------|--------|---------|
| Phase 1 — The Dashboard | ✅ | 4/4 subphases |
| Phase 2 — The Gateway | | 21/21 subphases |
| Phase 2 — The Gateway | 🔨 | 20/21 subphases |
| Phase 3 — The Black Box (Memory) | ✅ | 15/15 subphases |
| Phase 4 — The Brain Transplant | ✅ | 13/13 subphases |
| Phase 5 — The Final Purge | 🔨 | 18/23 subphases |
Expand Down Expand Up @@ -136,7 +136,7 @@ classification and row-backed implementation queue.
- [x] Skill-pack coverage audit for Hermes-in-Go completion
- [x] Canonical development-skills directory and loader symlinks

## Phase 2 — The Gateway
## Phase 2 — The Gateway 🔨

*Go-native operator wiring harness: tools, Telegram, shared gateway chassis, shipped cron, and the first OS-AI spine slices before focused channel closeout*

Expand Down Expand Up @@ -180,7 +180,7 @@ classification and row-backed implementation queue.
- [x] WhatsApp outbound pairing gate + raw peer mapping
- [x] WhatsApp reconnect backoff + send retry policy

### 2.B.5 — Session Context + Delivery Routing
### 2.B.5 — Session Context + Delivery Routing 🔨

- [x] Gateway session store + SessionSource parity
- [x] Gateway manual reset session-boundary hooks
Expand Down Expand Up @@ -261,6 +261,7 @@ classification and row-backed implementation queue.
- [x] Telegram streaming edit Markdown safety
- [x] Telegram guest mention allowlist bypass
- [x] Gateway platform reconnect isolation + channel health limits
- [ ] Gateway /model interactive provider/model picker

### 2.B.10 — WeChat Adapter ✅

Expand Down
Loading
Loading