@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.
- package/LICENSE +21 -0
- package/README.md +26 -1
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +20 -6
- package/dist/init.js.map +1 -1
- package/dist/kb/cli.d.ts.map +1 -1
- package/dist/kb/cli.js +38 -1
- package/dist/kb/cli.js.map +1 -1
- package/dist/kb/search.d.ts +15 -0
- package/dist/kb/search.d.ts.map +1 -1
- package/dist/kb/search.js +195 -18
- package/dist/kb/search.js.map +1 -1
- package/dist/kb/view.d.ts +9 -1
- package/dist/kb/view.d.ts.map +1 -1
- package/dist/kb/view.js +16 -2
- package/dist/kb/view.js.map +1 -1
- package/dist/server/mcp.d.ts.map +1 -1
- package/dist/server/mcp.js +33 -3
- package/dist/server/mcp.js.map +1 -1
- package/hooks/capture-payload.mjs +29 -14
- package/hooks/codex-kb-recall.mjs +19 -3
- package/hooks/cursor-kb-recall.mjs +15 -2
- package/hooks/elicit-core.mjs +4 -1
- package/hooks/kb-elicit.mjs +77 -9
- package/hooks/kb-recall.mjs +18 -2
- package/hooks/recall-query.mjs +83 -0
- package/hooks/recall-seen.mjs +76 -0
- package/hooks/trigger.mjs +47 -11
- package/package.json +4 -3
package/dist/kb/view.js.map
CHANGED
|
@@ -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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"}
|
package/dist/server/mcp.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/server/mcp.js
CHANGED
|
@@ -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() }, {
|
|
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
|
-
//
|
|
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 });
|
package/dist/server/mcp.js.map
CHANGED
|
@@ -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
|
-
(
|
|
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
|
|
106
|
-
(.coldstartignore) or already captured.
|
|
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 —
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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", [
|
|
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 ` +
|
package/hooks/elicit-core.mjs
CHANGED
|
@@ -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
|
-
|
|
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
|
|
package/hooks/kb-elicit.mjs
CHANGED
|
@@ -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
|
-
//
|
|
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
|
-
|
|
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
|
|
180
|
-
setLogRoot(
|
|
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");
|
package/hooks/kb-recall.mjs
CHANGED
|
@@ -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 =
|
|
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", [
|
|
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 ` +
|