@cstart/coldstart 2.2.14 → 2.2.16
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/dist/init.d.ts +16 -3
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +49 -7
- package/dist/init.js.map +1 -1
- package/dist/kb/cli.d.ts.map +1 -1
- package/dist/kb/cli.js +72 -49
- package/dist/kb/cli.js.map +1 -1
- package/dist/kb/durable-worklist.d.ts +20 -0
- package/dist/kb/durable-worklist.d.ts.map +1 -0
- package/dist/kb/durable-worklist.js +175 -0
- package/dist/kb/durable-worklist.js.map +1 -0
- package/dist/kb/store.d.ts.map +1 -1
- package/dist/kb/store.js +24 -3
- package/dist/kb/store.js.map +1 -1
- package/dist/kb/write-batch.d.ts +21 -0
- package/dist/kb/write-batch.d.ts.map +1 -0
- package/dist/kb/write-batch.js +77 -0
- package/dist/kb/write-batch.js.map +1 -0
- package/dist/kb/write-guide.d.ts.map +1 -1
- package/dist/kb/write-guide.js +23 -13
- package/dist/kb/write-guide.js.map +1 -1
- package/dist/kb/write.d.ts +4 -0
- package/dist/kb/write.d.ts.map +1 -1
- package/dist/kb/write.js +10 -1
- package/dist/kb/write.js.map +1 -1
- package/dist/server/mcp.d.ts +12 -1
- package/dist/server/mcp.d.ts.map +1 -1
- package/dist/server/mcp.js +53 -35
- package/dist/server/mcp.js.map +1 -1
- package/hooks/capture-payload.mjs +229 -85
- package/hooks/capture-sentinel.d.mts +4 -0
- package/hooks/capture-sentinel.mjs +10 -0
- package/hooks/codex-kb-elicit.mjs +6 -2
- package/hooks/codex-kb-recall.mjs +54 -5
- package/hooks/cursor-kb-elicit.mjs +8 -4
- package/hooks/cursor-kb-recall.mjs +34 -1
- package/hooks/kb-elicit.mjs +81 -34
- package/package.json +1 -1
- package/dist/kb/session-worklist.d.ts +0 -10
- package/dist/kb/session-worklist.d.ts.map +0 -1
- package/dist/kb/session-worklist.js +0 -92
- package/dist/kb/session-worklist.js.map +0 -1
package/dist/server/mcp.d.ts
CHANGED
|
@@ -77,7 +77,14 @@ export declare const TOOL_DEFINITIONS: readonly [{
|
|
|
77
77
|
readonly properties: {
|
|
78
78
|
readonly spec: {
|
|
79
79
|
readonly type: "object";
|
|
80
|
-
readonly description: `
|
|
80
|
+
readonly description: `A single note spec (JSON object). Fields: type, title, summary, identityAliases (stable \u2014 unions forever), incidentAliases (this write's symptom words \u2014 replaced by the next write that changes summary/body, omit if this write isn't about an incident), anchors:[{path,symbols?}], and type-specific fields (facets/character for file; steps/verified for flow; kind/scope/body for lesson). ${string} Omit \`id\` on a new flow/lesson to trigger the reuse gate. Use \`specs\` instead to write several notes at once.`;
|
|
81
|
+
};
|
|
82
|
+
readonly specs: {
|
|
83
|
+
readonly type: "array";
|
|
84
|
+
readonly items: {
|
|
85
|
+
readonly type: "object";
|
|
86
|
+
};
|
|
87
|
+
readonly description: "The capture path: an ARRAY of note specs (each the same shape as `spec`), written in ONE call. Order flows before the file notes that reference them. Well-formed notes are written; malformed ones are reported together (not atomic — a bad note never silences a good one); the result ends with a coverage line naming any worked file still without a note. Prefer this over many single-`spec` calls.";
|
|
81
88
|
};
|
|
82
89
|
readonly into: {
|
|
83
90
|
readonly type: "string";
|
|
@@ -91,6 +98,10 @@ export declare const TOOL_DEFINITIONS: readonly [{
|
|
|
91
98
|
readonly type: "string";
|
|
92
99
|
readonly description: "Optional session id (given in a capture prompt). Enables the flow-evidence check: a flow whose step files this session never actually read gets a warning.";
|
|
93
100
|
};
|
|
101
|
+
readonly agent: {
|
|
102
|
+
readonly type: "string";
|
|
103
|
+
readonly description: "Optional agent id (given in a capture prompt, alongside session). Selects THIS agent stream's durable worklist for the coverage line so a subagent does not clear the main agent's list. Defaults to \"main\".";
|
|
104
|
+
};
|
|
94
105
|
};
|
|
95
106
|
readonly required: readonly [];
|
|
96
107
|
};
|
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;AAWnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAUxD,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/server/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAWnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAUxD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+KnB,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,CAmMN;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
|
@@ -100,7 +100,7 @@ export const TOOL_DEFINITIONS = [
|
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
name: 'kb_write',
|
|
103
|
-
description: 'Save or correct
|
|
103
|
+
description: 'Save or correct NOTEBOOK notes after finishing real work here — you have the files in context, so no future agent is better placed to record what you learned. Write a file note (what a file is for), a flow note (how a task spans files), or an absence lesson (a confirmed "there is no X"). Pass `specs` (an ARRAY of specs) to write ALL your notes in ONE call — malformed notes are reported together instead of one hiding the rest, and the result ends with a coverage line naming any worked files still without a note; pass `spec` (a single object) for a one-off. Also the tool to FIX or RETRACT a note you used that proved wrong: `op: "put"` replaces; `op: "retract"` with `target: {kind: "note"}` removes the whole note (or `target: {kind: "anchor"|"alias"|"facet"|"invariant"|"behavior"|"feature", key: "<value>"}` removes one part).\n\n' +
|
|
104
104
|
'TWO-PHASE reuse gate: a flow/lesson `spec` sent WITHOUT an `id` first searches the notebook for the same concept. If plausible matches exist, kb_write returns `{status:"candidates", candidates:[...]}` INSTEAD of writing — re-call with `into: "<id>"` to merge into an existing note, or `is_new: true` to declare a genuinely new one. This makes note identity reliable (matching, not guessing an exact title). File notes skip the gate (id derives from the path).\n\n' +
|
|
105
105
|
'The `spec` shape: `type` ("file"|"flow"|"lesson", or sugar "file-hub"/"file-single"), `title`, `summary`, `anchors` ([{path, symbols?}] — the addresses the note is about, which drive freshness), plus type-specific fields (file: facets/character; flow: steps/verified; lesson: kind:"absence"/scope/body). Call with NO arguments to get the full spec guide.\n\n' +
|
|
106
106
|
// Rendered, not restated. This description going years without ever
|
|
@@ -113,7 +113,12 @@ export const TOOL_DEFINITIONS = [
|
|
|
113
113
|
properties: {
|
|
114
114
|
spec: {
|
|
115
115
|
type: 'object',
|
|
116
|
-
description: `
|
|
116
|
+
description: `A single note spec (JSON object). Fields: type, title, summary, identityAliases (stable — unions forever), incidentAliases (this write's symptom words — replaced by the next write that changes summary/body, omit if this write isn't about an incident), anchors:[{path,symbols?}], and type-specific fields (facets/character for file; steps/verified for flow; kind/scope/body for lesson). ${requiredFieldsLine()} Omit \`id\` on a new flow/lesson to trigger the reuse gate. Use \`specs\` instead to write several notes at once.`,
|
|
117
|
+
},
|
|
118
|
+
specs: {
|
|
119
|
+
type: 'array',
|
|
120
|
+
items: { type: 'object' },
|
|
121
|
+
description: 'The capture path: an ARRAY of note specs (each the same shape as `spec`), written in ONE call. Order flows before the file notes that reference them. Well-formed notes are written; malformed ones are reported together (not atomic — a bad note never silences a good one); the result ends with a coverage line naming any worked file still without a note. Prefer this over many single-`spec` calls.',
|
|
117
122
|
},
|
|
118
123
|
into: {
|
|
119
124
|
type: 'string',
|
|
@@ -127,6 +132,10 @@ export const TOOL_DEFINITIONS = [
|
|
|
127
132
|
type: 'string',
|
|
128
133
|
description: 'Optional session id (given in a capture prompt). Enables the flow-evidence check: a flow whose step files this session never actually read gets a warning.',
|
|
129
134
|
},
|
|
135
|
+
agent: {
|
|
136
|
+
type: 'string',
|
|
137
|
+
description: 'Optional agent id (given in a capture prompt, alongside session). Selects THIS agent stream\'s durable worklist for the coverage line so a subagent does not clear the main agent\'s list. Defaults to "main".',
|
|
138
|
+
},
|
|
130
139
|
},
|
|
131
140
|
required: [],
|
|
132
141
|
},
|
|
@@ -230,51 +239,60 @@ export function registerToolHandlers(server, getContext, opts = {}) {
|
|
|
230
239
|
break;
|
|
231
240
|
}
|
|
232
241
|
case 'kb_write': {
|
|
233
|
-
const { kbWrite } = await import('../kb/write.js');
|
|
234
242
|
const { initSkeleton } = await import('../kb/store.js');
|
|
235
|
-
const { writeGuideMcp
|
|
236
|
-
const
|
|
237
|
-
|
|
238
|
-
|
|
243
|
+
const { writeGuideMcp } = await import('../kb/write-guide.js');
|
|
244
|
+
const { kbWriteBatch } = await import('../kb/write-batch.js');
|
|
245
|
+
// `specs` (array) is the capture path — all notes in one call, errors
|
|
246
|
+
// reported together, coverage finalized once. `spec` (object) stays a
|
|
247
|
+
// batch of one for a single/manual write. Neither → the full guide.
|
|
248
|
+
const rawSpecs = params['specs'] ?? params['spec'];
|
|
249
|
+
const isBatch = Array.isArray(rawSpecs);
|
|
250
|
+
if (rawSpecs === undefined || rawSpecs === null
|
|
251
|
+
|| (!isBatch && (typeof rawSpecs !== 'object'))) {
|
|
252
|
+
result = { __rawText: writeGuideMcp() };
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
const specs = (isBatch ? rawSpecs : [rawSpecs]);
|
|
256
|
+
if (!specs.length) {
|
|
239
257
|
result = { __rawText: writeGuideMcp() };
|
|
240
258
|
break;
|
|
241
259
|
}
|
|
242
260
|
initSkeleton(index.rootDir); // first write creates the notebook
|
|
243
|
-
const
|
|
261
|
+
const batch = await kbWriteBatch(index.rootDir, specs, {
|
|
244
262
|
into: params['into'] ? String(params['into']) : undefined,
|
|
245
263
|
isNew: Boolean(params['is_new']),
|
|
264
|
+
session: params['session'] ? String(params['session']) : undefined,
|
|
265
|
+
agent: params['agent'] ? String(params['agent']) : undefined,
|
|
246
266
|
});
|
|
247
|
-
if (
|
|
248
|
-
result
|
|
267
|
+
if (!isBatch) {
|
|
268
|
+
// Single-spec result stays shape-compatible with the pre-batch tool.
|
|
269
|
+
const o = batch.outcomes[0];
|
|
270
|
+
if (o.status === 'error')
|
|
271
|
+
result = { error: o.message };
|
|
272
|
+
else if (o.status === 'candidates') {
|
|
273
|
+
result = {
|
|
274
|
+
status: 'candidates',
|
|
275
|
+
candidates: o.candidates,
|
|
276
|
+
message: `${o.message} Re-call kb_write with the same spec plus \`into: "<id>"\` to merge into one of these, or \`is_new: true\` to create a new note.`,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
result = {
|
|
281
|
+
status: 'written', op: o.op, id: o.id, warnings: o.warnings ?? [],
|
|
282
|
+
...(batch.coverage ? { coverage: batch.coverage } : {}),
|
|
283
|
+
};
|
|
284
|
+
}
|
|
249
285
|
}
|
|
250
|
-
else
|
|
286
|
+
else {
|
|
251
287
|
result = {
|
|
252
|
-
status: '
|
|
253
|
-
|
|
254
|
-
|
|
288
|
+
status: 'batch',
|
|
289
|
+
written: batch.written,
|
|
290
|
+
errors: batch.errors,
|
|
291
|
+
candidates: batch.candidates,
|
|
292
|
+
results: batch.outcomes,
|
|
293
|
+
...(batch.coverage ? { coverage: batch.coverage } : {}),
|
|
255
294
|
};
|
|
256
295
|
}
|
|
257
|
-
else {
|
|
258
|
-
const warnings = [...(wres.warnings ?? [])];
|
|
259
|
-
// Stepless-flow WARN — parity with `kb write`; needs no session.
|
|
260
|
-
const { loadNote } = await import('../kb/store.js');
|
|
261
|
-
const after = loadNote(index.rootDir, wres.id).note;
|
|
262
|
-
const stepsWarn = flowStepsWarning(spec, after);
|
|
263
|
-
if (stepsWarn)
|
|
264
|
-
warnings.push(stepsWarn);
|
|
265
|
-
// Flow-evidence WARN (never a rejection) — parity with `kb write --session`.
|
|
266
|
-
const flowWarn = flowEvidenceWarning(spec, params['session'] ? String(params['session']) : undefined);
|
|
267
|
-
if (flowWarn)
|
|
268
|
-
warnings.push(flowWarn);
|
|
269
|
-
// Findability fields — parity with `kb write`; never a rejection.
|
|
270
|
-
const missingWarn = missingFieldsWarning(spec, wres.id, after);
|
|
271
|
-
if (missingWarn)
|
|
272
|
-
warnings.push(missingWarn);
|
|
273
|
-
// Capture coverage — parity with `kb write --session`.
|
|
274
|
-
const { noteCoverage } = await import('../kb/session-worklist.js');
|
|
275
|
-
const coverage = noteCoverage(params['session'] ? String(params['session']) : undefined, spec);
|
|
276
|
-
result = { status: 'written', op: wres.op, id: wres.id, warnings, ...(coverage ? { coverage } : {}) };
|
|
277
|
-
}
|
|
278
296
|
break;
|
|
279
297
|
}
|
|
280
298
|
// Parity with `coldstart kb repair`: same detection, same worklist text
|
package/dist/server/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/server/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,kCAAkC,EAClC,wBAAwB,GACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,UAAU,EACV,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EACT,kWAAkW;YAClW,wWAAwW;YACxW,sfAAsf;YACtf,4MAA4M;YAC5M,qBAAqB;YACrB,sFAAsF;YACtF,+HAA+H;YAC/H,2NAA2N;QAC7N,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4MAA4M;iBAC1N;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD;QACE,IAAI,EAAE,IAAI;QACV,WAAW,EACT,oEAAoE;YACpE,iUAAiU;YACjU,gFAAgF;YAChF,slBAAslB;YACtlB,8aAA8a;YAC9a,yJAAyJ;YACzJ,8LAA8L;YAC9L,wPAAwP;YACxP,iSAAiS;QACnS,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sFAAsF;iBACpG;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0WAA0W;iBACxX;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC;oBAC5D,WAAW,EAAE,mWAAmW;iBACjX;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mxBAAmxB;iBACjyB;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EACT,0ZAA0Z;YAC1Z,0aAA0a;QAC5a,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mHAAmH;iBACjI;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EACT,oaAAoa;YACpa,2fAA2f;QAC7f,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oEAAoE;iBAClF;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uFAAuF;iBACrG;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,0ZAA0Z;YAC1Z,idAAid;YACjd,wWAAwW;YACxW,oEAAoE;YACpE,uEAAuE;YACvE,sCAAsC;YACtC,GAAG,kBAAkB,EAAE,MAAM;YAC7B,iIAAiI;QACnI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gYAAgY,kBAAkB,EAAE,8DAA8D;iBAChe;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4GAA4G;iBAC1H;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,2HAA2H;iBACzI;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4JAA4J;iBAC1K;aACF;YACD,QAAQ,EAAE,EAAE;SACb;KACF;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EACT,0YAA0Y;QAC5Y,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EAAE,+HAA+H;iBAC7I;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EACT,+RAA+R;YAC/R,qWAAqW;YACrW,wHAAwH;QAC1H,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAChD;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,sWAAsW;YACtW,kkBAAkkB;YAClkB,ghBAAghB;QAClhB,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+PAA+P,EAAE;gBACxS,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;aAC1E;SACF;KACF;CACO,CAAC;AAWX,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,UAAuC,EACvC,OAAyB,EAAE;IAE3B,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE,gBAAgB;KACxB,CAAC,CAAC,CAAC;IAEJ,qEAAqE;IACrE,kDAAkD;IAClD,MAAM,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,iBAAiB,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACtG,MAAM,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAElF,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QAEvD,IAAI,GAAiB,CAAC;QACtB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,8CAA8C,CAAC;YAChG,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gBACjE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC;QAEpC,IAAI,MAAc,CAAC;QAEnB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM;gBACT,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE;oBAC/B,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,CAAuB;iBAC1E,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,IAAI;gBACP,MAAM,GAAG,kBAAkB,CAAC,KAAK,EAAE;oBACjC,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,CAAW;oBACnF,KAAK,EAAE,MAAM,CAAC,OAAO,CAAuB;oBAC5C,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAuB;oBAC9C,IAAI,EAAE,MAAM,CAAC,MAAM,CAAyE;iBAC7F,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBACvE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;gBAClE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClB,MAAM,GAAG,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;oBAChD,MAAM;gBACR,CAAC;gBACD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC1I,MAAM,GAAG,EAAE,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;gBAC7E,MAAM;YACR,CAAC;YAED,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBACnE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACnF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBACjB,MAAM,GAAG,EAAE,KAAK,EAAE,0DAA0D,EAAE,CAAC;oBAC/E,MAAM;gBACR,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBACrD,MAAM,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7C,MAAM;YACR,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACnD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACxD,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;gBAC5H,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC5B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7D,yEAAyE;oBACzE,MAAM,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,CAAC;oBACxC,MAAM;gBACR,CAAC;gBACD,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC;gBAChE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,IAA0C,EAAE;oBACpF,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;oBACzD,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;iBACjC,CAAC,CAAC;gBACH,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC5B,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnC,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;oBACxC,MAAM,GAAG;wBACP,MAAM,EAAE,YAAY;wBACpB,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,kIAAkI;qBAC3J,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC5C,iEAAiE;oBACjE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;oBACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;oBACpD,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAA0C,EAAE,KAAK,CAAC,CAAC;oBACtF,IAAI,SAAS;wBAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACxC,6EAA6E;oBAC7E,MAAM,QAAQ,GAAG,mBAAmB,CAClC,IAA0C,EAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAC1D,CAAC;oBACF,IAAI,QAAQ;wBAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACtC,kEAAkE;oBAClE,MAAM,WAAW,GAAG,oBAAoB,CACtC,IAA0C,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAC3D,CAAC;oBACF,IAAI,WAAW;wBAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC5C,uDAAuD;oBACvD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;oBACnE,MAAM,QAAQ,GAAG,YAAY,CAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACzD,IAAI,CACL,CAAC;oBACF,MAAM,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;gBACxG,CAAC;gBACD,MAAM;YACR,CAAC;YAED,wEAAwE;YACxE,8DAA8D;YAC9D,6DAA6D;YAC7D,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBAChG,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC/D,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM;oBACpC,CAAC,CAAC,wFAAwF;0BACtF,cAAc,UAAU,CAAC,KAAK,CAAC,MAAM,QAAQ,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK;0BAC1F,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM;oBACzG,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxD,MAAM;YACR,CAAC;YACD,oEAAoE;YACpE,wDAAwD;YACxD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;gBACvF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5C,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC3D,MAAM,GAAG,EAAE,SAAS,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,MAAM;YACR,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACnD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBAC5D,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC1C,CAAC,CAAE,MAAM,CAAC,OAAO,CAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;oBACtE,CAAC,CAAC,SAAS,CAAC;gBACd,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;oBAClB,MAAM,GAAG;wBACP,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACvB,IAAI,EAAE,CAAC;4BACP,KAAK,EAAE,KAAK;iCACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;iCAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gCACX,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM;gCACxD,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,YAAY;6BACpG,CAAC,CAAC;yBACN,CAAC,CAAC;qBACJ,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;oBAC/C,IAAI,OAAO,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;oBAChC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACtB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjB,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;4BAAE,UAAU,EAAE,CAAC;6BACnC,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;4BAAE,OAAO,EAAE,CAAC;oBACzH,CAAC;oBACD,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC3F,CAAC;gBACD,MAAM;YACR,CAAC;YAED;gBACE,MAAM,GAAG,EAAE,KAAK,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;QAChD,CAAC;QAED,2EAA2E;QAC3E,wEAAwE;QACxE,KAAK,YAAY,CAAC;QAElB,MAAM,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC;QAClC,MAAM,OAAO,GAAI,MAAiC,CAAC,SAAS,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACpG,OAAO;SACR,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,gFAAgF;AAChF,0EAA0E;AAC1E,kFAAkF;AAClF,sEAAsE;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,+UAA+U;IAC/U,EAAE;IACF,2cAA2c;CAC5c,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,UAAuC,EAAE,OAAyB,EAAE;IAClG,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EACnD;QACE,0EAA0E;QAC1E,0EAA0E;QAC1E,4EAA4E;QAC5E,0EAA0E;QAC1E,wEAAwE;QACxE,yEAAyE;QACzE,kCAAkC;QAClC,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACvD,YAAY,EAAE,mBAAmB;KAClC,CACF,CAAC;IACF,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAiD,EACjD,UAAuC,EACvC,OAAyB,EAAE;IAE3B,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAEjD,6EAA6E;IAC7E,0EAA0E;IAC1E,+EAA+E;IAC/E,+EAA+E;IAC/E,2EAA2E;IAC3E,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAChD,MAAM,CAAC,aAAa,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,iEAAiE;IACjE,MAAM,OAAO,CAAC,IAAI,CAAC;QACjB,WAAW;QACX,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;KACpE,CAAC,CAAC;IAEH,gFAAgF;IAChF,IAAI,WAAW,GAAa,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,EAAE,MAAM,EAAE,YAAY,EAAE,EACxB,qBAAqB,EACrB,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;QACF,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;IAC9E,CAAC;IAED,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/server/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
* (the coordinator only sees the final message — #61).
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
import { readFileSync, writeFileSync } from "node:fs";
|
|
20
|
-
import { tmpdir } from "node:os";
|
|
19
|
+
import { readFileSync, writeFileSync, mkdirSync, readdirSync, statSync, unlinkSync } from "node:fs";
|
|
21
20
|
import { join } from "node:path";
|
|
22
21
|
// The spec shapes are NOT written here any more. They come from the one table
|
|
23
22
|
// the write guide, the MCP tool description and `kb repair` also render from —
|
|
@@ -25,25 +24,102 @@ import { join } from "node:path";
|
|
|
25
24
|
import { shapesBlock } from "./note-shape.mjs";
|
|
26
25
|
|
|
27
26
|
/**
|
|
28
|
-
*
|
|
27
|
+
* Durable capture worklist — the checklist the agent can re-Read at any point.
|
|
29
28
|
*
|
|
30
|
-
* The
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
29
|
+
* The old design dropped the worklist in tmpdir (keyed by session id) and let
|
|
30
|
+
* `kb write --session` print a running "N of M". Two failures: the manifest was
|
|
31
|
+
* scratch that no agent ever read directly, and the whole capture PAYLOAD (this
|
|
32
|
+
* checklist + the write contract) was delivered one-shot and lost to compaction
|
|
33
|
+
* — the agent had to re-derive the note shape from memory 80 tool-calls later.
|
|
35
34
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
35
|
+
* So the pair now lives in the repo notebook and holds BOTH:
|
|
36
|
+
* .worklist-<sid>-<aid>.json structured scope (the coverage source of truth)
|
|
37
|
+
* .worklist-<sid>-<aid>.md today's worklist + a pointer (see below)
|
|
38
|
+
* The agent re-Reads the .md whenever this scrolls away; `kb write` credits and
|
|
39
|
+
* trims/clears the pair (src/kb/durable-worklist.ts) so a stale snapshot never
|
|
40
|
+
* lingers, and the next capture fire regenerates it against live freshness.
|
|
41
|
+
*
|
|
42
|
+
* The .md used to hold the FULL rendered payload — the ~150 lines of static
|
|
43
|
+
* DECIDE-FIRST/per-note/FLOWS/WRITE rules, byte-identical every session,
|
|
44
|
+
* duplicated onto disk every single fire. Since 2026-08-06 that static text
|
|
45
|
+
* lives once in a PERMANENT file, `.capture-instructions.md` (also gitignored,
|
|
46
|
+
* but never deleted/regenerated per fire — only rewritten if its version tag is
|
|
47
|
+
* stale, see INSTRUCTIONS_VERSION below); the per-session .md now holds only
|
|
48
|
+
* the worklist + a pointer to it. The payload delivered to the agent THIS turn
|
|
49
|
+
* (buildCapturePayload's return value) is unaffected — it still inlines the
|
|
50
|
+
* full instructions text so nothing changes for the current fire, only what's
|
|
51
|
+
* persisted for a later re-Read.
|
|
52
|
+
*
|
|
53
|
+
* KEYED BY <sid>-<aid>, the SAME identity as the tmpdir evidence marker — NOT by
|
|
54
|
+
* root, and NOT by sid alone. A subagent shares its parent's session id, so a
|
|
55
|
+
* sid-only (or root-only) key would let a subagent's capture clobber the main
|
|
56
|
+
* agent's worklist. Each agent stream owns its own pair; the printed `kb write`
|
|
57
|
+
* carries `--session <sid> --agent <aid>` so finalize trims the right one.
|
|
58
|
+
*
|
|
59
|
+
* CONTRACT TWIN: src/kb/durable-worklist.ts — keep the paths and the .json shape
|
|
60
|
+
* (ts, sid, aid, files:[{path,tier,needsNote}], wrote:[]) in step. Both gitignored
|
|
61
|
+
* (src/kb/store.ts initSkeleton). Best-effort: capture must never fail because
|
|
62
|
+
* these could not be written.
|
|
40
63
|
*/
|
|
41
|
-
export function
|
|
42
|
-
|
|
64
|
+
export function worklistJsonPath(root, sid, aid) {
|
|
65
|
+
const k = worklistKey(sid, aid);
|
|
66
|
+
return join(root, ".coldstart", "notebook", k ? `.worklist-${k}.json` : ".worklist.json");
|
|
67
|
+
}
|
|
68
|
+
export function worklistMdPath(root, sid, aid) {
|
|
69
|
+
const k = worklistKey(sid, aid);
|
|
70
|
+
return join(root, ".coldstart", "notebook", k ? `.worklist-${k}.md` : ".worklist.md");
|
|
71
|
+
}
|
|
72
|
+
function worklistKey(sid, aid) {
|
|
73
|
+
const s = String(sid ?? "").replace(/[^A-Za-z0-9_-]/g, "");
|
|
74
|
+
return s ? `${s}-${String(aid ?? "").replace(/[^A-Za-z0-9_-]/g, "") || "main"}` : "";
|
|
43
75
|
}
|
|
44
76
|
|
|
45
|
-
|
|
46
|
-
|
|
77
|
+
// Abandoned sessions' worklist pairs would otherwise accrue forever (a session
|
|
78
|
+
// that fires once then never captures again leaves its pair behind). Prune any
|
|
79
|
+
// sibling worklist file whose json is older than this on each fire — long enough
|
|
80
|
+
// that a still-live session is never touched, short enough to stay tidy.
|
|
81
|
+
const STALE_WORKLIST_MS = 3 * 24 * 60 * 60 * 1000;
|
|
82
|
+
function pruneStaleWorklists(dir, keepKey) {
|
|
83
|
+
try {
|
|
84
|
+
for (const n of readdirSync(dir)) {
|
|
85
|
+
const m = /^\.worklist-([A-Za-z0-9_-]+)\.json$/.exec(n);
|
|
86
|
+
if (!m || m[1] === keepKey) continue;
|
|
87
|
+
// Age by the json's own ts; fall back to file mtime when ts is absent or
|
|
88
|
+
// unreadable, NEVER to 0 — a ts-less-but-recent file must not read as 1970
|
|
89
|
+
// and get deleted out from under a live session.
|
|
90
|
+
let ts = 0;
|
|
91
|
+
try { ts = JSON.parse(readFileSync(join(dir, n), "utf8"))?.ts || statMtime(join(dir, n)); } catch { ts = statMtime(join(dir, n)); }
|
|
92
|
+
if (Date.now() - ts < STALE_WORKLIST_MS) continue;
|
|
93
|
+
for (const p of [join(dir, n), join(dir, n.replace(/\.json$/, ".md"))]) {
|
|
94
|
+
try { unlinkSync(p); } catch { /* best-effort */ }
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
} catch { /* best-effort */ }
|
|
98
|
+
}
|
|
99
|
+
function statMtime(p) { try { return statSync(p).mtimeMs; } catch { return 0; } }
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* The .md half of the durable pair used to hold the FULL rendered payload
|
|
103
|
+
* (instructions + worklist) — meaning the ~150-line static instructions were
|
|
104
|
+
* duplicated onto disk once per session, every session, forever. Since
|
|
105
|
+
* 2026-08-06 that static text lives once in the permanent
|
|
106
|
+
* .capture-instructions.md (below); the per-session .md only needs to point at
|
|
107
|
+
* it plus carry the part that's actually per-session, the worklist.
|
|
108
|
+
*/
|
|
109
|
+
function renderDurableMd(sid, aid, entries) {
|
|
110
|
+
return `**Notebook capture point.** Full instructions: \`.coldstart/notebook/.capture-instructions.md\` \
|
|
111
|
+
(stable — re-Read it once; it does not change per session). This file holds only today's worklist.
|
|
112
|
+
|
|
113
|
+
WORKLIST — files you actually read this session, most-worked first:
|
|
114
|
+
|
|
115
|
+
${worklistLines(entries)}
|
|
116
|
+
|
|
117
|
+
Write command: node <cli> kb write /tmp/notes.json --root <root> --session ${sid} --agent ${aid} --force
|
|
118
|
+
`;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function writeDurableWorklist(root, sid, aid, entries) {
|
|
122
|
+
if (!root || !entries?.length) return;
|
|
47
123
|
try {
|
|
48
124
|
// needsNote: no note yet, or the note it has is stale. A file whose note is
|
|
49
125
|
// already fresh is NOT an outstanding item — counting it would make full
|
|
@@ -53,14 +129,18 @@ function recordWorklistManifest(sid, entries) {
|
|
|
53
129
|
tier: e.tier,
|
|
54
130
|
needsNote: !e.notes?.length || e.notes.some((n) => n.state === "changed" || n.state === "missing"),
|
|
55
131
|
}));
|
|
56
|
-
|
|
132
|
+
const dir = join(root, ".coldstart", "notebook");
|
|
133
|
+
mkdirSync(dir, { recursive: true });
|
|
134
|
+
writeFileSync(worklistJsonPath(root, sid, aid), JSON.stringify({ ts: Date.now(), sid, aid: aid || "main", files, wrote: [] }));
|
|
135
|
+
writeFileSync(worklistMdPath(root, sid, aid), renderDurableMd(sid, aid || "main", entries));
|
|
136
|
+
pruneStaleWorklists(dir, worklistKey(sid, aid));
|
|
57
137
|
} catch { /* best-effort */ }
|
|
58
138
|
}
|
|
59
139
|
|
|
60
140
|
/**
|
|
61
141
|
* SPIKE (experimental, undocumented): a repo can replace the shipped checklist
|
|
62
142
|
* with its own `.coldstart/checklist.md`. Placeholders {{WORKLIST}}, {{CLI}},
|
|
63
|
-
* {{ROOT}}, {{SID}} are substituted. The worklist is LOAD-BEARING (it is the
|
|
143
|
+
* {{ROOT}}, {{SID}}, {{AID}} are substituted. The worklist is LOAD-BEARING (it is the
|
|
64
144
|
* scope rule) — an override that omits {{WORKLIST}} gets it appended anyway.
|
|
65
145
|
* Trigger mechanics stay in code; only the prompt text is overridable. Merge
|
|
66
146
|
* semantics when the shipped default evolves = none (the override wins
|
|
@@ -74,65 +154,31 @@ function loadChecklistOverride(root) {
|
|
|
74
154
|
}
|
|
75
155
|
|
|
76
156
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
157
|
+
* The shipped instructions (DECIDE-FIRST rules, per-note rules, FLOWS, WRITE
|
|
158
|
+
* mechanics) are identical every fire, every session — only the worklist and a
|
|
159
|
+
* handful of interpolated values change. Since 2026-08-06 this static text is
|
|
160
|
+
* generated ONCE into a permanent file (`.capture-instructions.md`, gitignored
|
|
161
|
+
* like the rest of the durable-worklist pair, but never deleted/regenerated per
|
|
162
|
+
* fire) instead of being duplicated onto disk in every session's .md — same
|
|
163
|
+
* placeholder mechanism as the user-authored checklist override above, so both
|
|
164
|
+
* paths share one substitution pass in renderCapturePayload.
|
|
165
|
+
*
|
|
166
|
+
* VERSIONED so an upgrade that changes the shipped text self-heals an existing
|
|
167
|
+
* repo's stale copy instead of silently drifting; bump when the template below
|
|
168
|
+
* changes.
|
|
79
169
|
*/
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
for (const e of entries) {
|
|
83
|
-
const ann = [];
|
|
84
|
-
ann.push(`[${e.tier}]`);
|
|
85
|
-
if (!e.notes?.length) {
|
|
86
|
-
ann.push("no note yet");
|
|
87
|
-
} else {
|
|
88
|
-
for (const n of e.notes) {
|
|
89
|
-
if (n.state === "fresh") {
|
|
90
|
-
ann.push(`note ${n.id} (fresh) → update ONLY if this session taught something the note lacks (.coldstart/notebook/notes/${n.id}.md)`);
|
|
91
|
-
} else if (n.state === "changed" || n.state === "missing") {
|
|
92
|
-
ann.push(`note ${n.id} (STALE) → fix or re-stamp; list the path in "verified" (.coldstart/notebook/notes/${n.id}.md)`);
|
|
93
|
-
} else {
|
|
94
|
-
ann.push(`note ${n.id} → read it first, update by its "id" (.coldstart/notebook/notes/${n.id}.md)`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
if (e.noConsumers) ann.push("no consumers in import graph");
|
|
99
|
-
lines.push(`- ${e.path} ${ann.join(" · ")}`);
|
|
100
|
-
}
|
|
101
|
-
return lines.join("\n");
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export function buildCapturePayload({ root, cli, sid, entries, envelope }) {
|
|
105
|
-
recordWorklistManifest(sid, entries);
|
|
106
|
-
const opening = envelope === "block"
|
|
107
|
-
? "Handle capture now, then stop."
|
|
108
|
-
: envelope === "manual"
|
|
109
|
-
? "You invoked this capture yourself (/capture-notes) — handle it now, then carry on."
|
|
110
|
-
: "Handle capture first, then continue with the user's request.";
|
|
111
|
-
|
|
112
|
-
const tail = envelope === "subagent"
|
|
113
|
-
? `\nOnce you have handled the notebook — whether you wrote notes or decided none were \
|
|
114
|
-
needed — remember you were spawned as a subagent. The coordinator that spawned you receives \
|
|
115
|
-
ONLY your final message, so your last message must repeat, in full, the result you produced \
|
|
116
|
-
for it — your findings, not the notebook decision.`
|
|
117
|
-
: "";
|
|
170
|
+
const INSTRUCTIONS_VERSION = 1;
|
|
171
|
+
const INSTRUCTIONS_VERSION_TAG = `<!-- coldstart:capture-instructions:v${INSTRUCTIONS_VERSION} -->`;
|
|
118
172
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
let body = override
|
|
123
|
-
.replaceAll("{{CLI}}", String(cli))
|
|
124
|
-
.replaceAll("{{ROOT}}", String(root))
|
|
125
|
-
.replaceAll("{{SID}}", String(sid));
|
|
126
|
-
body = body.includes("{{WORKLIST}}")
|
|
127
|
-
? body.replaceAll("{{WORKLIST}}", worklist)
|
|
128
|
-
: `${body.trimEnd()}\n\nWORKLIST — files you actually read this session, most-worked first \
|
|
129
|
-
(your scope; if you edited or deep-read a file that isn't listed, you can note it too):\n\n${worklist}`;
|
|
130
|
-
return `**Notebook capture point.** ${opening}\n\n${body.trimEnd()}${tail}`;
|
|
131
|
-
}
|
|
173
|
+
function captureInstructionsPath(root) {
|
|
174
|
+
return join(root, ".coldstart", "notebook", ".capture-instructions.md");
|
|
175
|
+
}
|
|
132
176
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
177
|
+
function shippedInstructionsTemplate() {
|
|
178
|
+
return `${INSTRUCTIONS_VERSION_TAG}
|
|
179
|
+
You have completed work and gathered knowledge as part of it — knowledge a future agent \
|
|
180
|
+
could use. This repo keeps that knowledge in a notebook: notes are searched and served to \
|
|
181
|
+
future cold agents when their task matches.
|
|
136
182
|
|
|
137
183
|
DECIDE FIRST — as the agent who worked on this task, you know its exact intent:
|
|
138
184
|
1. So you, not any rule, are best suited to judge whether this work was about the code in \
|
|
@@ -150,13 +196,15 @@ changed and what you had to understand to change it, and that is precisely the k
|
|
|
150
196
|
cold agent lacks. The default for an edited file is a note. Walk the worklist top to bottom \
|
|
151
197
|
and decide each one explicitly; do not stop at the first two or three. If you end up writing \
|
|
152
198
|
notes for well under half the [edited] files, you have under-captured — say which files you \
|
|
153
|
-
skipped and why, so the decision is visible instead of silent.
|
|
154
|
-
|
|
155
|
-
|
|
199
|
+
skipped and why, so the decision is visible instead of silent. These instructions are \
|
|
200
|
+
permanent at \`.coldstart/notebook/.capture-instructions.md\`; today's worklist is at \
|
|
201
|
+
\`.coldstart/notebook/.worklist-{{SID}}-{{AID}}.md\` — re-Read whichever scrolls out of context \
|
|
202
|
+
this session. Your \`kb write\` call ends with a coverage line naming any worked file still \
|
|
203
|
+
without a note; read it back before you finish.
|
|
156
204
|
|
|
157
205
|
WORKLIST — files you actually read this session, most-worked first:
|
|
158
206
|
|
|
159
|
-
|
|
207
|
+
{{WORKLIST}}
|
|
160
208
|
|
|
161
209
|
FOR EACH NOTE:
|
|
162
210
|
4. Say only what you verified in THIS file, this session. A confident whole-file claim from \
|
|
@@ -210,7 +258,11 @@ missing fact is a NEW flow, even in the same subsystem, even across the same fil
|
|
|
210
258
|
an unrelated fact into a nearby flow buries it: nobody searching for your fact will find that \
|
|
211
259
|
title.
|
|
212
260
|
|
|
213
|
-
WRITE —
|
|
261
|
+
WRITE — ONE call: put EVERY note as an object in a JSON array and write the array \
|
|
262
|
+
in a single \`kb write\`. Order flows before the file notes that reference them. Malformed \
|
|
263
|
+
notes are reported together (a bad note never silences a good one), and the call ends with \
|
|
264
|
+
the coverage line. Forming an array is fewer tokens than chaining, not more — same JSON, \
|
|
265
|
+
without the per-note heredoc and && glue.
|
|
214
266
|
${shapesBlock({ compact: true })}
|
|
215
267
|
"identityAliases" and "symbols" are what make a note FINDABLE and both go missing by \
|
|
216
268
|
default: a note without identityAliases is reachable only by its exact title, and agents \
|
|
@@ -227,15 +279,107 @@ however carefully you described it. Never write a flow using the file-note shape
|
|
|
227
279
|
with several of its symbols. file-hub is ONLY for grab-bag files that have no single purpose \
|
|
228
280
|
(models.py, utils, helpers) — there, knowledge lives per symbol. Touching many symbols does \
|
|
229
281
|
not make a file a hub; having no one purpose does.
|
|
230
|
-
Update = the same spec plus "id":"<id from the worklist>".
|
|
231
|
-
|
|
232
|
-
|
|
282
|
+
Update = the same spec plus "id":"<id from the worklist>". Retract a note you \
|
|
283
|
+
found wrong: {"op":"retract","id":"<id>","target":{"kind":"note"}} (as one array element).
|
|
284
|
+
cat > /tmp/notes.json <<'JSON'
|
|
285
|
+
[ {…note 1…}, {…note 2…} ]
|
|
286
|
+
JSON
|
|
287
|
+
node {{CLI}} kb write /tmp/notes.json --root {{ROOT}} --session {{SID}} --agent {{AID}} --force
|
|
288
|
+
Full shapes: run \`node {{CLI}} kb write --root {{ROOT}}\` with no spec — it prints the guide.
|
|
289
|
+
(Keep --session/--agent exactly as written — they point coverage at THIS agent's worklist.)
|
|
233
290
|
|
|
234
291
|
FLOW DECISION — record what you decided about FLOWS (created a new one, folded into an \
|
|
235
|
-
existing one, or none) so the flow gate can be measured. Ride it on
|
|
292
|
+
existing one, or none) so the flow gate can be measured. Ride it on the SAME batch write — it \
|
|
236
293
|
is a flag, not a second command:
|
|
237
|
-
node
|
|
294
|
+
node {{CLI}} kb write /tmp/notes.json --root {{ROOT}} --session {{SID}} --agent {{AID}} --force \\
|
|
238
295
|
--decision <none|new|update> [--id <flow id>] --why "<one clause>"
|
|
239
296
|
Only when you wrote NO notes at all is there no write to carry it, and then run it alone:
|
|
240
|
-
node
|
|
297
|
+
node {{CLI}} kb flow-decision --decision none --why "<one clause>" --root {{ROOT}} --session {{SID}}`;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/** Ensure the permanent instructions file exists and is current; return its
|
|
301
|
+
* body (without the version-tag line). Best-effort — a write failure still
|
|
302
|
+
* returns the shipped text so THIS fire's payload is unaffected; only the
|
|
303
|
+
* on-disk persistence for later re-Reads is at risk. */
|
|
304
|
+
function ensureCaptureInstructions(root) {
|
|
305
|
+
const p = captureInstructionsPath(root);
|
|
306
|
+
try {
|
|
307
|
+
const existing = readFileSync(p, "utf8");
|
|
308
|
+
if (existing.startsWith(INSTRUCTIONS_VERSION_TAG)) {
|
|
309
|
+
return existing.slice(existing.indexOf("\n") + 1);
|
|
310
|
+
}
|
|
311
|
+
} catch { /* missing — write below */ }
|
|
312
|
+
const text = shippedInstructionsTemplate();
|
|
313
|
+
try {
|
|
314
|
+
mkdirSync(join(root, ".coldstart", "notebook"), { recursive: true });
|
|
315
|
+
writeFileSync(p, text);
|
|
316
|
+
} catch { /* best-effort; still usable in-memory this fire */ }
|
|
317
|
+
return text.slice(text.indexOf("\n") + 1);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* worklist entry: { path, tier, retouches, notes: [{id, type, state}], noConsumers }
|
|
322
|
+
* tier: "edited ×N" | "read" | "skimmed"
|
|
323
|
+
*/
|
|
324
|
+
function worklistLines(entries) {
|
|
325
|
+
const lines = [];
|
|
326
|
+
for (const e of entries) {
|
|
327
|
+
const ann = [];
|
|
328
|
+
ann.push(`[${e.tier}]`);
|
|
329
|
+
if (!e.notes?.length) {
|
|
330
|
+
ann.push("no note yet");
|
|
331
|
+
} else {
|
|
332
|
+
for (const n of e.notes) {
|
|
333
|
+
if (n.state === "fresh") {
|
|
334
|
+
ann.push(`note ${n.id} (fresh) → update ONLY if this session taught something the note lacks (.coldstart/notebook/notes/${n.id}.md)`);
|
|
335
|
+
} else if (n.state === "changed" || n.state === "missing") {
|
|
336
|
+
ann.push(`note ${n.id} (STALE) → fix or re-stamp; list the path in "verified" (.coldstart/notebook/notes/${n.id}.md)`);
|
|
337
|
+
} else {
|
|
338
|
+
ann.push(`note ${n.id} → read it first, update by its "id" (.coldstart/notebook/notes/${n.id}.md)`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
if (e.noConsumers) ann.push("no consumers in import graph");
|
|
343
|
+
lines.push(`- ${e.path} ${ann.join(" · ")}`);
|
|
344
|
+
}
|
|
345
|
+
return lines.join("\n");
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
export function buildCapturePayload(args) {
|
|
349
|
+
const payload = renderCapturePayload(args);
|
|
350
|
+
// Persist the structured scope (+ a small pointer .md — the static
|
|
351
|
+
// instructions live in the permanent .capture-instructions.md, not
|
|
352
|
+
// duplicated per session) so the agent can re-Read it later and `kb write`
|
|
353
|
+
// has coverage to check against. Best-effort; never blocks capture.
|
|
354
|
+
writeDurableWorklist(args.root, args.sid, args.aid, args.entries);
|
|
355
|
+
return payload;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
function renderCapturePayload({ root, cli, sid, aid, entries, envelope }) {
|
|
359
|
+
aid = String(aid ?? "main").replace(/[^A-Za-z0-9_-]/g, "") || "main";
|
|
360
|
+
const opening = envelope === "block"
|
|
361
|
+
? "Handle capture now, then stop."
|
|
362
|
+
: envelope === "manual"
|
|
363
|
+
? "You invoked this capture yourself (/capture-notes) — handle it now, then carry on."
|
|
364
|
+
: "Handle capture first, then continue with the user's request.";
|
|
365
|
+
|
|
366
|
+
const tail = envelope === "subagent"
|
|
367
|
+
? `\nOnce you have handled the notebook — whether you wrote notes or decided none were \
|
|
368
|
+
needed — remember you were spawned as a subagent. The coordinator that spawned you receives \
|
|
369
|
+
ONLY your final message, so your last message must repeat, in full, the result you produced \
|
|
370
|
+
for it — your findings, not the notebook decision.`
|
|
371
|
+
: "";
|
|
372
|
+
|
|
373
|
+
const worklist = worklistLines(entries);
|
|
374
|
+
const source = loadChecklistOverride(root) ?? ensureCaptureInstructions(root);
|
|
375
|
+
let body = source
|
|
376
|
+
.replaceAll("{{CLI}}", String(cli))
|
|
377
|
+
.replaceAll("{{ROOT}}", String(root))
|
|
378
|
+
.replaceAll("{{SID}}", String(sid))
|
|
379
|
+
.replaceAll("{{AID}}", String(aid));
|
|
380
|
+
body = body.includes("{{WORKLIST}}")
|
|
381
|
+
? body.replaceAll("{{WORKLIST}}", worklist)
|
|
382
|
+
: `${body.trimEnd()}\n\nWORKLIST — files you actually read this session, most-worked first \
|
|
383
|
+
(your scope; if you edited or deep-read a file that isn't listed, you can note it too):\n\n${worklist}`;
|
|
384
|
+
return `**Notebook capture point.** ${opening}\n\n${body.trimEnd()}${tail}`;
|
|
241
385
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Types for capture-sentinel.mjs — plain ESM so the capture hooks can import
|
|
2
|
+
* it without a build step; this declaration is what lets the TypeScript side
|
|
3
|
+
* (src/init.ts) import the same file instead of copying the string. */
|
|
4
|
+
export declare const CAPTURE_SENTINEL: string;
|