@sorenllm/opencode-forge 0.14.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -80,7 +80,17 @@ entirely (the hide is withdrawn in the same stroke). The forge family is
80
80
  prompted to route every shell command through `forge_shell` — on hosts that
81
81
  ignore injected tools maps the builtin tool stays visible but is refused at
82
82
  call time, and the channel mandate is what keeps the model from trying it
83
- first (the belt refusal remains the backstop). Mixed sessions (Tab
83
+ first (the belt refusal remains the backstop). On such unfiltered hosts the
84
+ fallback belt family is a three-part enumeration of hard refusals at the
85
+ tool layer: a forge-family builtin `shell`/`bash` call is refused with a
86
+ pointer to `forge_shell`; a non-forge agent's call of any forge tool is
87
+ refused with the partition guidance; and a `forge-*` worker (any family
88
+ member whose agent name is not exactly `forge`) calling a harness state tool
89
+ (`plan_*`, `goal_*`, `crew_begin`, `crew_close`) is refused as primary-only.
90
+ That refusal fires before any execution or user confirmation dialog, so a
91
+ worker's state-tool call never reaches a gate, and the error names the way
92
+ out: report findings back to the orchestrating session — the primary forge
93
+ agent alone calls the state tools. Mixed sessions (Tab
84
94
  between agents in one session): harness state (plans/goals) stays
85
95
  session-bound, tool surfaces follow the current speaker, and the goal loop
86
96
  parks instead of driving a non-forge turn. One deliberate exception: a
package/dist/index.js CHANGED
@@ -15824,6 +15824,7 @@ var FORGE_STATE_TOOLS = [
15824
15824
  var FORGE_EXEC_TOOLS = ["forge_shell", "forge_jobs"];
15825
15825
  var FORGE_ALL_TOOLS = [...FORGE_STATE_TOOLS, ...FORGE_EXEC_TOOLS];
15826
15826
  var FORGE_TOOL_SET = new Set(FORGE_ALL_TOOLS);
15827
+ var FORGE_STATE_TOOL_SET = new Set(FORGE_STATE_TOOLS);
15827
15828
  var NATIVE_PARTITION_FALLBACKS = ["build", "plan", "general", "explore"];
15828
15829
  var FORGE_PROMPT = `You are forge — the single general-purpose coding agent. You handle every task directly: exploration, planning, implementation, and verification. There is no agent switching.
15829
15830
 
@@ -17598,6 +17599,9 @@ var server = async (input, options) => {
17598
17599
  if (isForgeFamilyAgent(speaker) && (input2.tool === "shell" || input2.tool === "bash") && !jobsKeepBuiltinShell && jobStage() < 2) {
17599
17600
  throw new Error(`[forge:partition] Builtin shell refused: the forge family executes through forge_shell (jobs.keepBuiltinShell or jobs.mode: "native" restores the builtin shell). Re-issue the command through forge_shell.`);
17600
17601
  }
17602
+ if (isForgeFamilyAgent(speaker) && speaker.toLowerCase() !== FORGE_AGENT && FORGE_STATE_TOOL_SET.has(input2.tool)) {
17603
+ throw new Error(`[forge:partition] Tool refused: "${input2.tool}" is a harness state tool reserved for the primary forge agent; "${speaker}" is a forge worker. Report your findings back to the orchestrating session — the primary agent calls ${input2.tool} at the gate.`);
17604
+ }
17601
17605
  }
17602
17606
  }
17603
17607
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sorenllm/opencode-forge",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "description": "Single general-purpose forge agent for opencode: static worker subagents defined in forge.json (pinned model + thoughtLevel pair, or an Auto worker inheriting the parent model; dispatched through the native task tool — TUI-visible), a plan harness (file-backed plans with approve/close confirmation gates and a hard draft write-ban), a goal harness (autonomous, host-verified objectives), a /crew orchestration command (declared-plan waves with an evidence-checked close gate), a job supervisor (forge_shell with exit-bound completion, idle/success early return, background jobs with poll/log/kill/handoff), and a builtin-shell hang watchdog.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",