fix: chat actually runs solves — inject AGENTS.md via opencode instructions - #12
Conversation
jack-champagne
left a comment
There was a problem hiding this comment.
Gave it a look — right fix, and it closes the real β.3 gap where the chat never actually ran a solve (AGENTS.md was written where opencode never read it). The injection path is now tested (opencode_config.test.ts), CI green. Nothing blocking.
Taste / non-blocking
resolveJuliaProjectdoesn't expand a leading~, soamicode.juliaProject=~/fooreaches--projectliterally; the siblingresolveRunsRootalready handles~.boot_smoke.mjsstill synthesizes the pre-fix config layout — harmless (liveness gate only) but stale.
| * does NOT catch — hence an explicit empty check rather than a nullish one.) */ | ||
| export function resolveJuliaProject(configValue: string): string { | ||
| const v = configValue.trim(); | ||
| return v === "" ? path.join(os.homedir(), ".amico", "julia") : v; |
There was a problem hiding this comment.
Doesn't expand a leading ~ — ~/foo reaches --project literally. resolveRunsRoot already handles this.
…tually runs solves
The chat behaved like vanilla opencode — 'exploring the codebase', never
authoring a script or running amico-run, so the Run Inspector was never fed.
Root cause: the extension wrote AGENTS.md into a temp project dir, but
opencode runs the chat session in the VS Code workspace folder (e.g. ~/amico),
which has no AGENTS.md — so the amico solve workflow never reached the agent.
Fix (directory-independent): inject the amico AGENTS.md via opencode's
`instructions` config, loaded for every session regardless of its cwd.
- buildOpencodeConfigContent(agentsPath) → OPENCODE_CONFIG_CONTENT spawn env;
merges over the user's global config (Bedrock model/provider preserved).
- AGENTS.md references the template by absolute {{TEMPLATE_PATH}} (session cwd
is the workspace, not the temp dir); solve script already goes to /tmp.
- resolveJuliaProject defaults to ~/.amico/julia when unset (the VS Code config
default '' slipped past the old `?? "UNSET"`, rendering a blank --project).
- Drop the now-vestigial temp-dir template copy + .opencode/opencode.json.
Verified: /config shows instructions merged with the global model; and a live
probe in an empty workspace (no AGENTS.md) had the agent answer 'help a
quantum-control researcher synthesize optimal-control pulses with Piccolo...'
— the injected persona, confirming directory-independent delivery.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2363f8c to
ddec597
Compare
a8277e4 to
c7dd17b
Compare
…ck review nits The real "plots never display" bug: LiveRunSink shared one counter between image() and iter(). run.log AMICODE_ITER lines stream once per iteration and race the counter to max BEFORE the lagging PNG frames land (solver logs iter=k, then writes iter_k.png), so every image() hit `k <= latest` and was dropped — blank inspector for the whole solve. Split into SinkDedup: frames dedup only against frames; log lines advance a separate high-water mark for the status bar. Extracted SinkDedup to the pure, vscode-free run_dir_reader layer so the live path is finally unit-tested (Jack #9: "no test covering the live status-bar / incremental inspector path" — the exact gap this regression slipped through). Also folds in the remaining non-blocking review nits (kept here rather than restacking the 7-deep chain to place one-liners on their home branches): - #13: #runlabel was styled but never populated → setRunLabel + webview handler. - #12: resolveJuliaProject now expands a leading ~ (parity with resolveRunsRoot). - #9: server_manager ServerOptions.env comment no longer cites the removed AMICODE_EXTENSION_URL/MCP-callback env. - #9/#11: AGENTS.md step-2 author path now matches step-3 run path (/tmp/amicode-work/solve.jl) and the invocation passes --lab default (run provenance — amico-run supports --lab). Plus the cold-start display polish already in flight on this branch: launch stays idle for a prior finished run (no stale plot), and the placeholder toggles via style.display (the [hidden] attr was overridden by .placeholder{display:flex}). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
@jack-champagne both non-blocking items noted — the |
|
Instruction-injection fix is right —
|
jack-champagne
left a comment
There was a problem hiding this comment.
Approving — the instruction-injection fix is correct. One thing to fix soon (not blocking the unit): boot_smoke.mjs is now a stale/false-green test — see comment above.
Fixes the amicode chat behaving like vanilla opencode — it "explored the codebase" and never authored a script or ran
amico-run, so the Run Inspector was never fed. Stacked on #11 (β.6); baserchari/beta6-demo.Root cause (from
~/.local/share/opencode/log)The extension writes the amico
AGENTS.md(the "author a Julia script → runamico-run" workflow) into a temp project dir and startsopencode servethere. But opencode loads agent instructions from the session's working directory, and its embedded web UI runs the session in the VS Code workspace folder (observedcwd=/Users/raghavchari/amico), which has noAGENTS.md. So the agent got zero amico context → generic opencode exploring the vault, never touchingsolve_template.jloramico-run. Secondary:amicode.juliaProject's""default slipped past?? "UNSET", rendering a blank--project.Fix — directory-independent instruction injection
Inject the amico
AGENTS.mdvia opencode'sinstructionsconfig, which is loaded for every session regardless of cwd:buildOpencodeConfigContent(agentsPath)→OPENCODE_CONFIG_CONTENTspawn env. Verified empirically that this merges over the user's global config — the Bedrock model/provider survive,instructionsis added.{{TEMPLATE_PATH}}placeholder inAGENTS.mdsubstituted to the bundled absolute template path (session cwd is the workspace, not the temp dir). The solve script already writes to/tmp/amicode-work, so it's cwd-independent.resolveJuliaProject(config)defaults to~/.amico/julia(the β.4-provisioned project) when unset..opencode/opencode.json.No vault pollution, no clobbering the user's opencode config — just one spawn-env var.
Verification
resolveJuliaProject(default + trim),buildOpencodeConfigContent,{{TEMPLATE_PATH}}/{{JULIA_PROJECT}}substitution with no residual placeholders, no temp-dir copy/.opencodewrite, and the AGENTS.md absolute-path guard.AGENTS.md);GET /configshowedinstructions:[…/AGENTS.md]and the global Bedrockmodel(merge confirmed).amico-runsolve-execution path itself is already proven in β.6: demo dry-run + failure fallback (closes #6) #11 Task 6 at F=0.9998. A full live solve turn intermittently stalls on Bedrock streaming — environmental, unrelated to this change.)🤖 Generated with Claude Code