openfox 2.0.132 → 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.
- package/CHANGELOG.md +19 -0
- package/dist/CHANGELOG.md +19 -0
- package/dist/agent-defaults/code-reviewer.agent.md +1 -0
- package/dist/agent-defaults/explorer.agent.md +1 -0
- package/dist/agent-defaults/verifier.agent.md +1 -0
- package/dist/{chunk-RUFXKUOL.js → chunk-A7CB4USC.js} +2 -2
- package/dist/chunk-JKGHTBEV.js +7 -0
- package/dist/{chunk-EOHEDEIH.js → chunk-OMMPTN6X.js} +3 -3
- package/dist/{chunk-ZSBNXJZ5.js → chunk-OUQZZEIQ.js} +14 -8
- package/dist/{chunk-GVOOOV7M.js → chunk-P5MSY7ZI.js} +23 -9
- package/dist/cli/dev.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/{launch-6I5ADTVT.js → launch-UKXVO37B.js} +2 -2
- package/dist/package.json +1 -1
- package/dist/{processor-FMEULCNQ.js → processor-V35OLKRV.js} +16 -1
- package/dist/{serve-BFGHUM4Y.js → serve-XRVT3D7Z.js} +5 -5
- package/dist/server/index.js +4 -4
- package/dist/{server-WPWUYB6I.js → server-GXMZMPXI.js} +3 -3
- package/dist/{update-VPCDKFLD.js → update-VC3Y3EOP.js} +2 -2
- package/dist/web/assets/index-ATAQvBwl.js +312 -0
- package/dist/web/index.html +1 -1
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-55RHB5JB.js +0 -7
- package/dist/web/assets/index-Bx5r3aJx.js +0 -310
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
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
|
+
|
|
3
22
|
## 2.0.132 - 2026-08-28
|
|
4
23
|
|
|
5
24
|
### Enhancements
|
package/dist/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
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
|
+
|
|
3
22
|
## 2.0.132 - 2026-08-28
|
|
4
23
|
|
|
5
24
|
### Enhancements
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from "./chunk-RRUSYVQD.js";
|
|
6
6
|
import {
|
|
7
7
|
launchWorkflowRun
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-P5MSY7ZI.js";
|
|
9
9
|
import {
|
|
10
10
|
runChatTurn
|
|
11
11
|
} from "./chunk-GFW2HWJ6.js";
|
|
@@ -1642,4 +1642,4 @@ export {
|
|
|
1642
1642
|
signalMcpReady,
|
|
1643
1643
|
createWebSocketServer
|
|
1644
1644
|
};
|
|
1645
|
-
//# sourceMappingURL=chunk-
|
|
1645
|
+
//# sourceMappingURL=chunk-A7CB4USC.js.map
|
|
@@ -210,7 +210,7 @@ async function runCli(options) {
|
|
|
210
210
|
break;
|
|
211
211
|
}
|
|
212
212
|
case "update": {
|
|
213
|
-
const { runUpdate } = await import("./update-
|
|
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-
|
|
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-
|
|
238
|
+
//# sourceMappingURL=chunk-OMMPTN6X.js.map
|
|
@@ -24,10 +24,10 @@ import {
|
|
|
24
24
|
terminalManager,
|
|
25
25
|
tokenFromPassword,
|
|
26
26
|
verifyPassword
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-A7CB4USC.js";
|
|
28
28
|
import {
|
|
29
29
|
TEMPLATE_VARIABLES
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-P5MSY7ZI.js";
|
|
31
31
|
import {
|
|
32
32
|
createToolRegistry,
|
|
33
33
|
devServerManager,
|
|
@@ -215,7 +215,7 @@ import {
|
|
|
215
215
|
} from "./chunk-YNMP647F.js";
|
|
216
216
|
import {
|
|
217
217
|
VERSION
|
|
218
|
-
} from "./chunk-
|
|
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 = [];
|
|
@@ -4418,6 +4424,7 @@ function createCrudRoutes(config3, configDir, projectDir) {
|
|
|
4418
4424
|
const ids = config3.getDefaultIds ? await config3.getDefaultIds() : [];
|
|
4419
4425
|
res.json({ ids });
|
|
4420
4426
|
});
|
|
4427
|
+
config3.extraRoutes?.(router);
|
|
4421
4428
|
router.get("/:id", async (req, res) => {
|
|
4422
4429
|
const { id } = req.params;
|
|
4423
4430
|
const effectiveProjectDir = resolveProjectDir(req, projectDir);
|
|
@@ -4512,7 +4519,6 @@ function createCrudRoutes(config3, configDir, projectDir) {
|
|
|
4512
4519
|
}
|
|
4513
4520
|
res.status(201).json(duplicated);
|
|
4514
4521
|
});
|
|
4515
|
-
config3.extraRoutes?.(router);
|
|
4516
4522
|
return router;
|
|
4517
4523
|
}
|
|
4518
4524
|
|
|
@@ -6911,7 +6917,7 @@ async function createServerHandle(config3) {
|
|
|
6911
6917
|
toolRegistry = createToolRegistry();
|
|
6912
6918
|
logger.info("MCP tools registered", { count: mcpTools.length });
|
|
6913
6919
|
}
|
|
6914
|
-
const { signalMcpReady } = await import("./server-
|
|
6920
|
+
const { signalMcpReady } = await import("./server-GXMZMPXI.js");
|
|
6915
6921
|
signalMcpReady();
|
|
6916
6922
|
});
|
|
6917
6923
|
const app = express();
|
|
@@ -9412,7 +9418,7 @@ All file and git operations should use this branch.
|
|
|
9412
9418
|
);
|
|
9413
9419
|
const wss = wssExports.wss;
|
|
9414
9420
|
deferTasksBroadcast = (projectId, payload) => wssExports.broadcastForProject(projectId, "", { type: "tasks.update", payload });
|
|
9415
|
-
const { launchWorkflowRun, abortRunnerRun } = await import("./launch-
|
|
9421
|
+
const { launchWorkflowRun, abortRunnerRun } = await import("./launch-UKXVO37B.js");
|
|
9416
9422
|
deferTasksLaunchWorkflow = (sessionId, launch) => {
|
|
9417
9423
|
const effective = sessionManager.resolveEffectiveProviderModel(sessionId);
|
|
9418
9424
|
let llmClient = getLLMClient();
|
|
@@ -9457,7 +9463,7 @@ All file and git operations should use this branch.
|
|
|
9457
9463
|
const state = sessionManager.getContextState(sessionId);
|
|
9458
9464
|
wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
|
|
9459
9465
|
});
|
|
9460
|
-
const { QueueProcessor } = await import("./processor-
|
|
9466
|
+
const { QueueProcessor } = await import("./processor-V35OLKRV.js");
|
|
9461
9467
|
const queueProcessor = new QueueProcessor({
|
|
9462
9468
|
sessionManager,
|
|
9463
9469
|
providerManager,
|
|
@@ -9621,4 +9627,4 @@ export {
|
|
|
9621
9627
|
createServerHandle,
|
|
9622
9628
|
createServer
|
|
9623
9629
|
};
|
|
9624
|
-
//# sourceMappingURL=chunk-
|
|
9630
|
+
//# sourceMappingURL=chunk-OUQZZEIQ.js.map
|
|
@@ -274,6 +274,21 @@ function findMatchingTransition(transitions, stepOutcome, metadataEntries) {
|
|
|
274
274
|
}
|
|
275
275
|
return null;
|
|
276
276
|
}
|
|
277
|
+
var STEP_DONE_NUDGE = "You haven't called step_done(). If you haven't finished the task, continue and when you're finished call step_done()";
|
|
278
|
+
var STEP_DONE_REMINDER = "If you have finished the task, call step_done()";
|
|
279
|
+
function isStepTransitionSatisfied(transitions, metadataEntries, currentStepId) {
|
|
280
|
+
const fired = findMatchingTransition(transitions, null, metadataEntries);
|
|
281
|
+
return fired !== null && fired.goto !== currentStepId;
|
|
282
|
+
}
|
|
283
|
+
function buildAgentNudge(nudgePrompt, templateCtx, transitions, metadataEntries, currentStepId) {
|
|
284
|
+
const transitionSatisfied = isStepTransitionSatisfied(transitions, metadataEntries, currentStepId);
|
|
285
|
+
const parts = [];
|
|
286
|
+
if (nudgePrompt && !transitionSatisfied) {
|
|
287
|
+
parts.push(resolveTemplate(nudgePrompt, templateCtx));
|
|
288
|
+
}
|
|
289
|
+
parts.push(transitionSatisfied ? STEP_DONE_REMINDER : STEP_DONE_NUDGE);
|
|
290
|
+
return parts.join("\n\n");
|
|
291
|
+
}
|
|
277
292
|
var DEFAULT_USER_RESULT = "continue";
|
|
278
293
|
var CONTINUE_CHOICE_ID = "continue";
|
|
279
294
|
function userStepChoices(step) {
|
|
@@ -499,7 +514,6 @@ async function executeWorkflow(workflow, options, subGroup) {
|
|
|
499
514
|
case "agent": {
|
|
500
515
|
const agentStep = step;
|
|
501
516
|
const STEP_DONE_PROMPT = "\n\nOnce you're done, call step_done()";
|
|
502
|
-
const STEP_DONE_NUDGE = "You haven't called step_done(). If you haven't finished the task, continue and when you're finished call step_done()";
|
|
503
517
|
const isResumingCurrentStep = isResume && step.id === resumeFromStep && !resumeConsumed;
|
|
504
518
|
let promptContent;
|
|
505
519
|
let nudgeContent;
|
|
@@ -532,13 +546,13 @@ async function executeWorkflow(workflow, options, subGroup) {
|
|
|
532
546
|
);
|
|
533
547
|
}
|
|
534
548
|
} else if (firstEntryForStep.has(step.id) && !isResumingCurrentStep) {
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
549
|
+
nudgeContent = buildAgentNudge(
|
|
550
|
+
agentStep.nudgePrompt,
|
|
551
|
+
templateCtx,
|
|
552
|
+
step.transitions,
|
|
553
|
+
session.metadataEntries,
|
|
554
|
+
step.id
|
|
555
|
+
);
|
|
542
556
|
emitWorkflowMessage(eventStore, sessionId, nudgeContent, currentWindowMessageOptions, onMessage);
|
|
543
557
|
}
|
|
544
558
|
const blockOnLLMFailure = (errorMessage) => {
|
|
@@ -1002,4 +1016,4 @@ export {
|
|
|
1002
1016
|
abortRunnerRun,
|
|
1003
1017
|
launchWorkflowRun
|
|
1004
1018
|
};
|
|
1005
|
-
//# sourceMappingURL=chunk-
|
|
1019
|
+
//# sourceMappingURL=chunk-P5MSY7ZI.js.map
|
package/dist/cli/dev.js
CHANGED
package/dist/cli/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
abortRunnerRun,
|
|
3
3
|
launchWorkflowRun
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-P5MSY7ZI.js";
|
|
5
5
|
import "./chunk-GFW2HWJ6.js";
|
|
6
6
|
import "./chunk-HXHPKGJE.js";
|
|
7
7
|
import "./chunk-XE6UC5Z3.js";
|
|
@@ -50,4 +50,4 @@ export {
|
|
|
50
50
|
abortRunnerRun,
|
|
51
51
|
launchWorkflowRun
|
|
52
52
|
};
|
|
53
|
-
//# sourceMappingURL=launch-
|
|
53
|
+
//# sourceMappingURL=launch-UKXVO37B.js.map
|
package/dist/package.json
CHANGED
|
@@ -132,6 +132,21 @@ var QueueProcessor = class {
|
|
|
132
132
|
logger.warn("Cannot start turn: queue is empty", { sessionId });
|
|
133
133
|
return;
|
|
134
134
|
}
|
|
135
|
+
const latestExec = sessionManager.getLatestWorkflowExecution(sessionId);
|
|
136
|
+
if (latestExec && latestExec.status === "blocked") {
|
|
137
|
+
logger.info("Cancelling blocked workflow execution before chat turn", {
|
|
138
|
+
sessionId,
|
|
139
|
+
executionId: latestExec.id,
|
|
140
|
+
step: latestExec.currentStepId
|
|
141
|
+
});
|
|
142
|
+
sessionManager.cancelWorkflow(
|
|
143
|
+
sessionId,
|
|
144
|
+
latestExec.id,
|
|
145
|
+
latestExec.workflowId,
|
|
146
|
+
latestExec.workflowName,
|
|
147
|
+
latestExec.workflowColor
|
|
148
|
+
);
|
|
149
|
+
}
|
|
135
150
|
const controller = new AbortController();
|
|
136
151
|
this.activeAgents.set(sessionId, controller);
|
|
137
152
|
sessionManager.setRunning(sessionId, true);
|
|
@@ -256,4 +271,4 @@ var QueueProcessor = class {
|
|
|
256
271
|
export {
|
|
257
272
|
QueueProcessor
|
|
258
273
|
};
|
|
259
|
-
//# sourceMappingURL=processor-
|
|
274
|
+
//# sourceMappingURL=processor-V35OLKRV.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createServer
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OUQZZEIQ.js";
|
|
4
4
|
import "./chunk-T3S5MTMD.js";
|
|
5
5
|
import "./chunk-WLJJRX22.js";
|
|
6
6
|
import "./chunk-DQTN4B33.js";
|
|
7
7
|
import "./chunk-IJ53Y77N.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-A7CB4USC.js";
|
|
9
9
|
import "./chunk-RRUSYVQD.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-P5MSY7ZI.js";
|
|
11
11
|
import "./chunk-GFW2HWJ6.js";
|
|
12
12
|
import "./chunk-HXHPKGJE.js";
|
|
13
13
|
import "./chunk-XE6UC5Z3.js";
|
|
@@ -42,7 +42,7 @@ import "./chunk-J2GP3J3X.js";
|
|
|
42
42
|
import "./chunk-YNMP647F.js";
|
|
43
43
|
import {
|
|
44
44
|
VERSION
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-JKGHTBEV.js";
|
|
46
46
|
import "./chunk-DPFET73G.js";
|
|
47
47
|
import "./chunk-CLDCHOEA.js";
|
|
48
48
|
import "./chunk-TS5WKTFB.js";
|
|
@@ -229,4 +229,4 @@ async function runServe(options) {
|
|
|
229
229
|
export {
|
|
230
230
|
runServe
|
|
231
231
|
};
|
|
232
|
-
//# sourceMappingURL=serve-
|
|
232
|
+
//# sourceMappingURL=serve-XRVT3D7Z.js.map
|
package/dist/server/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createServer,
|
|
3
3
|
createServerHandle
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-OUQZZEIQ.js";
|
|
5
5
|
import "../chunk-T3S5MTMD.js";
|
|
6
6
|
import "../chunk-WLJJRX22.js";
|
|
7
7
|
import "../chunk-DQTN4B33.js";
|
|
8
8
|
import "../chunk-IJ53Y77N.js";
|
|
9
|
-
import "../chunk-
|
|
9
|
+
import "../chunk-A7CB4USC.js";
|
|
10
10
|
import "../chunk-RRUSYVQD.js";
|
|
11
|
-
import "../chunk-
|
|
11
|
+
import "../chunk-P5MSY7ZI.js";
|
|
12
12
|
import "../chunk-GFW2HWJ6.js";
|
|
13
13
|
import "../chunk-HXHPKGJE.js";
|
|
14
14
|
import "../chunk-XE6UC5Z3.js";
|
|
@@ -39,7 +39,7 @@ import "../chunk-5JWJEZJ3.js";
|
|
|
39
39
|
import "../chunk-OA2FURC3.js";
|
|
40
40
|
import "../chunk-J2GP3J3X.js";
|
|
41
41
|
import "../chunk-YNMP647F.js";
|
|
42
|
-
import "../chunk-
|
|
42
|
+
import "../chunk-JKGHTBEV.js";
|
|
43
43
|
import "../chunk-DPFET73G.js";
|
|
44
44
|
import "../chunk-CLDCHOEA.js";
|
|
45
45
|
import "../chunk-TS5WKTFB.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createWebSocketServer,
|
|
3
3
|
signalMcpReady
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-A7CB4USC.js";
|
|
5
5
|
import "./chunk-RRUSYVQD.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-P5MSY7ZI.js";
|
|
7
7
|
import "./chunk-GFW2HWJ6.js";
|
|
8
8
|
import "./chunk-HXHPKGJE.js";
|
|
9
9
|
import "./chunk-XE6UC5Z3.js";
|
|
@@ -53,4 +53,4 @@ export {
|
|
|
53
53
|
createWebSocketServer,
|
|
54
54
|
signalMcpReady
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=server-
|
|
56
|
+
//# sourceMappingURL=server-GXMZMPXI.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
VERSION
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JKGHTBEV.js";
|
|
4
4
|
import "./chunk-YLJ4XMA6.js";
|
|
5
5
|
|
|
6
6
|
// src/cli/update.ts
|
|
@@ -46,4 +46,4 @@ async function runUpdate(options = {}) {
|
|
|
46
46
|
export {
|
|
47
47
|
runUpdate
|
|
48
48
|
};
|
|
49
|
-
//# sourceMappingURL=update-
|
|
49
|
+
//# sourceMappingURL=update-VC3Y3EOP.js.map
|