@soleri/core 7.0.0 → 8.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/agency/agency-manager.d.ts +27 -1
- package/dist/agency/agency-manager.d.ts.map +1 -1
- package/dist/agency/agency-manager.js +180 -9
- package/dist/agency/agency-manager.js.map +1 -1
- package/dist/agency/default-rules.d.ts +7 -0
- package/dist/agency/default-rules.d.ts.map +1 -0
- package/dist/agency/default-rules.js +79 -0
- package/dist/agency/default-rules.js.map +1 -0
- package/dist/agency/types.d.ts +48 -0
- package/dist/agency/types.d.ts.map +1 -1
- package/dist/brain/brain.d.ts +17 -2
- package/dist/brain/brain.d.ts.map +1 -1
- package/dist/brain/brain.js +118 -8
- package/dist/brain/brain.js.map +1 -1
- package/dist/brain/knowledge-synthesizer.d.ts +37 -0
- package/dist/brain/knowledge-synthesizer.d.ts.map +1 -0
- package/dist/brain/knowledge-synthesizer.js +161 -0
- package/dist/brain/knowledge-synthesizer.js.map +1 -0
- package/dist/brain/learning-radar.d.ts +96 -0
- package/dist/brain/learning-radar.d.ts.map +1 -0
- package/dist/brain/learning-radar.js +202 -0
- package/dist/brain/learning-radar.js.map +1 -0
- package/dist/brain/types.d.ts +15 -0
- package/dist/brain/types.d.ts.map +1 -1
- package/dist/context/context-engine.d.ts.map +1 -1
- package/dist/context/context-engine.js +82 -17
- package/dist/context/context-engine.js.map +1 -1
- package/dist/context/types.d.ts +5 -0
- package/dist/context/types.d.ts.map +1 -1
- package/dist/control/intent-router.d.ts +12 -1
- package/dist/control/intent-router.d.ts.map +1 -1
- package/dist/control/intent-router.js +68 -0
- package/dist/control/intent-router.js.map +1 -1
- package/dist/control/types.d.ts +17 -0
- package/dist/control/types.d.ts.map +1 -1
- package/dist/curator/classifier.d.ts +18 -0
- package/dist/curator/classifier.d.ts.map +1 -0
- package/dist/curator/classifier.js +61 -0
- package/dist/curator/classifier.js.map +1 -0
- package/dist/curator/quality-gate.d.ts +29 -0
- package/dist/curator/quality-gate.d.ts.map +1 -0
- package/dist/curator/quality-gate.js +88 -0
- package/dist/curator/quality-gate.js.map +1 -0
- package/dist/engine/bin/soleri-engine.js +1 -0
- package/dist/engine/bin/soleri-engine.js.map +1 -1
- package/dist/events/event-bus.d.ts +30 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +51 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/flows/chain-runner.d.ts +46 -0
- package/dist/flows/chain-runner.d.ts.map +1 -0
- package/dist/flows/chain-runner.js +271 -0
- package/dist/flows/chain-runner.js.map +1 -0
- package/dist/flows/chain-types.d.ts +103 -0
- package/dist/flows/chain-types.d.ts.map +1 -0
- package/dist/flows/chain-types.js +23 -0
- package/dist/flows/chain-types.js.map +1 -0
- package/dist/health/doctor-checks.d.ts +15 -0
- package/dist/health/doctor-checks.d.ts.map +1 -0
- package/dist/health/doctor-checks.js +98 -0
- package/dist/health/doctor-checks.js.map +1 -0
- package/dist/intake/text-ingester.d.ts +52 -0
- package/dist/intake/text-ingester.d.ts.map +1 -0
- package/dist/intake/text-ingester.js +181 -0
- package/dist/intake/text-ingester.js.map +1 -0
- package/dist/llm/llm-client.d.ts.map +1 -1
- package/dist/llm/llm-client.js +37 -1
- package/dist/llm/llm-client.js.map +1 -1
- package/dist/llm/oauth-discovery.d.ts +26 -0
- package/dist/llm/oauth-discovery.d.ts.map +1 -0
- package/dist/llm/oauth-discovery.js +149 -0
- package/dist/llm/oauth-discovery.js.map +1 -0
- package/dist/planning/evidence-collector.d.ts +41 -0
- package/dist/planning/evidence-collector.d.ts.map +1 -0
- package/dist/planning/evidence-collector.js +194 -0
- package/dist/planning/evidence-collector.js.map +1 -0
- package/dist/planning/planner.d.ts +4 -0
- package/dist/planning/planner.d.ts.map +1 -1
- package/dist/planning/planner.js +11 -0
- package/dist/planning/planner.js.map +1 -1
- package/dist/queue/job-queue.d.ts +92 -0
- package/dist/queue/job-queue.d.ts.map +1 -0
- package/dist/queue/job-queue.js +180 -0
- package/dist/queue/job-queue.js.map +1 -0
- package/dist/queue/pipeline-runner.d.ts +62 -0
- package/dist/queue/pipeline-runner.d.ts.map +1 -0
- package/dist/queue/pipeline-runner.js +126 -0
- package/dist/queue/pipeline-runner.js.map +1 -0
- package/dist/runtime/admin-setup-ops.d.ts +20 -0
- package/dist/runtime/admin-setup-ops.d.ts.map +1 -0
- package/dist/runtime/admin-setup-ops.js +583 -0
- package/dist/runtime/admin-setup-ops.js.map +1 -0
- package/dist/runtime/chain-ops.d.ts +9 -0
- package/dist/runtime/chain-ops.d.ts.map +1 -0
- package/dist/runtime/chain-ops.js +107 -0
- package/dist/runtime/chain-ops.js.map +1 -0
- package/dist/runtime/claude-md-helpers.d.ts +65 -0
- package/dist/runtime/claude-md-helpers.d.ts.map +1 -0
- package/dist/runtime/claude-md-helpers.js +173 -0
- package/dist/runtime/claude-md-helpers.js.map +1 -0
- package/dist/runtime/curator-extra-ops.d.ts +3 -2
- package/dist/runtime/curator-extra-ops.d.ts.map +1 -1
- package/dist/runtime/curator-extra-ops.js +81 -3
- package/dist/runtime/curator-extra-ops.js.map +1 -1
- package/dist/runtime/facades/admin-facade.d.ts.map +1 -1
- package/dist/runtime/facades/admin-facade.js +4 -0
- package/dist/runtime/facades/admin-facade.js.map +1 -1
- package/dist/runtime/facades/agency-facade.d.ts.map +1 -1
- package/dist/runtime/facades/agency-facade.js +64 -0
- package/dist/runtime/facades/agency-facade.js.map +1 -1
- package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
- package/dist/runtime/facades/brain-facade.js +122 -1
- package/dist/runtime/facades/brain-facade.js.map +1 -1
- package/dist/runtime/facades/control-facade.d.ts.map +1 -1
- package/dist/runtime/facades/control-facade.js +42 -0
- package/dist/runtime/facades/control-facade.js.map +1 -1
- package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
- package/dist/runtime/facades/memory-facade.js +20 -2
- package/dist/runtime/facades/memory-facade.js.map +1 -1
- package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
- package/dist/runtime/facades/plan-facade.js +2 -0
- package/dist/runtime/facades/plan-facade.js.map +1 -1
- package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
- package/dist/runtime/facades/vault-facade.js +25 -5
- package/dist/runtime/facades/vault-facade.js.map +1 -1
- package/dist/runtime/intake-ops.d.ts +7 -5
- package/dist/runtime/intake-ops.d.ts.map +1 -1
- package/dist/runtime/intake-ops.js +98 -5
- package/dist/runtime/intake-ops.js.map +1 -1
- package/dist/runtime/memory-extra-ops.d.ts +6 -3
- package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
- package/dist/runtime/memory-extra-ops.js +292 -4
- package/dist/runtime/memory-extra-ops.js.map +1 -1
- package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
- package/dist/runtime/planning-extra-ops.js +85 -0
- package/dist/runtime/planning-extra-ops.js.map +1 -1
- package/dist/runtime/playbook-ops.js +1 -1
- package/dist/runtime/playbook-ops.js.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +143 -2
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/session-briefing.d.ts +23 -0
- package/dist/runtime/session-briefing.d.ts.map +1 -0
- package/dist/runtime/session-briefing.js +140 -0
- package/dist/runtime/session-briefing.js.map +1 -0
- package/dist/runtime/types.d.ts +23 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/vault-linking-ops.d.ts.map +1 -1
- package/dist/runtime/vault-linking-ops.js +1 -3
- package/dist/runtime/vault-linking-ops.js.map +1 -1
- package/dist/vault/vault.d.ts +25 -0
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +67 -3
- package/dist/vault/vault.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/admin-setup-ops.test.ts +355 -0
- package/src/__tests__/async-infrastructure.test.ts +307 -0
- package/src/__tests__/cognee-client-gaps.test.ts +6 -2
- package/src/__tests__/cognee-hybrid-search.test.ts +49 -35
- package/src/__tests__/cognee-sync-manager-deep.test.ts +89 -65
- package/src/__tests__/curator-extra-ops.test.ts +6 -2
- package/src/__tests__/curator-pipeline-e2e.test.ts +358 -0
- package/src/__tests__/memory-extra-ops.test.ts +2 -2
- package/src/__tests__/planning-extra-ops.test.ts +2 -2
- package/src/__tests__/second-brain-features.test.ts +583 -0
- package/src/agency/agency-manager.ts +217 -9
- package/src/agency/default-rules.ts +83 -0
- package/src/agency/types.ts +61 -0
- package/src/brain/brain.ts +110 -8
- package/src/brain/knowledge-synthesizer.ts +218 -0
- package/src/brain/learning-radar.ts +340 -0
- package/src/brain/types.ts +16 -0
- package/src/context/context-engine.ts +114 -15
- package/src/context/types.ts +5 -0
- package/src/control/intent-router.ts +107 -0
- package/src/control/types.ts +10 -0
- package/src/curator/classifier.ts +88 -0
- package/src/curator/quality-gate.ts +129 -0
- package/src/engine/bin/soleri-engine.ts +1 -0
- package/src/events/event-bus.ts +58 -0
- package/src/flows/chain-runner.ts +369 -0
- package/src/flows/chain-types.ts +57 -0
- package/src/health/doctor-checks.ts +115 -0
- package/src/intake/text-ingester.ts +234 -0
- package/src/llm/llm-client.ts +38 -1
- package/src/llm/oauth-discovery.ts +169 -0
- package/src/planning/evidence-collector.ts +247 -0
- package/src/planning/planner.ts +11 -0
- package/src/queue/job-queue.ts +281 -0
- package/src/queue/pipeline-runner.ts +149 -0
- package/src/runtime/admin-setup-ops.ts +664 -0
- package/src/runtime/chain-ops.ts +121 -0
- package/src/runtime/claude-md-helpers.ts +236 -0
- package/src/runtime/curator-extra-ops.ts +86 -3
- package/src/runtime/facades/admin-facade.ts +4 -0
- package/src/runtime/facades/agency-facade.ts +68 -0
- package/src/runtime/facades/brain-facade.ts +142 -1
- package/src/runtime/facades/control-facade.ts +45 -0
- package/src/runtime/facades/memory-facade.ts +20 -2
- package/src/runtime/facades/plan-facade.ts +2 -0
- package/src/runtime/facades/vault-facade.ts +28 -5
- package/src/runtime/intake-ops.ts +107 -5
- package/src/runtime/memory-extra-ops.ts +312 -4
- package/src/runtime/planning-extra-ops.ts +94 -0
- package/src/runtime/playbook-ops.ts +1 -1
- package/src/runtime/runtime.ts +138 -2
- package/src/runtime/session-briefing.ts +161 -0
- package/src/runtime/types.ts +23 -0
- package/src/runtime/vault-linking-ops.ts +1 -3
- package/src/vault/vault.ts +79 -4
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job Queue — SQLite-backed FIFO queue with DAG dependencies and retries.
|
|
3
|
+
*
|
|
4
|
+
* Generic infrastructure — not curator-specific. Reusable by agency, intake, etc.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Persistent jobs (survive process restarts)
|
|
8
|
+
* - DAG dependency resolution (job B waits for job A)
|
|
9
|
+
* - Pipeline grouping (group related jobs under one ID)
|
|
10
|
+
* - Configurable retries with max limit
|
|
11
|
+
* - Status tracking: pending → running → completed | failed
|
|
12
|
+
*/
|
|
13
|
+
import { randomUUID } from 'node:crypto';
|
|
14
|
+
// ─── Class ───────────────────────────────────────────────────────────
|
|
15
|
+
export class JobQueue {
|
|
16
|
+
provider;
|
|
17
|
+
constructor(provider) {
|
|
18
|
+
this.provider = provider;
|
|
19
|
+
this.initializeTable();
|
|
20
|
+
}
|
|
21
|
+
initializeTable() {
|
|
22
|
+
this.provider.execSql(`
|
|
23
|
+
CREATE TABLE IF NOT EXISTS job_queue (
|
|
24
|
+
id TEXT PRIMARY KEY,
|
|
25
|
+
type TEXT NOT NULL,
|
|
26
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
27
|
+
entry_id TEXT,
|
|
28
|
+
payload TEXT DEFAULT '{}',
|
|
29
|
+
depends_on TEXT DEFAULT '[]',
|
|
30
|
+
pipeline_id TEXT,
|
|
31
|
+
retry_count INTEGER DEFAULT 0,
|
|
32
|
+
max_retries INTEGER DEFAULT 3,
|
|
33
|
+
result TEXT,
|
|
34
|
+
error TEXT,
|
|
35
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
36
|
+
started_at TEXT,
|
|
37
|
+
completed_at TEXT
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_job_queue_status ON job_queue(status);
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_job_queue_pipeline ON job_queue(pipeline_id);
|
|
42
|
+
`);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Enqueue a new job. Returns the job ID.
|
|
46
|
+
*/
|
|
47
|
+
enqueue(type, options) {
|
|
48
|
+
const id = randomUUID().slice(0, 12);
|
|
49
|
+
this.provider.run(`INSERT INTO job_queue (id, type, entry_id, payload, depends_on, pipeline_id, max_retries)
|
|
50
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`, [
|
|
51
|
+
id,
|
|
52
|
+
type,
|
|
53
|
+
options?.entryId ?? null,
|
|
54
|
+
JSON.stringify(options?.payload ?? {}),
|
|
55
|
+
JSON.stringify(options?.dependsOn ?? []),
|
|
56
|
+
options?.pipelineId ?? null,
|
|
57
|
+
options?.maxRetries ?? 3,
|
|
58
|
+
]);
|
|
59
|
+
return id;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Dequeue the oldest pending job with all dependencies completed.
|
|
63
|
+
* Marks it as running. Returns null if no ready jobs.
|
|
64
|
+
*/
|
|
65
|
+
dequeue() {
|
|
66
|
+
const ready = this.dequeueReady(1);
|
|
67
|
+
return ready.length > 0 ? ready[0] : null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Dequeue up to `limit` pending jobs whose dependencies are all completed.
|
|
71
|
+
*/
|
|
72
|
+
dequeueReady(limit = 10) {
|
|
73
|
+
const rows = this.provider.all("SELECT * FROM job_queue WHERE status = 'pending' ORDER BY created_at ASC LIMIT ?", [limit * 3]);
|
|
74
|
+
const ready = [];
|
|
75
|
+
for (const row of rows) {
|
|
76
|
+
if (ready.length >= limit)
|
|
77
|
+
break;
|
|
78
|
+
const deps = JSON.parse(row.depends_on);
|
|
79
|
+
if (deps.length === 0 || this.allDepsCompleted(deps)) {
|
|
80
|
+
this.provider.run("UPDATE job_queue SET status = 'running', started_at = datetime('now') WHERE id = ?", [row.id]);
|
|
81
|
+
const job = rowToJob(row);
|
|
82
|
+
job.status = 'running';
|
|
83
|
+
ready.push(job);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return ready;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Mark a job as completed with an optional result.
|
|
90
|
+
*/
|
|
91
|
+
complete(jobId, result) {
|
|
92
|
+
this.provider.run("UPDATE job_queue SET status = 'completed', completed_at = datetime('now'), result = ? WHERE id = ?", [result !== undefined ? JSON.stringify(result) : null, jobId]);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Mark a job as failed with an error message.
|
|
96
|
+
*/
|
|
97
|
+
fail(jobId, error) {
|
|
98
|
+
this.provider.run("UPDATE job_queue SET status = 'failed', completed_at = datetime('now'), error = ? WHERE id = ?", [error, jobId]);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Retry a failed job (resets to pending). Returns false if max retries exceeded.
|
|
102
|
+
*/
|
|
103
|
+
retry(jobId) {
|
|
104
|
+
const row = this.provider.get('SELECT * FROM job_queue WHERE id = ?', [jobId]);
|
|
105
|
+
if (!row)
|
|
106
|
+
return false;
|
|
107
|
+
if (row.retry_count >= row.max_retries)
|
|
108
|
+
return false;
|
|
109
|
+
this.provider.run("UPDATE job_queue SET status = 'pending', retry_count = retry_count + 1, error = NULL, started_at = NULL, completed_at = NULL WHERE id = ?", [jobId]);
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get queue statistics.
|
|
114
|
+
*/
|
|
115
|
+
getStats() {
|
|
116
|
+
const rows = this.provider.all('SELECT status, COUNT(*) as count FROM job_queue GROUP BY status');
|
|
117
|
+
const byStatus = {};
|
|
118
|
+
let total = 0;
|
|
119
|
+
for (const row of rows) {
|
|
120
|
+
byStatus[row.status] = row.count;
|
|
121
|
+
total += row.count;
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
pending: byStatus['pending'] ?? 0,
|
|
125
|
+
running: byStatus['running'] ?? 0,
|
|
126
|
+
completed: byStatus['completed'] ?? 0,
|
|
127
|
+
failed: byStatus['failed'] ?? 0,
|
|
128
|
+
total,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get all jobs for a pipeline.
|
|
133
|
+
*/
|
|
134
|
+
getByPipeline(pipelineId) {
|
|
135
|
+
const rows = this.provider.all('SELECT * FROM job_queue WHERE pipeline_id = ? ORDER BY created_at ASC', [pipelineId]);
|
|
136
|
+
return rows.map(rowToJob);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get a single job by ID.
|
|
140
|
+
*/
|
|
141
|
+
get(jobId) {
|
|
142
|
+
const row = this.provider.get('SELECT * FROM job_queue WHERE id = ?', [jobId]);
|
|
143
|
+
return row ? rowToJob(row) : null;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Purge completed/failed jobs older than N days.
|
|
147
|
+
*/
|
|
148
|
+
purge(olderThanDays = 30) {
|
|
149
|
+
const result = this.provider.run("DELETE FROM job_queue WHERE status IN ('completed', 'failed') AND completed_at < datetime('now', ?)", [`-${olderThanDays} days`]);
|
|
150
|
+
return result.changes;
|
|
151
|
+
}
|
|
152
|
+
// ─── Internal ──────────────────────────────────────────────────────
|
|
153
|
+
allDepsCompleted(deps) {
|
|
154
|
+
for (const depId of deps) {
|
|
155
|
+
const row = this.provider.get('SELECT status FROM job_queue WHERE id = ?', [depId]);
|
|
156
|
+
if (!row || row.status !== 'completed')
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function rowToJob(row) {
|
|
163
|
+
return {
|
|
164
|
+
id: row.id,
|
|
165
|
+
type: row.type,
|
|
166
|
+
status: row.status,
|
|
167
|
+
entryId: row.entry_id,
|
|
168
|
+
payload: JSON.parse(row.payload),
|
|
169
|
+
dependsOn: JSON.parse(row.depends_on),
|
|
170
|
+
pipelineId: row.pipeline_id,
|
|
171
|
+
retryCount: row.retry_count,
|
|
172
|
+
maxRetries: row.max_retries,
|
|
173
|
+
result: row.result ? JSON.parse(row.result) : null,
|
|
174
|
+
error: row.error,
|
|
175
|
+
createdAt: row.created_at,
|
|
176
|
+
startedAt: row.started_at,
|
|
177
|
+
completedAt: row.completed_at,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=job-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-queue.js","sourceRoot":"","sources":["../../src/queue/job-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline Runner — background polling loop for DAG job execution.
|
|
3
|
+
*
|
|
4
|
+
* Polls the job queue for ready jobs (dependencies completed),
|
|
5
|
+
* dispatches them to registered handlers, and marks them complete/failed.
|
|
6
|
+
*
|
|
7
|
+
* Generic — handlers are registered by type, any module can add its own.
|
|
8
|
+
*/
|
|
9
|
+
import type { JobQueue, Job } from './job-queue.js';
|
|
10
|
+
export type JobHandler = (job: Job) => Promise<unknown>;
|
|
11
|
+
export interface PipelineRunnerStatus {
|
|
12
|
+
running: boolean;
|
|
13
|
+
pollIntervalMs: number;
|
|
14
|
+
tickCount: number;
|
|
15
|
+
jobsProcessed: number;
|
|
16
|
+
jobsFailed: number;
|
|
17
|
+
jobsRetried: number;
|
|
18
|
+
lastTickAt: string | null;
|
|
19
|
+
}
|
|
20
|
+
export declare class PipelineRunner {
|
|
21
|
+
private queue;
|
|
22
|
+
private handlers;
|
|
23
|
+
private pollIntervalMs;
|
|
24
|
+
private running;
|
|
25
|
+
private timer;
|
|
26
|
+
private tickCount;
|
|
27
|
+
private jobsProcessed;
|
|
28
|
+
private jobsFailed;
|
|
29
|
+
private jobsRetried;
|
|
30
|
+
private lastTickAt;
|
|
31
|
+
private processing;
|
|
32
|
+
constructor(queue: JobQueue, pollIntervalMs?: number);
|
|
33
|
+
/**
|
|
34
|
+
* Register a handler for a job type. When a job of this type is dequeued,
|
|
35
|
+
* the handler is called. Return value is stored as the job result.
|
|
36
|
+
*/
|
|
37
|
+
registerHandler(type: string, handler: JobHandler): void;
|
|
38
|
+
/**
|
|
39
|
+
* Start background polling. Idempotent — calling start() twice is safe.
|
|
40
|
+
*/
|
|
41
|
+
start(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Stop background polling.
|
|
44
|
+
*/
|
|
45
|
+
stop(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Process one batch of ready jobs immediately (without waiting for poll).
|
|
48
|
+
* Useful for testing or manual triggering.
|
|
49
|
+
*/
|
|
50
|
+
processOnce(batchSize?: number): Promise<number>;
|
|
51
|
+
/**
|
|
52
|
+
* Get runner status.
|
|
53
|
+
*/
|
|
54
|
+
getStatus(): PipelineRunnerStatus;
|
|
55
|
+
/**
|
|
56
|
+
* Check if a handler is registered for a job type.
|
|
57
|
+
*/
|
|
58
|
+
hasHandler(type: string): boolean;
|
|
59
|
+
private tick;
|
|
60
|
+
private processBatch;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=pipeline-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-runner.d.ts","sourceRoot":"","sources":["../../src/queue/pipeline-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAIpD,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAS;gBAEf,KAAK,EAAE,QAAQ,EAAE,cAAc,GAAE,MAAa;IAK1D;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAIxD;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;;OAGG;IACG,WAAW,CAAC,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzD;;OAEG;IACH,SAAS,IAAI,oBAAoB;IAYjC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAMjC,OAAO,CAAC,IAAI;YASE,YAAY;CAkC3B"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline Runner — background polling loop for DAG job execution.
|
|
3
|
+
*
|
|
4
|
+
* Polls the job queue for ready jobs (dependencies completed),
|
|
5
|
+
* dispatches them to registered handlers, and marks them complete/failed.
|
|
6
|
+
*
|
|
7
|
+
* Generic — handlers are registered by type, any module can add its own.
|
|
8
|
+
*/
|
|
9
|
+
// ─── Class ───────────────────────────────────────────────────────────
|
|
10
|
+
export class PipelineRunner {
|
|
11
|
+
queue;
|
|
12
|
+
handlers = new Map();
|
|
13
|
+
pollIntervalMs;
|
|
14
|
+
running = false;
|
|
15
|
+
timer = null;
|
|
16
|
+
tickCount = 0;
|
|
17
|
+
jobsProcessed = 0;
|
|
18
|
+
jobsFailed = 0;
|
|
19
|
+
jobsRetried = 0;
|
|
20
|
+
lastTickAt = null;
|
|
21
|
+
processing = false;
|
|
22
|
+
constructor(queue, pollIntervalMs = 5000) {
|
|
23
|
+
this.queue = queue;
|
|
24
|
+
this.pollIntervalMs = pollIntervalMs;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Register a handler for a job type. When a job of this type is dequeued,
|
|
28
|
+
* the handler is called. Return value is stored as the job result.
|
|
29
|
+
*/
|
|
30
|
+
registerHandler(type, handler) {
|
|
31
|
+
this.handlers.set(type, handler);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Start background polling. Idempotent — calling start() twice is safe.
|
|
35
|
+
*/
|
|
36
|
+
start() {
|
|
37
|
+
if (this.running)
|
|
38
|
+
return;
|
|
39
|
+
this.running = true;
|
|
40
|
+
this.timer = setInterval(() => this.tick(), this.pollIntervalMs);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Stop background polling.
|
|
44
|
+
*/
|
|
45
|
+
stop() {
|
|
46
|
+
this.running = false;
|
|
47
|
+
if (this.timer) {
|
|
48
|
+
clearInterval(this.timer);
|
|
49
|
+
this.timer = null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Process one batch of ready jobs immediately (without waiting for poll).
|
|
54
|
+
* Useful for testing or manual triggering.
|
|
55
|
+
*/
|
|
56
|
+
async processOnce(batchSize = 5) {
|
|
57
|
+
return this.processBatch(batchSize);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get runner status.
|
|
61
|
+
*/
|
|
62
|
+
getStatus() {
|
|
63
|
+
return {
|
|
64
|
+
running: this.running,
|
|
65
|
+
pollIntervalMs: this.pollIntervalMs,
|
|
66
|
+
tickCount: this.tickCount,
|
|
67
|
+
jobsProcessed: this.jobsProcessed,
|
|
68
|
+
jobsFailed: this.jobsFailed,
|
|
69
|
+
jobsRetried: this.jobsRetried,
|
|
70
|
+
lastTickAt: this.lastTickAt,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if a handler is registered for a job type.
|
|
75
|
+
*/
|
|
76
|
+
hasHandler(type) {
|
|
77
|
+
return this.handlers.has(type);
|
|
78
|
+
}
|
|
79
|
+
// ─── Internal ──────────────────────────────────────────────────────
|
|
80
|
+
tick() {
|
|
81
|
+
if (this.processing)
|
|
82
|
+
return; // Skip if previous tick still running
|
|
83
|
+
this.tickCount++;
|
|
84
|
+
this.lastTickAt = new Date().toISOString();
|
|
85
|
+
this.processBatch(5).catch(() => {
|
|
86
|
+
/* best-effort */
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async processBatch(batchSize) {
|
|
90
|
+
this.processing = true;
|
|
91
|
+
let processed = 0;
|
|
92
|
+
try {
|
|
93
|
+
const jobs = this.queue.dequeueReady(batchSize);
|
|
94
|
+
for (const job of jobs) {
|
|
95
|
+
const handler = this.handlers.get(job.type);
|
|
96
|
+
if (!handler) {
|
|
97
|
+
this.queue.fail(job.id, `No handler registered for job type: ${job.type}`);
|
|
98
|
+
this.jobsFailed++;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const result = await handler(job);
|
|
103
|
+
this.queue.complete(job.id, result);
|
|
104
|
+
this.jobsProcessed++;
|
|
105
|
+
processed++;
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
109
|
+
const retried = this.queue.retry(job.id);
|
|
110
|
+
if (retried) {
|
|
111
|
+
this.jobsRetried++;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
this.queue.fail(job.id, errorMsg);
|
|
115
|
+
this.jobsFailed++;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
this.processing = false;
|
|
122
|
+
}
|
|
123
|
+
return processed;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=pipeline-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-runner.js","sourceRoot":"","sources":["../../src/queue/pipeline-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin setup operations — 4 ops for agent self-installation.
|
|
3
|
+
*
|
|
4
|
+
* inject_claude_md: Inject agent sections into CLAUDE.md
|
|
5
|
+
* admin_setup_global: Install hooks + skills + settings.json lifecycle hooks
|
|
6
|
+
* admin_setup_project: Project-level hook management (analyze/cleanup/install)
|
|
7
|
+
* admin_check_persistence: Diagnostic — check plan/task/check storage status
|
|
8
|
+
*
|
|
9
|
+
* Ported from Salvador MCP. Key adaptations:
|
|
10
|
+
* - Runtime-config-driven (no vault manifest dependency)
|
|
11
|
+
* - Agent-scoped markers for multi-agent coexistence
|
|
12
|
+
* - OpDefinition[] pattern (not standalone tool files)
|
|
13
|
+
*/
|
|
14
|
+
import type { OpDefinition } from '../facades/types.js';
|
|
15
|
+
import type { AgentRuntime } from './types.js';
|
|
16
|
+
/**
|
|
17
|
+
* Create 4 admin setup operations.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createAdminSetupOps(runtime: AgentRuntime): OpDefinition[];
|
|
20
|
+
//# sourceMappingURL=admin-setup-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-setup-ops.d.ts","sourceRoot":"","sources":["../../src/runtime/admin-setup-ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAeH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAwM/C;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,EAAE,CAgbzE"}
|