@tt-a1i/hive 1.7.0 → 2.0.2
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/CHANGELOG.md +60 -0
- package/README.en.md +73 -11
- package/README.md +41 -8
- package/dist/src/cli/hive-remote.d.ts +46 -0
- package/dist/src/cli/hive-remote.js +257 -0
- package/dist/src/cli/hive-update.js +7 -2
- package/dist/src/cli/hive.d.ts +6 -0
- package/dist/src/cli/hive.js +64 -0
- package/dist/src/cli/team.d.ts +22 -0
- package/dist/src/cli/team.js +255 -5
- package/dist/src/server/agent-command-resolver.js +10 -3
- package/dist/src/server/agent-exit-classification.d.ts +6 -0
- package/dist/src/server/agent-exit-classification.js +6 -0
- package/dist/src/server/agent-manager-support.d.ts +2 -1
- package/dist/src/server/agent-manager-support.js +59 -15
- package/dist/src/server/agent-manager.d.ts +3 -0
- package/dist/src/server/agent-manager.js +22 -7
- package/dist/src/server/agent-run-bootstrap.d.ts +14 -0
- package/dist/src/server/agent-run-bootstrap.js +11 -4
- package/dist/src/server/agent-run-exit-handler.js +14 -8
- package/dist/src/server/agent-run-starter.d.ts +3 -1
- package/dist/src/server/agent-run-starter.js +22 -5
- package/dist/src/server/agent-run-sync.js +13 -5
- package/dist/src/server/agent-runtime-types.d.ts +1 -0
- package/dist/src/server/agent-runtime.d.ts +2 -1
- package/dist/src/server/agent-runtime.js +9 -2
- package/dist/src/server/agent-startup-instructions.d.ts +2 -1
- package/dist/src/server/agent-startup-instructions.js +8 -4
- package/dist/src/server/agent-stdin-dispatcher.d.ts +4 -2
- package/dist/src/server/agent-stdin-dispatcher.js +35 -3
- package/dist/src/server/command-preset-defaults.d.ts +6 -1
- package/dist/src/server/command-preset-defaults.js +56 -0
- package/dist/src/server/fs-browse.d.ts +2 -0
- package/dist/src/server/fs-browse.js +165 -31
- package/dist/src/server/fs-pick-folder.js +6 -69
- package/dist/src/server/fs-sandbox.d.ts +5 -3
- package/dist/src/server/fs-sandbox.js +5 -3
- package/dist/src/server/hive-team-guidance.js +18 -6
- package/dist/src/server/machine-name.d.ts +2 -0
- package/dist/src/server/machine-name.js +13 -0
- package/dist/src/server/open-target-commands.d.ts +1 -0
- package/dist/src/server/open-target-commands.js +4 -1
- package/dist/src/server/orchestrator-autostart.js +1 -1
- package/dist/src/server/platform-path.d.ts +1 -0
- package/dist/src/server/platform-path.js +14 -1
- package/dist/src/server/post-start-input-writer.js +50 -13
- package/dist/src/server/preset-launch-support.js +1 -0
- package/dist/src/server/recovery-summary.d.ts +2 -1
- package/dist/src/server/recovery-summary.js +2 -1
- package/dist/src/server/remote-audit-store.d.ts +51 -0
- package/dist/src/server/remote-audit-store.js +108 -0
- package/dist/src/server/remote-config-keys.d.ts +17 -0
- package/dist/src/server/remote-config-keys.js +27 -0
- package/dist/src/server/remote-control-constants.d.ts +30 -0
- package/dist/src/server/remote-control-constants.js +29 -0
- package/dist/src/server/remote-device-session.d.ts +40 -0
- package/dist/src/server/remote-device-session.js +22 -0
- package/dist/src/server/remote-device-store.d.ts +36 -0
- package/dist/src/server/remote-device-store.js +67 -0
- package/dist/src/server/remote-frame-bridge.d.ts +102 -0
- package/dist/src/server/remote-frame-bridge.js +791 -0
- package/dist/src/server/remote-gateway-client.d.ts +14 -0
- package/dist/src/server/remote-gateway-client.js +36 -0
- package/dist/src/server/remote-loopback-auth.d.ts +6 -0
- package/dist/src/server/remote-loopback-auth.js +112 -0
- package/dist/src/server/remote-pairing-tunnel.d.ts +59 -0
- package/dist/src/server/remote-pairing-tunnel.js +146 -0
- package/dist/src/server/remote-pairing.d.ts +58 -0
- package/dist/src/server/remote-pairing.js +237 -0
- package/dist/src/server/remote-tunnel.d.ts +113 -0
- package/dist/src/server/remote-tunnel.js +514 -0
- package/dist/src/server/restart-policy-support.d.ts +4 -1
- package/dist/src/server/restart-policy-support.js +3 -1
- package/dist/src/server/restart-policy.d.ts +1 -1
- package/dist/src/server/restart-policy.js +19 -3
- package/dist/src/server/route-types.d.ts +1 -1
- package/dist/src/server/routes-dispatches.js +1 -1
- package/dist/src/server/routes-fs.js +3 -3
- package/dist/src/server/routes-marketplace.js +2 -2
- package/dist/src/server/routes-open-workspace.js +1 -1
- package/dist/src/server/routes-remote.d.ts +2 -0
- package/dist/src/server/routes-remote.js +166 -0
- package/dist/src/server/routes-runtime.js +6 -6
- package/dist/src/server/routes-settings.js +16 -16
- package/dist/src/server/routes-tasks.js +2 -2
- package/dist/src/server/routes-team-memory.d.ts +2 -0
- package/dist/src/server/routes-team-memory.js +154 -0
- package/dist/src/server/routes-team-recall.d.ts +2 -0
- package/dist/src/server/routes-team-recall.js +119 -0
- package/dist/src/server/routes-team.js +31 -9
- package/dist/src/server/routes-ui.js +11 -1
- package/dist/src/server/routes-workflow-schedules.js +3 -3
- package/dist/src/server/routes-workflows.js +5 -5
- package/dist/src/server/routes-workspace-memory-dreams.d.ts +2 -0
- package/dist/src/server/routes-workspace-memory-dreams.js +105 -0
- package/dist/src/server/routes-workspace-memory.d.ts +2 -0
- package/dist/src/server/routes-workspace-memory.js +215 -0
- package/dist/src/server/routes-workspaces.js +9 -9
- package/dist/src/server/routes.js +10 -0
- package/dist/src/server/runtime-database.d.ts +1 -0
- package/dist/src/server/runtime-database.js +27 -2
- package/dist/src/server/runtime-restart-policy.d.ts +3 -1
- package/dist/src/server/runtime-restart-policy.js +2 -1
- package/dist/src/server/runtime-store-contract.d.ts +37 -0
- package/dist/src/server/runtime-store-dream.d.ts +23 -0
- package/dist/src/server/runtime-store-dream.js +16 -0
- package/dist/src/server/runtime-store-helpers.d.ts +20 -0
- package/dist/src/server/runtime-store-helpers.js +81 -7
- package/dist/src/server/runtime-store-memory.d.ts +33 -0
- package/dist/src/server/runtime-store-memory.js +37 -0
- package/dist/src/server/runtime-store-remote.d.ts +5 -0
- package/dist/src/server/runtime-store-remote.js +45 -0
- package/dist/src/server/runtime-store-workflows.js +2 -0
- package/dist/src/server/runtime-store.js +14 -3
- package/dist/src/server/session-capture-claude.d.ts +1 -1
- package/dist/src/server/session-capture-claude.js +7 -4
- package/dist/src/server/session-capture-codex.js +4 -5
- package/dist/src/server/session-capture-gemini.js +4 -5
- package/dist/src/server/session-capture-opencode.d.ts +4 -4
- package/dist/src/server/session-capture-opencode.js +20 -12
- package/dist/src/server/session-capture-qwen.d.ts +5 -0
- package/dist/src/server/session-capture-qwen.js +104 -0
- package/dist/src/server/session-capture.d.ts +17 -0
- package/dist/src/server/session-capture.js +16 -0
- package/dist/src/server/sqlite-schema-v23.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v23.js +43 -0
- package/dist/src/server/sqlite-schema-v24.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v24.js +34 -0
- package/dist/src/server/sqlite-schema-v25.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v25.js +127 -0
- package/dist/src/server/sqlite-schema-v26.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v26.js +56 -0
- package/dist/src/server/sqlite-schema-v27.d.ts +6 -0
- package/dist/src/server/sqlite-schema-v27.js +92 -0
- package/dist/src/server/sqlite-schema-v28.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v28.js +19 -0
- package/dist/src/server/sqlite-schema-v29.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v29.js +27 -0
- package/dist/src/server/sqlite-schema-v30.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v30.js +27 -0
- package/dist/src/server/sqlite-schema-v31.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v31.js +30 -0
- package/dist/src/server/sqlite-schema.d.ts +1 -1
- package/dist/src/server/sqlite-schema.js +49 -1
- package/dist/src/server/startup-command-parser.js +5 -1
- package/dist/src/server/tasks-file-watcher.d.ts +2 -0
- package/dist/src/server/tasks-file-watcher.js +15 -6
- package/dist/src/server/tasks-file.js +30 -5
- package/dist/src/server/tasks-websocket-server.js +4 -0
- package/dist/src/server/team-authz.d.ts +1 -1
- package/dist/src/server/team-authz.js +13 -1
- package/dist/src/server/team-list-enrichment.js +3 -1
- package/dist/src/server/team-memory-digest.d.ts +52 -0
- package/dist/src/server/team-memory-digest.js +200 -0
- package/dist/src/server/team-memory-dream-applier.d.ts +5 -0
- package/dist/src/server/team-memory-dream-applier.js +234 -0
- package/dist/src/server/team-memory-dream-http-serializers.d.ts +13 -0
- package/dist/src/server/team-memory-dream-http-serializers.js +12 -0
- package/dist/src/server/team-memory-dream-ops.d.ts +40 -0
- package/dist/src/server/team-memory-dream-ops.js +153 -0
- package/dist/src/server/team-memory-dream-reverter.d.ts +22 -0
- package/dist/src/server/team-memory-dream-reverter.js +221 -0
- package/dist/src/server/team-memory-dream-run-store.d.ts +23 -0
- package/dist/src/server/team-memory-dream-run-store.js +211 -0
- package/dist/src/server/team-memory-dream-runner.d.ts +37 -0
- package/dist/src/server/team-memory-dream-runner.js +178 -0
- package/dist/src/server/team-memory-dream-scheduler.d.ts +32 -0
- package/dist/src/server/team-memory-dream-scheduler.js +115 -0
- package/dist/src/server/team-memory-dream-store.d.ts +19 -0
- package/dist/src/server/team-memory-dream-store.js +16 -0
- package/dist/src/server/team-memory-dream-types.d.ts +104 -0
- package/dist/src/server/team-memory-dream-types.js +23 -0
- package/dist/src/server/team-memory-export.d.ts +22 -0
- package/dist/src/server/team-memory-export.js +220 -0
- package/dist/src/server/team-memory-feature.d.ts +12 -0
- package/dist/src/server/team-memory-feature.js +12 -0
- package/dist/src/server/team-memory-http-serializers.d.ts +102 -0
- package/dist/src/server/team-memory-http-serializers.js +46 -0
- package/dist/src/server/team-memory-injection.d.ts +31 -0
- package/dist/src/server/team-memory-injection.js +49 -0
- package/dist/src/server/team-memory-store.d.ts +116 -0
- package/dist/src/server/team-memory-store.js +513 -0
- package/dist/src/server/team-operations.d.ts +5 -1
- package/dist/src/server/team-operations.js +46 -16
- package/dist/src/server/team-recall-store.d.ts +38 -0
- package/dist/src/server/team-recall-store.js +205 -0
- package/dist/src/server/terminal-input-profile.d.ts +1 -1
- package/dist/src/server/terminal-input-profile.js +18 -0
- package/dist/src/server/terminal-ws-server.js +6 -0
- package/dist/src/server/ui-auth-helpers.d.ts +1 -1
- package/dist/src/server/ui-auth-helpers.js +7 -1
- package/dist/src/server/ui-auth.d.ts +3 -0
- package/dist/src/server/ui-auth.js +21 -1
- package/dist/src/server/workflow-cli-policy.d.ts +2 -3
- package/dist/src/server/workflow-cli-policy.js +3 -3
- package/dist/src/server/workflow-runner.d.ts +1 -0
- package/dist/src/server/workflow-runner.js +9 -4
- package/dist/src/server/workspace-path-validation.js +6 -2
- package/dist/src/server/workspace-store.d.ts +1 -1
- package/dist/src/server/workspace-store.js +35 -9
- package/dist/src/shared/fs-browse.d.ts +1 -0
- package/dist/src/shared/fs-browse.js +1 -0
- package/dist/src/shared/path-input.d.ts +12 -0
- package/dist/src/shared/path-input.js +22 -0
- package/dist/src/shared/remote-bridge-routing.d.ts +19 -0
- package/dist/src/shared/remote-bridge-routing.js +141 -0
- package/dist/src/shared/remote-crypto.d.ts +138 -0
- package/dist/src/shared/remote-crypto.js +427 -0
- package/dist/src/shared/remote-pairing-code.d.ts +7 -0
- package/dist/src/shared/remote-pairing-code.js +47 -0
- package/dist/src/shared/remote-protocol.d.ts +160 -0
- package/dist/src/shared/remote-protocol.js +526 -0
- package/dist/src/shared/team-memory.d.ts +11 -0
- package/dist/src/shared/team-memory.js +10 -0
- package/dist/src/shared/team-recall.d.ts +1 -0
- package/dist/src/shared/team-recall.js +1 -0
- package/dist/src/shared/types.d.ts +4 -5
- package/package.json +12 -5
- package/scripts/postinstall-native-artifacts.mjs +113 -0
- package/web/dist/assets/AddWorkerDialog-CbV75qUX.js +2 -0
- package/web/dist/assets/AddWorkspaceFlow-CwV-7wPx.js +1 -0
- package/web/dist/assets/FirstRunWizard-a6PWIK3x.js +1 -0
- package/web/dist/assets/MarketplaceDrawer-Dd8WIA8T.js +67 -0
- package/web/dist/assets/TaskGraphDrawer-Bk5WFIk_.js +1 -0
- package/web/dist/assets/{WhatsNewDialog-CHkZeINH.js → WhatsNewDialog-C2VZaip0.js} +1 -1
- package/web/dist/assets/WorkerModal-DucW-9YT.js +1 -0
- package/web/dist/assets/WorkflowsDrawer-Bjf4olbR.js +1 -0
- package/web/dist/assets/WorkspaceMemoryDrawer-DglCy_5f.js +1 -0
- package/web/dist/assets/WorkspaceTaskDrawer-BIWwISvA.js +1 -0
- package/web/dist/assets/index-BAiLYajK.css +1 -0
- package/web/dist/assets/index-BV2k9Dts.js +73 -0
- package/web/dist/assets/search-Bk2HQvO7.js +1 -0
- package/web/dist/assets/square-terminal-D93m9hfY.js +1 -0
- package/web/dist/cli-icons/agy.png +0 -0
- package/web/dist/cli-icons/cursor.ico +0 -0
- package/web/dist/cli-icons/grok.ico +0 -0
- package/web/dist/cli-icons/qwen.png +0 -0
- package/web/dist/index.html +8 -3
- package/web/dist/sw.js +1 -1
- package/scripts/fix-runtime-artifacts.mjs +0 -33
- package/web/dist/assets/AddWorkerDialog-BRUxpa3f.js +0 -2
- package/web/dist/assets/AddWorkspaceDialog-D56x5JCb.js +0 -1
- package/web/dist/assets/FirstRunWizard-BFVaMIsE.js +0 -1
- package/web/dist/assets/MarketplaceDrawer-DeEZ35dN.js +0 -76
- package/web/dist/assets/WorkerModal-BBCuMLIa.js +0 -1
- package/web/dist/assets/WorkspaceTaskDrawer-CpZHAcj1.js +0 -1
- package/web/dist/assets/WorkspaceTerminalPanels-7If2mDyp.js +0 -1
- package/web/dist/assets/WorkspaceTerminalPanels-DDGTF8rc.css +0 -1
- package/web/dist/assets/index-5zh61jMg.css +0 -1
- package/web/dist/assets/index-CxNL0O-C.js +0 -73
- package/web/dist/assets/path-join-7MR1s7b1.js +0 -1
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, writeFileSync, } from 'node:fs';
|
|
3
|
+
import { basename, dirname, join } from 'node:path';
|
|
4
|
+
import { HIVE_DIR_NAME } from './tasks-file.js';
|
|
5
|
+
export const MEMORY_FILE_NAME = 'memory.md';
|
|
6
|
+
export const MEMORY_RELATIVE_PATH = `${HIVE_DIR_NAME}/${MEMORY_FILE_NAME}`;
|
|
7
|
+
export const MEMORY_EXPORT_DEBOUNCE_MS = 2000;
|
|
8
|
+
export const MEMORY_EXPORT_DREAM_CHANGELOG_LIMIT = 10;
|
|
9
|
+
const GENERATED_MARKER = '<!-- hive-memory:generated v1';
|
|
10
|
+
const GENERATED_END_MARKER = '<!-- /hive-memory:generated -->';
|
|
11
|
+
const GENERATED_WARNING = 'Generated by Hive from SQLite. Do not edit this file by hand; user edits are backed up before regeneration.';
|
|
12
|
+
const KIND_TITLES = {
|
|
13
|
+
decision: 'Decisions',
|
|
14
|
+
fact: 'Facts',
|
|
15
|
+
pitfall: 'Pitfalls',
|
|
16
|
+
preference: 'Preferences',
|
|
17
|
+
procedure_ref: 'Procedure refs',
|
|
18
|
+
};
|
|
19
|
+
export const getMemoryFilePath = (workspacePath) => join(workspacePath, HIVE_DIR_NAME, MEMORY_FILE_NAME);
|
|
20
|
+
const hashText = (text) => createHash('sha256').update(text).digest('hex');
|
|
21
|
+
const writeUtf8FileAtomically = (targetPath, content) => {
|
|
22
|
+
const tempPath = join(dirname(targetPath), `.${basename(targetPath)}.${randomUUID()}.tmp`);
|
|
23
|
+
let committed = false;
|
|
24
|
+
let fd = null;
|
|
25
|
+
try {
|
|
26
|
+
try {
|
|
27
|
+
fd = openSync(tempPath, 'w');
|
|
28
|
+
writeFileSync(fd, content, 'utf8');
|
|
29
|
+
fsyncSync(fd);
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
if (fd !== null) {
|
|
33
|
+
closeSync(fd);
|
|
34
|
+
fd = null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
renameSync(tempPath, targetPath);
|
|
38
|
+
committed = true;
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
if (!committed && existsSync(tempPath))
|
|
42
|
+
rmSync(tempPath, { force: true });
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const normalizeInline = (value) => value.replace(/\s+/g, ' ').trim();
|
|
46
|
+
const formatBody = (body) => body
|
|
47
|
+
.replace(/\r\n/g, '\n')
|
|
48
|
+
.replace(/\r/g, '\n')
|
|
49
|
+
.split('\n')
|
|
50
|
+
.map((line, index) => (index === 0 ? normalizeInline(line) : ` ${line.trim()}`))
|
|
51
|
+
.join('\n');
|
|
52
|
+
const formatEntryLine = (entry) => {
|
|
53
|
+
const labels = [entry.kind];
|
|
54
|
+
if (entry.pinned)
|
|
55
|
+
labels.push('pinned');
|
|
56
|
+
if (entry.disabled)
|
|
57
|
+
labels.push('disabled');
|
|
58
|
+
labels.push(`source: ${entry.source}`);
|
|
59
|
+
const source = entry.sources[0];
|
|
60
|
+
if (source?.actorNameSnapshot)
|
|
61
|
+
labels.push(`from: ${source.actorNameSnapshot}`);
|
|
62
|
+
if (entry.tags.length > 0)
|
|
63
|
+
labels.push(`tags: ${entry.tags.join(', ')}`);
|
|
64
|
+
return `- [${labels.join(', ')}] ${formatBody(entry.body)}`;
|
|
65
|
+
};
|
|
66
|
+
const formatDreamRunLine = (run) => {
|
|
67
|
+
const report = run.report;
|
|
68
|
+
const counts = report
|
|
69
|
+
? [
|
|
70
|
+
`${report.added.length} added`,
|
|
71
|
+
`${report.rewritten.length} rewritten`,
|
|
72
|
+
`${report.archived.length} archived`,
|
|
73
|
+
`${report.merged.length} merged`,
|
|
74
|
+
].join(', ')
|
|
75
|
+
: run.error
|
|
76
|
+
? `error: ${normalizeInline(run.error)}`
|
|
77
|
+
: 'no report';
|
|
78
|
+
const finished = run.finishedAt ? new Date(run.finishedAt).toISOString() : 'running';
|
|
79
|
+
const window = run.inputSeqFrom === null || run.inputSeqTo === null
|
|
80
|
+
? 'no input'
|
|
81
|
+
: `seq ${run.inputSeqFrom}-${run.inputSeqTo}`;
|
|
82
|
+
return `- [${run.status}, ${run.trigger}, ${finished}, ${window}] ${counts}`;
|
|
83
|
+
};
|
|
84
|
+
const renderDreamChangelog = (dreamRuns) => {
|
|
85
|
+
if (dreamRuns.length === 0)
|
|
86
|
+
return ['## Dream changelog', 'No dream runs yet.', ''];
|
|
87
|
+
return ['## Dream changelog', ...dreamRuns.map(formatDreamRunLine), ''];
|
|
88
|
+
};
|
|
89
|
+
const renderMemoryBody = (entries, dreamRuns) => {
|
|
90
|
+
const activeEntries = entries.filter((entry) => entry.status === 'active');
|
|
91
|
+
const lines = [];
|
|
92
|
+
if (activeEntries.length === 0) {
|
|
93
|
+
lines.push('No active memory entries.', '');
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
for (const kind of Object.keys(KIND_TITLES)) {
|
|
97
|
+
const group = activeEntries.filter((entry) => entry.kind === kind);
|
|
98
|
+
if (group.length === 0)
|
|
99
|
+
continue;
|
|
100
|
+
lines.push(`## ${KIND_TITLES[kind]}`);
|
|
101
|
+
for (const entry of group)
|
|
102
|
+
lines.push(formatEntryLine(entry));
|
|
103
|
+
lines.push('');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
lines.push(...renderDreamChangelog(dreamRuns));
|
|
107
|
+
return lines.join('\n');
|
|
108
|
+
};
|
|
109
|
+
export const renderMemoryExport = (entries, dreamRuns = []) => {
|
|
110
|
+
const body = renderMemoryBody(entries, dreamRuns);
|
|
111
|
+
return `${renderGeneratedPrefix(hashText(body))}${body}`;
|
|
112
|
+
};
|
|
113
|
+
const renderGeneratedPrefix = (hash) => `${[
|
|
114
|
+
'# Hive Memory',
|
|
115
|
+
'',
|
|
116
|
+
`${GENERATED_MARKER} sha256=${hash} -->`,
|
|
117
|
+
GENERATED_WARNING,
|
|
118
|
+
GENERATED_END_MARKER,
|
|
119
|
+
'',
|
|
120
|
+
].join('\n')}\n`;
|
|
121
|
+
const parseGeneratedBody = (content) => {
|
|
122
|
+
const markerMatch = content.match(/<!-- hive-memory:generated v1 sha256=([a-f0-9]+) -->/u);
|
|
123
|
+
const endIndex = content.indexOf(GENERATED_END_MARKER);
|
|
124
|
+
if (!markerMatch?.[1] || endIndex === -1)
|
|
125
|
+
return null;
|
|
126
|
+
const bodyStart = endIndex + GENERATED_END_MARKER.length;
|
|
127
|
+
return {
|
|
128
|
+
body: content.slice(bodyStart).replace(/^\n+/, ''),
|
|
129
|
+
hash: markerMatch[1],
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
const shouldBackupExisting = (content) => {
|
|
133
|
+
if (!content.includes(GENERATED_MARKER))
|
|
134
|
+
return true;
|
|
135
|
+
const generated = parseGeneratedBody(content);
|
|
136
|
+
if (!generated)
|
|
137
|
+
return true;
|
|
138
|
+
if (content !== `${renderGeneratedPrefix(generated.hash)}${generated.body}`)
|
|
139
|
+
return true;
|
|
140
|
+
return hashText(generated.body) !== generated.hash;
|
|
141
|
+
};
|
|
142
|
+
const backupExistingIfNeeded = (targetPath, now) => {
|
|
143
|
+
if (!existsSync(targetPath))
|
|
144
|
+
return;
|
|
145
|
+
const existing = readFileSync(targetPath, 'utf8');
|
|
146
|
+
if (!shouldBackupExisting(existing))
|
|
147
|
+
return;
|
|
148
|
+
const backupPath = `${targetPath}.backup-${now()}-${randomUUID()}`;
|
|
149
|
+
writeUtf8FileAtomically(backupPath, existing);
|
|
150
|
+
};
|
|
151
|
+
export const createTeamMemoryExportService = ({ debounceMs = MEMORY_EXPORT_DEBOUNCE_MS, getWorkspacePath, listDreamRuns = () => [], listEntries, logError = (workspaceId, error) => console.error(`[hive] failed to export memory for workspace ${workspaceId}`, error), now = () => Date.now(), }) => {
|
|
152
|
+
const timers = new Map();
|
|
153
|
+
const pending = new Set();
|
|
154
|
+
const cancel = (workspaceId) => {
|
|
155
|
+
const timer = timers.get(workspaceId);
|
|
156
|
+
if (timer)
|
|
157
|
+
clearTimeout(timer);
|
|
158
|
+
timers.delete(workspaceId);
|
|
159
|
+
pending.delete(workspaceId);
|
|
160
|
+
};
|
|
161
|
+
const flush = async (workspaceId) => {
|
|
162
|
+
const timer = timers.get(workspaceId);
|
|
163
|
+
if (timer)
|
|
164
|
+
clearTimeout(timer);
|
|
165
|
+
timers.delete(workspaceId);
|
|
166
|
+
const wasPending = pending.has(workspaceId);
|
|
167
|
+
let workspacePath;
|
|
168
|
+
try {
|
|
169
|
+
workspacePath = getWorkspacePath(workspaceId);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
pending.delete(workspaceId);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (!existsSync(workspacePath)) {
|
|
176
|
+
pending.delete(workspaceId);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const targetPath = getMemoryFilePath(workspacePath);
|
|
180
|
+
try {
|
|
181
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
182
|
+
backupExistingIfNeeded(targetPath, now);
|
|
183
|
+
writeUtf8FileAtomically(targetPath, renderMemoryExport(listEntries(workspaceId), listDreamRuns(workspaceId)));
|
|
184
|
+
pending.delete(workspaceId);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
if (wasPending)
|
|
188
|
+
pending.add(workspaceId);
|
|
189
|
+
throw error;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
return {
|
|
193
|
+
cancel,
|
|
194
|
+
async close() {
|
|
195
|
+
const workspaceIds = [...pending];
|
|
196
|
+
for (const workspaceId of workspaceIds) {
|
|
197
|
+
try {
|
|
198
|
+
await flush(workspaceId);
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
logError(workspaceId, error);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
for (const workspaceId of [...timers.keys()])
|
|
205
|
+
cancel(workspaceId);
|
|
206
|
+
},
|
|
207
|
+
flush,
|
|
208
|
+
schedule(workspaceId) {
|
|
209
|
+
const existing = timers.get(workspaceId);
|
|
210
|
+
if (existing)
|
|
211
|
+
clearTimeout(existing);
|
|
212
|
+
pending.add(workspaceId);
|
|
213
|
+
const timer = setTimeout(() => {
|
|
214
|
+
void flush(workspaceId).catch((error) => logError(workspaceId, error));
|
|
215
|
+
}, debounceMs);
|
|
216
|
+
timer.unref?.();
|
|
217
|
+
timers.set(workspaceId, timer);
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace memory total switch.
|
|
3
|
+
*
|
|
4
|
+
* Stored per workspace in app_state. Absent / any value other than "false"
|
|
5
|
+
* reads as enabled so existing workspaces gain memory behavior by default.
|
|
6
|
+
*/
|
|
7
|
+
export declare const workspaceMemoryEnabledKey: (workspaceId: string) => string;
|
|
8
|
+
export declare const workspaceMemoryDreamEnabledKey: (workspaceId: string) => string;
|
|
9
|
+
export declare const readWorkspaceMemoryEnabled: (raw: string | null | undefined) => boolean;
|
|
10
|
+
export declare const serializeWorkspaceMemoryEnabled: (enabled: boolean) => string;
|
|
11
|
+
export declare const readWorkspaceMemoryDreamEnabled: (raw: string | null | undefined) => boolean;
|
|
12
|
+
export declare const serializeWorkspaceMemoryDreamEnabled: (enabled: boolean) => string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace memory total switch.
|
|
3
|
+
*
|
|
4
|
+
* Stored per workspace in app_state. Absent / any value other than "false"
|
|
5
|
+
* reads as enabled so existing workspaces gain memory behavior by default.
|
|
6
|
+
*/
|
|
7
|
+
export const workspaceMemoryEnabledKey = (workspaceId) => `workspace.${workspaceId}.memory.enabled`;
|
|
8
|
+
export const workspaceMemoryDreamEnabledKey = (workspaceId) => `workspace.${workspaceId}.memory.dream.enabled`;
|
|
9
|
+
export const readWorkspaceMemoryEnabled = (raw) => raw !== 'false';
|
|
10
|
+
export const serializeWorkspaceMemoryEnabled = (enabled) => enabled ? 'true' : 'false';
|
|
11
|
+
export const readWorkspaceMemoryDreamEnabled = (raw) => raw !== 'false';
|
|
12
|
+
export const serializeWorkspaceMemoryDreamEnabled = (enabled) => enabled ? 'true' : 'false';
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { MemoryEntryWithSources, MemoryInjectionWithMemory, MemorySearchResult } from './team-memory-store.js';
|
|
2
|
+
export declare const serializeMemoryEntry: (entry: MemoryEntryWithSources) => {
|
|
3
|
+
archived_at: number | null;
|
|
4
|
+
body: string;
|
|
5
|
+
confidence: number | null;
|
|
6
|
+
created_at: number;
|
|
7
|
+
disabled: boolean;
|
|
8
|
+
id: string;
|
|
9
|
+
kind: "fact" | "preference" | "decision" | "pitfall" | "procedure_ref";
|
|
10
|
+
last_injected_at: number | null;
|
|
11
|
+
pinned: boolean;
|
|
12
|
+
scope: "workspace" | "user";
|
|
13
|
+
source: import("./team-memory-store.js").MemorySource;
|
|
14
|
+
sources: {
|
|
15
|
+
actor_agent_id_snapshot: string | null;
|
|
16
|
+
actor_name_snapshot: string | null;
|
|
17
|
+
actor_role_snapshot: string | null;
|
|
18
|
+
created_at: number;
|
|
19
|
+
excerpt: string | null;
|
|
20
|
+
id: string;
|
|
21
|
+
memory_id: string;
|
|
22
|
+
source_id: string | null;
|
|
23
|
+
source_sequence: number | null;
|
|
24
|
+
source_type: import("./team-memory-store.js").MemorySourceType;
|
|
25
|
+
text_hash: string | null;
|
|
26
|
+
}[];
|
|
27
|
+
status: import("./team-memory-store.js").MemoryStatus;
|
|
28
|
+
tags: string[];
|
|
29
|
+
updated_at: number;
|
|
30
|
+
workspace_id: string | null;
|
|
31
|
+
};
|
|
32
|
+
export declare const serializeMemorySearchResult: (entry: MemorySearchResult) => {
|
|
33
|
+
index_name: "like" | "trigram" | "unicode";
|
|
34
|
+
score: number;
|
|
35
|
+
archived_at: number | null;
|
|
36
|
+
body: string;
|
|
37
|
+
confidence: number | null;
|
|
38
|
+
created_at: number;
|
|
39
|
+
disabled: boolean;
|
|
40
|
+
id: string;
|
|
41
|
+
kind: "fact" | "preference" | "decision" | "pitfall" | "procedure_ref";
|
|
42
|
+
last_injected_at: number | null;
|
|
43
|
+
pinned: boolean;
|
|
44
|
+
scope: "workspace" | "user";
|
|
45
|
+
source: import("./team-memory-store.js").MemorySource;
|
|
46
|
+
sources: {
|
|
47
|
+
actor_agent_id_snapshot: string | null;
|
|
48
|
+
actor_name_snapshot: string | null;
|
|
49
|
+
actor_role_snapshot: string | null;
|
|
50
|
+
created_at: number;
|
|
51
|
+
excerpt: string | null;
|
|
52
|
+
id: string;
|
|
53
|
+
memory_id: string;
|
|
54
|
+
source_id: string | null;
|
|
55
|
+
source_sequence: number | null;
|
|
56
|
+
source_type: import("./team-memory-store.js").MemorySourceType;
|
|
57
|
+
text_hash: string | null;
|
|
58
|
+
}[];
|
|
59
|
+
status: import("./team-memory-store.js").MemoryStatus;
|
|
60
|
+
tags: string[];
|
|
61
|
+
updated_at: number;
|
|
62
|
+
workspace_id: string | null;
|
|
63
|
+
};
|
|
64
|
+
export declare const serializeMemoryInjection: (injection: MemoryInjectionWithMemory) => {
|
|
65
|
+
context_type: import("./team-memory-store.js").MemoryInjectionContext;
|
|
66
|
+
dispatch_id: string | null;
|
|
67
|
+
id: string;
|
|
68
|
+
injected_at: number;
|
|
69
|
+
memory: {
|
|
70
|
+
archived_at: number | null;
|
|
71
|
+
body: string;
|
|
72
|
+
confidence: number | null;
|
|
73
|
+
created_at: number;
|
|
74
|
+
disabled: boolean;
|
|
75
|
+
id: string;
|
|
76
|
+
kind: "fact" | "preference" | "decision" | "pitfall" | "procedure_ref";
|
|
77
|
+
last_injected_at: number | null;
|
|
78
|
+
pinned: boolean;
|
|
79
|
+
scope: "workspace" | "user";
|
|
80
|
+
source: import("./team-memory-store.js").MemorySource;
|
|
81
|
+
sources: {
|
|
82
|
+
actor_agent_id_snapshot: string | null;
|
|
83
|
+
actor_name_snapshot: string | null;
|
|
84
|
+
actor_role_snapshot: string | null;
|
|
85
|
+
created_at: number;
|
|
86
|
+
excerpt: string | null;
|
|
87
|
+
id: string;
|
|
88
|
+
memory_id: string;
|
|
89
|
+
source_id: string | null;
|
|
90
|
+
source_sequence: number | null;
|
|
91
|
+
source_type: import("./team-memory-store.js").MemorySourceType;
|
|
92
|
+
text_hash: string | null;
|
|
93
|
+
}[];
|
|
94
|
+
status: import("./team-memory-store.js").MemoryStatus;
|
|
95
|
+
tags: string[];
|
|
96
|
+
updated_at: number;
|
|
97
|
+
workspace_id: string | null;
|
|
98
|
+
};
|
|
99
|
+
memory_id: string;
|
|
100
|
+
target_agent_id_snapshot: string | null;
|
|
101
|
+
workspace_id: string | null;
|
|
102
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const serializeMemorySource = (source) => ({
|
|
2
|
+
actor_agent_id_snapshot: source.actorAgentIdSnapshot,
|
|
3
|
+
actor_name_snapshot: source.actorNameSnapshot,
|
|
4
|
+
actor_role_snapshot: source.actorRoleSnapshot,
|
|
5
|
+
created_at: source.createdAt,
|
|
6
|
+
excerpt: source.excerpt,
|
|
7
|
+
id: source.id,
|
|
8
|
+
memory_id: source.memoryId,
|
|
9
|
+
source_id: source.sourceId,
|
|
10
|
+
source_sequence: source.sourceSequence,
|
|
11
|
+
source_type: source.sourceType,
|
|
12
|
+
text_hash: source.textHash,
|
|
13
|
+
});
|
|
14
|
+
export const serializeMemoryEntry = (entry) => ({
|
|
15
|
+
archived_at: entry.archivedAt,
|
|
16
|
+
body: entry.body,
|
|
17
|
+
confidence: entry.confidence,
|
|
18
|
+
created_at: entry.createdAt,
|
|
19
|
+
disabled: entry.disabled,
|
|
20
|
+
id: entry.id,
|
|
21
|
+
kind: entry.kind,
|
|
22
|
+
last_injected_at: entry.lastInjectedAt,
|
|
23
|
+
pinned: entry.pinned,
|
|
24
|
+
scope: entry.scope,
|
|
25
|
+
source: entry.source,
|
|
26
|
+
sources: entry.sources.map(serializeMemorySource),
|
|
27
|
+
status: entry.status,
|
|
28
|
+
tags: entry.tags,
|
|
29
|
+
updated_at: entry.updatedAt,
|
|
30
|
+
workspace_id: entry.workspaceId,
|
|
31
|
+
});
|
|
32
|
+
export const serializeMemorySearchResult = (entry) => ({
|
|
33
|
+
...serializeMemoryEntry(entry),
|
|
34
|
+
index_name: entry.indexName,
|
|
35
|
+
score: entry.score,
|
|
36
|
+
});
|
|
37
|
+
export const serializeMemoryInjection = (injection) => ({
|
|
38
|
+
context_type: injection.contextType,
|
|
39
|
+
dispatch_id: injection.dispatchId,
|
|
40
|
+
id: injection.id,
|
|
41
|
+
injected_at: injection.injectedAt,
|
|
42
|
+
memory: serializeMemoryEntry(injection.memory),
|
|
43
|
+
memory_id: injection.memoryId,
|
|
44
|
+
target_agent_id_snapshot: injection.targetAgentIdSnapshot,
|
|
45
|
+
workspace_id: injection.workspaceId,
|
|
46
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { MemoryDigestPayload, WorkspaceMemoryDigestProvider } from './team-memory-digest.js';
|
|
2
|
+
import type { LogMemoryInjectionsInput } from './team-memory-store.js';
|
|
3
|
+
export interface TeamMemoryInjectionService {
|
|
4
|
+
buildDigest: WorkspaceMemoryDigestProvider['buildDigest'];
|
|
5
|
+
buildDispatchDigest: WorkspaceMemoryDigestProvider['buildDispatchDigest'];
|
|
6
|
+
deleteInjections: (injectionIds: string[]) => void;
|
|
7
|
+
logInjections: (input: LogMemoryInjectionsInput) => string[];
|
|
8
|
+
}
|
|
9
|
+
export declare const buildMemoryDigestSafely: ({ contextType, memoryInjection, workspaceId, }: {
|
|
10
|
+
contextType: "recovery" | "startup";
|
|
11
|
+
memoryInjection: TeamMemoryInjectionService | undefined;
|
|
12
|
+
workspaceId: string;
|
|
13
|
+
}) => MemoryDigestPayload | null;
|
|
14
|
+
export declare const buildDispatchMemoryDigestSafely: ({ memoryInjection, taskText, workerDescription, workspaceId, }: {
|
|
15
|
+
memoryInjection: TeamMemoryInjectionService | undefined;
|
|
16
|
+
taskText: string;
|
|
17
|
+
workerDescription: string;
|
|
18
|
+
workspaceId: string;
|
|
19
|
+
}) => MemoryDigestPayload | null;
|
|
20
|
+
export declare const logMemoryDigestInjection: ({ agentId, contextType, dispatchId, memoryDigest, memoryInjection, workspaceId, }: {
|
|
21
|
+
agentId: string;
|
|
22
|
+
contextType: LogMemoryInjectionsInput["contextType"];
|
|
23
|
+
dispatchId?: string | null;
|
|
24
|
+
memoryDigest: MemoryDigestPayload | null | undefined;
|
|
25
|
+
memoryInjection: TeamMemoryInjectionService | undefined;
|
|
26
|
+
workspaceId: string;
|
|
27
|
+
}) => string[] | null;
|
|
28
|
+
export declare const rollbackMemoryDigestInjection: ({ injectionIds, memoryInjection, }: {
|
|
29
|
+
injectionIds: string[] | null;
|
|
30
|
+
memoryInjection: TeamMemoryInjectionService | undefined;
|
|
31
|
+
}) => void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export const buildMemoryDigestSafely = ({ contextType, memoryInjection, workspaceId, }) => {
|
|
2
|
+
if (!memoryInjection)
|
|
3
|
+
return null;
|
|
4
|
+
try {
|
|
5
|
+
return memoryInjection.buildDigest({ contextType, workspaceId });
|
|
6
|
+
}
|
|
7
|
+
catch (error) {
|
|
8
|
+
console.error('[hive] memory digest build failed', error);
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
export const buildDispatchMemoryDigestSafely = ({ memoryInjection, taskText, workerDescription, workspaceId, }) => {
|
|
13
|
+
if (!memoryInjection)
|
|
14
|
+
return null;
|
|
15
|
+
try {
|
|
16
|
+
return memoryInjection.buildDispatchDigest({ taskText, workerDescription, workspaceId });
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
console.error('[hive] dispatch memory digest build failed', error);
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
export const logMemoryDigestInjection = ({ agentId, contextType, dispatchId, memoryDigest, memoryInjection, workspaceId, }) => {
|
|
24
|
+
if (!memoryDigest || memoryDigest.memoryIds.length === 0 || !memoryInjection)
|
|
25
|
+
return null;
|
|
26
|
+
try {
|
|
27
|
+
return memoryInjection.logInjections({
|
|
28
|
+
contextType,
|
|
29
|
+
dispatchId: dispatchId ?? null,
|
|
30
|
+
memoryIds: memoryDigest.memoryIds,
|
|
31
|
+
targetAgentIdSnapshot: agentId,
|
|
32
|
+
workspaceId,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
console.error('[hive] memory injection audit failed', error);
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
export const rollbackMemoryDigestInjection = ({ injectionIds, memoryInjection, }) => {
|
|
41
|
+
if (!injectionIds || injectionIds.length === 0 || !memoryInjection)
|
|
42
|
+
return;
|
|
43
|
+
try {
|
|
44
|
+
memoryInjection.deleteInjections(injectionIds);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error('[hive] memory injection audit rollback failed', error);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { Database } from 'better-sqlite3';
|
|
2
|
+
import { type MemoryKind } from '../shared/team-memory.js';
|
|
3
|
+
import type { AgentSummary } from '../shared/types.js';
|
|
4
|
+
export type MemoryStatus = 'active' | 'candidate' | 'archived' | 'rejected';
|
|
5
|
+
export type MemorySource = 'manual' | 'dream';
|
|
6
|
+
export type MemorySourceType = 'manual' | 'message' | 'dispatch' | 'report' | 'dream';
|
|
7
|
+
export type MemoryInjectionContext = 'startup' | 'dispatch' | 'recovery' | 'manual_search';
|
|
8
|
+
export interface MemoryActorSnapshot {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
role: AgentSummary['role'];
|
|
12
|
+
}
|
|
13
|
+
export interface MemoryEntryRecord {
|
|
14
|
+
archivedAt: number | null;
|
|
15
|
+
body: string;
|
|
16
|
+
confidence: number | null;
|
|
17
|
+
createdAt: number;
|
|
18
|
+
disabled: boolean;
|
|
19
|
+
id: string;
|
|
20
|
+
kind: MemoryKind;
|
|
21
|
+
lastInjectedAt: number | null;
|
|
22
|
+
pinned: boolean;
|
|
23
|
+
scope: 'workspace' | 'user';
|
|
24
|
+
source: MemorySource;
|
|
25
|
+
status: MemoryStatus;
|
|
26
|
+
tags: string[];
|
|
27
|
+
updatedAt: number;
|
|
28
|
+
workspaceId: string | null;
|
|
29
|
+
}
|
|
30
|
+
export interface MemorySourceRecord {
|
|
31
|
+
actorAgentIdSnapshot: string | null;
|
|
32
|
+
actorNameSnapshot: string | null;
|
|
33
|
+
actorRoleSnapshot: string | null;
|
|
34
|
+
createdAt: number;
|
|
35
|
+
excerpt: string | null;
|
|
36
|
+
id: string;
|
|
37
|
+
memoryId: string;
|
|
38
|
+
sourceId: string | null;
|
|
39
|
+
sourceSequence: number | null;
|
|
40
|
+
sourceType: MemorySourceType;
|
|
41
|
+
textHash: string | null;
|
|
42
|
+
}
|
|
43
|
+
export interface MemoryEntryWithSources extends MemoryEntryRecord {
|
|
44
|
+
sources: MemorySourceRecord[];
|
|
45
|
+
}
|
|
46
|
+
export interface MemorySearchResult extends MemoryEntryWithSources {
|
|
47
|
+
indexName: 'like' | 'trigram' | 'unicode';
|
|
48
|
+
score: number;
|
|
49
|
+
}
|
|
50
|
+
export interface AddMemoryEntryInput {
|
|
51
|
+
actor: MemoryActorSnapshot;
|
|
52
|
+
body: string;
|
|
53
|
+
confidence?: number | null;
|
|
54
|
+
kind: MemoryKind;
|
|
55
|
+
source?: MemorySource;
|
|
56
|
+
tags?: string[];
|
|
57
|
+
workspaceId: string;
|
|
58
|
+
}
|
|
59
|
+
export interface LogMemoryInjectionsInput {
|
|
60
|
+
contextType: MemoryInjectionContext;
|
|
61
|
+
dispatchId?: string | null;
|
|
62
|
+
memoryIds: string[];
|
|
63
|
+
targetAgentIdSnapshot?: string | null;
|
|
64
|
+
workspaceId: string;
|
|
65
|
+
}
|
|
66
|
+
export interface MemorySearchOptions {
|
|
67
|
+
includeDisabled?: boolean;
|
|
68
|
+
limit?: number;
|
|
69
|
+
statuses?: MemoryStatus[];
|
|
70
|
+
}
|
|
71
|
+
export interface MemoryListOptions {
|
|
72
|
+
limit?: number;
|
|
73
|
+
statuses?: MemoryStatus[];
|
|
74
|
+
}
|
|
75
|
+
export interface MemoryDigestOptions {
|
|
76
|
+
limit?: number;
|
|
77
|
+
}
|
|
78
|
+
export interface MemoryInjectionWithMemory {
|
|
79
|
+
contextType: MemoryInjectionContext;
|
|
80
|
+
dispatchId: string | null;
|
|
81
|
+
id: string;
|
|
82
|
+
injectedAt: number;
|
|
83
|
+
memory: MemoryEntryWithSources;
|
|
84
|
+
memoryId: string;
|
|
85
|
+
targetAgentIdSnapshot: string | null;
|
|
86
|
+
workspaceId: string | null;
|
|
87
|
+
}
|
|
88
|
+
export declare class MemoryEntryNotFoundError extends Error {
|
|
89
|
+
readonly memoryId: string;
|
|
90
|
+
readonly workspaceId: string;
|
|
91
|
+
constructor(memoryId: string, workspaceId: string);
|
|
92
|
+
}
|
|
93
|
+
export declare class MemoryEntryStatusError extends Error {
|
|
94
|
+
readonly actualStatus: MemoryStatus;
|
|
95
|
+
readonly memoryId: string;
|
|
96
|
+
readonly expectedStatus: MemoryStatus | MemoryStatus[];
|
|
97
|
+
constructor(memoryId: string, expectedStatus: MemoryStatus | MemoryStatus[], actualStatus: MemoryStatus);
|
|
98
|
+
}
|
|
99
|
+
export declare const createTeamMemoryStore: (db: Database) => {
|
|
100
|
+
addEntry: (input: AddMemoryEntryInput) => MemoryEntryWithSources;
|
|
101
|
+
approveCandidate: (workspaceId: string, memoryId: string) => MemoryEntryWithSources;
|
|
102
|
+
archiveEntry: (workspaceId: string, memoryId: string) => MemoryEntryWithSources;
|
|
103
|
+
deleteWorkspaceMemories: (workspaceId: string) => void;
|
|
104
|
+
deleteInjections: (injectionIds: string[]) => void;
|
|
105
|
+
getEntryWithSources: (workspaceId: string, memoryId: string) => MemoryEntryWithSources | undefined;
|
|
106
|
+
listDigestEntries: (workspaceId: string, options?: MemoryDigestOptions) => MemoryEntryWithSources[];
|
|
107
|
+
listExportEntries: (workspaceId: string) => MemoryEntryWithSources[];
|
|
108
|
+
listAllEntries: (workspaceId: string) => MemoryEntryWithSources[];
|
|
109
|
+
listEntries: (workspaceId: string, options?: MemoryListOptions) => MemoryEntryWithSources[];
|
|
110
|
+
listInjectionsForDispatch: (workspaceId: string, dispatchId: string) => MemoryInjectionWithMemory[];
|
|
111
|
+
logInjections: (input: LogMemoryInjectionsInput) => `${string}-${string}-${string}-${string}-${string}`[];
|
|
112
|
+
rejectCandidate: (workspaceId: string, memoryId: string) => MemoryEntryWithSources;
|
|
113
|
+
searchEntries: (workspaceId: string, query: string, options?: MemorySearchOptions) => MemorySearchResult[];
|
|
114
|
+
setDisabled: (workspaceId: string, memoryId: string, disabled: boolean) => MemoryEntryWithSources;
|
|
115
|
+
setPinned: (workspaceId: string, memoryId: string, pinned: boolean) => MemoryEntryWithSources;
|
|
116
|
+
};
|