@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.
- package/dist/ai-chat-provider.d.ts +12 -0
- package/dist/ai-chat-provider.d.ts.map +1 -1
- package/dist/ai-chat-provider.js +173 -19
- package/dist/ai-chat-provider.js.map +1 -1
- package/dist/bot/agent-loop.d.ts +20 -0
- package/dist/bot/agent-loop.d.ts.map +1 -0
- package/dist/bot/agent-loop.js +331 -0
- package/dist/bot/agent-loop.js.map +1 -0
- package/dist/bot/ai-router.d.ts +19 -0
- package/dist/bot/ai-router.d.ts.map +1 -0
- package/dist/bot/ai-router.js +104 -0
- package/dist/bot/ai-router.js.map +1 -0
- package/dist/bot/bot-registry.js +2 -2
- package/dist/bot/bot-registry.js.map +1 -1
- package/dist/bot/conversation-store.d.ts +1 -0
- package/dist/bot/conversation-store.d.ts.map +1 -1
- package/dist/bot/conversation-store.js.map +1 -1
- package/dist/bot/improve-loop.js.map +1 -1
- package/dist/bot/instance-manager.d.ts +31 -0
- package/dist/bot/instance-manager.d.ts.map +1 -0
- package/dist/bot/instance-manager.js +115 -0
- package/dist/bot/instance-manager.js.map +1 -0
- package/dist/bot/orchestrator.d.ts +36 -0
- package/dist/bot/orchestrator.d.ts.map +1 -0
- package/dist/bot/orchestrator.js +176 -0
- package/dist/bot/orchestrator.js.map +1 -0
- package/dist/bot/profile-store.d.ts +36 -0
- package/dist/bot/profile-store.d.ts.map +1 -0
- package/dist/bot/profile-store.js +208 -0
- package/dist/bot/profile-store.js.map +1 -0
- package/dist/bot/profile-types.d.ts +126 -0
- package/dist/bot/profile-types.d.ts.map +1 -0
- package/dist/bot/profile-types.js +7 -0
- package/dist/bot/profile-types.js.map +1 -0
- package/dist/bot/session-state.d.ts +25 -0
- package/dist/bot/session-state.d.ts.map +1 -0
- package/dist/bot/session-state.js +110 -0
- package/dist/bot/session-state.js.map +1 -0
- package/dist/bot/swarm-controller.d.ts +37 -21
- package/dist/bot/swarm-controller.d.ts.map +1 -1
- package/dist/bot/swarm-controller.js +344 -163
- package/dist/bot/swarm-controller.js.map +1 -1
- package/dist/bot/task-prompt-builder.d.ts +2 -1
- package/dist/bot/task-prompt-builder.d.ts.map +1 -1
- package/dist/bot/task-prompt-builder.js +33 -10
- package/dist/bot/task-prompt-builder.js.map +1 -1
- package/dist/bot/task-queue.d.ts +46 -0
- package/dist/bot/task-queue.d.ts.map +1 -0
- package/dist/bot/task-queue.js +237 -0
- package/dist/bot/task-queue.js.map +1 -0
- package/dist/bot/task-store.d.ts +1 -6
- package/dist/bot/task-store.d.ts.map +1 -1
- package/dist/bot/task-store.js +27 -78
- package/dist/bot/task-store.js.map +1 -1
- package/dist/bot/task-types.d.ts +8 -4
- package/dist/bot/task-types.d.ts.map +1 -1
- package/dist/cli-handlers.d.ts.map +1 -1
- package/dist/cli-handlers.js +2 -3
- package/dist/cli-handlers.js.map +1 -1
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +749 -0
- package/dist/cli.js.map +1 -0
- package/dist/docs/docs/weaver-bot-usage.md +35 -18
- package/dist/docs/docs/weaver-config.md +20 -0
- package/dist/docs/docs/weaver-task-queue.md +31 -19
- package/dist/docs/weaver-config.md +15 -9
- package/dist/mcp-tools.d.ts +17 -0
- package/dist/mcp-tools.d.ts.map +1 -1
- package/dist/mcp-tools.js +98 -232
- package/dist/mcp-tools.js.map +1 -1
- package/dist/node-types/orchestrator-dispatch.d.ts +17 -0
- package/dist/node-types/orchestrator-dispatch.d.ts.map +1 -0
- package/dist/node-types/orchestrator-dispatch.js +63 -0
- package/dist/node-types/orchestrator-dispatch.js.map +1 -0
- package/dist/node-types/orchestrator-load-state.d.ts +16 -0
- package/dist/node-types/orchestrator-load-state.d.ts.map +1 -0
- package/dist/node-types/orchestrator-load-state.js +60 -0
- package/dist/node-types/orchestrator-load-state.js.map +1 -0
- package/dist/node-types/orchestrator-route.d.ts +16 -0
- package/dist/node-types/orchestrator-route.d.ts.map +1 -0
- package/dist/node-types/orchestrator-route.js +28 -0
- package/dist/node-types/orchestrator-route.js.map +1 -0
- package/dist/node-types/receive-task.d.ts +2 -3
- package/dist/node-types/receive-task.d.ts.map +1 -1
- package/dist/node-types/receive-task.js +3 -28
- package/dist/node-types/receive-task.js.map +1 -1
- package/dist/templates/weaver-template.d.ts +11 -0
- package/dist/templates/weaver-template.d.ts.map +1 -0
- package/dist/templates/weaver-template.js +53 -0
- package/dist/templates/weaver-template.js.map +1 -0
- package/dist/ui/bot-constants.d.ts +14 -0
- package/dist/ui/bot-constants.d.ts.map +1 -0
- package/dist/ui/bot-constants.js +189 -0
- package/dist/ui/bot-constants.js.map +1 -0
- package/dist/ui/bot-panel.js +51 -90
- package/dist/ui/bot-slot-card.js +87 -122
- package/dist/ui/budget-bar.js +5 -3
- package/dist/ui/chat-task-result.js +4 -7
- package/dist/ui/decision-log.js +136 -0
- package/dist/ui/profile-card.js +158 -0
- package/dist/ui/profile-editor.js +597 -0
- package/dist/ui/swarm-controls.js +36 -27
- package/dist/ui/swarm-dashboard.js +2034 -736
- package/dist/ui/task-create-form.js +39 -116
- package/dist/ui/task-detail-view.js +490 -239
- package/dist/ui/task-pool-list.js +69 -94
- package/dist/workflows/orchestrator.d.ts +21 -0
- package/dist/workflows/orchestrator.d.ts.map +1 -0
- package/dist/workflows/orchestrator.js +281 -0
- package/dist/workflows/orchestrator.js.map +1 -0
- package/dist/workflows/weaver-bot-session.d.ts +65 -0
- package/dist/workflows/weaver-bot-session.d.ts.map +1 -0
- package/dist/workflows/weaver-bot-session.js +68 -0
- package/dist/workflows/weaver-bot-session.js.map +1 -0
- package/dist/workflows/weaver.d.ts +24 -0
- package/dist/workflows/weaver.d.ts.map +1 -0
- package/dist/workflows/weaver.js +28 -0
- package/dist/workflows/weaver.js.map +1 -0
- package/flowweaver.manifest.json +253 -66
- package/package.json +1 -1
- package/src/ai-chat-provider.ts +184 -18
- package/src/bot/ai-router.ts +132 -0
- package/src/bot/bot-registry.ts +2 -2
- package/src/bot/conversation-store.ts +2 -1
- package/src/bot/improve-loop.ts +6 -6
- package/src/bot/instance-manager.ts +128 -0
- package/src/bot/orchestrator.ts +244 -0
- package/src/bot/profile-store.ts +225 -0
- package/src/bot/profile-types.ts +141 -0
- package/src/bot/swarm-controller.ts +385 -186
- package/src/bot/task-prompt-builder.ts +37 -6
- package/src/bot/task-store.ts +28 -89
- package/src/bot/task-types.ts +10 -4
- package/src/cli-handlers.ts +2 -3
- package/src/docs/weaver-bot-usage.md +35 -18
- package/src/docs/weaver-config.md +20 -0
- package/src/docs/weaver-task-queue.md +31 -19
- package/src/mcp-tools.ts +129 -320
- package/src/node-types/orchestrator-dispatch.ts +71 -0
- package/src/node-types/orchestrator-load-state.ts +66 -0
- package/src/node-types/orchestrator-route.ts +33 -0
- package/src/node-types/receive-task.ts +3 -26
- package/src/ui/bot-constants.ts +192 -0
- package/src/ui/bot-panel.tsx +55 -79
- package/src/ui/bot-slot-card.tsx +69 -117
- package/src/ui/budget-bar.tsx +5 -3
- package/src/ui/chat-task-result.tsx +6 -9
- package/src/ui/decision-log.tsx +148 -0
- package/src/ui/profile-card.tsx +157 -0
- package/src/ui/profile-editor.tsx +384 -0
- package/src/ui/swarm-controls.tsx +35 -31
- package/src/ui/swarm-dashboard.tsx +409 -80
- package/src/ui/task-create-form.tsx +29 -119
- package/src/ui/task-detail-view.tsx +461 -215
- package/src/ui/task-pool-list.tsx +74 -95
- package/src/workflows/orchestrator.ts +302 -0
- package/dist/docs/weaver-bot-usage.md +0 -34
- package/dist/docs/weaver-genesis.md +0 -32
- package/dist/docs/weaver-task-queue.md +0 -34
- package/src/bot/error-guide.ts +0 -4
- 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
|
-
*
|
|
5
|
-
*
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
/**
|
|
69
|
-
private
|
|
70
|
-
/**
|
|
71
|
-
private
|
|
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(
|
|
83
|
-
|
|
84
|
-
|
|
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
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"swarm-controller.d.ts","sourceRoot":"","sources":["../../src/bot/swarm-controller.ts"],"names":[],"mappings":"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"}
|