openfox 2.0.112 → 2.0.114
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 +49 -0
- package/README.md +1 -0
- package/dist/CHANGELOG.md +49 -0
- package/dist/agent-defaults/builder.agent.md +1 -0
- package/dist/agent-defaults/planner.agent.md +1 -0
- package/dist/{backend-P3GHHLHJ.js → backend-LVYHLGQJ.js} +2 -2
- package/dist/{chat-handler-BYXZIIV3.js → chat-handler-KWXRSWXZ.js} +32 -26
- package/dist/{chunk-XWNCKIPO.js → chunk-2XD65L7M.js} +2 -2
- package/dist/{chunk-C5NQF2K4.js → chunk-3O77NT4T.js} +29 -10
- package/dist/{chunk-XCK5IBO4.js → chunk-7GWARYQC.js} +60 -1042
- package/dist/{chunk-YHEQTVFV.js → chunk-AZHWLLPP.js} +1 -1
- package/dist/{chunk-FFPCVN5M.js → chunk-BZVW77PI.js} +4 -4
- package/dist/{chunk-SDGNV45R.js → chunk-FW4NDUBL.js} +15 -15
- package/dist/{chunk-Z56SEG4Z.js → chunk-GUHHUDNL.js} +6 -6
- package/dist/{chunk-RT2A2RRL.js → chunk-HP5CIB66.js} +2 -2
- package/dist/{chunk-UAF2FOI5.js → chunk-HV6IALXF.js} +7 -7
- package/dist/{chunk-SYJMUIRC.js → chunk-I7FY2LTR.js} +2 -2
- package/dist/{chunk-RISQXU32.js → chunk-JP7NM545.js} +2 -2
- package/dist/{chunk-NB2D6I64.js → chunk-JXLRL5JR.js} +5 -5
- package/dist/{chunk-RAKPI4OE.js → chunk-K733B5T2.js} +264 -27
- package/dist/{chunk-C372UH7N.js → chunk-KSXCOHHW.js} +18 -20
- package/dist/{chunk-JDT63SSP.js → chunk-L63Q4JQJ.js} +3 -3
- package/dist/{chunk-ERYUSG5C.js → chunk-LXYPMFTH.js} +3 -3
- package/dist/{chunk-FSYRANYR.js → chunk-MUSPWEBB.js} +4 -5
- package/dist/chunk-NCZRWCJN.js +7 -0
- package/dist/{chunk-JR54MDZI.js → chunk-NLO64UE3.js} +2 -2
- package/dist/{chunk-3UILDGOO.js → chunk-NWJLWLKF.js} +8 -8
- package/dist/chunk-OSXPQSLW.js +128 -0
- package/dist/chunk-OTYAEEX3.js +1081 -0
- package/dist/{chunk-PCC4DBPF.js → chunk-OXSTNSCF.js} +2 -2
- package/dist/{chunk-33Q7LCVD.js → chunk-P5UANBBX.js} +6 -4
- package/dist/{chunk-LCQ5AN6Y.js → chunk-PBW3YC3G.js} +89 -1
- package/dist/{chunk-IYTDCPEQ.js → chunk-QD7MRMCH.js} +352 -333
- package/dist/{chunk-N4RTAGFY.js → chunk-SA34STZ6.js} +2 -2
- package/dist/{chunk-FR5LUTLQ.js → chunk-SBSUDHL4.js} +10 -6
- package/dist/{chunk-6FPGJR7O.js → chunk-SFZGMB2G.js} +2 -2
- package/dist/{chunk-SVJFMZ2Q.js → chunk-TKKP56QK.js} +11 -4
- package/dist/{chunk-JNHKKUGJ.js → chunk-UPBWEHIL.js} +30 -148
- package/dist/{chunk-QGXLZZBS.js → chunk-UTIQ7OO5.js} +2 -2
- package/dist/{chunk-RKMP74BB.js → chunk-VPVLO436.js} +4 -4
- package/dist/chunk-W77NBJAZ.js +957 -0
- package/dist/{chunk-P45RJGOT.js → chunk-X25Q6RAV.js} +1 -1
- package/dist/{chunk-BOSKQI62.js → chunk-YGJIK3CG.js} +4 -4
- package/dist/cli/dev.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/{client-QNQTX5EA.js → client-EM7ISGUP.js} +6 -6
- package/dist/{compactor-X2KZ3XFU.js → compactor-V3LR7APW.js} +13 -12
- package/dist/{config-TW5FHQEM.js → config-EAB3V4QK.js} +2 -2
- package/dist/{dynamic-context-ZRQO2FJN.js → dynamic-context-MVGOF5V2.js} +10 -9
- package/dist/{events-Y6XXQYFG.js → events-PI7IMPHT.js} +8 -7
- package/dist/{folding-Z4GNWRC3.js → folding-FO57K4JM.js} +6 -5
- package/dist/http-client-33EZ3BLR.js +11 -0
- package/dist/{inspect-proxy-N42Z5TOG.js → inspect-proxy-NHKQQ2CD.js} +4 -4
- package/dist/launch-L5ROVNI3.js +52 -0
- package/dist/{manager-HCMDFEQH.js → manager-66YAEO7K.js} +5 -5
- package/dist/{model-overrides-O3ZYKFP7.js → model-overrides-L53PZNZA.js} +4 -4
- package/dist/orchestrator-XK5K3RPL.js +63 -0
- package/dist/package.json +7 -6
- package/dist/{path-security-525YLND3.js → path-security-RSEI3YKB.js} +12 -11
- package/dist/{platform-MEQUWG6U.js → platform-WA4GK5BO.js} +4 -4
- package/dist/{processor-UN4H4V7F.js → processor-WDZSFBVO.js} +31 -25
- package/dist/{project-creator-BVA55HY6.js → project-creator-676WQXVI.js} +3 -3
- package/dist/{projects-PQXME5S4.js → projects-SSBWIYL4.js} +3 -3
- package/dist/{protocol-D6MISQyz.d.ts → protocol-BzHs024-.d.ts} +23 -3
- package/dist/{protocol-FTHAR2YL.js → protocol-RKSWKNXI.js} +3 -3
- package/dist/provider/index.d.ts +4 -4
- package/dist/{provider-3R4X62LW.js → provider-PLIWRBCF.js} +9 -9
- package/dist/{provider-manager-W5N4XRE5.js → provider-manager-2QSJTPWS.js} +7 -7
- package/dist/{registry-74KPZ5NV.js → registry-ZP4TN2IN.js} +5 -4
- package/dist/{serve-WHFUNQ6Z.js → serve-MZ3BCCWC.js} +36 -33
- package/dist/server/index.d.ts +8 -5
- package/dist/server/index.js +35 -32
- package/dist/server-EPXODFMB.js +55 -0
- package/dist/service-54PGIPDQ.js +25 -0
- package/dist/{session-overrides-XH6I3COP.js → session-overrides-LXN6W7SA.js} +7 -6
- package/dist/{sessions-D772YTWL.js → sessions-CHPVUG6H.js} +8 -5
- package/dist/{settings-KO6DSJLD.js → settings-NEBM3GQX.js} +3 -3
- package/dist/shared/index.d.ts +3 -3
- package/dist/shared/index.js +1 -1
- package/dist/skill-defaults/workflows/SKILL.md +517 -0
- package/dist/tasks-TJXG2V3U.js +217 -0
- package/dist/{tools-HTUTYMKI.js → tools-CIM26IFB.js} +31 -23
- package/dist/{types-BMEOlLT0.d.ts → types-CMtHpDWT.d.ts} +81 -1
- package/dist/{types-D0TgGL3t.d.ts → types-CbggXFvR.d.ts} +1 -1
- package/dist/{update-BRUFGGTW.js → update-UZBBO42X.js} +2 -2
- package/dist/web/assets/{index-nS1p0g8O.css → index-BmILAZrT.css} +1 -1
- package/dist/web/assets/index-rZHXkfMq.js +324 -0
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/dist/workflow-defaults/default.workflow.json +45 -5
- package/dist/{workspace-YDUQZ3HC.js → workspace-2XODU4YJ.js} +4 -4
- package/package.json +7 -6
- package/dist/chunk-P5AA7OYJ.js +0 -7
- package/dist/http-client-2GDKHZIG.js +0 -11
- package/dist/orchestrator-P5EUMC7E.js +0 -57
- package/dist/server-7MOOJR2N.js +0 -48
- package/dist/web/assets/index-Dukvfqm-.js +0 -323
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getGateConfig,
|
|
3
|
+
getTaskSettings,
|
|
4
|
+
isTaskConflictError,
|
|
5
|
+
isTaskGateError
|
|
6
|
+
} from "./chunk-OTYAEEX3.js";
|
|
7
|
+
import {
|
|
8
|
+
getProject
|
|
9
|
+
} from "./chunk-SFZGMB2G.js";
|
|
10
|
+
import "./chunk-OSXPQSLW.js";
|
|
11
|
+
import "./chunk-MUSPWEBB.js";
|
|
12
|
+
import "./chunk-J2GP3J3X.js";
|
|
13
|
+
import "./chunk-LXYPMFTH.js";
|
|
14
|
+
import "./chunk-V4IE7HJY.js";
|
|
15
|
+
import "./chunk-AZHWLLPP.js";
|
|
16
|
+
import "./chunk-HNCM3D7Y.js";
|
|
17
|
+
import "./chunk-L737Y63F.js";
|
|
18
|
+
import "./chunk-OXSTNSCF.js";
|
|
19
|
+
import "./chunk-HP5CIB66.js";
|
|
20
|
+
import "./chunk-PBW3YC3G.js";
|
|
21
|
+
import "./chunk-K44MW7JJ.js";
|
|
22
|
+
import "./chunk-5WRI5ZAA.js";
|
|
23
|
+
|
|
24
|
+
// src/server/routes/tasks.ts
|
|
25
|
+
import "express";
|
|
26
|
+
function registerTaskRoutes(router, tasksService) {
|
|
27
|
+
const requireProject = (req, res) => {
|
|
28
|
+
const projectId = req.params["projectId"];
|
|
29
|
+
if (!getProject(projectId)) {
|
|
30
|
+
res.status(404).json({ error: "Project not found" });
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return projectId;
|
|
34
|
+
};
|
|
35
|
+
const handleError = (res, error) => {
|
|
36
|
+
if (isTaskGateError(error)) {
|
|
37
|
+
return res.status(422).json({
|
|
38
|
+
error: error.message,
|
|
39
|
+
code: "GATE_BLOCKED",
|
|
40
|
+
missing: error.missing,
|
|
41
|
+
task: error.task
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (isTaskConflictError(error)) {
|
|
45
|
+
return res.status(409).json({ error: error.message, code: "CONFLICT", task: error.task });
|
|
46
|
+
}
|
|
47
|
+
return res.status(400).json({ error: error instanceof Error ? error.message : "Unknown error" });
|
|
48
|
+
};
|
|
49
|
+
const HUMAN = "human";
|
|
50
|
+
router.get("/projects/:projectId/tasks", (req, res) => {
|
|
51
|
+
const projectId = requireProject(req, res);
|
|
52
|
+
if (!projectId) return;
|
|
53
|
+
res.json(tasksService.snapshot(projectId));
|
|
54
|
+
});
|
|
55
|
+
router.get("/projects/:projectId/tasks/count", (req, res) => {
|
|
56
|
+
const projectId = requireProject(req, res);
|
|
57
|
+
if (!projectId) return;
|
|
58
|
+
res.json({ counts: tasksService.counts(projectId) });
|
|
59
|
+
});
|
|
60
|
+
router.get("/projects/:projectId/tasks/gates", (req, res) => {
|
|
61
|
+
const projectId = requireProject(req, res);
|
|
62
|
+
if (!projectId) return;
|
|
63
|
+
res.json({ gates: getGateConfig(projectId) });
|
|
64
|
+
});
|
|
65
|
+
router.put("/projects/:projectId/tasks/gates", (req, res) => {
|
|
66
|
+
const projectId = requireProject(req, res);
|
|
67
|
+
if (!projectId) return;
|
|
68
|
+
const { gates } = req.body;
|
|
69
|
+
if (!Array.isArray(gates)) {
|
|
70
|
+
return res.status(400).json({ error: "gates (array) is required" });
|
|
71
|
+
}
|
|
72
|
+
const normalized = gates.map(
|
|
73
|
+
(g, i) => ({
|
|
74
|
+
id: typeof g?.id === "string" && g.id ? g.id : `gate_${i}`,
|
|
75
|
+
name: typeof g?.name === "string" && g.name ? g.name : `Gate ${i + 1}`,
|
|
76
|
+
description: typeof g?.description === "string" ? g.description : "",
|
|
77
|
+
required: g?.required !== false,
|
|
78
|
+
variant: g?.variant === "ready" ? "ready" : "done"
|
|
79
|
+
})
|
|
80
|
+
);
|
|
81
|
+
res.json({ gates: tasksService.setGateConfig(projectId, normalized, { actor: HUMAN }) });
|
|
82
|
+
});
|
|
83
|
+
router.get("/projects/:projectId/tasks/settings", (req, res) => {
|
|
84
|
+
const projectId = requireProject(req, res);
|
|
85
|
+
if (!projectId) return;
|
|
86
|
+
res.json({ settings: getTaskSettings(projectId) });
|
|
87
|
+
});
|
|
88
|
+
router.put("/projects/:projectId/tasks/settings", (req, res) => {
|
|
89
|
+
const projectId = requireProject(req, res);
|
|
90
|
+
if (!projectId) return;
|
|
91
|
+
const { slotLimit, queuePaused } = req.body;
|
|
92
|
+
const settings = {};
|
|
93
|
+
if (typeof slotLimit === "number") {
|
|
94
|
+
if (!Number.isInteger(slotLimit) || slotLimit < 1 || slotLimit > 10) {
|
|
95
|
+
return res.status(400).json({ error: "slotLimit must be an integer between 1 and 10" });
|
|
96
|
+
}
|
|
97
|
+
settings.slotLimit = slotLimit;
|
|
98
|
+
}
|
|
99
|
+
if (typeof queuePaused === "boolean") settings.queuePaused = queuePaused;
|
|
100
|
+
if (Object.keys(settings).length === 0) {
|
|
101
|
+
return res.status(400).json({ error: "Provide slotLimit and/or queuePaused" });
|
|
102
|
+
}
|
|
103
|
+
tasksService.setSettings(projectId, settings).then((saved) => {
|
|
104
|
+
res.json({ settings: saved });
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
router.post("/projects/:projectId/tasks", (req, res) => {
|
|
108
|
+
const projectId = requireProject(req, res);
|
|
109
|
+
if (!projectId) return;
|
|
110
|
+
const { prompt, attachments, agentId, providerId, model } = req.body;
|
|
111
|
+
if (typeof prompt !== "string") {
|
|
112
|
+
return res.status(400).json({ error: "prompt (string) is required" });
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const task = tasksService.create(
|
|
116
|
+
projectId,
|
|
117
|
+
{
|
|
118
|
+
prompt,
|
|
119
|
+
...Array.isArray(attachments) ? { attachments } : {},
|
|
120
|
+
...typeof agentId === "string" ? { agentId } : {},
|
|
121
|
+
...typeof providerId === "string" ? { providerId } : {},
|
|
122
|
+
...typeof model === "string" ? { model } : {}
|
|
123
|
+
},
|
|
124
|
+
{ actor: HUMAN }
|
|
125
|
+
);
|
|
126
|
+
res.status(201).json({ task });
|
|
127
|
+
} catch (error) {
|
|
128
|
+
handleError(res, error);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
router.get("/projects/:projectId/tasks/:taskId", (req, res) => {
|
|
132
|
+
const projectId = requireProject(req, res);
|
|
133
|
+
if (!projectId) return;
|
|
134
|
+
const task = tasksService.get(projectId, req.params["taskId"]);
|
|
135
|
+
if (!task) return res.status(404).json({ error: "Task not found" });
|
|
136
|
+
res.json({ task });
|
|
137
|
+
});
|
|
138
|
+
router.put("/projects/:projectId/tasks/:taskId", (req, res) => {
|
|
139
|
+
const projectId = requireProject(req, res);
|
|
140
|
+
if (!projectId) return;
|
|
141
|
+
const { prompt, attachments, agentId, providerId, model, expectedVersion } = req.body;
|
|
142
|
+
const patch = {};
|
|
143
|
+
if (typeof prompt === "string") patch.prompt = prompt;
|
|
144
|
+
if (Array.isArray(attachments)) {
|
|
145
|
+
patch.attachments = attachments;
|
|
146
|
+
}
|
|
147
|
+
if (typeof agentId === "string" || agentId === null) patch.agentId = agentId;
|
|
148
|
+
if (typeof providerId === "string" || providerId === null) patch.providerId = providerId;
|
|
149
|
+
if (typeof model === "string" || model === null) patch.model = model;
|
|
150
|
+
if (Object.keys(patch).length === 0) {
|
|
151
|
+
return res.status(400).json({ error: "No updatable fields provided" });
|
|
152
|
+
}
|
|
153
|
+
tasksService.update(projectId, req.params["taskId"], patch, { actor: HUMAN }, expectedVersion).then(({ task }) => res.json({ task })).catch((error) => handleError(res, error));
|
|
154
|
+
});
|
|
155
|
+
router.delete("/projects/:projectId/tasks/:taskId", (req, res) => {
|
|
156
|
+
const projectId = requireProject(req, res);
|
|
157
|
+
if (!projectId) return;
|
|
158
|
+
tasksService.remove(projectId, req.params["taskId"], { actor: HUMAN }).then(() => res.status(204).end()).catch((error) => handleError(res, error));
|
|
159
|
+
});
|
|
160
|
+
router.post("/projects/:projectId/tasks/:taskId/duplicate", (req, res) => {
|
|
161
|
+
const projectId = requireProject(req, res);
|
|
162
|
+
if (!projectId) return;
|
|
163
|
+
try {
|
|
164
|
+
const task = tasksService.duplicate(projectId, req.params["taskId"], { actor: HUMAN });
|
|
165
|
+
res.status(201).json({ task });
|
|
166
|
+
} catch (error) {
|
|
167
|
+
handleError(res, error);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
router.post("/projects/:projectId/tasks/:taskId/move", (req, res) => {
|
|
171
|
+
const projectId = requireProject(req, res);
|
|
172
|
+
if (!projectId) return;
|
|
173
|
+
const { to, reason, expectedVersion } = req.body;
|
|
174
|
+
if (!["todo", "in_progress", "done"].includes(to)) {
|
|
175
|
+
return res.status(400).json({ error: "to must be one of: todo, in_progress, done" });
|
|
176
|
+
}
|
|
177
|
+
tasksService.move(projectId, req.params["taskId"], to, {
|
|
178
|
+
actor: HUMAN,
|
|
179
|
+
...typeof reason === "string" ? { reason } : {},
|
|
180
|
+
...typeof expectedVersion === "number" ? { expectedVersion } : {}
|
|
181
|
+
}).then((result) => res.json(result)).catch((error) => handleError(res, error));
|
|
182
|
+
});
|
|
183
|
+
router.put("/projects/:projectId/tasks/:taskId/gate-values/:gateId", (req, res) => {
|
|
184
|
+
const projectId = requireProject(req, res);
|
|
185
|
+
if (!projectId) return;
|
|
186
|
+
const { value, expectedVersion } = req.body;
|
|
187
|
+
if (typeof value !== "string") {
|
|
188
|
+
return res.status(400).json({ error: "value (string) is required" });
|
|
189
|
+
}
|
|
190
|
+
tasksService.setGateValue(
|
|
191
|
+
projectId,
|
|
192
|
+
req.params["taskId"],
|
|
193
|
+
req.params["gateId"],
|
|
194
|
+
value,
|
|
195
|
+
{ actor: HUMAN },
|
|
196
|
+
void 0,
|
|
197
|
+
expectedVersion
|
|
198
|
+
).then(({ task }) => res.json({ task })).catch((error) => handleError(res, error));
|
|
199
|
+
});
|
|
200
|
+
router.post("/projects/:projectId/tasks/:taskId/reorder", (req, res) => {
|
|
201
|
+
const projectId = requireProject(req, res);
|
|
202
|
+
if (!projectId) return;
|
|
203
|
+
const { status, index } = req.body;
|
|
204
|
+
if (!["todo", "in_progress", "done"].includes(status) || typeof index !== "number") {
|
|
205
|
+
return res.status(400).json({ error: "status and index (number) are required" });
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
res.json({ task: tasksService.reorder(projectId, req.params["taskId"], status, index) });
|
|
209
|
+
} catch (error) {
|
|
210
|
+
handleError(res, error);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
export {
|
|
215
|
+
registerTaskRoutes
|
|
216
|
+
};
|
|
217
|
+
//# sourceMappingURL=tasks-TJXG2V3U.js.map
|
|
@@ -7,51 +7,58 @@ import {
|
|
|
7
7
|
getToolRegistryForSubAgent,
|
|
8
8
|
parseToolPermissions,
|
|
9
9
|
setMcpTools,
|
|
10
|
+
setTasksService,
|
|
10
11
|
stepDoneTool,
|
|
11
12
|
validateToolAction
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-K733B5T2.js";
|
|
14
|
+
import "./chunk-YGJIK3CG.js";
|
|
15
|
+
import "./chunk-NLO64UE3.js";
|
|
16
|
+
import "./chunk-2XD65L7M.js";
|
|
17
|
+
import "./chunk-P5UANBBX.js";
|
|
18
|
+
import "./chunk-TKKP56QK.js";
|
|
18
19
|
import "./chunk-I72ACQ6R.js";
|
|
19
20
|
import "./chunk-JE7LW7Y6.js";
|
|
20
21
|
import "./chunk-OAN4BXEW.js";
|
|
21
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-SBSUDHL4.js";
|
|
22
23
|
import "./chunk-J7GAZGZT.js";
|
|
23
|
-
import "./chunk-
|
|
24
|
+
import "./chunk-OTYAEEX3.js";
|
|
25
|
+
import "./chunk-L63Q4JQJ.js";
|
|
24
26
|
import {
|
|
25
27
|
PathAccessDeniedError,
|
|
26
28
|
cancelPathConfirmationsForSession,
|
|
27
29
|
getConfirmationSessionId,
|
|
28
30
|
providePathConfirmation,
|
|
29
31
|
requestPathAccess
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-
|
|
33
|
-
import "./chunk-
|
|
32
|
+
} from "./chunk-BZVW77PI.js";
|
|
33
|
+
import "./chunk-JXLRL5JR.js";
|
|
34
|
+
import "./chunk-I7FY2LTR.js";
|
|
35
|
+
import "./chunk-SA34STZ6.js";
|
|
34
36
|
import {
|
|
35
37
|
AskUserInterrupt,
|
|
36
38
|
cancelQuestionsForSession,
|
|
37
39
|
getPendingQuestionsForSession,
|
|
38
40
|
provideAnswer
|
|
39
41
|
} from "./chunk-JURM3RPZ.js";
|
|
40
|
-
import "./chunk-
|
|
41
|
-
import "./chunk-
|
|
42
|
-
import "./chunk-
|
|
42
|
+
import "./chunk-JP7NM545.js";
|
|
43
|
+
import "./chunk-SFZGMB2G.js";
|
|
44
|
+
import "./chunk-UTIQ7OO5.js";
|
|
43
45
|
import "./chunk-LCLH6ZUL.js";
|
|
44
|
-
import "./chunk-
|
|
45
|
-
import "./chunk-
|
|
46
|
+
import "./chunk-3O77NT4T.js";
|
|
47
|
+
import "./chunk-UPBWEHIL.js";
|
|
48
|
+
import "./chunk-OSXPQSLW.js";
|
|
49
|
+
import "./chunk-MUSPWEBB.js";
|
|
46
50
|
import "./chunk-J2GP3J3X.js";
|
|
51
|
+
import "./chunk-LXYPMFTH.js";
|
|
47
52
|
import "./chunk-V4IE7HJY.js";
|
|
48
|
-
import "./chunk-
|
|
53
|
+
import "./chunk-AZHWLLPP.js";
|
|
54
|
+
import "./chunk-HNCM3D7Y.js";
|
|
49
55
|
import "./chunk-L737Y63F.js";
|
|
50
|
-
import "./chunk-
|
|
51
|
-
import "./chunk-
|
|
56
|
+
import "./chunk-OXSTNSCF.js";
|
|
57
|
+
import "./chunk-HP5CIB66.js";
|
|
58
|
+
import "./chunk-PBW3YC3G.js";
|
|
52
59
|
import "./chunk-K44MW7JJ.js";
|
|
53
|
-
import "./chunk-
|
|
54
|
-
import "./chunk-
|
|
60
|
+
import "./chunk-X25Q6RAV.js";
|
|
61
|
+
import "./chunk-KSXCOHHW.js";
|
|
55
62
|
import "./chunk-CQGTEGKL.js";
|
|
56
63
|
import "./chunk-5WRI5ZAA.js";
|
|
57
64
|
export {
|
|
@@ -72,7 +79,8 @@ export {
|
|
|
72
79
|
providePathConfirmation,
|
|
73
80
|
requestPathAccess,
|
|
74
81
|
setMcpTools,
|
|
82
|
+
setTasksService,
|
|
75
83
|
stepDoneTool,
|
|
76
84
|
validateToolAction
|
|
77
85
|
};
|
|
78
|
-
//# sourceMappingURL=tools-
|
|
86
|
+
//# sourceMappingURL=tools-CIM26IFB.js.map
|
|
@@ -23,6 +23,10 @@ interface WorkflowParameter {
|
|
|
23
23
|
position?: number;
|
|
24
24
|
required?: boolean;
|
|
25
25
|
}
|
|
26
|
+
/** Where a workflow definition lives: bundled defaults, global config, or the project's .openfox/. */
|
|
27
|
+
type WorkflowScope = 'builtin' | 'user' | 'project';
|
|
28
|
+
/** Launch scope: an explicit bucket to resolve from, or 'auto' for server precedence (project > user > builtin). */
|
|
29
|
+
type WorkflowLaunchScope = WorkflowScope | 'auto';
|
|
26
30
|
type WorkflowExecutionStatus = 'running' | 'waiting' | 'completed' | 'cancelled' | 'blocked';
|
|
27
31
|
/** A selectable branch presented to the user at a paused user step. */
|
|
28
32
|
interface UserStepChoice {
|
|
@@ -32,6 +36,8 @@ interface UserStepChoice {
|
|
|
32
36
|
label: string;
|
|
33
37
|
/** Target step the choice routes to. */
|
|
34
38
|
goto: string;
|
|
39
|
+
/** Display name of the target step, when it resolves to a step in the workflow. */
|
|
40
|
+
nextStepName?: string;
|
|
35
41
|
}
|
|
36
42
|
interface WorkflowExecution {
|
|
37
43
|
id: string;
|
|
@@ -46,6 +52,8 @@ interface WorkflowExecution {
|
|
|
46
52
|
params: Record<string, string>;
|
|
47
53
|
/** Available branches at a paused user step, if any. */
|
|
48
54
|
pendingChoices?: UserStepChoice[];
|
|
55
|
+
/** Sub-group slice this run belongs to, when launched as a slice. */
|
|
56
|
+
subGroup?: string;
|
|
49
57
|
createdAt: number;
|
|
50
58
|
updatedAt: number;
|
|
51
59
|
}
|
|
@@ -104,6 +112,7 @@ interface SessionSummary {
|
|
|
104
112
|
mode: SessionMode;
|
|
105
113
|
phase: SessionPhase;
|
|
106
114
|
isRunning: boolean;
|
|
115
|
+
isFavorite: boolean;
|
|
107
116
|
providerId?: string | null;
|
|
108
117
|
providerModel?: string | null;
|
|
109
118
|
createdAt: string;
|
|
@@ -342,6 +351,77 @@ interface ToolResult {
|
|
|
342
351
|
metadata?: Record<string, unknown>;
|
|
343
352
|
}
|
|
344
353
|
type ToolName = 'read_file' | 'write_file' | 'edit_file' | 'run_command' | 'glob' | 'grep' | 'ask_user' | 'session_metadata' | 'web_fetch';
|
|
354
|
+
type TaskStatus = 'todo' | 'in_progress' | 'done';
|
|
355
|
+
/** Active state of an in-progress task: launched (occupies a slot) or queued (waiting for a slot). */
|
|
356
|
+
type TaskRunState = 'running' | 'queued';
|
|
357
|
+
type TaskActor = 'human' | 'agent' | 'system';
|
|
358
|
+
/** Per-project gate (Definition of Done) configuration. */
|
|
359
|
+
interface TaskGateConfig {
|
|
360
|
+
id: string;
|
|
361
|
+
name: string;
|
|
362
|
+
/** Description of acceptable proof, e.g. "all green — every criterion passes with evidence". */
|
|
363
|
+
description: string;
|
|
364
|
+
/** Whether the gate blocks Done until satisfied. */
|
|
365
|
+
required: boolean;
|
|
366
|
+
/** 'done' = definition of done (blocks entering Done). 'ready' = definition of ready (off by default). */
|
|
367
|
+
variant: 'done' | 'ready';
|
|
368
|
+
}
|
|
369
|
+
/** A filled-in value for a gate field, recording who set it and when. */
|
|
370
|
+
interface TaskGateValue {
|
|
371
|
+
gateId: string;
|
|
372
|
+
value: string;
|
|
373
|
+
actor: TaskActor;
|
|
374
|
+
actorName?: string;
|
|
375
|
+
sessionId?: string;
|
|
376
|
+
timestamp: string;
|
|
377
|
+
}
|
|
378
|
+
interface TaskAuditEntry {
|
|
379
|
+
id: string;
|
|
380
|
+
timestamp: string;
|
|
381
|
+
actor: TaskActor;
|
|
382
|
+
actorName?: string;
|
|
383
|
+
action: string;
|
|
384
|
+
detail: string;
|
|
385
|
+
}
|
|
386
|
+
interface ProjectTask {
|
|
387
|
+
id: string;
|
|
388
|
+
projectId: string;
|
|
389
|
+
prompt: string;
|
|
390
|
+
attachments: Attachment[];
|
|
391
|
+
status: TaskStatus;
|
|
392
|
+
/** Present only while status is in_progress. */
|
|
393
|
+
runState?: TaskRunState;
|
|
394
|
+
/** 1-based queue position while queued. */
|
|
395
|
+
queuePosition?: number;
|
|
396
|
+
/** Ordering within the column (stable, used for drag-reorder). */
|
|
397
|
+
position: number;
|
|
398
|
+
/** Monotonic revision counter — bumped on every mutation. Optimistic concurrency guard. */
|
|
399
|
+
version: number;
|
|
400
|
+
agentId?: string;
|
|
401
|
+
providerId?: string;
|
|
402
|
+
model?: string;
|
|
403
|
+
/** Linked sessions, active working session first, then historical attempts. */
|
|
404
|
+
sessionIds: string[];
|
|
405
|
+
activeSessionId?: string;
|
|
406
|
+
gateValues: TaskGateValue[];
|
|
407
|
+
auditTrail: TaskAuditEntry[];
|
|
408
|
+
createdAt: string;
|
|
409
|
+
updatedAt: string;
|
|
410
|
+
}
|
|
411
|
+
interface ProjectTaskSettings {
|
|
412
|
+
slotLimit: number;
|
|
413
|
+
queuePaused: boolean;
|
|
414
|
+
}
|
|
415
|
+
interface ProjectTaskCounts {
|
|
416
|
+
open: number;
|
|
417
|
+
todo: number;
|
|
418
|
+
inProgress: number;
|
|
419
|
+
/** Actively running (occupying a slot). */
|
|
420
|
+
running: number;
|
|
421
|
+
/** Waiting for a slot to free. */
|
|
422
|
+
queued: number;
|
|
423
|
+
done: number;
|
|
424
|
+
}
|
|
345
425
|
interface Criterion {
|
|
346
426
|
id: string;
|
|
347
427
|
description: string;
|
|
@@ -591,4 +671,4 @@ interface ElementData {
|
|
|
591
671
|
attributes: Record<string, string>;
|
|
592
672
|
}
|
|
593
673
|
|
|
594
|
-
export type { Attachment as A,
|
|
674
|
+
export type { ToolResult as $, Attachment as A, SessionMetadata as B, CallStatsDataPoint as C, DangerLevel as D, EditContextEdit as E, FileReadEntry as F, SessionMode as G, SessionPhase as H, InjectedFile as I, SessionSummary as J, StatsDataPoint as K, LLMCallStats as L, ModelConfig as M, StatsIdentity as N, TaskActor as O, PreparingToolCall as P, TaskAuditEntry as Q, RecentUserPrompt as R, SessionStats as S, ToolCall as T, TaskGateConfig as U, TaskGateValue as V, TaskRunState as W, TaskStatus as X, Todo as Y, ToolMode as Z, ToolName as _, Message as a, UserStepChoice as a0, ValidationResult as a1, WorkflowExecution as a2, WorkflowExecutionStatus as a3, WorkflowLaunchScope as a4, WorkflowParameter as a5, WorkflowScope as a6, Config as b, ContextState as c, ContextWindow as d, Criterion as e, CriterionAttempt as f, CriterionStatus as g, CriterionValidation as h, Diagnostic as i, EditContextLine as j, EditContextRegion as k, ElementData as l, ExecutionState as m, LlmBackend as n, MessageRole as o, MessageSegment as p, MessageStats as q, MetadataEntry as r, ModelSessionStats as s, Project as t, ProjectTask as u, ProjectTaskCounts as v, ProjectTaskSettings as w, Provider as x, ProviderBackend as y, Session as z };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
VERSION
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NCZRWCJN.js";
|
|
4
4
|
import "./chunk-5WRI5ZAA.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-UZBBO42X.js.map
|