heyio 1.12.1 → 3.0.0
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/api/middleware/auth.d.ts +14 -0
- package/dist/api/middleware/auth.d.ts.map +1 -0
- package/dist/api/middleware/auth.js +66 -0
- package/dist/api/middleware/auth.js.map +1 -0
- package/dist/api/notifications.d.ts +14 -0
- package/dist/api/notifications.d.ts.map +1 -0
- package/dist/api/notifications.js +112 -0
- package/dist/api/notifications.js.map +1 -0
- package/dist/api/routes/activity.d.ts +3 -0
- package/dist/api/routes/activity.d.ts.map +1 -0
- package/dist/api/routes/activity.js +28 -0
- package/dist/api/routes/activity.js.map +1 -0
- package/dist/api/routes/attachments.d.ts +3 -0
- package/dist/api/routes/attachments.d.ts.map +1 -0
- package/dist/api/routes/attachments.js +83 -0
- package/dist/api/routes/attachments.js.map +1 -0
- package/dist/api/routes/config.d.ts +3 -0
- package/dist/api/routes/config.d.ts.map +1 -0
- package/dist/api/routes/config.js +106 -0
- package/dist/api/routes/config.js.map +1 -0
- package/dist/api/routes/conversations.d.ts +3 -0
- package/dist/api/routes/conversations.d.ts.map +1 -0
- package/dist/api/routes/conversations.js +69 -0
- package/dist/api/routes/conversations.js.map +1 -0
- package/dist/api/routes/health.d.ts +3 -0
- package/dist/api/routes/health.d.ts.map +1 -0
- package/dist/api/routes/health.js +16 -0
- package/dist/api/routes/health.js.map +1 -0
- package/dist/api/routes/inbox.d.ts +3 -0
- package/dist/api/routes/inbox.d.ts.map +1 -0
- package/dist/api/routes/inbox.js +88 -0
- package/dist/api/routes/inbox.js.map +1 -0
- package/dist/api/routes/schedules.d.ts +3 -0
- package/dist/api/routes/schedules.d.ts.map +1 -0
- package/dist/api/routes/schedules.js +96 -0
- package/dist/api/routes/schedules.js.map +1 -0
- package/dist/api/routes/skills.d.ts +2 -0
- package/dist/api/routes/skills.d.ts.map +1 -0
- package/dist/api/routes/skills.js +85 -0
- package/dist/api/routes/skills.js.map +1 -0
- package/dist/api/routes/squads.d.ts +3 -0
- package/dist/api/routes/squads.d.ts.map +1 -0
- package/dist/api/routes/squads.js +129 -0
- package/dist/api/routes/squads.js.map +1 -0
- package/dist/api/routes/usage.d.ts +3 -0
- package/dist/api/routes/usage.d.ts.map +1 -0
- package/dist/api/routes/usage.js +55 -0
- package/dist/api/routes/usage.js.map +1 -0
- package/dist/api/routes/wiki.d.ts +2 -0
- package/dist/api/routes/wiki.d.ts.map +1 -0
- package/dist/api/routes/wiki.js +43 -0
- package/dist/api/routes/wiki.js.map +1 -0
- package/dist/api/server.d.ts +7 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +136 -634
- package/dist/api/server.js.map +1 -0
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +2 -91
- package/dist/config.js.map +1 -0
- package/dist/copilot/client.d.ts +5 -0
- package/dist/copilot/client.d.ts.map +1 -0
- package/dist/copilot/client.js +19 -11
- package/dist/copilot/client.js.map +1 -0
- package/dist/copilot/health-monitor.d.ts +14 -0
- package/dist/copilot/health-monitor.d.ts.map +1 -0
- package/dist/copilot/health-monitor.js +70 -0
- package/dist/copilot/health-monitor.js.map +1 -0
- package/dist/copilot/orchestrator.d.ts +5 -0
- package/dist/copilot/orchestrator.d.ts.map +1 -0
- package/dist/copilot/orchestrator.js +127 -123
- package/dist/copilot/orchestrator.js.map +1 -0
- package/dist/copilot/tools.d.ts +49 -0
- package/dist/copilot/tools.d.ts.map +1 -0
- package/dist/copilot/tools.js +545 -321
- package/dist/copilot/tools.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -26
- package/dist/index.js.map +1 -0
- package/dist/logging/logger.d.ts +6 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +21 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/models/index.d.ts +6 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +4 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/pricing.d.ts +25 -0
- package/dist/models/pricing.d.ts.map +1 -0
- package/dist/models/pricing.js +96 -0
- package/dist/models/pricing.js.map +1 -0
- package/dist/models/registry.d.ts +34 -0
- package/dist/models/registry.d.ts.map +1 -0
- package/dist/models/registry.js +109 -0
- package/dist/models/registry.js.map +1 -0
- package/dist/models/token-tracker.d.ts +40 -0
- package/dist/models/token-tracker.d.ts.map +1 -0
- package/dist/models/token-tracker.js +102 -0
- package/dist/models/token-tracker.js.map +1 -0
- package/dist/scheduler/engine.d.ts +9 -0
- package/dist/scheduler/engine.d.ts.map +1 -0
- package/dist/scheduler/engine.js +127 -0
- package/dist/scheduler/engine.js.map +1 -0
- package/dist/skills/index.d.ts +3 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +2 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/store.d.ts +52 -0
- package/dist/skills/store.d.ts.map +1 -0
- package/dist/skills/store.js +148 -0
- package/dist/skills/store.js.map +1 -0
- package/dist/squad/agent.d.ts +46 -0
- package/dist/squad/agent.d.ts.map +1 -0
- package/dist/squad/agent.js +261 -0
- package/dist/squad/agent.js.map +1 -0
- package/dist/squad/autonomy.d.ts +16 -0
- package/dist/squad/autonomy.d.ts.map +1 -0
- package/dist/squad/autonomy.js +63 -0
- package/dist/squad/autonomy.js.map +1 -0
- package/dist/squad/event-bus.d.ts +22 -0
- package/dist/squad/event-bus.d.ts.map +1 -0
- package/dist/squad/event-bus.js +56 -0
- package/dist/squad/event-bus.js.map +1 -0
- package/dist/squad/execution/index.d.ts +12 -0
- package/dist/squad/execution/index.d.ts.map +1 -0
- package/dist/squad/execution/index.js +7 -0
- package/dist/squad/execution/index.js.map +1 -0
- package/dist/squad/execution/instance.d.ts +40 -0
- package/dist/squad/execution/instance.d.ts.map +1 -0
- package/dist/squad/execution/instance.js +138 -0
- package/dist/squad/execution/instance.js.map +1 -0
- package/dist/squad/execution/meeting.d.ts +25 -0
- package/dist/squad/execution/meeting.d.ts.map +1 -0
- package/dist/squad/execution/meeting.js +140 -0
- package/dist/squad/execution/meeting.js.map +1 -0
- package/dist/squad/execution/pr.d.ts +15 -0
- package/dist/squad/execution/pr.d.ts.map +1 -0
- package/dist/squad/execution/pr.js +93 -0
- package/dist/squad/execution/pr.js.map +1 -0
- package/dist/squad/execution/runner.d.ts +22 -0
- package/dist/squad/execution/runner.d.ts.map +1 -0
- package/dist/squad/execution/runner.js +68 -0
- package/dist/squad/execution/runner.js.map +1 -0
- package/dist/squad/execution/tasks.d.ts +11 -0
- package/dist/squad/execution/tasks.d.ts.map +1 -0
- package/dist/squad/execution/tasks.js +85 -0
- package/dist/squad/execution/tasks.js.map +1 -0
- package/dist/squad/execution/worktree.d.ts +26 -0
- package/dist/squad/execution/worktree.d.ts.map +1 -0
- package/dist/squad/execution/worktree.js +111 -0
- package/dist/squad/execution/worktree.js.map +1 -0
- package/dist/squad/hiring.d.ts +32 -0
- package/dist/squad/hiring.d.ts.map +1 -0
- package/dist/squad/hiring.js +200 -0
- package/dist/squad/hiring.js.map +1 -0
- package/dist/squad/index.d.ts +8 -0
- package/dist/squad/index.d.ts.map +1 -0
- package/dist/squad/index.js +6 -0
- package/dist/squad/index.js.map +1 -0
- package/dist/squad/manager.d.ts +48 -0
- package/dist/squad/manager.d.ts.map +1 -0
- package/dist/squad/manager.js +274 -0
- package/dist/squad/manager.js.map +1 -0
- package/dist/squad/name-generator.d.ts +16 -0
- package/dist/squad/name-generator.d.ts.map +1 -0
- package/dist/squad/name-generator.js +113 -0
- package/dist/squad/name-generator.js.map +1 -0
- package/dist/squad/roles/templates.d.ts +5 -0
- package/dist/squad/roles/templates.d.ts.map +1 -0
- package/dist/squad/roles/templates.js +102 -0
- package/dist/squad/roles/templates.js.map +1 -0
- package/dist/squad/skill-parser.d.ts +36 -0
- package/dist/squad/skill-parser.d.ts.map +1 -0
- package/dist/squad/skill-parser.js +83 -0
- package/dist/squad/skill-parser.js.map +1 -0
- package/dist/squad/source-resolver.d.ts +20 -0
- package/dist/squad/source-resolver.d.ts.map +1 -0
- package/dist/squad/source-resolver.js +52 -0
- package/dist/squad/source-resolver.js.map +1 -0
- package/dist/store/activity.d.ts +43 -0
- package/dist/store/activity.d.ts.map +1 -0
- package/dist/store/activity.js +131 -0
- package/dist/store/activity.js.map +1 -0
- package/dist/store/db.d.ts +5 -0
- package/dist/store/db.d.ts.map +1 -0
- package/dist/store/db.js +209 -248
- package/dist/store/db.js.map +1 -0
- package/dist/store/inbox.d.ts +53 -0
- package/dist/store/inbox.d.ts.map +1 -0
- package/dist/store/inbox.js +151 -0
- package/dist/store/inbox.js.map +1 -0
- package/dist/store/schedules.d.ts +53 -0
- package/dist/store/schedules.d.ts.map +1 -0
- package/dist/store/schedules.js +149 -54
- package/dist/store/schedules.js.map +1 -0
- package/dist/wiki/index.d.ts +3 -0
- package/dist/wiki/index.d.ts.map +1 -0
- package/dist/wiki/index.js +2 -0
- package/dist/wiki/index.js.map +1 -0
- package/dist/wiki/store.d.ts +49 -0
- package/dist/wiki/store.d.ts.map +1 -0
- package/dist/wiki/store.js +115 -0
- package/dist/wiki/store.js.map +1 -0
- package/package.json +52 -56
- package/src/api/middleware/auth.ts +76 -0
- package/src/api/notifications.ts +122 -0
- package/src/api/routes/activity.ts +29 -0
- package/src/api/routes/attachments.ts +93 -0
- package/src/api/routes/config.ts +115 -0
- package/src/api/routes/conversations.ts +87 -0
- package/src/api/routes/health.ts +18 -0
- package/src/api/routes/inbox.ts +98 -0
- package/src/api/routes/schedules.ts +121 -0
- package/src/api/routes/skills.ts +105 -0
- package/src/api/routes/squads.ts +145 -0
- package/src/api/routes/usage.ts +57 -0
- package/src/api/routes/wiki.ts +49 -0
- package/src/api/server.ts +186 -0
- package/src/config.ts +3 -0
- package/src/copilot/client.ts +42 -0
- package/src/copilot/health-monitor.ts +85 -0
- package/src/copilot/orchestrator.ts +222 -0
- package/src/copilot/tools.ts +707 -0
- package/src/index.ts +112 -0
- package/src/logging/logger.ts +26 -0
- package/src/models/index.ts +11 -0
- package/src/models/pricing.ts +121 -0
- package/src/models/registry.ts +131 -0
- package/src/models/token-tracker.ts +151 -0
- package/src/scheduler/engine.ts +146 -0
- package/src/skills/index.ts +13 -0
- package/src/skills/store.ts +188 -0
- package/src/squad/agent.ts +326 -0
- package/src/squad/autonomy.ts +78 -0
- package/src/squad/event-bus.ts +71 -0
- package/src/squad/execution/index.ts +17 -0
- package/src/squad/execution/instance.ts +186 -0
- package/src/squad/execution/meeting.ts +191 -0
- package/src/squad/execution/pr.ts +127 -0
- package/src/squad/execution/runner.ts +97 -0
- package/src/squad/execution/tasks.ts +111 -0
- package/src/squad/execution/worktree.ts +138 -0
- package/src/squad/hiring.ts +222 -0
- package/src/squad/index.ts +17 -0
- package/src/squad/manager.ts +337 -0
- package/src/squad/name-generator.ts +135 -0
- package/src/squad/roles/templates.ts +104 -0
- package/src/squad/skill-parser.ts +120 -0
- package/src/squad/source-resolver.ts +57 -0
- package/src/store/activity.ts +176 -0
- package/src/store/db.ts +237 -0
- package/src/store/inbox.ts +199 -0
- package/src/store/schedules.ts +199 -0
- package/src/wiki/index.ts +12 -0
- package/src/wiki/store.ts +139 -0
- package/tsconfig.json +9 -0
- package/LICENSE +0 -21
- package/README.md +0 -333
- package/dist/api/auth.js +0 -46
- package/dist/chat/attachments.js +0 -112
- package/dist/copilot/agents.js +0 -309
- package/dist/copilot/ceremonies.js +0 -174
- package/dist/copilot/gh-token.js +0 -64
- package/dist/copilot/io-scheduler.js +0 -79
- package/dist/copilot/model-router.js +0 -114
- package/dist/copilot/scheduler.js +0 -88
- package/dist/copilot/skills.js +0 -246
- package/dist/copilot/specialist-runner.js +0 -191
- package/dist/copilot/squad-tools.js +0 -258
- package/dist/copilot/system-message.js +0 -86
- package/dist/copilot/token-tracker.js +0 -98
- package/dist/copilot/trigger-schedule.js +0 -33
- package/dist/daemon.js +0 -67
- package/dist/logging.js +0 -27
- package/dist/mcp/config.js +0 -29
- package/dist/mcp/index.js +0 -3
- package/dist/mcp/registry.js +0 -42
- package/dist/notify.js +0 -25
- package/dist/paths.js +0 -17
- package/dist/setup.js +0 -35
- package/dist/store/agent-events.js +0 -19
- package/dist/store/audit-log.js +0 -71
- package/dist/store/conversations.js +0 -164
- package/dist/store/feed.js +0 -44
- package/dist/store/instances.js +0 -75
- package/dist/store/squad-colors.js +0 -23
- package/dist/store/squads.js +0 -60
- package/dist/store/tasks.js +0 -78
- package/dist/store/token-usage.js +0 -94
- package/dist/telegram/bot.js +0 -41
- package/dist/telegram/handlers.js +0 -42
- package/dist/watchdog.js +0 -37
- package/dist/wiki/backlinks.js +0 -51
- package/dist/wiki/fs.js +0 -108
- package/dist/wiki/search.js +0 -47
- package/web-dist/assets/AuditLogView-C5QtUQBq.js +0 -6
- package/web-dist/assets/ChatView-DLu9BMg8.js +0 -1
- package/web-dist/assets/FeedView-6OV-l6Gl.js +0 -6
- package/web-dist/assets/HistoryView-DizPqv0y.js +0 -1
- package/web-dist/assets/LoginView-CG1O9fmR.js +0 -1
- package/web-dist/assets/McpView-TJN-fZvI.js +0 -1
- package/web-dist/assets/SchedulesView-BDFpImX6.js +0 -6
- package/web-dist/assets/SettingsView-D-K1iC1c.js +0 -1
- package/web-dist/assets/SkillsView-DnNmO192.js +0 -15
- package/web-dist/assets/SquadDetailView-BBvrgHzn.js +0 -26
- package/web-dist/assets/SquadHealthView-DF2zF9D3.js +0 -11
- package/web-dist/assets/SquadsView-CPVzko7k.js +0 -6
- package/web-dist/assets/ToggleSwitch.vue_vue_type_script_setup_true_lang-Bk_t9_Rn.js +0 -1
- package/web-dist/assets/UsageView-OcyM5k14.js +0 -16
- package/web-dist/assets/WikiView-KhFqBZI0.js +0 -26
- package/web-dist/assets/api-BiDVwQrs.js +0 -1
- package/web-dist/assets/arrow-left-DFbf2tii.js +0 -6
- package/web-dist/assets/git-branch-BLstr_Gr.js +0 -6
- package/web-dist/assets/index-B-o45ao1.css +0 -1
- package/web-dist/assets/index-DCJUYZtV.js +0 -269
- package/web-dist/assets/pencil-D4Zz_t0y.js +0 -6
- package/web-dist/assets/plus-gmwiZVfr.js +0 -6
- package/web-dist/assets/save-BvtAs5WB.js +0 -6
- package/web-dist/assets/search-BabUvoGD.js +0 -6
- package/web-dist/assets/squad-colors-B8B_Y-lz.js +0 -1
- package/web-dist/assets/trash-2-C21cNLJl.js +0 -6
- package/web-dist/assets/triangle-alert-BrzY_E1n.js +0 -6
- package/web-dist/assets/x-xgLSmc9e.js +0 -6
- package/web-dist/favicon.svg +0 -10
- package/web-dist/index.html +0 -14
- package/web-dist/logo.svg +0 -10
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { createChildLogger } from '../logging/logger.js';
|
|
2
|
+
import { getDatabase } from '../store/db.js';
|
|
3
|
+
const logger = () => createChildLogger('token-tracker');
|
|
4
|
+
/**
|
|
5
|
+
* Record token usage from an LLM call.
|
|
6
|
+
*/
|
|
7
|
+
export async function recordTokenUsage(record) {
|
|
8
|
+
const db = getDatabase();
|
|
9
|
+
// Estimate cost if pricing is available
|
|
10
|
+
let cost = record.estimatedCostUsd;
|
|
11
|
+
if (cost === undefined) {
|
|
12
|
+
cost = await estimateCost(record.model, record.inputTokens, record.outputTokens);
|
|
13
|
+
}
|
|
14
|
+
await db.execute({
|
|
15
|
+
sql: `INSERT INTO token_usage (squad_id, instance_id, agent_role, model, input_tokens, output_tokens, estimated_cost_usd)
|
|
16
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`,
|
|
17
|
+
args: [
|
|
18
|
+
record.squadId ?? null,
|
|
19
|
+
record.instanceId ?? null,
|
|
20
|
+
record.agentRole ?? null,
|
|
21
|
+
record.model,
|
|
22
|
+
record.inputTokens,
|
|
23
|
+
record.outputTokens,
|
|
24
|
+
cost ?? null,
|
|
25
|
+
],
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Estimate cost for a call based on stored pricing.
|
|
30
|
+
*/
|
|
31
|
+
async function estimateCost(model, inputTokens, outputTokens) {
|
|
32
|
+
const db = getDatabase();
|
|
33
|
+
const result = await db.execute({
|
|
34
|
+
sql: 'SELECT input_cost_per_1m, output_cost_per_1m FROM model_pricing WHERE model = ?',
|
|
35
|
+
args: [model],
|
|
36
|
+
});
|
|
37
|
+
if (result.rows.length === 0)
|
|
38
|
+
return undefined;
|
|
39
|
+
const row = result.rows[0];
|
|
40
|
+
const inputCost = (row.input_cost_per_1m / 1_000_000) * inputTokens;
|
|
41
|
+
const outputCost = (row.output_cost_per_1m / 1_000_000) * outputTokens;
|
|
42
|
+
return inputCost + outputCost;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Query token usage with filters.
|
|
46
|
+
*/
|
|
47
|
+
export async function queryUsage(filters) {
|
|
48
|
+
const db = getDatabase();
|
|
49
|
+
const conditions = [];
|
|
50
|
+
const args = [];
|
|
51
|
+
if (filters?.squadId) {
|
|
52
|
+
conditions.push('squad_id = ?');
|
|
53
|
+
args.push(filters.squadId);
|
|
54
|
+
}
|
|
55
|
+
if (filters?.agentRole) {
|
|
56
|
+
conditions.push('agent_role = ?');
|
|
57
|
+
args.push(filters.agentRole);
|
|
58
|
+
}
|
|
59
|
+
if (filters?.model) {
|
|
60
|
+
conditions.push('model = ?');
|
|
61
|
+
args.push(filters.model);
|
|
62
|
+
}
|
|
63
|
+
if (filters?.since) {
|
|
64
|
+
conditions.push('timestamp >= ?');
|
|
65
|
+
args.push(filters.since);
|
|
66
|
+
}
|
|
67
|
+
if (filters?.until) {
|
|
68
|
+
conditions.push('timestamp <= ?');
|
|
69
|
+
args.push(filters.until);
|
|
70
|
+
}
|
|
71
|
+
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
72
|
+
const result = await db.execute({
|
|
73
|
+
sql: `SELECT model, input_tokens, output_tokens, estimated_cost_usd, timestamp, squad_id, agent_role
|
|
74
|
+
FROM token_usage ${where} ORDER BY timestamp DESC LIMIT 500`,
|
|
75
|
+
args,
|
|
76
|
+
});
|
|
77
|
+
const records = result.rows.map((row) => ({
|
|
78
|
+
model: row.model,
|
|
79
|
+
inputTokens: row.input_tokens,
|
|
80
|
+
outputTokens: row.output_tokens,
|
|
81
|
+
estimatedCostUsd: row.estimated_cost_usd,
|
|
82
|
+
timestamp: row.timestamp,
|
|
83
|
+
squadId: row.squad_id,
|
|
84
|
+
agentRole: row.agent_role,
|
|
85
|
+
}));
|
|
86
|
+
// Totals
|
|
87
|
+
const totalsResult = await db.execute({
|
|
88
|
+
sql: `SELECT COUNT(*) as cnt, COALESCE(SUM(input_tokens), 0) as total_in,
|
|
89
|
+
COALESCE(SUM(output_tokens), 0) as total_out, COALESCE(SUM(estimated_cost_usd), 0) as total_cost
|
|
90
|
+
FROM token_usage ${where}`,
|
|
91
|
+
args,
|
|
92
|
+
});
|
|
93
|
+
const totalsRow = totalsResult.rows[0];
|
|
94
|
+
const totals = {
|
|
95
|
+
callCount: totalsRow?.cnt ?? 0,
|
|
96
|
+
totalInputTokens: totalsRow?.total_in ?? 0,
|
|
97
|
+
totalOutputTokens: totalsRow?.total_out ?? 0,
|
|
98
|
+
totalCostUsd: totalsRow?.total_cost ?? 0,
|
|
99
|
+
};
|
|
100
|
+
return { records, totals };
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=token-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-tracker.js","sourceRoot":"","sources":["../../src/models/token-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/scheduler/engine.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAUrC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { sendMessage } from '../copilot/orchestrator.js';
|
|
2
|
+
import { createChildLogger } from '../logging/logger.js';
|
|
3
|
+
import { getEventBus } from '../squad/event-bus.js';
|
|
4
|
+
import { runInstance } from '../squad/execution/runner.js';
|
|
5
|
+
import { getSquadByName, listSquads } from '../squad/manager.js';
|
|
6
|
+
import { addInboxEntry } from '../store/inbox.js';
|
|
7
|
+
import { getDueSchedules, markScheduleFired } from '../store/schedules.js';
|
|
8
|
+
const logger = () => createChildLogger('scheduler');
|
|
9
|
+
let intervalHandle = null;
|
|
10
|
+
let running = false;
|
|
11
|
+
const TICK_INTERVAL_MS = 60_000; // Check every minute
|
|
12
|
+
/**
|
|
13
|
+
* Start the schedule engine. Evaluates due schedules every 60 seconds.
|
|
14
|
+
*/
|
|
15
|
+
export function startScheduler() {
|
|
16
|
+
const log = logger();
|
|
17
|
+
log.info('Scheduler started');
|
|
18
|
+
// Initial tick
|
|
19
|
+
tick();
|
|
20
|
+
intervalHandle = setInterval(() => {
|
|
21
|
+
tick();
|
|
22
|
+
}, TICK_INTERVAL_MS);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Stop the schedule engine.
|
|
26
|
+
*/
|
|
27
|
+
export function stopScheduler() {
|
|
28
|
+
if (intervalHandle) {
|
|
29
|
+
clearInterval(intervalHandle);
|
|
30
|
+
intervalHandle = null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function tick() {
|
|
34
|
+
if (running)
|
|
35
|
+
return; // Prevent overlapping ticks
|
|
36
|
+
running = true;
|
|
37
|
+
try {
|
|
38
|
+
const due = await getDueSchedules();
|
|
39
|
+
if (due.length === 0) {
|
|
40
|
+
running = false;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const log = logger();
|
|
44
|
+
log.info({ count: due.length }, 'Firing due schedules');
|
|
45
|
+
for (const schedule of due) {
|
|
46
|
+
await fireSchedule(schedule);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
logger().error({ err }, 'Scheduler tick error');
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
running = false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function fireSchedule(schedule) {
|
|
57
|
+
const log = logger();
|
|
58
|
+
const bus = getEventBus();
|
|
59
|
+
// Emit fired event
|
|
60
|
+
bus.emit({
|
|
61
|
+
type: 'schedule:fired',
|
|
62
|
+
id: crypto.randomUUID(),
|
|
63
|
+
timestamp: new Date(),
|
|
64
|
+
data: { scheduleId: schedule.id, name: schedule.name },
|
|
65
|
+
});
|
|
66
|
+
log.info({ scheduleId: schedule.id, name: schedule.name }, 'Firing schedule');
|
|
67
|
+
// Mark as fired immediately (update next_run)
|
|
68
|
+
await markScheduleFired(schedule.id, schedule.cron);
|
|
69
|
+
try {
|
|
70
|
+
let result;
|
|
71
|
+
if (schedule.targetType === 'orchestrator') {
|
|
72
|
+
// Send as if user typed it
|
|
73
|
+
result = await sendMessage(schedule.prompt, 'web', () => { });
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// Squad target — run instance
|
|
77
|
+
const squads = await listSquads();
|
|
78
|
+
const squad = squads.find((s) => s.id === schedule.targetId || s.name === schedule.targetId);
|
|
79
|
+
if (!squad) {
|
|
80
|
+
throw new Error(`Target squad not found: ${schedule.targetId}`);
|
|
81
|
+
}
|
|
82
|
+
const runResult = await runInstance({
|
|
83
|
+
squad,
|
|
84
|
+
objective: schedule.prompt,
|
|
85
|
+
});
|
|
86
|
+
if (runResult.success) {
|
|
87
|
+
result = runResult.pr
|
|
88
|
+
? `Completed successfully. PR: ${runResult.pr.url}`
|
|
89
|
+
: 'Completed successfully (no PR created).';
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
result = `Failed: ${runResult.error ?? 'unknown error'}`;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Post result to inbox as deliverable
|
|
96
|
+
const squadId = schedule.targetType === 'squad' && schedule.targetId ? schedule.targetId : 'orchestrator';
|
|
97
|
+
// Only post to inbox if we have a real squad target
|
|
98
|
+
if (schedule.targetType === 'squad' && schedule.targetId) {
|
|
99
|
+
await addInboxEntry({
|
|
100
|
+
squadId: schedule.targetId,
|
|
101
|
+
kind: 'deliverable',
|
|
102
|
+
title: `Schedule: ${schedule.name}`,
|
|
103
|
+
content: result,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
// Emit completed event
|
|
107
|
+
bus.emit({
|
|
108
|
+
type: 'schedule:completed',
|
|
109
|
+
id: crypto.randomUUID(),
|
|
110
|
+
timestamp: new Date(),
|
|
111
|
+
data: { scheduleId: schedule.id, name: schedule.name, result: result.slice(0, 200) },
|
|
112
|
+
});
|
|
113
|
+
log.info({ scheduleId: schedule.id }, 'Schedule completed');
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
117
|
+
log.error({ err, scheduleId: schedule.id }, 'Schedule execution failed');
|
|
118
|
+
// Emit failed event
|
|
119
|
+
bus.emit({
|
|
120
|
+
type: 'schedule:failed',
|
|
121
|
+
id: crypto.randomUUID(),
|
|
122
|
+
timestamp: new Date(),
|
|
123
|
+
data: { scheduleId: schedule.id, name: schedule.name, error: errorMsg },
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/scheduler/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAiB,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1F,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;AAEpD,IAAI,cAAc,GAA0C,IAAI,CAAC;AACjE,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,qBAAqB;AAEtD;;GAEG;AACH,MAAM,UAAU,cAAc;IAC7B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAE9B,eAAe;IACf,IAAI,EAAE,CAAC;IAEP,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,IAAI,EAAE,CAAC;IACR,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC5B,IAAI,cAAc,EAAE,CAAC;QACpB,aAAa,CAAC,cAAc,CAAC,CAAC;QAC9B,cAAc,GAAG,IAAI,CAAC;IACvB,CAAC;AACF,CAAC;AAED,KAAK,UAAU,IAAI;IAClB,IAAI,OAAO;QAAE,OAAO,CAAC,4BAA4B;IACjD,OAAO,GAAG,IAAI,CAAC;IAEf,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,GAAG,KAAK,CAAC;YAChB,OAAO;QACR,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC;QAExD,KAAK,MAAM,QAAQ,IAAI,GAAG,EAAE,CAAC;YAC5B,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACjD,CAAC;YAAS,CAAC;QACV,OAAO,GAAG,KAAK,CAAC;IACjB,CAAC;AACF,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAkB;IAC7C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAE1B,mBAAmB;IACnB,GAAG,CAAC,IAAI,CAAC;QACR,IAAI,EAAE,gBAAgB;QACtB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;KACtD,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAE9E,8CAA8C;IAC9C,MAAM,iBAAiB,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEpD,IAAI,CAAC;QACJ,IAAI,MAAc,CAAC;QAEnB,IAAI,QAAQ,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;YAC5C,2BAA2B;YAC3B,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACP,8BAA8B;YAC9B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAE7F,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC;gBACnC,KAAK;gBACL,SAAS,EAAE,QAAQ,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACvB,MAAM,GAAG,SAAS,CAAC,EAAE;oBACpB,CAAC,CAAC,+BAA+B,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE;oBACnD,CAAC,CAAC,yCAAyC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACP,MAAM,GAAG,WAAW,SAAS,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC;YAC1D,CAAC;QACF,CAAC;QAED,sCAAsC;QACtC,MAAM,OAAO,GACZ,QAAQ,CAAC,UAAU,KAAK,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC;QAE3F,oDAAoD;QACpD,IAAI,QAAQ,CAAC,UAAU,KAAK,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC1D,MAAM,aAAa,CAAC;gBACnB,OAAO,EAAE,QAAQ,CAAC,QAAQ;gBAC1B,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,aAAa,QAAQ,CAAC,IAAI,EAAE;gBACnC,OAAO,EAAE,MAAM;aACf,CAAC,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,GAAG,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,oBAAoB;YAC1B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SACpF,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,2BAA2B,CAAC,CAAC;QAEzE,oBAAoB;QACpB,GAAG,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,iBAAiB;YACvB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;SACvE,CAAC,CAAC;IACJ,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { initSkills, listInstalledSkills, getSkill, installSkill, installSkillFromUrl, removeSkill, activateSkill, deactivateSkill, getActiveSkills, getActiveSkillsContent, } from './store.js';
|
|
2
|
+
export type { Skill, SkillActivation } from './store.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,sBAAsB,GACtB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,sBAAsB,GACtB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface Skill {
|
|
2
|
+
name: string;
|
|
3
|
+
content: string;
|
|
4
|
+
filePath: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SkillActivation {
|
|
7
|
+
skillName: string;
|
|
8
|
+
targetType: 'orchestrator' | 'squad';
|
|
9
|
+
targetId: string | null;
|
|
10
|
+
activatedAt: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Initialize the skills directory.
|
|
14
|
+
*/
|
|
15
|
+
export declare function initSkills(dataDir: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* List all installed skills.
|
|
18
|
+
*/
|
|
19
|
+
export declare function listInstalledSkills(): Skill[];
|
|
20
|
+
/**
|
|
21
|
+
* Read a specific skill by name.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getSkill(name: string): Skill | null;
|
|
24
|
+
/**
|
|
25
|
+
* Install a skill from content (e.g., fetched from URL or provided directly).
|
|
26
|
+
*/
|
|
27
|
+
export declare function installSkill(name: string, content: string): Skill;
|
|
28
|
+
/**
|
|
29
|
+
* Install a skill from a URL (fetches raw content).
|
|
30
|
+
*/
|
|
31
|
+
export declare function installSkillFromUrl(name: string, url: string): Promise<Skill>;
|
|
32
|
+
/**
|
|
33
|
+
* Remove an installed skill.
|
|
34
|
+
*/
|
|
35
|
+
export declare function removeSkill(name: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Activate a skill for a target (orchestrator or a specific squad).
|
|
38
|
+
*/
|
|
39
|
+
export declare function activateSkill(skillName: string, targetType: 'orchestrator' | 'squad', targetId?: string): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Deactivate a skill for a target.
|
|
42
|
+
*/
|
|
43
|
+
export declare function deactivateSkill(skillName: string, targetType: 'orchestrator' | 'squad', targetId?: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Get all activations for a target.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getActiveSkills(targetType: 'orchestrator' | 'squad', targetId?: string): Promise<SkillActivation[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Get the combined content of all active skills for a target (for system prompt injection).
|
|
50
|
+
*/
|
|
51
|
+
export declare function getActiveSkillsContent(targetType: 'orchestrator' | 'squad', targetId?: string): Promise<string>;
|
|
52
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/skills/store.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC;IACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACpB;AAID;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,KAAK,EAAE,CAiB7C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAQnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAOjE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAOnF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQ9C;AAED;;GAEG;AACH,wBAAsB,aAAa,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,cAAc,GAAG,OAAO,EACpC,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,eAAe,CACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,cAAc,GAAG,OAAO,EACpC,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAOf;AAaD;;GAEG;AACH,wBAAsB,eAAe,CACpC,UAAU,EAAE,cAAc,GAAG,OAAO,EACpC,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,EAAE,CAAC,CAa5B;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC3C,UAAU,EAAE,cAAc,GAAG,OAAO,EACpC,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAajB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { createChildLogger } from '../logging/logger.js';
|
|
4
|
+
import { getDatabase } from '../store/db.js';
|
|
5
|
+
const logger = () => createChildLogger('skills');
|
|
6
|
+
let skillsRoot = '';
|
|
7
|
+
/**
|
|
8
|
+
* Initialize the skills directory.
|
|
9
|
+
*/
|
|
10
|
+
export function initSkills(dataDir) {
|
|
11
|
+
skillsRoot = join(dataDir, 'skills');
|
|
12
|
+
mkdirSync(skillsRoot, { recursive: true });
|
|
13
|
+
logger().info({ skillsRoot }, 'Skills directory initialized');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* List all installed skills.
|
|
17
|
+
*/
|
|
18
|
+
export function listInstalledSkills() {
|
|
19
|
+
if (!existsSync(skillsRoot))
|
|
20
|
+
return [];
|
|
21
|
+
const dirs = readdirSync(skillsRoot, { withFileTypes: true }).filter((d) => d.isDirectory());
|
|
22
|
+
const skills = [];
|
|
23
|
+
for (const dir of dirs) {
|
|
24
|
+
const skillPath = join(skillsRoot, dir.name, 'SKILL.md');
|
|
25
|
+
if (existsSync(skillPath)) {
|
|
26
|
+
skills.push({
|
|
27
|
+
name: dir.name,
|
|
28
|
+
content: readFileSync(skillPath, 'utf-8'),
|
|
29
|
+
filePath: skillPath,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return skills;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Read a specific skill by name.
|
|
37
|
+
*/
|
|
38
|
+
export function getSkill(name) {
|
|
39
|
+
const skillPath = join(skillsRoot, name, 'SKILL.md');
|
|
40
|
+
if (!existsSync(skillPath))
|
|
41
|
+
return null;
|
|
42
|
+
return {
|
|
43
|
+
name,
|
|
44
|
+
content: readFileSync(skillPath, 'utf-8'),
|
|
45
|
+
filePath: skillPath,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Install a skill from content (e.g., fetched from URL or provided directly).
|
|
50
|
+
*/
|
|
51
|
+
export function installSkill(name, content) {
|
|
52
|
+
const skillDir = join(skillsRoot, name);
|
|
53
|
+
mkdirSync(skillDir, { recursive: true });
|
|
54
|
+
const skillPath = join(skillDir, 'SKILL.md');
|
|
55
|
+
writeFileSync(skillPath, content, 'utf-8');
|
|
56
|
+
logger().info({ name }, 'Skill installed');
|
|
57
|
+
return { name, content, filePath: skillPath };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Install a skill from a URL (fetches raw content).
|
|
61
|
+
*/
|
|
62
|
+
export async function installSkillFromUrl(name, url) {
|
|
63
|
+
const res = await fetch(url);
|
|
64
|
+
if (!res.ok) {
|
|
65
|
+
throw new Error(`Failed to fetch skill from ${url}: ${res.status} ${res.statusText}`);
|
|
66
|
+
}
|
|
67
|
+
const content = await res.text();
|
|
68
|
+
return installSkill(name, content);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Remove an installed skill.
|
|
72
|
+
*/
|
|
73
|
+
export function removeSkill(name) {
|
|
74
|
+
const skillDir = join(skillsRoot, name);
|
|
75
|
+
if (existsSync(skillDir)) {
|
|
76
|
+
rmSync(skillDir, { recursive: true });
|
|
77
|
+
logger().info({ name }, 'Skill removed');
|
|
78
|
+
}
|
|
79
|
+
// Also remove all activations
|
|
80
|
+
deactivateSkillAll(name);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Activate a skill for a target (orchestrator or a specific squad).
|
|
84
|
+
*/
|
|
85
|
+
export async function activateSkill(skillName, targetType, targetId) {
|
|
86
|
+
const db = await getDatabase();
|
|
87
|
+
await db.execute({
|
|
88
|
+
sql: `INSERT OR IGNORE INTO skill_activations (skill_name, target_type, target_id, activated_at)
|
|
89
|
+
VALUES (?, ?, ?, datetime('now'))`,
|
|
90
|
+
args: [skillName, targetType, targetId ?? null],
|
|
91
|
+
});
|
|
92
|
+
logger().info({ skillName, targetType, targetId }, 'Skill activated');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Deactivate a skill for a target.
|
|
96
|
+
*/
|
|
97
|
+
export async function deactivateSkill(skillName, targetType, targetId) {
|
|
98
|
+
const db = await getDatabase();
|
|
99
|
+
await db.execute({
|
|
100
|
+
sql: 'DELETE FROM skill_activations WHERE skill_name = ? AND target_type = ? AND (target_id = ? OR (target_id IS NULL AND ? IS NULL))',
|
|
101
|
+
args: [skillName, targetType, targetId ?? null, targetId ?? null],
|
|
102
|
+
});
|
|
103
|
+
logger().info({ skillName, targetType, targetId }, 'Skill deactivated');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Remove all activations for a skill.
|
|
107
|
+
*/
|
|
108
|
+
async function deactivateSkillAll(skillName) {
|
|
109
|
+
const db = await getDatabase();
|
|
110
|
+
await db.execute({
|
|
111
|
+
sql: 'DELETE FROM skill_activations WHERE skill_name = ?',
|
|
112
|
+
args: [skillName],
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get all activations for a target.
|
|
117
|
+
*/
|
|
118
|
+
export async function getActiveSkills(targetType, targetId) {
|
|
119
|
+
const db = await getDatabase();
|
|
120
|
+
const result = await db.execute({
|
|
121
|
+
sql: `SELECT skill_name, target_type, target_id, activated_at FROM skill_activations
|
|
122
|
+
WHERE target_type = ? AND (target_id = ? OR (target_id IS NULL AND ? IS NULL))`,
|
|
123
|
+
args: [targetType, targetId ?? null, targetId ?? null],
|
|
124
|
+
});
|
|
125
|
+
return result.rows.map((r) => ({
|
|
126
|
+
skillName: r.skill_name,
|
|
127
|
+
targetType: r.target_type,
|
|
128
|
+
targetId: r.target_id,
|
|
129
|
+
activatedAt: r.activated_at,
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get the combined content of all active skills for a target (for system prompt injection).
|
|
134
|
+
*/
|
|
135
|
+
export async function getActiveSkillsContent(targetType, targetId) {
|
|
136
|
+
const activations = await getActiveSkills(targetType, targetId);
|
|
137
|
+
if (activations.length === 0)
|
|
138
|
+
return '';
|
|
139
|
+
const sections = [];
|
|
140
|
+
for (const activation of activations) {
|
|
141
|
+
const skill = getSkill(activation.skillName);
|
|
142
|
+
if (skill) {
|
|
143
|
+
sections.push(`### Skill: ${skill.name}\n${skill.content}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return sections.length > 0 ? `\n## Active Skills\n${sections.join('\n\n')}` : '';
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/skills/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { AgentStatus } from '@io/shared';
|
|
2
|
+
import { type SkillDefinition } from './skill-parser.js';
|
|
3
|
+
export interface AgentConfig {
|
|
4
|
+
skill: SkillDefinition;
|
|
5
|
+
squadId: string;
|
|
6
|
+
squadName: string;
|
|
7
|
+
instanceId?: string;
|
|
8
|
+
model?: string;
|
|
9
|
+
identity?: {
|
|
10
|
+
displayName: string;
|
|
11
|
+
persona?: string;
|
|
12
|
+
universe?: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface AgentMessage {
|
|
16
|
+
role: 'user' | 'system';
|
|
17
|
+
content: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Base agent class. Each agent has its own Copilot session, enforces
|
|
21
|
+
* tool allowlists from its SKILL.md, and emits events on the bus.
|
|
22
|
+
*/
|
|
23
|
+
export declare class Agent {
|
|
24
|
+
readonly role: string;
|
|
25
|
+
readonly squadId: string;
|
|
26
|
+
readonly squadName: string;
|
|
27
|
+
readonly instanceId?: string;
|
|
28
|
+
private session;
|
|
29
|
+
private skill;
|
|
30
|
+
private model;
|
|
31
|
+
private identity?;
|
|
32
|
+
private logger;
|
|
33
|
+
private _status;
|
|
34
|
+
constructor(config: AgentConfig);
|
|
35
|
+
get status(): AgentStatus;
|
|
36
|
+
/** Initialize the agent's Copilot session */
|
|
37
|
+
init(squadContext?: string): Promise<void>;
|
|
38
|
+
/** Send a message and get a response */
|
|
39
|
+
send(content: string): Promise<string>;
|
|
40
|
+
/** Destroy the agent's session */
|
|
41
|
+
destroy(): Promise<void>;
|
|
42
|
+
/** Build allowed tools for this agent based on SKILL.md */
|
|
43
|
+
private buildTools;
|
|
44
|
+
private emitEvent;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/squad/agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,YAAY,CAAC;AAY1D,OAAO,EAAE,KAAK,eAAe,EAAuB,MAAM,mBAAmB,CAAC;AAE9E,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,qBAAa,KAAK;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,CAA+D;IAChF,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,OAAO,CAAuB;gBAE1B,MAAM,EAAE,WAAW;IAa/B,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,6CAA6C;IACvC,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhD,wCAAwC;IAClC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB5C,kCAAkC;IAC5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,2DAA2D;IAC3D,OAAO,CAAC,UAAU;IA6LlB,OAAO,CAAC,SAAS;CAgBjB"}
|