@rubytech/create-maxy-code 0.1.81 → 0.1.83
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/package.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +1 -1
- package/payload/platform/plugins/admin/hooks/__tests__/pre-tool-use-memory-write-revoke.test.sh +130 -0
- package/payload/platform/plugins/admin/hooks/__tests__/turn-completed-graph-write.test.sh +19 -17
- package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +34 -0
- package/payload/platform/plugins/admin/hooks/turn-completed-graph-write.sh +8 -16
- package/payload/platform/plugins/admin/skills/access-manager/SKILL.md +2 -2
- package/payload/platform/plugins/admin/skills/access-manager/references/operations.md +10 -25
- package/payload/platform/plugins/admin/skills/business-profile/SKILL.md +14 -14
- package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +5 -5
- package/payload/platform/plugins/docs/references/admin-session.md +4 -4
- package/payload/platform/scripts/seed-neo4j.sh +8 -14
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.d.ts +6 -0
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.js +41 -14
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +47 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +270 -26
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +1 -1
- package/payload/platform/templates/specialists/agents/database-operator.md +8 -10
- package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/SKILL.md +1 -0
- package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/template.html +1 -1
- package/payload/server/public/assets/{admin-Bn3SKHdv.js → admin-BHaOSIuo.js} +1 -1
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-VMeuB5OP.js → architectureDiagram-Q4EWVU46-B8o-_aT-.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-B7mq0Me0.js → blockDiagram-DXYQGD6D-BcprLXNk.js} +1 -1
- package/payload/server/public/assets/{brand-CZQNuuLo.css → brand-C_iHnsbT.css} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-Btu6ejD1.js → c4Diagram-AHTNJAMY-CAkKlTxa.js} +1 -1
- package/payload/server/public/assets/channel-C9mhUrr8.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-DAL_d_Xa.js → chunk-336JU56O-DZ53mw2n.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-DPD9ot_N.js → chunk-426QAEUC-3s5PxkHp.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-BexM9T-f.js → chunk-4TB4RGXK-MLx8Jj8R.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-EwDdji3T.js → chunk-5FUZZQ4R-DFWTZhLd.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-BP9uoVws.js → chunk-5PVQY5BW-vTE3gFPo.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-DSFmUMEW.js → chunk-EDXVE4YY-Bp1I_rQl.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-IVAy2Qk9.js → chunk-ENJZ2VHE-DsDBZ8WH.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-DkUupPox.js → chunk-ICPOFSXX-BKO6vxzn.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-BPnzam8G.js → chunk-OYMX7WX6-D-ievGGw.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-xYNchOVT.js → chunk-U2HBQHQK-D_5PbJhp.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-C1V_V8v8.js → chunk-X2U36JSP-QmmoxQya.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-CUibW87w.js → chunk-YZCP3GAM-BXSWZZag.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-HkKx4xBt.js → chunk-ZZ45TVLE-oyzperET.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BXiYcaCJ.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BRxESuCS.js +1 -0
- package/payload/server/public/assets/clone-Bz40VsQ_.js +1 -0
- package/payload/server/public/assets/{dagre-DIaJ9oMM.js → dagre-65Q3iWcL.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-Oyox5ACd.js → dagre-KV5264BT-Cyc37LVU.js} +1 -1
- package/payload/server/public/assets/data-DU2ZQbl-.js +1 -0
- package/payload/server/public/assets/{device-url-actions-BjDrEVoY.js → device-url-actions-BftdR4st.js} +1 -1
- package/payload/server/public/assets/{diagram-5BDNPKRD-DoGhkzBd.js → diagram-5BDNPKRD-DKItZE_3.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-Dc3Ix-Dh.js → diagram-G4DWMVQ6-DKlYJZby.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-CFM9_Ggj.js → diagram-MMDJMWI5-DLqF5x2e.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-nMWgzxC3.js → diagram-TYMM5635-Cdufrh7g.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-DcQWiGgF.js → erDiagram-SMLLAGMA-D6eSXJWj.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-CcX5waal.js → flowDiagram-DWJPFMVM-BB4luljp.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BTQWoD8W.js → ganttDiagram-T4ZO3ILL-USBgsV4V.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BHZcRznS.js → gitGraphDiagram-UUTBAWPF-BqyKsQZ9.js} +1 -1
- package/payload/server/public/assets/graph-BgLMP7mY.js +1 -0
- package/payload/server/public/assets/{graph-labels-CqsRzbp0.js → graph-labels-CUN_9NnB.js} +1 -1
- package/payload/server/public/assets/{graphlib-BpUb9z9y.js → graphlib-C5MkULnV.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-CBoiO8yF.js → infoDiagram-42DDH7IO-BF1spWbk.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-mTDI_0As.js → ishikawaDiagram-UXIWVN3A-CODjk_-5.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CcuU_0rp.js → journeyDiagram-VCZTEJTY-RyhxP8aB.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-BWA7Do5Y.js → kanban-definition-6JOO6SKY-jrm_4IpR.js} +1 -1
- package/payload/server/public/assets/{line-BlGptbDR.js → line-DsE8JMaX.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-hslUiqJ-.js → mermaid-parser.core-F27uElsX.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-DWU_5Faf.js → mermaid.core-B0PzAHME.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-B3_sQr-2.js → mindmap-definition-QFDTVHPH-GA-xLC9K.js} +1 -1
- package/payload/server/public/assets/{page-lPEIoiHs.js → page-CXFoiyRN.js} +2 -2
- package/payload/server/public/assets/{page-eQPbgLXP.js → page-vRUDyjk4.js} +1 -1
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-02u2dI6Z.js → pieDiagram-DEJITSTG-CkP9U2tn.js} +1 -1
- package/payload/server/public/assets/{public-j7U67c6E.js → public-B_gqH5Cf.js} +3 -3
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-BfgiMQiy.js → quadrantDiagram-34T5L4WZ-sYIgx5bu.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-JKZoibIp.js → requirementDiagram-MS252O5E-CKtMUXvK.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-N1iaY19u.js → sankeyDiagram-XADWPNL6-CP5qebN_.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DjU3oQ0_.js → sequenceDiagram-FGHM5R23-zvkjl2R6.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BuFcldiV.js → stateDiagram-FHFEXIEX-D-1VwYNL.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BGmOYY_E.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-3vztYjFm.js → timeline-definition-GMOUNBTQ-BSd_xlMt.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Zdv9WVqJ.js → vennDiagram-DHZGUBPP-D1hxlYfF.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-CkTAZI7f.js → wardleyDiagram-NUSXRM2D-yNOC0LD-.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CgMCxpms.js → xychartDiagram-5P7HB3ND-D9D_gyVi.js} +1 -1
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +5 -5
- package/payload/server/public/index.html +7 -7
- package/payload/server/public/public.html +4 -4
- package/payload/server/public/assets/channel-C_bSLH4h.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-B6oW43xg.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-D0237d4h.js +0 -1
- package/payload/server/public/assets/clone-AMRCmnen.js +0 -1
- package/payload/server/public/assets/data-Mm3pTL1b.js +0 -1
- package/payload/server/public/assets/graph-Cd4jsDi3.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-rZLYem3J.js +0 -1
- /package/payload/server/public/assets/{brand-BnMilSyt.js → brand-kwAWaknq.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonl-tail.d.ts","sourceRoot":"","sources":["../src/jsonl-tail.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jsonl-tail.d.ts","sourceRoot":"","sources":["../src/jsonl-tail.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAWxC;;;uDAGuD;AACvD,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAEjG,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,aAAa,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B;;;;6DAIyD;IACzD,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,SAAS;IACxB;;qDAEiD;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAAA;IAC9D;;;8CAG0C;IAC1C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACzD,iDAAiD;IACjD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,0EAA0E;IAC1E,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACxG;AA0BD;;oDAEoD;AACpD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAY3F;AA4GD,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAoM9D"}
|
|
@@ -22,11 +22,17 @@
|
|
|
22
22
|
// with argvTools as the exposed set and tag the source.
|
|
23
23
|
//
|
|
24
24
|
// Line 2 — `[recorder-turn] sessionId=<id> turnIndex=<n> stopReason=<r>
|
|
25
|
-
// textBytes=<n>
|
|
26
|
-
// toolUseNames=<csv
|
|
25
|
+
// textBytes=<n> text=<full json-escaped>
|
|
26
|
+
// toolUseNames=<csv|—> containsToolCallText=true|false`
|
|
27
27
|
// Emitted once per newly-appended `assistant` record. Records with the
|
|
28
28
|
// same `message.id` collapse to one line (only the first sighting
|
|
29
29
|
// emits). Records that contain only `thinking` blocks emit nothing.
|
|
30
|
+
// `text=` is the full assistant text, json-escaped — Task 213 dropped
|
|
31
|
+
// the 240-char head cap so a recorder relapse that emits
|
|
32
|
+
// `<tool_call>{…}</tool_call>` as text is observable from server.log
|
|
33
|
+
// without downloading the jsonl. `containsToolCallText=true` flags any
|
|
34
|
+
// assistant text containing `<tool_call>`, `<function_calls>`, or
|
|
35
|
+
// `</invoke>` — the recorder model copying tool-call shape into prose.
|
|
30
36
|
//
|
|
31
37
|
// The cursor is append-only: `cursorOffset` is the byte position past the
|
|
32
38
|
// last `\n` we successfully parsed; the trailing fragment lives in
|
|
@@ -35,7 +41,13 @@
|
|
|
35
41
|
// record — exactly the failure mode this task closes.
|
|
36
42
|
import { existsSync, openSync, closeSync, readSync, statSync } from 'node:fs';
|
|
37
43
|
const HEAD_READ_CHUNK = 64 * 1024;
|
|
38
|
-
|
|
44
|
+
// Task 213 — regex against assistant text. Matches `<tool_call>`,
|
|
45
|
+
// `<function_calls>`, and `</invoke>` — three shapes the recorder model
|
|
46
|
+
// emitted as prose in sessions d2aaa85e / 481799d1 (and similar evidence
|
|
47
|
+
// in 596a42bc, c3539844, 4d4775bd, bad79fb9, 06ac2eb3, 6828bae0,
|
|
48
|
+
// c4c10cf3, 5cb8fd16) instead of real `tool_use` blocks. `\b` against the
|
|
49
|
+
// `>` boundary keeps the match precise.
|
|
50
|
+
const TOOL_CALL_TEXT_PATTERN = /<tool_call\b|<function_calls\b|<\/invoke\b/;
|
|
39
51
|
/** Production implementation of LogLinePoster. POSTs to the brand UI's
|
|
40
52
|
* loopback log-ingest route. Fire-and-forget; failure is logged via the
|
|
41
53
|
* manager's own logger and otherwise swallowed. */
|
|
@@ -118,18 +130,10 @@ function probeInitTools(rec) {
|
|
|
118
130
|
/** JSON-escape a string for inclusion in a log line. Renders control
|
|
119
131
|
* characters as `\uXXXX`, quotes the result. Callers strip the quotes
|
|
120
132
|
* if they want; this module keeps them so the boundaries of
|
|
121
|
-
* `
|
|
133
|
+
* `text=...` are explicit on screen. */
|
|
122
134
|
function jsonEscape(s) {
|
|
123
135
|
return JSON.stringify(s);
|
|
124
136
|
}
|
|
125
|
-
/** First N CHARACTERS (not bytes) of a string. The 240-char cap is per
|
|
126
|
-
* spec; we operate on UTF-16 code units which is what JavaScript's
|
|
127
|
-
* default substring semantics already give us. */
|
|
128
|
-
function head(s, max) {
|
|
129
|
-
if (s.length <= max)
|
|
130
|
-
return s;
|
|
131
|
-
return s.slice(0, max);
|
|
132
|
-
}
|
|
133
137
|
function summarizeAssistantRecord(rec) {
|
|
134
138
|
if (rec.type !== 'assistant')
|
|
135
139
|
return null;
|
|
@@ -210,12 +214,33 @@ export function createJsonlTail(deps) {
|
|
|
210
214
|
state.nextTurnIndex += 1;
|
|
211
215
|
const textBytes = Buffer.byteLength(summary.text, 'utf8');
|
|
212
216
|
const namesField = summary.toolUseNames.length === 0 ? '—' : summary.toolUseNames.join(',');
|
|
217
|
+
const containsToolCallText = TOOL_CALL_TEXT_PATTERN.test(summary.text);
|
|
213
218
|
const line = `sessionId=${state.sessionId} turnIndex=${idx}` +
|
|
214
219
|
` stopReason=${summary.stopReason || '—'}` +
|
|
215
220
|
` textBytes=${textBytes}` +
|
|
216
|
-
`
|
|
217
|
-
` toolUseNames=${namesField}
|
|
221
|
+
` text=${jsonEscape(summary.text)}` +
|
|
222
|
+
` toolUseNames=${namesField}` +
|
|
223
|
+
` containsToolCallText=${containsToolCallText}`;
|
|
218
224
|
deps.postLogLine('recorder-turn', 'info', line);
|
|
225
|
+
// Task 215 — fire the first-turn callback exactly once. The flag
|
|
226
|
+
// flip and reference clear happen BEFORE invoking the callback so a
|
|
227
|
+
// thrown callback can't leave `firstTurnEmitted=false` and re-fire
|
|
228
|
+
// on the next record. Errors from the callback are caught and
|
|
229
|
+
// logged but never propagate — the `recorder-turn` line above is
|
|
230
|
+
// the contract, and the callback is a downstream observer.
|
|
231
|
+
if (!state.firstTurnEmitted) {
|
|
232
|
+
state.firstTurnEmitted = true;
|
|
233
|
+
const cb = state.onFirstTurn;
|
|
234
|
+
state.onFirstTurn = null;
|
|
235
|
+
if (cb !== null) {
|
|
236
|
+
try {
|
|
237
|
+
cb();
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
deps.logger(`[jsonl-tail] first-turn-callback-threw sessionId=${state.sessionId} err=${err instanceof Error ? err.message : String(err)}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
219
244
|
}
|
|
220
245
|
function processRecord(state, rec) {
|
|
221
246
|
// Probe init candidates against EVERY record until init emits — the
|
|
@@ -323,6 +348,8 @@ export function createJsonlTail(deps) {
|
|
|
323
348
|
initEmitted: false,
|
|
324
349
|
emittedMsgIds: new Set(),
|
|
325
350
|
nextTurnIndex: 0,
|
|
351
|
+
onFirstTurn: args.onFirstTurn ?? null,
|
|
352
|
+
firstTurnEmitted: false,
|
|
326
353
|
});
|
|
327
354
|
deps.logger(`[jsonl-tail] register sessionId=${sessionId} specialist=${args.specialist} argvTools=${argvTools.size}`);
|
|
328
355
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonl-tail.js","sourceRoot":"","sources":["../src/jsonl-tail.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"jsonl-tail.js","sourceRoot":"","sources":["../src/jsonl-tail.ts"],"names":[],"mappings":"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"}
|
|
@@ -204,10 +204,57 @@ interface McpConfigWriteParams {
|
|
|
204
204
|
* names in the order they were declared (the caller sorts before
|
|
205
205
|
* emitting argv). */
|
|
206
206
|
export declare function readSpecialistTools(claudeConfigDir: string, specialist: string): string[];
|
|
207
|
+
/** Task 215 — pull the `<server>` segment out of a qualified MCP tool name
|
|
208
|
+
* the way Claude Code's plugin-tool registry surfaces it. Two shapes
|
|
209
|
+
* exist in the wild:
|
|
210
|
+
*
|
|
211
|
+
* - Long prefix: `mcp__plugin_<plugin>_<server>__<tool>` — emitted by
|
|
212
|
+
* Claude Code when an MCP server is registered via plugin manifest
|
|
213
|
+
* (post-Task-209 native plugin-system path; what `--agent <name>`
|
|
214
|
+
* specialist spawns receive in Registry #1).
|
|
215
|
+
* - Short prefix: `mcp__<server>__<tool>` — emitted by Claude Code when
|
|
216
|
+
* an MCP server is registered via `--mcp-config <path>` (admin operator
|
|
217
|
+
* spawns; what Registry #2 produces directly).
|
|
218
|
+
*
|
|
219
|
+
* Both must resolve to the same `<server>` slug so the probe can match
|
|
220
|
+
* the qualified name against `toolSurface.mcpServers` keys, which the
|
|
221
|
+
* manager populates from PLUGIN.md basenames in `tool-surface.ts`. The
|
|
222
|
+
* pre-Task-215 inline regex `/^mcp__(.+?)__/` extracted `plugin_<plugin>_<server>`
|
|
223
|
+
* from the long-prefix shape (lazy match stops at the first `__`),
|
|
224
|
+
* which never matched any tool-surface key — the failure mode this
|
|
225
|
+
* helper closes.
|
|
226
|
+
*
|
|
227
|
+
* Returns `null` for any name that matches neither shape. The caller
|
|
228
|
+
* surfaces those names through the inventory line's `unparseable-tools=`
|
|
229
|
+
* field so a malformed agent-frontmatter entry can't masquerade as a
|
|
230
|
+
* missing server. */
|
|
231
|
+
export declare function extractServerNameFromQualifiedTool(qualified: string): string | null;
|
|
232
|
+
/** Task 215 — classify the agent's frontmatter `tools:` list against the
|
|
233
|
+
* manager's tool-surface registry. Used by both the per-spawn `.mcp.json`
|
|
234
|
+
* writer (admin) and the tool-inventory probe (specialist). Returns the
|
|
235
|
+
* set of server names to spawn AND the two diagnostic sets the inventory
|
|
236
|
+
* line surfaces when non-empty: tokens that didn't parse at all
|
|
237
|
+
* (`unparseableTools`) and parseable tokens whose server isn't in the
|
|
238
|
+
* registry (`missingServers`). Both diagnostic sets are empty in the
|
|
239
|
+
* healthy case, so the existing log line shape stays unchanged for
|
|
240
|
+
* passing spawns. */
|
|
241
|
+
export declare function classifySpecialistTools(tools: readonly string[], toolSurfaceServers: ReadonlyMap<string, unknown>): {
|
|
242
|
+
matchedServers: ReadonlySet<string>;
|
|
243
|
+
unparseableTools: readonly string[];
|
|
244
|
+
missingServers: readonly string[];
|
|
245
|
+
};
|
|
207
246
|
/** Builds the placeholder map for per-spawn `mcp.json` env substitution.
|
|
208
247
|
* Exported for Task 142 unit coverage that asserts `PLATFORM_PORT` and
|
|
209
248
|
* `MAXY_BRAND_PORT` resolve from the manager process env. */
|
|
210
249
|
export declare function buildMcpPlaceholders(p: Pick<McpConfigWriteParams, 'platformRoot' | 'accountId' | 'userId' | 'bridgeSuffixHint' | 'logDir'>, env?: NodeJS.ProcessEnv): Record<string, string>;
|
|
250
|
+
/** Test seam. Production never calls this; the `__` prefix matches the
|
|
251
|
+
* in-repo convention for non-API helpers. */
|
|
252
|
+
export declare function __setFirstTurnTimeoutMsForTests(ms: number): void;
|
|
253
|
+
export declare function __resetFirstTurnTimeoutMsForTests(): void;
|
|
254
|
+
/** Test seam — clear any leftover per-spawn state between tests so a
|
|
255
|
+
* failing test doesn't pollute the next one's Map. Production never
|
|
256
|
+
* invokes this; the only legitimate eviction path is PTY exit. */
|
|
257
|
+
export declare function __clearFinalSnapshotStateForTests(): void;
|
|
211
258
|
export declare function spawnClaudeSession(deps: SpawnDeps, args: SpawnArgs): Promise<SpawnResult>;
|
|
212
259
|
export interface StopDeps {
|
|
213
260
|
store: SessionStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty-spawner.d.ts","sourceRoot":"","sources":["../src/pty-spawner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pty-spawner.d.ts","sourceRoot":"","sources":["../src/pty-spawner.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,6 +120,78 @@ function expandPlaceholders(raw, vars) {
|
|
|
120
120
|
return Object.prototype.hasOwnProperty.call(vars, name) ? vars[name] : m;
|
|
121
121
|
});
|
|
122
122
|
}
|
|
123
|
+
/** Task 215 — pull the `<server>` segment out of a qualified MCP tool name
|
|
124
|
+
* the way Claude Code's plugin-tool registry surfaces it. Two shapes
|
|
125
|
+
* exist in the wild:
|
|
126
|
+
*
|
|
127
|
+
* - Long prefix: `mcp__plugin_<plugin>_<server>__<tool>` — emitted by
|
|
128
|
+
* Claude Code when an MCP server is registered via plugin manifest
|
|
129
|
+
* (post-Task-209 native plugin-system path; what `--agent <name>`
|
|
130
|
+
* specialist spawns receive in Registry #1).
|
|
131
|
+
* - Short prefix: `mcp__<server>__<tool>` — emitted by Claude Code when
|
|
132
|
+
* an MCP server is registered via `--mcp-config <path>` (admin operator
|
|
133
|
+
* spawns; what Registry #2 produces directly).
|
|
134
|
+
*
|
|
135
|
+
* Both must resolve to the same `<server>` slug so the probe can match
|
|
136
|
+
* the qualified name against `toolSurface.mcpServers` keys, which the
|
|
137
|
+
* manager populates from PLUGIN.md basenames in `tool-surface.ts`. The
|
|
138
|
+
* pre-Task-215 inline regex `/^mcp__(.+?)__/` extracted `plugin_<plugin>_<server>`
|
|
139
|
+
* from the long-prefix shape (lazy match stops at the first `__`),
|
|
140
|
+
* which never matched any tool-surface key — the failure mode this
|
|
141
|
+
* helper closes.
|
|
142
|
+
*
|
|
143
|
+
* Returns `null` for any name that matches neither shape. The caller
|
|
144
|
+
* surfaces those names through the inventory line's `unparseable-tools=`
|
|
145
|
+
* field so a malformed agent-frontmatter entry can't masquerade as a
|
|
146
|
+
* missing server. */
|
|
147
|
+
export function extractServerNameFromQualifiedTool(qualified) {
|
|
148
|
+
// Long prefix has the literal `plugin` marker between `mcp__` and the
|
|
149
|
+
// plugin slug — Claude Code stamps it for every plugin-manifest MCP
|
|
150
|
+
// server, even when plugin and server slugs are equal (the common
|
|
151
|
+
// maxy case: plugin=memory, server=memory).
|
|
152
|
+
const longMatch = qualified.match(/^mcp__plugin_([^_]+)_([^_]+)__/);
|
|
153
|
+
if (longMatch)
|
|
154
|
+
return longMatch[2];
|
|
155
|
+
// Short prefix has no `plugin` marker; the first segment IS the server
|
|
156
|
+
// slug. Used by admin's `--mcp-config` registrations and by any
|
|
157
|
+
// historical fixture that predates the plugin-manifest rename.
|
|
158
|
+
const shortMatch = qualified.match(/^mcp__([^_]+)__/);
|
|
159
|
+
if (shortMatch)
|
|
160
|
+
return shortMatch[1];
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
/** Task 215 — classify the agent's frontmatter `tools:` list against the
|
|
164
|
+
* manager's tool-surface registry. Used by both the per-spawn `.mcp.json`
|
|
165
|
+
* writer (admin) and the tool-inventory probe (specialist). Returns the
|
|
166
|
+
* set of server names to spawn AND the two diagnostic sets the inventory
|
|
167
|
+
* line surfaces when non-empty: tokens that didn't parse at all
|
|
168
|
+
* (`unparseableTools`) and parseable tokens whose server isn't in the
|
|
169
|
+
* registry (`missingServers`). Both diagnostic sets are empty in the
|
|
170
|
+
* healthy case, so the existing log line shape stays unchanged for
|
|
171
|
+
* passing spawns. */
|
|
172
|
+
export function classifySpecialistTools(tools, toolSurfaceServers) {
|
|
173
|
+
const matchedServers = new Set();
|
|
174
|
+
const unparseable = [];
|
|
175
|
+
const missingSet = new Set();
|
|
176
|
+
for (const t of tools) {
|
|
177
|
+
const server = extractServerNameFromQualifiedTool(t);
|
|
178
|
+
if (server === null) {
|
|
179
|
+
unparseable.push(t);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (toolSurfaceServers.has(server)) {
|
|
183
|
+
matchedServers.add(server);
|
|
184
|
+
}
|
|
185
|
+
else if (!missingSet.has(server)) {
|
|
186
|
+
missingSet.add(server);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
matchedServers,
|
|
191
|
+
unparseableTools: unparseable,
|
|
192
|
+
missingServers: Array.from(missingSet),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
123
195
|
/** Builds the placeholder map for per-spawn `mcp.json` env substitution.
|
|
124
196
|
* Exported for Task 142 unit coverage that asserts `PLATFORM_PORT` and
|
|
125
197
|
* `MAXY_BRAND_PORT` resolve from the manager process env. */
|
|
@@ -152,16 +224,19 @@ function writePerSpawnMcpConfig(p) {
|
|
|
152
224
|
// Task 165 — specialist spawn. Project the agent's `tools:`
|
|
153
225
|
// frontmatter to the set of plugin namespaces it references; include
|
|
154
226
|
// only those MCP servers. A specialist that only writes graph
|
|
155
|
-
// (database-operator: memory, contacts,
|
|
227
|
+
// (database-operator: memory, contacts, work) does not get the
|
|
156
228
|
// dozens of other admin servers stamped into its mcp.json.
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
229
|
+
//
|
|
230
|
+
// Task 215 — uses `classifySpecialistTools` so post-Task-209
|
|
231
|
+
// long-prefix names (`mcp__plugin_<plugin>_<server>__<tool>`) resolve
|
|
232
|
+
// to their `<server>` slug rather than the legacy lazy-regex capture
|
|
233
|
+
// of `plugin_<plugin>_<server>`. This branch is dead for production
|
|
234
|
+
// (Task 207 dropped `.mcp.json` writes for specialists) but the
|
|
235
|
+
// classifier keeps it correct for any future caller and for tests
|
|
236
|
+
// that exercise the legacy path.
|
|
237
|
+
const { matchedServers } = classifySpecialistTools(p.specialistTools, p.toolSurface.mcpServers);
|
|
163
238
|
for (const [name, desc] of p.toolSurface.mcpServers) {
|
|
164
|
-
if (
|
|
239
|
+
if (matchedServers.has(name))
|
|
165
240
|
serversForRole.push([name, desc]);
|
|
166
241
|
}
|
|
167
242
|
}
|
|
@@ -268,24 +343,55 @@ function checkSlotsAndMaybeEvict(deps, args) {
|
|
|
268
343
|
}
|
|
269
344
|
return undefined;
|
|
270
345
|
}
|
|
346
|
+
/** Task 215 — single source of truth for matching probe results against
|
|
347
|
+
* the frontmatter allowlist. Builds the `offered` set with BOTH short
|
|
348
|
+
* and long prefix shapes so an agent file's `mcp__plugin_<plugin>_<server>__<tool>`
|
|
349
|
+
* declaration intersects with the probe's per-tool reply regardless of
|
|
350
|
+
* which Claude Code registry path registers the server at runtime.
|
|
351
|
+
* `mcpListedCount` is incremented per actual tool, not per prefix variant
|
|
352
|
+
* — the two prefixes refer to the same underlying tool. */
|
|
353
|
+
function buildOfferedSet(result) {
|
|
354
|
+
const offered = new Set();
|
|
355
|
+
let mcpListedCount = 0;
|
|
356
|
+
for (const [serverName, tools] of result) {
|
|
357
|
+
for (const tool of tools) {
|
|
358
|
+
offered.add(`mcp__${serverName}__${tool}`);
|
|
359
|
+
offered.add(`mcp__plugin_${serverName}_${serverName}__${tool}`);
|
|
360
|
+
mcpListedCount++;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return { offered, mcpListedCount };
|
|
364
|
+
}
|
|
365
|
+
/** Task 215 — render the optional `unparseable-tools=` and `missing-servers=`
|
|
366
|
+
* fields. Empty inputs return an empty string so the inventory line stays
|
|
367
|
+
* exactly the legacy shape when the spawn is healthy (no need to teach
|
|
368
|
+
* every operator-side grep to skip blank fields). */
|
|
369
|
+
function buildDiagnosticFields(unparseable, missing) {
|
|
370
|
+
let out = '';
|
|
371
|
+
if (unparseable.length > 0)
|
|
372
|
+
out += ` unparseable-tools=${unparseable.join(',')}`;
|
|
373
|
+
if (missing.length > 0)
|
|
374
|
+
out += ` missing-servers=${missing.join(',')}`;
|
|
375
|
+
return out;
|
|
376
|
+
}
|
|
271
377
|
/** Task 178 — fire-and-forget aggregator. Probes each MCP server in the
|
|
272
378
|
* spawn's resolved mcp.json for its `tools/list` reply, then emits one
|
|
273
379
|
* `[pty-spawn-tool-inventory]` line per spawn. Specialist spawns only —
|
|
274
380
|
* operator spawns have no agent frontmatter and the failure shape this
|
|
275
381
|
* closes the gap on is recorder-specific. The function never throws;
|
|
276
382
|
* probe errors emit a `[pty-spawn-tool-inventory-failed]` line on the
|
|
277
|
-
* same logger so the gap is itself observable.
|
|
383
|
+
* same logger so the gap is itself observable.
|
|
384
|
+
*
|
|
385
|
+
* Task 215 — accepts `unparseableTools` and `missingServers` from the
|
|
386
|
+
* caller's classifier so the line surfaces both diagnostic classes when
|
|
387
|
+
* non-empty. The two paths catch different defects: an unparseable token
|
|
388
|
+
* signals a malformed frontmatter entry; a missing server signals a typo
|
|
389
|
+
* or a stale plugin name that no longer maps to a tool-surface registry
|
|
390
|
+
* key. */
|
|
278
391
|
function emitToolInventoryAsync(p) {
|
|
279
392
|
p.readMcpToolInventory({ servers: p.resolvedServers, timeoutMs: p.timeoutMs })
|
|
280
393
|
.then((result) => {
|
|
281
|
-
const offered =
|
|
282
|
-
let mcpListedCount = 0;
|
|
283
|
-
for (const [serverName, tools] of result) {
|
|
284
|
-
for (const tool of tools) {
|
|
285
|
-
offered.add(`mcp__${serverName}__${tool}`);
|
|
286
|
-
mcpListedCount++;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
394
|
+
const { offered, mcpListedCount } = buildOfferedSet(result);
|
|
289
395
|
const exposed = [];
|
|
290
396
|
const notExposed = [];
|
|
291
397
|
for (const name of p.frontmatterAllowlist) {
|
|
@@ -301,13 +407,86 @@ function emitToolInventoryAsync(p) {
|
|
|
301
407
|
// plugin-system?) and `not-exposed` (does it match what the agent
|
|
302
408
|
// declared?). When both reach the brief's target values, the
|
|
303
409
|
// recorder turn produces real `tool_use` blocks.
|
|
304
|
-
|
|
410
|
+
const diag = buildDiagnosticFields(p.unparseableTools, p.missingServers);
|
|
411
|
+
p.logger(`[pty-spawn-tool-inventory] sessionId=${p.sessionId} specialist=${p.specialist} argv-tools=0 mcp-listed-tools=${mcpListedCount} exposed=${exposed.join(',')} not-exposed=${notExposed.join(',')}${diag}`);
|
|
305
412
|
})
|
|
306
413
|
.catch((err) => {
|
|
307
414
|
const msg = err instanceof Error ? err.message : String(err);
|
|
308
415
|
p.logger(`[pty-spawn-tool-inventory-failed] sessionId=${p.sessionId} specialist=${p.specialist} err=${JSON.stringify(msg)}`);
|
|
309
416
|
});
|
|
310
417
|
}
|
|
418
|
+
const finalSnapshotState = new Map();
|
|
419
|
+
/** Watchdog ceiling for "model never produced a first turn" — if no
|
|
420
|
+
* `[recorder-turn]` lands within this window, the watchdog fires the
|
|
421
|
+
* final snapshot with `reason=first-turn-timeout`. 60 s is the same
|
|
422
|
+
* order-of-magnitude as the PID-file timeout and well below typical
|
|
423
|
+
* operator patience; tunable in tests via `__setFirstTurnTimeoutMsForTests`. */
|
|
424
|
+
const DEFAULT_FIRST_TURN_TIMEOUT_MS = 60_000;
|
|
425
|
+
let firstTurnTimeoutMs = DEFAULT_FIRST_TURN_TIMEOUT_MS;
|
|
426
|
+
/** Test seam. Production never calls this; the `__` prefix matches the
|
|
427
|
+
* in-repo convention for non-API helpers. */
|
|
428
|
+
export function __setFirstTurnTimeoutMsForTests(ms) {
|
|
429
|
+
firstTurnTimeoutMs = ms;
|
|
430
|
+
}
|
|
431
|
+
export function __resetFirstTurnTimeoutMsForTests() {
|
|
432
|
+
firstTurnTimeoutMs = DEFAULT_FIRST_TURN_TIMEOUT_MS;
|
|
433
|
+
}
|
|
434
|
+
/** Task 215 — fire the `[pty-spawn-tool-inventory-final]` line once per
|
|
435
|
+
* specialist spawn. Idempotent: a second call (e.g. watchdog races a
|
|
436
|
+
* late recorder-turn) is a no-op via the `fired` guard. Re-runs the
|
|
437
|
+
* probe against the same resolvedServers map the spawn-time probe used,
|
|
438
|
+
* so the line reports what the probe would observe AT first-turn
|
|
439
|
+
* time — the timing question Phase 1 of Task 215 was filed to answer.
|
|
440
|
+
*
|
|
441
|
+
* The probe is async and the PTY can exit while it's in flight. Both the
|
|
442
|
+
* `.then` and `.catch` paths gate emission on `finalSnapshotState.has`
|
|
443
|
+
* to suppress phantom lines for sessions whose PTY-exit cleanup ran
|
|
444
|
+
* while the probe was still running. The captured `state` reference
|
|
445
|
+
* still holds the logger, so the emission would mechanically work — but
|
|
446
|
+
* it would lie about a dead session, which is worse than no line. */
|
|
447
|
+
function fireFinalSnapshot(sessionId, reason) {
|
|
448
|
+
const state = finalSnapshotState.get(sessionId);
|
|
449
|
+
if (!state || state.fired)
|
|
450
|
+
return;
|
|
451
|
+
state.fired = true;
|
|
452
|
+
if (state.watchdog) {
|
|
453
|
+
clearTimeout(state.watchdog);
|
|
454
|
+
state.watchdog = null;
|
|
455
|
+
}
|
|
456
|
+
state.readMcpToolInventory({ servers: state.resolvedServers, timeoutMs: state.timeoutMs })
|
|
457
|
+
.then((result) => {
|
|
458
|
+
if (!finalSnapshotState.has(sessionId))
|
|
459
|
+
return;
|
|
460
|
+
const { offered, mcpListedCount } = buildOfferedSet(result);
|
|
461
|
+
const exposed = [];
|
|
462
|
+
const notExposed = [];
|
|
463
|
+
for (const name of state.frontmatterAllowlist) {
|
|
464
|
+
if (offered.has(name))
|
|
465
|
+
exposed.push(name);
|
|
466
|
+
else
|
|
467
|
+
notExposed.push(name);
|
|
468
|
+
}
|
|
469
|
+
const msSinceSpawn = Date.now() - state.spawnedAt;
|
|
470
|
+
const diag = buildDiagnosticFields(state.unparseableTools, state.missingServers);
|
|
471
|
+
state.logger(`[pty-spawn-tool-inventory-final] sessionId=${sessionId} specialist=${state.specialist} mcp-listed-tools=${mcpListedCount} exposed=${exposed.join(',')} not-exposed=${notExposed.join(',')} ms-since-spawn=${msSinceSpawn} reason=${reason}${diag}`);
|
|
472
|
+
})
|
|
473
|
+
.catch((err) => {
|
|
474
|
+
if (!finalSnapshotState.has(sessionId))
|
|
475
|
+
return;
|
|
476
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
477
|
+
state.logger(`[pty-spawn-tool-inventory-final-failed] sessionId=${sessionId} specialist=${state.specialist} reason=${reason} err=${JSON.stringify(msg)}`);
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
/** Test seam — clear any leftover per-spawn state between tests so a
|
|
481
|
+
* failing test doesn't pollute the next one's Map. Production never
|
|
482
|
+
* invokes this; the only legitimate eviction path is PTY exit. */
|
|
483
|
+
export function __clearFinalSnapshotStateForTests() {
|
|
484
|
+
for (const state of finalSnapshotState.values()) {
|
|
485
|
+
if (state.watchdog)
|
|
486
|
+
clearTimeout(state.watchdog);
|
|
487
|
+
}
|
|
488
|
+
finalSnapshotState.clear();
|
|
489
|
+
}
|
|
311
490
|
export async function spawnClaudeSession(deps, args) {
|
|
312
491
|
const rejection = checkSlotsAndMaybeEvict(deps, args);
|
|
313
492
|
if (rejection) {
|
|
@@ -441,6 +620,24 @@ export async function spawnClaudeSession(deps, args) {
|
|
|
441
620
|
: '';
|
|
442
621
|
deps.logger(`tool-allowlist role=${args.role} count=${allowed.length} excluded=${excludedSample}`);
|
|
443
622
|
}
|
|
623
|
+
// Task 213 — admin operator spawns lose the memory write tools at the
|
|
624
|
+
// CLI deny gate. Evidence in session d2aaa85e (2026-05-21): the admin
|
|
625
|
+
// agent emitted `tool_use: memory-update` filling in for a recorder
|
|
626
|
+
// turn that produced none, writing nodes that violated the
|
|
627
|
+
// admin-does-not-write contract declared in IDENTITY.md. The recorder
|
|
628
|
+
// (database-operator specialist) owns these writers; admin must never
|
|
629
|
+
// hold them. Specialist spawns (recorder included) are governed by
|
|
630
|
+
// their agent-frontmatter `tools:` allowlist and are not affected by
|
|
631
|
+
// this disallow — the names below intentionally use the runtime
|
|
632
|
+
// post-Task-209 plugin namespace (`mcp__plugin_memory_memory__…`).
|
|
633
|
+
if (args.role === 'admin' && !isSpecialistSpawn) {
|
|
634
|
+
const disallowed = [
|
|
635
|
+
'mcp__plugin_memory_memory__memory-write',
|
|
636
|
+
'mcp__plugin_memory_memory__memory-update',
|
|
637
|
+
];
|
|
638
|
+
argv.push('--disallowed-tools', disallowed.join(','));
|
|
639
|
+
deps.logger(`pty-spawn-disallowed role=admin source=spawn-disallow tools=${disallowed.join(',')}`);
|
|
640
|
+
}
|
|
444
641
|
// Task 207 — `--permission-mode bypassPermissions` for specialist spawns
|
|
445
642
|
// when the caller has not explicitly set one. Headless specialists have
|
|
446
643
|
// no operator to consent to write-tool invocations; default mode blocks
|
|
@@ -719,15 +916,16 @@ export async function spawnClaudeSession(deps, args) {
|
|
|
719
916
|
bridgeSuffixHint: args.senderId,
|
|
720
917
|
logDir: deps.logDir,
|
|
721
918
|
});
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
919
|
+
// Task 215 — classify the frontmatter list once. `matchedServers` is
|
|
920
|
+
// the set of `toolSurface.mcpServers` keys to spawn for the probe;
|
|
921
|
+
// `unparseableTools` and `missingServers` ride downstream into both
|
|
922
|
+
// the spawn-time and end-of-first-turn inventory lines, so a future
|
|
923
|
+
// namespace drift (or an agent file with a typo) can be told apart
|
|
924
|
+
// from a real MCP boot failure by reading server.log alone.
|
|
925
|
+
const { matchedServers, unparseableTools, missingServers } = classifySpecialistTools(specialistTools, deps.toolSurface.mcpServers);
|
|
728
926
|
const resolvedServers = new Map();
|
|
729
927
|
for (const [name, desc] of deps.toolSurface.mcpServers) {
|
|
730
|
-
if (!
|
|
928
|
+
if (!matchedServers.has(name))
|
|
731
929
|
continue;
|
|
732
930
|
const probeEnv = desc.env
|
|
733
931
|
? Object.fromEntries(Object.entries(desc.env).map(([k, v]) => [k, expandPlaceholders(v, placeholders)]))
|
|
@@ -744,15 +942,39 @@ export async function spawnClaudeSession(deps, args) {
|
|
|
744
942
|
baseEnv: process.env,
|
|
745
943
|
timeoutMs: req.timeoutMs,
|
|
746
944
|
}));
|
|
945
|
+
const inventoryTimeoutMs = deps.toolInventoryProbeTimeoutMs ?? 5_000;
|
|
747
946
|
emitToolInventoryAsync({
|
|
748
947
|
sessionId: session.sessionId,
|
|
749
948
|
specialist: args.specialist,
|
|
750
949
|
frontmatterAllowlist: specialistTools,
|
|
751
950
|
resolvedServers,
|
|
951
|
+
unparseableTools,
|
|
952
|
+
missingServers,
|
|
752
953
|
readMcpToolInventory: readInventory,
|
|
753
|
-
timeoutMs:
|
|
954
|
+
timeoutMs: inventoryTimeoutMs,
|
|
754
955
|
logger: deps.logger,
|
|
755
956
|
});
|
|
957
|
+
// Task 215 — register the per-spawn state that the JsonlTail callback
|
|
958
|
+
// (or the watchdog timer) needs to fire the final snapshot. State is
|
|
959
|
+
// module-scoped so a stale entry past PTY exit is a leak; the exit
|
|
960
|
+
// handler below explicitly clears it. The watchdog covers the failure
|
|
961
|
+
// mode where the model emits zero useful content (the exact defect
|
|
962
|
+
// this task investigates): without the timer, a spawn that never
|
|
963
|
+
// produces a first turn would never emit a final snapshot, and the
|
|
964
|
+
// operator would have no signal at all for the broken case.
|
|
965
|
+
finalSnapshotState.set(session.sessionId, {
|
|
966
|
+
specialist: args.specialist,
|
|
967
|
+
frontmatterAllowlist: specialistTools,
|
|
968
|
+
resolvedServers,
|
|
969
|
+
unparseableTools,
|
|
970
|
+
missingServers,
|
|
971
|
+
readMcpToolInventory: readInventory,
|
|
972
|
+
timeoutMs: inventoryTimeoutMs,
|
|
973
|
+
logger: deps.logger,
|
|
974
|
+
spawnedAt: Date.now(),
|
|
975
|
+
fired: false,
|
|
976
|
+
watchdog: setTimeout(() => fireFinalSnapshot(session.sessionId, 'first-turn-timeout'), firstTurnTimeoutMs),
|
|
977
|
+
});
|
|
756
978
|
}
|
|
757
979
|
// Task 183 — register the specialist spawn with the JSONL tail. The
|
|
758
980
|
// tail's state must exist BEFORE any JSONL modify event fires so the
|
|
@@ -762,13 +984,35 @@ export async function spawnClaudeSession(deps, args) {
|
|
|
762
984
|
// correct semantic (nothing was launched on argv, so nothing can be
|
|
763
985
|
// missing). Operator spawns do not register; the tail emits nothing for
|
|
764
986
|
// them.
|
|
987
|
+
//
|
|
988
|
+
// Task 215 — `onFirstTurn` fires the `[pty-spawn-tool-inventory-final]`
|
|
989
|
+
// snapshot when the model emits its first non-thinking assistant
|
|
990
|
+
// record. Paired with the watchdog timer set above (in the Task-178
|
|
991
|
+
// probe block); whichever fires first wins, the other is a no-op via
|
|
992
|
+
// the `fired` guard inside `fireFinalSnapshot`.
|
|
765
993
|
if (isSpecialistSpawn && deps.jsonlTail) {
|
|
766
994
|
deps.jsonlTail.register(session.sessionId, {
|
|
767
995
|
specialist: args.specialist,
|
|
768
996
|
argvTools: [],
|
|
997
|
+
onFirstTurn: () => fireFinalSnapshot(session.sessionId, 'first-turn'),
|
|
769
998
|
});
|
|
770
999
|
pty.onExit(() => deps.jsonlTail?.unregister(session.sessionId));
|
|
771
1000
|
}
|
|
1001
|
+
// Task 215 — PTY-exit cleanup for the final-snapshot state runs
|
|
1002
|
+
// INDEPENDENTLY of the JsonlTail wiring. When `deps.jsonlTail` is
|
|
1003
|
+
// undefined (test fixtures, partial-mock deployments), state was
|
|
1004
|
+
// still registered above in the Task-178 probe block, and the
|
|
1005
|
+
// watchdog timer needs to be canceled on exit to prevent a leak
|
|
1006
|
+
// that fires `[pty-spawn-tool-inventory-final] reason=first-turn-timeout`
|
|
1007
|
+
// against a long-dead session 60 s later.
|
|
1008
|
+
if (isSpecialistSpawn && specialistTools !== null) {
|
|
1009
|
+
pty.onExit(() => {
|
|
1010
|
+
const state = finalSnapshotState.get(session.sessionId);
|
|
1011
|
+
if (state?.watchdog)
|
|
1012
|
+
clearTimeout(state.watchdog);
|
|
1013
|
+
finalSnapshotState.delete(session.sessionId);
|
|
1014
|
+
});
|
|
1015
|
+
}
|
|
772
1016
|
deps.onSessionReady?.(session);
|
|
773
1017
|
return { ok: true, session };
|
|
774
1018
|
}
|