@synergenius/flow-weaver-pack-weaver 0.9.140 → 0.9.144
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/dist/bot/assistant-tools.d.ts.map +1 -1
- package/dist/bot/assistant-tools.js +5 -11
- package/dist/bot/assistant-tools.js.map +1 -1
- package/dist/bot/behavior-defaults.d.ts +2 -2
- package/dist/bot/behavior-defaults.d.ts.map +1 -1
- package/dist/bot/behavior-defaults.js +11 -6
- package/dist/bot/behavior-defaults.js.map +1 -1
- package/dist/bot/capability-registry.d.ts +2 -0
- package/dist/bot/capability-registry.d.ts.map +1 -1
- package/dist/bot/capability-registry.js +282 -15
- package/dist/bot/capability-registry.js.map +1 -1
- package/dist/bot/dashboard.js +3 -3
- package/dist/bot/dashboard.js.map +1 -1
- package/dist/bot/hierarchy-event-log.d.ts +37 -0
- package/dist/bot/hierarchy-event-log.d.ts.map +1 -0
- package/dist/bot/hierarchy-event-log.js +58 -0
- package/dist/bot/hierarchy-event-log.js.map +1 -0
- package/dist/bot/operations.d.ts +2 -0
- package/dist/bot/operations.d.ts.map +1 -1
- package/dist/bot/operations.js +5 -0
- package/dist/bot/operations.js.map +1 -1
- package/dist/bot/profile-store.d.ts.map +1 -1
- package/dist/bot/profile-store.js +46 -0
- package/dist/bot/profile-store.js.map +1 -1
- package/dist/bot/runner.d.ts.map +1 -1
- package/dist/bot/runner.js +51 -16
- package/dist/bot/runner.js.map +1 -1
- package/dist/bot/step-executor.d.ts.map +1 -1
- package/dist/bot/step-executor.js +36 -1
- package/dist/bot/step-executor.js.map +1 -1
- package/dist/bot/swarm-controller.d.ts +1 -0
- package/dist/bot/swarm-controller.d.ts.map +1 -1
- package/dist/bot/swarm-controller.js +64 -6
- package/dist/bot/swarm-controller.js.map +1 -1
- package/dist/bot/task-store.d.ts +1 -1
- package/dist/bot/task-store.d.ts.map +1 -1
- package/dist/bot/task-store.js +21 -36
- package/dist/bot/task-store.js.map +1 -1
- package/dist/bot/task-types.d.ts +5 -1
- package/dist/bot/task-types.d.ts.map +1 -1
- package/dist/bot/types.d.ts +4 -0
- package/dist/bot/types.d.ts.map +1 -1
- package/dist/node-types/bot-report.d.ts +3 -1
- package/dist/node-types/bot-report.d.ts.map +1 -1
- package/dist/node-types/bot-report.js +62 -11
- package/dist/node-types/bot-report.js.map +1 -1
- package/dist/node-types/build-context.d.ts.map +1 -1
- package/dist/node-types/build-context.js +32 -0
- package/dist/node-types/build-context.js.map +1 -1
- package/dist/node-types/report.d.ts +2 -0
- package/dist/node-types/report.d.ts.map +1 -1
- package/dist/node-types/report.js +61 -7
- package/dist/node-types/report.js.map +1 -1
- package/dist/ui/capability-editor.js +268 -15
- package/dist/ui/profile-editor.js +271 -18
- package/dist/ui/swarm-dashboard.js +340 -51
- package/dist/ui/task-detail-view.js +69 -33
- package/dist/ui/trace-to-timeline.d.ts +2 -0
- package/dist/ui/trace-to-timeline.d.ts.map +1 -1
- package/dist/ui/trace-to-timeline.js.map +1 -1
- package/dist/ui/use-stream-timeline.d.ts +2 -0
- package/dist/ui/use-stream-timeline.d.ts.map +1 -1
- package/dist/ui/use-stream-timeline.js +76 -34
- package/dist/ui/use-stream-timeline.js.map +1 -1
- package/flowweaver.manifest.json +1 -1
- package/package.json +1 -1
- package/src/bot/assistant-tools.ts +5 -11
- package/src/bot/behavior-defaults.ts +12 -5
- package/src/bot/capability-registry.ts +300 -18
- package/src/bot/dashboard.ts +3 -3
- package/src/bot/hierarchy-event-log.ts +64 -0
- package/src/bot/operations.ts +7 -0
- package/src/bot/profile-store.ts +46 -0
- package/src/bot/runner.ts +51 -16
- package/src/bot/step-executor.ts +32 -1
- package/src/bot/swarm-controller.ts +67 -6
- package/src/bot/task-store.ts +22 -38
- package/src/bot/task-types.ts +7 -1
- package/src/bot/types.ts +4 -0
- package/src/node-types/bot-report.ts +63 -12
- package/src/node-types/build-context.ts +32 -0
- package/src/node-types/report.ts +60 -8
- package/src/ui/task-detail-view.tsx +3 -0
- package/src/ui/trace-to-timeline.ts +2 -0
- package/src/ui/use-stream-timeline.ts +81 -38
|
@@ -50,6 +50,7 @@ function useStreamTimeline(events, isDone) {
|
|
|
50
50
|
const entries = [];
|
|
51
51
|
const nodeEntryIndex = /* @__PURE__ */ new Map();
|
|
52
52
|
const nodeStarts = /* @__PURE__ */ new Map();
|
|
53
|
+
const completedNodes = /* @__PURE__ */ new Set();
|
|
53
54
|
let idCounter = 0;
|
|
54
55
|
for (const event of events) {
|
|
55
56
|
const d = event.data ?? {};
|
|
@@ -66,6 +67,11 @@ function useStreamTimeline(events, isDone) {
|
|
|
66
67
|
case "node-start": {
|
|
67
68
|
const nodeId = d.nodeId;
|
|
68
69
|
if (nodeId) nodeStarts.set(nodeId, event.timestamp);
|
|
70
|
+
const existingStartIdx = nodeEntryIndex.get(nodeId);
|
|
71
|
+
if (existingStartIdx != null && entries[existingStartIdx]?.type === "node-started") {
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
completedNodes.delete(nodeId);
|
|
69
75
|
const idx = entries.length;
|
|
70
76
|
nodeEntryIndex.set(nodeId, idx);
|
|
71
77
|
entries.push({
|
|
@@ -81,54 +87,79 @@ function useStreamTimeline(events, isDone) {
|
|
|
81
87
|
}
|
|
82
88
|
case "node-complete": {
|
|
83
89
|
const nodeId = d.nodeId;
|
|
90
|
+
if (completedNodes.has(nodeId)) break;
|
|
84
91
|
const startTs = nodeStarts.get(nodeId);
|
|
85
92
|
const duration = d.durationMs ?? (startTs ? event.timestamp - startTs : void 0);
|
|
86
93
|
if (nodeId) nodeStarts.delete(nodeId);
|
|
87
|
-
|
|
88
|
-
const completed = {
|
|
89
|
-
id: `s-${idCounter++}`,
|
|
90
|
-
timestamp: new Date(startTs ?? event.timestamp),
|
|
91
|
-
type: "node-completed",
|
|
92
|
-
nodeId,
|
|
93
|
-
label: d.label ?? d.nodeType ?? nodeId ?? "Node",
|
|
94
|
-
duration,
|
|
95
|
-
color: d.color,
|
|
96
|
-
icon: d.icon,
|
|
97
|
-
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : void 0
|
|
98
|
-
};
|
|
94
|
+
completedNodes.add(nodeId);
|
|
99
95
|
const existingIdx = nodeEntryIndex.get(nodeId);
|
|
100
96
|
if (existingIdx != null && entries[existingIdx]) {
|
|
101
|
-
|
|
97
|
+
const rawOutputs = d.outputs;
|
|
98
|
+
entries[existingIdx] = {
|
|
99
|
+
id: entries[existingIdx].id,
|
|
100
|
+
timestamp: new Date(startTs ?? event.timestamp),
|
|
101
|
+
type: "node-completed",
|
|
102
|
+
nodeId,
|
|
103
|
+
label: d.label ?? d.nodeType ?? nodeId ?? "Node",
|
|
104
|
+
duration,
|
|
105
|
+
color: d.color,
|
|
106
|
+
icon: d.icon,
|
|
107
|
+
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : void 0
|
|
108
|
+
};
|
|
102
109
|
nodeEntryIndex.delete(nodeId);
|
|
103
110
|
} else {
|
|
104
|
-
|
|
111
|
+
const rawOutputs = d.outputs;
|
|
112
|
+
entries.push({
|
|
113
|
+
id: `s-${idCounter++}`,
|
|
114
|
+
timestamp: new Date(startTs ?? event.timestamp),
|
|
115
|
+
type: "node-completed",
|
|
116
|
+
nodeId,
|
|
117
|
+
label: d.label ?? d.nodeType ?? nodeId ?? "Node",
|
|
118
|
+
duration,
|
|
119
|
+
color: d.color,
|
|
120
|
+
icon: d.icon,
|
|
121
|
+
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : void 0
|
|
122
|
+
});
|
|
105
123
|
}
|
|
106
124
|
break;
|
|
107
125
|
}
|
|
108
126
|
case "node-error": {
|
|
109
127
|
const nodeId = d.nodeId;
|
|
128
|
+
if (completedNodes.has(nodeId)) break;
|
|
110
129
|
const startTs = nodeStarts.get(nodeId);
|
|
111
130
|
const duration = d.durationMs ?? (startTs ? event.timestamp - startTs : void 0);
|
|
112
131
|
if (nodeId) nodeStarts.delete(nodeId);
|
|
113
|
-
|
|
114
|
-
const failed = {
|
|
115
|
-
id: `s-${idCounter++}`,
|
|
116
|
-
timestamp: new Date(startTs ?? event.timestamp),
|
|
117
|
-
type: "node-failed",
|
|
118
|
-
nodeId,
|
|
119
|
-
label: d.label ?? d.nodeType ?? nodeId ?? "Node",
|
|
120
|
-
detail: d.error,
|
|
121
|
-
duration,
|
|
122
|
-
color: d.color,
|
|
123
|
-
icon: d.icon,
|
|
124
|
-
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : void 0
|
|
125
|
-
};
|
|
132
|
+
completedNodes.add(nodeId);
|
|
126
133
|
const existingIdx = nodeEntryIndex.get(nodeId);
|
|
127
134
|
if (existingIdx != null && entries[existingIdx]) {
|
|
128
|
-
|
|
135
|
+
const rawOutputs = d.outputs;
|
|
136
|
+
entries[existingIdx] = {
|
|
137
|
+
id: entries[existingIdx].id,
|
|
138
|
+
timestamp: new Date(startTs ?? event.timestamp),
|
|
139
|
+
type: "node-failed",
|
|
140
|
+
nodeId,
|
|
141
|
+
label: d.label ?? d.nodeType ?? nodeId ?? "Node",
|
|
142
|
+
detail: d.error,
|
|
143
|
+
duration,
|
|
144
|
+
color: d.color,
|
|
145
|
+
icon: d.icon,
|
|
146
|
+
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : void 0
|
|
147
|
+
};
|
|
129
148
|
nodeEntryIndex.delete(nodeId);
|
|
130
149
|
} else {
|
|
131
|
-
|
|
150
|
+
const rawOutputs = d.outputs;
|
|
151
|
+
entries.push({
|
|
152
|
+
id: `s-${idCounter++}`,
|
|
153
|
+
timestamp: new Date(startTs ?? event.timestamp),
|
|
154
|
+
type: "node-failed",
|
|
155
|
+
nodeId,
|
|
156
|
+
label: d.label ?? d.nodeType ?? nodeId ?? "Node",
|
|
157
|
+
detail: d.error,
|
|
158
|
+
duration,
|
|
159
|
+
color: d.color,
|
|
160
|
+
icon: d.icon,
|
|
161
|
+
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : void 0
|
|
162
|
+
});
|
|
132
163
|
}
|
|
133
164
|
break;
|
|
134
165
|
}
|
|
@@ -157,12 +188,13 @@ function useStreamTimeline(events, isDone) {
|
|
|
157
188
|
}
|
|
158
189
|
return entries;
|
|
159
190
|
}, [events]);
|
|
160
|
-
const { phase, instruction, cost, plan, awaitingApproval } = useMemo(() => {
|
|
191
|
+
const { phase, instruction, cost, plan, awaitingApproval, report } = useMemo(() => {
|
|
161
192
|
let phase2 = "idle";
|
|
162
193
|
let instruction2 = null;
|
|
163
194
|
let cost2 = null;
|
|
164
195
|
let plan2 = null;
|
|
165
196
|
let awaitingApproval2 = false;
|
|
197
|
+
let report2 = null;
|
|
166
198
|
for (const event of events) {
|
|
167
199
|
const d = event.data ?? {};
|
|
168
200
|
if (event.type === "bot-started") {
|
|
@@ -172,6 +204,7 @@ function useStreamTimeline(events, isDone) {
|
|
|
172
204
|
phase2 = "executing";
|
|
173
205
|
} else if (event.type === "bot-completed") {
|
|
174
206
|
phase2 = d.success ? "completed" : "failed";
|
|
207
|
+
if (typeof d.report === "string") report2 = d.report;
|
|
175
208
|
} else if (event.type === "bot-failed") {
|
|
176
209
|
phase2 = "failed";
|
|
177
210
|
} else if (event.type === "cost-update") {
|
|
@@ -192,9 +225,9 @@ function useStreamTimeline(events, isDone) {
|
|
|
192
225
|
if (isDone && phase2 !== "completed" && phase2 !== "failed") {
|
|
193
226
|
phase2 = "completed";
|
|
194
227
|
}
|
|
195
|
-
return { phase: phase2, instruction: instruction2, cost: cost2, plan: plan2, awaitingApproval: awaitingApproval2 };
|
|
228
|
+
return { phase: phase2, instruction: instruction2, cost: cost2, plan: plan2, awaitingApproval: awaitingApproval2, report: report2 };
|
|
196
229
|
}, [events, isDone]);
|
|
197
|
-
return { timeline, phase, instruction, elapsed, cost, plan, awaitingApproval };
|
|
230
|
+
return { timeline, phase, instruction, elapsed, cost, plan, awaitingApproval, report };
|
|
198
231
|
}
|
|
199
232
|
|
|
200
233
|
// src/ui/trace-to-timeline.ts
|
|
@@ -451,7 +484,8 @@ function TaskDetailView({ taskId, onBack, onEdit }) {
|
|
|
451
484
|
elapsed,
|
|
452
485
|
cost: liveCost,
|
|
453
486
|
plan,
|
|
454
|
-
awaitingApproval
|
|
487
|
+
awaitingApproval,
|
|
488
|
+
report: liveReport
|
|
455
489
|
} = useStreamTimeline(stream.events, stream.isDone);
|
|
456
490
|
const currentRunId = task?.currentRunId;
|
|
457
491
|
const isLive = task?.status === "in-progress" && !!currentRunId;
|
|
@@ -779,6 +813,7 @@ function TaskDetailView({ taskId, onBack, onEdit }) {
|
|
|
779
813
|
state: isSuccess ? "completed" : "failed",
|
|
780
814
|
instruction: extractInstruction(run),
|
|
781
815
|
timeline: runTimeline,
|
|
816
|
+
report: run.report ?? null,
|
|
782
817
|
cost: typeof run.cost === "number" ? run.cost : run.costDetail?.totalCost ?? null,
|
|
783
818
|
plan: run.plan,
|
|
784
819
|
startedAt: run.startedAt,
|
|
@@ -793,6 +828,7 @@ function TaskDetailView({ taskId, onBack, onEdit }) {
|
|
|
793
828
|
state: "running",
|
|
794
829
|
instruction: liveInstruction ?? task.title,
|
|
795
830
|
timeline: liveTimeline,
|
|
831
|
+
report: liveReport,
|
|
796
832
|
phase: livePhase,
|
|
797
833
|
elapsed,
|
|
798
834
|
cost: liveCost,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-to-timeline.d.ts","sourceRoot":"","sources":["../../src/ui/trace-to-timeline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trace-to-timeline.d.ts","sourceRoot":"","sources":["../../src/ui/trace-to-timeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-to-timeline.js","sourceRoot":"","sources":["../../src/ui/trace-to-timeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"trace-to-timeline.js","sourceRoot":"","sources":["../../src/ui/trace-to-timeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,8 @@ export interface StreamTimelineState {
|
|
|
42
42
|
}>;
|
|
43
43
|
} | null;
|
|
44
44
|
awaitingApproval: boolean;
|
|
45
|
+
/** Markdown report from bot-completed event. */
|
|
46
|
+
report: string | null;
|
|
45
47
|
}
|
|
46
48
|
export declare function useStreamTimeline(events: StreamEvent[], isDone: boolean): StreamTimelineState;
|
|
47
49
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-stream-timeline.d.ts","sourceRoot":"","sources":["../../src/ui/use-stream-timeline.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,gBAAgB,GAAG,aAAa,GAAG,eAAe,GAAG,aAAa,GAAG,gBAAgB,GAAG,aAAa,CAAC;IAC9I,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;IAClE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtE,GAAG,IAAI,CAAC;IACT,gBAAgB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"use-stream-timeline.d.ts","sourceRoot":"","sources":["../../src/ui/use-stream-timeline.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,gBAAgB,GAAG,aAAa,GAAG,eAAe,GAAG,aAAa,GAAG,gBAAgB,GAAG,aAAa,CAAC;IAC9I,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;IAClE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtE,GAAG,IAAI,CAAC;IACT,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gDAAgD;IAChD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,mBAAmB,CAsP7F"}
|
|
@@ -38,6 +38,9 @@ export function useStreamTimeline(events, isDone) {
|
|
|
38
38
|
// Map nodeId → index in entries[] so we can replace start with complete
|
|
39
39
|
const nodeEntryIndex = new Map();
|
|
40
40
|
const nodeStarts = new Map();
|
|
41
|
+
// Track completed/failed nodes to skip duplicate completion events
|
|
42
|
+
// (FW runtime emits 2x STATUS_CHANGED per node transition)
|
|
43
|
+
const completedNodes = new Set();
|
|
41
44
|
let idCounter = 0;
|
|
42
45
|
for (const event of events) {
|
|
43
46
|
const d = event.data ?? {};
|
|
@@ -55,6 +58,14 @@ export function useStreamTimeline(events, isDone) {
|
|
|
55
58
|
const nodeId = d.nodeId;
|
|
56
59
|
if (nodeId)
|
|
57
60
|
nodeStarts.set(nodeId, event.timestamp);
|
|
61
|
+
// If we already have an in-flight entry for this node (duplicate
|
|
62
|
+
// STATUS_CHANGED from the FW runtime), skip the duplicate.
|
|
63
|
+
const existingStartIdx = nodeEntryIndex.get(nodeId);
|
|
64
|
+
if (existingStartIdx != null && entries[existingStartIdx]?.type === 'node-started') {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
// Clear completed tracking so retry loops work (node can re-enter)
|
|
68
|
+
completedNodes.delete(nodeId);
|
|
58
69
|
const idx = entries.length;
|
|
59
70
|
nodeEntryIndex.set(nodeId, idx);
|
|
60
71
|
entries.push({
|
|
@@ -70,60 +81,89 @@ export function useStreamTimeline(events, isDone) {
|
|
|
70
81
|
}
|
|
71
82
|
case 'node-complete': {
|
|
72
83
|
const nodeId = d.nodeId;
|
|
84
|
+
// Skip duplicate completion events for the same node
|
|
85
|
+
if (completedNodes.has(nodeId))
|
|
86
|
+
break;
|
|
73
87
|
const startTs = nodeStarts.get(nodeId);
|
|
74
88
|
const duration = d.durationMs ?? (startTs ? event.timestamp - startTs : undefined);
|
|
75
89
|
if (nodeId)
|
|
76
90
|
nodeStarts.delete(nodeId);
|
|
77
|
-
|
|
78
|
-
const completed = {
|
|
79
|
-
id: `s-${idCounter++}`,
|
|
80
|
-
timestamp: new Date(startTs ?? event.timestamp),
|
|
81
|
-
type: 'node-completed',
|
|
82
|
-
nodeId,
|
|
83
|
-
label: d.label ?? d.nodeType ?? nodeId ?? 'Node',
|
|
84
|
-
duration,
|
|
85
|
-
color: d.color,
|
|
86
|
-
icon: d.icon,
|
|
87
|
-
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : undefined,
|
|
88
|
-
};
|
|
91
|
+
completedNodes.add(nodeId);
|
|
89
92
|
// Replace the node-started entry in-place
|
|
90
93
|
const existingIdx = nodeEntryIndex.get(nodeId);
|
|
91
94
|
if (existingIdx != null && entries[existingIdx]) {
|
|
92
|
-
|
|
95
|
+
const rawOutputs = d.outputs;
|
|
96
|
+
entries[existingIdx] = {
|
|
97
|
+
id: entries[existingIdx].id,
|
|
98
|
+
timestamp: new Date(startTs ?? event.timestamp),
|
|
99
|
+
type: 'node-completed',
|
|
100
|
+
nodeId,
|
|
101
|
+
label: d.label ?? d.nodeType ?? nodeId ?? 'Node',
|
|
102
|
+
duration,
|
|
103
|
+
color: d.color,
|
|
104
|
+
icon: d.icon,
|
|
105
|
+
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : undefined,
|
|
106
|
+
};
|
|
93
107
|
nodeEntryIndex.delete(nodeId);
|
|
94
108
|
}
|
|
95
109
|
else {
|
|
96
|
-
|
|
110
|
+
// No matching start entry — standalone complete (e.g. Start node)
|
|
111
|
+
const rawOutputs = d.outputs;
|
|
112
|
+
entries.push({
|
|
113
|
+
id: `s-${idCounter++}`,
|
|
114
|
+
timestamp: new Date(startTs ?? event.timestamp),
|
|
115
|
+
type: 'node-completed',
|
|
116
|
+
nodeId,
|
|
117
|
+
label: d.label ?? d.nodeType ?? nodeId ?? 'Node',
|
|
118
|
+
duration,
|
|
119
|
+
color: d.color,
|
|
120
|
+
icon: d.icon,
|
|
121
|
+
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : undefined,
|
|
122
|
+
});
|
|
97
123
|
}
|
|
98
124
|
break;
|
|
99
125
|
}
|
|
100
126
|
case 'node-error': {
|
|
101
127
|
const nodeId = d.nodeId;
|
|
128
|
+
if (completedNodes.has(nodeId))
|
|
129
|
+
break; // skip duplicate
|
|
102
130
|
const startTs = nodeStarts.get(nodeId);
|
|
103
131
|
const duration = d.durationMs ?? (startTs ? event.timestamp - startTs : undefined);
|
|
104
132
|
if (nodeId)
|
|
105
133
|
nodeStarts.delete(nodeId);
|
|
106
|
-
|
|
107
|
-
const failed = {
|
|
108
|
-
id: `s-${idCounter++}`,
|
|
109
|
-
timestamp: new Date(startTs ?? event.timestamp),
|
|
110
|
-
type: 'node-failed',
|
|
111
|
-
nodeId,
|
|
112
|
-
label: d.label ?? d.nodeType ?? nodeId ?? 'Node',
|
|
113
|
-
detail: d.error,
|
|
114
|
-
duration,
|
|
115
|
-
color: d.color,
|
|
116
|
-
icon: d.icon,
|
|
117
|
-
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : undefined,
|
|
118
|
-
};
|
|
134
|
+
completedNodes.add(nodeId);
|
|
119
135
|
// Replace the node-started entry in-place
|
|
120
136
|
const existingIdx = nodeEntryIndex.get(nodeId);
|
|
121
137
|
if (existingIdx != null && entries[existingIdx]) {
|
|
122
|
-
|
|
138
|
+
const rawOutputs = d.outputs;
|
|
139
|
+
entries[existingIdx] = {
|
|
140
|
+
id: entries[existingIdx].id,
|
|
141
|
+
timestamp: new Date(startTs ?? event.timestamp),
|
|
142
|
+
type: 'node-failed',
|
|
143
|
+
nodeId,
|
|
144
|
+
label: d.label ?? d.nodeType ?? nodeId ?? 'Node',
|
|
145
|
+
detail: d.error,
|
|
146
|
+
duration,
|
|
147
|
+
color: d.color,
|
|
148
|
+
icon: d.icon,
|
|
149
|
+
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : undefined,
|
|
150
|
+
};
|
|
123
151
|
nodeEntryIndex.delete(nodeId);
|
|
124
152
|
}
|
|
125
153
|
else {
|
|
126
|
-
|
|
154
|
+
const rawOutputs = d.outputs;
|
|
155
|
+
entries.push({
|
|
156
|
+
id: `s-${idCounter++}`,
|
|
157
|
+
timestamp: new Date(startTs ?? event.timestamp),
|
|
158
|
+
type: 'node-failed',
|
|
159
|
+
nodeId,
|
|
160
|
+
label: d.label ?? d.nodeType ?? nodeId ?? 'Node',
|
|
161
|
+
detail: d.error,
|
|
162
|
+
duration,
|
|
163
|
+
color: d.color,
|
|
164
|
+
icon: d.icon,
|
|
165
|
+
outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : undefined,
|
|
166
|
+
});
|
|
127
167
|
}
|
|
128
168
|
break;
|
|
129
169
|
}
|
|
@@ -153,12 +193,13 @@ export function useStreamTimeline(events, isDone) {
|
|
|
153
193
|
return entries;
|
|
154
194
|
}, [events]);
|
|
155
195
|
// Extract metadata from events
|
|
156
|
-
const { phase, instruction, cost, plan, awaitingApproval } = useMemo(() => {
|
|
196
|
+
const { phase, instruction, cost, plan, awaitingApproval, report } = useMemo(() => {
|
|
157
197
|
let phase = 'idle';
|
|
158
198
|
let instruction = null;
|
|
159
199
|
let cost = null;
|
|
160
200
|
let plan = null;
|
|
161
201
|
let awaitingApproval = false;
|
|
202
|
+
let report = null;
|
|
162
203
|
for (const event of events) {
|
|
163
204
|
const d = event.data ?? {};
|
|
164
205
|
if (event.type === 'bot-started') {
|
|
@@ -170,6 +211,8 @@ export function useStreamTimeline(events, isDone) {
|
|
|
170
211
|
}
|
|
171
212
|
else if (event.type === 'bot-completed') {
|
|
172
213
|
phase = d.success ? 'completed' : 'failed';
|
|
214
|
+
if (typeof d.report === 'string')
|
|
215
|
+
report = d.report;
|
|
173
216
|
}
|
|
174
217
|
else if (event.type === 'bot-failed') {
|
|
175
218
|
phase = 'failed';
|
|
@@ -178,7 +221,6 @@ export function useStreamTimeline(events, isDone) {
|
|
|
178
221
|
cost = d.totalCost ?? cost;
|
|
179
222
|
}
|
|
180
223
|
else if (event.type === 'audit:plan-created' || event.type === 'plan-created') {
|
|
181
|
-
// Plan data may be at d.plan (structured) or directly on d (audit event)
|
|
182
224
|
const planData = d.plan ?? d;
|
|
183
225
|
const summary = planData.summary ?? '';
|
|
184
226
|
const steps = planData.steps ?? [];
|
|
@@ -194,10 +236,10 @@ export function useStreamTimeline(events, isDone) {
|
|
|
194
236
|
}
|
|
195
237
|
}
|
|
196
238
|
if (isDone && phase !== 'completed' && phase !== 'failed') {
|
|
197
|
-
phase = 'completed';
|
|
239
|
+
phase = 'completed';
|
|
198
240
|
}
|
|
199
|
-
return { phase, instruction, cost, plan, awaitingApproval };
|
|
241
|
+
return { phase, instruction, cost, plan, awaitingApproval, report };
|
|
200
242
|
}, [events, isDone]);
|
|
201
|
-
return { timeline, phase, instruction, elapsed, cost, plan, awaitingApproval };
|
|
243
|
+
return { timeline, phase, instruction, elapsed, cost, plan, awaitingApproval, report };
|
|
202
244
|
}
|
|
203
245
|
//# sourceMappingURL=use-stream-timeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-stream-timeline.js","sourceRoot":"","sources":["../../src/ui/use-stream-timeline.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"use-stream-timeline.js","sourceRoot":"","sources":["../../src/ui/use-stream-timeline.ts"],"names":[],"mappings":"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"}
|
package/flowweaver.manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifestVersion": 2,
|
|
3
3
|
"name": "@synergenius/flow-weaver-pack-weaver",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.144",
|
|
5
5
|
"description": "AI bot for Flow Weaver. Execute tasks, run workflows, evolve autonomously.",
|
|
6
6
|
"engineVersion": ">=0.22.10",
|
|
7
7
|
"categories": [
|
package/package.json
CHANGED
|
@@ -58,16 +58,10 @@ export function createAssistantExecutor(projectDir: string, steeringEngine?: imp
|
|
|
58
58
|
const pending = tasks.filter(t => t.status === 'pending').length;
|
|
59
59
|
const inProgress = tasks.filter(t => t.status === 'in-progress').length;
|
|
60
60
|
const done = tasks.filter(t => t.status === 'done').length;
|
|
61
|
-
const
|
|
62
|
-
const
|
|
61
|
+
const cancelled = tasks.filter(t => t.status === 'cancelled').length;
|
|
62
|
+
const blocked = tasks.filter(t => t.status === 'blocked').length;
|
|
63
63
|
let result = `Bot "${botName}": ${bot.status}\n`;
|
|
64
|
-
result += `Tasks: ${done} done, ${
|
|
65
|
-
if (failedTasks.length > 0) {
|
|
66
|
-
result += `\nFailed tasks:\n`;
|
|
67
|
-
for (const t of failedTasks) {
|
|
68
|
-
result += ` - ${t.title.slice(0, 120)}\n`;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
64
|
+
result += `Tasks: ${done} done, ${cancelled} cancelled, ${inProgress} in-progress, ${pending} pending, ${blocked} blocked\n`;
|
|
71
65
|
return { result, isError: false };
|
|
72
66
|
}
|
|
73
67
|
case 'bot_pause': {
|
|
@@ -122,13 +116,13 @@ export function createAssistantExecutor(projectDir: string, steeringEngine?: imp
|
|
|
122
116
|
}
|
|
123
117
|
case 'queue_retry': {
|
|
124
118
|
const store = mgr.getTaskStore(String(args.bot));
|
|
125
|
-
const tasks = await store.list({ status: '
|
|
119
|
+
const tasks = await store.list({ status: 'cancelled' });
|
|
126
120
|
let count = 0;
|
|
127
121
|
for (const t of tasks) {
|
|
128
122
|
await store.update(t.id, { status: 'pending' });
|
|
129
123
|
count++;
|
|
130
124
|
}
|
|
131
|
-
return { result: `Reset ${count}
|
|
125
|
+
return { result: `Reset ${count} cancelled task(s) to pending.`, isError: false };
|
|
132
126
|
}
|
|
133
127
|
|
|
134
128
|
// Flow-weaver tools
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import type { CostStrategy, ModelTier, ModelTierMap, ProfileBehavior, PhaseBehavior, PhaseDescriptor } from './profile-types.js';
|
|
10
|
+
import { PROFILE_CAPABILITIES } from './capability-registry.js';
|
|
10
11
|
|
|
11
12
|
// ---------------------------------------------------------------------------
|
|
12
13
|
// Built-in tier maps — known providers
|
|
@@ -139,11 +140,11 @@ const STRATEGY_PHASE_OVERRIDES: Record<CostStrategy, Record<string, Partial<Phas
|
|
|
139
140
|
// Default capabilities per strategy
|
|
140
141
|
// ---------------------------------------------------------------------------
|
|
141
142
|
|
|
142
|
-
/** Default capability pools per cost strategy. */
|
|
143
|
+
/** Default capability pools per cost strategy (legacy fallback when no profile role). */
|
|
143
144
|
export const STRATEGY_CAPABILITIES: Record<CostStrategy, string[]> = {
|
|
144
|
-
frugal: ['core', 'file-ops', 'shell', 'context'],
|
|
145
|
-
balanced: ['core', '
|
|
146
|
-
performance: ['core', '
|
|
145
|
+
frugal: ['core', 'role-developer', 'file-ops', 'shell', 'context'],
|
|
146
|
+
balanced: ['core', 'role-developer', 'file-ops', 'shell', 'fw-grammar', 'fw-validate', 'context'],
|
|
147
|
+
performance: ['core', 'role-developer', 'file-ops', 'shell', 'fw-grammar', 'fw-validate', 'fw-genesis', 'fw-cli', 'code-review', 'web', 'context'],
|
|
147
148
|
};
|
|
148
149
|
|
|
149
150
|
/** Default budget per strategy (USD per task). */
|
|
@@ -171,6 +172,7 @@ const STRATEGY_DEFAULTS: Record<CostStrategy, { escalation: ProfileBehavior['esc
|
|
|
171
172
|
export function buildDefaultBehavior(
|
|
172
173
|
strategy: CostStrategy,
|
|
173
174
|
phaseDescriptors?: PhaseDescriptor[],
|
|
175
|
+
profileRole?: string,
|
|
174
176
|
): ProfileBehavior {
|
|
175
177
|
const descriptors = phaseDescriptors ?? DEFAULT_PHASE_DESCRIPTORS;
|
|
176
178
|
// Base tier: frugal=fast, balanced/performance=standard.
|
|
@@ -191,8 +193,13 @@ export function buildDefaultBehavior(
|
|
|
191
193
|
}
|
|
192
194
|
}
|
|
193
195
|
|
|
196
|
+
// Use profile-role-based capabilities if available, fall back to strategy-based
|
|
197
|
+
const capabilities = (profileRole && PROFILE_CAPABILITIES[profileRole])
|
|
198
|
+
? PROFILE_CAPABILITIES[profileRole]
|
|
199
|
+
: STRATEGY_CAPABILITIES[strategy];
|
|
200
|
+
|
|
194
201
|
return {
|
|
195
|
-
capabilities
|
|
202
|
+
capabilities,
|
|
196
203
|
budget: STRATEGY_BUDGETS[strategy],
|
|
197
204
|
phases,
|
|
198
205
|
...STRATEGY_DEFAULTS[strategy],
|