@fingerskier/augment 0.1.4 → 0.1.6

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.
@@ -0,0 +1,359 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { createRequire } from "node:module";
3
+ export const DASHBOARD_HTML = `<!DOCTYPE html>
4
+ <html lang="en">
5
+ <head>
6
+ <meta charset="utf-8" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
8
+ <title>Augment — Memory Dashboard</title>
9
+ <link rel="stylesheet" href="/dashboard/styles.css" />
10
+ <script src="/dashboard/cytoscape.min.js"></script>
11
+ </head>
12
+ <body>
13
+ <header>
14
+ <div class="brand">augment</div>
15
+ <nav id="breadcrumb"><a href="#" data-nav="projects">Projects</a></nav>
16
+ <form id="search-form" autocomplete="off">
17
+ <input id="search-input" type="search" placeholder="Search memories…" />
18
+ <button type="submit">Search</button>
19
+ </form>
20
+ <button id="new-memory-btn" type="button" title="New memory">+ Memory</button>
21
+ </header>
22
+ <main>
23
+ <div id="cy"></div>
24
+ <aside id="inspector">
25
+ <div id="inspector-body" class="muted">Select a project to explore its memories.</div>
26
+ </aside>
27
+ </main>
28
+ <div id="toast" hidden></div>
29
+ <script src="/dashboard/app.js"></script>
30
+ </body>
31
+ </html>
32
+ `;
33
+ export const DASHBOARD_CSS = `:root {
34
+ --bg: #0f1419; --panel: #161b22; --line: #2a313c; --fg: #e6edf3; --muted: #8b949e;
35
+ --accent: #58a6ff; --danger: #f85149; --ok: #3fb950;
36
+ --spec: #58a6ff; --arch: #bc8cff; --issue: #f85149; --todo: #d29922; --work: #3fb950;
37
+ }
38
+ * { box-sizing: border-box; }
39
+ html, body { margin: 0; height: 100%; background: var(--bg); color: var(--fg);
40
+ font: 14px/1.5 system-ui, -apple-system, Segoe UI, Roboto, sans-serif; }
41
+ header { display: flex; align-items: center; gap: 12px; padding: 8px 14px;
42
+ background: var(--panel); border-bottom: 1px solid var(--line); }
43
+ .brand { font-weight: 700; letter-spacing: .5px; color: var(--accent); }
44
+ #breadcrumb { flex: 0 0 auto; color: var(--muted); }
45
+ #breadcrumb a { color: var(--accent); text-decoration: none; }
46
+ #breadcrumb span.sep { color: var(--muted); margin: 0 6px; }
47
+ #search-form { margin-left: auto; display: flex; gap: 6px; }
48
+ input, select, textarea, button { font: inherit; color: var(--fg);
49
+ background: var(--bg); border: 1px solid var(--line); border-radius: 6px; padding: 6px 9px; }
50
+ input:focus, select:focus, textarea:focus { outline: 1px solid var(--accent); }
51
+ button { background: #21262d; cursor: pointer; }
52
+ button:hover { border-color: var(--accent); }
53
+ button.primary { background: var(--accent); color: #04121f; border-color: var(--accent); font-weight: 600; }
54
+ button.danger { color: var(--danger); border-color: var(--danger); }
55
+ main { display: flex; height: calc(100% - 49px); }
56
+ #cy { flex: 1; height: 100%; }
57
+ #inspector { width: 360px; flex: 0 0 360px; height: 100%; overflow-y: auto;
58
+ background: var(--panel); border-left: 1px solid var(--line); padding: 14px; }
59
+ #inspector h2 { font-size: 15px; margin: 0 0 4px; }
60
+ #inspector .meta { color: var(--muted); font-size: 12px; margin-bottom: 10px; word-break: break-all; }
61
+ #inspector label { display: block; color: var(--muted); font-size: 12px; margin: 10px 0 3px; }
62
+ #inspector input, #inspector select, #inspector textarea { width: 100%; }
63
+ #inspector textarea { min-height: 180px; resize: vertical; font-family: ui-monospace, monospace; }
64
+ .row { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
65
+ .row button { flex: 1 1 auto; }
66
+ .muted { color: var(--muted); }
67
+ .kind-pill { display: inline-block; padding: 1px 7px; border-radius: 10px; font-size: 11px;
68
+ font-weight: 600; color: #04121f; }
69
+ .result { padding: 8px; border: 1px solid var(--line); border-radius: 6px; margin-bottom: 6px; cursor: pointer; }
70
+ .result:hover { border-color: var(--accent); }
71
+ .result .name { font-weight: 600; }
72
+ .result .sub { color: var(--muted); font-size: 12px; }
73
+ #toast { position: fixed; bottom: 16px; left: 50%; transform: translateX(-50%);
74
+ background: #21262d; border: 1px solid var(--line); border-radius: 6px; padding: 8px 14px; }
75
+ #toast.err { border-color: var(--danger); color: var(--danger); }
76
+ #toast.ok { border-color: var(--ok); color: var(--ok); }
77
+ `;
78
+ export const DASHBOARD_JS = String.raw `(() => {
79
+ "use strict";
80
+ const params = new URLSearchParams(location.search);
81
+ const token = params.get("token") || localStorage.getItem("augment_token") || "";
82
+ if (token) localStorage.setItem("augment_token", token);
83
+ // The token is a daemon credential; don't leave it sitting in the address bar
84
+ // or browser history. We've persisted it to localStorage, so strip it from the
85
+ // visible URL — a reload still authenticates from storage.
86
+ if (params.has("token") && window.history && history.replaceState) {
87
+ params.delete("token");
88
+ const query = params.toString();
89
+ history.replaceState(null, "", location.pathname + (query ? "?" + query : "") + location.hash);
90
+ }
91
+
92
+ const KIND_COLORS = { SPEC: "#58a6ff", ARCH: "#bc8cff", ISSUE: "#f85149", TODO: "#d29922", WORK: "#3fb950" };
93
+ const KINDS = ["ISSUE", "ARCH", "TODO", "SPEC", "WORK"];
94
+ const LINK_TYPES = ["DEPENDS_ON", "BLOCKS", "IMPLEMENTS", "PARENT", "RELATED"];
95
+
96
+ const $ = (sel) => document.querySelector(sel);
97
+ const inspector = $("#inspector-body");
98
+ const breadcrumb = $("#breadcrumb");
99
+
100
+ function h(tag, props, ...kids) {
101
+ const node = document.createElement(tag);
102
+ for (const [k, v] of Object.entries(props || {})) {
103
+ if (k === "class") node.className = v;
104
+ else if (k === "text") node.textContent = v;
105
+ else if (k.startsWith("on") && typeof v === "function") node.addEventListener(k.slice(2), v);
106
+ else if (v !== undefined && v !== null) node.setAttribute(k, v);
107
+ }
108
+ for (const kid of kids) node.append(kid && kid.nodeType ? kid : document.createTextNode(kid ?? ""));
109
+ return node;
110
+ }
111
+
112
+ function toast(message, kind) {
113
+ const t = $("#toast");
114
+ t.textContent = message;
115
+ t.className = kind || "";
116
+ t.hidden = false;
117
+ clearTimeout(toast._timer);
118
+ toast._timer = setTimeout(() => { t.hidden = true; }, 2600);
119
+ }
120
+
121
+ async function api(method, path, body) {
122
+ const res = await fetch(path, {
123
+ method,
124
+ headers: { "content-type": "application/json", ...(token ? { authorization: "Bearer " + token } : {}) },
125
+ body: body === undefined ? undefined : JSON.stringify(body),
126
+ });
127
+ const payload = await res.json().catch(() => ({}));
128
+ if (!res.ok) throw new Error(payload.error || (method + " " + path + " -> " + res.status));
129
+ return payload;
130
+ }
131
+
132
+ const state = { view: "projects", project: null, linkFrom: null };
133
+
134
+ const cy = cytoscape({
135
+ container: $("#cy"),
136
+ minZoom: 0.2,
137
+ maxZoom: 2.5,
138
+ style: [
139
+ { selector: "node", style: {
140
+ "label": "data(label)", "color": "#e6edf3", "font-size": 11, "text-wrap": "wrap",
141
+ "text-max-width": 120, "text-valign": "bottom", "text-margin-y": 4,
142
+ "background-color": "#30363d", "width": 26, "height": 26, "border-width": 2, "border-color": "#484f58" } },
143
+ { selector: 'node[type="project"]', style: {
144
+ "background-color": "#1f6feb", "border-color": "#58a6ff", "shape": "round-rectangle",
145
+ "width": 40, "height": 40, "font-size": 12, "font-weight": "bold" } },
146
+ { selector: "node[color]", style: { "background-color": "data(color)", "border-color": "data(color)" } },
147
+ { selector: "node:selected", style: { "border-color": "#ffffff", "border-width": 3 } },
148
+ { selector: "edge", style: {
149
+ "label": "data(label)", "font-size": 9, "color": "#8b949e", "curve-style": "bezier",
150
+ "width": 1.5, "line-color": "#484f58", "target-arrow-color": "#484f58",
151
+ "target-arrow-shape": "triangle", "text-rotation": "autorotate" } },
152
+ { selector: "edge:selected", style: { "line-color": "#58a6ff", "target-arrow-color": "#58a6ff", "width": 2.5 } },
153
+ ],
154
+ });
155
+
156
+ function layout() {
157
+ cy.layout({ name: "cose", animate: false, padding: 30, nodeRepulsion: 9000, idealEdgeLength: 90 }).run();
158
+ }
159
+
160
+ function setBreadcrumb() {
161
+ breadcrumb.replaceChildren(h("a", { href: "#", "data-nav": "projects", onclick: navProjects }, "Projects"));
162
+ if (state.view === "project" && state.project) {
163
+ breadcrumb.append(h("span", { class: "sep" }, "/"), h("span", { text: state.project.name }));
164
+ }
165
+ }
166
+
167
+ function navProjects(event) { if (event) event.preventDefault(); showProjects(); }
168
+
169
+ async function showProjects() {
170
+ state.view = "projects"; state.project = null; state.linkFrom = null;
171
+ setBreadcrumb();
172
+ inspector.replaceChildren(h("p", { class: "muted" }, "Click a project to reveal its memory graph."));
173
+ try {
174
+ const projects = await api("GET", "/projects");
175
+ cy.elements().remove();
176
+ cy.add(projects.map((p) => ({ data: { id: "p" + p.id, pid: p.id, type: "project", label: p.name } })));
177
+ layout();
178
+ } catch (err) { toast(err.message, "err"); }
179
+ }
180
+
181
+ async function openProject(projectId) {
182
+ try {
183
+ const graph = await api("GET", "/projects/" + projectId + "/graph");
184
+ state.view = "project"; state.project = graph.project; state.linkFrom = null;
185
+ setBreadcrumb();
186
+ const nodes = graph.memories.map((m) => ({
187
+ data: { id: "m" + m.id, mid: m.id, type: "memory", label: m.name, kind: m.kind, color: KIND_COLORS[m.kind] },
188
+ }));
189
+ const edges = graph.links.map((l) => ({
190
+ data: { id: "l" + l.id, lid: l.id, source: "m" + l.from_memory_id, target: "m" + l.to_memory_id,
191
+ label: l.type, type: "link" },
192
+ }));
193
+ cy.elements().remove();
194
+ cy.add([...nodes, ...edges]);
195
+ layout();
196
+ inspector.replaceChildren(h("p", { class: "muted" },
197
+ graph.memories.length + " memories, " + graph.links.length + " links. Click a node or edge."));
198
+ } catch (err) { toast(err.message, "err"); }
199
+ }
200
+
201
+ function kindPill(kind) {
202
+ return h("span", { class: "kind-pill", style: "background:" + (KIND_COLORS[kind] || "#888") }, kind);
203
+ }
204
+
205
+ async function selectMemory(memoryId) {
206
+ if (state.linkFrom && state.linkFrom !== memoryId) { return createLink(state.linkFrom, memoryId); }
207
+ try {
208
+ const m = await api("GET", "/memories/" + memoryId);
209
+ const kindSel = h("select", {}, ...KINDS.map((k) =>
210
+ h("option", { value: k, ...(k === m.kind ? { selected: "selected" } : {}) }, k)));
211
+ kindSel.disabled = true; // kind is fixed by the file path; edit body/tags here.
212
+ const tags = h("input", { type: "text", value: (m.tags || []).join(", ") });
213
+ const body = h("textarea", {}, m.body || "");
214
+ inspector.replaceChildren(
215
+ h("h2", {}, m.name, " ", kindPill(m.kind)),
216
+ h("div", { class: "meta" }, m.relative_path),
217
+ h("label", {}, "Tags (comma-separated)"), tags,
218
+ h("label", {}, "Body"), body,
219
+ h("div", { class: "row" },
220
+ h("button", { class: "primary", onclick: async () => {
221
+ try {
222
+ await api("POST", "/memories/upsert", {
223
+ project_id: m.project_id, memory_id: m.id, name: m.name,
224
+ content: body.value, tags: tags.value.split(",").map((s) => s.trim()).filter(Boolean),
225
+ });
226
+ toast("Saved", "ok");
227
+ } catch (err) { toast(err.message, "err"); }
228
+ } }, "Save"),
229
+ h("button", { onclick: () => { state.linkFrom = memoryId; toast("Pick a target node to link", "ok"); } }, "Link from here"),
230
+ h("button", { class: "danger", onclick: async () => {
231
+ try {
232
+ await api("DELETE", "/memories/" + m.id);
233
+ toast("Deleted", "ok");
234
+ openProject(state.project.id);
235
+ } catch (err) { toast(err.message, "err"); }
236
+ } }, "Delete"),
237
+ ),
238
+ );
239
+ } catch (err) { toast(err.message, "err"); }
240
+ }
241
+
242
+ async function createLink(fromId, toId) {
243
+ state.linkFrom = null;
244
+ const type = h("select", {}, ...LINK_TYPES.map((t) => h("option", { value: t }, t)));
245
+ inspector.replaceChildren(
246
+ h("h2", {}, "New link"),
247
+ h("div", { class: "meta" }, "memory " + fromId + " → memory " + toId),
248
+ h("label", {}, "Type"), type,
249
+ h("div", { class: "row" },
250
+ h("button", { class: "primary", onclick: async () => {
251
+ try {
252
+ await api("POST", "/links", { from_memory_id: fromId, to_memory_id: toId, type: type.value });
253
+ toast("Linked", "ok");
254
+ openProject(state.project.id);
255
+ } catch (err) { toast(err.message, "err"); }
256
+ } }, "Create link"),
257
+ h("button", { onclick: () => openProject(state.project.id) }, "Cancel"),
258
+ ),
259
+ );
260
+ }
261
+
262
+ function selectEdge(edge) {
263
+ const lid = edge.data("lid");
264
+ inspector.replaceChildren(
265
+ h("h2", {}, "Link"),
266
+ h("div", { class: "meta" }, edge.data("label")),
267
+ h("div", { class: "row" },
268
+ h("button", { class: "danger", onclick: async () => {
269
+ try {
270
+ await api("DELETE", "/links/" + lid);
271
+ toast("Link removed", "ok");
272
+ openProject(state.project.id);
273
+ } catch (err) { toast(err.message, "err"); }
274
+ } }, "Delete link"),
275
+ ),
276
+ );
277
+ }
278
+
279
+ function newMemoryForm() {
280
+ if (!state.project) { toast("Open a project first", "err"); return; }
281
+ const kind = h("select", {}, ...KINDS.map((k) => h("option", { value: k }, k)));
282
+ const name = h("input", { type: "text", placeholder: "memory-name" });
283
+ const tags = h("input", { type: "text", placeholder: "tag1, tag2" });
284
+ const body = h("textarea", {}, "");
285
+ inspector.replaceChildren(
286
+ h("h2", {}, "New memory in ", state.project.name),
287
+ h("label", {}, "Kind"), kind,
288
+ h("label", {}, "Name"), name,
289
+ h("label", {}, "Tags"), tags,
290
+ h("label", {}, "Body"), body,
291
+ h("div", { class: "row" },
292
+ h("button", { class: "primary", onclick: async () => {
293
+ if (!name.value.trim() || !body.value.trim()) { toast("Name and body required", "err"); return; }
294
+ try {
295
+ await api("POST", "/memories/upsert", {
296
+ project_id: state.project.id, kind: kind.value, name: name.value.trim(),
297
+ content: body.value, tags: tags.value.split(",").map((s) => s.trim()).filter(Boolean),
298
+ });
299
+ toast("Created", "ok");
300
+ openProject(state.project.id);
301
+ } catch (err) { toast(err.message, "err"); }
302
+ } }, "Create"),
303
+ h("button", { onclick: () => openProject(state.project.id) }, "Cancel"),
304
+ ),
305
+ );
306
+ }
307
+
308
+ async function runSearch(query) {
309
+ try {
310
+ const out = await api("POST", "/memories/search", { query, limit: 20, min_score: 0 });
311
+ const results = out.results || [];
312
+ const list = h("div", {}, h("h2", {}, "Search"), h("div", { class: "meta" }, results.length + " results for “" + query + "”"));
313
+ for (const r of results) {
314
+ const m = r.memory;
315
+ list.append(h("div", { class: "result", onclick: async () => { await openProject(m.project_id); selectMemory(m.id); } },
316
+ h("div", { class: "name" }, m.name, " ", kindPill(m.kind)),
317
+ h("div", { class: "sub" }, m.project_name + " · score " + r.score.toFixed(2)),
318
+ ));
319
+ }
320
+ inspector.replaceChildren(list);
321
+ } catch (err) { toast(err.message, "err"); }
322
+ }
323
+
324
+ cy.on("tap", 'node[type="project"]', (e) => openProject(e.target.data("pid")));
325
+ cy.on("tap", 'node[type="memory"]', (e) => selectMemory(e.target.data("mid")));
326
+ cy.on("tap", "edge", (e) => selectEdge(e.target));
327
+
328
+ $("#search-form").addEventListener("submit", (e) => {
329
+ e.preventDefault();
330
+ const q = $("#search-input").value.trim();
331
+ if (q) runSearch(q);
332
+ });
333
+ $("#new-memory-btn").addEventListener("click", newMemoryForm);
334
+
335
+ showProjects();
336
+ })();
337
+ `;
338
+ const STATIC_ASSETS = {
339
+ "/dashboard": { contentType: "text/html; charset=utf-8", body: DASHBOARD_HTML },
340
+ "/dashboard/": { contentType: "text/html; charset=utf-8", body: DASHBOARD_HTML },
341
+ "/dashboard/index.html": { contentType: "text/html; charset=utf-8", body: DASHBOARD_HTML },
342
+ "/dashboard/styles.css": { contentType: "text/css; charset=utf-8", body: DASHBOARD_CSS },
343
+ "/dashboard/app.js": { contentType: "application/javascript; charset=utf-8", body: DASHBOARD_JS },
344
+ };
345
+ /** Static dashboard asset for a pathname, or undefined if the path is not a dashboard asset. */
346
+ export function dashboardAsset(pathname) {
347
+ return STATIC_ASSETS[pathname];
348
+ }
349
+ let cytoscapeBundle;
350
+ /** The bundled Cytoscape UMD build (resolved from node_modules), cached after first read. */
351
+ export async function cytoscapeBundleJs() {
352
+ if (cytoscapeBundle === undefined) {
353
+ const require = createRequire(import.meta.url);
354
+ const file = require.resolve("cytoscape/dist/cytoscape.min.js");
355
+ cytoscapeBundle = await readFile(file, "utf8");
356
+ }
357
+ return cytoscapeBundle;
358
+ }
359
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/dashboard/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAe5C,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B7B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4C5B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmQrC,CAAC;AAEF,MAAM,aAAa,GAAmC;IACpD,YAAY,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE,IAAI,EAAE,cAAc,EAAE;IAC/E,aAAa,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE,IAAI,EAAE,cAAc,EAAE;IAChF,uBAAuB,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE,IAAI,EAAE,cAAc,EAAE;IAC1F,uBAAuB,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,IAAI,EAAE,aAAa,EAAE;IACxF,mBAAmB,EAAE,EAAE,WAAW,EAAE,uCAAuC,EAAE,IAAI,EAAE,YAAY,EAAE;CAClG,CAAC;AAEF,gGAAgG;AAChG,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,IAAI,eAAmC,CAAC;AAExC,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAChE,eAAe,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC"}
package/dist/db.d.ts CHANGED
@@ -11,6 +11,7 @@ export declare class AugmentDatabase {
11
11
  getProjectById(id: number): Promise<ProjectRecord | undefined>;
12
12
  getProjectByName(name: string): Promise<ProjectRecord | undefined>;
13
13
  upsertMemory(memory: ParsedMemory): Promise<MemoryRecord>;
14
+ deleteMemory(id: number): Promise<void>;
14
15
  removeMissingMemories(relativePaths: string[]): Promise<void>;
15
16
  rebuildLinks(): Promise<void>;
16
17
  getMemoryById(id: number): Promise<MemoryRecord | undefined>;
package/dist/db.js CHANGED
@@ -139,6 +139,10 @@ export class AugmentDatabase {
139
139
  }
140
140
  return record;
141
141
  }
142
+ async deleteMemory(id) {
143
+ // ON DELETE CASCADE removes the row's embeddings and any links touching it.
144
+ await this.execute(`DELETE FROM memories WHERE id = ?`, [id]);
145
+ }
142
146
  async removeMissingMemories(relativePaths) {
143
147
  if (relativePaths.length === 0) {
144
148
  await this.execute(`DELETE FROM memories`);
package/dist/db.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { type RecallOptions } from "./recall.js";
2
+ /**
3
+ * Host-agnostic hook handlers. Claude Code and Codex CLI share the same
4
+ * lifecycle-hook stdin/stdout JSON contract (Codex copied the event names and
5
+ * envelopes), so one set of handlers serves both. The only host difference this
6
+ * file cares about is the field naming the prompt: Claude sends `user_input`,
7
+ * Codex sends `prompt` — `readPrompt` accepts either.
8
+ *
9
+ * Every handler is **fail-open**: a hook runs on every prompt and every turn
10
+ * boundary, so any failure must degrade to "do nothing" (empty stdout, exit 0)
11
+ * rather than break — or worse, trap — the host agent.
12
+ */
13
+ /** The instruction injected when the Stop hook blocks once per turn. */
14
+ export declare const STOP_DIRECTIVE: string;
15
+ export interface HookResult {
16
+ /** Text to print to stdout (may be ""). */
17
+ stdout: string;
18
+ /** Process exit code (always 0 — hooks fail open). */
19
+ exitCode: number;
20
+ }
21
+ export interface HookDeps {
22
+ /** Recall memory text for a prompt. Defaults to the real {@link recall}. */
23
+ recall?: (options: RecallOptions) => Promise<string>;
24
+ /** Initialize/register the project for a cwd. Defaults to a daemon call. */
25
+ initProject?: (cwd?: string) => Promise<void>;
26
+ /**
27
+ * Loop guard for the Stop hook. Returns `true` if this turn key was already
28
+ * seen (so the agent may stop), `false` the first time (so we block once and
29
+ * mark it seen). Defaults to an atomic marker file under the temp dir.
30
+ */
31
+ markerSeen?: (key: string) => Promise<boolean>;
32
+ }
33
+ export declare function handleUserPromptSubmit(payload: Record<string, unknown>, deps: HookDeps): Promise<HookResult>;
34
+ /**
35
+ * PreToolUse: recalls *additional* memory targeted to the specific tool action (the file being
36
+ * edited, the command being run) and injects it as `additionalContext`, supplementing the
37
+ * task-level memory UserPromptSubmit already injected.
38
+ *
39
+ * Injection-only by design: it never emits `permissionDecision`/`updatedInput`/a legacy
40
+ * `decision`, and always exits 0 — memory must never block, gate, or rewrite a real tool call
41
+ * (only exit 2 / a deny would). On Claude this context rides alongside the tool result; on older
42
+ * Codex builds that don't yet support PreToolUse `additionalContext` it is simply dropped (the
43
+ * tool still runs), so this is purely additive over the guaranteed UserPromptSubmit path.
44
+ */
45
+ export declare function handlePreToolUse(payload: Record<string, unknown>, deps: HookDeps): Promise<HookResult>;
46
+ export declare function handleSessionStart(payload: Record<string, unknown>, deps: HookDeps): Promise<HookResult>;
47
+ export declare function handleStop(payload: Record<string, unknown>, deps: HookDeps): Promise<HookResult>;
48
+ /**
49
+ * Parses raw hook stdin JSON and dispatches by event name. Unknown events,
50
+ * blank input, and invalid JSON all degrade to a no-op — a hook must never
51
+ * throw out of the CLI.
52
+ */
53
+ export declare function runHook(event: string, raw: string, deps?: HookDeps): Promise<HookResult>;