@synergenius/flow-weaver-pack-weaver 0.9.62 → 0.9.78

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 (162) hide show
  1. package/dist/ai-chat-provider.d.ts +12 -0
  2. package/dist/ai-chat-provider.d.ts.map +1 -1
  3. package/dist/ai-chat-provider.js +173 -19
  4. package/dist/ai-chat-provider.js.map +1 -1
  5. package/dist/bot/agent-loop.d.ts +20 -0
  6. package/dist/bot/agent-loop.d.ts.map +1 -0
  7. package/dist/bot/agent-loop.js +331 -0
  8. package/dist/bot/agent-loop.js.map +1 -0
  9. package/dist/bot/ai-router.d.ts +19 -0
  10. package/dist/bot/ai-router.d.ts.map +1 -0
  11. package/dist/bot/ai-router.js +104 -0
  12. package/dist/bot/ai-router.js.map +1 -0
  13. package/dist/bot/bot-registry.js +2 -2
  14. package/dist/bot/bot-registry.js.map +1 -1
  15. package/dist/bot/conversation-store.d.ts +1 -0
  16. package/dist/bot/conversation-store.d.ts.map +1 -1
  17. package/dist/bot/conversation-store.js.map +1 -1
  18. package/dist/bot/improve-loop.js.map +1 -1
  19. package/dist/bot/instance-manager.d.ts +31 -0
  20. package/dist/bot/instance-manager.d.ts.map +1 -0
  21. package/dist/bot/instance-manager.js +115 -0
  22. package/dist/bot/instance-manager.js.map +1 -0
  23. package/dist/bot/orchestrator.d.ts +36 -0
  24. package/dist/bot/orchestrator.d.ts.map +1 -0
  25. package/dist/bot/orchestrator.js +176 -0
  26. package/dist/bot/orchestrator.js.map +1 -0
  27. package/dist/bot/profile-store.d.ts +36 -0
  28. package/dist/bot/profile-store.d.ts.map +1 -0
  29. package/dist/bot/profile-store.js +208 -0
  30. package/dist/bot/profile-store.js.map +1 -0
  31. package/dist/bot/profile-types.d.ts +126 -0
  32. package/dist/bot/profile-types.d.ts.map +1 -0
  33. package/dist/bot/profile-types.js +7 -0
  34. package/dist/bot/profile-types.js.map +1 -0
  35. package/dist/bot/session-state.d.ts +25 -0
  36. package/dist/bot/session-state.d.ts.map +1 -0
  37. package/dist/bot/session-state.js +110 -0
  38. package/dist/bot/session-state.js.map +1 -0
  39. package/dist/bot/swarm-controller.d.ts +37 -21
  40. package/dist/bot/swarm-controller.d.ts.map +1 -1
  41. package/dist/bot/swarm-controller.js +344 -163
  42. package/dist/bot/swarm-controller.js.map +1 -1
  43. package/dist/bot/task-prompt-builder.d.ts +2 -1
  44. package/dist/bot/task-prompt-builder.d.ts.map +1 -1
  45. package/dist/bot/task-prompt-builder.js +33 -10
  46. package/dist/bot/task-prompt-builder.js.map +1 -1
  47. package/dist/bot/task-queue.d.ts +46 -0
  48. package/dist/bot/task-queue.d.ts.map +1 -0
  49. package/dist/bot/task-queue.js +237 -0
  50. package/dist/bot/task-queue.js.map +1 -0
  51. package/dist/bot/task-store.d.ts +1 -6
  52. package/dist/bot/task-store.d.ts.map +1 -1
  53. package/dist/bot/task-store.js +27 -78
  54. package/dist/bot/task-store.js.map +1 -1
  55. package/dist/bot/task-types.d.ts +8 -4
  56. package/dist/bot/task-types.d.ts.map +1 -1
  57. package/dist/cli-handlers.d.ts.map +1 -1
  58. package/dist/cli-handlers.js +2 -3
  59. package/dist/cli-handlers.js.map +1 -1
  60. package/dist/cli.d.ts +3 -0
  61. package/dist/cli.d.ts.map +1 -0
  62. package/dist/cli.js +749 -0
  63. package/dist/cli.js.map +1 -0
  64. package/dist/docs/docs/weaver-bot-usage.md +35 -18
  65. package/dist/docs/docs/weaver-config.md +20 -0
  66. package/dist/docs/docs/weaver-task-queue.md +31 -19
  67. package/dist/docs/weaver-config.md +15 -9
  68. package/dist/mcp-tools.d.ts +17 -0
  69. package/dist/mcp-tools.d.ts.map +1 -1
  70. package/dist/mcp-tools.js +98 -232
  71. package/dist/mcp-tools.js.map +1 -1
  72. package/dist/node-types/orchestrator-dispatch.d.ts +17 -0
  73. package/dist/node-types/orchestrator-dispatch.d.ts.map +1 -0
  74. package/dist/node-types/orchestrator-dispatch.js +63 -0
  75. package/dist/node-types/orchestrator-dispatch.js.map +1 -0
  76. package/dist/node-types/orchestrator-load-state.d.ts +16 -0
  77. package/dist/node-types/orchestrator-load-state.d.ts.map +1 -0
  78. package/dist/node-types/orchestrator-load-state.js +60 -0
  79. package/dist/node-types/orchestrator-load-state.js.map +1 -0
  80. package/dist/node-types/orchestrator-route.d.ts +16 -0
  81. package/dist/node-types/orchestrator-route.d.ts.map +1 -0
  82. package/dist/node-types/orchestrator-route.js +28 -0
  83. package/dist/node-types/orchestrator-route.js.map +1 -0
  84. package/dist/node-types/receive-task.d.ts +2 -3
  85. package/dist/node-types/receive-task.d.ts.map +1 -1
  86. package/dist/node-types/receive-task.js +3 -28
  87. package/dist/node-types/receive-task.js.map +1 -1
  88. package/dist/templates/weaver-template.d.ts +11 -0
  89. package/dist/templates/weaver-template.d.ts.map +1 -0
  90. package/dist/templates/weaver-template.js +53 -0
  91. package/dist/templates/weaver-template.js.map +1 -0
  92. package/dist/ui/bot-constants.d.ts +14 -0
  93. package/dist/ui/bot-constants.d.ts.map +1 -0
  94. package/dist/ui/bot-constants.js +189 -0
  95. package/dist/ui/bot-constants.js.map +1 -0
  96. package/dist/ui/bot-panel.js +51 -90
  97. package/dist/ui/bot-slot-card.js +87 -122
  98. package/dist/ui/budget-bar.js +5 -3
  99. package/dist/ui/chat-task-result.js +4 -7
  100. package/dist/ui/decision-log.js +136 -0
  101. package/dist/ui/profile-card.js +158 -0
  102. package/dist/ui/profile-editor.js +597 -0
  103. package/dist/ui/swarm-controls.js +36 -27
  104. package/dist/ui/swarm-dashboard.js +2034 -736
  105. package/dist/ui/task-create-form.js +39 -116
  106. package/dist/ui/task-detail-view.js +490 -239
  107. package/dist/ui/task-pool-list.js +69 -94
  108. package/dist/workflows/orchestrator.d.ts +21 -0
  109. package/dist/workflows/orchestrator.d.ts.map +1 -0
  110. package/dist/workflows/orchestrator.js +281 -0
  111. package/dist/workflows/orchestrator.js.map +1 -0
  112. package/dist/workflows/weaver-bot-session.d.ts +65 -0
  113. package/dist/workflows/weaver-bot-session.d.ts.map +1 -0
  114. package/dist/workflows/weaver-bot-session.js +68 -0
  115. package/dist/workflows/weaver-bot-session.js.map +1 -0
  116. package/dist/workflows/weaver.d.ts +24 -0
  117. package/dist/workflows/weaver.d.ts.map +1 -0
  118. package/dist/workflows/weaver.js +28 -0
  119. package/dist/workflows/weaver.js.map +1 -0
  120. package/flowweaver.manifest.json +253 -66
  121. package/package.json +1 -1
  122. package/src/ai-chat-provider.ts +184 -18
  123. package/src/bot/ai-router.ts +132 -0
  124. package/src/bot/bot-registry.ts +2 -2
  125. package/src/bot/conversation-store.ts +2 -1
  126. package/src/bot/improve-loop.ts +6 -6
  127. package/src/bot/instance-manager.ts +128 -0
  128. package/src/bot/orchestrator.ts +244 -0
  129. package/src/bot/profile-store.ts +225 -0
  130. package/src/bot/profile-types.ts +141 -0
  131. package/src/bot/swarm-controller.ts +385 -186
  132. package/src/bot/task-prompt-builder.ts +37 -6
  133. package/src/bot/task-store.ts +28 -89
  134. package/src/bot/task-types.ts +10 -4
  135. package/src/cli-handlers.ts +2 -3
  136. package/src/docs/weaver-bot-usage.md +35 -18
  137. package/src/docs/weaver-config.md +20 -0
  138. package/src/docs/weaver-task-queue.md +31 -19
  139. package/src/mcp-tools.ts +129 -320
  140. package/src/node-types/orchestrator-dispatch.ts +71 -0
  141. package/src/node-types/orchestrator-load-state.ts +66 -0
  142. package/src/node-types/orchestrator-route.ts +33 -0
  143. package/src/node-types/receive-task.ts +3 -26
  144. package/src/ui/bot-constants.ts +192 -0
  145. package/src/ui/bot-panel.tsx +55 -79
  146. package/src/ui/bot-slot-card.tsx +69 -117
  147. package/src/ui/budget-bar.tsx +5 -3
  148. package/src/ui/chat-task-result.tsx +6 -9
  149. package/src/ui/decision-log.tsx +148 -0
  150. package/src/ui/profile-card.tsx +157 -0
  151. package/src/ui/profile-editor.tsx +384 -0
  152. package/src/ui/swarm-controls.tsx +35 -31
  153. package/src/ui/swarm-dashboard.tsx +409 -80
  154. package/src/ui/task-create-form.tsx +29 -119
  155. package/src/ui/task-detail-view.tsx +461 -215
  156. package/src/ui/task-pool-list.tsx +74 -95
  157. package/src/workflows/orchestrator.ts +302 -0
  158. package/dist/docs/weaver-bot-usage.md +0 -34
  159. package/dist/docs/weaver-genesis.md +0 -32
  160. package/dist/docs/weaver-task-queue.md +0 -34
  161. package/src/bot/error-guide.ts +0 -4
  162. package/src/bot/retry-utils.ts +0 -4
@@ -0,0 +1,208 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import * as crypto from 'node:crypto';
4
+ // ---------------------------------------------------------------------------
5
+ // Default profiles — enterprise-ready starting kit
6
+ // ---------------------------------------------------------------------------
7
+ const DEFAULT_PROFILES = {
8
+ 'weaver-bot': [
9
+ {
10
+ name: 'Developer',
11
+ description: 'Builds features, fixes bugs, writes tests. The everyday workhorse.',
12
+ icon: 'code',
13
+ color: 'color-node-blue-icon',
14
+ capabilities: [
15
+ { name: 'feature-development', description: 'Build new features end-to-end from specs or tickets' },
16
+ { name: 'bug-fixing', description: 'Diagnose and fix bugs from error reports or failing tests' },
17
+ { name: 'testing', description: 'Write and maintain unit, integration, and e2e tests' },
18
+ { name: 'refactoring', description: 'Improve code structure without changing behavior' },
19
+ ],
20
+ preferences: { costStrategy: 'balanced', requireApproval: false },
21
+ },
22
+ {
23
+ name: 'Reviewer',
24
+ description: 'Reviews code, validates architecture, writes documentation. Quality gate.',
25
+ icon: 'verified',
26
+ color: 'color-node-green-icon',
27
+ capabilities: [
28
+ { name: 'code-review', description: 'Review code for correctness, security, and maintainability' },
29
+ { name: 'architecture-review', description: 'Validate system design and architectural decisions' },
30
+ { name: 'documentation', description: 'Write technical docs, ADRs, and changelogs' },
31
+ ],
32
+ preferences: { costStrategy: 'performance', requireApproval: true, instructions: 'Be thorough. Prioritize correctness and security over speed.' },
33
+ },
34
+ {
35
+ name: 'Ops',
36
+ description: 'Handles deployments, CI/CD, monitoring, and infrastructure.',
37
+ icon: 'rocketLaunch',
38
+ color: 'color-node-orange-icon',
39
+ capabilities: [
40
+ { name: 'deployment', description: 'Deploy services, manage releases, run migrations' },
41
+ { name: 'ci-cd', description: 'Configure and maintain CI/CD pipelines' },
42
+ { name: 'monitoring', description: 'Set up alerts, dashboards, and health checks' },
43
+ ],
44
+ preferences: { costStrategy: 'balanced', requireApproval: true, instructions: 'Production changes require care. Verify before applying.' },
45
+ },
46
+ ],
47
+ 'weaver-genesis': [
48
+ {
49
+ name: 'Evolution',
50
+ description: 'Self-improvement cycles. Analyzes and evolves workflows autonomously.',
51
+ icon: 'autoAwesome',
52
+ color: 'color-node-cyan-icon',
53
+ capabilities: [
54
+ { name: 'workflow-evolution', description: 'Analyze and improve existing Flow Weaver workflows' },
55
+ { name: 'self-improvement', description: 'Identify and fix issues in bot behavior and prompts' },
56
+ ],
57
+ preferences: { costStrategy: 'performance', requireApproval: true, instructions: 'Evolution changes affect the system itself. Always require approval.' },
58
+ },
59
+ ],
60
+ };
61
+ // ---------------------------------------------------------------------------
62
+ // ProfileStore
63
+ // ---------------------------------------------------------------------------
64
+ export class ProfileStore {
65
+ projectDir;
66
+ filePath;
67
+ profiles;
68
+ constructor(projectDir) {
69
+ this.projectDir = projectDir;
70
+ const dir = path.join(projectDir, '.weaver');
71
+ if (!fs.existsSync(dir))
72
+ fs.mkdirSync(dir, { recursive: true });
73
+ this.filePath = path.join(dir, 'profiles.json');
74
+ this.profiles = this._loadFromDisk();
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // CRUD
78
+ // ---------------------------------------------------------------------------
79
+ /**
80
+ * Create a new profile. Note: `botId` is NOT validated against BotRegistry
81
+ * here to avoid a circular dependency. Validation happens at dispatch time
82
+ * in SwarmController when building the profileBotMap.
83
+ */
84
+ create(input) {
85
+ const now = new Date().toISOString();
86
+ let id = this._slugify(input.name);
87
+ if (this.profiles.some(p => p.id === id)) {
88
+ id = `${id}-${crypto.randomBytes(3).toString('hex')}`;
89
+ }
90
+ const profile = {
91
+ id,
92
+ name: input.name,
93
+ description: input.description ?? '',
94
+ icon: input.icon ?? 'smartToy',
95
+ color: input.color ?? 'color-node-blue-icon',
96
+ botId: input.botId,
97
+ capabilities: input.capabilities ?? [],
98
+ preferences: {
99
+ costStrategy: input.preferences?.costStrategy ?? 'balanced',
100
+ maxCostPerRun: input.preferences?.maxCostPerRun,
101
+ maxCostPerTask: input.preferences?.maxCostPerTask,
102
+ requireApproval: input.preferences?.requireApproval ?? false,
103
+ instructions: input.preferences?.instructions,
104
+ },
105
+ minInstances: input.minInstances ?? 0,
106
+ maxInstances: input.maxInstances ?? 1,
107
+ currentInstances: 0,
108
+ createdAt: now,
109
+ updatedAt: now,
110
+ };
111
+ this.profiles.push(profile);
112
+ this._save();
113
+ return profile;
114
+ }
115
+ list() {
116
+ return [...this.profiles];
117
+ }
118
+ get(id) {
119
+ return this.profiles.find(p => p.id === id) ?? null;
120
+ }
121
+ update(id, patch) {
122
+ const idx = this.profiles.findIndex(p => p.id === id);
123
+ if (idx === -1)
124
+ throw new Error(`Profile not found: ${id}`);
125
+ // Prevent overriding immutable fields
126
+ const { id: _id, createdAt: _createdAt, ...safePatch } = patch;
127
+ const profile = this.profiles[idx];
128
+ Object.assign(profile, safePatch, { updatedAt: new Date().toISOString() });
129
+ this.profiles[idx] = profile;
130
+ this._save();
131
+ return profile;
132
+ }
133
+ delete(id) {
134
+ const idx = this.profiles.findIndex(p => p.id === id);
135
+ if (idx === -1)
136
+ return false;
137
+ this.profiles.splice(idx, 1);
138
+ this._save();
139
+ return true;
140
+ }
141
+ // ---------------------------------------------------------------------------
142
+ // Capability search
143
+ // ---------------------------------------------------------------------------
144
+ findByCapabilities(required) {
145
+ return this.profiles.filter(p => required.every(name => p.capabilities.some(c => c.name === name)));
146
+ }
147
+ // ---------------------------------------------------------------------------
148
+ // Default profiles
149
+ // ---------------------------------------------------------------------------
150
+ /**
151
+ * Create enterprise-ready default profiles for registered bots.
152
+ * Only creates profiles if none exist for a given botId.
153
+ *
154
+ * For weaver-bot: Developer, Reviewer, Ops
155
+ * For genesis: Evolution
156
+ * For unknown bots: one generic profile
157
+ */
158
+ ensureDefaultProfiles(bots) {
159
+ for (const bot of bots) {
160
+ if (this.profiles.some(p => p.botId === bot.id))
161
+ continue;
162
+ const defaults = DEFAULT_PROFILES[bot.id];
163
+ if (defaults) {
164
+ for (const def of defaults) {
165
+ if (this.profiles.some(p => p.id === def.name.toLowerCase().replace(/[^a-z0-9]+/g, '-')))
166
+ continue;
167
+ this.create({ ...def, botId: bot.id });
168
+ }
169
+ }
170
+ else {
171
+ this.create({
172
+ name: bot.name,
173
+ botId: bot.id,
174
+ icon: bot.icon,
175
+ color: bot.color,
176
+ capabilities: [{ name: 'general', description: 'General-purpose task execution' }],
177
+ });
178
+ }
179
+ }
180
+ }
181
+ // ---------------------------------------------------------------------------
182
+ // File I/O — atomic write via temp + rename
183
+ // ---------------------------------------------------------------------------
184
+ _loadFromDisk() {
185
+ if (!fs.existsSync(this.filePath))
186
+ return [];
187
+ try {
188
+ const raw = fs.readFileSync(this.filePath, 'utf-8');
189
+ const data = JSON.parse(raw);
190
+ return Array.isArray(data) ? data : [];
191
+ }
192
+ catch {
193
+ return [];
194
+ }
195
+ }
196
+ _save() {
197
+ const tmpPath = this.filePath + '.tmp';
198
+ fs.writeFileSync(tmpPath, JSON.stringify(this.profiles, null, 2), 'utf-8');
199
+ fs.renameSync(tmpPath, this.filePath);
200
+ }
201
+ _slugify(name) {
202
+ return name
203
+ .toLowerCase()
204
+ .replace(/[^a-z0-9]+/g, '-')
205
+ .replace(/^-|-$/g, '');
206
+ }
207
+ }
208
+ //# sourceMappingURL=profile-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-store.js","sourceRoot":"","sources":["../../src/bot/profile-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Bot profile and orchestrator types for the Weaver Swarm.
3
+ * Profiles wrap BotRegistry entries with scaling, budget, and routing config.
4
+ * The orchestrator uses these types to route tasks to the best available bot.
5
+ */
6
+ /** A free-form capability that a bot profile can declare. */
7
+ export interface Capability {
8
+ name: string;
9
+ description: string;
10
+ }
11
+ /** Intent-based cost strategy for execution preferences. */
12
+ export type CostStrategy = 'frugal' | 'balanced' | 'performance';
13
+ /** Execution preferences for a bot profile. */
14
+ export interface ProfilePreferences {
15
+ costStrategy: CostStrategy;
16
+ maxCostPerRun?: number;
17
+ maxCostPerTask?: number;
18
+ requireApproval: boolean;
19
+ instructions?: string;
20
+ }
21
+ /** A bot profile wrapping a BotRegistry entry with scaling and budget config. */
22
+ export interface BotProfile {
23
+ id: string;
24
+ name: string;
25
+ description: string;
26
+ icon: string;
27
+ color: string;
28
+ /** References an entry in BotRegistry. */
29
+ botId: string;
30
+ /** Declared capabilities for routing. */
31
+ capabilities: Capability[];
32
+ /** Execution preferences (cost strategy, approval, instructions). */
33
+ preferences: ProfilePreferences;
34
+ /** Minimum running instances (0 = scale to zero). */
35
+ minInstances: number;
36
+ maxInstances: number;
37
+ currentInstances: number;
38
+ createdAt: string;
39
+ updatedAt: string;
40
+ }
41
+ /** A running worker instance of a bot profile. */
42
+ export interface BotInstance {
43
+ /** Format: `${profileId}-${index}` */
44
+ instanceId: string;
45
+ profileId: string;
46
+ index: number;
47
+ status: 'idle' | 'executing' | 'paused' | 'stopped';
48
+ currentTaskId?: string;
49
+ currentRunId?: string;
50
+ startedAt?: string;
51
+ tokensUsed: number;
52
+ cost: number;
53
+ tasksCompleted: number;
54
+ tasksFailed: number;
55
+ }
56
+ /** A recorded routing decision made by the orchestrator. */
57
+ export interface OrchestratorDecision {
58
+ /** Sequential decision ID. */
59
+ id: number;
60
+ timestamp: number;
61
+ taskId: string;
62
+ taskTitle: string;
63
+ assignedProfileId: string;
64
+ assignedInstanceId: string;
65
+ reason: string;
66
+ method: 'exact-match' | 'single-eligible' | 'ai-routed' | 'round-robin' | 'manual';
67
+ candidateProfiles: string[];
68
+ confidence?: number;
69
+ }
70
+ /** Input to the orchestrator routing logic. */
71
+ export interface OrchestratorInput {
72
+ pendingTasks: Array<{
73
+ id: string;
74
+ title: string;
75
+ description: string;
76
+ priority: number;
77
+ complexity: 'trivial' | 'simple' | 'moderate' | 'complex';
78
+ assignedProfile?: string;
79
+ context: {
80
+ runSummaries: Array<{
81
+ outcome: string;
82
+ botId: string;
83
+ }>;
84
+ };
85
+ }>;
86
+ profiles: BotProfile[];
87
+ instances: BotInstance[];
88
+ budgetRemaining: {
89
+ tokens: number;
90
+ cost: number;
91
+ };
92
+ }
93
+ /** Output from the orchestrator routing logic. */
94
+ export interface OrchestratorOutput {
95
+ assignments: Array<{
96
+ taskId: string;
97
+ profileId: string;
98
+ instanceId: string;
99
+ reason: string;
100
+ method: OrchestratorDecision['method'];
101
+ confidence?: number;
102
+ }>;
103
+ scaleActions: Array<{
104
+ profileId: string;
105
+ action: 'scale-up' | 'scale-down';
106
+ targetInstances: number;
107
+ reason: string;
108
+ }>;
109
+ skippedTasks: Array<{
110
+ taskId: string;
111
+ reason: string;
112
+ }>;
113
+ }
114
+ /** Input for creating a new bot profile. */
115
+ export interface CreateProfileInput {
116
+ name: string;
117
+ description?: string;
118
+ icon?: string;
119
+ color?: string;
120
+ botId: string;
121
+ capabilities?: Capability[];
122
+ preferences?: Partial<ProfilePreferences>;
123
+ minInstances?: number;
124
+ maxInstances?: number;
125
+ }
126
+ //# sourceMappingURL=profile-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-types.d.ts","sourceRoot":"","sources":["../../src/bot/profile-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Bot profile and orchestrator types for the Weaver Swarm.
3
+ * Profiles wrap BotRegistry entries with scaling, budget, and routing config.
4
+ * The orchestrator uses these types to route tasks to the best available bot.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=profile-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-types.js","sourceRoot":"","sources":["../../src/bot/profile-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,25 @@
1
+ export interface SessionState {
2
+ sessionId: string;
3
+ status: 'idle' | 'planning' | 'executing' | 'validating' | 'waiting-approval' | 'paused' | 'fixing';
4
+ currentTask: string | null;
5
+ /** The runId of the currently executing task (for SSE streaming). */
6
+ currentRunId?: string | null;
7
+ completedTasks: number;
8
+ totalCost: number;
9
+ startedAt: number;
10
+ lastActivity: number;
11
+ }
12
+ export declare class SessionStore {
13
+ private filePath;
14
+ constructor(dir?: string);
15
+ create(): Promise<SessionState>;
16
+ load(): SessionState | null;
17
+ /** Recover session from backup file when primary is corrupt. */
18
+ private loadBackup;
19
+ save(state: SessionState): Promise<void>;
20
+ update(patch: Partial<SessionState>): Promise<SessionState | null>;
21
+ clear(): void;
22
+ /** Atomic write: write to temp file, backup existing, rename into place. */
23
+ private writeAtomic;
24
+ }
25
+ //# sourceMappingURL=session-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../src/bot/session-state.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpG,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;gBAEb,GAAG,CAAC,EAAE,MAAM;IAKlB,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAcrC,IAAI,IAAI,YAAY,GAAG,IAAI;IAW3B,gEAAgE;IAChE,OAAO,CAAC,UAAU;IAcZ,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAWxE,KAAK,IAAI,IAAI;IAQb,4EAA4E;IAC5E,OAAO,CAAC,WAAW;CAsBpB"}
@@ -0,0 +1,110 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import * as os from 'node:os';
4
+ import * as crypto from 'node:crypto';
5
+ import { withFileLock } from './file-lock.js';
6
+ export class SessionStore {
7
+ filePath;
8
+ constructor(dir) {
9
+ const base = dir ?? path.join(os.homedir(), '.weaver');
10
+ this.filePath = path.join(base, 'session.json');
11
+ }
12
+ async create() {
13
+ const state = {
14
+ sessionId: crypto.randomUUID().slice(0, 8),
15
+ status: 'idle',
16
+ currentTask: null,
17
+ completedTasks: 0,
18
+ totalCost: 0,
19
+ startedAt: Date.now(),
20
+ lastActivity: Date.now(),
21
+ };
22
+ await this.save(state);
23
+ return state;
24
+ }
25
+ load() {
26
+ try {
27
+ if (!fs.existsSync(this.filePath))
28
+ return null;
29
+ return JSON.parse(fs.readFileSync(this.filePath, 'utf-8'));
30
+ }
31
+ catch (err) {
32
+ if (process.env.WEAVER_VERBOSE)
33
+ process.stderr.write(`[weaver] session state load failed: ${err}\n`);
34
+ // Try backup recovery
35
+ return this.loadBackup();
36
+ }
37
+ }
38
+ /** Recover session from backup file when primary is corrupt. */
39
+ loadBackup() {
40
+ const backupPath = this.filePath + '.bak';
41
+ if (!fs.existsSync(backupPath))
42
+ return null;
43
+ try {
44
+ const data = JSON.parse(fs.readFileSync(backupPath, 'utf-8'));
45
+ // Restore backup to primary
46
+ try {
47
+ this.writeAtomic(data);
48
+ }
49
+ catch { /* best effort */ }
50
+ return data;
51
+ }
52
+ catch (err) {
53
+ if (process.env.WEAVER_VERBOSE)
54
+ process.stderr.write(`[weaver] session backup load failed: ${err}\n`);
55
+ return null;
56
+ }
57
+ }
58
+ async save(state) {
59
+ return withFileLock(this.filePath, () => {
60
+ state.lastActivity = Date.now();
61
+ this.writeAtomic(state);
62
+ });
63
+ }
64
+ async update(patch) {
65
+ return withFileLock(this.filePath, () => {
66
+ const state = this.load();
67
+ if (!state)
68
+ return null;
69
+ Object.assign(state, patch);
70
+ state.lastActivity = Date.now();
71
+ this.writeAtomic(state);
72
+ return state;
73
+ });
74
+ }
75
+ clear() {
76
+ try {
77
+ fs.unlinkSync(this.filePath);
78
+ }
79
+ catch (err) {
80
+ if (err.code !== 'ENOENT')
81
+ throw err;
82
+ }
83
+ }
84
+ /** Atomic write: write to temp file, backup existing, rename into place. */
85
+ writeAtomic(state) {
86
+ const dir = path.dirname(this.filePath);
87
+ if (!fs.existsSync(dir))
88
+ fs.mkdirSync(dir, { recursive: true });
89
+ const tmpPath = this.filePath + `.tmp.${process.pid}`;
90
+ const backupPath = this.filePath + '.bak';
91
+ const content = JSON.stringify(state, null, 2);
92
+ // Write to temp file first
93
+ fs.writeFileSync(tmpPath, content, 'utf-8');
94
+ // Backup current file if it exists
95
+ if (fs.existsSync(this.filePath)) {
96
+ try {
97
+ fs.copyFileSync(this.filePath, backupPath);
98
+ }
99
+ catch { /* best effort */ }
100
+ }
101
+ // Atomic rename
102
+ fs.renameSync(tmpPath, this.filePath);
103
+ // Update backup after successful write
104
+ try {
105
+ fs.copyFileSync(this.filePath, backupPath);
106
+ }
107
+ catch { /* best effort */ }
108
+ }
109
+ }
110
+ //# sourceMappingURL=session-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/bot/session-state.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,16 @@
1
1
  /**
2
2
  * SwarmController — multi-bot orchestrator for the Weaver Swarm.
3
3
  *
4
- * Manages concurrent async bot loops, budget enforcement, crash recovery,
5
- * dependency resolution, and state persistence.
4
+ * Uses a centralized orchestrator dispatch loop instead of per-bot pull loops.
5
+ * The Orchestrator routes pending tasks to the best available bot instance,
6
+ * the InstanceManager handles scaling, and the ProfileStore persists profiles.
6
7
  *
7
8
  * Singleton per workspace via `SwarmController.getInstance(projectDir)`.
8
9
  */
9
- export interface BotSlot {
10
- botId: string;
11
- botName: string;
12
- status: 'idle' | 'executing' | 'paused' | 'stopped';
13
- currentTaskId?: string;
14
- currentRunId?: string;
15
- startedAt?: string;
16
- tokensUsed: number;
17
- cost: number;
18
- }
10
+ import { Orchestrator } from './orchestrator.js';
11
+ import { InstanceManager } from './instance-manager.js';
12
+ import { ProfileStore } from './profile-store.js';
13
+ import type { BotInstance, OrchestratorDecision } from './profile-types.js';
19
14
  export interface SwarmBudgets {
20
15
  workspace: {
21
16
  limitTokens: number;
@@ -33,7 +28,8 @@ export interface SwarmBudgets {
33
28
  export interface SwarmState {
34
29
  status: 'idle' | 'running' | 'paused' | 'stopping';
35
30
  startedAt?: string;
36
- bots: Record<string, BotSlot>;
31
+ /** Active bot instances managed by InstanceManager. */
32
+ instances: Record<string, BotInstance>;
37
33
  maxConcurrent: number;
38
34
  budgets: SwarmBudgets;
39
35
  autoRetry: boolean;
@@ -64,11 +60,18 @@ export declare class SwarmController {
64
60
  private readonly statePath;
65
61
  private readonly taskStore;
66
62
  private readonly eventLog;
63
+ private readonly orchestrator;
64
+ private readonly instanceManager;
65
+ private readonly profileStore;
67
66
  private state;
68
- /** Active bot loop abort controllers (one per spawned loop). */
69
- private botAborts;
70
- /** Promises for active bot loops (resolved when the loop exits). */
71
- private botLoopPromises;
67
+ /** Abort controller for the single dispatch loop. */
68
+ private dispatchAbort;
69
+ /** Promise for the dispatch loop (resolved when the loop exits). */
70
+ private dispatchLoopPromise;
71
+ /** Promises for currently executing tasks (instanceId -> Promise). */
72
+ private executionPromises;
73
+ /** Map of profileId -> BotRegistration for workflow execution. */
74
+ private profileBotMap;
72
75
  static getInstance(projectDir: string): SwarmController;
73
76
  /** Clear all cached instances (used by tests). */
74
77
  static clearInstances(): void;
@@ -79,12 +82,25 @@ export declare class SwarmController {
79
82
  getStatus(): SwarmState;
80
83
  configure(config: SwarmConfig): void;
81
84
  recover(): Promise<void>;
82
- recordTokenUsage(botId: string, _taskId: string, tokensUsed: number, cost: number): void;
83
- private _spawnBotLoop;
84
- private _botLoop;
85
+ recordTokenUsage(instanceId: string, _taskId: string, tokensUsed: number, cost: number): void;
86
+ getProfileStore(): ProfileStore;
87
+ getInstanceManager(): InstanceManager;
88
+ getOrchestrator(): Orchestrator;
89
+ getOrchestratorStatus(): {
90
+ decisions: OrchestratorDecision[];
91
+ stats: {
92
+ totalDecisions: number;
93
+ assignmentsByMethod: Record<string, number>;
94
+ };
95
+ };
96
+ private _startDispatchLoop;
97
+ private _dispatchLoop;
98
+ private _executeTask;
85
99
  private _isBudgetExceeded;
100
+ /** Calculate remaining budget across session and workspace. */
101
+ private _remainingBudget;
86
102
  private _checkSteering;
87
- private _updateSlot;
103
+ private _syncInstancesState;
88
104
  private _loadState;
89
105
  private _defaultState;
90
106
  private _persist;
@@ -1 +1 @@
1
- {"version":3,"file":"swarm-controller.d.ts","sourceRoot":"","sources":["../../src/bot/swarm-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"swarm-controller.d.ts","sourceRoot":"","sources":["../../src/bot/swarm-controller.ts"],"names":[],"mappings":"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"}