@cstart/coldstart 2.2.7 → 2.2.9

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.
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/kb/view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/kb/view.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/server/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAOnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAUxD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2InB,CAAC;AAKX,MAAM,WAAW,gBAAgB;IAC/B;uEACmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,EACvC,IAAI,GAAE,gBAAqB,GAC1B,IAAI,CAoJN;AAOD,eAAO,MAAM,mBAAmB,QAIpB,CAAC;AAKb,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,GAAE,gBAAqB,GAAG,MAAM,CAO5G;AAKD,wBAAsB,cAAc,CAClC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,EACjD,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,EACvC,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAsBf"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/server/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAUnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAUxD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2InB,CAAC;AAKX,MAAM,WAAW,gBAAgB;IAC/B;uEACmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,EACvC,IAAI,GAAE,gBAAqB,GAC1B,IAAI,CA0JN;AAOD,eAAO,MAAM,mBAAmB,QAIpB,CAAC;AAKb,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,GAAE,gBAAqB,GAAG,MAAM,CAiB5G;AAKD,wBAAsB,cAAc,CAClC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,EACjD,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,EACvC,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAuCf"}
@@ -1,6 +1,6 @@
1
1
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
- import { CallToolRequestSchema, ListToolsRequestSchema, ListRootsResultSchema, } from '@modelcontextprotocol/sdk/types.js';
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, ListRootsResultSchema, ListResourcesRequestSchema, ListResourceTemplatesRequestSchema, ListPromptsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
4
  import { getCurrentVersion } from '../daemon-lock.js';
5
5
  import { handleFind, handleGetStructure, } from './tools.js';
6
6
  // ---------------------------------------------------------------------------
@@ -144,6 +144,11 @@ export function registerToolHandlers(server, getContext, opts = {}) {
144
144
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
145
145
  tools: TOOL_DEFINITIONS,
146
146
  }));
147
+ // Stubs backing the empty resources/prompts capabilities declared in
148
+ // createMcpServer — coldstart exposes tools only.
149
+ server.setRequestHandler(ListResourcesRequestSchema, async () => ({ resources: [] }));
150
+ server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => ({ resourceTemplates: [] }));
151
+ server.setRequestHandler(ListPromptsRequestSchema, async () => ({ prompts: [] }));
147
152
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
148
153
  const { name, arguments: args } = request.params;
149
154
  const params = (args ?? {});
@@ -295,7 +300,17 @@ export const SERVER_INSTRUCTIONS = [
295
300
  // Factory — creates a fully wired MCP server (the stdio reader over the cache)
296
301
  // ---------------------------------------------------------------------------
297
302
  export function createMcpServer(getContext, opts = {}) {
298
- const server = new Server({ name: 'coldstart', version: getCurrentVersion() }, { capabilities: { tools: {} }, instructions: SERVER_INSTRUCTIONS });
303
+ const server = new Server({ name: 'coldstart', version: getCurrentVersion() }, {
304
+ // resources/prompts are declared EMPTY on purpose. coldstart has neither,
305
+ // and answering `-32601 Method not found` is spec-correct — but directory
306
+ // crawlers (Glama) introspect all three lists in one pass, and at least one
307
+ // treats an error reply as a failed inspection and stores nothing at all,
308
+ // losing the tools it had already read. An empty list costs nothing and
309
+ // cannot be misread. See registerToolHandlers for the stub handlers that
310
+ // make these declarations honest.
311
+ capabilities: { tools: {}, resources: {}, prompts: {} },
312
+ instructions: SERVER_INSTRUCTIONS,
313
+ });
299
314
  registerToolHandlers(server, getContext, opts);
300
315
  return server;
301
316
  }
@@ -304,9 +319,24 @@ export function createMcpServer(getContext, opts = {}) {
304
319
  // ---------------------------------------------------------------------------
305
320
  export async function startMCPServer(onReady, getContext, opts = {}) {
306
321
  const server = createMcpServer(getContext, opts);
322
+ // Wait for `notifications/initialized` before originating any request of our
323
+ // own. `server.connect()` resolves when the TRANSPORT opens, not when the
324
+ // handshake completes — asking for roots straight after it put a server→client
325
+ // request on the wire BEFORE we had answered the client's `initialize`, and it
326
+ // carried outbound id 0, which collides with clients that number their own
327
+ // requests from 0. Spec-legal (ids are scoped per requestor) but a client
328
+ // keeping one id table for both directions loses its pending initialize.
329
+ const initialized = new Promise((resolve) => {
330
+ server.oninitialized = () => resolve();
331
+ });
307
332
  const transport = new StdioServerTransport();
308
333
  await server.connect(transport);
309
- // After connect, ask for roots cap at 1s so standalone runs don't stall
334
+ // Don't hang forever on a client that never sends `initialized`.
335
+ await Promise.race([
336
+ initialized,
337
+ new Promise((resolve) => setTimeout(resolve, 2000).unref?.()),
338
+ ]);
339
+ // Handshake done — now ask for roots. Cap at 1s so standalone runs don't stall.
310
340
  let clientRoots = [];
311
341
  try {
312
342
  const result = await server.request({ method: 'roots/list' }, ListRootsResultSchema, { timeout: 1000 });
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/server/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/server/mcp.ts"],"names":[],"mappings":"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"}
@@ -87,7 +87,7 @@ for it — your findings, not the notebook decision.`
87
87
  body = body.includes("{{WORKLIST}}")
88
88
  ? body.replaceAll("{{WORKLIST}}", worklist)
89
89
  : `${body.trimEnd()}\n\nWORKLIST — files you actually read this session, most-worked first \
90
- (the complete scope; never write a note for an unlisted file):\n\n${worklist}`;
90
+ (your scope; if you edited or deep-read a file that isn't listed, you can note it too):\n\n${worklist}`;
91
91
  return `**Notebook capture point.** ${opening}\n\n${body.trimEnd()}${tail}`;
92
92
  }
93
93
 
@@ -102,8 +102,9 @@ branch, reviewing a PR, or reading vendored/generated code, that knowledge is ab
102
102
  or the future — write nothing and say so.
103
103
  2. If nothing about the current code is worth recording, no note is the right answer. If a \
104
104
  future agent would not act differently for knowing it, don't store it.
105
- 3. The worklist below is the complete scope. Unlisted files are out — ignored \
106
- (.coldstartignore) or already captured. Never write a note for an unlisted file.
105
+ 3. The worklist below is your scope, most-worked first. Unlisted files are out — ignored \
106
+ (.coldstartignore) or already captured. If you edited or deep-read a file this session that \
107
+ isn't listed, you can write a note for it too.
107
108
 
108
109
  WORKLIST — files you actually read this session, most-worked first:
109
110
 
@@ -119,7 +120,13 @@ naming convention) is exactly what to record — ONLY if you actually observed i
119
120
  session's work. Never guess at usage or go searching for it now. Files flagged "no consumers \
120
121
  in import graph" are where an observed usage fact matters most.
121
122
  7. Fixed a bug? The cause goes in the culpable file's note; the SYMPTOM words go in \
122
- "aliases" — symptoms are what a future agent will search.
123
+ "aliases" — symptoms are what a future agent will search. Aliases are SEARCH KEYS, not \
124
+ sentences: each one 2-5 words, no filler ("after", "already", "another", "still"), because \
125
+ every word in an alias is an independent match chance and a long alias makes the note fire \
126
+ on prompts it has nothing to do with. Cover the vocabulary THIS FILE owns — the concept \
127
+ nouns someone would type when they want this file, including the ones already in its name \
128
+ and symbols. A note about alias handling that never says "aliases" cannot be found by \
129
+ someone asking about aliases. 6-10 aliases is plenty; more surface area is not more recall.
123
130
  8. Read a note this session that proved wrong? Correct or retract it now — you are the warm \
124
131
  agent; there is no "next".
125
132
  9. Firsthand only: nothing from a subagent's report you didn't verify yourself.
@@ -127,25 +134,27 @@ agent; there is no "next".
127
134
  11. Never copy secret VALUES (env contents, tokens, keys) into a note — notes are committed \
128
135
  to git.
129
136
 
130
- FLOWS — rare. While investigating you will see flows everywhere: every file connects to \
131
- something, every feature has a chain. Those connections are not flow notes at that rate, \
132
- everything would be a flow.
133
- A flow note records PRODUCT-level knowledge: how the system behaves as a whole, knowledge no \
134
- single file owns. The test, for every candidate: is this about how the CODEBASE works, or \
135
- about how one file works? File-level → it belongs in that file's note. Product-level → flow.
136
- Examples that can qualify:
137
+ FLOWS — the product-level layer. A flow note records knowledge no single file owns: how the \
138
+ system behaves as a whole. The test, for every candidate: is this about how the CODEBASE \
139
+ works, or about how one file works? File-level → it belongs in that file's note. \
140
+ Product-level flow.
141
+ Examples that qualify:
137
142
  - how authentication works end-to-end
138
143
  - how UI components get rendered under different conditions
139
144
  - how a file is consumed along a path when its imports don't reveal it and the gotcha spans \
140
145
  the path (a single non-obvious consumer is NOT a flow — it goes in that file's own note, rule 6)
141
146
  The summary's FIRST sentence states the product-level fact — the thing a reader of all the \
142
- file notes would still be missing.
147
+ file notes would still be missing. If you cannot write that sentence, there is no flow.
143
148
  Steps are the minimal chain, each with its role. kb write WARNS when fewer than two steps \
144
149
  are files you read this session — a flow assembled from grep hits is the classic bad flow; \
145
150
  take that warning seriously.
146
151
  Never a flow: a feature's parts-list, a relationship the import graph already shows, a \
147
152
  mechanism living in one file.
148
- kb search first update the existing flow, never a near-duplicate.
153
+ kb search first. UPDATE an existing flow only when your missing-fact sentence is THE SAME \
154
+ fact it already leads with — new detail about a mechanism it already tells. A DIFFERENT \
155
+ missing fact is a NEW flow, even in the same subsystem, even across the same files. Folding \
156
+ an unrelated fact into a nearby flow buries it: nobody searching for your fact will find that \
157
+ title.
149
158
 
150
159
  WRITE — one Bash block total: specs as heredocs, writes chained with &&.
151
160
  {"type":"file-single","path":"src/x.py","summary":"1-3 sentences","aliases":["symptom words"]}
@@ -156,5 +165,11 @@ with several of its symbols. file-hub is ONLY for grab-bag files that have no si
156
165
  not make a file a hub; having no one purpose does.
157
166
  Update = the same spec plus "id":"<id from the worklist>".
158
167
  node ${cli} kb write /tmp/spec1.json --root ${root} --session ${sid} --force
159
- Flow/lesson shapes: run \`node ${cli} kb write --root ${root}\` with no spec — it prints the full guide.${tail}`;
168
+ Flow/lesson shapes: run \`node ${cli} kb write --root ${root}\` with no spec — it prints the full guide.
169
+
170
+ FLOW DECISION — run this EVERY time, as its own command. It stands apart from the WRITE block \
171
+ above: run it even when you decided no note was warranted and emitted no Bash block at all. It \
172
+ records only what you decided about FLOWS (created a new one, folded into an existing one, or \
173
+ none) so the flow gate can be measured.
174
+ node ${cli} kb flow-decision --decision <none|new|update> [--id <flow id>] --why "<one clause>" --root ${root} --session ${sid}${tail}`;
160
175
  }
@@ -27,6 +27,11 @@ import { existsSync, appendFileSync, readFileSync, writeFileSync } from "node:fs
27
27
  import { join } from "node:path";
28
28
  import { tmpdir } from "node:os";
29
29
  import { fileURLToPath } from "node:url";
30
+ // Strip host telemetry wrappers before the query is built — see recall-query.mjs.
31
+ import { recallQuery } from "./recall-query.mjs";
32
+ // Per-session dedup shared with the other recall hooks — see recall-seen.mjs.
33
+ // Hosts with no transcript path never reset; dedup still holds for the session.
34
+ import { readSeen, writeSeen, idsInPage, seenArgs } from "./recall-seen.mjs";
30
35
 
31
36
  // hooks/ sits beside dist/ in both the repo and the published package.
32
37
  const CLI = fileURLToPath(new URL("../dist/index.js", import.meta.url));
@@ -71,15 +76,23 @@ process.on("unhandledRejection", (e) => { log(`unhandled ${e?.stack || e}`); pro
71
76
  if (!root) process.exit(0);
72
77
  setLogRoot(root);
73
78
 
79
+ const sid = String(input.session_id || "").replace(/[^\w-]/g, "");
80
+
74
81
  // No notebook → no tax, not even a child process.
75
82
  if (!existsSync(join(root, ".coldstart", "notebook", ".raw"))) process.exit(0);
76
83
 
77
- const prompt = String(input.prompt || "").slice(0, MAX_QUERY_CHARS).trim();
84
+ const prompt = recallQuery(input.prompt, MAX_QUERY_CHARS);
78
85
  if (!prompt) process.exit(0);
79
86
 
87
+ // Ephemeral Codex runs expose no rollout path; readSeen then never resets,
88
+ // which is the safe direction — dedup simply holds for the whole session.
89
+ const tPath = String(input.transcript_path || "");
90
+ const seen = readSeen(sid, tPath, log);
91
+
80
92
  let page = "";
81
93
  try {
82
- page = execFileSync("node", [CLI, "kb", "search", "--hook", "--max", "3", "--root", root, prompt], {
94
+ const args = [CLI, "kb", "search", "--hook", "--max", "3", "--root", root, ...seenArgs(seen.ids)];
95
+ page = execFileSync("node", [...args, prompt], {
83
96
  encoding: "utf8",
84
97
  timeout: SEARCH_TIMEOUT_MS,
85
98
  stdio: ["ignore", "pipe", "ignore"],
@@ -94,6 +107,10 @@ process.on("unhandledRejection", (e) => { log(`unhandled ${e?.stack || e}`); pro
94
107
  process.exit(0);
95
108
  }
96
109
 
110
+ // Record what this page hands over before the size guards can trim it — a
111
+ // note the agent was shown is seen, whichever way it ends up rendered.
112
+ writeSeen(sid, [...seen.ids, ...idsInPage(page)], tPath);
113
+
97
114
  // Pointer page (rulings 2026-07-06/08): titles + gists + an OPENABLE note
98
115
  // path, never a full body — a wrong pointer costs a glance, a wrong
99
116
  // implant poisons the whole session. Depth is one Read of the → path away
@@ -130,7 +147,6 @@ process.on("unhandledRejection", (e) => { log(`unhandled ${e?.stack || e}`); pro
130
147
  // grep-spiral unguarded otherwise. Path/shape must match the handler's state
131
148
  // file: literal /tmp + main-agent key = session_id.
132
149
  try {
133
- const sid = String(input.session_id || "");
134
150
  if (sid && /^[\w-]+$/.test(sid)) {
135
151
  const sf = `/tmp/find_nudge_${sid}.json`;
136
152
  let st = {};
@@ -29,6 +29,11 @@ import { cursorRoot } from "./cursor-input.mjs";
29
29
  // stop wrote its worklist payload to a pending file instead of blocking; it
30
30
  // rides this same next-prompt channel — capture first, then the user's request.
31
31
  import { takePendingCapture } from "./elicit-core.mjs";
32
+ // Strip host telemetry wrappers before the query is built — see recall-query.mjs.
33
+ import { recallQuery } from "./recall-query.mjs";
34
+ // Per-session dedup shared with the other recall hooks — see recall-seen.mjs.
35
+ // Hosts with no transcript path never reset; dedup still holds for the session.
36
+ import { readSeen, writeSeen, idsInPage, seenArgs } from "./recall-seen.mjs";
32
37
 
33
38
  // hooks/ sits beside dist/ in both the repo and the published package.
34
39
  const CLI = fileURLToPath(new URL("../dist/index.js", import.meta.url));
@@ -80,13 +85,17 @@ process.on("unhandledRejection", (e) => { log(`unhandled ${e?.stack || e}`); pro
80
85
  // (the first capture is what creates it).
81
86
  const pending = takePendingCapture(sid);
82
87
 
83
- const prompt = String(input.prompt || "").slice(0, MAX_QUERY_CHARS).trim();
88
+ const prompt = recallQuery(input.prompt, MAX_QUERY_CHARS);
89
+
90
+ const tPath = String(input.transcript_path || "");
91
+ const seen = readSeen(sid, tPath, log);
84
92
 
85
93
  let page = "";
86
94
  // No notebook / no prompt → no recall search, not even a child process.
87
95
  if (prompt && existsSync(join(root, ".coldstart", "notebook", ".raw"))) {
96
+ const args = [CLI, "kb", "search", "--hook", "--max", "3", "--root", root, ...seenArgs(seen.ids)];
88
97
  try {
89
- page = execFileSync("node", [CLI, "kb", "search", "--hook", "--max", "3", "--root", root, prompt], {
98
+ page = execFileSync("node", [...args, prompt], {
90
99
  encoding: "utf8",
91
100
  timeout: SEARCH_TIMEOUT_MS,
92
101
  stdio: ["ignore", "pipe", "ignore"],
@@ -108,6 +117,10 @@ process.on("unhandledRejection", (e) => { log(`unhandled ${e?.stack || e}`); pro
108
117
  // Pointer page — titles + gists + an OPENABLE note path, never a full body.
109
118
  // (Same framing as codex-kb-recall.mjs; notes are REFERENCE DATA, not
110
119
  // instructions.)
120
+ // Record what this page hands over before the size guards can trim it — a
121
+ // note the agent was shown is seen, whichever way it ends up rendered.
122
+ if (page) writeSeen(sid, [...seen.ids, ...idsInPage(page)], tPath);
123
+
111
124
  let block = "";
112
125
  if (page) block =
113
126
  `The repo's notebook (notes written by past agents after real tasks here) has entries ` +
@@ -16,7 +16,10 @@ import { tmpdir } from "node:os";
16
16
  import { execFileSync } from "node:child_process";
17
17
  import { existsSync, readFileSync, writeFileSync, unlinkSync, appendFileSync, mkdirSync } from "node:fs";
18
18
 
19
- export const MAX_WORKLIST = 30;
19
+ import { MAX_CAPTURE_FILES } from "./trigger.mjs";
20
+ // One source of truth: the display cap equals what a fire claims, so the prompt
21
+ // never shows fewer (or more) files than the fire marks captured.
22
+ export const MAX_WORKLIST = MAX_CAPTURE_FILES;
20
23
 
21
24
  const noop = () => {};
22
25
 
@@ -29,7 +29,7 @@
29
29
  */
30
30
 
31
31
  import { tmpdir } from "node:os";
32
- import { join, resolve } from "node:path";
32
+ import { join, resolve, dirname } from "node:path";
33
33
  import { fileURLToPath } from "node:url";
34
34
  import { existsSync, writeFileSync, appendFileSync, readFileSync, readdirSync, statSync } from "node:fs";
35
35
 
@@ -38,7 +38,7 @@ import { initialState, step } from "./trigger.mjs";
38
38
  import { loadIgnore } from "./ignore.mjs";
39
39
  import { buildCapturePayload } from "./capture-payload.mjs";
40
40
  import {
41
- worklistEntries, freshNotedSet, gitHead, logCaptureEvent, writePendingCapture,
41
+ worklistEntries, freshNotedSet, gitHead, logCaptureEvent, writePendingCapture, MAX_WORKLIST,
42
42
  } from "./elicit-core.mjs";
43
43
 
44
44
  // hooks/ sits beside dist/ in both the repo and the published package.
@@ -51,6 +51,31 @@ function log(msg) {
51
51
  try { appendFileSync(LOG_FILE, `[${new Date().toISOString()}] elicit: ${msg}\n`); } catch { /* never fail logging */ }
52
52
  }
53
53
 
54
+ // --- Repo-root resolution ----------------------------------------------------
55
+ /**
56
+ * The Stop payload's `cwd` tracks the session's shell, which a `cd` inside a
57
+ * Bash call moves — sometimes clean OUT of the repo (e.g. into ~/.claude/…/memory
58
+ * to edit private files). Root was taken raw from that cwd, so normRel would then
59
+ * strip the WRONG prefix and admit a foreign absolute path into the worklist as if
60
+ * it were repo-local (observed 2026-07-25: MEMORY.md / drive.mjs entered a marker).
61
+ * A notebook-inited repo carries a `.coldstart/notebook/` dir, so walk up from cwd
62
+ * to the nearest ancestor that has one — that is the true root regardless of shell
63
+ * drift. `.coldstart/notebook` (not bare `.coldstart`) is the marker on purpose: the
64
+ * GLOBAL `~/.coldstart` dir holds daemon/searcher state and no notebook, so a drift
65
+ * into ~ must not resolve to the home directory.
66
+ * Returns "" when cwd is not inside any notebook-inited repo.
67
+ */
68
+ function findRepoRoot(startDir) {
69
+ let dir = resolve(startDir || ".");
70
+ for (let i = 0; i < 40; i++) {
71
+ if (existsSync(join(dir, ".coldstart", "notebook"))) return dir;
72
+ const parent = dirname(dir);
73
+ if (parent === dir) break;
74
+ dir = parent;
75
+ }
76
+ return "";
77
+ }
78
+
54
79
  // --- Subagent transcript resolution ------------------------------------------
55
80
  /**
56
81
  * Resolve a subagent's transcript, supporting both flat and nested layouts.
@@ -108,7 +133,13 @@ process.on("unhandledRejection", (e) => { log(`unhandled ${e?.stack || e}`); pro
108
133
  // session: the freshest marker in tmpdir whose recorded (relative) files still
109
134
  // resolve under <root> is this repo's active session. We then emit the SAME
110
135
  // capture payload an automatic fire would, built from accumulated evidence.
111
- // READ-ONLY — never mutates the marker, so it cannot perturb automatic firing.
136
+ //
137
+ // It marks the files it LISTED as captured (and nothing else). Without that, a
138
+ // manual capture left every file uncaptured, so the next automatic fire re-asked
139
+ // for notes on the exact same worklist the user had just written up. The trigger's
140
+ // own timing counters (armed / activeStops / stopsSinceFire / quietRun) are left
141
+ // untouched, which is what preserves the real guarantee: an on-demand capture
142
+ // cannot change WHEN automatic capture fires, only what is still outstanding.
112
143
  function argValue(name) {
113
144
  const i = process.argv.indexOf(name);
114
145
  return i >= 0 ? process.argv[i + 1] : undefined;
@@ -129,7 +160,7 @@ function freshestMarkerUnderRoot(root) {
129
160
  if (!files.length) continue;
130
161
  // Belongs to THIS repo iff a recorded file still resolves under root.
131
162
  if (files.some((rel) => existsSync(join(root, rel)))) {
132
- return { sid: m.n.slice("coldstart-kb-".length, -"-main.json".length), state };
163
+ return { sid: m.n.slice("coldstart-kb-".length, -"-main.json".length), state, path: m.p };
133
164
  }
134
165
  }
135
166
  return null;
@@ -148,8 +179,24 @@ if (process.argv.includes("--manual")) {
148
179
  log(`MANUAL no-marker root=${root}`);
149
180
  process.exit(0);
150
181
  }
151
- const { sid, state } = found;
152
- const files = Object.keys(state.files).filter((rel) => !state.files[rel].captured);
182
+ const { sid, state, path: markerPath } = found;
183
+ // A manual /capture-notes is an EXPLICIT request to write up THIS session's
184
+ // work, so its scope is everything worked on — not merely what an automatic
185
+ // fire has yet to offer. Files EDITED this session are the highest-value
186
+ // notes (the fix, a brand-new helper), and an earlier automatic fire may
187
+ // have already marked them `captured` — a flag that means "offered once",
188
+ // never "a good note exists". Excluding them left the single most valuable
189
+ // note unwritten and a now-stale note unfixed (the Bug-1 report). So:
190
+ // include every edited file regardless of the flag, and drop only READ-ONLY
191
+ // files that were already offered (re-listing those on demand is just
192
+ // noise). Rank most-worked first (edits → retouches → reads) so new/edited
193
+ // files lead; the per-file annotations flag when a fresh note needs nothing.
194
+ const files = Object.entries(state.files)
195
+ .filter(([, f]) => (f.reads + f.edits + f.gs) > 0 && (f.edits > 0 || !f.captured))
196
+ .sort((a, b) => (b[1].edits - a[1].edits)
197
+ || ((b[1].retouches || 0) - (a[1].retouches || 0))
198
+ || (b[1].reads - a[1].reads))
199
+ .map(([rel]) => rel);
153
200
  if (!files.length) {
154
201
  process.stdout.write("Everything worked on so far is already captured — nothing new to write right now.\n");
155
202
  log(`MANUAL nothing-new session=${sid}`);
@@ -157,6 +204,19 @@ if (process.argv.includes("--manual")) {
157
204
  }
158
205
  const entries = worklistEntries(CLI, root, files, state.files, log);
159
206
  const payload = buildCapturePayload({ root, cli: CLI, sid, entries, envelope: "manual" });
207
+ // Mark ONLY the files actually LISTED (the worklist caps its display to
208
+ // MAX_WORKLIST) captured — any overflow stays uncaptured so it rolls into
209
+ // the next capture rather than being marked done but never shown. Re-read
210
+ // first: a Stop hook may have written the marker since we loaded it, and we
211
+ // must not clobber its counters. Best-effort — a failure here costs a
212
+ // duplicate ask, never the payload the user asked for.
213
+ try {
214
+ const live = JSON.parse(readFileSync(markerPath, "utf8"));
215
+ if (live && live.files) {
216
+ for (const rel of files.slice(0, MAX_WORKLIST)) if (live.files[rel]) live.files[rel].captured = true;
217
+ writeFileSync(markerPath, JSON.stringify(live));
218
+ }
219
+ } catch (e) { log(`MANUAL mark-captured skipped ${e}`); }
160
220
  logCaptureEvent(root, { event: "fire", reason: "manual", session: sid, files: files.length });
161
221
  log(`FIRE manual session=${sid} files=${files.length}`);
162
222
  process.stdout.write(payload + "\n");
@@ -176,8 +236,8 @@ if (process.argv.includes("--manual")) {
176
236
  } catch (e) { log(`bad stdin ${e}`); }
177
237
 
178
238
  try {
179
- const root = String(input.cwd || "");
180
- setLogRoot(root);
239
+ const cwd = String(input.cwd || "");
240
+ setLogRoot(cwd);
181
241
 
182
242
  // Guard 1: already inside a hook-induced continuation → let it stop.
183
243
  if (input.stop_hook_active === true) { log("SKIP stop_hook_active"); process.exit(0); }
@@ -212,7 +272,6 @@ if (process.argv.includes("--manual")) {
212
272
  }
213
273
  if (!transcriptPath || !existsSync(transcriptPath)) { log("SKIP no-transcript"); process.exit(0); }
214
274
 
215
- const ignore = loadIgnore(root);
216
275
  const marker = join(tmpdir(), `coldstart-kb-${sid}-${aid}.json`);
217
276
  let state = null;
218
277
  try {
@@ -222,6 +281,15 @@ if (process.argv.includes("--manual")) {
222
281
  const freshMarker = !state; // no valid prior marker: we're attaching, not resuming our own place
223
282
  if (!state) state = initialState();
224
283
 
284
+ // Freeze the repo root in the marker: derive it once (walk-up from cwd), then
285
+ // reuse the stored value on every later stop so a mid-session `cd` out of the
286
+ // repo can never re-point root at a foreign tree. Fall back to the raw cwd only
287
+ // when neither a stored root nor a `.coldstart` ancestor exists.
288
+ const root = (typeof state.root === "string" && state.root) ? state.root : (findRepoRoot(cwd) || cwd);
289
+ state.root = root;
290
+ setLogRoot(root);
291
+ const ignore = loadIgnore(root);
292
+
225
293
  // This stop's transcript slice (everything since the last processed line).
226
294
  const text = readFileSync(transcriptPath, "utf8");
227
295
  const lines = text.split("\n");
@@ -34,6 +34,13 @@ import { fileURLToPath } from "node:url";
34
34
  // the user's request. Consumed (deleted) on delivery; stale pendings (>24h,
35
35
  // e.g. a session resumed days later) are dropped.
36
36
  import { takePendingCapture } from "./elicit-core.mjs";
37
+ // The host wraps the user's words in editor/subagent telemetry; that text is
38
+ // file-rich and hijacks the path-name override in kb search. Strip it BEFORE
39
+ // truncating, or a long <ide_selection> eats the whole query budget.
40
+ import { recallQuery } from "./recall-query.mjs";
41
+ // Per-session dedup: don't re-show a note this session already got, and forget
42
+ // what was shown once the transcript shrinks (a compact). See recall-seen.mjs.
43
+ import { readSeen, writeSeen, idsInPage, seenArgs } from "./recall-seen.mjs";
37
44
 
38
45
  // hooks/ sits beside dist/ in both the repo and the published package.
39
46
  const CLI = fileURLToPath(new URL("../dist/index.js", import.meta.url));
@@ -41,6 +48,7 @@ const CLI = fileURLToPath(new URL("../dist/index.js", import.meta.url));
41
48
  const MAX_QUERY_CHARS = 2000; // pasted-code prompts: the head carries the ask
42
49
  const SEARCH_TIMEOUT_MS = 4000;
43
50
 
51
+
44
52
  let LOG_FILE = join(tmpdir(), "coldstart-kb-hook.log");
45
53
  function setLogRoot(root) { if (root) LOG_FILE = join(root, ".coldstart", "kb-hook.log"); }
46
54
  function log(msg) {
@@ -85,13 +93,17 @@ process.on("unhandledRejection", (e) => { log(`unhandled ${e?.stack || e}`); pro
85
93
  // (the first capture is what creates it).
86
94
  const pending = takePendingCapture(sid);
87
95
 
88
- const prompt = String(input.prompt || "").slice(0, MAX_QUERY_CHARS).trim();
96
+ const prompt = recallQuery(input.prompt, MAX_QUERY_CHARS);
97
+
98
+ const tPath = String(input.transcript_path || "");
99
+ const seen = readSeen(sid, tPath, log);
89
100
 
90
101
  let page = "";
91
102
  // No notebook / no prompt → no recall search, not even a child process.
92
103
  if (prompt && existsSync(join(root, ".coldstart", "notebook", ".raw"))) {
104
+ const args = [CLI, "kb", "search", "--hook", "--max", "3", "--root", root, ...seenArgs(seen.ids)];
93
105
  try {
94
- page = execFileSync("node", [CLI, "kb", "search", "--hook", "--max", "3", "--root", root, prompt], {
106
+ page = execFileSync("node", [...args, prompt], {
95
107
  encoding: "utf8",
96
108
  timeout: SEARCH_TIMEOUT_MS,
97
109
  stdio: ["ignore", "pipe", "ignore"],
@@ -117,6 +129,10 @@ process.on("unhandledRejection", (e) => { log(`unhandled ${e?.stack || e}`); pro
117
129
  // agents never used it). Trust framing: [fresh] content is reliable
118
130
  // as-is; the caution that remains is about COMPLETENESS (a note names a
119
131
  // finding, not necessarily your whole file set), not about content.
132
+ // Record what this page hands over BEFORE the size guards below can trim
133
+ // it — a note the agent was shown is seen, whichever way it was rendered.
134
+ if (page) writeSeen(sid, [...seen.ids, ...idsInPage(page)], tPath);
135
+
120
136
  let block = "";
121
137
  if (page) block =
122
138
  `The repo's notebook (notes written by past agents after real tasks here) has entries ` +