nightshift-mcp 1.1.2 → 2.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/README.md +25 -17
- package/dist/daemon.d.ts +21 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +208 -8
- package/dist/daemon.js.map +1 -1
- package/dist/database.d.ts +139 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +503 -0
- package/dist/database.js.map +1 -0
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -25,22 +25,28 @@ An MCP (Model Context Protocol) server for agent teams and multi-agent orchestra
|
|
|
25
25
|
- **Workflow management**: Phases, strategic decisions, and agent assignments
|
|
26
26
|
- **Watch/polling**: Monitor for new messages with cursor-based polling
|
|
27
27
|
- **Auto-archiving**: Archive old messages to keep the chat file manageable
|
|
28
|
-
- **Cross-platform**: Works on Windows, Linux, and macOS
|
|
28
|
+
- **Cross-platform**: Works on Windows, Linux, and macOS with platform-safe process management
|
|
29
29
|
- **Heterogeneous agent teams**: Mix different AI models — use each for what it's best at
|
|
30
30
|
- **Universal compatibility**: Works with any MCP-supporting tool (49 tools across 10 categories)
|
|
31
31
|
- **Flexible savepoints**: Git-based checkpoints when available, JSON state snapshots when not
|
|
32
|
-
- **
|
|
32
|
+
- **SQLite-backed storage**: ACID transactions, indexed queries, zero external services required
|
|
33
|
+
- **Autoresearch**: Built-in agent performance analytics — success rates, duration, scope leak tracking
|
|
33
34
|
|
|
34
|
-
## What's New in
|
|
35
|
+
## What's New in 2.0.0
|
|
35
36
|
|
|
36
|
-
- **
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
39
|
-
- **
|
|
40
|
-
- **
|
|
41
|
-
- **
|
|
42
|
-
- **
|
|
43
|
-
|
|
37
|
+
- **SQLite data layer**: ACID transactions replace scattered JSON/text files. All state stored in `.robot-chat/nightshift.db` with WAL mode for concurrent access. Migration path to PostgreSQL.
|
|
38
|
+
- **Circuit breaker**: Proper CLOSED/OPEN/HALF\_OPEN state machine tracks per-agent health. Auto-disables failing agents after configurable threshold, re-enables after cooldown. Persisted across daemon restarts.
|
|
39
|
+
- **Immutable audit trail**: Append-only `audit_log` table records every agent spawn, completion, failure, circuit break, and stuck-agent kill. Feeds directly into autoresearch.
|
|
40
|
+
- **Run records**: Structured execution history for every agent run — duration, exit status, files changed, scope leak detection, verification results.
|
|
41
|
+
- **Budget tracking**: Per-agent cost tracking with enable/disable toggle. Daily and monthly limits with configurable warning thresholds. Ready for OpenRouter integration.
|
|
42
|
+
- **Autoresearch queries**: Built-in analytics — agent success rates, average duration, scope leak rates. Data accumulates automatically for future intelligent agent routing.
|
|
43
|
+
- **Dependency security**: MCP SDK upgraded to 1.28.0, all production dependency vulnerabilities resolved.
|
|
44
|
+
|
|
45
|
+
### Previous releases
|
|
46
|
+
|
|
47
|
+
**1.1.0**: Local model support (Ollama/Goose), agent availability checks, PRD dependencies (`dependsOn`), PRD tags for routing, optional savepoints, persistent agent tracking, benchmark suite.
|
|
48
|
+
|
|
49
|
+
**1.0.10**: NightShift CLI (`nightshift` command), daemon manager fixes for Windows, goose agent support.
|
|
44
50
|
|
|
45
51
|
## Installation
|
|
46
52
|
|
|
@@ -500,9 +506,9 @@ With multiple agents working together:
|
|
|
500
506
|
│ │ │ │ │ │ │
|
|
501
507
|
│ ▼ ▼ ▼ ▼ ▼ │
|
|
502
508
|
│ ┌────────┐ ┌────────┐ ┌────┐ ┌──────────┐ ┌──────────┐ │
|
|
503
|
-
│ │prd.json│ │progress│ │Code│ │
|
|
504
|
-
│ │(tasks) │ │ .txt │ │ │ │
|
|
505
|
-
│ │ │ │ │ │ │ │
|
|
509
|
+
│ │prd.json│ │progress│ │Code│ │nightshift│ │ audit │ │
|
|
510
|
+
│ │(tasks) │ │ .txt │ │ │ │ .db │ │ trail │ │
|
|
511
|
+
│ │ │ │ │ │ │ │ (SQLite) │ │(immutable│ │
|
|
506
512
|
│ └────────┘ └────────┘ └────┘ └──────────┘ └──────────┘ │
|
|
507
513
|
│ │
|
|
508
514
|
└──────────────────────────────────────────────────────────────────┘
|
|
@@ -835,9 +841,11 @@ The daemon provides hands-off multi-agent orchestration:
|
|
|
835
841
|
2. **Auto-Spawning**: Spawns agents for orphaned stories (up to concurrency limit)
|
|
836
842
|
3. **Failover Handling**: Automatically claims and reassigns failover requests
|
|
837
843
|
4. **Smart Retry**: Tracks failed agents per story and tries a different agent on retry
|
|
838
|
-
5. **
|
|
839
|
-
6. **
|
|
840
|
-
7. **
|
|
844
|
+
5. **Circuit Breaker**: Per-agent health tracking — auto-disables after consecutive failures, re-enables after cooldown
|
|
845
|
+
6. **Health Checks**: Periodic reconciliation as a fallback (default: every 2 min)
|
|
846
|
+
7. **Poison Pill Protection**: Quarantines stories that fail repeatedly
|
|
847
|
+
8. **Stuck Detection**: Kills agents that haven't reported activity
|
|
848
|
+
9. **Audit Trail**: Every spawn, completion, failure, and circuit break is recorded in SQLite
|
|
841
849
|
|
|
842
850
|
### Options
|
|
843
851
|
|
package/dist/daemon.d.ts
CHANGED
|
@@ -16,15 +16,20 @@ interface DaemonConfig {
|
|
|
16
16
|
agents: AgentType[];
|
|
17
17
|
verbose: boolean;
|
|
18
18
|
dryRun: boolean;
|
|
19
|
+
circuitBreakerThreshold: number;
|
|
20
|
+
circuitBreakerCooldownMs: number;
|
|
19
21
|
}
|
|
22
|
+
type CircuitState = "CLOSED" | "OPEN" | "HALF_OPEN";
|
|
20
23
|
export declare class NightShiftDaemon {
|
|
21
24
|
private config;
|
|
22
25
|
private ralph;
|
|
23
26
|
private chat;
|
|
24
27
|
private workflow;
|
|
28
|
+
private db;
|
|
25
29
|
private running;
|
|
26
30
|
private activeAgents;
|
|
27
31
|
private storyStates;
|
|
32
|
+
private agentCircuits;
|
|
28
33
|
private availableAgents;
|
|
29
34
|
private agentIndex;
|
|
30
35
|
private prdWatcher;
|
|
@@ -47,6 +52,22 @@ export declare class NightShiftDaemon {
|
|
|
47
52
|
private onPrdChanged;
|
|
48
53
|
private onChatChanged;
|
|
49
54
|
private handleFailover;
|
|
55
|
+
private initializeCircuits;
|
|
56
|
+
private recordAgentFailure;
|
|
57
|
+
private recordAgentSuccess;
|
|
58
|
+
/**
|
|
59
|
+
* Try to reserve an agent for work. Returns true if the agent is available.
|
|
60
|
+
* For HALF_OPEN state, only one probe is allowed at a time.
|
|
61
|
+
*/
|
|
62
|
+
private tryReserveAgent;
|
|
63
|
+
private releaseProbe;
|
|
64
|
+
private getHealthyAgents;
|
|
65
|
+
getCircuitStatus(): Record<string, {
|
|
66
|
+
state: CircuitState;
|
|
67
|
+
failures: number;
|
|
68
|
+
successes: number;
|
|
69
|
+
consecutiveFailures: number;
|
|
70
|
+
}>;
|
|
50
71
|
private reconcile;
|
|
51
72
|
private getNextAgent;
|
|
52
73
|
private spawnAgentForStory;
|
package/dist/daemon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAQH,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAQH,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAQ5B,UAAU,YAAY;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,uBAAuB,EAAE,MAAM,CAAC;IAChC,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAmBD,KAAK,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAiBpD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,EAAE,CAAe;IAGzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,aAAa,CAAgD;IACrE,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,UAAU,CAAK;IAGvB,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,eAAe,CAAQ;IAG/B,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,cAAc,CAA0C;IAGhE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE;IA0BnE,OAAO,CAAC,GAAG;IAwBX,OAAO,CAAC,WAAW;IAmCnB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,QAAQ;YAkBF,YAAY;YAKZ,aAAa;YAwBb,cAAc;IA2B5B,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,kBAAkB;IAsC1B,OAAO,CAAC,kBAAkB;IAyB1B;;;OAGG;IACH,OAAO,CAAC,eAAe;IA0CvB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,gBAAgB;IAexB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC;YAiB/G,SAAS;IA6CvB,OAAO,CAAC,YAAY;YAQN,kBAAkB;IAgFhC,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,YAAY;YAaN,WAAW;IA2CzB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,eAAe;YAOT,WAAW;IAgDnB,KAAK;IA0CL,QAAQ;CAuBf"}
|
package/dist/daemon.js
CHANGED
|
@@ -12,6 +12,7 @@ import { ChatManager } from "./chat-manager.js";
|
|
|
12
12
|
import { WorkflowManager } from "./workflow-manager.js";
|
|
13
13
|
import { spawnAgentBackground, getAvailableAgents, } from "./agent-spawner.js";
|
|
14
14
|
import { killProcess, isProcessRunning, getNightshiftCliCommand } from "./platform.js";
|
|
15
|
+
import { NightShiftDB } from "./database.js";
|
|
15
16
|
// ============================================
|
|
16
17
|
// Daemon Class
|
|
17
18
|
// ============================================
|
|
@@ -20,10 +21,12 @@ export class NightShiftDaemon {
|
|
|
20
21
|
ralph;
|
|
21
22
|
chat;
|
|
22
23
|
workflow;
|
|
24
|
+
db;
|
|
23
25
|
// State
|
|
24
26
|
running = false;
|
|
25
27
|
activeAgents = new Map();
|
|
26
28
|
storyStates = new Map();
|
|
29
|
+
agentCircuits = new Map();
|
|
27
30
|
availableAgents = [];
|
|
28
31
|
agentIndex = 0; // Round-robin
|
|
29
32
|
// File watchers
|
|
@@ -47,10 +50,13 @@ export class NightShiftDaemon {
|
|
|
47
50
|
agents: config.agents ?? ["claude", "codex", "gemini", "vibe", "goose", "ollama"],
|
|
48
51
|
verbose: config.verbose ?? false,
|
|
49
52
|
dryRun: config.dryRun ?? false,
|
|
53
|
+
circuitBreakerThreshold: config.circuitBreakerThreshold ?? 3,
|
|
54
|
+
circuitBreakerCooldownMs: config.circuitBreakerCooldownMs ?? 60_000,
|
|
50
55
|
};
|
|
51
56
|
this.ralph = new RalphManager(this.config.projectPath);
|
|
52
57
|
this.chat = new ChatManager(this.config.projectPath);
|
|
53
58
|
this.workflow = new WorkflowManager(this.config.projectPath);
|
|
59
|
+
this.db = new NightShiftDB(this.config.projectPath);
|
|
54
60
|
this.lockFile = path.join(this.config.projectPath, ".robot-chat", "daemon.lock");
|
|
55
61
|
}
|
|
56
62
|
// ============================================
|
|
@@ -229,6 +235,162 @@ export class NightShiftDaemon {
|
|
|
229
235
|
}
|
|
230
236
|
}
|
|
231
237
|
// ============================================
|
|
238
|
+
// Circuit Breaker
|
|
239
|
+
// ============================================
|
|
240
|
+
initializeCircuits() {
|
|
241
|
+
for (const agent of this.availableAgents) {
|
|
242
|
+
// Try to restore persisted state from SQLite
|
|
243
|
+
const persisted = this.db.loadCircuitState(agent);
|
|
244
|
+
const circuit = {
|
|
245
|
+
agent,
|
|
246
|
+
state: persisted?.state ?? "CLOSED",
|
|
247
|
+
consecutiveFailures: persisted?.consecutiveFailures ?? 0,
|
|
248
|
+
brokenSince: persisted?.brokenSince ? new Date(persisted.brokenSince).getTime() : undefined,
|
|
249
|
+
probeInFlight: false,
|
|
250
|
+
cooldownMs: this.config.circuitBreakerCooldownMs,
|
|
251
|
+
totalFailures: persisted?.totalFailures ?? 0,
|
|
252
|
+
totalSuccesses: persisted?.totalSuccesses ?? 0,
|
|
253
|
+
};
|
|
254
|
+
this.agentCircuits.set(agent, circuit);
|
|
255
|
+
if (circuit.state !== "CLOSED") {
|
|
256
|
+
this.log("info", `Restored circuit breaker state for ${agent}: ${circuit.state} (${circuit.consecutiveFailures} consecutive failures)`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
recordAgentFailure(agent) {
|
|
261
|
+
const circuit = this.agentCircuits.get(agent);
|
|
262
|
+
if (!circuit)
|
|
263
|
+
return;
|
|
264
|
+
circuit.consecutiveFailures++;
|
|
265
|
+
circuit.totalFailures++;
|
|
266
|
+
if (circuit.state === "HALF_OPEN") {
|
|
267
|
+
// Probe failed — reopen with fresh cooldown
|
|
268
|
+
circuit.state = "OPEN";
|
|
269
|
+
circuit.brokenSince = Date.now();
|
|
270
|
+
circuit.probeInFlight = false;
|
|
271
|
+
this.log("warn", `Circuit breaker re-OPENED for ${agent} — half-open probe failed, restarting cooldown`);
|
|
272
|
+
this.db.appendAudit("circuit_break", { transition: "HALF_OPEN->OPEN", consecutiveFailures: circuit.consecutiveFailures }, agent);
|
|
273
|
+
}
|
|
274
|
+
else if (circuit.state === "CLOSED" && circuit.consecutiveFailures >= this.config.circuitBreakerThreshold) {
|
|
275
|
+
// Threshold reached — open the circuit
|
|
276
|
+
circuit.state = "OPEN";
|
|
277
|
+
circuit.brokenSince = Date.now();
|
|
278
|
+
this.log("warn", `Circuit breaker OPEN for ${agent} — disabled after ${circuit.consecutiveFailures} consecutive failures`);
|
|
279
|
+
this.db.appendAudit("circuit_break", { transition: "CLOSED->OPEN", consecutiveFailures: circuit.consecutiveFailures, cooldownMs: circuit.cooldownMs }, agent);
|
|
280
|
+
this.chat.writeMessage({
|
|
281
|
+
agent: "NightShift",
|
|
282
|
+
type: "ERROR",
|
|
283
|
+
content: `Circuit breaker tripped for ${agent}: ${circuit.consecutiveFailures} consecutive failures. Agent disabled for ${circuit.cooldownMs / 1000}s cooldown.`,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
// Persist circuit state
|
|
287
|
+
this.db.saveCircuitState(agent, {
|
|
288
|
+
state: circuit.state,
|
|
289
|
+
consecutiveFailures: circuit.consecutiveFailures,
|
|
290
|
+
brokenSince: circuit.brokenSince ? new Date(circuit.brokenSince).toISOString() : undefined,
|
|
291
|
+
totalFailures: circuit.totalFailures,
|
|
292
|
+
totalSuccesses: circuit.totalSuccesses,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
recordAgentSuccess(agent) {
|
|
296
|
+
const circuit = this.agentCircuits.get(agent);
|
|
297
|
+
if (!circuit)
|
|
298
|
+
return;
|
|
299
|
+
const prevState = circuit.state;
|
|
300
|
+
circuit.consecutiveFailures = 0;
|
|
301
|
+
circuit.state = "CLOSED";
|
|
302
|
+
circuit.brokenSince = undefined;
|
|
303
|
+
circuit.probeInFlight = false;
|
|
304
|
+
circuit.totalSuccesses++;
|
|
305
|
+
if (prevState !== "CLOSED") {
|
|
306
|
+
this.log("info", `Circuit breaker CLOSED for ${agent} — recovered after successful run`);
|
|
307
|
+
this.db.appendAudit("circuit_break", { transition: `${prevState}->CLOSED` }, agent);
|
|
308
|
+
}
|
|
309
|
+
// Persist circuit state
|
|
310
|
+
this.db.saveCircuitState(agent, {
|
|
311
|
+
state: circuit.state,
|
|
312
|
+
consecutiveFailures: circuit.consecutiveFailures,
|
|
313
|
+
totalFailures: circuit.totalFailures,
|
|
314
|
+
totalSuccesses: circuit.totalSuccesses,
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Try to reserve an agent for work. Returns true if the agent is available.
|
|
319
|
+
* For HALF_OPEN state, only one probe is allowed at a time.
|
|
320
|
+
*/
|
|
321
|
+
tryReserveAgent(agent) {
|
|
322
|
+
const circuit = this.agentCircuits.get(agent);
|
|
323
|
+
if (!circuit)
|
|
324
|
+
return true;
|
|
325
|
+
switch (circuit.state) {
|
|
326
|
+
case "CLOSED":
|
|
327
|
+
return true;
|
|
328
|
+
case "OPEN": {
|
|
329
|
+
// Check if cooldown has elapsed
|
|
330
|
+
const elapsed = Date.now() - (circuit.brokenSince ?? 0);
|
|
331
|
+
if (elapsed >= circuit.cooldownMs) {
|
|
332
|
+
// Transition to HALF_OPEN, reserve probe
|
|
333
|
+
circuit.state = "HALF_OPEN";
|
|
334
|
+
circuit.probeInFlight = true;
|
|
335
|
+
this.log("info", `Circuit breaker HALF-OPEN for ${agent} — cooldown expired, allowing single probe`);
|
|
336
|
+
this.db.appendAudit("circuit_break", { transition: "OPEN->HALF_OPEN" }, agent);
|
|
337
|
+
this.db.saveCircuitState(agent, {
|
|
338
|
+
state: circuit.state,
|
|
339
|
+
consecutiveFailures: circuit.consecutiveFailures,
|
|
340
|
+
brokenSince: circuit.brokenSince ? new Date(circuit.brokenSince).toISOString() : undefined,
|
|
341
|
+
totalFailures: circuit.totalFailures,
|
|
342
|
+
totalSuccesses: circuit.totalSuccesses,
|
|
343
|
+
});
|
|
344
|
+
return true;
|
|
345
|
+
}
|
|
346
|
+
return false; // Still in cooldown
|
|
347
|
+
}
|
|
348
|
+
case "HALF_OPEN":
|
|
349
|
+
// Only allow if no probe is already in flight
|
|
350
|
+
if (!circuit.probeInFlight) {
|
|
351
|
+
circuit.probeInFlight = true;
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
return false; // Probe already running
|
|
355
|
+
default:
|
|
356
|
+
return false;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
releaseProbe(agent) {
|
|
360
|
+
const circuit = this.agentCircuits.get(agent);
|
|
361
|
+
if (circuit?.state === "HALF_OPEN" && circuit.probeInFlight) {
|
|
362
|
+
circuit.probeInFlight = false;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
getHealthyAgents() {
|
|
366
|
+
// Note: this is a read-only check for filtering, does NOT reserve
|
|
367
|
+
return this.availableAgents.filter(a => {
|
|
368
|
+
const circuit = this.agentCircuits.get(a);
|
|
369
|
+
if (!circuit)
|
|
370
|
+
return true;
|
|
371
|
+
if (circuit.state === "CLOSED")
|
|
372
|
+
return true;
|
|
373
|
+
if (circuit.state === "OPEN") {
|
|
374
|
+
const elapsed = Date.now() - (circuit.brokenSince ?? 0);
|
|
375
|
+
return elapsed >= circuit.cooldownMs;
|
|
376
|
+
}
|
|
377
|
+
// HALF_OPEN: available only if no probe in flight
|
|
378
|
+
return !circuit.probeInFlight;
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
getCircuitStatus() {
|
|
382
|
+
const status = {};
|
|
383
|
+
for (const [agent, circuit] of this.agentCircuits) {
|
|
384
|
+
status[agent] = {
|
|
385
|
+
state: circuit.state,
|
|
386
|
+
failures: circuit.totalFailures,
|
|
387
|
+
successes: circuit.totalSuccesses,
|
|
388
|
+
consecutiveFailures: circuit.consecutiveFailures,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
return status;
|
|
392
|
+
}
|
|
393
|
+
// ============================================
|
|
232
394
|
// Reconciliation Loop
|
|
233
395
|
// ============================================
|
|
234
396
|
async reconcile() {
|
|
@@ -275,17 +437,29 @@ export class NightShiftDaemon {
|
|
|
275
437
|
async spawnAgentForStory(storyId) {
|
|
276
438
|
const storyState = this.storyStates.get(storyId);
|
|
277
439
|
const failedAgents = storyState?.failedAgents ?? [];
|
|
278
|
-
// Pick an agent that hasn't failed for this story
|
|
279
|
-
const
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
440
|
+
// Pick an agent that hasn't failed for this story AND can be reserved (circuit check)
|
|
441
|
+
const healthyAgents = this.getHealthyAgents();
|
|
442
|
+
const eligibleAgents = healthyAgents.filter((a) => !failedAgents.includes(a));
|
|
443
|
+
const candidates = eligibleAgents.length > 0 ? eligibleAgents : healthyAgents;
|
|
444
|
+
// Try to reserve an agent (handles HALF_OPEN single-probe enforcement)
|
|
445
|
+
let agent = null;
|
|
446
|
+
if (candidates.length > 0) {
|
|
447
|
+
const startIdx = this.agentIndex++;
|
|
448
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
449
|
+
const candidate = candidates[(startIdx + i) % candidates.length];
|
|
450
|
+
if (this.tryReserveAgent(candidate)) {
|
|
451
|
+
agent = candidate;
|
|
452
|
+
break;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
283
456
|
if (!agent) {
|
|
284
457
|
this.log("warn", "No agents available");
|
|
285
458
|
return;
|
|
286
459
|
}
|
|
287
460
|
if (this.config.dryRun) {
|
|
288
461
|
this.log("info", `[DRY RUN] Would spawn ${agent} for ${storyId}`);
|
|
462
|
+
this.releaseProbe(agent);
|
|
289
463
|
return;
|
|
290
464
|
}
|
|
291
465
|
this.log("info", `Spawning ${agent} for ${storyId}`);
|
|
@@ -293,6 +467,7 @@ export class NightShiftDaemon {
|
|
|
293
467
|
const story = this.ralph.getStory(storyId);
|
|
294
468
|
if (!story) {
|
|
295
469
|
this.log("error", `Story ${storyId} not found`);
|
|
470
|
+
this.releaseProbe(agent);
|
|
296
471
|
return;
|
|
297
472
|
}
|
|
298
473
|
// Build prompt
|
|
@@ -312,6 +487,11 @@ export class NightShiftDaemon {
|
|
|
312
487
|
lastActivity: Date.now(),
|
|
313
488
|
outputFile: result.outputFile,
|
|
314
489
|
});
|
|
490
|
+
// Audit: agent spawned
|
|
491
|
+
this.db.appendAudit("spawn", {
|
|
492
|
+
pid: result.pid,
|
|
493
|
+
storyTitle: story.title,
|
|
494
|
+
}, agent, storyId);
|
|
315
495
|
// Post to chat
|
|
316
496
|
this.chat.writeMessage({
|
|
317
497
|
agent: "NightShift",
|
|
@@ -368,16 +548,27 @@ ${progress ? progress.substring(0, 2000) : "No progress file yet."}
|
|
|
368
548
|
if (!agentProc)
|
|
369
549
|
return;
|
|
370
550
|
this.log("info", `Agent ${agentProc.agent} (PID: ${pid}) exited for ${storyId}`);
|
|
551
|
+
const duration = Date.now() - agentProc.startTime;
|
|
371
552
|
// Check if story is complete
|
|
372
553
|
const story = this.ralph.getStory(storyId);
|
|
373
554
|
if (story?.passes) {
|
|
374
|
-
this.log("info",
|
|
555
|
+
this.log("info", `${storyId} completed successfully`);
|
|
556
|
+
this.recordAgentSuccess(agentProc.agent);
|
|
375
557
|
this.activeAgents.delete(storyId);
|
|
558
|
+
// Audit + run record: success
|
|
559
|
+
this.db.appendAudit("complete", { duration_ms: duration }, agentProc.agent, storyId);
|
|
560
|
+
this.db.insertRunRecord({ story_id: storyId, agent: agentProc.agent, status: "success", duration_ms: duration });
|
|
376
561
|
}
|
|
377
562
|
else {
|
|
378
|
-
// Agent exited without completing - record failure
|
|
563
|
+
// Agent exited without completing - record failure on both story and circuit breaker
|
|
564
|
+
this.recordAgentFailure(agentProc.agent);
|
|
379
565
|
this.incrementRetry(storyId, agentProc.agent);
|
|
380
566
|
this.activeAgents.delete(storyId);
|
|
567
|
+
// Classify exit: short runs are likely crashes, long runs are likely timeouts
|
|
568
|
+
const exitStatus = duration < this.config.stuckTimeout / 2 ? "failed" : "timeout";
|
|
569
|
+
// Audit + run record: failure
|
|
570
|
+
this.db.appendAudit("fail", { duration_ms: duration, exitStatus, retryCount: this.storyStates.get(storyId)?.retryCount }, agentProc.agent, storyId);
|
|
571
|
+
this.db.insertRunRecord({ story_id: storyId, agent: agentProc.agent, status: exitStatus, duration_ms: duration });
|
|
381
572
|
if (this.isQuarantined(storyId)) {
|
|
382
573
|
const state = this.storyStates.get(storyId);
|
|
383
574
|
this.log("warn", `${storyId} quarantined after ${this.config.maxRetries} failures (tried: ${state?.failedAgents.join(", ")})`);
|
|
@@ -429,13 +620,18 @@ ${progress ? progress.substring(0, 2000) : "No progress file yet."}
|
|
|
429
620
|
for (const [storyId, proc] of this.activeAgents) {
|
|
430
621
|
const inactiveTime = now - proc.lastActivity;
|
|
431
622
|
if (inactiveTime > this.config.stuckTimeout) {
|
|
623
|
+
const stuckDuration = Date.now() - proc.startTime;
|
|
432
624
|
this.log("warn", `Agent ${proc.agent} stuck on ${storyId} (inactive ${Math.round(inactiveTime / 60000)}min)`);
|
|
433
625
|
// Kill the stuck process using cross-platform killProcess
|
|
434
626
|
if (proc.pid) {
|
|
435
627
|
killProcess(proc.pid, false);
|
|
436
628
|
}
|
|
629
|
+
this.recordAgentFailure(proc.agent);
|
|
437
630
|
this.activeAgents.delete(storyId);
|
|
438
|
-
this.incrementRetry(storyId);
|
|
631
|
+
this.incrementRetry(storyId, proc.agent);
|
|
632
|
+
// Audit + run record for stuck agent
|
|
633
|
+
this.db.appendAudit("fail", { reason: "stuck", inactiveMs: inactiveTime, duration_ms: stuckDuration }, proc.agent, storyId);
|
|
634
|
+
this.db.insertRunRecord({ story_id: storyId, agent: proc.agent, status: "timeout", duration_ms: stuckDuration, error_message: `Agent stuck (inactive ${Math.round(inactiveTime / 60000)}min)` });
|
|
439
635
|
}
|
|
440
636
|
}
|
|
441
637
|
// 2. Check for unclaimed failovers
|
|
@@ -472,6 +668,8 @@ ${progress ? progress.substring(0, 2000) : "No progress file yet."}
|
|
|
472
668
|
}
|
|
473
669
|
this.availableAgents = configuredAgents;
|
|
474
670
|
this.log("info", `Available agents: ${this.availableAgents.join(", ")}`);
|
|
671
|
+
// Initialize circuit breakers for each available agent
|
|
672
|
+
this.initializeCircuits();
|
|
475
673
|
this.running = true;
|
|
476
674
|
// Start event watchers (primary)
|
|
477
675
|
this.startWatchers();
|
|
@@ -496,6 +694,8 @@ ${progress ? progress.substring(0, 2000) : "No progress file yet."}
|
|
|
496
694
|
this.stopWatchers();
|
|
497
695
|
// Release lock
|
|
498
696
|
this.releaseLock();
|
|
697
|
+
// Close database
|
|
698
|
+
this.db.close();
|
|
499
699
|
this.log("info", "Daemon stopped");
|
|
500
700
|
process.exit(0);
|
|
501
701
|
}
|
package/dist/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NightShift Database Layer
|
|
3
|
+
*
|
|
4
|
+
* SQLite-backed storage for all NightShift state.
|
|
5
|
+
* Replaces scattered JSON/text files with ACID transactions and indexed queries.
|
|
6
|
+
* Uses better-sqlite3 for synchronous, high-performance access.
|
|
7
|
+
*/
|
|
8
|
+
export declare class NightShiftDB {
|
|
9
|
+
private db;
|
|
10
|
+
private dbPath;
|
|
11
|
+
constructor(projectPath: string);
|
|
12
|
+
private initSchema;
|
|
13
|
+
private getSchemaVersion;
|
|
14
|
+
private setSchemaVersion;
|
|
15
|
+
transaction<T>(fn: () => T): T;
|
|
16
|
+
appendAudit(eventType: string, data: Record<string, unknown>, agent?: string, storyId?: string): number;
|
|
17
|
+
queryAudit(options?: {
|
|
18
|
+
eventType?: string;
|
|
19
|
+
agent?: string;
|
|
20
|
+
storyId?: string;
|
|
21
|
+
limit?: number;
|
|
22
|
+
since?: string;
|
|
23
|
+
}): AuditEntry[];
|
|
24
|
+
insertRunRecord(record: Omit<RunRecord, "id">): number;
|
|
25
|
+
getRunRecords(options?: {
|
|
26
|
+
storyId?: string;
|
|
27
|
+
agent?: string;
|
|
28
|
+
status?: string;
|
|
29
|
+
limit?: number;
|
|
30
|
+
}): RunRecord[];
|
|
31
|
+
addBudgetEntry(entry: Omit<BudgetEntry, "id" | "timestamp">): number;
|
|
32
|
+
getBudgetStatus(agent: string): {
|
|
33
|
+
totalCost: number;
|
|
34
|
+
todayCost: number;
|
|
35
|
+
monthCost: number;
|
|
36
|
+
limit: BudgetLimit | null;
|
|
37
|
+
exceeded: boolean;
|
|
38
|
+
warning: boolean;
|
|
39
|
+
exceededReason?: string;
|
|
40
|
+
};
|
|
41
|
+
setBudgetLimit(agent: string, limit: Partial<BudgetLimit>): void;
|
|
42
|
+
saveCircuitState(agent: string, state: {
|
|
43
|
+
state: string;
|
|
44
|
+
consecutiveFailures: number;
|
|
45
|
+
brokenSince?: string;
|
|
46
|
+
totalFailures: number;
|
|
47
|
+
totalSuccesses: number;
|
|
48
|
+
}): void;
|
|
49
|
+
loadCircuitState(agent: string): {
|
|
50
|
+
state: string;
|
|
51
|
+
consecutiveFailures: number;
|
|
52
|
+
brokenSince?: string;
|
|
53
|
+
totalFailures: number;
|
|
54
|
+
totalSuccesses: number;
|
|
55
|
+
} | null;
|
|
56
|
+
insertChatMessage(agent: string, type: string, content: string): number;
|
|
57
|
+
getChatMessages(options?: {
|
|
58
|
+
agent?: string;
|
|
59
|
+
type?: string;
|
|
60
|
+
limit?: number;
|
|
61
|
+
sinceId?: number;
|
|
62
|
+
}): ChatRow[];
|
|
63
|
+
getAgentSuccessRate(agent?: string): {
|
|
64
|
+
agent: string;
|
|
65
|
+
total: number;
|
|
66
|
+
successes: number;
|
|
67
|
+
rate: number;
|
|
68
|
+
}[];
|
|
69
|
+
getAverageDuration(agent?: string): {
|
|
70
|
+
agent: string;
|
|
71
|
+
avg_duration_ms: number;
|
|
72
|
+
median_stories: number;
|
|
73
|
+
}[];
|
|
74
|
+
getScopeLeakRate(): {
|
|
75
|
+
agent: string;
|
|
76
|
+
total: number;
|
|
77
|
+
leaks: number;
|
|
78
|
+
rate: number;
|
|
79
|
+
}[];
|
|
80
|
+
close(): void;
|
|
81
|
+
getPath(): string;
|
|
82
|
+
}
|
|
83
|
+
export interface AuditEntry {
|
|
84
|
+
id: number;
|
|
85
|
+
event_type: string;
|
|
86
|
+
agent: string | null;
|
|
87
|
+
story_id: string | null;
|
|
88
|
+
data: Record<string, unknown>;
|
|
89
|
+
timestamp: string;
|
|
90
|
+
}
|
|
91
|
+
export interface RunRecord {
|
|
92
|
+
id?: number;
|
|
93
|
+
story_id?: string;
|
|
94
|
+
agent: string;
|
|
95
|
+
model?: string;
|
|
96
|
+
timeout_set_ms?: number;
|
|
97
|
+
duration_ms?: number;
|
|
98
|
+
status: string;
|
|
99
|
+
files_declared?: string[];
|
|
100
|
+
files_actual?: string[];
|
|
101
|
+
scope_leak?: boolean;
|
|
102
|
+
out_of_scope_files?: string[];
|
|
103
|
+
tests_passed?: boolean;
|
|
104
|
+
verification_passed?: boolean;
|
|
105
|
+
rollback_triggered?: boolean;
|
|
106
|
+
diff_stats?: Record<string, unknown>;
|
|
107
|
+
exit_code?: number;
|
|
108
|
+
error_message?: string;
|
|
109
|
+
started_at?: string;
|
|
110
|
+
ended_at?: string;
|
|
111
|
+
}
|
|
112
|
+
export interface BudgetEntry {
|
|
113
|
+
id?: number;
|
|
114
|
+
agent: string;
|
|
115
|
+
provider?: string;
|
|
116
|
+
tokens_in?: number;
|
|
117
|
+
tokens_out?: number;
|
|
118
|
+
estimated_cost_usd?: number;
|
|
119
|
+
story_id?: string;
|
|
120
|
+
run_record_id?: number;
|
|
121
|
+
timestamp?: string;
|
|
122
|
+
}
|
|
123
|
+
export interface BudgetLimit {
|
|
124
|
+
agent: string;
|
|
125
|
+
enabled: boolean;
|
|
126
|
+
max_tokens_per_run?: number;
|
|
127
|
+
max_cost_per_day_usd?: number;
|
|
128
|
+
max_cost_per_month_usd?: number;
|
|
129
|
+
warning_threshold_pct?: number;
|
|
130
|
+
}
|
|
131
|
+
interface ChatRow {
|
|
132
|
+
id: number;
|
|
133
|
+
agent: string;
|
|
134
|
+
type: string;
|
|
135
|
+
content: string;
|
|
136
|
+
timestamp: string;
|
|
137
|
+
}
|
|
138
|
+
export {};
|
|
139
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/dist/database.js
ADDED
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NightShift Database Layer
|
|
3
|
+
*
|
|
4
|
+
* SQLite-backed storage for all NightShift state.
|
|
5
|
+
* Replaces scattered JSON/text files with ACID transactions and indexed queries.
|
|
6
|
+
* Uses better-sqlite3 for synchronous, high-performance access.
|
|
7
|
+
*/
|
|
8
|
+
import Database from "better-sqlite3";
|
|
9
|
+
import * as fs from "fs";
|
|
10
|
+
import * as path from "path";
|
|
11
|
+
// ============================================
|
|
12
|
+
// Schema Version & Migrations
|
|
13
|
+
// ============================================
|
|
14
|
+
const SCHEMA_VERSION = 1;
|
|
15
|
+
const SCHEMA_SQL = `
|
|
16
|
+
-- Schema version tracking
|
|
17
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
18
|
+
version INTEGER NOT NULL,
|
|
19
|
+
applied_at TEXT DEFAULT (datetime('now'))
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
-- Chat messages (replaces chat.txt)
|
|
23
|
+
CREATE TABLE IF NOT EXISTS chat_messages (
|
|
24
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
25
|
+
agent TEXT NOT NULL,
|
|
26
|
+
type TEXT NOT NULL,
|
|
27
|
+
content TEXT NOT NULL,
|
|
28
|
+
timestamp TEXT DEFAULT (datetime('now'))
|
|
29
|
+
);
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_chat_agent ON chat_messages(agent);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_chat_type ON chat_messages(type);
|
|
32
|
+
CREATE INDEX IF NOT EXISTS idx_chat_timestamp ON chat_messages(timestamp);
|
|
33
|
+
|
|
34
|
+
-- Workflow state (replaces workflow.json)
|
|
35
|
+
CREATE TABLE IF NOT EXISTS workflow (
|
|
36
|
+
id INTEGER PRIMARY KEY CHECK (id = 1), -- singleton row
|
|
37
|
+
phase TEXT NOT NULL DEFAULT 'planning',
|
|
38
|
+
project_goal TEXT,
|
|
39
|
+
data TEXT NOT NULL DEFAULT '{}', -- full workflow JSON for complex nested state
|
|
40
|
+
updated_at TEXT DEFAULT (datetime('now'))
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
-- Story assignments (extracted from workflow for better querying)
|
|
44
|
+
CREATE TABLE IF NOT EXISTS story_assignments (
|
|
45
|
+
story_id TEXT PRIMARY KEY,
|
|
46
|
+
agent TEXT NOT NULL,
|
|
47
|
+
status TEXT NOT NULL DEFAULT 'active', -- active, completed, failed, abandoned
|
|
48
|
+
assigned_at TEXT DEFAULT (datetime('now')),
|
|
49
|
+
completed_at TEXT
|
|
50
|
+
);
|
|
51
|
+
CREATE INDEX IF NOT EXISTS idx_assignments_agent ON story_assignments(agent);
|
|
52
|
+
CREATE INDEX IF NOT EXISTS idx_assignments_status ON story_assignments(status);
|
|
53
|
+
|
|
54
|
+
-- Decisions (extracted from workflow)
|
|
55
|
+
CREATE TABLE IF NOT EXISTS decisions (
|
|
56
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
57
|
+
topic TEXT NOT NULL,
|
|
58
|
+
chosen TEXT NOT NULL,
|
|
59
|
+
rationale TEXT,
|
|
60
|
+
agent TEXT,
|
|
61
|
+
timestamp TEXT DEFAULT (datetime('now'))
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
-- Trace events (replaces trace.json)
|
|
65
|
+
CREATE TABLE IF NOT EXISTS trace_events (
|
|
66
|
+
id TEXT PRIMARY KEY,
|
|
67
|
+
parent_id TEXT,
|
|
68
|
+
type TEXT NOT NULL, -- spawn, complete, fail, failover, decision
|
|
69
|
+
agent TEXT NOT NULL,
|
|
70
|
+
task_id TEXT,
|
|
71
|
+
status TEXT NOT NULL DEFAULT 'active', -- active, completed, failed
|
|
72
|
+
outcome TEXT,
|
|
73
|
+
metadata TEXT, -- JSON
|
|
74
|
+
started_at TEXT DEFAULT (datetime('now')),
|
|
75
|
+
ended_at TEXT,
|
|
76
|
+
duration_ms INTEGER
|
|
77
|
+
);
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_trace_parent ON trace_events(parent_id);
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_trace_task ON trace_events(task_id);
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_trace_agent ON trace_events(agent);
|
|
81
|
+
|
|
82
|
+
-- Context store (replaces context/*.json files)
|
|
83
|
+
CREATE TABLE IF NOT EXISTS context_entries (
|
|
84
|
+
id TEXT PRIMARY KEY,
|
|
85
|
+
topic TEXT NOT NULL,
|
|
86
|
+
content TEXT NOT NULL,
|
|
87
|
+
agent TEXT NOT NULL,
|
|
88
|
+
tags TEXT, -- JSON array
|
|
89
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
90
|
+
updated_at TEXT DEFAULT (datetime('now'))
|
|
91
|
+
);
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_context_topic ON context_entries(topic);
|
|
93
|
+
|
|
94
|
+
-- Agent registry (replaces agent-registry.json)
|
|
95
|
+
CREATE TABLE IF NOT EXISTS agent_registry (
|
|
96
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
97
|
+
agent TEXT NOT NULL,
|
|
98
|
+
pid INTEGER,
|
|
99
|
+
output_file TEXT,
|
|
100
|
+
story_id TEXT,
|
|
101
|
+
prompt_preview TEXT, -- first 500 chars
|
|
102
|
+
started_at TEXT DEFAULT (datetime('now')),
|
|
103
|
+
status TEXT NOT NULL DEFAULT 'running' -- running, completed, failed, killed
|
|
104
|
+
);
|
|
105
|
+
CREATE INDEX IF NOT EXISTS idx_registry_agent ON agent_registry(agent);
|
|
106
|
+
CREATE INDEX IF NOT EXISTS idx_registry_status ON agent_registry(status);
|
|
107
|
+
|
|
108
|
+
-- ============================================
|
|
109
|
+
-- NEW v2 tables
|
|
110
|
+
-- ============================================
|
|
111
|
+
|
|
112
|
+
-- Immutable audit log (append-only)
|
|
113
|
+
CREATE TABLE IF NOT EXISTS audit_log (
|
|
114
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
115
|
+
event_type TEXT NOT NULL, -- spawn, complete, fail, rollback, scope_leak, rate_limit, circuit_break, budget_warning, budget_exceeded
|
|
116
|
+
agent TEXT,
|
|
117
|
+
story_id TEXT,
|
|
118
|
+
data TEXT NOT NULL DEFAULT '{}', -- JSON blob with event-specific details
|
|
119
|
+
timestamp TEXT DEFAULT (datetime('now'))
|
|
120
|
+
);
|
|
121
|
+
CREATE INDEX IF NOT EXISTS idx_audit_type ON audit_log(event_type);
|
|
122
|
+
CREATE INDEX IF NOT EXISTS idx_audit_agent ON audit_log(agent);
|
|
123
|
+
CREATE INDEX IF NOT EXISTS idx_audit_story ON audit_log(story_id);
|
|
124
|
+
CREATE INDEX IF NOT EXISTS idx_audit_timestamp ON audit_log(timestamp);
|
|
125
|
+
|
|
126
|
+
-- Run records (for run-guard and autoresearch)
|
|
127
|
+
CREATE TABLE IF NOT EXISTS run_records (
|
|
128
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
129
|
+
story_id TEXT,
|
|
130
|
+
agent TEXT NOT NULL,
|
|
131
|
+
model TEXT,
|
|
132
|
+
timeout_set_ms INTEGER,
|
|
133
|
+
duration_ms INTEGER,
|
|
134
|
+
status TEXT NOT NULL, -- success, verification_failed, scope_leak, timeout, rate_limited, rollback_failed, quarantined
|
|
135
|
+
files_declared TEXT, -- JSON array
|
|
136
|
+
files_actual TEXT, -- JSON array
|
|
137
|
+
scope_leak INTEGER DEFAULT 0,
|
|
138
|
+
out_of_scope_files TEXT, -- JSON array
|
|
139
|
+
tests_passed INTEGER,
|
|
140
|
+
verification_passed INTEGER,
|
|
141
|
+
rollback_triggered INTEGER DEFAULT 0,
|
|
142
|
+
diff_stats TEXT, -- JSON
|
|
143
|
+
exit_code INTEGER,
|
|
144
|
+
error_message TEXT,
|
|
145
|
+
started_at TEXT DEFAULT (datetime('now')),
|
|
146
|
+
ended_at TEXT
|
|
147
|
+
);
|
|
148
|
+
CREATE INDEX IF NOT EXISTS idx_runs_story ON run_records(story_id);
|
|
149
|
+
CREATE INDEX IF NOT EXISTS idx_runs_agent ON run_records(agent);
|
|
150
|
+
CREATE INDEX IF NOT EXISTS idx_runs_status ON run_records(status);
|
|
151
|
+
|
|
152
|
+
-- Budget tracking
|
|
153
|
+
CREATE TABLE IF NOT EXISTS budget_entries (
|
|
154
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
155
|
+
agent TEXT NOT NULL,
|
|
156
|
+
provider TEXT, -- openrouter, anthropic, google, local, ollama
|
|
157
|
+
tokens_in INTEGER DEFAULT 0,
|
|
158
|
+
tokens_out INTEGER DEFAULT 0,
|
|
159
|
+
estimated_cost_usd REAL DEFAULT 0,
|
|
160
|
+
story_id TEXT,
|
|
161
|
+
run_record_id INTEGER REFERENCES run_records(id),
|
|
162
|
+
timestamp TEXT DEFAULT (datetime('now'))
|
|
163
|
+
);
|
|
164
|
+
CREATE INDEX IF NOT EXISTS idx_budget_agent ON budget_entries(agent);
|
|
165
|
+
CREATE INDEX IF NOT EXISTS idx_budget_provider ON budget_entries(provider);
|
|
166
|
+
|
|
167
|
+
-- Budget limits (configurable per agent)
|
|
168
|
+
CREATE TABLE IF NOT EXISTS budget_limits (
|
|
169
|
+
agent TEXT PRIMARY KEY,
|
|
170
|
+
enabled INTEGER DEFAULT 0,
|
|
171
|
+
max_tokens_per_run INTEGER,
|
|
172
|
+
max_cost_per_day_usd REAL,
|
|
173
|
+
max_cost_per_month_usd REAL,
|
|
174
|
+
warning_threshold_pct REAL DEFAULT 0.8
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
-- Circuit breaker state (persisted across restarts)
|
|
178
|
+
CREATE TABLE IF NOT EXISTS circuit_breaker_state (
|
|
179
|
+
agent TEXT PRIMARY KEY,
|
|
180
|
+
state TEXT NOT NULL DEFAULT 'CLOSED', -- CLOSED, OPEN, HALF_OPEN
|
|
181
|
+
consecutive_failures INTEGER DEFAULT 0,
|
|
182
|
+
broken_since TEXT,
|
|
183
|
+
total_failures INTEGER DEFAULT 0,
|
|
184
|
+
total_successes INTEGER DEFAULT 0,
|
|
185
|
+
updated_at TEXT DEFAULT (datetime('now'))
|
|
186
|
+
);
|
|
187
|
+
`;
|
|
188
|
+
// ============================================
|
|
189
|
+
// Database Manager
|
|
190
|
+
// ============================================
|
|
191
|
+
export class NightShiftDB {
|
|
192
|
+
db;
|
|
193
|
+
dbPath;
|
|
194
|
+
constructor(projectPath) {
|
|
195
|
+
const robotChatDir = path.join(projectPath, ".robot-chat");
|
|
196
|
+
if (!fs.existsSync(robotChatDir)) {
|
|
197
|
+
fs.mkdirSync(robotChatDir, { recursive: true });
|
|
198
|
+
}
|
|
199
|
+
this.dbPath = path.join(robotChatDir, "nightshift.db");
|
|
200
|
+
this.db = new Database(this.dbPath);
|
|
201
|
+
// Performance settings
|
|
202
|
+
this.db.pragma("journal_mode = WAL"); // Concurrent readers
|
|
203
|
+
this.db.pragma("synchronous = NORMAL"); // Good durability/performance balance
|
|
204
|
+
this.db.pragma("foreign_keys = ON");
|
|
205
|
+
this.db.pragma("busy_timeout = 5000"); // Wait up to 5s for locks
|
|
206
|
+
this.initSchema();
|
|
207
|
+
}
|
|
208
|
+
initSchema() {
|
|
209
|
+
const version = this.getSchemaVersion();
|
|
210
|
+
if (version < SCHEMA_VERSION) {
|
|
211
|
+
this.db.exec(SCHEMA_SQL);
|
|
212
|
+
this.setSchemaVersion(SCHEMA_VERSION);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
getSchemaVersion() {
|
|
216
|
+
try {
|
|
217
|
+
const row = this.db.prepare("SELECT version FROM schema_version ORDER BY applied_at DESC LIMIT 1").get();
|
|
218
|
+
return row?.version ?? 0;
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return 0; // Table doesn't exist yet
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
setSchemaVersion(version) {
|
|
225
|
+
this.db.prepare("INSERT INTO schema_version (version) VALUES (?)").run(version);
|
|
226
|
+
}
|
|
227
|
+
// ============================================
|
|
228
|
+
// Transaction helper
|
|
229
|
+
// ============================================
|
|
230
|
+
transaction(fn) {
|
|
231
|
+
return this.db.transaction(fn)();
|
|
232
|
+
}
|
|
233
|
+
// ============================================
|
|
234
|
+
// Audit Log (immutable, append-only)
|
|
235
|
+
// ============================================
|
|
236
|
+
appendAudit(eventType, data, agent, storyId) {
|
|
237
|
+
const result = this.db.prepare("INSERT INTO audit_log (event_type, agent, story_id, data) VALUES (?, ?, ?, ?)").run(eventType, agent ?? null, storyId ?? null, JSON.stringify(data));
|
|
238
|
+
return result.lastInsertRowid;
|
|
239
|
+
}
|
|
240
|
+
queryAudit(options = {}) {
|
|
241
|
+
let sql = "SELECT * FROM audit_log WHERE 1=1";
|
|
242
|
+
const params = [];
|
|
243
|
+
if (options.eventType) {
|
|
244
|
+
sql += " AND event_type = ?";
|
|
245
|
+
params.push(options.eventType);
|
|
246
|
+
}
|
|
247
|
+
if (options.agent) {
|
|
248
|
+
sql += " AND agent = ?";
|
|
249
|
+
params.push(options.agent);
|
|
250
|
+
}
|
|
251
|
+
if (options.storyId) {
|
|
252
|
+
sql += " AND story_id = ?";
|
|
253
|
+
params.push(options.storyId);
|
|
254
|
+
}
|
|
255
|
+
if (options.since) {
|
|
256
|
+
sql += " AND timestamp >= ?";
|
|
257
|
+
params.push(options.since);
|
|
258
|
+
}
|
|
259
|
+
sql += " ORDER BY id DESC";
|
|
260
|
+
if (options.limit) {
|
|
261
|
+
sql += " LIMIT ?";
|
|
262
|
+
params.push(options.limit);
|
|
263
|
+
}
|
|
264
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
265
|
+
return rows.map(r => ({ ...r, data: JSON.parse(r.data) }));
|
|
266
|
+
}
|
|
267
|
+
// ============================================
|
|
268
|
+
// Run Records
|
|
269
|
+
// ============================================
|
|
270
|
+
insertRunRecord(record) {
|
|
271
|
+
const result = this.db.prepare(`
|
|
272
|
+
INSERT INTO run_records (story_id, agent, model, timeout_set_ms, duration_ms, status,
|
|
273
|
+
files_declared, files_actual, scope_leak, out_of_scope_files, tests_passed,
|
|
274
|
+
verification_passed, rollback_triggered, diff_stats, exit_code, error_message, started_at, ended_at)
|
|
275
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
276
|
+
`).run(record.story_id ?? null, record.agent, record.model ?? null, record.timeout_set_ms ?? null, record.duration_ms ?? null, record.status, JSON.stringify(record.files_declared ?? []), JSON.stringify(record.files_actual ?? []), record.scope_leak ? 1 : 0, JSON.stringify(record.out_of_scope_files ?? []), record.tests_passed != null ? (record.tests_passed ? 1 : 0) : null, record.verification_passed != null ? (record.verification_passed ? 1 : 0) : null, record.rollback_triggered ? 1 : 0, JSON.stringify(record.diff_stats ?? {}), record.exit_code ?? null, record.error_message ?? null, record.started_at ?? new Date().toISOString(), record.ended_at ?? null);
|
|
277
|
+
return result.lastInsertRowid;
|
|
278
|
+
}
|
|
279
|
+
getRunRecords(options = {}) {
|
|
280
|
+
let sql = "SELECT * FROM run_records WHERE 1=1";
|
|
281
|
+
const params = [];
|
|
282
|
+
if (options.storyId) {
|
|
283
|
+
sql += " AND story_id = ?";
|
|
284
|
+
params.push(options.storyId);
|
|
285
|
+
}
|
|
286
|
+
if (options.agent) {
|
|
287
|
+
sql += " AND agent = ?";
|
|
288
|
+
params.push(options.agent);
|
|
289
|
+
}
|
|
290
|
+
if (options.status) {
|
|
291
|
+
sql += " AND status = ?";
|
|
292
|
+
params.push(options.status);
|
|
293
|
+
}
|
|
294
|
+
sql += " ORDER BY id DESC";
|
|
295
|
+
if (options.limit) {
|
|
296
|
+
sql += " LIMIT ?";
|
|
297
|
+
params.push(options.limit);
|
|
298
|
+
}
|
|
299
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
300
|
+
return rows.map(r => ({
|
|
301
|
+
id: r.id,
|
|
302
|
+
story_id: r.story_id ?? undefined,
|
|
303
|
+
agent: r.agent,
|
|
304
|
+
model: r.model ?? undefined,
|
|
305
|
+
timeout_set_ms: r.timeout_set_ms ?? undefined,
|
|
306
|
+
duration_ms: r.duration_ms ?? undefined,
|
|
307
|
+
status: r.status,
|
|
308
|
+
files_declared: r.files_declared ? JSON.parse(r.files_declared) : [],
|
|
309
|
+
files_actual: r.files_actual ? JSON.parse(r.files_actual) : [],
|
|
310
|
+
scope_leak: r.scope_leak === 1,
|
|
311
|
+
out_of_scope_files: r.out_of_scope_files ? JSON.parse(r.out_of_scope_files) : [],
|
|
312
|
+
tests_passed: r.tests_passed != null ? r.tests_passed === 1 : undefined,
|
|
313
|
+
verification_passed: r.verification_passed != null ? r.verification_passed === 1 : undefined,
|
|
314
|
+
rollback_triggered: r.rollback_triggered === 1,
|
|
315
|
+
diff_stats: r.diff_stats ? JSON.parse(r.diff_stats) : {},
|
|
316
|
+
exit_code: r.exit_code ?? undefined,
|
|
317
|
+
error_message: r.error_message ?? undefined,
|
|
318
|
+
started_at: r.started_at,
|
|
319
|
+
ended_at: r.ended_at ?? undefined,
|
|
320
|
+
}));
|
|
321
|
+
}
|
|
322
|
+
// ============================================
|
|
323
|
+
// Budget
|
|
324
|
+
// ============================================
|
|
325
|
+
addBudgetEntry(entry) {
|
|
326
|
+
const result = this.db.prepare(`
|
|
327
|
+
INSERT INTO budget_entries (agent, provider, tokens_in, tokens_out, estimated_cost_usd, story_id, run_record_id)
|
|
328
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
329
|
+
`).run(entry.agent, entry.provider ?? null, entry.tokens_in ?? 0, entry.tokens_out ?? 0, entry.estimated_cost_usd ?? 0, entry.story_id ?? null, entry.run_record_id ?? null);
|
|
330
|
+
return result.lastInsertRowid;
|
|
331
|
+
}
|
|
332
|
+
getBudgetStatus(agent) {
|
|
333
|
+
const totalRow = this.db.prepare("SELECT COALESCE(SUM(estimated_cost_usd), 0) as total FROM budget_entries WHERE agent = ?").get(agent);
|
|
334
|
+
const todayRow = this.db.prepare("SELECT COALESCE(SUM(estimated_cost_usd), 0) as total FROM budget_entries WHERE agent = ? AND date(timestamp) = date('now')").get(agent);
|
|
335
|
+
const monthRow = this.db.prepare("SELECT COALESCE(SUM(estimated_cost_usd), 0) as total FROM budget_entries WHERE agent = ? AND strftime('%Y-%m', timestamp) = strftime('%Y-%m', 'now')").get(agent);
|
|
336
|
+
const limit = this.db.prepare("SELECT * FROM budget_limits WHERE agent = ?").get(agent);
|
|
337
|
+
const parsedLimit = limit ? {
|
|
338
|
+
agent: limit.agent,
|
|
339
|
+
enabled: limit.enabled === 1,
|
|
340
|
+
max_tokens_per_run: limit.max_tokens_per_run ?? undefined,
|
|
341
|
+
max_cost_per_day_usd: limit.max_cost_per_day_usd ?? undefined,
|
|
342
|
+
max_cost_per_month_usd: limit.max_cost_per_month_usd ?? undefined,
|
|
343
|
+
warning_threshold_pct: limit.warning_threshold_pct ?? undefined,
|
|
344
|
+
} : null;
|
|
345
|
+
let exceeded = false;
|
|
346
|
+
let exceededReason;
|
|
347
|
+
let warning = false;
|
|
348
|
+
if (parsedLimit?.enabled) {
|
|
349
|
+
const warnPct = parsedLimit.warning_threshold_pct ?? 0.8;
|
|
350
|
+
if (parsedLimit.max_cost_per_day_usd != null) {
|
|
351
|
+
if (todayRow.total >= parsedLimit.max_cost_per_day_usd) {
|
|
352
|
+
exceeded = true;
|
|
353
|
+
exceededReason = `Daily limit $${parsedLimit.max_cost_per_day_usd} exceeded ($${todayRow.total.toFixed(4)})`;
|
|
354
|
+
}
|
|
355
|
+
else if (todayRow.total >= parsedLimit.max_cost_per_day_usd * warnPct) {
|
|
356
|
+
warning = true;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
if (parsedLimit.max_cost_per_month_usd != null) {
|
|
360
|
+
if (monthRow.total >= parsedLimit.max_cost_per_month_usd) {
|
|
361
|
+
exceeded = true;
|
|
362
|
+
exceededReason = `Monthly limit $${parsedLimit.max_cost_per_month_usd} exceeded ($${monthRow.total.toFixed(4)})`;
|
|
363
|
+
}
|
|
364
|
+
else if (monthRow.total >= parsedLimit.max_cost_per_month_usd * warnPct) {
|
|
365
|
+
warning = true;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return {
|
|
370
|
+
totalCost: totalRow.total,
|
|
371
|
+
todayCost: todayRow.total,
|
|
372
|
+
monthCost: monthRow.total,
|
|
373
|
+
limit: parsedLimit,
|
|
374
|
+
exceeded,
|
|
375
|
+
warning,
|
|
376
|
+
exceededReason,
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
setBudgetLimit(agent, limit) {
|
|
380
|
+
// Use null sentinel to distinguish "field omitted" from "field set to null/false"
|
|
381
|
+
const enabled = limit.enabled !== undefined ? (limit.enabled ? 1 : 0) : null;
|
|
382
|
+
const maxTokens = limit.max_tokens_per_run !== undefined ? limit.max_tokens_per_run : null;
|
|
383
|
+
const maxDaily = limit.max_cost_per_day_usd !== undefined ? limit.max_cost_per_day_usd : null;
|
|
384
|
+
const maxMonthly = limit.max_cost_per_month_usd !== undefined ? limit.max_cost_per_month_usd : null;
|
|
385
|
+
const warnPct = limit.warning_threshold_pct !== undefined ? limit.warning_threshold_pct : null;
|
|
386
|
+
this.db.prepare(`
|
|
387
|
+
INSERT INTO budget_limits (agent, enabled, max_tokens_per_run, max_cost_per_day_usd, max_cost_per_month_usd, warning_threshold_pct)
|
|
388
|
+
VALUES (?, COALESCE(?, 0), ?, ?, ?, COALESCE(?, 0.8))
|
|
389
|
+
ON CONFLICT(agent) DO UPDATE SET
|
|
390
|
+
enabled = COALESCE(?, enabled),
|
|
391
|
+
max_tokens_per_run = COALESCE(?, max_tokens_per_run),
|
|
392
|
+
max_cost_per_day_usd = COALESCE(?, max_cost_per_day_usd),
|
|
393
|
+
max_cost_per_month_usd = COALESCE(?, max_cost_per_month_usd),
|
|
394
|
+
warning_threshold_pct = COALESCE(?, warning_threshold_pct)
|
|
395
|
+
`).run(agent, enabled, maxTokens, maxDaily, maxMonthly, warnPct, enabled, maxTokens, maxDaily, maxMonthly, warnPct);
|
|
396
|
+
}
|
|
397
|
+
// ============================================
|
|
398
|
+
// Circuit Breaker Persistence
|
|
399
|
+
// ============================================
|
|
400
|
+
saveCircuitState(agent, state) {
|
|
401
|
+
this.db.prepare(`
|
|
402
|
+
INSERT INTO circuit_breaker_state (agent, state, consecutive_failures, broken_since, total_failures, total_successes, updated_at)
|
|
403
|
+
VALUES (?, ?, ?, ?, ?, ?, datetime('now'))
|
|
404
|
+
ON CONFLICT(agent) DO UPDATE SET
|
|
405
|
+
state = excluded.state,
|
|
406
|
+
consecutive_failures = excluded.consecutive_failures,
|
|
407
|
+
broken_since = excluded.broken_since,
|
|
408
|
+
total_failures = excluded.total_failures,
|
|
409
|
+
total_successes = excluded.total_successes,
|
|
410
|
+
updated_at = excluded.updated_at
|
|
411
|
+
`).run(agent, state.state, state.consecutiveFailures, state.brokenSince ?? null, state.totalFailures, state.totalSuccesses);
|
|
412
|
+
}
|
|
413
|
+
loadCircuitState(agent) {
|
|
414
|
+
const row = this.db.prepare("SELECT * FROM circuit_breaker_state WHERE agent = ?").get(agent);
|
|
415
|
+
if (!row)
|
|
416
|
+
return null;
|
|
417
|
+
return {
|
|
418
|
+
state: row.state,
|
|
419
|
+
consecutiveFailures: row.consecutive_failures,
|
|
420
|
+
brokenSince: row.broken_since ?? undefined,
|
|
421
|
+
totalFailures: row.total_failures,
|
|
422
|
+
totalSuccesses: row.total_successes,
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
// ============================================
|
|
426
|
+
// Chat Messages
|
|
427
|
+
// ============================================
|
|
428
|
+
insertChatMessage(agent, type, content) {
|
|
429
|
+
const result = this.db.prepare("INSERT INTO chat_messages (agent, type, content) VALUES (?, ?, ?)").run(agent, type, content);
|
|
430
|
+
return result.lastInsertRowid;
|
|
431
|
+
}
|
|
432
|
+
getChatMessages(options = {}) {
|
|
433
|
+
let sql = "SELECT * FROM chat_messages WHERE 1=1";
|
|
434
|
+
const params = [];
|
|
435
|
+
if (options.agent) {
|
|
436
|
+
sql += " AND agent = ?";
|
|
437
|
+
params.push(options.agent);
|
|
438
|
+
}
|
|
439
|
+
if (options.type) {
|
|
440
|
+
sql += " AND type = ?";
|
|
441
|
+
params.push(options.type);
|
|
442
|
+
}
|
|
443
|
+
if (options.sinceId) {
|
|
444
|
+
sql += " AND id > ?";
|
|
445
|
+
params.push(options.sinceId);
|
|
446
|
+
}
|
|
447
|
+
sql += " ORDER BY id DESC";
|
|
448
|
+
if (options.limit) {
|
|
449
|
+
sql += " LIMIT ?";
|
|
450
|
+
params.push(options.limit);
|
|
451
|
+
}
|
|
452
|
+
return this.db.prepare(sql).all(...params);
|
|
453
|
+
}
|
|
454
|
+
// ============================================
|
|
455
|
+
// Autoresearch Queries
|
|
456
|
+
// ============================================
|
|
457
|
+
getAgentSuccessRate(agent) {
|
|
458
|
+
let sql = `
|
|
459
|
+
SELECT agent, COUNT(*) as total,
|
|
460
|
+
SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) as successes,
|
|
461
|
+
ROUND(CAST(SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) AS REAL) / COUNT(*), 3) as rate
|
|
462
|
+
FROM run_records
|
|
463
|
+
`;
|
|
464
|
+
const params = [];
|
|
465
|
+
if (agent) {
|
|
466
|
+
sql += " WHERE agent = ?";
|
|
467
|
+
params.push(agent);
|
|
468
|
+
}
|
|
469
|
+
sql += " GROUP BY agent ORDER BY rate DESC";
|
|
470
|
+
return this.db.prepare(sql).all(...params);
|
|
471
|
+
}
|
|
472
|
+
getAverageDuration(agent) {
|
|
473
|
+
let sql = `
|
|
474
|
+
SELECT agent, AVG(duration_ms) as avg_duration_ms, COUNT(DISTINCT story_id) as median_stories
|
|
475
|
+
FROM run_records WHERE duration_ms IS NOT NULL
|
|
476
|
+
`;
|
|
477
|
+
const params = [];
|
|
478
|
+
if (agent) {
|
|
479
|
+
sql += " AND agent = ?";
|
|
480
|
+
params.push(agent);
|
|
481
|
+
}
|
|
482
|
+
sql += " GROUP BY agent";
|
|
483
|
+
return this.db.prepare(sql).all(...params);
|
|
484
|
+
}
|
|
485
|
+
getScopeLeakRate() {
|
|
486
|
+
return this.db.prepare(`
|
|
487
|
+
SELECT agent, COUNT(*) as total,
|
|
488
|
+
SUM(CASE WHEN scope_leak = 1 THEN 1 ELSE 0 END) as leaks,
|
|
489
|
+
ROUND(CAST(SUM(CASE WHEN scope_leak = 1 THEN 1 ELSE 0 END) AS REAL) / COUNT(*), 3) as rate
|
|
490
|
+
FROM run_records GROUP BY agent ORDER BY rate DESC
|
|
491
|
+
`).all();
|
|
492
|
+
}
|
|
493
|
+
// ============================================
|
|
494
|
+
// Cleanup
|
|
495
|
+
// ============================================
|
|
496
|
+
close() {
|
|
497
|
+
this.db.close();
|
|
498
|
+
}
|
|
499
|
+
getPath() {
|
|
500
|
+
return this.dbPath;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nightshift-mcp",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Agent teams and multi-agent orchestration across AI models via MCP. Coordinate Claude, Codex, Gemini, Vibe, and Goose with delegation, failovers, and autonomous workflows.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -42,10 +42,12 @@
|
|
|
42
42
|
"license": "MIT",
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
45
|
+
"better-sqlite3": "^12.8.0",
|
|
45
46
|
"proper-lockfile": "^4.1.2",
|
|
46
47
|
"zod": "^3.25.0"
|
|
47
48
|
},
|
|
48
49
|
"devDependencies": {
|
|
50
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
49
51
|
"@types/node": "^20.0.0",
|
|
50
52
|
"@types/proper-lockfile": "^4.1.4",
|
|
51
53
|
"typescript": "^5.0.0",
|