@synergenius/flow-weaver-pack-weaver 0.9.151 → 0.9.153
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/ai-chat-provider.js +4 -4
- package/dist/ai-chat-provider.js.map +1 -1
- package/dist/bot/ai-client.d.ts +30 -0
- package/dist/bot/ai-client.d.ts.map +1 -1
- package/dist/bot/ai-client.js +37 -0
- package/dist/bot/ai-client.js.map +1 -1
- package/dist/bot/behavior-defaults.d.ts.map +1 -1
- package/dist/bot/behavior-defaults.js +7 -2
- package/dist/bot/behavior-defaults.js.map +1 -1
- package/dist/bot/capability-registry.d.ts.map +1 -1
- package/dist/bot/capability-registry.js +48 -30
- package/dist/bot/capability-registry.js.map +1 -1
- package/dist/bot/file-validator.d.ts +7 -0
- package/dist/bot/file-validator.d.ts.map +1 -1
- package/dist/bot/file-validator.js +76 -0
- package/dist/bot/file-validator.js.map +1 -1
- package/dist/bot/instance-manager.d.ts +22 -7
- package/dist/bot/instance-manager.d.ts.map +1 -1
- package/dist/bot/instance-manager.js +69 -7
- package/dist/bot/instance-manager.js.map +1 -1
- package/dist/bot/orchestrator.d.ts +11 -9
- package/dist/bot/orchestrator.d.ts.map +1 -1
- package/dist/bot/orchestrator.js +56 -107
- package/dist/bot/orchestrator.js.map +1 -1
- package/dist/bot/runner.d.ts +29 -0
- package/dist/bot/runner.d.ts.map +1 -1
- package/dist/bot/runner.js +114 -73
- package/dist/bot/runner.js.map +1 -1
- package/dist/bot/step-executor.d.ts.map +1 -1
- package/dist/bot/step-executor.js +106 -25
- package/dist/bot/step-executor.js.map +1 -1
- package/dist/bot/swarm-controller.d.ts +7 -6
- package/dist/bot/swarm-controller.d.ts.map +1 -1
- package/dist/bot/swarm-controller.js +64 -74
- package/dist/bot/swarm-controller.js.map +1 -1
- package/dist/bot/task-types.d.ts +1 -0
- package/dist/bot/task-types.d.ts.map +1 -1
- package/dist/bot/weaver-tools.d.ts +1 -1
- package/dist/bot/weaver-tools.d.ts.map +1 -1
- package/dist/bot/weaver-tools.js +6 -1
- package/dist/bot/weaver-tools.js.map +1 -1
- package/dist/node-types/agent-execute.js +2 -2
- package/dist/node-types/agent-execute.js.map +1 -1
- package/dist/node-types/bot-report.d.ts.map +1 -1
- package/dist/node-types/bot-report.js +5 -2
- package/dist/node-types/bot-report.js.map +1 -1
- package/dist/node-types/build-context.js +2 -1
- package/dist/node-types/build-context.js.map +1 -1
- package/dist/node-types/exec-validate-retry.d.ts +3 -3
- package/dist/node-types/exec-validate-retry.d.ts.map +1 -1
- package/dist/node-types/exec-validate-retry.js +13 -184
- package/dist/node-types/exec-validate-retry.js.map +1 -1
- package/dist/node-types/load-config.d.ts +1 -0
- package/dist/node-types/load-config.d.ts.map +1 -1
- package/dist/node-types/load-config.js +1 -0
- package/dist/node-types/load-config.js.map +1 -1
- package/dist/node-types/plan-task.d.ts +7 -5
- package/dist/node-types/plan-task.d.ts.map +1 -1
- package/dist/node-types/plan-task.js +282 -83
- package/dist/node-types/plan-task.js.map +1 -1
- package/dist/ui/bot-panel.js +1 -1
- package/dist/ui/capability-editor.js +48 -30
- package/dist/ui/profile-editor.js +46 -28
- package/dist/ui/swarm-dashboard.js +71 -33
- package/dist/ui/task-detail-view.js +22 -2
- package/dist/workflows/weaver-bot.d.ts +2 -2
- package/dist/workflows/weaver-bot.d.ts.map +1 -1
- package/dist/workflows/weaver-bot.js +5 -4
- package/dist/workflows/weaver-bot.js.map +1 -1
- package/flowweaver.manifest.json +1 -1
- package/package.json +1 -1
- package/src/ai-chat-provider.ts +4 -4
- package/src/bot/ai-client.ts +65 -0
- package/src/bot/behavior-defaults.ts +5 -2
- package/src/bot/capability-registry.ts +48 -30
- package/src/bot/file-validator.ts +97 -0
- package/src/bot/instance-manager.ts +77 -7
- package/src/bot/orchestrator.ts +63 -126
- package/src/bot/runner.ts +124 -70
- package/src/bot/step-executor.ts +115 -25
- package/src/bot/swarm-controller.ts +65 -76
- package/src/bot/task-types.ts +1 -0
- package/src/bot/weaver-tools.ts +7 -1
- package/src/node-types/agent-execute.ts +2 -2
- package/src/node-types/bot-report.ts +5 -2
- package/src/node-types/build-context.ts +2 -1
- package/src/node-types/exec-validate-retry.ts +14 -203
- package/src/node-types/load-config.ts +1 -0
- package/src/node-types/plan-task.ts +313 -88
- package/src/ui/bot-panel.tsx +1 -1
- package/src/ui/swarm-dashboard.tsx +3 -3
- package/src/ui/task-detail-view.tsx +25 -2
- package/src/workflows/weaver-bot.ts +5 -4
|
@@ -247,30 +247,28 @@ var CAP_ROLE_ORCHESTRATOR = {
|
|
|
247
247
|
You DECOMPOSE and ASSIGN. You never write code or create files directly.
|
|
248
248
|
|
|
249
249
|
Your job:
|
|
250
|
-
1. Analyze the objective
|
|
251
|
-
2.
|
|
252
|
-
3.
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
- "ops" \u2192 project setup, dependencies, config, infrastructure
|
|
257
|
-
NEVER set assignedProfile to "orchestrator". You are the orchestrator \u2014 assigning to yourself creates an infinite loop. Only "developer", "reviewer", or "ops".
|
|
258
|
-
5. Set dependencies so tasks execute in the right order
|
|
259
|
-
Use the EXACT title of a previous subtask as the dependsOn value. The system resolves titles to real task IDs at execution time. Example: dependsOn: ["Setup: Initialize project structure"]
|
|
260
|
-
6. Include the project brief in every subtask's description
|
|
250
|
+
1. Analyze the objective
|
|
251
|
+
2. Break it into focused subtasks via task_create. Set parentId to "@self" on every subtask.
|
|
252
|
+
3. ALWAYS set assignedProfile: "developer", "reviewer", or "ops".
|
|
253
|
+
NEVER set assignedProfile to "orchestrator" \u2014 assigning to yourself creates an infinite loop.
|
|
254
|
+
4. Use the EXACT title of a previous subtask as dependsOn. The system resolves titles to real task IDs.
|
|
255
|
+
5. Include a project brief in every subtask: "PROJECT: [what]. FILES: [exact paths from workspace root]. CONVENTIONS: [patterns]."
|
|
261
256
|
|
|
262
|
-
CRITICAL: You do NOT have write_file, patch_file, or run_shell.
|
|
257
|
+
CRITICAL: You do NOT have write_file, patch_file, or run_shell. Only plan and delegate.
|
|
263
258
|
|
|
264
|
-
###
|
|
265
|
-
|
|
266
|
-
|
|
259
|
+
### Design Phase (MANDATORY)
|
|
260
|
+
Your FIRST subtask MUST be a design task assigned to ops that creates a .design.md file in the project root. This is the single source of truth. It must contain:
|
|
261
|
+
- Module map, TypeScript interfaces (copy-paste ready), export contracts (function signatures)
|
|
262
|
+
- Dependency graph, conventions (naming, error handling, patterns)
|
|
263
|
+
Every subsequent developer task MUST read .design.md before writing code.
|
|
267
264
|
|
|
268
265
|
### Subtask Quality
|
|
269
|
-
Each subtask
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
266
|
+
Each subtask: focused (one concern), self-contained, properly routed, ordered by dependsOn.
|
|
267
|
+
|
|
268
|
+
### Example
|
|
269
|
+
{ operation: "task_create", args: { title: "Design: Create project contract", parentId: "@self", assignedProfile: "ops", complexity: "complex", description: "Create todo-app/.design.md with module map, TypeScript interfaces, export contracts.", dependsOn: [] } }
|
|
270
|
+
{ operation: "task_create", args: { title: "Setup project", parentId: "@self", assignedProfile: "ops", dependsOn: ["Design: Create project contract"] } }
|
|
271
|
+
{ operation: "task_create", args: { title: "Write code", parentId: "@self", assignedProfile: "developer", dependsOn: ["Setup project"] } }`
|
|
274
272
|
};
|
|
275
273
|
var CAP_ROLE_DEVELOPER = {
|
|
276
274
|
name: "role-developer",
|
|
@@ -279,17 +277,28 @@ var CAP_ROLE_DEVELOPER = {
|
|
|
279
277
|
You WRITE CODE. Execute the task directly using write_file, patch_file, and run_shell.
|
|
280
278
|
|
|
281
279
|
Your job:
|
|
282
|
-
1. Read the
|
|
283
|
-
2.
|
|
284
|
-
3.
|
|
285
|
-
4. Verify your
|
|
280
|
+
1. Read .design.md in the project root to understand interfaces and contracts
|
|
281
|
+
2. Read files created by previous tasks (your dependencies are done \u2014 their files are on disk)
|
|
282
|
+
3. Write code that MATCHES the contracts in .design.md exactly \u2014 same types, same function signatures, same exports
|
|
283
|
+
4. Verify your imports resolve to real exports in existing files
|
|
286
284
|
|
|
287
285
|
You do NOT have task_create. You cannot create subtasks or delegate.
|
|
288
286
|
If the task seems too large, do your best \u2014 the orchestrator already decomposed it for you.
|
|
289
287
|
|
|
288
|
+
### File Paths
|
|
289
|
+
All paths in write_file/patch_file are RELATIVE TO THE WORKSPACE ROOT. If the task says "inside todo-app/", your paths MUST start with todo-app/ (e.g., todo-app/src/cli.ts, NOT src/cli.ts).
|
|
290
|
+
|
|
291
|
+
### Code Quality
|
|
292
|
+
- Write COMPLETE, WORKING code. No TODOs, no placeholders, no empty function bodies, no "// implement later".
|
|
293
|
+
- Every function must be fully implemented with real logic.
|
|
294
|
+
- Use proper TypeScript types. Use strict mode patterns.
|
|
295
|
+
- Export everything that other files will import.
|
|
296
|
+
- Handle edge cases (empty input, file not found, invalid args).
|
|
297
|
+
- Use ESM-compatible patterns: import.meta.url instead of __dirname, import.meta.filename instead of __filename. Use fileURLToPath(import.meta.url) for path resolution.
|
|
298
|
+
|
|
290
299
|
### Output Requirements
|
|
291
300
|
Your plan MUST include at least one write_file, patch_file, or run_shell step.
|
|
292
|
-
A plan with only
|
|
301
|
+
A plan with only read_file, list_files, or respond steps is a FAILURE \u2014 you must produce artifacts.`
|
|
293
302
|
};
|
|
294
303
|
var CAP_ROLE_REVIEWER = {
|
|
295
304
|
name: "role-reviewer",
|
|
@@ -313,10 +322,19 @@ var CAP_ROLE_OPS = {
|
|
|
313
322
|
You SET UP infrastructure \u2014 package.json, tsconfig.json, directory structure, dependencies.
|
|
314
323
|
|
|
315
324
|
Your job:
|
|
316
|
-
1.
|
|
317
|
-
2.
|
|
318
|
-
3.
|
|
325
|
+
1. Create the project directory first: run_shell with mkdir -p <project>/src
|
|
326
|
+
2. Write config files (package.json, tsconfig.json) using write_file
|
|
327
|
+
3. Install dependencies with run_shell (npm install)
|
|
328
|
+
4. Ensure the project structure is ready for developers
|
|
319
329
|
|
|
330
|
+
### File Paths
|
|
331
|
+
All paths are RELATIVE TO THE WORKSPACE ROOT. If the project is in a subfolder (e.g., todo-app/), ALL your paths must include that prefix: todo-app/package.json, todo-app/tsconfig.json, todo-app/src/.
|
|
332
|
+
|
|
333
|
+
### Design Tasks
|
|
334
|
+
When the task is a Design task, create a .design.md file with detailed TypeScript interfaces, module exports, and dependency graph. This file must contain copy-paste ready interface definitions that developers will implement exactly.
|
|
335
|
+
|
|
336
|
+
### Output Requirements
|
|
337
|
+
Your plan MUST include write_file and/or run_shell steps that create real files.
|
|
320
338
|
You do NOT have task_create. You execute infrastructure tasks directly.`
|
|
321
339
|
};
|
|
322
340
|
var CAP_FILE_OPS = {
|
|
@@ -943,6 +943,25 @@ function TaskDetailView({ taskId, onBack, onEdit }) {
|
|
|
943
943
|
if (!data) return;
|
|
944
944
|
const t = data.task ?? data;
|
|
945
945
|
setTask(t);
|
|
946
|
+
const rs = t.context;
|
|
947
|
+
const summaries = rs?.runSummaries;
|
|
948
|
+
if (summaries?.length) {
|
|
949
|
+
setHistory((prev) => {
|
|
950
|
+
if (prev.length > 0) return prev;
|
|
951
|
+
return summaries.map((s) => ({
|
|
952
|
+
id: s.runId,
|
|
953
|
+
runId: s.runId,
|
|
954
|
+
outcome: s.outcome,
|
|
955
|
+
summary: s.summary,
|
|
956
|
+
report: s.report,
|
|
957
|
+
filesModified: s.filesModified,
|
|
958
|
+
durationMs: s.durationMs,
|
|
959
|
+
cost: s.cost,
|
|
960
|
+
tokensUsed: s.tokensUsed,
|
|
961
|
+
error: s.error
|
|
962
|
+
}));
|
|
963
|
+
});
|
|
964
|
+
}
|
|
946
965
|
if (data.subtasks && Array.isArray(data.subtasks)) {
|
|
947
966
|
setSubtasks(data.subtasks);
|
|
948
967
|
} else if (t.isParent) {
|
|
@@ -959,13 +978,14 @@ function TaskDetailView({ taskId, onBack, onEdit }) {
|
|
|
959
978
|
try {
|
|
960
979
|
const raw = await callTool("fw_weaver_history", { taskId });
|
|
961
980
|
const data = typeof raw === "string" ? JSON.parse(raw) : raw;
|
|
962
|
-
if (Array.isArray(data)) {
|
|
981
|
+
if (Array.isArray(data) && data.length > 0) {
|
|
963
982
|
setHistory(
|
|
964
983
|
data.map((r) => {
|
|
965
984
|
const costObj = r.cost && typeof r.cost === "object" ? r.cost : void 0;
|
|
966
985
|
return { ...r, costDetail: costObj, cost: costObj?.totalCost };
|
|
967
986
|
})
|
|
968
987
|
);
|
|
988
|
+
return;
|
|
969
989
|
}
|
|
970
990
|
} catch {
|
|
971
991
|
}
|
|
@@ -1380,7 +1400,7 @@ function TaskDetailView({ taskId, onBack, onEdit }) {
|
|
|
1380
1400
|
React6.createElement(
|
|
1381
1401
|
Flex5,
|
|
1382
1402
|
{ variant: "row-center-start-nowrap-6" },
|
|
1383
|
-
task.status === "failed" && React6.createElement(Button2, {
|
|
1403
|
+
(task.status === "failed" || task.status === "open" && task.attempt >= task.maxAttempts) && React6.createElement(Button2, {
|
|
1384
1404
|
size: "xs",
|
|
1385
1405
|
variant: "fill",
|
|
1386
1406
|
color: "primary",
|
|
@@ -2738,30 +2758,28 @@ var CAP_ROLE_ORCHESTRATOR = {
|
|
|
2738
2758
|
You DECOMPOSE and ASSIGN. You never write code or create files directly.
|
|
2739
2759
|
|
|
2740
2760
|
Your job:
|
|
2741
|
-
1. Analyze the objective
|
|
2742
|
-
2.
|
|
2743
|
-
3.
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
- "ops" \u2192 project setup, dependencies, config, infrastructure
|
|
2748
|
-
NEVER set assignedProfile to "orchestrator". You are the orchestrator \u2014 assigning to yourself creates an infinite loop. Only "developer", "reviewer", or "ops".
|
|
2749
|
-
5. Set dependencies so tasks execute in the right order
|
|
2750
|
-
Use the EXACT title of a previous subtask as the dependsOn value. The system resolves titles to real task IDs at execution time. Example: dependsOn: ["Setup: Initialize project structure"]
|
|
2751
|
-
6. Include the project brief in every subtask's description
|
|
2761
|
+
1. Analyze the objective
|
|
2762
|
+
2. Break it into focused subtasks via task_create. Set parentId to "@self" on every subtask.
|
|
2763
|
+
3. ALWAYS set assignedProfile: "developer", "reviewer", or "ops".
|
|
2764
|
+
NEVER set assignedProfile to "orchestrator" \u2014 assigning to yourself creates an infinite loop.
|
|
2765
|
+
4. Use the EXACT title of a previous subtask as dependsOn. The system resolves titles to real task IDs.
|
|
2766
|
+
5. Include a project brief in every subtask: "PROJECT: [what]. FILES: [exact paths from workspace root]. CONVENTIONS: [patterns]."
|
|
2752
2767
|
|
|
2753
|
-
CRITICAL: You do NOT have write_file, patch_file, or run_shell.
|
|
2768
|
+
CRITICAL: You do NOT have write_file, patch_file, or run_shell. Only plan and delegate.
|
|
2754
2769
|
|
|
2755
|
-
###
|
|
2756
|
-
|
|
2757
|
-
|
|
2770
|
+
### Design Phase (MANDATORY)
|
|
2771
|
+
Your FIRST subtask MUST be a design task assigned to ops that creates a .design.md file in the project root. This is the single source of truth. It must contain:
|
|
2772
|
+
- Module map, TypeScript interfaces (copy-paste ready), export contracts (function signatures)
|
|
2773
|
+
- Dependency graph, conventions (naming, error handling, patterns)
|
|
2774
|
+
Every subsequent developer task MUST read .design.md before writing code.
|
|
2758
2775
|
|
|
2759
2776
|
### Subtask Quality
|
|
2760
|
-
Each subtask
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2777
|
+
Each subtask: focused (one concern), self-contained, properly routed, ordered by dependsOn.
|
|
2778
|
+
|
|
2779
|
+
### Example
|
|
2780
|
+
{ operation: "task_create", args: { title: "Design: Create project contract", parentId: "@self", assignedProfile: "ops", complexity: "complex", description: "Create todo-app/.design.md with module map, TypeScript interfaces, export contracts.", dependsOn: [] } }
|
|
2781
|
+
{ operation: "task_create", args: { title: "Setup project", parentId: "@self", assignedProfile: "ops", dependsOn: ["Design: Create project contract"] } }
|
|
2782
|
+
{ operation: "task_create", args: { title: "Write code", parentId: "@self", assignedProfile: "developer", dependsOn: ["Setup project"] } }`
|
|
2765
2783
|
};
|
|
2766
2784
|
var CAP_ROLE_DEVELOPER = {
|
|
2767
2785
|
name: "role-developer",
|
|
@@ -2770,17 +2788,28 @@ var CAP_ROLE_DEVELOPER = {
|
|
|
2770
2788
|
You WRITE CODE. Execute the task directly using write_file, patch_file, and run_shell.
|
|
2771
2789
|
|
|
2772
2790
|
Your job:
|
|
2773
|
-
1. Read the
|
|
2774
|
-
2.
|
|
2775
|
-
3.
|
|
2776
|
-
4. Verify your
|
|
2791
|
+
1. Read .design.md in the project root to understand interfaces and contracts
|
|
2792
|
+
2. Read files created by previous tasks (your dependencies are done \u2014 their files are on disk)
|
|
2793
|
+
3. Write code that MATCHES the contracts in .design.md exactly \u2014 same types, same function signatures, same exports
|
|
2794
|
+
4. Verify your imports resolve to real exports in existing files
|
|
2777
2795
|
|
|
2778
2796
|
You do NOT have task_create. You cannot create subtasks or delegate.
|
|
2779
2797
|
If the task seems too large, do your best \u2014 the orchestrator already decomposed it for you.
|
|
2780
2798
|
|
|
2799
|
+
### File Paths
|
|
2800
|
+
All paths in write_file/patch_file are RELATIVE TO THE WORKSPACE ROOT. If the task says "inside todo-app/", your paths MUST start with todo-app/ (e.g., todo-app/src/cli.ts, NOT src/cli.ts).
|
|
2801
|
+
|
|
2802
|
+
### Code Quality
|
|
2803
|
+
- Write COMPLETE, WORKING code. No TODOs, no placeholders, no empty function bodies, no "// implement later".
|
|
2804
|
+
- Every function must be fully implemented with real logic.
|
|
2805
|
+
- Use proper TypeScript types. Use strict mode patterns.
|
|
2806
|
+
- Export everything that other files will import.
|
|
2807
|
+
- Handle edge cases (empty input, file not found, invalid args).
|
|
2808
|
+
- Use ESM-compatible patterns: import.meta.url instead of __dirname, import.meta.filename instead of __filename. Use fileURLToPath(import.meta.url) for path resolution.
|
|
2809
|
+
|
|
2781
2810
|
### Output Requirements
|
|
2782
2811
|
Your plan MUST include at least one write_file, patch_file, or run_shell step.
|
|
2783
|
-
A plan with only
|
|
2812
|
+
A plan with only read_file, list_files, or respond steps is a FAILURE \u2014 you must produce artifacts.`
|
|
2784
2813
|
};
|
|
2785
2814
|
var CAP_ROLE_REVIEWER = {
|
|
2786
2815
|
name: "role-reviewer",
|
|
@@ -2804,10 +2833,19 @@ var CAP_ROLE_OPS = {
|
|
|
2804
2833
|
You SET UP infrastructure \u2014 package.json, tsconfig.json, directory structure, dependencies.
|
|
2805
2834
|
|
|
2806
2835
|
Your job:
|
|
2807
|
-
1.
|
|
2808
|
-
2.
|
|
2809
|
-
3.
|
|
2836
|
+
1. Create the project directory first: run_shell with mkdir -p <project>/src
|
|
2837
|
+
2. Write config files (package.json, tsconfig.json) using write_file
|
|
2838
|
+
3. Install dependencies with run_shell (npm install)
|
|
2839
|
+
4. Ensure the project structure is ready for developers
|
|
2840
|
+
|
|
2841
|
+
### File Paths
|
|
2842
|
+
All paths are RELATIVE TO THE WORKSPACE ROOT. If the project is in a subfolder (e.g., todo-app/), ALL your paths must include that prefix: todo-app/package.json, todo-app/tsconfig.json, todo-app/src/.
|
|
2810
2843
|
|
|
2844
|
+
### Design Tasks
|
|
2845
|
+
When the task is a Design task, create a .design.md file with detailed TypeScript interfaces, module exports, and dependency graph. This file must contain copy-paste ready interface definitions that developers will implement exactly.
|
|
2846
|
+
|
|
2847
|
+
### Output Requirements
|
|
2848
|
+
Your plan MUST include write_file and/or run_shell steps that create real files.
|
|
2811
2849
|
You do NOT have task_create. You execute infrastructure tasks directly.`
|
|
2812
2850
|
};
|
|
2813
2851
|
var CAP_FILE_OPS = {
|
|
@@ -4344,7 +4382,7 @@ function SwarmDashboard() {
|
|
|
4344
4382
|
React11.createElement(Tabs2, {
|
|
4345
4383
|
tabs: [
|
|
4346
4384
|
{ id: "tasks", title: `Tasks (${tasks.length})` },
|
|
4347
|
-
{ id: "bots", title: hasSwarmInstances ? `
|
|
4385
|
+
{ id: "bots", title: hasSwarmInstances ? `Workers (${swarmInstanceEntries.length})` : `Bots (${registeredBots.length})` },
|
|
4348
4386
|
{ id: "profiles", title: `Profiles (${profiles.length})` },
|
|
4349
4387
|
{ id: "config", title: "Config" }
|
|
4350
4388
|
],
|
|
@@ -4485,7 +4523,7 @@ function SwarmDashboard() {
|
|
|
4485
4523
|
variant: "smallCaption-regular",
|
|
4486
4524
|
color: "color-text-subtle",
|
|
4487
4525
|
style: { width: "120px", flexShrink: 0 }
|
|
4488
|
-
}, "
|
|
4526
|
+
}, "Worker"),
|
|
4489
4527
|
React11.createElement(Typography10, {
|
|
4490
4528
|
variant: "smallCaption-regular",
|
|
4491
4529
|
color: "color-text-subtle",
|
|
@@ -4525,7 +4563,7 @@ function SwarmDashboard() {
|
|
|
4525
4563
|
key: inst.instanceId,
|
|
4526
4564
|
bot: {
|
|
4527
4565
|
botId: inst.instanceId,
|
|
4528
|
-
botName: `${inst.
|
|
4566
|
+
botName: inst.profileId ? `${inst.instanceId} (${inst.profileId})` : inst.instanceId,
|
|
4529
4567
|
status: inst.status,
|
|
4530
4568
|
currentTaskId: inst.currentTaskId,
|
|
4531
4569
|
currentRunId: inst.currentRunId,
|
|
@@ -437,6 +437,25 @@ function TaskDetailView({ taskId, onBack, onEdit }) {
|
|
|
437
437
|
if (!data) return;
|
|
438
438
|
const t = data.task ?? data;
|
|
439
439
|
setTask(t);
|
|
440
|
+
const rs = t.context;
|
|
441
|
+
const summaries = rs?.runSummaries;
|
|
442
|
+
if (summaries?.length) {
|
|
443
|
+
setHistory((prev) => {
|
|
444
|
+
if (prev.length > 0) return prev;
|
|
445
|
+
return summaries.map((s) => ({
|
|
446
|
+
id: s.runId,
|
|
447
|
+
runId: s.runId,
|
|
448
|
+
outcome: s.outcome,
|
|
449
|
+
summary: s.summary,
|
|
450
|
+
report: s.report,
|
|
451
|
+
filesModified: s.filesModified,
|
|
452
|
+
durationMs: s.durationMs,
|
|
453
|
+
cost: s.cost,
|
|
454
|
+
tokensUsed: s.tokensUsed,
|
|
455
|
+
error: s.error
|
|
456
|
+
}));
|
|
457
|
+
});
|
|
458
|
+
}
|
|
440
459
|
if (data.subtasks && Array.isArray(data.subtasks)) {
|
|
441
460
|
setSubtasks(data.subtasks);
|
|
442
461
|
} else if (t.isParent) {
|
|
@@ -453,13 +472,14 @@ function TaskDetailView({ taskId, onBack, onEdit }) {
|
|
|
453
472
|
try {
|
|
454
473
|
const raw = await callTool("fw_weaver_history", { taskId });
|
|
455
474
|
const data = typeof raw === "string" ? JSON.parse(raw) : raw;
|
|
456
|
-
if (Array.isArray(data)) {
|
|
475
|
+
if (Array.isArray(data) && data.length > 0) {
|
|
457
476
|
setHistory(
|
|
458
477
|
data.map((r) => {
|
|
459
478
|
const costObj = r.cost && typeof r.cost === "object" ? r.cost : void 0;
|
|
460
479
|
return { ...r, costDetail: costObj, cost: costObj?.totalCost };
|
|
461
480
|
})
|
|
462
481
|
);
|
|
482
|
+
return;
|
|
463
483
|
}
|
|
464
484
|
} catch {
|
|
465
485
|
}
|
|
@@ -874,7 +894,7 @@ function TaskDetailView({ taskId, onBack, onEdit }) {
|
|
|
874
894
|
React2.createElement(
|
|
875
895
|
Flex,
|
|
876
896
|
{ variant: "row-center-start-nowrap-6" },
|
|
877
|
-
task.status === "failed" && React2.createElement(Button, {
|
|
897
|
+
(task.status === "failed" || task.status === "open" && task.attempt >= task.maxAttempts) && React2.createElement(Button, {
|
|
878
898
|
size: "xs",
|
|
879
899
|
variant: "fill",
|
|
880
900
|
color: "primary",
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
* @connect readWf.onSuccess -> report.execute
|
|
43
43
|
* @connect abort.onSuccess -> report.execute
|
|
44
44
|
* @connect notify.onSuccess -> report.execute
|
|
45
|
-
* @connect
|
|
45
|
+
* @connect mergePlan.ctx -> report.mainCtx
|
|
46
46
|
* @connect readWf.ctx -> report.readCtx
|
|
47
47
|
* @connect abort.ctx -> report.abortCtx
|
|
48
|
-
* @connect
|
|
48
|
+
* @connect plan.ctx -> report.failCtx
|
|
49
49
|
* @connect report.summary -> Exit.summary
|
|
50
50
|
* @param execute [order:-1] - Execute
|
|
51
51
|
* @param taskJson [order:0] - TaskJson
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weaver-bot.d.ts","sourceRoot":"","sources":["../../src/workflows/weaver-bot.ts"],"names":[],"mappings":"AAuaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EACzE,eAAe,CAAC,EAAE,WAAW,GAC5B,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"weaver-bot.d.ts","sourceRoot":"","sources":["../../src/workflows/weaver-bot.ts"],"names":[],"mappings":"AAuaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EACzE,eAAe,CAAC,EAAE,WAAW,GAC5B,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAyqD7E"}
|
|
@@ -299,10 +299,10 @@ class GeneratedExecutionContext {
|
|
|
299
299
|
* @connect readWf.onSuccess -> report.execute
|
|
300
300
|
* @connect abort.onSuccess -> report.execute
|
|
301
301
|
* @connect notify.onSuccess -> report.execute
|
|
302
|
-
* @connect
|
|
302
|
+
* @connect mergePlan.ctx -> report.mainCtx
|
|
303
303
|
* @connect readWf.ctx -> report.readCtx
|
|
304
304
|
* @connect abort.ctx -> report.abortCtx
|
|
305
|
-
* @connect
|
|
305
|
+
* @connect plan.ctx -> report.failCtx
|
|
306
306
|
* @connect report.summary -> Exit.summary
|
|
307
307
|
* @param execute [order:-1] - Execute
|
|
308
308
|
* @param taskJson [order:0] - TaskJson
|
|
@@ -1926,16 +1926,17 @@ export async function weaverBot(execute, params, __abortSignal__) {
|
|
|
1926
1926
|
try {
|
|
1927
1927
|
const report_execute = (readWfIdx !== undefined ? await ctx.getVariable({ id: 'readWf', portName: 'onSuccess', executionIndex: readWfIdx }) : false) || (abortIdx !== undefined ? await ctx.getVariable({ id: 'abort', portName: 'onSuccess', executionIndex: abortIdx }) : false) || (notifyIdx !== undefined ? await ctx.getVariable({ id: 'notify', portName: 'onSuccess', executionIndex: notifyIdx }) : false) || (gitOpsIdx !== undefined ? await ctx.getVariable({ id: 'gitOps', portName: 'onSuccess', executionIndex: gitOpsIdx }) : false) || (receiveIdx !== undefined ? await ctx.getVariable({ id: 'receive', portName: 'onFailure', executionIndex: receiveIdx }) : false) || (planIdx !== undefined ? await ctx.getVariable({ id: 'plan', portName: 'onFailure', executionIndex: planIdx }) : false) || (execRetryIdx !== undefined ? await ctx.getVariable({ id: 'execRetry', portName: 'onFailure', executionIndex: execRetryIdx }) : false);
|
|
1928
1928
|
await ctx.setVariable({ id: 'report', portName: 'execute', executionIndex: reportIdx, nodeTypeName: 'weaverBotReport' }, report_execute);
|
|
1929
|
-
const report_mainCtx =
|
|
1929
|
+
const report_mainCtx = mergePlanIdx !== undefined ? await ctx.getVariable({ id: 'mergePlan', portName: 'ctx', executionIndex: mergePlanIdx }) : undefined;
|
|
1930
1930
|
await ctx.setVariable({ id: 'report', portName: 'mainCtx', executionIndex: reportIdx, nodeTypeName: 'weaverBotReport' }, report_mainCtx);
|
|
1931
1931
|
const report_readCtx = readWfIdx !== undefined ? await ctx.getVariable({ id: 'readWf', portName: 'ctx', executionIndex: readWfIdx }) : undefined;
|
|
1932
1932
|
await ctx.setVariable({ id: 'report', portName: 'readCtx', executionIndex: reportIdx, nodeTypeName: 'weaverBotReport' }, report_readCtx);
|
|
1933
1933
|
const report_abortCtx = abortIdx !== undefined ? await ctx.getVariable({ id: 'abort', portName: 'ctx', executionIndex: abortIdx }) : undefined;
|
|
1934
1934
|
await ctx.setVariable({ id: 'report', portName: 'abortCtx', executionIndex: reportIdx, nodeTypeName: 'weaverBotReport' }, report_abortCtx);
|
|
1935
|
-
const report_failCtx =
|
|
1935
|
+
const report_failCtx = planIdx !== undefined ? await ctx.getVariable({ id: 'plan', portName: 'ctx', executionIndex: planIdx }) : undefined;
|
|
1936
1936
|
await ctx.setVariable({ id: 'report', portName: 'failCtx', executionIndex: reportIdx, nodeTypeName: 'weaverBotReport' }, report_failCtx);
|
|
1937
1937
|
const reportResult = await weaverBotReport(report_execute, report_mainCtx, report_readCtx, report_abortCtx, report_failCtx);
|
|
1938
1938
|
await ctx.setVariable({ id: 'report', portName: 'summary', executionIndex: reportIdx, nodeTypeName: 'weaverBotReport' }, reportResult.summary);
|
|
1939
|
+
await ctx.setVariable({ id: 'report', portName: 'report', executionIndex: reportIdx, nodeTypeName: 'weaverBotReport' }, reportResult.report);
|
|
1939
1940
|
await ctx.setVariable({ id: 'report', portName: 'reportJson', executionIndex: reportIdx, nodeTypeName: 'weaverBotReport' }, reportResult.reportJson);
|
|
1940
1941
|
await ctx.setVariable({ id: 'report', portName: 'onFailure', executionIndex: reportIdx, nodeTypeName: 'weaverBotReport' }, reportResult.onFailure);
|
|
1941
1942
|
await ctx.setVariable({ id: 'report', portName: 'onSuccess', executionIndex: reportIdx, nodeTypeName: 'weaverBotReport' }, reportResult.onSuccess);
|