openfox 2.0.131 → 2.0.133

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/CHANGELOG.md +30 -0
  3. package/dist/agent-defaults/code-reviewer.agent.md +1 -0
  4. package/dist/agent-defaults/explorer.agent.md +1 -0
  5. package/dist/agent-defaults/verifier.agent.md +1 -0
  6. package/dist/{chat-handler-RAIMQU7F.js → chat-handler-T47GATL5.js} +8 -8
  7. package/dist/{chunk-ZVHUISW7.js → chunk-5JWJEZJ3.js} +2 -2
  8. package/dist/{chunk-7LGMQ5KS.js → chunk-A7CB4USC.js} +8 -8
  9. package/dist/{chunk-QJG5K3X2.js → chunk-CLDCHOEA.js} +2 -2
  10. package/dist/{chunk-ZCFQOC3C.js → chunk-FEIRWXLX.js} +2 -2
  11. package/dist/{chunk-WCM5ZW5N.js → chunk-GFW2HWJ6.js} +4 -4
  12. package/dist/{chunk-5AI3LHRQ.js → chunk-HXHPKGJE.js} +5 -5
  13. package/dist/chunk-JKGHTBEV.js +7 -0
  14. package/dist/{chunk-55DGZIZ6.js → chunk-OMMPTN6X.js} +4 -4
  15. package/dist/{chunk-6MUSEPV7.js → chunk-OUQZZEIQ.js} +43 -34
  16. package/dist/{chunk-RQPHGBWI.js → chunk-P5MSY7ZI.js} +26 -12
  17. package/dist/{chunk-6SUBBT2M.js → chunk-RRUSYVQD.js} +2 -2
  18. package/dist/{chunk-SVALN5KE.js → chunk-VXG3AFFY.js} +7 -8
  19. package/dist/cli/dev.js +1 -1
  20. package/dist/cli/index.js +1 -1
  21. package/dist/{client-E6QLHPHD.js → client-2K6PPPJJ.js} +2 -2
  22. package/dist/{dynamic-context-Y555VDLA.js → dynamic-context-NJZKAZE3.js} +2 -2
  23. package/dist/{launch-Y4H7FDU2.js → launch-UKXVO37B.js} +8 -8
  24. package/dist/{orchestrator-SQN2SJ2A.js → orchestrator-GX22Y5EM.js} +7 -7
  25. package/dist/package.json +1 -1
  26. package/dist/{processor-MEHODYNE.js → processor-V35OLKRV.js} +22 -7
  27. package/dist/{provider-6YRII4IV.js → provider-NWRGNGS3.js} +3 -3
  28. package/dist/{provider-manager-URNJBK5Q.js → provider-manager-BO5ZBG3T.js} +3 -3
  29. package/dist/{serve-NPADSJG7.js → serve-XRVT3D7Z.js} +12 -12
  30. package/dist/server/index.js +11 -11
  31. package/dist/{server-5TY22HDN.js → server-GXMZMPXI.js} +10 -10
  32. package/dist/{service-VPXGREXF.js → service-O3LCO3TQ.js} +4 -4
  33. package/dist/{tasks-MNPXK2S5.js → tasks-WOC3QUFA.js} +4 -4
  34. package/dist/{tools-6BDT5YMT.js → tools-CW6POKUL.js} +5 -5
  35. package/dist/{update-XKCOBE47.js → update-VC3Y3EOP.js} +2 -2
  36. package/dist/web/assets/index-ATAQvBwl.js +312 -0
  37. package/dist/web/index.html +1 -1
  38. package/dist/web/sw.js +1 -1
  39. package/package.json +1 -1
  40. package/dist/chunk-BMBOSVRM.js +0 -7
  41. package/dist/web/assets/index-Bx5r3aJx.js +0 -310
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.133 - 2026-08-30
4
+
5
+ ### Features
6
+
7
+ - **Edit providers straight from model selectors** — a pencil button on each provider group header opens the editor without digging through settings
8
+ - **Sub-agents can load skills** — explorer, verifier, and code reviewer now use the load_skill tool
9
+
10
+ ### Enhancements
11
+
12
+ - **Smoother workflow completion nudge** — when a step's transition condition is already satisfied, the agent gets a short "call step_done" reminder instead of the verbose prompt
13
+ - **Faster settings and config loading** — shared caching dedupes and single-flights resource requests
14
+
15
+ ### Bug Fixes
16
+
17
+ - **Stale blocked-workflow message cleared** — starting a plain chat turn no longer leaves a "retry to continue" step message behind
18
+ - **Workflow template-variable suggestions load again** — the editor no longer hits a 404
19
+ - **Duplicate and Customize creates a real copy** — no longer overwrites the original command
20
+ - **No more 401s on the login page** — settings requests no longer fire before sign-in
21
+
22
+ ## 2.0.132 - 2026-08-28
23
+
24
+ ### Enhancements
25
+
26
+ - **Deterministic workspace commit-and-push flow** — landing workspace changes is now an unconditional recipe: push a temp branch, merge back into the original repo, then delete the workspace and push to the remote
27
+
28
+ ### Bug Fixes
29
+
30
+ - **OpenCode Go models work on unset backends** — gpt-5.6-luna, grok-4.6 and muse-spark route to the Responses API even when the provider backend is unknown, instead of being rejected with HTTP 400
31
+ - **Agent now calls newly added tools** — drift reminders explicitly tell the agent that fresh MCP tools are callable like any other tool
32
+
3
33
  ## 2.0.131 - 2026-08-28
4
34
 
5
35
  ### Enhancements
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.133 - 2026-08-30
4
+
5
+ ### Features
6
+
7
+ - **Edit providers straight from model selectors** — a pencil button on each provider group header opens the editor without digging through settings
8
+ - **Sub-agents can load skills** — explorer, verifier, and code reviewer now use the load_skill tool
9
+
10
+ ### Enhancements
11
+
12
+ - **Smoother workflow completion nudge** — when a step's transition condition is already satisfied, the agent gets a short "call step_done" reminder instead of the verbose prompt
13
+ - **Faster settings and config loading** — shared caching dedupes and single-flights resource requests
14
+
15
+ ### Bug Fixes
16
+
17
+ - **Stale blocked-workflow message cleared** — starting a plain chat turn no longer leaves a "retry to continue" step message behind
18
+ - **Workflow template-variable suggestions load again** — the editor no longer hits a 404
19
+ - **Duplicate and Customize creates a real copy** — no longer overwrites the original command
20
+ - **No more 401s on the login page** — settings requests no longer fire before sign-in
21
+
22
+ ## 2.0.132 - 2026-08-28
23
+
24
+ ### Enhancements
25
+
26
+ - **Deterministic workspace commit-and-push flow** — landing workspace changes is now an unconditional recipe: push a temp branch, merge back into the original repo, then delete the workspace and push to the remote
27
+
28
+ ### Bug Fixes
29
+
30
+ - **OpenCode Go models work on unset backends** — gpt-5.6-luna, grok-4.6 and muse-spark route to the Responses API even when the provider backend is unknown, instead of being rejected with HTTP 400
31
+ - **Agent now calls newly added tools** — drift reminders explicitly tell the agent that fresh MCP tools are callable like any other tool
32
+
3
33
  ## 2.0.131 - 2026-08-28
4
34
 
5
35
  ### Enhancements
@@ -9,6 +9,7 @@ allowedTools:
9
9
  - run_command
10
10
  - web_fetch
11
11
  - session_metadata
12
+ - load_skill
12
13
  ---
13
14
 
14
15
  You are a code reviewer. Review the **git diff** of the modified files rather than reading the full files.
@@ -8,6 +8,7 @@ allowedTools:
8
8
  - read_file
9
9
  - run_command
10
10
  - web_fetch
11
+ - load_skill
11
12
  ---
12
13
 
13
14
  You are a codebase exploration expert.
@@ -9,6 +9,7 @@ allowedTools:
9
9
  - run_command
10
10
  - session_metadata
11
11
  - web_fetch
12
+ - load_skill
12
13
  ---
13
14
 
14
15
  You are a code reviewer performing independent verification.
@@ -2,14 +2,14 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
- } from "./chunk-6SUBBT2M.js";
5
+ } from "./chunk-RRUSYVQD.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-WCM5ZW5N.js";
9
- import "./chunk-5AI3LHRQ.js";
8
+ } from "./chunk-GFW2HWJ6.js";
9
+ import "./chunk-HXHPKGJE.js";
10
10
  import "./chunk-XE6UC5Z3.js";
11
11
  import "./chunk-J7GAZGZT.js";
12
- import "./chunk-ZCFQOC3C.js";
12
+ import "./chunk-FEIRWXLX.js";
13
13
  import "./chunk-TACWRDDC.js";
14
14
  import "./chunk-7ET46SNE.js";
15
15
  import "./chunk-LW6MMSTD.js";
@@ -17,7 +17,7 @@ import "./chunk-MQMPIXON.js";
17
17
  import "./chunk-I72ACQ6R.js";
18
18
  import "./chunk-JE7LW7Y6.js";
19
19
  import "./chunk-OAN4BXEW.js";
20
- import "./chunk-SVALN5KE.js";
20
+ import "./chunk-VXG3AFFY.js";
21
21
  import "./chunk-BKMWZTNO.js";
22
22
  import "./chunk-7JVBDBXE.js";
23
23
  import "./chunk-JURM3RPZ.js";
@@ -36,11 +36,11 @@ import {
36
36
  } from "./chunk-P57IBMK4.js";
37
37
  import "./chunk-LCLH6ZUL.js";
38
38
  import "./chunk-MGEYAYGU.js";
39
- import "./chunk-ZVHUISW7.js";
39
+ import "./chunk-5JWJEZJ3.js";
40
40
  import "./chunk-OA2FURC3.js";
41
41
  import "./chunk-J2GP3J3X.js";
42
42
  import "./chunk-DPFET73G.js";
43
- import "./chunk-QJG5K3X2.js";
43
+ import "./chunk-CLDCHOEA.js";
44
44
  import "./chunk-TS5WKTFB.js";
45
45
  import "./chunk-UV6IH6HK.js";
46
46
  import "./chunk-HNCM3D7Y.js";
@@ -174,4 +174,4 @@ export {
174
174
  startChatSession,
175
175
  stopSessionExecution
176
176
  };
177
- //# sourceMappingURL=chat-handler-RAIMQU7F.js.map
177
+ //# sourceMappingURL=chat-handler-T47GATL5.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-OA2FURC3.js";
5
5
  import {
6
6
  createLLMClient
7
- } from "./chunk-QJG5K3X2.js";
7
+ } from "./chunk-CLDCHOEA.js";
8
8
  import {
9
9
  getModelProfile
10
10
  } from "./chunk-TS5WKTFB.js";
@@ -895,4 +895,4 @@ export {
895
895
  parseDefaultModelSelection,
896
896
  createProviderManager
897
897
  };
898
- //# sourceMappingURL=chunk-ZVHUISW7.js.map
898
+ //# sourceMappingURL=chunk-5JWJEZJ3.js.map
@@ -2,16 +2,16 @@ import {
2
2
  generateSessionNameForSession,
3
3
  getSessionMessageCount,
4
4
  needsNameGeneration
5
- } from "./chunk-6SUBBT2M.js";
5
+ } from "./chunk-RRUSYVQD.js";
6
6
  import {
7
7
  launchWorkflowRun
8
- } from "./chunk-RQPHGBWI.js";
8
+ } from "./chunk-P5MSY7ZI.js";
9
9
  import {
10
10
  runChatTurn
11
- } from "./chunk-WCM5ZW5N.js";
11
+ } from "./chunk-GFW2HWJ6.js";
12
12
  import {
13
13
  devServerManager
14
- } from "./chunk-5AI3LHRQ.js";
14
+ } from "./chunk-HXHPKGJE.js";
15
15
  import {
16
16
  gitSpawnEnv
17
17
  } from "./chunk-J7GAZGZT.js";
@@ -32,7 +32,7 @@ import {
32
32
  applyDynamicContext,
33
33
  computeSessionHash,
34
34
  computeUnifiedDiff
35
- } from "./chunk-SVALN5KE.js";
35
+ } from "./chunk-VXG3AFFY.js";
36
36
  import {
37
37
  getPendingQuestionsForSession,
38
38
  provideAnswer
@@ -1313,7 +1313,7 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1313
1313
  }
1314
1314
  const session = sessionManager.requireSession(sessionId);
1315
1315
  try {
1316
- const { buildCachedPrompt, computePreviewToolDiff } = await import("./dynamic-context-Y555VDLA.js");
1316
+ const { buildCachedPrompt, computePreviewToolDiff } = await import("./dynamic-context-NJZKAZE3.js");
1317
1317
  const allAgents = await import("./registry-CMSSZHDC.js");
1318
1318
  const agentDef = allAgents.findAgentById(session.mode, await allAgents.loadAllAgentsDefault()) ?? allAgents.findAgentById("planner", await allAgents.loadAllAgentsDefault());
1319
1319
  const modelName = session.providerModel ?? _providerManager?.getCurrentModel();
@@ -1325,7 +1325,7 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1325
1325
  const oldCached = sessionManager.getCachedPrompt(sessionId);
1326
1326
  const oldPrompt = oldCached?.systemPrompt;
1327
1327
  const diff = oldPrompt ? computeUnifiedDiff(oldPrompt, newPrompt) : [];
1328
- const { getToolRegistryForAgent } = await import("./tools-6BDT5YMT.js");
1328
+ const { getToolRegistryForAgent } = await import("./tools-CW6POKUL.js");
1329
1329
  const unfilteredTools = getToolRegistryForAgent(agentDef).definitions;
1330
1330
  const toolDiff = computePreviewToolDiff(oldCached?.tools, unfilteredTools, newTools);
1331
1331
  send({
@@ -1642,4 +1642,4 @@ export {
1642
1642
  signalMcpReady,
1643
1643
  createWebSocketServer
1644
1644
  };
1645
- //# sourceMappingURL=chunk-7LGMQ5KS.js.map
1645
+ //# sourceMappingURL=chunk-A7CB4USC.js.map
@@ -46,7 +46,7 @@ function resolveApiProtocol(input) {
46
46
  const { model, backend, profileApiProtocol, explicitApiProtocol } = input;
47
47
  if (explicitApiProtocol) return explicitApiProtocol;
48
48
  if (backend === "openai" && profileApiProtocol) return profileApiProtocol;
49
- if (backend === "opencode-go") {
49
+ if (backend === "opencode-go" || backend === "unknown") {
50
50
  const matched = matchesRules(model, OPENCODE_GO_RESPONSES_RULES);
51
51
  if (matched) return matched;
52
52
  }
@@ -768,4 +768,4 @@ function createLLMClient(config, initialBackend = config.llm.backend ?? "unknown
768
768
  export {
769
769
  createLLMClient
770
770
  };
771
- //# sourceMappingURL=chunk-QJG5K3X2.js.map
771
+ //# sourceMappingURL=chunk-CLDCHOEA.js.map
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-OSXPQSLW.js";
9
9
  import {
10
10
  parseDefaultModelSelection
11
- } from "./chunk-ZVHUISW7.js";
11
+ } from "./chunk-5JWJEZJ3.js";
12
12
  import {
13
13
  getProject
14
14
  } from "./chunk-DPFET73G.js";
@@ -1119,4 +1119,4 @@ export {
1119
1119
  isTaskGateError,
1120
1120
  createTasksService
1121
1121
  };
1122
- //# sourceMappingURL=chunk-ZCFQOC3C.js.map
1122
+ //# sourceMappingURL=chunk-FEIRWXLX.js.map
@@ -4,7 +4,7 @@ import {
4
4
  getToolRegistryForAgent,
5
5
  processEventsForConversation,
6
6
  runTopLevelAgentLoop
7
- } from "./chunk-5AI3LHRQ.js";
7
+ } from "./chunk-HXHPKGJE.js";
8
8
  import {
9
9
  TurnMetrics,
10
10
  createChatDoneEvent,
@@ -15,7 +15,7 @@ import {
15
15
  checkToolChangesAndInject,
16
16
  computeDynamicContextHash,
17
17
  getToolFingerprint
18
- } from "./chunk-SVALN5KE.js";
18
+ } from "./chunk-VXG3AFFY.js";
19
19
  import {
20
20
  getAllInstructions,
21
21
  getEnabledSkillMetadata
@@ -334,7 +334,7 @@ async function runAgentTurn(options, turnMetrics, agentId, append, callbacks) {
334
334
  getConversationMessages: buildGetConversationMessages(options.sessionId, resolveAgentClient, append),
335
335
  injectAgentReminder: () => injectAgentReminder(options.sessionId, agentDef),
336
336
  rebuildCachedContext: async () => {
337
- const { applyDynamicContext } = await import("./dynamic-context-Y555VDLA.js");
337
+ const { applyDynamicContext } = await import("./dynamic-context-NJZKAZE3.js");
338
338
  await applyDynamicContext(options.sessionManager, options.sessionId, agentLlmClient.getModel());
339
339
  },
340
340
  ...options.initialCompacting ? { initialCompacting: true } : {},
@@ -364,4 +364,4 @@ export {
364
364
  runChatTurn,
365
365
  runAgentTurn
366
366
  };
367
- //# sourceMappingURL=chunk-WCM5ZW5N.js.map
367
+ //# sourceMappingURL=chunk-GFW2HWJ6.js.map
@@ -7,7 +7,7 @@ import {
7
7
  getGateConfig,
8
8
  isTaskConflictError,
9
9
  isTaskGateError
10
- } from "./chunk-ZCFQOC3C.js";
10
+ } from "./chunk-FEIRWXLX.js";
11
11
  import {
12
12
  getSessionDisabledServers
13
13
  } from "./chunk-TACWRDDC.js";
@@ -3187,7 +3187,7 @@ var callSubAgentTool = {
3187
3187
  };
3188
3188
  }
3189
3189
  try {
3190
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-6BDT5YMT.js");
3190
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-CW6POKUL.js");
3191
3191
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3192
3192
  const turnMetrics = new TurnMetrics();
3193
3193
  const result = await executeSubAgent({
@@ -4218,11 +4218,11 @@ var mcpConfigTool = createTool(
4218
4218
  async function notifyContextChanged(sessionId) {
4219
4219
  context.sessionManager.setDynamicContextChanged(sessionId, true);
4220
4220
  mcpNotifyChanged?.(sessionId);
4221
- const { injectContextDriftReminders } = await import("./dynamic-context-Y555VDLA.js");
4221
+ const { injectContextDriftReminders } = await import("./dynamic-context-NJZKAZE3.js");
4222
4222
  await injectContextDriftReminders(context.sessionManager, sessionId);
4223
4223
  }
4224
4224
  async function rebuildTools() {
4225
- const { setMcpTools: setMcpTools2 } = await import("./tools-6BDT5YMT.js");
4225
+ const { setMcpTools: setMcpTools2 } = await import("./tools-CW6POKUL.js");
4226
4226
  const mcpTools = createMcpTools(mcpManagerForTools);
4227
4227
  setMcpTools2(mcpTools);
4228
4228
  }
@@ -5158,4 +5158,4 @@ export {
5158
5158
  getToolRegistryForAgent,
5159
5159
  createToolRegistry
5160
5160
  };
5161
- //# sourceMappingURL=chunk-5AI3LHRQ.js.map
5161
+ //# sourceMappingURL=chunk-HXHPKGJE.js.map
@@ -0,0 +1,7 @@
1
+ // src/constants.ts
2
+ var VERSION = "2.0.133";
3
+
4
+ export {
5
+ VERSION
6
+ };
7
+ //# sourceMappingURL=chunk-JKGHTBEV.js.map
@@ -165,7 +165,7 @@ async function runCli(options) {
165
165
  break;
166
166
  }
167
167
  case "provider": {
168
- const { runProviderCommand } = await import("./provider-6YRII4IV.js");
168
+ const { runProviderCommand } = await import("./provider-NWRGNGS3.js");
169
169
  const [, subcommand] = positionals;
170
170
  await runProviderCommand(mode, subcommand);
171
171
  break;
@@ -210,7 +210,7 @@ async function runCli(options) {
210
210
  break;
211
211
  }
212
212
  case "update": {
213
- const { runUpdate } = await import("./update-XKCOBE47.js");
213
+ const { runUpdate } = await import("./update-VC3Y3EOP.js");
214
214
  const code = await runUpdate();
215
215
  if (code !== 0) {
216
216
  process.exit(code);
@@ -223,7 +223,7 @@ async function runCli(options) {
223
223
  if (!configExists) {
224
224
  await runNetworkSetup(mode);
225
225
  }
226
- const { runServe } = await import("./serve-NPADSJG7.js");
226
+ const { runServe } = await import("./serve-XRVT3D7Z.js");
227
227
  const serveOptions = { mode };
228
228
  if (values.port) serveOptions.port = parseInt(values.port);
229
229
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -235,4 +235,4 @@ async function runCli(options) {
235
235
  export {
236
236
  runCli
237
237
  };
238
- //# sourceMappingURL=chunk-55DGZIZ6.js.map
238
+ //# sourceMappingURL=chunk-OMMPTN6X.js.map
@@ -24,10 +24,10 @@ import {
24
24
  terminalManager,
25
25
  tokenFromPassword,
26
26
  verifyPassword
27
- } from "./chunk-7LGMQ5KS.js";
27
+ } from "./chunk-A7CB4USC.js";
28
28
  import {
29
29
  TEMPLATE_VARIABLES
30
- } from "./chunk-RQPHGBWI.js";
30
+ } from "./chunk-P5MSY7ZI.js";
31
31
  import {
32
32
  createToolRegistry,
33
33
  devServerManager,
@@ -42,7 +42,7 @@ import {
42
42
  setMcpManagerForTools,
43
43
  setMcpTools,
44
44
  setNotifyMcpServersChanged
45
- } from "./chunk-5AI3LHRQ.js";
45
+ } from "./chunk-HXHPKGJE.js";
46
46
  import {
47
47
  checkoutBranchFromSharedSource,
48
48
  deleteWorkspace,
@@ -87,7 +87,7 @@ import {
87
87
  saveWorkflow,
88
88
  saveWorkflowToProject,
89
89
  workflowExists
90
- } from "./chunk-ZCFQOC3C.js";
90
+ } from "./chunk-FEIRWXLX.js";
91
91
  import {
92
92
  getSessionDisabledServers,
93
93
  setSessionDisabledServers
@@ -209,13 +209,13 @@ import {
209
209
  detectModel,
210
210
  getLlmStatus,
211
211
  parseDefaultModelSelection
212
- } from "./chunk-ZVHUISW7.js";
212
+ } from "./chunk-5JWJEZJ3.js";
213
213
  import {
214
214
  buildOpenFoxMcpBootstrap
215
215
  } from "./chunk-YNMP647F.js";
216
216
  import {
217
217
  VERSION
218
- } from "./chunk-BMBOSVRM.js";
218
+ } from "./chunk-JKGHTBEV.js";
219
219
  import {
220
220
  deleteProject,
221
221
  getProject,
@@ -1135,6 +1135,12 @@ function getPromptAwareToolResponse(prompt) {
1135
1135
  function getConversationAwareToolResponse(request) {
1136
1136
  const prompt = getLastUserPrompt(request);
1137
1137
  const conversationText = getConversationText(request);
1138
+ if (/If you have finished the task, call step_done\(\)/i.test(prompt)) {
1139
+ return {
1140
+ tools: [{ name: "step_done", arguments: {} }],
1141
+ response: "Finished the step."
1142
+ };
1143
+ }
1138
1144
  if (/Implement the task and make sure you fulfil the \d+ criteria\./i.test(prompt) || /Continue working on the acceptance criteria\./i.test(prompt)) {
1139
1145
  const tools = [];
1140
1146
  const completedCriteria = [];
@@ -2801,11 +2807,14 @@ function canCompact(currentTokens, maxTokens) {
2801
2807
 
2802
2808
  // src/server/session/manager.ts
2803
2809
  var WORKSPACE_COMMIT_RECIPE = `
2804
- To land changes from this workspace into the original repo (its origin is the local repo itself):
2810
+ To land changes from this workspace when the user asks to commit and push:
2805
2811
  1. Commit your work.
2806
- 2. If the original repo has this branch checked out, a direct push is refused \u2014 push to a temp branch, then in the original repo merge it back and clean up: \`git push origin HEAD:<feature-slug>\` then \`git merge --ff-only <feature-slug> && git branch -d <feature-slug>\`
2807
- 3. If the original repo is on a different branch, push directly instead: \`git push origin <branch>\`
2808
- 4. To reach the remote, push from the original repo: \`git push origin <branch>\``;
2812
+ 2. Push to the original repo on a temporary branch (its origin is the local repo itself): \`git push origin HEAD:<feature-slug>\`
2813
+ 3. Switch back to the original project: \`workspace switch original\`
2814
+ 4. Merge the temporary branch and delete it: \`git merge --ff-only <feature-slug> && git branch -d <feature-slug>\`
2815
+ 5. Verify the work is present in the original repo.
2816
+ 6. Delete the workspace \u2014 it can be recreated at any time: \`workspace delete <name> force=true\`
2817
+ 7. Push to the remote from the original repo: \`git push origin <branch>\``;
2809
2818
  var SessionManager = class {
2810
2819
  events = new EventEmitter();
2811
2820
  activeSessionId = null;
@@ -4415,6 +4424,7 @@ function createCrudRoutes(config3, configDir, projectDir) {
4415
4424
  const ids = config3.getDefaultIds ? await config3.getDefaultIds() : [];
4416
4425
  res.json({ ids });
4417
4426
  });
4427
+ config3.extraRoutes?.(router);
4418
4428
  router.get("/:id", async (req, res) => {
4419
4429
  const { id } = req.params;
4420
4430
  const effectiveProjectDir = resolveProjectDir(req, projectDir);
@@ -4509,7 +4519,6 @@ function createCrudRoutes(config3, configDir, projectDir) {
4509
4519
  }
4510
4520
  res.status(201).json(duplicated);
4511
4521
  });
4512
- config3.extraRoutes?.(router);
4513
4522
  return router;
4514
4523
  }
4515
4524
 
@@ -6801,7 +6810,7 @@ function detectWsl() {
6801
6810
  // src/server/index.ts
6802
6811
  var __dirname3 = dirname7(fileURLToPath6(import.meta.url));
6803
6812
  async function announceContextDrift(sessionManager, sessionIds) {
6804
- const { injectContextDriftRemindersForSessions } = await import("./dynamic-context-Y555VDLA.js");
6813
+ const { injectContextDriftRemindersForSessions } = await import("./dynamic-context-NJZKAZE3.js");
6805
6814
  await injectContextDriftRemindersForSessions(sessionManager, sessionIds);
6806
6815
  }
6807
6816
  async function createServerHandle(config3) {
@@ -6908,7 +6917,7 @@ async function createServerHandle(config3) {
6908
6917
  toolRegistry = createToolRegistry();
6909
6918
  logger.info("MCP tools registered", { count: mcpTools.length });
6910
6919
  }
6911
- const { signalMcpReady } = await import("./server-5TY22HDN.js");
6920
+ const { signalMcpReady } = await import("./server-GXMZMPXI.js");
6912
6921
  signalMcpReady();
6913
6922
  });
6914
6923
  const app = express();
@@ -7123,9 +7132,9 @@ async function createServerHandle(config3) {
7123
7132
  const sessionFavoriteRouter = express.Router();
7124
7133
  registerSessionFavoriteRoute(sessionFavoriteRouter, sessionManager);
7125
7134
  app.use("/api", sessionFavoriteRouter);
7126
- const { createTasksService } = await import("./service-VPXGREXF.js");
7127
- const { registerTaskRoutes } = await import("./tasks-MNPXK2S5.js");
7128
- const { setTasksService } = await import("./tools-6BDT5YMT.js");
7135
+ const { createTasksService } = await import("./service-O3LCO3TQ.js");
7136
+ const { registerTaskRoutes } = await import("./tasks-WOC3QUFA.js");
7137
+ const { setTasksService } = await import("./tools-CW6POKUL.js");
7129
7138
  const tasksService = createTasksService({
7130
7139
  sessionManager,
7131
7140
  config: config3,
@@ -7454,7 +7463,7 @@ All file and git operations should use this branch.
7454
7463
  app.get("/api/sessions/:id", async (req, res) => {
7455
7464
  const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEventsWithSnapshot2 } = await import("./events-ZJPRGVL2.js");
7456
7465
  const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations } = await import("./folding-QRZOHY2I.js");
7457
- const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-6BDT5YMT.js");
7466
+ const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-CW6POKUL.js");
7458
7467
  const { getMaxVisibleItems } = await import("./settings-MDCRNQBY.js");
7459
7468
  const session = sessionManager.getSession(req.params.id);
7460
7469
  if (!session) {
@@ -7483,7 +7492,7 @@ All file and git operations should use this branch.
7483
7492
  });
7484
7493
  app.get("/api/sessions/:id/status", async (req, res) => {
7485
7494
  const { projectSessionStatus: projectSessionStatus2 } = await import("./session-status-UFO5IFI7.js");
7486
- const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-6BDT5YMT.js");
7495
+ const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-CW6POKUL.js");
7487
7496
  const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEventsWithSnapshot2 } = await import("./events-ZJPRGVL2.js");
7488
7497
  const { foldPendingConfirmations } = await import("./folding-QRZOHY2I.js");
7489
7498
  const sessionId = req.params["id"];
@@ -7515,8 +7524,8 @@ All file and git operations should use this branch.
7515
7524
  if (!session) {
7516
7525
  return res.status(404).json({ error: "Session not found" });
7517
7526
  }
7518
- const { stopSessionExecution } = await import("./chat-handler-RAIMQU7F.js");
7519
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-6BDT5YMT.js");
7527
+ const { stopSessionExecution } = await import("./chat-handler-T47GATL5.js");
7528
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-CW6POKUL.js");
7520
7529
  sessionManager.clearMessageQueue(sessionId);
7521
7530
  stopSessionExecution(sessionId, sessionManager);
7522
7531
  abortSession(sessionId);
@@ -7769,7 +7778,7 @@ All file and git operations should use this branch.
7769
7778
  setSessionDisabledServers(sessionId, disabledServers);
7770
7779
  const messages = session.messages ?? [];
7771
7780
  if (messages.length === 0) {
7772
- const { applyDynamicContext } = await import("./dynamic-context-Y555VDLA.js");
7781
+ const { applyDynamicContext } = await import("./dynamic-context-NJZKAZE3.js");
7773
7782
  const modelName = session.providerModel ?? providerManager.getCurrentModel();
7774
7783
  await applyDynamicContext(sessionManager, sessionId, modelName);
7775
7784
  } else {
@@ -7803,7 +7812,7 @@ All file and git operations should use this branch.
7803
7812
  if (alwaysAllow !== void 0 && typeof alwaysAllow !== "boolean") {
7804
7813
  return res.status(400).json({ error: "alwaysAllow must be a boolean if provided" });
7805
7814
  }
7806
- const { providePathConfirmation: providePathConfirmation2, getConfirmationSessionId } = await import("./tools-6BDT5YMT.js");
7815
+ const { providePathConfirmation: providePathConfirmation2, getConfirmationSessionId } = await import("./tools-CW6POKUL.js");
7807
7816
  const pendingSessionId = getConfirmationSessionId(callId);
7808
7817
  if (!pendingSessionId) {
7809
7818
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -7818,7 +7827,7 @@ All file and git operations should use this branch.
7818
7827
  const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEvents } = await import("./events-ZJPRGVL2.js");
7819
7828
  const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations } = await import("./folding-QRZOHY2I.js");
7820
7829
  const { createSessionStateMessage } = await import("./protocol-Y7MRKRUO.js");
7821
- const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-6BDT5YMT.js");
7830
+ const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-CW6POKUL.js");
7822
7831
  const { getMaxVisibleItems } = await import("./settings-MDCRNQBY.js");
7823
7832
  const eventStore = getEventStore2();
7824
7833
  const { snapshot, events: eventsSinceSnapshot } = eventStore.getEventsSinceSnapshot(sessionId);
@@ -7856,7 +7865,7 @@ All file and git operations should use this branch.
7856
7865
  if (!skip && typeof answer !== "string") {
7857
7866
  return res.status(400).json({ error: "answer is required when not skipping" });
7858
7867
  }
7859
- const { provideAnswer: provideAnswer2 } = await import("./tools-6BDT5YMT.js");
7868
+ const { provideAnswer: provideAnswer2 } = await import("./tools-CW6POKUL.js");
7860
7869
  const found = provideAnswer2(callId, answer ?? "", skip ?? false);
7861
7870
  if (!found) {
7862
7871
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -7922,7 +7931,7 @@ All file and git operations should use this branch.
7922
7931
  backend: activeProvider?.backend ?? llmClient.getBackend(),
7923
7932
  model: llmClient.getModel()
7924
7933
  };
7925
- const { runAgentTurn, TurnMetrics } = await import("./orchestrator-SQN2SJ2A.js");
7934
+ const { runAgentTurn, TurnMetrics } = await import("./orchestrator-GX22Y5EM.js");
7926
7935
  runAgentTurn(
7927
7936
  {
7928
7937
  sessionManager,
@@ -7960,8 +7969,8 @@ All file and git operations should use this branch.
7960
7969
  if (!session) {
7961
7970
  return res.status(404).json({ error: "Session not found" });
7962
7971
  }
7963
- const { stopSessionExecution } = await import("./chat-handler-RAIMQU7F.js");
7964
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-6BDT5YMT.js");
7972
+ const { stopSessionExecution } = await import("./chat-handler-T47GATL5.js");
7973
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-CW6POKUL.js");
7965
7974
  const queuedMessages = sessionManager.getQueueState(sessionId);
7966
7975
  sessionManager.clearMessageQueue(sessionId);
7967
7976
  stopSessionExecution(sessionId, sessionManager);
@@ -8341,7 +8350,7 @@ All file and git operations should use this branch.
8341
8350
  const backend = req.query["backend"];
8342
8351
  if (!url) return res.status(400).json({ error: "url is required" });
8343
8352
  try {
8344
- const { fetchModelsWithContext } = await import("./provider-manager-URNJBK5Q.js");
8353
+ const { fetchModelsWithContext } = await import("./provider-manager-BO5ZBG3T.js");
8345
8354
  const { getModelProfile: getModelProfile2 } = await import("./profiles-EBCVFYG7.js");
8346
8355
  const { getCatalogEntry } = await import("./model-catalog-2PCKTYGW.js");
8347
8356
  const models = await fetchModelsWithContext(
@@ -8833,7 +8842,7 @@ All file and git operations should use this branch.
8833
8842
  });
8834
8843
  async function rebuildMcpTools() {
8835
8844
  const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-FJAFLDZA.js");
8836
- const { setMcpTools: setMcpTools2 } = await import("./tools-6BDT5YMT.js");
8845
+ const { setMcpTools: setMcpTools2 } = await import("./tools-CW6POKUL.js");
8837
8846
  const mcpTools = createMcpTools2(mcpManager);
8838
8847
  setMcpTools2(mcpTools);
8839
8848
  toolRegistry = createToolRegistry();
@@ -9409,7 +9418,7 @@ All file and git operations should use this branch.
9409
9418
  );
9410
9419
  const wss = wssExports.wss;
9411
9420
  deferTasksBroadcast = (projectId, payload) => wssExports.broadcastForProject(projectId, "", { type: "tasks.update", payload });
9412
- const { launchWorkflowRun, abortRunnerRun } = await import("./launch-Y4H7FDU2.js");
9421
+ const { launchWorkflowRun, abortRunnerRun } = await import("./launch-UKXVO37B.js");
9413
9422
  deferTasksLaunchWorkflow = (sessionId, launch) => {
9414
9423
  const effective = sessionManager.resolveEffectiveProviderModel(sessionId);
9415
9424
  let llmClient = getLLMClient();
@@ -9454,7 +9463,7 @@ All file and git operations should use this branch.
9454
9463
  const state = sessionManager.getContextState(sessionId);
9455
9464
  wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
9456
9465
  });
9457
- const { QueueProcessor } = await import("./processor-MEHODYNE.js");
9466
+ const { QueueProcessor } = await import("./processor-V35OLKRV.js");
9458
9467
  const queueProcessor = new QueueProcessor({
9459
9468
  sessionManager,
9460
9469
  providerManager,
@@ -9496,8 +9505,8 @@ All file and git operations should use this branch.
9496
9505
  launchWorkflow: (sessionId, launch) => deferTasksLaunchWorkflow(sessionId, launch),
9497
9506
  stopSession: (sessionId) => {
9498
9507
  void (async () => {
9499
- const { stopSessionExecution } = await import("./chat-handler-RAIMQU7F.js");
9500
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-6BDT5YMT.js");
9508
+ const { stopSessionExecution } = await import("./chat-handler-T47GATL5.js");
9509
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-CW6POKUL.js");
9501
9510
  sessionManager.clearMessageQueue(sessionId);
9502
9511
  stopSessionExecution(sessionId, sessionManager);
9503
9512
  abortSession(sessionId);
@@ -9618,4 +9627,4 @@ export {
9618
9627
  createServerHandle,
9619
9628
  createServer
9620
9629
  };
9621
- //# sourceMappingURL=chunk-6MUSEPV7.js.map
9630
+ //# sourceMappingURL=chunk-OUQZZEIQ.js.map