draken 0.1.6 → 0.3.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/ACCEPTANCE.md +34 -0
- package/CHANGELOG.md +65 -0
- package/CONTRIBUTING.md +129 -0
- package/MEMORY.md +118 -0
- package/PERSONA.md +67 -0
- package/README.md +168 -78
- package/SETUP.md +111 -0
- package/SOURCES.md +75 -0
- package/TRAY.md +54 -0
- package/VOICE.md +126 -0
- package/dist/auth/middleware.d.ts +3 -1
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +20 -15
- package/dist/auth/middleware.js.map +1 -1
- package/dist/cli.js +77 -113
- package/dist/cli.js.map +1 -1
- package/dist/db/agent-migration.d.ts +7 -0
- package/dist/db/agent-migration.d.ts.map +1 -0
- package/dist/db/agent-migration.js +36 -0
- package/dist/db/agent-migration.js.map +1 -0
- package/dist/db/evidence.d.ts +37 -0
- package/dist/db/evidence.d.ts.map +1 -0
- package/dist/db/evidence.js +110 -0
- package/dist/db/evidence.js.map +1 -0
- package/dist/db/pointer-migration.d.ts +7 -0
- package/dist/db/pointer-migration.d.ts.map +1 -0
- package/dist/db/pointer-migration.js +117 -0
- package/dist/db/pointer-migration.js.map +1 -0
- package/dist/db/retained-text.d.ts +8 -0
- package/dist/db/retained-text.d.ts.map +1 -0
- package/dist/db/retained-text.js +36 -0
- package/dist/db/retained-text.js.map +1 -0
- package/dist/db/schema.d.ts +1 -5
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +206 -55
- package/dist/db/schema.js.map +1 -1
- package/dist/db/snapshot-pointers.d.ts +5 -0
- package/dist/db/snapshot-pointers.d.ts.map +1 -0
- package/dist/db/snapshot-pointers.js +174 -0
- package/dist/db/snapshot-pointers.js.map +1 -0
- package/dist/memory/automatic.d.ts +38 -0
- package/dist/memory/automatic.d.ts.map +1 -0
- package/dist/memory/automatic.js +155 -0
- package/dist/memory/automatic.js.map +1 -0
- package/dist/memory/context.d.ts +12 -0
- package/dist/memory/context.d.ts.map +1 -0
- package/dist/memory/context.js +107 -0
- package/dist/memory/context.js.map +1 -0
- package/dist/memory/embedding-pool.d.ts +28 -0
- package/dist/memory/embedding-pool.d.ts.map +1 -0
- package/dist/memory/embedding-pool.js +135 -0
- package/dist/memory/embedding-pool.js.map +1 -0
- package/dist/memory/embedding-worker.d.ts +2 -0
- package/dist/memory/embedding-worker.d.ts.map +1 -0
- package/dist/memory/embedding-worker.js +32 -0
- package/dist/memory/embedding-worker.js.map +1 -0
- package/dist/memory/index.d.ts +32 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +441 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/model-files.d.ts +9 -0
- package/dist/memory/model-files.d.ts.map +1 -0
- package/dist/memory/model-files.js +13 -0
- package/dist/memory/model-files.js.map +1 -0
- package/dist/memory/model.d.ts +15 -0
- package/dist/memory/model.d.ts.map +1 -0
- package/dist/memory/model.js +147 -0
- package/dist/memory/model.js.map +1 -0
- package/dist/memory/readiness.d.ts +16 -0
- package/dist/memory/readiness.d.ts.map +1 -0
- package/dist/memory/readiness.js +131 -0
- package/dist/memory/readiness.js.map +1 -0
- package/dist/memory/reconcile.d.ts +11 -0
- package/dist/memory/reconcile.d.ts.map +1 -0
- package/dist/memory/reconcile.js +132 -0
- package/dist/memory/reconcile.js.map +1 -0
- package/dist/memory/service.d.ts +10 -0
- package/dist/memory/service.d.ts.map +1 -0
- package/dist/memory/service.js +243 -0
- package/dist/memory/service.js.map +1 -0
- package/dist/memory/sources.d.ts +15 -0
- package/dist/memory/sources.d.ts.map +1 -0
- package/dist/memory/sources.js +94 -0
- package/dist/memory/sources.js.map +1 -0
- package/dist/memory/stamps.d.ts +13 -0
- package/dist/memory/stamps.d.ts.map +1 -0
- package/dist/memory/stamps.js +101 -0
- package/dist/memory/stamps.js.map +1 -0
- package/dist/memory/storage.d.ts +5 -0
- package/dist/memory/storage.d.ts.map +1 -0
- package/dist/memory/storage.js +116 -0
- package/dist/memory/storage.js.map +1 -0
- package/dist/memory/types.d.ts +89 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +8 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/memory/worker.d.ts +2 -0
- package/dist/memory/worker.d.ts.map +1 -0
- package/dist/memory/worker.js +84 -0
- package/dist/memory/worker.js.map +1 -0
- package/dist/npm-cli.d.ts +4 -0
- package/dist/npm-cli.d.ts.map +1 -0
- package/dist/npm-cli.js +36 -0
- package/dist/npm-cli.js.map +1 -0
- package/dist/pi/runtime.d.ts +34 -0
- package/dist/pi/runtime.d.ts.map +1 -0
- package/dist/pi/runtime.js +210 -0
- package/dist/pi/runtime.js.map +1 -0
- package/dist/pi/setup.d.ts +5 -0
- package/dist/pi/setup.d.ts.map +1 -0
- package/dist/pi/setup.js +147 -0
- package/dist/pi/setup.js.map +1 -0
- package/dist/routes/auth.d.ts.map +1 -1
- package/dist/routes/auth.js +3 -1
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/live-voice.d.ts +3 -0
- package/dist/routes/live-voice.d.ts.map +1 -0
- package/dist/routes/live-voice.js +49 -0
- package/dist/routes/live-voice.js.map +1 -0
- package/dist/routes/{browse.d.ts → memory.d.ts} +1 -1
- package/dist/routes/memory.d.ts.map +1 -0
- package/dist/routes/memory.js +18 -0
- package/dist/routes/memory.js.map +1 -0
- package/dist/routes/{tasks.d.ts → sync.d.ts} +1 -1
- package/dist/routes/sync.d.ts.map +1 -0
- package/dist/routes/sync.js +145 -0
- package/dist/routes/sync.js.map +1 -0
- package/dist/routes/{projects.d.ts → voice.d.ts} +1 -1
- package/dist/routes/voice.d.ts.map +1 -0
- package/dist/routes/voice.js +35 -0
- package/dist/routes/voice.js.map +1 -0
- package/dist/server-state.d.ts +30 -0
- package/dist/server-state.d.ts.map +1 -0
- package/dist/server-state.js +113 -0
- package/dist/server-state.js.map +1 -0
- package/dist/server-status.d.ts +7 -0
- package/dist/server-status.d.ts.map +1 -0
- package/dist/server-status.js +34 -0
- package/dist/server-status.js.map +1 -0
- package/dist/server.d.ts +5 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +148 -46
- package/dist/server.js.map +1 -1
- package/dist/sources/adapters.d.ts +15 -0
- package/dist/sources/adapters.d.ts.map +1 -0
- package/dist/sources/adapters.js +159 -0
- package/dist/sources/adapters.js.map +1 -0
- package/dist/sources/registry.d.ts +17 -0
- package/dist/sources/registry.d.ts.map +1 -0
- package/dist/sources/registry.js +56 -0
- package/dist/sources/registry.js.map +1 -0
- package/dist/sync/collector.d.ts +3 -0
- package/dist/sync/collector.d.ts.map +1 -0
- package/dist/sync/collector.js +324 -0
- package/dist/sync/collector.js.map +1 -0
- package/dist/sync/cost.d.ts +7 -0
- package/dist/sync/cost.d.ts.map +1 -0
- package/dist/sync/cost.js +31 -0
- package/dist/sync/cost.js.map +1 -0
- package/dist/sync/jsonl.d.ts +34 -0
- package/dist/sync/jsonl.d.ts.map +1 -0
- package/dist/sync/jsonl.js +161 -0
- package/dist/sync/jsonl.js.map +1 -0
- package/dist/sync/manager.d.ts +15 -0
- package/dist/sync/manager.d.ts.map +1 -0
- package/dist/sync/manager.js +287 -0
- package/dist/sync/manager.js.map +1 -0
- package/dist/sync/normalize.d.ts +22 -0
- package/dist/sync/normalize.d.ts.map +1 -0
- package/dist/sync/normalize.js +107 -0
- package/dist/sync/normalize.js.map +1 -0
- package/dist/sync/pi-output.d.ts +33 -0
- package/dist/sync/pi-output.d.ts.map +1 -0
- package/dist/sync/pi-output.js +186 -0
- package/dist/sync/pi-output.js.map +1 -0
- package/dist/sync/pi.d.ts +15 -0
- package/dist/sync/pi.d.ts.map +1 -0
- package/dist/sync/pi.js +149 -0
- package/dist/sync/pi.js.map +1 -0
- package/dist/sync/recap.d.ts +25 -0
- package/dist/sync/recap.d.ts.map +1 -0
- package/dist/sync/recap.js +118 -0
- package/dist/sync/recap.js.map +1 -0
- package/dist/sync/reconciliation.d.ts +16 -0
- package/dist/sync/reconciliation.d.ts.map +1 -0
- package/dist/sync/reconciliation.js +22 -0
- package/dist/sync/reconciliation.js.map +1 -0
- package/dist/sync/references.d.ts +10 -0
- package/dist/sync/references.d.ts.map +1 -0
- package/dist/sync/references.js +50 -0
- package/dist/sync/references.js.map +1 -0
- package/dist/sync/source-files.d.ts +16 -0
- package/dist/sync/source-files.d.ts.map +1 -0
- package/dist/sync/source-files.js +56 -0
- package/dist/sync/source-files.js.map +1 -0
- package/dist/sync/store.d.ts +36 -0
- package/dist/sync/store.d.ts.map +1 -0
- package/dist/sync/store.js +359 -0
- package/dist/sync/store.js.map +1 -0
- package/dist/sync/summary-budget.d.ts +19 -0
- package/dist/sync/summary-budget.d.ts.map +1 -0
- package/dist/sync/summary-budget.js +39 -0
- package/dist/sync/summary-budget.js.map +1 -0
- package/dist/sync/tree.d.ts +69 -0
- package/dist/sync/tree.d.ts.map +1 -0
- package/dist/sync/tree.js +599 -0
- package/dist/sync/tree.js.map +1 -0
- package/dist/tray/controller.d.ts +51 -0
- package/dist/tray/controller.d.ts.map +1 -0
- package/dist/tray/controller.js +178 -0
- package/dist/tray/controller.js.map +1 -0
- package/dist/tray/launcher.d.ts +3 -0
- package/dist/tray/launcher.d.ts.map +1 -0
- package/dist/tray/launcher.js +47 -0
- package/dist/tray/launcher.js.map +1 -0
- package/dist/tray/native.d.ts +12 -0
- package/dist/tray/native.d.ts.map +1 -0
- package/dist/tray/native.js +93 -0
- package/dist/tray/native.js.map +1 -0
- package/dist/tray/processes.d.ts +5 -0
- package/dist/tray/processes.d.ts.map +1 -0
- package/dist/tray/processes.js +99 -0
- package/dist/tray/processes.js.map +1 -0
- package/dist/tray/worker.d.ts +4 -0
- package/dist/tray/worker.d.ts.map +1 -0
- package/dist/tray/worker.js +150 -0
- package/dist/tray/worker.js.map +1 -0
- package/dist/types.d.ts +221 -20
- package/dist/types.d.ts.map +1 -1
- package/dist/voice/continuation.d.ts +25 -0
- package/dist/voice/continuation.d.ts.map +1 -0
- package/dist/voice/continuation.js +95 -0
- package/dist/voice/continuation.js.map +1 -0
- package/dist/voice/history-focus.d.ts +14 -0
- package/dist/voice/history-focus.d.ts.map +1 -0
- package/dist/voice/history-focus.js +39 -0
- package/dist/voice/history-focus.js.map +1 -0
- package/dist/voice/legacy-history.d.ts +5 -0
- package/dist/voice/legacy-history.d.ts.map +1 -0
- package/dist/voice/legacy-history.js +34 -0
- package/dist/voice/legacy-history.js.map +1 -0
- package/dist/voice/live-context.d.ts +14 -0
- package/dist/voice/live-context.d.ts.map +1 -0
- package/dist/voice/live-context.js +137 -0
- package/dist/voice/live-context.js.map +1 -0
- package/dist/voice/live.d.ts +37 -0
- package/dist/voice/live.d.ts.map +1 -0
- package/dist/voice/live.js +462 -0
- package/dist/voice/live.js.map +1 -0
- package/dist/voice/preparation.d.ts +8 -0
- package/dist/voice/preparation.d.ts.map +1 -0
- package/dist/voice/preparation.js +59 -0
- package/dist/voice/preparation.js.map +1 -0
- package/package.json +49 -16
- package/public/assets/index-BQFBaSKm.js +40 -0
- package/public/assets/index-CYCbTSh1.js +131 -0
- package/public/assets/index-DntUQtGK.css +1 -0
- package/public/assets/persona-BVIfx5k8.js +1 -0
- package/public/assets/persona-C_m1CVKe.css +1 -0
- package/public/assets/scene-CBV2oPhA.js +3854 -0
- package/public/index.html +6 -8
- package/public/persona/THREE-LICENSE.txt +21 -0
- package/public/persona/call-poster.webp +0 -0
- package/public/persona/chat-avatar.webp +0 -0
- package/public/persona/reference.jpg +0 -0
- package/public/persona/sample.wav +0 -0
- package/public/persona.html +7 -0
- package/runtime/pi/package-lock.json +1549 -0
- package/runtime/pi/package.json +12 -0
- package/tests/fixtures/voice-question.wav +0 -0
- package/tray/assets/error.ico +0 -0
- package/tray/assets/error.png +0 -0
- package/tray/assets/running.ico +0 -0
- package/tray/assets/running.png +0 -0
- package/tray/assets/starting.ico +0 -0
- package/tray/assets/starting.png +0 -0
- package/tray/assets/stopped.ico +0 -0
- package/tray/assets/stopped.png +0 -0
- package/tray/assets/stopping.ico +0 -0
- package/tray/assets/stopping.png +0 -0
- package/tray/macos.js +72 -0
- package/tray/windows.ps1 +104 -0
- package/voice/realtime/README.md +84 -0
- package/voice/realtime/backend.mjs +81 -0
- package/voice/realtime/native.mjs +210 -0
- package/voice/realtime/peer.d.mts +15 -0
- package/voice/realtime/peer.mjs +116 -0
- package/voice/realtime/probe-browser.mjs +81 -0
- package/voice/realtime/probe-server.mjs +86 -0
- package/voice/realtime/probe.html +11 -0
- package/voice/realtime/probe.mjs +42 -0
- package/voice/realtime/rpc.mjs +118 -0
- package/voice/realtime/setup.mjs +32 -0
- package/voice/tls.mjs +49 -0
- package/dist/db/queries.d.ts +0 -16
- package/dist/db/queries.d.ts.map +0 -1
- package/dist/db/queries.js +0 -91
- package/dist/db/queries.js.map +0 -1
- package/dist/docker/dockerfile.d.ts +0 -50
- package/dist/docker/dockerfile.d.ts.map +0 -1
- package/dist/docker/dockerfile.js +0 -160
- package/dist/docker/dockerfile.js.map +0 -1
- package/dist/docker/manager.d.ts +0 -42
- package/dist/docker/manager.d.ts.map +0 -1
- package/dist/docker/manager.js +0 -421
- package/dist/docker/manager.js.map +0 -1
- package/dist/git/status.d.ts +0 -76
- package/dist/git/status.d.ts.map +0 -1
- package/dist/git/status.js +0 -332
- package/dist/git/status.js.map +0 -1
- package/dist/routes/browse.d.ts.map +0 -1
- package/dist/routes/browse.js +0 -49
- package/dist/routes/browse.js.map +0 -1
- package/dist/routes/git.d.ts +0 -9
- package/dist/routes/git.d.ts.map +0 -1
- package/dist/routes/git.js +0 -338
- package/dist/routes/git.js.map +0 -1
- package/dist/routes/projects.d.ts.map +0 -1
- package/dist/routes/projects.js +0 -220
- package/dist/routes/projects.js.map +0 -1
- package/dist/routes/tasks.d.ts.map +0 -1
- package/dist/routes/tasks.js +0 -313
- package/dist/routes/tasks.js.map +0 -1
- package/draken.dockerfile.template +0 -18
- package/public/assets/index-3ngsG5kF.css +0 -1
- package/public/assets/index-B3YSD0ee.js +0 -252
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.digest = digest;
|
|
4
|
+
exports.sourceKey = sourceKey;
|
|
5
|
+
exports.cleanText = cleanText;
|
|
6
|
+
exports.normalizeEntry = normalizeEntry;
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
function digest(value) {
|
|
9
|
+
return (0, crypto_1.createHash)('sha256').update(value).digest('hex');
|
|
10
|
+
}
|
|
11
|
+
// Stable across sync-local E/C references, but changes when a context edit changes the excerpt.
|
|
12
|
+
function sourceKey(item) {
|
|
13
|
+
if (item.unavailable && /^K[a-f0-9]{20}$/.test(item.source_key || ''))
|
|
14
|
+
return item.source_key;
|
|
15
|
+
return `K${digest(JSON.stringify([item.event_key, item.text])).slice(0, 20)}`;
|
|
16
|
+
}
|
|
17
|
+
/** Version 1 is read-only compatibility for existing evidence, never new imports.
|
|
18
|
+
* Keep these recipes stable: pointers must reconstruct exactly their old view.
|
|
19
|
+
* Best-effort minimization, NOT a guarantee of secret-free text. */
|
|
20
|
+
function cleanText(value, limit = 6000, version = 2) {
|
|
21
|
+
if (version !== 1 && version !== 2)
|
|
22
|
+
throw new Error('Unknown evidence normalization version');
|
|
23
|
+
let clean = value
|
|
24
|
+
.replace(/\u001b\[[0-?]*[ -/]*[@-~]/g, '')
|
|
25
|
+
.replace(/-----BEGIN [^-]*PRIVATE KEY-----[\s\S]*?-----END [^-]*PRIVATE KEY-----/g, '[private key redacted]')
|
|
26
|
+
.replace(/\b(?:sk-(?:proj-)?[A-Za-z0-9_-]{16,}|gh[pousr]_[A-Za-z0-9_]{20,}|github_pat_[A-Za-z0-9_]{20,})\b/g, '[token redacted]')
|
|
27
|
+
.replace(/\bBearer\s+[A-Za-z0-9._~+/-]+=*/gi, 'Bearer [redacted]');
|
|
28
|
+
if (version === 2)
|
|
29
|
+
clean = clean.replace(/(\b(?:password|api[_-]?key|access[_-]?token|secret)\b(?:\*\*|__)?\s*[:=](?:\*\*|__)?\s*`)[^`\r\n]{6,}(`)/gi, '$1[redacted]$2');
|
|
30
|
+
clean = clean.replace(/(\b(?:[a-z0-9]+_)*(?:authorization|api[_-]?key|access[_-]?token|password|secret|secret_access_key)\b["']?\s*[:=]\s*["']?)([^\s"',}]{6,})/gi, '$1[redacted]')
|
|
31
|
+
.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f]/g, '');
|
|
32
|
+
return clean.length > limit ? `${clean.slice(0, limit)}\n[excerpt truncated]` : clean;
|
|
33
|
+
}
|
|
34
|
+
function contentText(content, version) {
|
|
35
|
+
if (typeof content === 'string')
|
|
36
|
+
return cleanText(content, 6000, version);
|
|
37
|
+
if (!Array.isArray(content))
|
|
38
|
+
return '';
|
|
39
|
+
const blocks = [];
|
|
40
|
+
for (const block of content) {
|
|
41
|
+
if (!block || typeof block !== 'object')
|
|
42
|
+
continue;
|
|
43
|
+
if (block.type === 'text' && typeof block.text === 'string')
|
|
44
|
+
blocks.push(block.text);
|
|
45
|
+
if (block.type === 'toolCall') {
|
|
46
|
+
// Capture intent/paths, not write-file contents or arbitrary tool payloads.
|
|
47
|
+
const args = block.arguments || {};
|
|
48
|
+
const selected = {};
|
|
49
|
+
for (const key of ['path', 'file_path', 'command', 'pattern', 'query', 'description']) {
|
|
50
|
+
if (typeof args[key] === 'string')
|
|
51
|
+
selected[key] = cleanText(args[key], 1200, version);
|
|
52
|
+
}
|
|
53
|
+
blocks.push(`Tool requested: ${String(block.name)} ${JSON.stringify(selected)}`);
|
|
54
|
+
}
|
|
55
|
+
// Never index thinking, signatures, image/audio data, or system instructions.
|
|
56
|
+
}
|
|
57
|
+
return cleanText(blocks.join('\n'), 6000, version);
|
|
58
|
+
}
|
|
59
|
+
function normalizeEntry(entry, version = 2) {
|
|
60
|
+
if (!entry || typeof entry.id !== 'string' || typeof entry.type !== 'string')
|
|
61
|
+
return null;
|
|
62
|
+
const type = entry.type;
|
|
63
|
+
let role = type;
|
|
64
|
+
let text = '';
|
|
65
|
+
let isActivity = false;
|
|
66
|
+
if (type === 'message' && entry.message) {
|
|
67
|
+
const message = entry.message;
|
|
68
|
+
role = String(message.role || 'unknown');
|
|
69
|
+
if (['user', 'assistant', 'toolResult', 'custom'].includes(role)) {
|
|
70
|
+
text = contentText(message.content, version);
|
|
71
|
+
if (role === 'toolResult' && text) {
|
|
72
|
+
text = `Tool result (${String(message.toolName || 'unknown')}; ${message.isError ? 'error' : 'not flagged as error'}):\n${text}`;
|
|
73
|
+
}
|
|
74
|
+
if (role === 'assistant' && ['error', 'aborted', 'length'].includes(message.stopReason)) {
|
|
75
|
+
text += `\n[Assistant stop reason: ${message.stopReason}]`;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (role === 'bashExecution' && !message.excludeFromContext) {
|
|
79
|
+
text = cleanText(`Command: ${message.command || ''}\nExit code: ${message.exitCode ?? 'unknown'}\n${message.output || ''}`, 6000, version);
|
|
80
|
+
}
|
|
81
|
+
isActivity = Boolean(text);
|
|
82
|
+
}
|
|
83
|
+
else if (type === 'custom_message') {
|
|
84
|
+
text = contentText(entry.content, version);
|
|
85
|
+
isActivity = Boolean(text);
|
|
86
|
+
}
|
|
87
|
+
else if (type === 'compaction' || type === 'branch_summary') {
|
|
88
|
+
text = cleanText(typeof entry.summary === 'string' ? entry.summary : '', 6000, version);
|
|
89
|
+
// Summaries are background, never new accomplishments.
|
|
90
|
+
}
|
|
91
|
+
const timestamp = typeof entry.timestamp === 'string' ? entry.timestamp : '';
|
|
92
|
+
const parentId = typeof entry.parentId === 'string' ? entry.parentId : null;
|
|
93
|
+
return {
|
|
94
|
+
entry_id: entry.id,
|
|
95
|
+
parent_id: parentId,
|
|
96
|
+
timestamp,
|
|
97
|
+
type,
|
|
98
|
+
role,
|
|
99
|
+
text: cleanText(text, 6000, version),
|
|
100
|
+
// Forks copy entries. Identity across sessions prevents re-briefing inherited history.
|
|
101
|
+
event_key: digest(JSON.stringify([entry.id, parentId, timestamp, type, role, text])),
|
|
102
|
+
is_activity: Number(isActivity),
|
|
103
|
+
target_id: type === 'context_edit' && typeof entry.targetId === 'string' ? entry.targetId : null,
|
|
104
|
+
replacement: type === 'context_edit' && entry.replacement !== null ? contentText(entry.replacement, version) : null,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/sync/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { PiAccounting } from '../types';
|
|
2
|
+
/** Strict LF-framed pi JSON protocol. Retains answer text and numeric accounting,
|
|
3
|
+
* never prompts, thinking, signatures, raw events or provider error payloads. */
|
|
4
|
+
export declare class PiOutput {
|
|
5
|
+
private maxOutput;
|
|
6
|
+
private byteLimit;
|
|
7
|
+
private pending;
|
|
8
|
+
private wireBytes;
|
|
9
|
+
private active;
|
|
10
|
+
private settled;
|
|
11
|
+
private aborted;
|
|
12
|
+
private streamedChars;
|
|
13
|
+
private streamedBytes;
|
|
14
|
+
private latest?;
|
|
15
|
+
private lastEnd;
|
|
16
|
+
private answer;
|
|
17
|
+
private stopReason;
|
|
18
|
+
private error;
|
|
19
|
+
private incomplete;
|
|
20
|
+
private priced;
|
|
21
|
+
private unpriced;
|
|
22
|
+
private usd;
|
|
23
|
+
private totals;
|
|
24
|
+
private models;
|
|
25
|
+
constructor(maxOutput: number, byteLimit: boolean);
|
|
26
|
+
private outputLimit;
|
|
27
|
+
push(chunk: string): void;
|
|
28
|
+
private add;
|
|
29
|
+
private event;
|
|
30
|
+
finish(transportComplete: boolean): PiAccounting;
|
|
31
|
+
result(): string;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=pi-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-output.d.ts","sourceRoot":"","sources":["../../src/sync/pi-output.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAkB7C;iFACiF;AACjF,qBAAa,QAAQ;IAmBP,OAAO,CAAC,SAAS;IAAU,OAAO,CAAC,SAAS;IAlBxD,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,MAAM,CAAwE;IACtF,OAAO,CAAC,MAAM,CAAqB;gBACf,SAAS,EAAE,MAAM,EAAU,SAAS,EAAE,OAAO;IACjE,OAAO,CAAC,WAAW;IAGnB,IAAI,CAAC,KAAK,EAAE,MAAM;IAclB,OAAO,CAAC,GAAG;IASX,OAAO,CAAC,KAAK;IAsCb,MAAM,CAAC,iBAAiB,EAAE,OAAO,GAAG,YAAY;IAMhD,MAAM,IAAI,MAAM;CAMjB"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PiOutput = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const count = (value) => Number.isSafeInteger(value) && value >= 0;
|
|
6
|
+
function usage(value) {
|
|
7
|
+
if (!value || !['input', 'output', 'cacheRead', 'cacheWrite'].every(key => count(value[key])))
|
|
8
|
+
return;
|
|
9
|
+
const reasoning = value.reasoning ?? 0;
|
|
10
|
+
if (!count(reasoning) || reasoning > value.output)
|
|
11
|
+
return;
|
|
12
|
+
const total = value.input + value.output + value.cacheRead + value.cacheWrite;
|
|
13
|
+
if (!Number.isSafeInteger(total) || total === 0)
|
|
14
|
+
return; // Pi also emits zero-filled unknown usage.
|
|
15
|
+
const costs = value.cost, fields = ['input', 'output', 'cacheRead', 'cacheWrite', 'total'];
|
|
16
|
+
const valid = costs && fields.every(key => typeof costs[key] === 'number' && Number.isFinite(costs[key]) && costs[key] >= 0 && costs[key] <= 1e6);
|
|
17
|
+
const sum = valid ? costs.input + costs.output + costs.cacheRead + costs.cacheWrite : 0;
|
|
18
|
+
// Zero catalog rates are indistinguishable from unavailable pricing here.
|
|
19
|
+
const usd = valid && costs.total > 0 && Math.abs(sum - costs.total) <= Math.max(1e-9, costs.total * 1e-6) ? costs.total : null;
|
|
20
|
+
return { input: value.input, output: value.output, cacheRead: value.cacheRead, cacheWrite: value.cacheWrite, reasoning, usd };
|
|
21
|
+
}
|
|
22
|
+
/** Strict LF-framed pi JSON protocol. Retains answer text and numeric accounting,
|
|
23
|
+
* never prompts, thinking, signatures, raw events or provider error payloads. */
|
|
24
|
+
class PiOutput {
|
|
25
|
+
maxOutput;
|
|
26
|
+
byteLimit;
|
|
27
|
+
pending = '';
|
|
28
|
+
wireBytes = 0;
|
|
29
|
+
active = false;
|
|
30
|
+
settled = false;
|
|
31
|
+
aborted = false;
|
|
32
|
+
streamedChars = 0;
|
|
33
|
+
streamedBytes = 0;
|
|
34
|
+
latest;
|
|
35
|
+
lastEnd = '';
|
|
36
|
+
answer = '';
|
|
37
|
+
stopReason = '';
|
|
38
|
+
error = '';
|
|
39
|
+
incomplete = false;
|
|
40
|
+
priced = 0;
|
|
41
|
+
unpriced = 0;
|
|
42
|
+
usd = 0;
|
|
43
|
+
totals = { input: 0, output: 0, cache_read: 0, cache_write: 0, reasoning: 0 };
|
|
44
|
+
models = new Set();
|
|
45
|
+
constructor(maxOutput, byteLimit) {
|
|
46
|
+
this.maxOutput = maxOutput;
|
|
47
|
+
this.byteLimit = byteLimit;
|
|
48
|
+
}
|
|
49
|
+
outputLimit(text) {
|
|
50
|
+
if ((this.byteLimit ? Buffer.byteLength(text) : text.length) > this.maxOutput)
|
|
51
|
+
throw new Error('pi produced too much output. No incomplete result was saved.');
|
|
52
|
+
}
|
|
53
|
+
push(chunk) {
|
|
54
|
+
this.wireBytes += Buffer.byteLength(chunk);
|
|
55
|
+
if (this.wireBytes > 64 * 1024 ** 2)
|
|
56
|
+
throw new Error('pi JSON stream exceeded its safety limit');
|
|
57
|
+
this.pending += chunk;
|
|
58
|
+
let at;
|
|
59
|
+
while ((at = this.pending.indexOf('\n')) >= 0) {
|
|
60
|
+
const line = this.pending.slice(0, at).replace(/\r$/, '');
|
|
61
|
+
this.pending = this.pending.slice(at + 1);
|
|
62
|
+
if (Buffer.byteLength(line) > 8 * 1024 ** 2)
|
|
63
|
+
throw new Error('pi JSON record exceeded its safety limit');
|
|
64
|
+
if (!line.trim())
|
|
65
|
+
continue;
|
|
66
|
+
let event;
|
|
67
|
+
try {
|
|
68
|
+
event = JSON.parse(line);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
throw new Error('Invalid pi JSON event stream');
|
|
72
|
+
}
|
|
73
|
+
this.event(event);
|
|
74
|
+
}
|
|
75
|
+
if (Buffer.byteLength(this.pending) > 8 * 1024 ** 2)
|
|
76
|
+
throw new Error('pi JSON record exceeded its safety limit');
|
|
77
|
+
}
|
|
78
|
+
add(value) {
|
|
79
|
+
if (this.priced + this.unpriced >= 512)
|
|
80
|
+
throw new Error('Too many pi usage records');
|
|
81
|
+
if (value && ![this.totals.input + value.input, this.totals.output + value.output, this.totals.cache_read + value.cacheRead, this.totals.cache_write + value.cacheWrite].every(count))
|
|
82
|
+
value = undefined;
|
|
83
|
+
if (!value) {
|
|
84
|
+
this.unpriced++;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
this.totals.input += value.input;
|
|
88
|
+
this.totals.output += value.output;
|
|
89
|
+
this.totals.cache_read += value.cacheRead;
|
|
90
|
+
this.totals.cache_write += value.cacheWrite;
|
|
91
|
+
this.totals.reasoning += value.reasoning;
|
|
92
|
+
if (value.usd === null)
|
|
93
|
+
this.unpriced++;
|
|
94
|
+
else {
|
|
95
|
+
this.priced++;
|
|
96
|
+
this.usd += value.usd;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
event(event) {
|
|
100
|
+
if (!event || typeof event.type !== 'string')
|
|
101
|
+
throw new Error('Invalid pi JSON event');
|
|
102
|
+
if (event.type.startsWith('tool_execution_'))
|
|
103
|
+
throw new Error('Unexpected tool activity in tool-free pi invocation');
|
|
104
|
+
if (event.type === 'agent_start') {
|
|
105
|
+
this.settled = false;
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (event.type === 'message_start' && event.message?.role === 'assistant') {
|
|
109
|
+
if (this.active)
|
|
110
|
+
throw new Error('Overlapping pi assistant messages');
|
|
111
|
+
this.active = true;
|
|
112
|
+
this.latest = undefined;
|
|
113
|
+
this.streamedChars = this.streamedBytes = 0;
|
|
114
|
+
this.settled = false;
|
|
115
|
+
}
|
|
116
|
+
else if (event.type === 'message_update') {
|
|
117
|
+
if (!this.active)
|
|
118
|
+
throw new Error('Unexpected pi assistant update');
|
|
119
|
+
this.latest = usage(event.usage) || this.latest;
|
|
120
|
+
const update = event.assistantMessageEvent;
|
|
121
|
+
if (update?.type === 'text_delta') {
|
|
122
|
+
if (typeof update.delta !== 'string')
|
|
123
|
+
throw new Error('Invalid pi text delta');
|
|
124
|
+
this.streamedChars += update.delta.length;
|
|
125
|
+
this.streamedBytes += Buffer.byteLength(update.delta);
|
|
126
|
+
if ((this.byteLimit ? this.streamedBytes : this.streamedChars) > this.maxOutput)
|
|
127
|
+
throw new Error('pi produced too much output. No incomplete result was saved.');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else if (event.type === 'message_end' && event.message?.role === 'assistant') {
|
|
131
|
+
const message = event.message, key = (0, crypto_1.createHash)('sha256').update(JSON.stringify(message)).digest('hex');
|
|
132
|
+
if (!this.active && key === this.lastEnd)
|
|
133
|
+
return; // Never count a repeated final event twice.
|
|
134
|
+
if (!this.active)
|
|
135
|
+
throw new Error('Unexpected pi assistant completion');
|
|
136
|
+
this.active = false;
|
|
137
|
+
this.lastEnd = key;
|
|
138
|
+
this.add(usage(message.usage));
|
|
139
|
+
this.latest = undefined;
|
|
140
|
+
if (this.models.size < 32 && [message.provider, message.model].every(value => typeof value === 'string' && /^[\w./:@+-]{1,160}$/.test(value)))
|
|
141
|
+
this.models.add(`${message.provider}/${message.model}`);
|
|
142
|
+
if (!Array.isArray(message.content))
|
|
143
|
+
throw new Error('Invalid pi assistant content');
|
|
144
|
+
const text = message.content.filter((part) => part.type === 'text').map((part) => {
|
|
145
|
+
if (typeof part.text !== 'string')
|
|
146
|
+
throw new Error('Invalid pi assistant text');
|
|
147
|
+
return part.text;
|
|
148
|
+
}).join('');
|
|
149
|
+
this.outputLimit(text);
|
|
150
|
+
this.answer = text;
|
|
151
|
+
this.stopReason = message.stopReason;
|
|
152
|
+
this.error = typeof message.errorMessage === 'string' ? message.errorMessage.slice(0, 1500) : '';
|
|
153
|
+
}
|
|
154
|
+
else if (event.type === 'compaction_end') {
|
|
155
|
+
this.add(usage(event.result?.usage));
|
|
156
|
+
}
|
|
157
|
+
else if (event.type === 'agent_settled') {
|
|
158
|
+
if (typeof event.aborted !== 'boolean')
|
|
159
|
+
throw new Error('Invalid pi settlement');
|
|
160
|
+
this.settled = true;
|
|
161
|
+
this.aborted = event.aborted;
|
|
162
|
+
}
|
|
163
|
+
// message/turn/agent_end repeat the same response: account only message_end.
|
|
164
|
+
}
|
|
165
|
+
finish(transportComplete) {
|
|
166
|
+
if (this.active) {
|
|
167
|
+
this.add(this.latest);
|
|
168
|
+
this.active = false;
|
|
169
|
+
this.incomplete = true;
|
|
170
|
+
}
|
|
171
|
+
const complete = transportComplete && !this.pending.trim() && this.settled && !this.aborted && !this.incomplete && this.unpriced === 0 && this.priced > 0;
|
|
172
|
+
return { source: 'pi-usage/catalog-pricing', cost_usd: this.priced ? this.usd : null, complete,
|
|
173
|
+
responses: this.priced + this.unpriced, tokens: { ...this.totals }, models: [...this.models] };
|
|
174
|
+
}
|
|
175
|
+
result() {
|
|
176
|
+
if (this.pending.trim() || !this.settled || this.incomplete)
|
|
177
|
+
throw new Error('pi ended before its JSON run settled. No incomplete result was saved.');
|
|
178
|
+
if (this.aborted || this.stopReason !== 'stop')
|
|
179
|
+
throw new Error(this.error || `pi response ended with ${this.aborted ? 'aborted' : this.stopReason || 'no completed message'}. No incomplete result was saved.`);
|
|
180
|
+
if (!this.answer.trim())
|
|
181
|
+
throw new Error('pi returned no response. Coverage did not advance.');
|
|
182
|
+
return this.answer.trim();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
exports.PiOutput = PiOutput;
|
|
186
|
+
//# sourceMappingURL=pi-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-output.js","sourceRoot":"","sources":["../../src/sync/pi-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PiAccounting } from '../types';
|
|
2
|
+
export interface PiRequest {
|
|
3
|
+
system: string;
|
|
4
|
+
model?: string;
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
thinking?: 'off' | 'low' | 'medium';
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
largeSummary?: boolean;
|
|
9
|
+
onAccounting?(accounting: PiAccounting): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function stopManagerProcesses(): void;
|
|
12
|
+
/** One tool-free invocation, without a shell. The user payload uses stdin;
|
|
13
|
+
* the fixed system prompt is a CLI argument. */
|
|
14
|
+
export declare function invokePi(prompt: string, request: PiRequest): Promise<string>;
|
|
15
|
+
//# sourceMappingURL=pi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../src/sync/pi.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI,CAAC;CAC/C;AAGD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED;gDACgD;AAChD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAqFlF"}
|
package/dist/sync/pi.js
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.stopManagerProcesses = stopManagerProcesses;
|
|
7
|
+
exports.invokePi = invokePi;
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const schema_1 = require("../db/schema");
|
|
12
|
+
const normalize_1 = require("./normalize");
|
|
13
|
+
const store_1 = require("./store");
|
|
14
|
+
const summary_budget_1 = require("./summary-budget");
|
|
15
|
+
const pi_output_1 = require("./pi-output");
|
|
16
|
+
const runtime_1 = require("../pi/runtime");
|
|
17
|
+
const children = new Set();
|
|
18
|
+
function stopManagerProcesses() {
|
|
19
|
+
for (const child of children)
|
|
20
|
+
child.kill('SIGTERM');
|
|
21
|
+
}
|
|
22
|
+
/** One tool-free invocation, without a shell. The user payload uses stdin;
|
|
23
|
+
* the fixed system prompt is a CLI argument. */
|
|
24
|
+
async function invokePi(prompt, request) {
|
|
25
|
+
if (request.signal?.aborted)
|
|
26
|
+
throw new store_1.HttpError(409, 'Generation cancelled');
|
|
27
|
+
const large = request.largeSummary === true;
|
|
28
|
+
if (large && !(0, summary_budget_1.isBatchSummaryModel)(request.model))
|
|
29
|
+
throw new store_1.HttpError(400, 'Large summary requests require the configured Luna model.');
|
|
30
|
+
if (large ? Buffer.byteLength(prompt) + Buffer.byteLength(request.system) > summary_budget_1.LUNA_BATCH.requestBytes : prompt.length > 300000) {
|
|
31
|
+
throw new store_1.HttpError(400, 'Model input exceeds the safety limit; no evidence was marked covered.');
|
|
32
|
+
}
|
|
33
|
+
if (large && (0, summary_budget_1.promptTokens)(prompt, request.system) > summary_budget_1.LUNA_BATCH.requestTokens)
|
|
34
|
+
throw new store_1.HttpError(400, 'Summary request exceeds its token safety budget; no evidence was marked covered.');
|
|
35
|
+
const cwd = path_1.default.join((0, schema_1.getDataDir)(), 'manager');
|
|
36
|
+
fs_1.default.mkdirSync(cwd, { recursive: true, mode: 0o700 });
|
|
37
|
+
const args = [
|
|
38
|
+
'--print', ...(request.onAccounting ? ['--mode', 'json'] : []), ...runtime_1.isolatedFlags,
|
|
39
|
+
'--thinking', request.thinking || 'low', '--system-prompt', request.system,
|
|
40
|
+
];
|
|
41
|
+
if (request.model)
|
|
42
|
+
args.push('--model', request.model);
|
|
43
|
+
let pi;
|
|
44
|
+
try {
|
|
45
|
+
pi = (0, runtime_1.selectedPi)();
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
throw new store_1.HttpError(503, 'Private pi is unavailable. Run draken setup, then draken login. No other runtime was substituted.');
|
|
49
|
+
}
|
|
50
|
+
return new Promise((resolve, reject) => {
|
|
51
|
+
const child = (0, child_process_1.spawn)(pi.binary, [...pi.prefix, ...args], { cwd, env: pi.env, stdio: ['pipe', 'pipe', 'pipe'], shell: false });
|
|
52
|
+
children.add(child);
|
|
53
|
+
const structured = request.onAccounting ? new pi_output_1.PiOutput(large ? summary_budget_1.LUNA_BATCH.outputBytes : 64000, large) : undefined;
|
|
54
|
+
let closed = false;
|
|
55
|
+
let stdout = '';
|
|
56
|
+
let outputBytes = 0;
|
|
57
|
+
let stderr = '';
|
|
58
|
+
let failure = '';
|
|
59
|
+
let killTimer;
|
|
60
|
+
const terminate = (message) => {
|
|
61
|
+
if (failure)
|
|
62
|
+
return;
|
|
63
|
+
failure = message;
|
|
64
|
+
child.kill('SIGTERM');
|
|
65
|
+
killTimer = setTimeout(() => child.kill('SIGKILL'), 1500);
|
|
66
|
+
killTimer.unref();
|
|
67
|
+
};
|
|
68
|
+
const abort = () => terminate('Generation cancelled. Completed summaries were cached; coverage did not advance.');
|
|
69
|
+
request.signal?.addEventListener('abort', abort, { once: true });
|
|
70
|
+
if (request.signal?.aborted)
|
|
71
|
+
abort();
|
|
72
|
+
const configured = Number(request.timeoutMs ?? process.env.DRAKEN_PI_TIMEOUT_MS ?? 180000);
|
|
73
|
+
const timeout = setTimeout(() => terminate('pi timed out. Retry to reuse completed summaries.'), Number.isFinite(configured) ? Math.max(1000, Math.min(configured, 600000)) : 180000);
|
|
74
|
+
const cleanup = () => {
|
|
75
|
+
clearTimeout(timeout);
|
|
76
|
+
if (killTimer)
|
|
77
|
+
clearTimeout(killTimer);
|
|
78
|
+
request.signal?.removeEventListener('abort', abort);
|
|
79
|
+
children.delete(child);
|
|
80
|
+
};
|
|
81
|
+
const reportAccounting = (complete) => {
|
|
82
|
+
try {
|
|
83
|
+
if (structured)
|
|
84
|
+
request.onAccounting(structured.finish(complete));
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
reject(new store_1.HttpError(502, 'Cannot retain pi usage metadata'));
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
child.stdout.setEncoding('utf8');
|
|
93
|
+
child.stderr.setEncoding('utf8');
|
|
94
|
+
child.stdout.on('data', (chunk) => {
|
|
95
|
+
if (failure)
|
|
96
|
+
return;
|
|
97
|
+
if (structured) {
|
|
98
|
+
try {
|
|
99
|
+
structured.push(chunk);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
terminate(error instanceof Error ? error.message : 'Invalid pi event stream');
|
|
103
|
+
}
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
outputBytes += Buffer.byteLength(chunk);
|
|
107
|
+
if (large ? outputBytes > summary_budget_1.LUNA_BATCH.outputBytes : stdout.length + chunk.length > 64000)
|
|
108
|
+
return terminate('pi produced too much output. No incomplete result was saved.');
|
|
109
|
+
stdout += chunk;
|
|
110
|
+
});
|
|
111
|
+
child.stderr.on('data', (chunk) => { stderr = (stderr + chunk).slice(-4000); });
|
|
112
|
+
child.on('error', error => {
|
|
113
|
+
if (closed)
|
|
114
|
+
return;
|
|
115
|
+
closed = true;
|
|
116
|
+
cleanup();
|
|
117
|
+
if (!reportAccounting(false))
|
|
118
|
+
return;
|
|
119
|
+
reject(new store_1.HttpError(502, `Cannot start pi. Run draken setup and draken login, or configure DRAKEN_PI_BIN with pi 1.4+. ${error.message}`));
|
|
120
|
+
});
|
|
121
|
+
child.on('close', code => {
|
|
122
|
+
if (closed)
|
|
123
|
+
return;
|
|
124
|
+
closed = true;
|
|
125
|
+
cleanup();
|
|
126
|
+
if (!reportAccounting(code === 0 && !failure))
|
|
127
|
+
return;
|
|
128
|
+
if (failure)
|
|
129
|
+
return reject(new store_1.HttpError(502, failure));
|
|
130
|
+
if (code !== 0)
|
|
131
|
+
return reject(new store_1.HttpError(502, `pi failed (${code ?? 'signal'}). ${(0, normalize_1.cleanText)(stderr, 1500) || 'Check model access and pi login.'}`));
|
|
132
|
+
if (structured) {
|
|
133
|
+
try {
|
|
134
|
+
resolve(structured.result());
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
reject(new store_1.HttpError(502, (0, normalize_1.cleanText)(error instanceof Error ? error.message : 'Invalid pi response', 1500)));
|
|
138
|
+
}
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (!stdout.trim())
|
|
142
|
+
return reject(new store_1.HttpError(502, 'pi returned no response. Coverage did not advance.'));
|
|
143
|
+
resolve(stdout.trim());
|
|
144
|
+
});
|
|
145
|
+
child.stdin.on('error', () => { });
|
|
146
|
+
child.stdin.end(prompt);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=pi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.js","sourceRoot":"","sources":["../../src/sync/pi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SyncDetail } from '../types';
|
|
2
|
+
export interface RecapInput {
|
|
3
|
+
sync_id: number;
|
|
4
|
+
status: string;
|
|
5
|
+
snapshot_at: string;
|
|
6
|
+
briefing: string;
|
|
7
|
+
decisions: string;
|
|
8
|
+
carry_forward: string;
|
|
9
|
+
messages: {
|
|
10
|
+
role: string;
|
|
11
|
+
content: string;
|
|
12
|
+
created_at: string;
|
|
13
|
+
}[];
|
|
14
|
+
}
|
|
15
|
+
export declare const recapInput: (sync: SyncDetail) => RecapInput;
|
|
16
|
+
export declare const recapHash: (input: RecapInput, model: string) => string;
|
|
17
|
+
export declare const memoryText: (text: string) => string;
|
|
18
|
+
type Ask = (payload: unknown, system: string) => Promise<string>;
|
|
19
|
+
/** Every briefing/discussion fragment is processed. Stable chunks/reductions are cached;
|
|
20
|
+
* no silent last-N transcript cutoff and no extra strong-model invocation. */
|
|
21
|
+
export declare function summarizeRecap(input: RecapInput, model: string, ask: Ask, signal: AbortSignal): Promise<string>;
|
|
22
|
+
export declare function invalidateRecap(id: number): void;
|
|
23
|
+
export declare function saveRecap(input: RecapInput, model: string, summary: string): void;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=recap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recap.d.ts","sourceRoot":"","sources":["../../src/sync/recap.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IACvE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IACzC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACnE;AACD,eAAO,MAAM,UAAU,GAAI,MAAM,UAAU,KAAG,UAEsD,CAAC;AACrG,eAAO,MAAM,SAAS,GAAI,OAAO,UAAU,EAAE,OAAO,MAAM,WAA4D,CAAC;AACvH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,WAA8F,CAAC;AAkBtI,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AACjE;8EAC8E;AAC9E,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA2CrH;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,QAEzC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAI1E"}
|