@mclawnet/swarm 0.1.0 → 0.1.2
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/__tests__/action-parser.test.d.ts +2 -0
- package/dist/__tests__/action-parser.test.d.ts.map +1 -0
- package/dist/__tests__/action-parser.test.js +91 -0
- package/dist/__tests__/action-parser.test.js.map +1 -0
- package/dist/__tests__/migration-roles.test.d.ts +2 -0
- package/dist/__tests__/migration-roles.test.d.ts.map +1 -0
- package/dist/__tests__/migration-roles.test.js +213 -0
- package/dist/__tests__/migration-roles.test.js.map +1 -0
- package/dist/__tests__/retrospective.test.d.ts +2 -0
- package/dist/__tests__/retrospective.test.d.ts.map +1 -0
- package/dist/__tests__/retrospective.test.js +467 -0
- package/dist/__tests__/retrospective.test.js.map +1 -0
- package/dist/__tests__/role-loader.test.d.ts +2 -0
- package/dist/__tests__/role-loader.test.d.ts.map +1 -0
- package/dist/__tests__/role-loader.test.js +217 -0
- package/dist/__tests__/role-loader.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-init.test.d.ts +2 -0
- package/dist/__tests__/swarm-coordinator-init.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-coordinator-init.test.js +194 -0
- package/dist/__tests__/swarm-coordinator-init.test.js.map +1 -0
- package/dist/__tests__/swarm-coordinator-roleId.test.d.ts +2 -0
- package/dist/__tests__/swarm-coordinator-roleId.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-coordinator-roleId.test.js +147 -0
- package/dist/__tests__/swarm-coordinator-roleId.test.js.map +1 -0
- package/dist/__tests__/template-loader.test.d.ts +2 -0
- package/dist/__tests__/template-loader.test.d.ts.map +1 -0
- package/dist/__tests__/template-loader.test.js +103 -0
- package/dist/__tests__/template-loader.test.js.map +1 -0
- package/dist/action-parser.d.ts.map +1 -1
- package/dist/action-parser.js +96 -6
- package/dist/action-parser.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/message-router.d.ts +6 -2
- package/dist/message-router.d.ts.map +1 -1
- package/dist/message-router.js +13 -7
- package/dist/message-router.js.map +1 -1
- package/dist/persistence.d.ts +1 -0
- package/dist/persistence.d.ts.map +1 -1
- package/dist/persistence.js +26 -3
- package/dist/persistence.js.map +1 -1
- package/dist/retrospective.d.ts +42 -0
- package/dist/retrospective.d.ts.map +1 -0
- package/dist/retrospective.js +307 -0
- package/dist/retrospective.js.map +1 -0
- package/dist/roles/role-loader.d.ts +12 -1
- package/dist/roles/role-loader.d.ts.map +1 -1
- package/dist/roles/role-loader.js +160 -7
- package/dist/roles/role-loader.js.map +1 -1
- package/dist/roles/types.d.ts +26 -2
- package/dist/roles/types.d.ts.map +1 -1
- package/dist/swarm-coordinator.d.ts +10 -2
- package/dist/swarm-coordinator.d.ts.map +1 -1
- package/dist/swarm-coordinator.js +267 -38
- package/dist/swarm-coordinator.js.map +1 -1
- package/dist/templates/template-loader.d.ts +20 -0
- package/dist/templates/template-loader.d.ts.map +1 -0
- package/dist/templates/template-loader.js +117 -0
- package/dist/templates/template-loader.js.map +1 -0
- package/dist/templates/types.d.ts +25 -0
- package/dist/templates/types.d.ts.map +1 -0
- package/dist/templates/types.js +2 -0
- package/dist/templates/types.js.map +1 -0
- package/dist/types.d.ts +13 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +17 -11
- package/roles/analyst-livermore.md +112 -0
- package/roles/designer-rams.md +266 -0
- package/roles/dev-torvalds.md +214 -0
- package/roles/developer.md +22 -1
- package/roles/director-jia.md +286 -0
- package/roles/editor-boyong.md +148 -0
- package/roles/macro-dalio.md +115 -0
- package/roles/planner-maoni.md +306 -0
- package/roles/pm-jobs.md +326 -0
- package/roles/preset-analyst-simons.md +55 -0
- package/roles/preset-architect-knuth.md +55 -0
- package/roles/preset-designer-norman.md +55 -0
- package/roles/preset-designer.md +55 -0
- package/roles/preset-dev-carmack.md +55 -0
- package/roles/preset-dev-gosling.md +55 -0
- package/roles/preset-developer.md +68 -0
- package/roles/preset-manager-grove.md +55 -0
- package/roles/preset-manager-musk.md +55 -0
- package/roles/preset-pm.md +105 -0
- package/roles/preset-researcher-feynman.md +55 -0
- package/roles/preset-reviewer.md +62 -0
- package/roles/preset-strategist-buffett.md +55 -0
- package/roles/preset-strategist-munger.md +55 -0
- package/roles/preset-strategist-sunzi.md +55 -0
- package/roles/preset-tester-beck.md +56 -0
- package/roles/preset-tester.md +63 -0
- package/roles/preset-writer-orwell.md +55 -0
- package/roles/preset-writer.md +55 -0
- package/roles/quant-simons.md +136 -0
- package/roles/queen.md +27 -1
- package/roles/reviewer-martin.md +200 -0
- package/roles/reviewer.md +18 -1
- package/roles/rhythm-tangsan.md +135 -0
- package/roles/risk-taleb.md +112 -0
- package/roles/script-shitiesheng.md +129 -0
- package/roles/storyboard-xuke.md +138 -0
- package/roles/strategist-soros.md +257 -0
- package/roles/tester-beck.md +232 -0
- package/roles/tester.md +19 -1
- package/roles/trader-jones.md +124 -0
- package/roles/vfx-guchangwei.md +129 -0
- package/roles/writer-zhouzi.md +144 -0
- package/templates/dev-team-pro.md +21 -0
- package/templates/dev-team.md +19 -0
- package/templates/minimal.md +14 -0
- package/templates/trading-team.md +22 -0
- package/templates/video-team.md +18 -0
- package/templates/writing-team.md +18 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { parseTemplateFile } from "../templates/template-loader.js";
|
|
3
|
+
describe("template-loader", () => {
|
|
4
|
+
it("should parse a standard template file", () => {
|
|
5
|
+
const content = `---
|
|
6
|
+
name: dev-team
|
|
7
|
+
displayName: 全栈开发团队
|
|
8
|
+
description: 标准全栈开发团队
|
|
9
|
+
icon: code
|
|
10
|
+
roles:
|
|
11
|
+
- roleName: queen
|
|
12
|
+
count: 1
|
|
13
|
+
eager: true
|
|
14
|
+
- roleName: reviewer
|
|
15
|
+
count: 1
|
|
16
|
+
eager: true
|
|
17
|
+
- roleName: developer
|
|
18
|
+
count: 2
|
|
19
|
+
- roleName: tester
|
|
20
|
+
count: 1
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
Some description here.`;
|
|
24
|
+
const tpl = parseTemplateFile(content);
|
|
25
|
+
expect(tpl.name).toBe("dev-team");
|
|
26
|
+
expect(tpl.displayName).toBe("全栈开发团队");
|
|
27
|
+
expect(tpl.description).toBe("标准全栈开发团队");
|
|
28
|
+
expect(tpl.icon).toBe("code");
|
|
29
|
+
expect(tpl.body).toBe("Some description here.");
|
|
30
|
+
expect(tpl.roles).toHaveLength(4);
|
|
31
|
+
expect(tpl.roles[0]).toEqual({ roleName: "queen", count: 1, eager: true });
|
|
32
|
+
expect(tpl.roles[1]).toEqual({ roleName: "reviewer", count: 1, eager: true });
|
|
33
|
+
expect(tpl.roles[2]).toEqual({ roleName: "developer", count: 2, eager: undefined });
|
|
34
|
+
expect(tpl.roles[3]).toEqual({ roleName: "tester", count: 1, eager: undefined });
|
|
35
|
+
});
|
|
36
|
+
it("should parse minimal template (no eager, no icon)", () => {
|
|
37
|
+
const content = `---
|
|
38
|
+
name: minimal
|
|
39
|
+
displayName: 极简团队
|
|
40
|
+
description: 快速原型
|
|
41
|
+
roles:
|
|
42
|
+
- roleName: queen
|
|
43
|
+
count: 1
|
|
44
|
+
eager: true
|
|
45
|
+
- roleName: developer
|
|
46
|
+
count: 1
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
Minimal team.`;
|
|
50
|
+
const tpl = parseTemplateFile(content);
|
|
51
|
+
expect(tpl.name).toBe("minimal");
|
|
52
|
+
expect(tpl.icon).toBeUndefined();
|
|
53
|
+
expect(tpl.roles).toHaveLength(2);
|
|
54
|
+
expect(tpl.roles[0]).toEqual({ roleName: "queen", count: 1, eager: true });
|
|
55
|
+
expect(tpl.roles[1]).toEqual({ roleName: "developer", count: 1, eager: undefined });
|
|
56
|
+
});
|
|
57
|
+
it("should default count to 1 when omitted", () => {
|
|
58
|
+
const content = `---
|
|
59
|
+
name: test
|
|
60
|
+
displayName: Test
|
|
61
|
+
description: Test template
|
|
62
|
+
roles:
|
|
63
|
+
- roleName: queen
|
|
64
|
+
eager: true
|
|
65
|
+
- roleName: developer
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
Body.`;
|
|
69
|
+
const tpl = parseTemplateFile(content);
|
|
70
|
+
expect(tpl.roles[0].count).toBe(1);
|
|
71
|
+
expect(tpl.roles[1].count).toBe(1);
|
|
72
|
+
});
|
|
73
|
+
it("should throw on missing frontmatter", () => {
|
|
74
|
+
expect(() => parseTemplateFile("no frontmatter here")).toThrow("missing YAML frontmatter");
|
|
75
|
+
});
|
|
76
|
+
it("should handle empty roles list", () => {
|
|
77
|
+
const content = `---
|
|
78
|
+
name: empty
|
|
79
|
+
displayName: Empty
|
|
80
|
+
description: No roles
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
Empty template.`;
|
|
84
|
+
const tpl = parseTemplateFile(content);
|
|
85
|
+
expect(tpl.roles).toHaveLength(0);
|
|
86
|
+
});
|
|
87
|
+
it("should strip quotes from flat values", () => {
|
|
88
|
+
const content = `---
|
|
89
|
+
name: "quoted"
|
|
90
|
+
displayName: 'single-quoted'
|
|
91
|
+
description: unquoted
|
|
92
|
+
roles:
|
|
93
|
+
- roleName: queen
|
|
94
|
+
count: 1
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
Body.`;
|
|
98
|
+
const tpl = parseTemplateFile(content);
|
|
99
|
+
expect(tpl.name).toBe("quoted");
|
|
100
|
+
expect(tpl.displayName).toBe("single-quoted");
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=template-loader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-loader.test.js","sourceRoot":"","sources":["../../src/__tests__/template-loader.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-parser.d.ts","sourceRoot":"","sources":["../src/action-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"action-parser.d.ts","sourceRoot":"","sources":["../src/action-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAkF9C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC/C,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAyBA;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAqC9D"}
|
package/dist/action-parser.js
CHANGED
|
@@ -1,15 +1,99 @@
|
|
|
1
|
+
const SWARM_MARKER = "```swarm";
|
|
2
|
+
/**
|
|
3
|
+
* Extract JSON blocks from ```swarm fenced sections using brace-balancing.
|
|
4
|
+
* Handles nested code blocks (e.g. ```typescript inside data fields) that
|
|
5
|
+
* would break a naive non-greedy regex approach.
|
|
6
|
+
*/
|
|
7
|
+
function extractSwarmJsonBlocks(text) {
|
|
8
|
+
const results = [];
|
|
9
|
+
let searchFrom = 0;
|
|
10
|
+
while (searchFrom < text.length) {
|
|
11
|
+
const markerIdx = text.indexOf(SWARM_MARKER, searchFrom);
|
|
12
|
+
if (markerIdx === -1)
|
|
13
|
+
break;
|
|
14
|
+
// Find the newline after ```swarm
|
|
15
|
+
const nlIdx = text.indexOf("\n", markerIdx + SWARM_MARKER.length);
|
|
16
|
+
if (nlIdx === -1)
|
|
17
|
+
break;
|
|
18
|
+
// Find the first '{' after the marker line
|
|
19
|
+
let braceStart = -1;
|
|
20
|
+
for (let i = nlIdx + 1; i < text.length; i++) {
|
|
21
|
+
const ch = text[i];
|
|
22
|
+
if (ch === "{") {
|
|
23
|
+
braceStart = i;
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
if (ch !== " " && ch !== "\t" && ch !== "\n" && ch !== "\r")
|
|
27
|
+
break; // non-whitespace before '{' means no JSON
|
|
28
|
+
}
|
|
29
|
+
if (braceStart === -1) {
|
|
30
|
+
searchFrom = nlIdx + 1;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
// Brace-balance with string awareness
|
|
34
|
+
let depth = 0;
|
|
35
|
+
let inString = false;
|
|
36
|
+
let jsonEnd = -1;
|
|
37
|
+
for (let i = braceStart; i < text.length; i++) {
|
|
38
|
+
const ch = text[i];
|
|
39
|
+
if (inString) {
|
|
40
|
+
if (ch === "\\") {
|
|
41
|
+
i++;
|
|
42
|
+
continue;
|
|
43
|
+
} // skip escaped char
|
|
44
|
+
if (ch === '"') {
|
|
45
|
+
inString = false;
|
|
46
|
+
}
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (ch === '"') {
|
|
50
|
+
inString = true;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (ch === "{")
|
|
54
|
+
depth++;
|
|
55
|
+
if (ch === "}") {
|
|
56
|
+
depth--;
|
|
57
|
+
if (depth === 0) {
|
|
58
|
+
jsonEnd = i + 1;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (jsonEnd === -1) {
|
|
64
|
+
// Unbalanced braces — skip this marker
|
|
65
|
+
searchFrom = braceStart + 1;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
// Find the closing ``` after the JSON (skip optional whitespace/newlines)
|
|
69
|
+
let blockEnd = jsonEnd;
|
|
70
|
+
const closingBackticks = text.indexOf("```", jsonEnd);
|
|
71
|
+
if (closingBackticks !== -1) {
|
|
72
|
+
// Only use it if there's nothing but whitespace between JSON end and ```
|
|
73
|
+
const between = text.slice(jsonEnd, closingBackticks);
|
|
74
|
+
if (/^\s*$/.test(between)) {
|
|
75
|
+
blockEnd = closingBackticks + 3;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
results.push({
|
|
79
|
+
jsonStr: text.slice(braceStart, jsonEnd),
|
|
80
|
+
start: markerIdx,
|
|
81
|
+
end: blockEnd,
|
|
82
|
+
});
|
|
83
|
+
searchFrom = blockEnd;
|
|
84
|
+
}
|
|
85
|
+
return results;
|
|
86
|
+
}
|
|
1
87
|
/**
|
|
2
88
|
* Parse ```swarm code blocks from Claude output text.
|
|
3
89
|
* Returns extracted actions and the text with swarm blocks removed.
|
|
4
90
|
*/
|
|
5
91
|
export function parseSwarmActions(text) {
|
|
6
92
|
const actions = [];
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
while ((match = swarmBlockRegex.exec(text)) !== null) {
|
|
10
|
-
const jsonStr = match[1].trim();
|
|
93
|
+
const blocks = extractSwarmJsonBlocks(text);
|
|
94
|
+
for (const block of blocks) {
|
|
11
95
|
try {
|
|
12
|
-
const parsed = JSON.parse(jsonStr);
|
|
96
|
+
const parsed = JSON.parse(block.jsonStr);
|
|
13
97
|
if (parsed && typeof parsed.action === "string") {
|
|
14
98
|
actions.push(parsed);
|
|
15
99
|
}
|
|
@@ -19,7 +103,13 @@ export function parseSwarmActions(text) {
|
|
|
19
103
|
}
|
|
20
104
|
}
|
|
21
105
|
// Remove swarm blocks from text for clean display
|
|
22
|
-
|
|
106
|
+
let cleanText = text;
|
|
107
|
+
// Process in reverse order so indices remain valid
|
|
108
|
+
for (let i = blocks.length - 1; i >= 0; i--) {
|
|
109
|
+
const { start, end } = blocks[i];
|
|
110
|
+
cleanText = cleanText.slice(0, start) + cleanText.slice(end);
|
|
111
|
+
}
|
|
112
|
+
cleanText = cleanText.trim();
|
|
23
113
|
return { actions, cleanText };
|
|
24
114
|
}
|
|
25
115
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-parser.js","sourceRoot":"","sources":["../src/action-parser.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"action-parser.js","sourceRoot":"","sources":["../src/action-parser.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,10 +2,14 @@ export { SwarmCoordinator } from "./swarm-coordinator.js";
|
|
|
2
2
|
export { LocalMessageRouter } from "./message-router.js";
|
|
3
3
|
export type { MessageRouter } from "./message-router.js";
|
|
4
4
|
export { parseSwarmActions } from "./action-parser.js";
|
|
5
|
-
export { initRoles, loadRole, listRoles, buildRolePrompt } from "./roles/role-loader.js";
|
|
6
|
-
export { saveSwarmSnapshot, loadSwarmSnapshot, deleteSwarmSnapshot, appendMessageLog, listRecoverableSwarmIds, } from "./persistence.js";
|
|
5
|
+
export { initRoles, loadRole, listRoles, buildRolePrompt, parseRoleFile } from "./roles/role-loader.js";
|
|
6
|
+
export { saveSwarmSnapshot, loadSwarmSnapshot, deleteSwarmSnapshot, appendMessageLog, readMessageLog, listRecoverableSwarmIds, } from "./persistence.js";
|
|
7
7
|
export type { SwarmSnapshot } from "./persistence.js";
|
|
8
|
+
export { runRetrospective } from "./retrospective.js";
|
|
9
|
+
export type { RetrospectiveResult, RoleEvaluation } from "./retrospective.js";
|
|
8
10
|
export { listRecoverableSwarms, recoverSwarm } from "./recovery.js";
|
|
9
11
|
export type { SessionAdapter, HubAdapter, SwarmInstance, RoleInstance, SwarmAction, SwarmMessage, SwarmCreateOptions, RouteEndpoint, SwarmStatus, PlanStatus, } from "./types.js";
|
|
10
|
-
export type { RoleDefinition } from "./roles/types.js";
|
|
12
|
+
export type { RoleDefinition, DelegationMap, DelegationEntry } from "./roles/types.js";
|
|
13
|
+
export { initTemplates, listTemplates, loadTemplate } from "./templates/template-loader.js";
|
|
14
|
+
export type { TemplateDefinition, TemplateRoleSpec } from "./templates/types.js";
|
|
11
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxG,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEpE,YAAY,EACV,cAAc,EACd,UAAU,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEvF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC5F,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
export { SwarmCoordinator } from "./swarm-coordinator.js";
|
|
3
3
|
export { LocalMessageRouter } from "./message-router.js";
|
|
4
4
|
export { parseSwarmActions } from "./action-parser.js";
|
|
5
|
-
export { initRoles, loadRole, listRoles, buildRolePrompt } from "./roles/role-loader.js";
|
|
6
|
-
export { saveSwarmSnapshot, loadSwarmSnapshot, deleteSwarmSnapshot, appendMessageLog, listRecoverableSwarmIds, } from "./persistence.js";
|
|
5
|
+
export { initRoles, loadRole, listRoles, buildRolePrompt, parseRoleFile } from "./roles/role-loader.js";
|
|
6
|
+
export { saveSwarmSnapshot, loadSwarmSnapshot, deleteSwarmSnapshot, appendMessageLog, readMessageLog, listRecoverableSwarmIds, } from "./persistence.js";
|
|
7
|
+
export { runRetrospective } from "./retrospective.js";
|
|
7
8
|
export { listRecoverableSwarms, recoverSwarm } from "./recovery.js";
|
|
9
|
+
export { initTemplates, listTemplates, loadTemplate } from "./templates/template-loader.js";
|
|
8
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxG,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAiBpE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC"}
|
package/dist/message-router.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { SessionAdapter } from "./types.js";
|
|
2
2
|
import type { SwarmMessage, RouteEndpoint } from "./types.js";
|
|
3
|
+
export interface DeliveryResult {
|
|
4
|
+
delivered: boolean;
|
|
5
|
+
reason?: string;
|
|
6
|
+
}
|
|
3
7
|
/**
|
|
4
8
|
* Abstract message router — decouples communication from transport.
|
|
5
9
|
* LocalMessageRouter uses stdin/stdout via SessionAdapter.
|
|
@@ -7,7 +11,7 @@ import type { SwarmMessage, RouteEndpoint } from "./types.js";
|
|
|
7
11
|
*/
|
|
8
12
|
export interface MessageRouter {
|
|
9
13
|
/** Send a message to a specific role instance */
|
|
10
|
-
send(targetInstanceId: string, message: SwarmMessage):
|
|
14
|
+
send(targetInstanceId: string, message: SwarmMessage): DeliveryResult;
|
|
11
15
|
/** Broadcast a message to all active role instances */
|
|
12
16
|
broadcast(message: SwarmMessage, excludeInstanceId?: string): void;
|
|
13
17
|
/** Register a role instance in the routing table */
|
|
@@ -24,7 +28,7 @@ export declare class LocalMessageRouter implements MessageRouter {
|
|
|
24
28
|
private sessionAdapter;
|
|
25
29
|
private routes;
|
|
26
30
|
constructor(sessionAdapter: SessionAdapter);
|
|
27
|
-
send(targetInstanceId: string, message: SwarmMessage):
|
|
31
|
+
send(targetInstanceId: string, message: SwarmMessage): DeliveryResult;
|
|
28
32
|
broadcast(message: SwarmMessage, excludeInstanceId?: string): void;
|
|
29
33
|
register(instanceId: string, endpoint: RouteEndpoint): void;
|
|
30
34
|
unregister(instanceId: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../src/message-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAO9D;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../src/message-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAO9D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAAC;IAEtE,uDAAuD;IACvD,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnE,oDAAoD;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAE5D,iCAAiC;IACjC,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC,8BAA8B;IAC9B,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;CAClC;AAID;;GAEG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAG1C,OAAO,CAAC,cAAc;IAFlC,OAAO,CAAC,MAAM,CAAoC;gBAE9B,cAAc,EAAE,cAAc;IAElD,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc;IAuBrE,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI;IAQlE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI3D,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIpC,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CAGjC"}
|
package/dist/message-router.js
CHANGED
|
@@ -14,16 +14,22 @@ export class LocalMessageRouter {
|
|
|
14
14
|
const endpoint = this.routes.get(targetInstanceId);
|
|
15
15
|
if (!endpoint) {
|
|
16
16
|
log.warn({ targetInstanceId }, "no route found");
|
|
17
|
-
return;
|
|
17
|
+
return { delivered: false, reason: "no_route" };
|
|
18
18
|
}
|
|
19
19
|
if (endpoint.kind === "local") {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
try {
|
|
21
|
+
const formatted = formatMessageForClaude(message);
|
|
22
|
+
this.sessionAdapter.sendInput(endpoint.roleSessionId, formatted);
|
|
23
|
+
return { delivered: true };
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
log.warn({ targetInstanceId, err }, "stdin write failed");
|
|
27
|
+
return { delivered: false, reason: "write_failed" };
|
|
28
|
+
}
|
|
26
29
|
}
|
|
30
|
+
// Remote routing — not yet implemented
|
|
31
|
+
log.warn({ targetInstanceId }, "remote routing not yet implemented");
|
|
32
|
+
return { delivered: false, reason: "remote_not_implemented" };
|
|
27
33
|
}
|
|
28
34
|
broadcast(message, excludeInstanceId) {
|
|
29
35
|
for (const [instanceId] of this.routes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-router.js","sourceRoot":"","sources":["../src/message-router.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"message-router.js","sourceRoot":"","sources":["../src/message-router.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;AAiCrD,uEAAuE;AAEvE;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAGT;IAFZ,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAElD,YAAoB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAG,CAAC;IAEtD,IAAI,CAAC,gBAAwB,EAAE,OAAqB;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAE,gBAAgB,CAAC,CAAC;YACjD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAClD,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;gBAClD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;gBACjE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC7B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;gBAC1D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;YACtD,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,GAAG,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAE,oCAAoC,CAAC,CAAC;QACrE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;IAChE,CAAC;IAED,SAAS,CAAC,OAAqB,EAAE,iBAA0B;QACzD,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,UAAU,KAAK,iBAAiB,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,UAAkB,EAAE,QAAuB;QAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,UAAkB;QAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,UAAkB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;CACF;AAED,uEAAuE;AAEvE,SAAS,sBAAsB,CAAC,OAAqB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IACnC,IAAI,OAAO,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
package/dist/persistence.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export interface SwarmSnapshot {
|
|
|
18
18
|
export declare function saveSwarmSnapshot(swarm: SwarmInstance): void;
|
|
19
19
|
export declare function loadSwarmSnapshot(swarmId: string): SwarmSnapshot | null;
|
|
20
20
|
export declare function deleteSwarmSnapshot(swarmId: string): void;
|
|
21
|
+
export declare function readMessageLog(swarmId: string): object[];
|
|
21
22
|
export declare function appendMessageLog(swarmId: string, entry: object): void;
|
|
22
23
|
export declare function listRecoverableSwarmIds(): string[];
|
|
23
24
|
//# sourceMappingURL=persistence.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAUzE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAoB5D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAQvE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIrE;AAED,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAMlD"}
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAUzE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAoB5D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAQvE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKzD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBxD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIrE;AAED,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAMlD"}
|
package/dist/persistence.js
CHANGED
|
@@ -40,9 +40,32 @@ export function loadSwarmSnapshot(swarmId) {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
export function deleteSwarmSnapshot(swarmId) {
|
|
43
|
-
const
|
|
44
|
-
if (existsSync(
|
|
45
|
-
rmSync(
|
|
43
|
+
const recoveryPath = join(getSwarmDir(swarmId), "recovery.json");
|
|
44
|
+
if (existsSync(recoveryPath)) {
|
|
45
|
+
rmSync(recoveryPath);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export function readMessageLog(swarmId) {
|
|
49
|
+
const filePath = join(getSwarmDir(swarmId), "messages.jsonl");
|
|
50
|
+
if (!existsSync(filePath))
|
|
51
|
+
return [];
|
|
52
|
+
try {
|
|
53
|
+
const content = readFileSync(filePath, "utf-8").trim();
|
|
54
|
+
if (!content)
|
|
55
|
+
return [];
|
|
56
|
+
const results = [];
|
|
57
|
+
for (const line of content.split("\n")) {
|
|
58
|
+
try {
|
|
59
|
+
results.push(JSON.parse(line));
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// skip malformed lines
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return results;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return [];
|
|
46
69
|
}
|
|
47
70
|
}
|
|
48
71
|
export function appendMessageLog(swarmId, entry) {
|
package/dist/persistence.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACd,MAAM,EACN,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAmBD,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACpD,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAkB;QAC9B,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClD,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC;QACH,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC;QAC1D,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;QACnB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC;IACF,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { SwarmSnapshot } from "./persistence.js";
|
|
2
|
+
export interface RoleEvaluation {
|
|
3
|
+
roleId: string;
|
|
4
|
+
qualityScore: number;
|
|
5
|
+
reworkCount: number;
|
|
6
|
+
}
|
|
7
|
+
export interface SkillEvolutionSuggestion {
|
|
8
|
+
skillName: string;
|
|
9
|
+
signal: string;
|
|
10
|
+
problem: string;
|
|
11
|
+
fix: string;
|
|
12
|
+
confidence: number;
|
|
13
|
+
evidence: string;
|
|
14
|
+
}
|
|
15
|
+
export interface RetrospectiveResult {
|
|
16
|
+
taskSummary: string;
|
|
17
|
+
roleEvaluations: RoleEvaluation[];
|
|
18
|
+
projectInsights: Array<{
|
|
19
|
+
content: string;
|
|
20
|
+
topic: string;
|
|
21
|
+
}>;
|
|
22
|
+
crossRolePatterns: string[];
|
|
23
|
+
skillEvolutions?: SkillEvolutionSuggestion[];
|
|
24
|
+
}
|
|
25
|
+
export declare const RETROSPECTIVE_PROMPT = "\u4F60\u662F\u4E00\u4E2A\u8702\u7FA4\u4EFB\u52A1\u56DE\u987E\u4E13\u5BB6\u3002\u8BF7\u5206\u6790\u4EE5\u4E0B\u8702\u7FA4\u4EFB\u52A1\u7684\u6267\u884C\u8FC7\u7A0B\uFF0C\u805A\u7126\u56E2\u961F\u534F\u4F5C\u5C42\u9762\u7684\u5206\u6790\u3002\n\n\u6CE8\u610F\uFF1A\u4E2A\u4EBA\u6280\u672F\u7ECF\u9A8C\u7531\u89D2\u8272\u5728\u8FD0\u884C\u65F6\u901A\u8FC7 MCP memory_store \u5DE5\u5177\u81EA\u884C\u4FDD\u5B58\uFF0C\u56DE\u987E\u4E0D\u9700\u8981\u63D0\u53D6\u4E2A\u4EBA\u7ECF\u9A8C\u3002\n\n## \u4EFB\u52A1\u63CF\u8FF0\n{taskDescription}\n\n## \u53C2\u4E0E\u89D2\u8272\n{roleList}\n\n## \u5BF9\u8BDD\u65E5\u5FD7\uFF08\u6309\u65F6\u95F4\u6392\u5E8F\uFF09\n{messages}\n\n## \u8981\u6C42\n\n\u8BF7\u8F93\u51FA JSON \u683C\u5F0F\u7684\u56DE\u987E\u7ED3\u679C\uFF0C\u805A\u7126\u56E2\u961F\u534F\u4F5C\u5206\u6790\uFF1A\n\n1. **\u89D2\u8272\u8BC4\u4F30**\uFF1A\u8BC4\u4F30\u6BCF\u4E2A\u89D2\u8272\u7684\u8868\u73B0\n - qualityScore (0-1)\uFF1A\u5DE5\u4F5C\u8D28\u91CF\uFF0C\u8003\u8651\u6B63\u786E\u6027\u3001\u5B8C\u6574\u6027\u3001\u6C9F\u901A\u6548\u7387\n - reworkCount\uFF1A\u88AB\u8981\u6C42\u8FD4\u5DE5\u7684\u6B21\u6570\n2. **\u9879\u76EE\u7CBE\u534E**\uFF1A\u63D0\u53D6\u5BF9\u9879\u76EE\u6574\u4F53\u6709\u4EF7\u503C\u7684\u67B6\u6784\u51B3\u7B56\u3001\u6280\u672F\u9009\u578B\u7B49\n3. **\u8DE8\u89D2\u8272\u534F\u4F5C\u6A21\u5F0F**\uFF1A\u8BC6\u522B\u89D2\u8272\u95F4\u534F\u4F5C\u7684\u6A21\u5F0F\u6216\u95EE\u9898\n - \u534F\u4F5C\u6A21\u5F0F\uFF08\u54EA\u4E9B\u89D2\u8272\u7EC4\u5408\u6548\u7387\u9AD8\uFF09\n - \u6C9F\u901A\u6548\u7387\uFF08\u4FE1\u606F\u4F20\u9012\u662F\u5426\u53CA\u65F6\u51C6\u786E\uFF09\n - \u89D2\u8272\u5206\u914D\u7B56\u7565\uFF08\u4EFB\u52A1\u5206\u914D\u662F\u5426\u5408\u7406\uFF09\n - \u5931\u8D25\u6559\u8BAD\uFF08\u534F\u4F5C\u5C42\u9762\u7684\u95EE\u9898\uFF09\n4. **Skill \u6539\u8FDB\u5206\u6790**\uFF1A\u56DE\u987E\u672C\u6B21\u8702\u7FA4\u4EFB\u52A1\u4E2D\u4F7F\u7528\u7684 Skill\uFF0C\u5206\u6790\u662F\u5426\u9700\u8981\u6539\u8FDB\n \u5BF9\u4E8E\u6BCF\u4E2A\u88AB\u4F7F\u7528\u7684 Skill\uFF0C\u68C0\u67E5\uFF1A\n 1. \u8BE5 Skill \u7684\u6307\u5F15\u5728\u672C\u6B21\u4EFB\u52A1\u4E2D\u662F\u5426\u5B8C\u5168\u9002\u7528\uFF1F\n 2. \u662F\u5426\u6709\u89D2\u8272\u56E0\u4E3A Skill \u6307\u5F15\u4E0D\u8DB3/\u6709\u8BEF\u800C\u8D70\u4E86\u5F2F\u8DEF\uFF1F\n 3. \u662F\u5426\u6709\u89D2\u8272\u53D1\u73B0\u4E86 Skill \u672A\u8986\u76D6\u7684\u6700\u4F73\u5B9E\u8DF5\uFF1F\n \u53EA\u5728\u6709\u786E\u51FF\u8BC1\u636E\u65F6\u624D\u8F93\u51FA skillEvolutions\uFF0C\u4E0D\u8981\u51ED\u7A7A\u4EA7\u751F\u3002\n\n\u8F93\u51FA\u7EAF JSON\uFF08\u4E0D\u8981 markdown \u4EE3\u7801\u5757\uFF09\uFF1A\n{\n \"taskSummary\": \"...\",\n \"roleEvaluations\": [{\n \"roleId\": \"role-developer\",\n \"qualityScore\": 0.85,\n \"reworkCount\": 1\n }],\n \"projectInsights\": [{ \"content\": \"...\", \"topic\": \"...\" }],\n \"crossRolePatterns\": [\"...\"],\n \"skillEvolutions\": [{\n \"skillName\": \"skill-name\",\n \"signal\": \"skill-error-fixed\",\n \"problem\": \"\u5177\u4F53\u95EE\u9898\u63CF\u8FF0\",\n \"fix\": \"\u5EFA\u8BAE\u7684\u4FEE\u6B63\",\n \"confidence\": 0.8,\n \"evidence\": \"\u6765\u81EA\u54EA\u4E2A\u89D2\u8272\u7684\u54EA\u6B21\u4EA4\u4E92\"\n }]\n}";
|
|
26
|
+
/**
|
|
27
|
+
* Parse JSON from a string, stripping optional markdown code fencing.
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseRetrospectiveJSON(raw: string): RetrospectiveResult;
|
|
30
|
+
/**
|
|
31
|
+
* Fallback: produce basic retrospective when claude CLI is unavailable.
|
|
32
|
+
* Only extracts role stats and simple cross-role patterns — no personal experiences.
|
|
33
|
+
*/
|
|
34
|
+
export declare function fallbackExtraction(messages: object[], snapshot: SwarmSnapshot): RetrospectiveResult;
|
|
35
|
+
export declare function runRetrospective(options: {
|
|
36
|
+
swarmId: string;
|
|
37
|
+
messages: object[];
|
|
38
|
+
snapshot: SwarmSnapshot;
|
|
39
|
+
dbPath?: string;
|
|
40
|
+
swarmStatus?: "completed" | "failed";
|
|
41
|
+
}): Promise<RetrospectiveResult | null>;
|
|
42
|
+
//# sourceMappingURL=retrospective.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrospective.d.ts","sourceRoot":"","sources":["../src/retrospective.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOtD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,eAAe,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC9C;AAID,eAAO,MAAM,oBAAoB,+rGAmD/B,CAAC;AAIH;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAiBvE;AAuDD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,EAAE,aAAa,GACtB,mBAAmB,CAoCrB;AA+HD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CACtC,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAuEtC"}
|