@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.
Files changed (116) hide show
  1. package/dist/__tests__/action-parser.test.d.ts +2 -0
  2. package/dist/__tests__/action-parser.test.d.ts.map +1 -0
  3. package/dist/__tests__/action-parser.test.js +91 -0
  4. package/dist/__tests__/action-parser.test.js.map +1 -0
  5. package/dist/__tests__/migration-roles.test.d.ts +2 -0
  6. package/dist/__tests__/migration-roles.test.d.ts.map +1 -0
  7. package/dist/__tests__/migration-roles.test.js +213 -0
  8. package/dist/__tests__/migration-roles.test.js.map +1 -0
  9. package/dist/__tests__/retrospective.test.d.ts +2 -0
  10. package/dist/__tests__/retrospective.test.d.ts.map +1 -0
  11. package/dist/__tests__/retrospective.test.js +467 -0
  12. package/dist/__tests__/retrospective.test.js.map +1 -0
  13. package/dist/__tests__/role-loader.test.d.ts +2 -0
  14. package/dist/__tests__/role-loader.test.d.ts.map +1 -0
  15. package/dist/__tests__/role-loader.test.js +217 -0
  16. package/dist/__tests__/role-loader.test.js.map +1 -0
  17. package/dist/__tests__/swarm-coordinator-init.test.d.ts +2 -0
  18. package/dist/__tests__/swarm-coordinator-init.test.d.ts.map +1 -0
  19. package/dist/__tests__/swarm-coordinator-init.test.js +194 -0
  20. package/dist/__tests__/swarm-coordinator-init.test.js.map +1 -0
  21. package/dist/__tests__/swarm-coordinator-roleId.test.d.ts +2 -0
  22. package/dist/__tests__/swarm-coordinator-roleId.test.d.ts.map +1 -0
  23. package/dist/__tests__/swarm-coordinator-roleId.test.js +147 -0
  24. package/dist/__tests__/swarm-coordinator-roleId.test.js.map +1 -0
  25. package/dist/__tests__/template-loader.test.d.ts +2 -0
  26. package/dist/__tests__/template-loader.test.d.ts.map +1 -0
  27. package/dist/__tests__/template-loader.test.js +103 -0
  28. package/dist/__tests__/template-loader.test.js.map +1 -0
  29. package/dist/action-parser.d.ts.map +1 -1
  30. package/dist/action-parser.js +96 -6
  31. package/dist/action-parser.js.map +1 -1
  32. package/dist/index.d.ts +7 -3
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +4 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/message-router.d.ts +6 -2
  37. package/dist/message-router.d.ts.map +1 -1
  38. package/dist/message-router.js +13 -7
  39. package/dist/message-router.js.map +1 -1
  40. package/dist/persistence.d.ts +1 -0
  41. package/dist/persistence.d.ts.map +1 -1
  42. package/dist/persistence.js +26 -3
  43. package/dist/persistence.js.map +1 -1
  44. package/dist/retrospective.d.ts +42 -0
  45. package/dist/retrospective.d.ts.map +1 -0
  46. package/dist/retrospective.js +307 -0
  47. package/dist/retrospective.js.map +1 -0
  48. package/dist/roles/role-loader.d.ts +12 -1
  49. package/dist/roles/role-loader.d.ts.map +1 -1
  50. package/dist/roles/role-loader.js +160 -7
  51. package/dist/roles/role-loader.js.map +1 -1
  52. package/dist/roles/types.d.ts +26 -2
  53. package/dist/roles/types.d.ts.map +1 -1
  54. package/dist/swarm-coordinator.d.ts +10 -2
  55. package/dist/swarm-coordinator.d.ts.map +1 -1
  56. package/dist/swarm-coordinator.js +267 -38
  57. package/dist/swarm-coordinator.js.map +1 -1
  58. package/dist/templates/template-loader.d.ts +20 -0
  59. package/dist/templates/template-loader.d.ts.map +1 -0
  60. package/dist/templates/template-loader.js +117 -0
  61. package/dist/templates/template-loader.js.map +1 -0
  62. package/dist/templates/types.d.ts +25 -0
  63. package/dist/templates/types.d.ts.map +1 -0
  64. package/dist/templates/types.js +2 -0
  65. package/dist/templates/types.js.map +1 -0
  66. package/dist/types.d.ts +13 -2
  67. package/dist/types.d.ts.map +1 -1
  68. package/package.json +17 -11
  69. package/roles/analyst-livermore.md +112 -0
  70. package/roles/designer-rams.md +266 -0
  71. package/roles/dev-torvalds.md +214 -0
  72. package/roles/developer.md +22 -1
  73. package/roles/director-jia.md +286 -0
  74. package/roles/editor-boyong.md +148 -0
  75. package/roles/macro-dalio.md +115 -0
  76. package/roles/planner-maoni.md +306 -0
  77. package/roles/pm-jobs.md +326 -0
  78. package/roles/preset-analyst-simons.md +55 -0
  79. package/roles/preset-architect-knuth.md +55 -0
  80. package/roles/preset-designer-norman.md +55 -0
  81. package/roles/preset-designer.md +55 -0
  82. package/roles/preset-dev-carmack.md +55 -0
  83. package/roles/preset-dev-gosling.md +55 -0
  84. package/roles/preset-developer.md +68 -0
  85. package/roles/preset-manager-grove.md +55 -0
  86. package/roles/preset-manager-musk.md +55 -0
  87. package/roles/preset-pm.md +105 -0
  88. package/roles/preset-researcher-feynman.md +55 -0
  89. package/roles/preset-reviewer.md +62 -0
  90. package/roles/preset-strategist-buffett.md +55 -0
  91. package/roles/preset-strategist-munger.md +55 -0
  92. package/roles/preset-strategist-sunzi.md +55 -0
  93. package/roles/preset-tester-beck.md +56 -0
  94. package/roles/preset-tester.md +63 -0
  95. package/roles/preset-writer-orwell.md +55 -0
  96. package/roles/preset-writer.md +55 -0
  97. package/roles/quant-simons.md +136 -0
  98. package/roles/queen.md +27 -1
  99. package/roles/reviewer-martin.md +200 -0
  100. package/roles/reviewer.md +18 -1
  101. package/roles/rhythm-tangsan.md +135 -0
  102. package/roles/risk-taleb.md +112 -0
  103. package/roles/script-shitiesheng.md +129 -0
  104. package/roles/storyboard-xuke.md +138 -0
  105. package/roles/strategist-soros.md +257 -0
  106. package/roles/tester-beck.md +232 -0
  107. package/roles/tester.md +19 -1
  108. package/roles/trader-jones.md +124 -0
  109. package/roles/vfx-guchangwei.md +129 -0
  110. package/roles/writer-zhouzi.md +144 -0
  111. package/templates/dev-team-pro.md +21 -0
  112. package/templates/dev-team.md +19 -0
  113. package/templates/minimal.md +14 -0
  114. package/templates/trading-team.md +22 -0
  115. package/templates/video-team.md +18 -0
  116. 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;AAE9C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC/C,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAqBA;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAqC9D"}
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"}
@@ -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 swarmBlockRegex = /```swarm\s*\n([\s\S]*?)```/g;
8
- let match;
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
- const cleanText = text.replace(swarmBlockRegex, "").trim();
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":"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"}
1
+ {"version":3,"file":"action-parser.js","sourceRoot":"","sources":["../src/action-parser.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,IAAY;IAC1C,MAAM,OAAO,GAAsD,EAAE,CAAC;IACtE,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACzD,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,MAAM;QAE5B,kCAAkC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,MAAM;QAExB,2CAA2C;QAC3C,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBAAC,UAAU,GAAG,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;YAC1C,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;gBAAE,MAAM,CAAC,0CAA0C;QAChH,CAAC;QAED,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QAED,sCAAsC;QACtC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBAAC,CAAC,EAAE,CAAC;oBAAC,SAAS;gBAAC,CAAC,CAAC,oBAAoB;gBACxD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;oBAAC,QAAQ,GAAG,KAAK,CAAC;gBAAC,CAAC;gBACrC,SAAS;YACX,CAAC;YACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBAAC,QAAQ,GAAG,IAAI,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC9C,IAAI,EAAE,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;YACxB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,KAAK,EAAE,CAAC;gBACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACnB,uCAAuC;YACvC,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,0EAA0E;QAC1E,IAAI,QAAQ,GAAG,OAAO,CAAC;QACvB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC5B,yEAAyE;YACzE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YACtD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,QAAQ,GAAG,gBAAgB,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;YACxC,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,QAAQ;SACd,CAAC,CAAC;QAEH,UAAU,GAAG,QAAQ,CAAC;IACxB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAI5C,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,MAAqB,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,mDAAmD;IACnD,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAE7B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,gCAAgC;IAChC,MAAM,cAAc,GAAG,4BAA4B,CAAC;IACpD,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IAED,qFAAqF;IACrF,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,uCAAuC;QACvC,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,kDAAkD;YAClD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,MAAM,GAAG,QAAQ,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;oBAAE,KAAK,EAAE,CAAC;qBACxB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACzB,KAAK,EAAE,CAAC;oBACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBAChB,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;wBACf,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC1D,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3F,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
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
@@ -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;AACzF,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,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,MAAM,kBAAkB,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;AACzF,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,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"}
@@ -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): void;
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): void;
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,IAAI,CAAC;IAE5D,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,IAAI;IAgB3D,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"}
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"}
@@ -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
- const formatted = formatMessageForClaude(message);
21
- this.sessionAdapter.sendInput(endpoint.roleSessionId, formatted);
22
- }
23
- else {
24
- // Remote routing — not yet implemented
25
- log.warn({ targetInstanceId }, "remote routing not yet implemented");
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;AA0BrD,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;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,GAAG,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAE,oCAAoC,CAAC,CAAC;QACvE,CAAC;IACH,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"}
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"}
@@ -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"}
@@ -40,9 +40,32 @@ export function loadSwarmSnapshot(swarmId) {
40
40
  }
41
41
  }
42
42
  export function deleteSwarmSnapshot(swarmId) {
43
- const dir = getSwarmDir(swarmId);
44
- if (existsSync(dir)) {
45
- rmSync(dir, { recursive: true, force: true });
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) {
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
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"}