@flowdesk/opencode-plugin 0.1.12 → 0.1.13

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 (57) hide show
  1. package/dist/agent-task-runner.d.ts +1 -0
  2. package/dist/agent-task-runner.d.ts.map +1 -1
  3. package/dist/agent-task-runner.js +172 -26
  4. package/dist/agent-task-runner.js.map +1 -1
  5. package/dist/controlled-write-tool.d.ts +49 -0
  6. package/dist/controlled-write-tool.d.ts.map +1 -0
  7. package/dist/controlled-write-tool.js +296 -0
  8. package/dist/controlled-write-tool.js.map +1 -0
  9. package/dist/managed-dispatch-adapter.d.ts +1 -0
  10. package/dist/managed-dispatch-adapter.d.ts.map +1 -1
  11. package/dist/managed-dispatch-adapter.js +93 -26
  12. package/dist/managed-dispatch-adapter.js.map +1 -1
  13. package/dist/provider-usage-live-tool.d.ts +17 -0
  14. package/dist/provider-usage-live-tool.d.ts.map +1 -1
  15. package/dist/provider-usage-live-tool.js +317 -5
  16. package/dist/provider-usage-live-tool.js.map +1 -1
  17. package/dist/quick-reviewer-run.d.ts +3 -0
  18. package/dist/quick-reviewer-run.d.ts.map +1 -1
  19. package/dist/quick-reviewer-run.js +20 -8
  20. package/dist/quick-reviewer-run.js.map +1 -1
  21. package/dist/runtime-reviewer-execution-bridge.d.ts +21 -0
  22. package/dist/runtime-reviewer-execution-bridge.d.ts.map +1 -1
  23. package/dist/runtime-reviewer-execution-bridge.js +238 -0
  24. package/dist/runtime-reviewer-execution-bridge.js.map +1 -1
  25. package/dist/server.d.ts +25 -0
  26. package/dist/server.d.ts.map +1 -1
  27. package/dist/server.js +356 -25
  28. package/dist/server.js.map +1 -1
  29. package/dist/stall-recovery.d.ts +27 -0
  30. package/dist/stall-recovery.d.ts.map +1 -1
  31. package/dist/stall-recovery.js +305 -10
  32. package/dist/stall-recovery.js.map +1 -1
  33. package/dist/status-live-tool.d.ts +27 -0
  34. package/dist/status-live-tool.d.ts.map +1 -1
  35. package/dist/status-live-tool.js +179 -1
  36. package/dist/status-live-tool.js.map +1 -1
  37. package/dist/tui-usage-snapshot.d.ts +30 -0
  38. package/dist/tui-usage-snapshot.d.ts.map +1 -0
  39. package/dist/tui-usage-snapshot.js +216 -0
  40. package/dist/tui-usage-snapshot.js.map +1 -0
  41. package/dist/tui.d.ts +7 -0
  42. package/dist/tui.d.ts.map +1 -0
  43. package/dist/tui.js +103 -0
  44. package/dist/tui.js.map +1 -0
  45. package/dist/workflow-dispatch-plan-tool.d.ts +47 -0
  46. package/dist/workflow-dispatch-plan-tool.d.ts.map +1 -0
  47. package/dist/workflow-dispatch-plan-tool.js +251 -0
  48. package/dist/workflow-dispatch-plan-tool.js.map +1 -0
  49. package/dist/workflow-dispatch-tool.d.ts +56 -0
  50. package/dist/workflow-dispatch-tool.d.ts.map +1 -0
  51. package/dist/workflow-dispatch-tool.js +276 -0
  52. package/dist/workflow-dispatch-tool.js.map +1 -0
  53. package/dist/workflow-scheduler.d.ts +19 -0
  54. package/dist/workflow-scheduler.d.ts.map +1 -0
  55. package/dist/workflow-scheduler.js +43 -0
  56. package/dist/workflow-scheduler.js.map +1 -0
  57. package/package.json +9 -1
@@ -0,0 +1,276 @@
1
+ import { applyFlowDeskSessionEvidenceWriteIntentsV1, evaluateFlowDeskWorkflowDispatchPlanningV1, prepareFlowDeskSessionEvidenceWriteIntentV1, reloadFlowDeskSessionEvidenceV1, } from "@flowdesk/core";
2
+ import { executeFlowDeskAgentTaskV1 } from "./agent-task-runner.js";
3
+ const authoritySmugglingKeys = new Set([
4
+ "fallbackAuthority",
5
+ "providerFallback",
6
+ "providerReselection",
7
+ "realOpenCodeDispatch",
8
+ "runtimeExecution",
9
+ "toolAuthority",
10
+ "writeApply",
11
+ "controlledWrite",
12
+ ]);
13
+ const forbiddenTextPattern = /\b(?:fallback|reselection|reselect|retry\s+with\s+(?:another|different)|switch\s+(?:provider|model)|controlled\s+write|write\s+apply|apply\s+write|apply\s+changes|write\s+files?|edit\s+files?|modify\s+files?|opencode\s+run|hidden\s+injection|omo)\b/i;
14
+ function safeNextActions() {
15
+ return ["/flowdesk-status", "/flowdesk-export-debug", "/flowdesk-doctor"];
16
+ }
17
+ function authority(input) {
18
+ return {
19
+ realOpenCodeDispatch: false,
20
+ providerCall: input.actualLaneLaunchAttempted,
21
+ runtimeExecution: input.actualLaneLaunchAttempted,
22
+ actualLaneLaunch: input.actualLaneLaunchAttempted,
23
+ fallbackAuthority: false,
24
+ hardCancelOrNoReplyAuthority: false,
25
+ toolAuthority: false,
26
+ dispatchAuthorityEnabled: false,
27
+ defaultRelease1DispatchAuthority: false,
28
+ developerModeAcknowledged: input.developerModeAcknowledged,
29
+ workflowDispatchPlanPersisted: input.planPersisted,
30
+ devModeActualLaneLaunchAttempted: input.actualLaneLaunchAttempted,
31
+ };
32
+ }
33
+ function blocked(input) {
34
+ const workflowId = input.workflowId ?? input.request?.workflowId;
35
+ return {
36
+ status: "blocked_before_workflow_dispatch",
37
+ ...(input.config?.rootDir === undefined ? {} : { rootDir: input.config.rootDir }),
38
+ ...(workflowId === undefined ? {} : { workflowId }),
39
+ ...(input.planRevisionId === undefined ? {} : { planRevisionId: input.planRevisionId }),
40
+ ...(input.request?.parentSessionId === undefined ? {} : { parentSessionId: input.request.parentSessionId }),
41
+ ...(input.laneId === undefined ? {} : { laneId: input.laneId }),
42
+ ...(input.taskId === undefined ? {} : { taskId: input.taskId }),
43
+ redactedBlockReason: input.reason,
44
+ summaryForUser: `FlowDesk dev-mode workflow dispatch blocked: ${input.reason}.`,
45
+ safeNextActions: safeNextActions(),
46
+ authority: authority({
47
+ developerModeAcknowledged: input.request?.developerModeAcknowledged === true,
48
+ planPersisted: input.planPersisted === true,
49
+ actualLaneLaunchAttempted: input.actualLaneLaunchAttempted === true,
50
+ }),
51
+ };
52
+ }
53
+ function isRecord(value) {
54
+ return typeof value === "object" && value !== null && !Array.isArray(value);
55
+ }
56
+ function stableToken(value, fallback) {
57
+ const token = value.replaceAll(/[^A-Za-z0-9_.:-]/g, "-").slice(0, 96);
58
+ return token.length >= 3 ? token : fallback;
59
+ }
60
+ function hasForbiddenAuthority(value) {
61
+ if (typeof value === "string")
62
+ return forbiddenTextPattern.test(value);
63
+ if (!isRecord(value))
64
+ return false;
65
+ for (const [key, entry] of Object.entries(value)) {
66
+ if (authoritySmugglingKeys.has(key) && entry !== false && entry !== undefined)
67
+ return true;
68
+ if (hasForbiddenAuthority(entry))
69
+ return true;
70
+ }
71
+ return false;
72
+ }
73
+ function normalizeRequest(value) {
74
+ if (!isRecord(value))
75
+ return {};
76
+ const task = isRecord(value.task) ? value.task : undefined;
77
+ return {
78
+ ...(typeof value.workflowId === "string" ? { workflowId: value.workflowId } : {}),
79
+ ...(typeof value.goalSummary === "string" ? { goalSummary: value.goalSummary } : {}),
80
+ ...(typeof value.parentSessionId === "string" ? { parentSessionId: value.parentSessionId } : {}),
81
+ ...(task === undefined
82
+ ? {}
83
+ : {
84
+ task: {
85
+ ...(typeof task.agentRole === "string" ? { agentRole: task.agentRole } : {}),
86
+ ...(typeof task.summary === "string" ? { summary: task.summary } : {}),
87
+ ...(typeof task.promptText === "string" ? { promptText: task.promptText } : {}),
88
+ ...(typeof task.agentName === "string" ? { agentName: task.agentName } : {}),
89
+ ...(typeof task.providerQualifiedModelId === "string" ? { providerQualifiedModelId: task.providerQualifiedModelId } : {}),
90
+ ...(typeof task.outputContractRef === "string" ? { outputContractRef: task.outputContractRef } : {}),
91
+ },
92
+ }),
93
+ developerModeAcknowledged: value.developerModeAcknowledged === true,
94
+ allowProviderCall: value.allowProviderCall === true,
95
+ allowActualLaneLaunch: value.allowActualLaneLaunch === true,
96
+ };
97
+ }
98
+ function terminalEvidencePresent(input) {
99
+ const reload = reloadFlowDeskSessionEvidenceV1({
100
+ workflowId: input.workflowId,
101
+ rootDir: input.rootDir,
102
+ });
103
+ if (!reload.ok || reload.blocked.length > 0)
104
+ return false;
105
+ const terminalLifecycle = reload.entries.some((entry) => entry.evidenceClass === "lane_lifecycle" &&
106
+ entry.record.lane_id === input.laneId &&
107
+ ["incomplete", "no_output", "invocation_failed"].includes(String(entry.record.state)));
108
+ const terminalTaskEvidence = reload.entries.some((entry) => entry.record.task_id === input.taskId &&
109
+ entry.evidenceClass === (input.completed ? "task_result" : "task_failed"));
110
+ return terminalLifecycle && terminalTaskEvidence;
111
+ }
112
+ function planningLabel(value) {
113
+ return value
114
+ .replaceAll(/real\s*-?(?:opencode\s*-?)?dispatch/gi, "explicit dev-mode workflow")
115
+ .replaceAll(/dispatch(?:able|ed|es)?/gi, "workflow")
116
+ .replaceAll(/provider\s*-?call/gi, "provider opt-in")
117
+ .replaceAll(/runtime\s*-?execution/gi, "runtime opt-in")
118
+ .replaceAll(/actual\s*-?lane\s*-?launch|lane\s*-?launch/gi, "lane opt-in")
119
+ .slice(0, 500);
120
+ }
121
+ export async function executeFlowDeskWorkflowDispatchToolV1(input) {
122
+ const request = input.request ?? normalizeRequest(input.rawInput);
123
+ if (typeof input.config.rootDir !== "string" || input.config.rootDir.trim().length === 0)
124
+ return blocked({ config: input.config, request, reason: "workflowDispatch requires a durable state root directory" });
125
+ if (request.developerModeAcknowledged !== true)
126
+ return blocked({ config: input.config, request, reason: "developerModeAcknowledged=true is required" });
127
+ if (request.allowProviderCall !== true || request.allowActualLaneLaunch !== true)
128
+ return blocked({ config: input.config, request, reason: "allowProviderCall=true and allowActualLaneLaunch=true are required" });
129
+ if (hasForbiddenAuthority(input.rawInput ?? request))
130
+ return blocked({ config: input.config, request, reason: "request contains fallback/reselection, write/apply, or authority-smuggling wording" });
131
+ if (typeof request.goalSummary !== "string" || request.goalSummary.trim().length === 0)
132
+ return blocked({ config: input.config, request, reason: "goalSummary is required" });
133
+ if (typeof request.parentSessionId !== "string" || request.parentSessionId.trim().length === 0)
134
+ return blocked({ config: input.config, request, reason: "parentSessionId is required" });
135
+ const taskRequest = request.task;
136
+ if (taskRequest === undefined)
137
+ return blocked({ config: input.config, request, reason: "exactly one task is required" });
138
+ if (typeof taskRequest.promptText !== "string" || taskRequest.promptText.trim().length === 0)
139
+ return blocked({ config: input.config, request, reason: "task.promptText is required" });
140
+ if (typeof taskRequest.agentName !== "string" || taskRequest.agentName.trim().length === 0)
141
+ return blocked({ config: input.config, request, reason: "task.agentName is required" });
142
+ if (typeof taskRequest.providerQualifiedModelId !== "string" || !taskRequest.providerQualifiedModelId.includes("/"))
143
+ return blocked({ config: input.config, request, reason: "task.providerQualifiedModelId must be a concrete provider/model id" });
144
+ if ((taskRequest.outputContractRef ?? "contract-task-result-v1") !== "contract-task-result-v1")
145
+ return blocked({ config: input.config, request, reason: "only outputContractRef=contract-task-result-v1 is supported" });
146
+ const observed = input.now ? input.now() : new Date();
147
+ const stamp = observed.toISOString().replaceAll(/[-:.]/g, "").replace("Z", "Z");
148
+ const workflowId = stableToken(request.workflowId ?? `workflow-dispatch-${stamp}`, `workflow-dispatch-${stamp}`);
149
+ const taskId = stableToken(`task-1-${workflowId}`, "task-1");
150
+ const laneId = stableToken(`lane-${taskId}`, "lane-task-1");
151
+ const planRevisionId = stableToken(`workflow-dispatch-plan-${workflowId}-${stamp}`, `workflow-dispatch-plan-${stamp}`);
152
+ const agentRole = (taskRequest.agentRole ?? "implementation");
153
+ const agentRef = stableToken((taskRequest.agentName.startsWith("agent-") ? taskRequest.agentName : `agent-${taskRequest.agentName}`).toLowerCase(), "agent-flowdesk-task");
154
+ const taskSummary = planningLabel(taskRequest.summary ?? "FlowDesk dev-mode task summary not provided.");
155
+ const tasks = [
156
+ {
157
+ task_id: taskId,
158
+ title: taskSummary.slice(0, 120) || "FlowDesk dev-mode task",
159
+ summary: taskSummary,
160
+ agent_role: agentRole,
161
+ agent_role_ref: agentRef,
162
+ },
163
+ ];
164
+ const selectedAgentRoles = [
165
+ { agent_role: agentRole, agent_role_ref: agentRef },
166
+ ];
167
+ const evaluation = evaluateFlowDeskWorkflowDispatchPlanningV1({
168
+ workflowId,
169
+ planRevisionId,
170
+ requestedGoalSummary: planningLabel(request.goalSummary),
171
+ selectedAgentRoles,
172
+ tasks,
173
+ taskGraphSummary: "Dev-mode one-task workflow graph. Planning evidence remains non-authorizing.",
174
+ modelSelectionDiagnosticLabels: ["dev_mode_one_task"],
175
+ });
176
+ if (!evaluation.ok || evaluation.plan === undefined)
177
+ return blocked({
178
+ config: input.config,
179
+ request,
180
+ reason: evaluation.errors.join(", ") || "workflow dispatch plan validation failed",
181
+ workflowId,
182
+ planRevisionId,
183
+ laneId,
184
+ taskId,
185
+ });
186
+ const prepared = prepareFlowDeskSessionEvidenceWriteIntentV1({
187
+ workflowId,
188
+ evidenceId: planRevisionId,
189
+ record: evaluation.plan,
190
+ });
191
+ if (!prepared.ok || prepared.writeIntent === undefined)
192
+ return blocked({
193
+ config: input.config,
194
+ request,
195
+ reason: prepared.errors.join(", ") || "workflow dispatch plan write intent preparation failed",
196
+ workflowId,
197
+ planRevisionId,
198
+ laneId,
199
+ taskId,
200
+ });
201
+ const applied = applyFlowDeskSessionEvidenceWriteIntentsV1(input.config.rootDir, [prepared.writeIntent]);
202
+ if (!applied.ok)
203
+ return blocked({
204
+ config: input.config,
205
+ request,
206
+ reason: applied.errors.join(", ") || "workflow dispatch plan evidence write failed",
207
+ workflowId,
208
+ planRevisionId,
209
+ laneId,
210
+ taskId,
211
+ });
212
+ const planReload = reloadFlowDeskSessionEvidenceV1({ workflowId, rootDir: input.config.rootDir });
213
+ const planPersisted = planReload.ok && planReload.entries.some((entry) => entry.evidenceClass === "workflow_dispatch_plan" && entry.evidenceId === planRevisionId);
214
+ if (!planPersisted)
215
+ return blocked({
216
+ config: input.config,
217
+ request,
218
+ reason: "workflow dispatch plan reload verification failed",
219
+ workflowId,
220
+ planRevisionId,
221
+ laneId,
222
+ taskId,
223
+ });
224
+ const taskResult = await executeFlowDeskAgentTaskV1({
225
+ workflowId,
226
+ taskId,
227
+ laneId,
228
+ agentRef,
229
+ providerQualifiedModelId: taskRequest.providerQualifiedModelId,
230
+ promptText: taskRequest.promptText,
231
+ parentSessionId: request.parentSessionId,
232
+ rootDir: input.config.rootDir,
233
+ client: input.config.client,
234
+ outputContract: "final_assistant_text",
235
+ });
236
+ const completed = taskResult.status === "task_completed";
237
+ const terminalVerified = terminalEvidencePresent({
238
+ rootDir: input.config.rootDir,
239
+ workflowId,
240
+ laneId,
241
+ taskId,
242
+ completed,
243
+ });
244
+ if (!terminalVerified)
245
+ return blocked({
246
+ config: input.config,
247
+ request,
248
+ reason: "terminal lifecycle or task evidence reload verification failed",
249
+ workflowId,
250
+ planRevisionId,
251
+ laneId,
252
+ taskId,
253
+ planPersisted: true,
254
+ actualLaneLaunchAttempted: true,
255
+ });
256
+ return {
257
+ status: completed ? "workflow_dispatch_completed" : "workflow_dispatch_incomplete",
258
+ rootDir: input.config.rootDir,
259
+ workflowId,
260
+ planRevisionId,
261
+ parentSessionId: request.parentSessionId,
262
+ laneId,
263
+ taskId,
264
+ ...(completed ? { taskResultEvidenceId: taskResult.taskResultEvidenceId } : { redactedBlockReason: taskResult.redactedReason }),
265
+ summaryForUser: completed
266
+ ? `FlowDesk dev-mode workflow dispatch completed one lane for ${workflowId}. Default Release 1 dispatch authority remains disabled.`
267
+ : `FlowDesk dev-mode workflow dispatch launched one lane but ended incomplete: ${taskResult.redactedReason}. Default Release 1 dispatch authority remains disabled.`,
268
+ safeNextActions: safeNextActions(),
269
+ authority: authority({
270
+ developerModeAcknowledged: true,
271
+ planPersisted: true,
272
+ actualLaneLaunchAttempted: true,
273
+ }),
274
+ };
275
+ }
276
+ //# sourceMappingURL=workflow-dispatch-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-dispatch-tool.js","sourceRoot":"","sources":["../src/workflow-dispatch-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { FlowDeskTaskGraphV1, FlowDeskTaskModelSelectionV1 } from "@flowdesk/core";
2
+ import { type FlowDeskAgentTaskInputV1, type FlowDeskAgentTaskResultV1 } from "./agent-task-runner.js";
3
+ export interface FlowDeskWorkflowSchedulerInputV1 {
4
+ taskGraph: FlowDeskTaskGraphV1;
5
+ modelSelections: FlowDeskTaskModelSelectionV1[];
6
+ parentSessionId: string;
7
+ rootDir: string;
8
+ client: FlowDeskAgentTaskInputV1["client"];
9
+ agentRef: string;
10
+ runAgentTask?: (input: FlowDeskAgentTaskInputV1) => Promise<FlowDeskAgentTaskResultV1>;
11
+ }
12
+ export interface FlowDeskWorkflowSchedulerResultV1 {
13
+ status: "workflow_completed" | "workflow_incomplete";
14
+ executedTaskIds: string[];
15
+ results: Record<string, FlowDeskAgentTaskResultV1>;
16
+ redactedReason?: string;
17
+ }
18
+ export declare function executeFlowDeskWorkflowSchedulerV1(input: FlowDeskWorkflowSchedulerInputV1): Promise<FlowDeskWorkflowSchedulerResultV1>;
19
+ //# sourceMappingURL=workflow-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-scheduler.d.ts","sourceRoot":"","sources":["../src/workflow-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAA8B,KAAK,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnI,MAAM,WAAW,gCAAgC;IAChD,SAAS,EAAE,mBAAmB,CAAC;IAC/B,eAAe,EAAE,4BAA4B,EAAE,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACvF;AAED,MAAM,WAAW,iCAAiC;IACjD,MAAM,EAAE,oBAAoB,GAAG,qBAAqB,CAAC;IACrD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,kCAAkC,CACvD,KAAK,EAAE,gCAAgC,GACrC,OAAO,CAAC,iCAAiC,CAAC,CA6C5C"}
@@ -0,0 +1,43 @@
1
+ import { executeFlowDeskAgentTaskV1 } from "./agent-task-runner.js";
2
+ export async function executeFlowDeskWorkflowSchedulerV1(input) {
3
+ const run = input.runAgentTask ?? executeFlowDeskAgentTaskV1;
4
+ const nodes = input.taskGraph.nodes;
5
+ const selections = new Map(input.modelSelections.map((selection) => [selection.task_id, selection]));
6
+ const deps = new Map(nodes.map((node) => [node.task_id, new Set()]));
7
+ for (const edge of input.taskGraph.edges) {
8
+ if (edge.relation === "depends_on")
9
+ deps.get(edge.to_task_id)?.add(edge.from_task_id);
10
+ }
11
+ const done = new Set();
12
+ const executedTaskIds = [];
13
+ const results = {};
14
+ while (done.size < nodes.length) {
15
+ const next = nodes.find((node) => !done.has(node.task_id) && [...(deps.get(node.task_id) ?? [])].every((id) => done.has(id)));
16
+ if (!next)
17
+ return { status: "workflow_incomplete", executedTaskIds, results, redactedReason: "task graph dependency cycle or missing dependency" };
18
+ const selection = selections.get(next.task_id);
19
+ if (!selection || selection.selection_status !== "selected") {
20
+ return { status: "workflow_incomplete", executedTaskIds, results, redactedReason: `missing selected model for ${next.task_id}` };
21
+ }
22
+ const result = await run({
23
+ workflowId: input.taskGraph.workflow_id,
24
+ taskId: next.task_id,
25
+ laneId: `lane-${next.task_id}`,
26
+ agentRef: input.agentRef,
27
+ providerQualifiedModelId: selection.provider_qualified_model_id,
28
+ promptText: `${next.title}\n\n${next.summary}`,
29
+ parentSessionId: input.parentSessionId,
30
+ rootDir: input.rootDir,
31
+ client: input.client,
32
+ outputContract: "final_assistant_text",
33
+ });
34
+ results[next.task_id] = result;
35
+ executedTaskIds.push(next.task_id);
36
+ if (result.status !== "task_completed") {
37
+ return { status: "workflow_incomplete", executedTaskIds, results, redactedReason: result.redactedReason };
38
+ }
39
+ done.add(next.task_id);
40
+ }
41
+ return { status: "workflow_completed", executedTaskIds, results };
42
+ }
43
+ //# sourceMappingURL=workflow-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-scheduler.js","sourceRoot":"","sources":["../src/workflow-scheduler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowdesk/opencode-plugin",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "description": "FlowDesk OpenCode plugin with Release 1 non-dispatch command-backed registration.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -42,6 +42,11 @@
42
42
  "import": "./dist/server.js",
43
43
  "default": "./dist/server.js"
44
44
  },
45
+ "./tui": {
46
+ "types": "./dist/tui.d.ts",
47
+ "import": "./dist/tui.js",
48
+ "default": "./dist/tui.js"
49
+ },
45
50
  "./bootstrap-cli": {
46
51
  "types": "./dist/bootstrap-cli.d.ts",
47
52
  "import": "./dist/bootstrap-cli.js",
@@ -60,6 +65,9 @@
60
65
  "@flowdesk/core": "^0.1.12"
61
66
  },
62
67
  "peerDependencies": {
68
+ "@opentui/core": ">=0.2.15",
69
+ "@opentui/keymap": ">=0.2.15",
70
+ "@opentui/solid": ">=0.2.15",
63
71
  "@opencode-ai/plugin": ">=1.14.40 <2"
64
72
  },
65
73
  "peerDependenciesMeta": {