@svenroth-ai/shipwright 0.26.0 → 0.27.0
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/client/dist/assets/{EmbeddedTerminal-D3wpPNZP.js → EmbeddedTerminal-CqCQUDtp.js} +1 -1
- package/client/dist/assets/{abnfDiagram-VRR7QNED-BkLIltB3.js → abnfDiagram-VRR7QNED-DX2objTP.js} +1 -1
- package/client/dist/assets/{arc-Sw-Gh0nI.js → arc-DQmjbsFU.js} +1 -1
- package/client/dist/assets/{architectureDiagram-ZJ3FMSHR-rdxUi9Ks.js → architectureDiagram-ZJ3FMSHR-DAvCsPCW.js} +1 -1
- package/client/dist/assets/{blockDiagram-677ZJIJ3-Ch_9dj8a.js → blockDiagram-677ZJIJ3-DC-dlyYI.js} +1 -1
- package/client/dist/assets/{c4Diagram-LMCZKHZV-CkFlO65x.js → c4Diagram-LMCZKHZV-DSlmXfhE.js} +1 -1
- package/client/dist/assets/channel-BfmIcrp7.js +1 -0
- package/client/dist/assets/{chunk-2Q5K7J3B-CypX83xu.js → chunk-2Q5K7J3B-C111EHL6.js} +1 -1
- package/client/dist/assets/{chunk-32BRIVSS-DxVLYGdl.js → chunk-32BRIVSS-DrCYs2XG.js} +1 -1
- package/client/dist/assets/{chunk-5VM5RSS4-Cxk1evhx.js → chunk-5VM5RSS4-DIejoaXS.js} +1 -1
- package/client/dist/assets/{chunk-EX3LRPZG-n9q5S4yJ.js → chunk-EX3LRPZG-CGWNeH2g.js} +1 -1
- package/client/dist/assets/{chunk-JWPE2WC7-jeL4xvir.js → chunk-JWPE2WC7-CCH0SRFY.js} +1 -1
- package/client/dist/assets/{chunk-MOJQB5TN-DDSHN0cj.js → chunk-MOJQB5TN-B3OpZGRv.js} +1 -1
- package/client/dist/assets/{chunk-RYQCIY6F-C0bo383g.js → chunk-RYQCIY6F-BKhdp_8v.js} +1 -1
- package/client/dist/assets/{chunk-V7JOEXUC-C0jDXXAU.js → chunk-V7JOEXUC-B6Bu8x1y.js} +1 -1
- package/client/dist/assets/{chunk-VR4S4FIN-h-Rr4Pn2.js → chunk-VR4S4FIN-OgFi2_iB.js} +1 -1
- package/client/dist/assets/{chunk-XXDRQBXY-BexSo0-s.js → chunk-XXDRQBXY-xyjuuhxl.js} +1 -1
- package/client/dist/assets/classDiagram-OUVF2IWQ-HfUQZ6Uc.js +1 -0
- package/client/dist/assets/classDiagram-v2-EOCWNBFH-HfUQZ6Uc.js +1 -0
- package/client/dist/assets/{cose-bilkent-JH36ORCC-BQXzaioj.js → cose-bilkent-JH36ORCC-BQIH3SCK.js} +1 -1
- package/client/dist/assets/{cynefin-VYW2F7L2-BJIofhfe.js → cynefin-VYW2F7L2-oyLAz8te.js} +1 -1
- package/client/dist/assets/{cynefinDiagram-TSTJHNR4-DmPqTM1T.js → cynefinDiagram-TSTJHNR4-DoLCsH0l.js} +1 -1
- package/client/dist/assets/{dagre-VKFMJZFB-1xljvw6X.js → dagre-VKFMJZFB-D7djx1_Y.js} +1 -1
- package/client/dist/assets/{diagram-FQU43EPY-iyL9muCG.js → diagram-FQU43EPY-DFuYE0Vf.js} +1 -1
- package/client/dist/assets/{diagram-G47NLZAW-DREp2Th6.js → diagram-G47NLZAW-CffCZVXk.js} +1 -1
- package/client/dist/assets/{diagram-NH7WQ7WH-h0X3Is2S.js → diagram-NH7WQ7WH-BhrHtUlt.js} +1 -1
- package/client/dist/assets/{diagram-OA4YK3LP-Bj8YZRFJ.js → diagram-OA4YK3LP-CwQPbOn0.js} +1 -1
- package/client/dist/assets/{diagram-WEI45ONY-BZOf805d.js → diagram-WEI45ONY-abtYnYqH.js} +1 -1
- package/client/dist/assets/{ebnfDiagram-CCIWWBDH-DO5JnXda.js → ebnfDiagram-CCIWWBDH-DfV7gT4m.js} +1 -1
- package/client/dist/assets/{erDiagram-Q63AITRT-DRgcqg1T.js → erDiagram-Q63AITRT-vtbCprgH.js} +1 -1
- package/client/dist/assets/{flowDiagram-23GEKE2U-C3J9QmrW.js → flowDiagram-23GEKE2U-CVCgcyDF.js} +1 -1
- package/client/dist/assets/{ganttDiagram-NO4QXBWP-BIEl3Tkm.js → ganttDiagram-NO4QXBWP-BclyOgMb.js} +1 -1
- package/client/dist/assets/{gitGraphDiagram-IHSO6WYX-BNF0tFWC.js → gitGraphDiagram-IHSO6WYX-BXT4rIKj.js} +1 -1
- package/client/dist/assets/index-CKU9dY18.css +1 -0
- package/client/dist/assets/{index-BnTOrFHb.js → index-DOMl6atu.js} +232 -214
- package/client/dist/assets/{infoDiagram-FWYZ7A6U-DEyFxiyY.js → infoDiagram-FWYZ7A6U-Dr4mN24J.js} +1 -1
- package/client/dist/assets/{ishikawaDiagram-FXEZZL3T-B_ehlg3I.js → ishikawaDiagram-FXEZZL3T-BBUFWq5C.js} +1 -1
- package/client/dist/assets/{journeyDiagram-5HDEW3XC-Dp00FyJS.js → journeyDiagram-5HDEW3XC-CmclipcQ.js} +1 -1
- package/client/dist/assets/{kanban-definition-HUTT4EX6-CTAf16q8.js → kanban-definition-HUTT4EX6-eIzUeZ03.js} +1 -1
- package/client/dist/assets/{linear-9vNUgmYd.js → linear-DGiT7uKK.js} +1 -1
- package/client/dist/assets/{mermaid.core-A6tjaEVD.js → mermaid.core-BcLNGbxW.js} +4 -4
- package/client/dist/assets/{mindmap-definition-LN4V7U3C-DRW3bmCY.js → mindmap-definition-LN4V7U3C-C4ANnNiP.js} +1 -1
- package/client/dist/assets/{pegDiagram-2B236MQR-DJFCjHp2.js → pegDiagram-2B236MQR-DnMeh3Yh.js} +1 -1
- package/client/dist/assets/{pieDiagram-ENE6RG2P-KRd-sGvC.js → pieDiagram-ENE6RG2P-CKV_rkhF.js} +1 -1
- package/client/dist/assets/{quadrantDiagram-ABIIQ3AL-9TLZE3Hu.js → quadrantDiagram-ABIIQ3AL-BuUsGwHh.js} +1 -1
- package/client/dist/assets/{railroadDiagram-RFXS5EU6-y4tLtjXg.js → railroadDiagram-RFXS5EU6-BwwdKnFL.js} +1 -1
- package/client/dist/assets/{requirementDiagram-TGXJPOKE-B9EOQDQM.js → requirementDiagram-TGXJPOKE-CpQZouJV.js} +1 -1
- package/client/dist/assets/{sankeyDiagram-HTMAVEWB-zfwiDzkT.js → sankeyDiagram-HTMAVEWB-4fnDUNVa.js} +1 -1
- package/client/dist/assets/{sequenceDiagram-DBY2YBRQ-DW1LWepL.js → sequenceDiagram-DBY2YBRQ-BOcaWlM0.js} +1 -1
- package/client/dist/assets/{sizeCapture-X5ZJPWSS-BM81Mik0.js → sizeCapture-X5ZJPWSS-_pv-9R0c.js} +1 -1
- package/client/dist/assets/{stateDiagram-2N3HPSRC-D0EMIw1w.js → stateDiagram-2N3HPSRC-CFwCOonY.js} +1 -1
- package/client/dist/assets/stateDiagram-v2-6OUMAXLB-srkiu3Ib.js +1 -0
- package/client/dist/assets/{swimlanes-5IMT3BWC-CKXNCX6M.js → swimlanes-5IMT3BWC-DFa2tzxu.js} +2 -2
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-Dq-0K9Zm.js +8 -0
- package/client/dist/assets/{timeline-definition-FHXFAJF6-ByzIfvL5.js → timeline-definition-FHXFAJF6-rhGYElgn.js} +1 -1
- package/client/dist/assets/{vennDiagram-L72KCM5P-Xep38xBH.js → vennDiagram-L72KCM5P-BoGjRxyA.js} +1 -1
- package/client/dist/assets/{wardleyDiagram-EHGQE667-DKWDpx6g.js → wardleyDiagram-EHGQE667-D-IGv5bH.js} +1 -1
- package/client/dist/assets/{xychartDiagram-FW5EYKEG-BGcwZTnu.js → xychartDiagram-FW5EYKEG-D9PFTCfm.js} +1 -1
- package/client/dist/index.html +2 -2
- package/lib/probes.mjs +10 -4
- package/lib/server.mjs +149 -12
- package/package.json +1 -1
- package/server/dist/core/sdk-sessions-merge.d.ts +19 -0
- package/server/dist/core/sdk-sessions-merge.d.ts.map +1 -1
- package/server/dist/core/sdk-sessions-merge.js +19 -5
- package/server/dist/core/sdk-sessions-merge.js.map +1 -1
- package/server/dist/core/sdk-sessions-refresh.d.ts +50 -0
- package/server/dist/core/sdk-sessions-refresh.d.ts.map +1 -0
- package/server/dist/core/sdk-sessions-refresh.js +69 -0
- package/server/dist/core/sdk-sessions-refresh.js.map +1 -0
- package/server/dist/core/sdk-sessions-store.d.ts +2 -0
- package/server/dist/core/sdk-sessions-store.d.ts.map +1 -1
- package/server/dist/core/sdk-sessions-store.js +7 -9
- package/server/dist/core/sdk-sessions-store.js.map +1 -1
- package/server/dist/core/shipwright-plugin-version-reader.d.ts +15 -0
- package/server/dist/core/shipwright-plugin-version-reader.d.ts.map +1 -0
- package/server/dist/core/shipwright-plugin-version-reader.js +49 -0
- package/server/dist/core/shipwright-plugin-version-reader.js.map +1 -0
- package/server/dist/external/inbox/_derive.d.ts +2 -25
- package/server/dist/external/inbox/_derive.d.ts.map +1 -1
- package/server/dist/external/inbox/_derive.js.map +1 -1
- package/server/dist/external/inbox/_lead.d.ts +23 -0
- package/server/dist/external/inbox/_lead.d.ts.map +1 -0
- package/server/dist/external/inbox/_lead.js +83 -0
- package/server/dist/external/inbox/_lead.js.map +1 -0
- package/server/dist/external/inbox/_types.d.ts +32 -0
- package/server/dist/external/inbox/_types.d.ts.map +1 -0
- package/server/dist/external/inbox/_types.js +10 -0
- package/server/dist/external/inbox/_types.js.map +1 -0
- package/server/dist/external/inbox/routes.d.ts.map +1 -1
- package/server/dist/external/inbox/routes.js +29 -1
- package/server/dist/external/inbox/routes.js.map +1 -1
- package/server/dist/external/launch/claim-holder-gate.d.ts +42 -0
- package/server/dist/external/launch/claim-holder-gate.d.ts.map +1 -0
- package/server/dist/external/launch/claim-holder-gate.js +87 -0
- package/server/dist/external/launch/claim-holder-gate.js.map +1 -0
- package/server/dist/external/launch/routes.d.ts.map +1 -1
- package/server/dist/external/launch/routes.js +23 -19
- package/server/dist/external/launch/routes.js.map +1 -1
- package/server/dist/external/org/lead-question-threads.d.ts +46 -0
- package/server/dist/external/org/lead-question-threads.d.ts.map +1 -0
- package/server/dist/external/org/lead-question-threads.js +132 -0
- package/server/dist/external/org/lead-question-threads.js.map +1 -0
- package/server/dist/external/org/mount.d.ts +3 -0
- package/server/dist/external/org/mount.d.ts.map +1 -1
- package/server/dist/external/org/mount.js +2 -1
- package/server/dist/external/org/mount.js.map +1 -1
- package/server/dist/external/org/usage.d.ts.map +1 -1
- package/server/dist/external/org/usage.js +20 -2
- package/server/dist/external/org/usage.js.map +1 -1
- package/server/dist/external/routes.d.ts.map +1 -1
- package/server/dist/external/routes.js +1 -7
- package/server/dist/external/routes.js.map +1 -1
- package/server/dist/routes/diagnostics.d.ts +12 -0
- package/server/dist/routes/diagnostics.d.ts.map +1 -1
- package/server/dist/routes/diagnostics.js +4 -1
- package/server/dist/routes/diagnostics.js.map +1 -1
- package/server/dist/routes/org-threads-composite.d.ts +24 -0
- package/server/dist/routes/org-threads-composite.d.ts.map +1 -0
- package/server/dist/routes/org-threads-composite.js +51 -0
- package/server/dist/routes/org-threads-composite.js.map +1 -0
- package/server/dist/routes/org.d.ts +5 -0
- package/server/dist/routes/org.d.ts.map +1 -1
- package/server/dist/routes/org.js +13 -0
- package/server/dist/routes/org.js.map +1 -1
- package/server/dist/terminal/pty-manager.d.ts +23 -1
- package/server/dist/terminal/pty-manager.d.ts.map +1 -1
- package/server/dist/terminal/pty-manager.js +22 -3
- package/server/dist/terminal/pty-manager.js.map +1 -1
- package/server/dist/terminal/pty-write-chunker.d.ts +109 -0
- package/server/dist/terminal/pty-write-chunker.d.ts.map +1 -0
- package/server/dist/terminal/pty-write-chunker.js +234 -0
- package/server/dist/terminal/pty-write-chunker.js.map +1 -0
- package/server/dist/types/org.d.ts +19 -0
- package/server/dist/types/org.d.ts.map +1 -1
- package/server/package.json +1 -1
- package/client/dist/assets/channel-BYPbLjRl.js +0 -1
- package/client/dist/assets/classDiagram-OUVF2IWQ-CsFIeTju.js +0 -1
- package/client/dist/assets/classDiagram-v2-EOCWNBFH-CsFIeTju.js +0 -1
- package/client/dist/assets/index-CYPc6qxw.css +0 -1
- package/client/dist/assets/stateDiagram-v2-6OUMAXLB-B3E4_xxT.js +0 -1
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-BegQBqnC.js +0 -8
|
@@ -29,7 +29,7 @@ function isValidUsagePayload(v) {
|
|
|
29
29
|
if (typeof v !== "object" || v === null)
|
|
30
30
|
return false;
|
|
31
31
|
const u = v;
|
|
32
|
-
|
|
32
|
+
const coreValid = typeof u.costUsd === "number" &&
|
|
33
33
|
Number.isFinite(u.costUsd) &&
|
|
34
34
|
u.costUsd >= 0 &&
|
|
35
35
|
typeof u.runCount === "number" &&
|
|
@@ -39,7 +39,21 @@ function isValidUsagePayload(v) {
|
|
|
39
39
|
Number.isFinite(u.windowDays) &&
|
|
40
40
|
u.windowDays > 0 &&
|
|
41
41
|
typeof u.asOf === "string" &&
|
|
42
|
-
u.asOf.length > 0
|
|
42
|
+
u.asOf.length > 0;
|
|
43
|
+
if (!coreValid)
|
|
44
|
+
return false;
|
|
45
|
+
// Both fields are OPTIONAL on the wire — an older producer that omits them
|
|
46
|
+
// still validates — but a PRESENT value must be well-typed.
|
|
47
|
+
if (u.unpricedCallsTotal !== undefined &&
|
|
48
|
+
(typeof u.unpricedCallsTotal !== "number" ||
|
|
49
|
+
!Number.isInteger(u.unpricedCallsTotal) ||
|
|
50
|
+
u.unpricedCallsTotal < 0)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (u.anyNotMeasured !== undefined && typeof u.anyNotMeasured !== "boolean") {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
43
57
|
}
|
|
44
58
|
/** Pure core — shared by the secret-gated route and the plain-surface proxy. */
|
|
45
59
|
export function usageCore(deps, leadId) {
|
|
@@ -108,6 +122,10 @@ export function usageCore(deps, leadId) {
|
|
|
108
122
|
runCount: parsed.runCount,
|
|
109
123
|
windowDays: parsed.windowDays,
|
|
110
124
|
asOf: parsed.asOf,
|
|
125
|
+
...(parsed.unpricedCallsTotal !== undefined
|
|
126
|
+
? { unpricedCallsTotal: parsed.unpricedCallsTotal }
|
|
127
|
+
: {}),
|
|
128
|
+
...(parsed.anyNotMeasured !== undefined ? { anyNotMeasured: parsed.anyNotMeasured } : {}),
|
|
111
129
|
},
|
|
112
130
|
};
|
|
113
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/external/org/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAAE,+BAA+B,EAAE,CAAC;AAG3C,SAAS,mBAAmB,
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/external/org/usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/external/routes.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EACL,qBAAqB,EACrB,KAAK,cAAc,EACpB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAqBjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kCAAkC,GACnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,wBAAwB,GAAG,SAAS,CAAC;IACtE;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI,CAAC;IAC7D;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtE;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxE;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D;;;;;;;;;;OAUG;IACH,UAAU,EAAE;QACV,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7B;;;;WAIG;QACH,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5C;;;;;;WAMG;QACH,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;KAClD,CAAC;IACF;;mEAE+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,oBAAoB,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;CAC3D,
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/external/routes.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EACL,qBAAqB,EACrB,KAAK,cAAc,EACpB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAqBjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kCAAkC,GACnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,wBAAwB,GAAG,SAAS,CAAC;IACtE;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI,CAAC;IAC7D;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtE;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxE;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D;;;;;;;;;;OAUG;IACH,UAAU,EAAE;QACV,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7B;;;;WAIG;QACH,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5C;;;;;;WAMG;QACH,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;KAClD,CAAC;IACF;;mEAE+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,oBAAoB,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;CAC3D,8EAiJA"}
|
|
@@ -152,13 +152,7 @@ export function createExternalRoutes(args) {
|
|
|
152
152
|
app.route("/", createPrStatusRouter());
|
|
153
153
|
// FR-04.38 — secret-gated `/api/external/org/*` + plain `/api/org/*` proxy
|
|
154
154
|
// (see org/mount.ts for why both are composed from one call site).
|
|
155
|
-
mountOrgRouters(app, {
|
|
156
|
-
honoHost,
|
|
157
|
-
leadsRoot,
|
|
158
|
-
leadsRouteSecret,
|
|
159
|
-
orgLstatSync,
|
|
160
|
-
orgWithDecisionsLock,
|
|
161
|
-
});
|
|
155
|
+
mountOrgRouters(app, { honoHost, leadsRoot, leadsRouteSecret, orgLstatSync, orgWithDecisionsLock, store });
|
|
162
156
|
return app;
|
|
163
157
|
}
|
|
164
158
|
//# sourceMappingURL=routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/external/routes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/external/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,16 @@ export interface DiagnosticsSnapshot {
|
|
|
31
31
|
name: string;
|
|
32
32
|
version: string;
|
|
33
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* iterate-2026-09-05-nav-collapse-and-version-badges — the shipwright
|
|
36
|
+
* plugin SUITE version (all 14 plugin.json + marketplace.json stamps
|
|
37
|
+
* release in lockstep, see CLAUDE.md memory), read from the "shipwright"
|
|
38
|
+
* marketplace manifest. `null` when the plugin isn't installed / not
|
|
39
|
+
* found — never a fatal condition for this route.
|
|
40
|
+
*/
|
|
41
|
+
shipwrightPlugin: {
|
|
42
|
+
version: string | null;
|
|
43
|
+
};
|
|
34
44
|
claudeCli: {
|
|
35
45
|
raw: string;
|
|
36
46
|
parsed: ClaudeVersionInfo["parsed"];
|
|
@@ -80,5 +90,7 @@ export declare function createDiagnosticsRoutes(args: {
|
|
|
80
90
|
versionInfo: () => ClaudeVersionInfo;
|
|
81
91
|
/** A06 — override the reported app version (test seam). Defaults to package.json. */
|
|
82
92
|
appVersion?: string;
|
|
93
|
+
/** Test seam — defaults to the real ~/.claude marketplace-manifest reader. */
|
|
94
|
+
readPluginVersion?: () => Promise<string | null>;
|
|
83
95
|
}): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
84
96
|
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/routes/diagnostics.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/routes/diagnostics.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;OASG;IACH,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC;;;;;;OAMG;IACH,gBAAgB,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC7C,SAAS,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACpC,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB;;;;;;WAMG;QACH,UAAU,CAAC,EAAE,mBAAmB,CAAC;KAClC,CAAC;IACF,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC;IACF,SAAS,EAAE;QACT,IAAI,EAAE;YAAE,SAAS,EAAE,IAAI,CAAA;SAAE,CAAC;QAC1B,QAAQ,EAAE;YAAE,SAAS,EAAE,KAAK,CAAC;YAAC,MAAM,EAAE,mCAAmC,CAAA;SAAE,CAAC;QAC5E,MAAM,EAAE;YAAE,SAAS,EAAE,KAAK,CAAC;YAAC,MAAM,EAAE,mCAAmC,CAAA;SAAE,CAAC;QAC1E,OAAO,EAAE;YAAE,SAAS,EAAE,KAAK,CAAC;YAAC,MAAM,EAAE,oCAAoC,CAAA;SAAE,CAAC;KAC7E,CAAC;CACH;AAID;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,8BAA8B,CAAC;AAWpD,wBAAgB,cAAc,IAAI,MAAM,CAgBvC;AA0DD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,MAAM,iBAAiB,CAAC;IACrC,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAClD,8EAwCA"}
|
|
@@ -15,6 +15,7 @@ import path from "node:path";
|
|
|
15
15
|
import { fileURLToPath } from "node:url";
|
|
16
16
|
import { Hono } from "hono";
|
|
17
17
|
import { MIN_SUPPORTED_CLI } from "../core/cli-compat.js";
|
|
18
|
+
import { readShipwrightPluginVersion } from "../core/shipwright-plugin-version-reader.js";
|
|
18
19
|
const PATH_SAMPLE_LIMIT = 8;
|
|
19
20
|
/**
|
|
20
21
|
* Stable wire-protocol identity for the Command Center. The npx bootstrapper
|
|
@@ -106,7 +107,8 @@ function buildClaudeCliDiagnostic() {
|
|
|
106
107
|
export function createDiagnosticsRoutes(args) {
|
|
107
108
|
const app = new Hono();
|
|
108
109
|
const appVersion = args.appVersion ?? readAppVersion();
|
|
109
|
-
|
|
110
|
+
const readPluginVersion = args.readPluginVersion ?? (() => readShipwrightPluginVersion());
|
|
111
|
+
app.get("/api/diagnostics", async (c) => {
|
|
110
112
|
const v = args.versionInfo();
|
|
111
113
|
const tasks = args.store.list();
|
|
112
114
|
const byState = {};
|
|
@@ -124,6 +126,7 @@ export function createDiagnosticsRoutes(args) {
|
|
|
124
126
|
}
|
|
125
127
|
const snapshot = {
|
|
126
128
|
app: { name: APP_NAME, version: appVersion },
|
|
129
|
+
shipwrightPlugin: { version: await readPluginVersion() },
|
|
127
130
|
claudeCli,
|
|
128
131
|
sessions: {
|
|
129
132
|
total: tasks.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/routes/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAA0B,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/routes/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type LeadQuestionThreadsRouteDeps } from "../external/org/lead-question-threads.js";
|
|
2
|
+
import type { OrgThreadCardView, OrgThreadsResponse } from "../types/org.js";
|
|
3
|
+
/**
|
|
4
|
+
* Narrowest shape this module needs out of `SdkSessionsStore` — mirrors the
|
|
5
|
+
* `lstatSync`-style minimal-injection convention used across this directory
|
|
6
|
+
* (inject only the method actually called, not the whole class).
|
|
7
|
+
*/
|
|
8
|
+
export interface TaskTitleLookup {
|
|
9
|
+
get(taskId: string): {
|
|
10
|
+
title: string;
|
|
11
|
+
} | undefined;
|
|
12
|
+
}
|
|
13
|
+
export interface OrgThreadsBuildDeps extends LeadQuestionThreadsRouteDeps {
|
|
14
|
+
/** Task-title lookup — leadwright's thread record only carries `taskId`;
|
|
15
|
+
* the card's display title comes from webui's own task store. A taskId
|
|
16
|
+
* with no matching task (deleted, or store not yet caught up) falls
|
|
17
|
+
* back to the raw id rather than dropping the card. */
|
|
18
|
+
store: TaskTitleLookup;
|
|
19
|
+
}
|
|
20
|
+
/** One lead's follow-up-card threads, in store order (never re-sorted). */
|
|
21
|
+
export declare function buildLeadThreadCards(deps: OrgThreadsBuildDeps, leadId: string): OrgThreadCardView[];
|
|
22
|
+
/** Every lead's threads, keyed by leadId — one entry per chart lead, always. */
|
|
23
|
+
export declare function buildOrgThreads(deps: OrgThreadsBuildDeps, leadIds: string[]): OrgThreadsResponse;
|
|
24
|
+
//# sourceMappingURL=org-threads-composite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-threads-composite.d.ts","sourceRoot":"","sources":["../../src/routes/org-threads-composite.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,0CAA0C,CAAC;AAElD,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE7E;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,mBAAoB,SAAQ,4BAA4B;IACvE;;;4DAGwD;IACxD,KAAK,EAAE,eAAe,CAAC;CACxB;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAwBnG;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAMhG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* routes/org-threads-composite.ts — builds the `GET /api/org/threads`
|
|
3
|
+
* response: every lead's follow-up-card threads, keyed by leadId (FR-04.42,
|
|
4
|
+
* leadwright#35). One http round trip for the whole page, same "composite,
|
|
5
|
+
* not N+1" shape `org-leads-composite.ts` already uses for usage/last-run/
|
|
6
|
+
* beat-register/charter — this reads one more per-lead file
|
|
7
|
+
* (`lead-question-threads.json`) the same way.
|
|
8
|
+
*
|
|
9
|
+
* A per-lead read failure (missing file, unreadable, malformed JSON,
|
|
10
|
+
* unknown version) degrades that lead to an empty card list — it never
|
|
11
|
+
* fails the whole response (AC-d: the Org page must still load with no
|
|
12
|
+
* thread anywhere).
|
|
13
|
+
*/
|
|
14
|
+
import { readLeadQuestionThreadsCore, } from "../external/org/lead-question-threads.js";
|
|
15
|
+
import { extractLeadQuestionBody } from "../external/inbox/_lead.js";
|
|
16
|
+
/** One lead's follow-up-card threads, in store order (never re-sorted). */
|
|
17
|
+
export function buildLeadThreadCards(deps, leadId) {
|
|
18
|
+
const result = readLeadQuestionThreadsCore(deps, leadId);
|
|
19
|
+
if (!result.ok)
|
|
20
|
+
return [];
|
|
21
|
+
const cards = [];
|
|
22
|
+
for (const [taskId, thread] of Object.entries(result.threads)) {
|
|
23
|
+
if (thread.rounds.length === 0)
|
|
24
|
+
continue;
|
|
25
|
+
const task = deps.store.get(taskId);
|
|
26
|
+
cards.push({
|
|
27
|
+
cardId: taskId,
|
|
28
|
+
cardTitle: task?.title ?? taskId,
|
|
29
|
+
rounds: thread.rounds.map((round) => ({
|
|
30
|
+
id: `${taskId}#${round.round}`,
|
|
31
|
+
// FR-04.37: the stored question still carries the marker line
|
|
32
|
+
// (renderLeadQuestion's raw output) — strip it the same way the
|
|
33
|
+
// lead_question inbox kind already does, so it never renders.
|
|
34
|
+
question: extractLeadQuestionBody(round.question) ?? round.question,
|
|
35
|
+
askedAt: round.askedAt,
|
|
36
|
+
answer: round.answer?.text,
|
|
37
|
+
answeredAt: round.answer?.answeredAt,
|
|
38
|
+
})),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return cards;
|
|
42
|
+
}
|
|
43
|
+
/** Every lead's threads, keyed by leadId — one entry per chart lead, always. */
|
|
44
|
+
export function buildOrgThreads(deps, leadIds) {
|
|
45
|
+
const out = {};
|
|
46
|
+
for (const leadId of leadIds) {
|
|
47
|
+
out[leadId] = buildLeadThreadCards(deps, leadId);
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=org-threads-composite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-threads-composite.js","sourceRoot":"","sources":["../../src/routes/org-threads-composite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,2BAA2B,GAE5B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAoBrE,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAAC,IAAyB,EAAE,MAAc;IAC5E,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IAE1B,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC;YACT,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,IAAI,EAAE,KAAK,IAAI,MAAM;YAChC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACpC,EAAE,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;gBAC9B,8DAA8D;gBAC9D,gEAAgE;gBAChE,8DAA8D;gBAC9D,QAAQ,EAAE,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ;gBACnE,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI;gBAC1B,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU;aACrC,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAAC,IAAyB,EAAE,OAAiB;IAC1E,MAAM,GAAG,GAAuB,EAAE,CAAC;IACnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import { type OrgFileReadDeps } from "../external/org/file-read.js";
|
|
3
3
|
import { type OrgFileWriteDeps } from "../external/org/file-write.js";
|
|
4
|
+
import { type TaskTitleLookup } from "./org-threads-composite.js";
|
|
4
5
|
export interface OrgApiRouterDeps {
|
|
5
6
|
leadsRoot: string;
|
|
6
7
|
/** The application's resolved bind host — passed through, never re-derived. */
|
|
@@ -10,6 +11,10 @@ export interface OrgApiRouterDeps {
|
|
|
10
11
|
openSync?: OrgFileReadDeps["openSync"];
|
|
11
12
|
withDecisionsLock?: OrgFileWriteDeps["withDecisionsLock"];
|
|
12
13
|
now?: () => Date;
|
|
14
|
+
/** FR-04.42 — task-title lookup for `GET /api/org/threads`. Omitted
|
|
15
|
+
* (e.g. in tests that don't exercise that route) falls back to raw
|
|
16
|
+
* taskIds instead of a real title. */
|
|
17
|
+
store?: TaskTitleLookup;
|
|
13
18
|
}
|
|
14
19
|
export declare function createOrgApiRouter(deps: OrgApiRouterDeps): Hono;
|
|
15
20
|
//# sourceMappingURL=org.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org.d.ts","sourceRoot":"","sources":["../../src/routes/org.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAK1C,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"org.d.ts","sourceRoot":"","sources":["../../src/routes/org.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAK1C,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAExF,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAOnF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IACvC,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;IAC1D,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB;;2CAEuC;IACvC,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CA+L/D"}
|
|
@@ -34,8 +34,10 @@ import { readAllLeadOrgInfo } from "../external/org/org-chart-lookup.js";
|
|
|
34
34
|
import { orgFileReadCore } from "../external/org/file-read.js";
|
|
35
35
|
import { orgFileWriteCore } from "../external/org/file-write.js";
|
|
36
36
|
import { buildLeadRosterEntry } from "./org-leads-composite.js";
|
|
37
|
+
import { buildOrgThreads } from "./org-threads-composite.js";
|
|
37
38
|
import { leadLearningsReadCore } from "../external/org/lead-doc-read.js";
|
|
38
39
|
import { auditLogCore } from "../external/org/audit-log.js";
|
|
40
|
+
const NO_TASKS = { get: () => undefined };
|
|
39
41
|
export function createOrgApiRouter(deps) {
|
|
40
42
|
const app = new Hono();
|
|
41
43
|
const { leadsRoot, honoHost } = deps;
|
|
@@ -76,6 +78,17 @@ export function createOrgApiRouter(deps) {
|
|
|
76
78
|
const body = { leads };
|
|
77
79
|
return c.json(body, 200);
|
|
78
80
|
});
|
|
81
|
+
// FR-04.42 (leadwright#35) — every lead's follow-up-card threads, keyed
|
|
82
|
+
// by leadId, one call. A lead with no thread file (the overwhelming
|
|
83
|
+
// default) simply has an empty array — see org-threads-composite.ts.
|
|
84
|
+
app.get("/api/org/threads", async (c) => {
|
|
85
|
+
const chart = orgChartCore({ leadsRoot, lstatSync: deps.lstatSync });
|
|
86
|
+
if (chart.status !== 200) {
|
|
87
|
+
return c.json(chart.body, chart.status);
|
|
88
|
+
}
|
|
89
|
+
const body = buildOrgThreads({ leadsRoot, lstatSync: deps.lstatSync, store: deps.store ?? NO_TASKS }, Object.keys(chart.body.leads));
|
|
90
|
+
return c.json(body, 200);
|
|
91
|
+
});
|
|
79
92
|
app.get("/api/org/file", async (c) => {
|
|
80
93
|
const result = orgFileReadCore({ leadsRoot, openSync: deps.openSync }, c.req.query("path"));
|
|
81
94
|
if (result.kind === "json") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org.js","sourceRoot":"","sources":["../../src/routes/org.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAA0B,MAAM,qCAAqC,CAAC;AACjG,OAAO,EAAE,eAAe,EAAwB,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAyB,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAA4B,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAwB,MAAM,kCAAkC,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAqB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"org.js","sourceRoot":"","sources":["../../src/routes/org.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ScrollbackStore } from "./scrollback-store.js";
|
|
2
2
|
import type { SnapshotRecord, SnapshotStore } from "./snapshot-store.js";
|
|
3
3
|
import { type BackpressureNotice } from "./backpressure-telemetry.js";
|
|
4
|
+
import { type ChunkWriteScheduler } from "./pty-write-chunker.js";
|
|
4
5
|
/** Subset of node-pty's IPty surface that we depend on. */
|
|
5
6
|
export interface PtyHandleApi {
|
|
6
7
|
onData(cb: (data: string) => void): {
|
|
@@ -154,6 +155,15 @@ export interface PtyManagerOpts {
|
|
|
154
155
|
* @xterm/headless's package.json on disk.
|
|
155
156
|
*/
|
|
156
157
|
expectedTerminalVersion?: string;
|
|
158
|
+
/**
|
|
159
|
+
* Chunked-write options (iterate-2026-09-05-terminal-large-command-
|
|
160
|
+
* chunked-pty-write) — passed straight through to `ChunkedPtyWriter`;
|
|
161
|
+
* see `pty-write-chunker.ts` for what each one does and why.
|
|
162
|
+
*/
|
|
163
|
+
ptyWriteChunkBytes?: number;
|
|
164
|
+
ptyWriteChunkDelayMs?: number;
|
|
165
|
+
scheduleChunkWrite?: ChunkWriteScheduler;
|
|
166
|
+
pendingWriteBytesCap?: number;
|
|
157
167
|
}
|
|
158
168
|
export declare class PtyManager {
|
|
159
169
|
private readonly entries;
|
|
@@ -170,6 +180,8 @@ export declare class PtyManager {
|
|
|
170
180
|
private readonly watchdogIntervalMs;
|
|
171
181
|
private readonly watchdogEnabledOpt;
|
|
172
182
|
private readonly nowFn;
|
|
183
|
+
/** Chunking + same-task write serialization for the pty.write() chokepoint (pty-write-chunker.ts). */
|
|
184
|
+
private readonly chunkedWriter;
|
|
173
185
|
private watchdogTimer;
|
|
174
186
|
/**
|
|
175
187
|
* Per-conn capability tracking (per external review code-pass —
|
|
@@ -214,6 +226,11 @@ export declare class PtyManager {
|
|
|
214
226
|
* append correctness (lookup by taskId + reopen each call).
|
|
215
227
|
*/
|
|
216
228
|
private appendShellStoppedMarker;
|
|
229
|
+
/**
|
|
230
|
+
* Forwards to `ChunkedPtyWriter` (pty-write-chunker.ts) — see that module
|
|
231
|
+
* for why an oversized single write can deadlock the pty on macOS, and
|
|
232
|
+
* how chunking + same-task serialization fix it.
|
|
233
|
+
*/
|
|
217
234
|
write(taskId: string, data: string): void;
|
|
218
235
|
/**
|
|
219
236
|
* Sibling of `write()` for a `mouse`-tagged SGR report (iterate-2026-08-24-
|
|
@@ -221,7 +238,12 @@ export declare class PtyManager {
|
|
|
221
238
|
* BOTH roles reach this, since it is how a reader scrolls/selects inside
|
|
222
239
|
* Claude's live TUI. Deliberately skips the `hadDataWritten` latch above:
|
|
223
240
|
* a scroll or selection gesture is not "real input" for the reused-pty
|
|
224
|
-
* heuristic that latch feeds.
|
|
241
|
+
* heuristic that latch feeds. Routed through the SAME `ChunkedPtyWriter`
|
|
242
|
+
* as `write()` (doubt-review finding, 2026-09-05): a mouse report used to
|
|
243
|
+
* write straight to `entry.pty`, which was safe when every write() call
|
|
244
|
+
* was one atomic statement, but chunking opened a real multi-tick window
|
|
245
|
+
* during which a reader's scroll gesture could splice bytes into the
|
|
246
|
+
* middle of a still-draining launch-command burst.
|
|
225
247
|
*/
|
|
226
248
|
writeMouseReport(taskId: string, data: string): void;
|
|
227
249
|
resize(taskId: string, cols: number, rows: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty-manager.d.ts","sourceRoot":"","sources":["../../src/terminal/pty-manager.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"pty-manager.d.ts","sourceRoot":"","sources":["../../src/terminal/pty-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,7 @@ import { HeadlessMirror } from "./headless-mirror.js";
|
|
|
26
26
|
import { IdleReaper, DEFAULT_IDLE_TIMEOUT_MS } from "./idle-reaper.js";
|
|
27
27
|
import { writeSnapshotPreservingLarger } from "./snapshot-preserve.js";
|
|
28
28
|
import { BackpressureTelemetry } from "./backpressure-telemetry.js";
|
|
29
|
+
import { ChunkedPtyWriter } from "./pty-write-chunker.js";
|
|
29
30
|
export class PtySpawnRejectedError extends Error {
|
|
30
31
|
constructor(target) {
|
|
31
32
|
super(`pty-manager: refusing to spawn '${target}' — only whitelisted shells are allowed (Plan-D''/ADR-067)`);
|
|
@@ -126,6 +127,8 @@ export class PtyManager {
|
|
|
126
127
|
watchdogIntervalMs;
|
|
127
128
|
watchdogEnabledOpt;
|
|
128
129
|
nowFn;
|
|
130
|
+
/** Chunking + same-task write serialization for the pty.write() chokepoint (pty-write-chunker.ts). */
|
|
131
|
+
chunkedWriter;
|
|
129
132
|
watchdogTimer = null;
|
|
130
133
|
/**
|
|
131
134
|
* Per-conn capability tracking (per external review code-pass —
|
|
@@ -168,6 +171,12 @@ export class PtyManager {
|
|
|
168
171
|
this.watchdogIntervalMs = opts.watchdogIntervalMs ?? 2_000;
|
|
169
172
|
this.watchdogEnabledOpt = opts.watchdogEnabled ?? false;
|
|
170
173
|
this.nowFn = opts.now ?? Date.now;
|
|
174
|
+
this.chunkedWriter = new ChunkedPtyWriter({
|
|
175
|
+
ptyWriteChunkBytes: opts.ptyWriteChunkBytes,
|
|
176
|
+
ptyWriteChunkDelayMs: opts.ptyWriteChunkDelayMs,
|
|
177
|
+
scheduleChunkWrite: opts.scheduleChunkWrite,
|
|
178
|
+
pendingWriteBytesCap: opts.pendingWriteBytesCap,
|
|
179
|
+
});
|
|
171
180
|
if (this.watchdogEnabledOpt) {
|
|
172
181
|
this.watchdogTimer = setInterval(() => this.watchdogTick(), this.watchdogIntervalMs);
|
|
173
182
|
// Avoid keeping a Node event loop alive solely for the watchdog.
|
|
@@ -325,6 +334,11 @@ export class PtyManager {
|
|
|
325
334
|
console.warn(`[pty-manager] shell-stopped marker append failed for ${taskId}: ${err.message}`);
|
|
326
335
|
}
|
|
327
336
|
}
|
|
337
|
+
/**
|
|
338
|
+
* Forwards to `ChunkedPtyWriter` (pty-write-chunker.ts) — see that module
|
|
339
|
+
* for why an oversized single write can deadlock the pty on macOS, and
|
|
340
|
+
* how chunking + same-task serialization fix it.
|
|
341
|
+
*/
|
|
328
342
|
write(taskId, data) {
|
|
329
343
|
const entry = this.entries.get(taskId);
|
|
330
344
|
if (!entry)
|
|
@@ -333,7 +347,7 @@ export class PtyManager {
|
|
|
333
347
|
// The one signal for "no longer virgin" — set on real input, never
|
|
334
348
|
// at attach-time (iterate-2026-08-16-task-lifecycle-ux-fixes).
|
|
335
349
|
entry.hadDataWritten = true;
|
|
336
|
-
|
|
350
|
+
this.chunkedWriter.write(entry, data);
|
|
337
351
|
}
|
|
338
352
|
/**
|
|
339
353
|
* Sibling of `write()` for a `mouse`-tagged SGR report (iterate-2026-08-24-
|
|
@@ -341,14 +355,19 @@ export class PtyManager {
|
|
|
341
355
|
* BOTH roles reach this, since it is how a reader scrolls/selects inside
|
|
342
356
|
* Claude's live TUI. Deliberately skips the `hadDataWritten` latch above:
|
|
343
357
|
* a scroll or selection gesture is not "real input" for the reused-pty
|
|
344
|
-
* heuristic that latch feeds.
|
|
358
|
+
* heuristic that latch feeds. Routed through the SAME `ChunkedPtyWriter`
|
|
359
|
+
* as `write()` (doubt-review finding, 2026-09-05): a mouse report used to
|
|
360
|
+
* write straight to `entry.pty`, which was safe when every write() call
|
|
361
|
+
* was one atomic statement, but chunking opened a real multi-tick window
|
|
362
|
+
* during which a reader's scroll gesture could splice bytes into the
|
|
363
|
+
* middle of a still-draining launch-command burst.
|
|
345
364
|
*/
|
|
346
365
|
writeMouseReport(taskId, data) {
|
|
347
366
|
const entry = this.entries.get(taskId);
|
|
348
367
|
if (!entry)
|
|
349
368
|
return;
|
|
350
369
|
this.touchIdle(entry);
|
|
351
|
-
|
|
370
|
+
this.chunkedWriter.write(entry, data);
|
|
352
371
|
}
|
|
353
372
|
resize(taskId, cols, rows) {
|
|
354
373
|
const entry = this.entries.get(taskId);
|