@covro/covro 0.6.1-dev.1 → 0.7.0-beta.1
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/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/server/events.js +20 -3
- package/dist/server/events.js.map +2 -2
- package/dist/server/http.js +4 -0
- package/dist/server/http.js.map +2 -2
- package/dist/server/service.js +21 -11
- package/dist/server/service.js.map +2 -2
- package/dist/server/thread-patch.js +58 -0
- package/dist/server/thread-patch.js.map +7 -0
- package/dist/server/websocket.js +14 -1
- package/dist/server/websocket.js.map +2 -2
- package/dist/shared/thread-patch.js +38 -0
- package/dist/shared/thread-patch.js.map +7 -0
- package/dist/shared/validation.js +1 -0
- package/dist/shared/validation.js.map +2 -2
- package/dist/web/assets/{abnfDiagram-WEYOIA3C-12kbP4fE.js → abnfDiagram-WEYOIA3C-DPrSyxx5.js} +1 -1
- package/dist/web/assets/{arc-3Cwtj2dL.js → arc-4B8zsDlv.js} +1 -1
- package/dist/web/assets/{architecture-WOLXFQ4H-DLpj2b3w.js → architecture-WOLXFQ4H-DzDNYcvm.js} +1 -1
- package/dist/web/assets/{architectureDiagram-ZHVYKT53-RlF4-Ioc.js → architectureDiagram-ZHVYKT53-CJ9tt7RD.js} +1 -1
- package/dist/web/assets/{blockDiagram-RJAE7QA3-C4qOX-bt.js → blockDiagram-RJAE7QA3-C9ljbm6J.js} +1 -1
- package/dist/web/assets/{c4Diagram-XDPPPE54-D7JMbo-C.js → c4Diagram-XDPPPE54-Sd9QMUQp.js} +1 -1
- package/dist/web/assets/channel-DKYuZv8c.js +1 -0
- package/dist/web/assets/{chunk-2E7WHVMD-IDKX-Tea.js → chunk-2E7WHVMD-DsUWsTrf.js} +1 -1
- package/dist/web/assets/{chunk-4EMNKR2T-Dc-yhxET.js → chunk-4EMNKR2T-Bh91FySB.js} +1 -1
- package/dist/web/assets/{chunk-55XCU76K-CGd2UwoZ.js → chunk-55XCU76K-BRxH4G9N.js} +1 -1
- package/dist/web/assets/{chunk-7S6XSTFO-BvKa88G4.js → chunk-7S6XSTFO-DbTYm4kS.js} +1 -1
- package/dist/web/assets/{chunk-AQDTSKZB-C7nMX4W-.js → chunk-AQDTSKZB-D1NiDG4T.js} +1 -1
- package/dist/web/assets/{chunk-DSNLSHJZ-BzJy_vEu.js → chunk-DSNLSHJZ-C0LQPoI8.js} +1 -1
- package/dist/web/assets/{chunk-HAGFOTED-r9b5k0Ex.js → chunk-HAGFOTED-DRrIOJjB.js} +1 -1
- package/dist/web/assets/{chunk-HNE4Q36P-DQoXCaGC.js → chunk-HNE4Q36P-Bok-UYL9.js} +1 -1
- package/dist/web/assets/{chunk-NQOKRVIF-1bL6YAHF.js → chunk-NQOKRVIF-D1zmT8gY.js} +1 -1
- package/dist/web/assets/{chunk-UHW7PFBP-psrTYP5z.js → chunk-UHW7PFBP-BDwjuCRk.js} +1 -1
- package/dist/web/assets/{chunk-VQ5W62QI-E2m7QCpn.js → chunk-VQ5W62QI-DAHWoS2u.js} +1 -1
- package/dist/web/assets/{chunk-WQQL4CDK-Y328jV78.js → chunk-WQQL4CDK-ggfsBWta.js} +1 -1
- package/dist/web/assets/{chunk-XXDRQBXY-D4uat8z8.js → chunk-XXDRQBXY-DBRGTT6L.js} +1 -1
- package/dist/web/assets/{chunk-YZO67HFG-C5FacS0u.js → chunk-YZO67HFG-BCM-hzbV.js} +1 -1
- package/dist/web/assets/{chunk-ZAUX2LTX-lmxyuzUz.js → chunk-ZAUX2LTX-MnMFUU_S.js} +1 -1
- package/dist/web/assets/{chunk-ZCHMQSOR-B-eLKLDi.js → chunk-ZCHMQSOR-ClT-_dGN.js} +1 -1
- package/dist/web/assets/{classDiagram-v2-4MYWR3UA-ClhXABmk.js → classDiagram-v2-4MYWR3UA-CPV9IWEk.js} +1 -1
- package/dist/web/assets/{cose-bilkent-JH36ORCC-BwPkaA_U.js → cose-bilkent-JH36ORCC-DqgOWzoX.js} +1 -1
- package/dist/web/assets/{cynefin-EF2NZ3EQ-Bsl3oI8o.js → cynefin-EF2NZ3EQ-Dkit62ND.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-WF24UDRP-ap8wP3TK.js → cynefinDiagram-WF24UDRP-DSiF7XN6.js} +1 -1
- package/dist/web/assets/{dagre-NK4GIZVX-D93ljWDv.js → dagre-NK4GIZVX-DPMP_fYv.js} +1 -1
- package/dist/web/assets/{diagram-CBK3MWTC-CgXKZEzJ.js → diagram-CBK3MWTC-CyMSNHt0.js} +1 -1
- package/dist/web/assets/{diagram-I5XIIV2D-Ce32mo7i.js → diagram-I5XIIV2D-tQ2bMi8B.js} +1 -1
- package/dist/web/assets/{diagram-ODIL2UCW-WM-FVzky.js → diagram-ODIL2UCW-BGZKonG-.js} +1 -1
- package/dist/web/assets/{diagram-PFBEJUXE-4gCFo57A.js → diagram-PFBEJUXE-ChscR483.js} +1 -1
- package/dist/web/assets/{diagram-RJA3I4VV-BsUVCONT.js → diagram-RJA3I4VV-frBsA7DX.js} +1 -1
- package/dist/web/assets/{diagram-TYUNFSNR-CuIasd0o.js → diagram-TYUNFSNR-B8qZBREp.js} +1 -1
- package/dist/web/assets/{dist-DE2aWlVX.js → dist-7U4_LxsV.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-V4P3TTPT-BMFDt5P9.js → ebnfDiagram-V4P3TTPT-CfnjkhXT.js} +1 -1
- package/dist/web/assets/{elk-QONTBCTQ-CbWBnkf9.js → elk-QONTBCTQ-D6KBNmbF.js} +1 -1
- package/dist/web/assets/{erDiagram-KYQIGQAA-BfujTOMs.js → erDiagram-KYQIGQAA-Sx8YaD42.js} +1 -1
- package/dist/web/assets/{eventmodeling-K75KTNOO-D9yPZPJr.js → eventmodeling-K75KTNOO-DgI4Zm6z.js} +1 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-AdTZW4EM.js +1 -0
- package/dist/web/assets/{ganttDiagram-R7GPNTJY-BQailqpt.js → ganttDiagram-R7GPNTJY-FN9ghlFf.js} +1 -1
- package/dist/web/assets/{gitGraph-VSP46ZUC-Cn0-LfrH.js → gitGraph-VSP46ZUC-B6RMx5nS.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-D_Bv68A5.js → gitGraphDiagram-PDYL7XHY-BUfDV32d.js} +1 -1
- package/dist/web/assets/{index-B3yair14.js → index-BayHb2le.js} +41 -41
- package/dist/web/assets/{info-OHQRW6UA-C-rFhEgh.js → info-OHQRW6UA-i9U_Vjx9.js} +1 -1
- package/dist/web/assets/{infoDiagram-MVDRKAX5-yWVzvl2L.js → infoDiagram-MVDRKAX5-BcIiBHfp.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-DFYQOW9-.js → ishikawaDiagram-HPEHV2GE-CBq8uWqz.js} +1 -1
- package/dist/web/assets/{journeyDiagram-BOSHW7O7-B1zy7CA-.js → journeyDiagram-BOSHW7O7-BoH8zvhM.js} +1 -1
- package/dist/web/assets/{kanban-definition-FNSA4HC5-CxyXZtX-.js → kanban-definition-FNSA4HC5-DqWoSu__.js} +1 -1
- package/dist/web/assets/{line-DU2ihvUj.js → line-mJzmbB6p.js} +1 -1
- package/dist/web/assets/{linear-CFRZhmcT.js → linear-BwkmaM-M.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-DKeYv3x5.js → mermaid-parser.core-DwFqVvpp.js} +3 -3
- package/dist/web/assets/{mermaid.core-D8iJrzMj.js → mermaid.core-DcF8gYr_.js} +4 -4
- package/dist/web/assets/{mindmap-definition-6OY57UG3-CKbrIT8N.js → mindmap-definition-6OY57UG3-D4XGBbWO.js} +1 -1
- package/dist/web/assets/{packet-JDAUHWVQ-B9qYbkxZ.js → packet-JDAUHWVQ-Da_cMCDo.js} +1 -1
- package/dist/web/assets/{pegDiagram-ECIUJNBX-QnJNmnXC.js → pegDiagram-ECIUJNBX-CVgVmFmC.js} +1 -1
- package/dist/web/assets/{pie-XZMESJXO-BWBbsmjp.js → pie-XZMESJXO-7pec9CJT.js} +1 -1
- package/dist/web/assets/{pieDiagram-GNMPY74T-Bubnnbvj.js → pieDiagram-GNMPY74T-97N9EH_E.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-D57K4MC3-Cs_Ch2cN.js → quadrantDiagram-D57K4MC3-FJDGQ0ZC.js} +1 -1
- package/dist/web/assets/{radar-ABXABTNO-DR6emy7T.js → radar-ABXABTNO-DsWXE4id.js} +1 -1
- package/dist/web/assets/{railroad-I3PHUGI6-B0D7AskV.js → railroad-I3PHUGI6-Cs3NR5Rp.js} +1 -1
- package/dist/web/assets/{railroad-abnf-LNEFI6M7-Bz6aNqE_.js → railroad-abnf-LNEFI6M7-fn-KtM-H.js} +1 -1
- package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-D0OpFEED.js → railroad-ebnf-DWYD2UWJ-BuexEj3O.js} +1 -1
- package/dist/web/assets/{railroad-peg-JR7BVNR7-C_NZ01lj.js → railroad-peg-JR7BVNR7-C59VHWhm.js} +1 -1
- package/dist/web/assets/{railroadDiagram-Y72NRBL7-Dj39CKJS.js → railroadDiagram-Y72NRBL7-Dwpn4kqo.js} +1 -1
- package/dist/web/assets/{requirementDiagram-EQYSW5RA-B3LvvxeY.js → requirementDiagram-EQYSW5RA-BE9cDXG8.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-SY24JHO5-DZRJovJs.js → sankeyDiagram-SY24JHO5-BiPoxRoH.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-BLEHNHQU-Cjtr9DEf.js → sequenceDiagram-BLEHNHQU-OHewZwiU.js} +1 -1
- package/dist/web/assets/{src-CiORhf3I.js → src-CAqT2rVv.js} +1 -1
- package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-CRWe83GV.js → stateDiagram-v2-A6IESKWZ-BHul6PGu.js} +1 -1
- package/dist/web/assets/{swimlanes-B3ENRKFQ-Dl64HZAr.js → swimlanes-B3ENRKFQ-BBjoKZII.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-Cp-6Y0VO.js +8 -0
- package/dist/web/assets/{timeline-definition-JXYKGLGB-CNMLxrA1.js → timeline-definition-JXYKGLGB-D7reGFUV.js} +1 -1
- package/dist/web/assets/{treeView-D4JQ5SDB-DJKJS2TK.js → treeView-D4JQ5SDB-BC4PBy2z.js} +1 -1
- package/dist/web/assets/{treemap-SAJKECNS-Bys6-NSp.js → treemap-SAJKECNS-C-L3y3B0.js} +1 -1
- package/dist/web/assets/{usecaseDiagram-WPOLBNNX-tYc1Q8xT.js → usecaseDiagram-WPOLBNNX-DqReWsLT.js} +1 -1
- package/dist/web/assets/{vennDiagram-Q3Y3IDCW-yr790RR-.js → vennDiagram-Q3Y3IDCW-RB21WgMG.js} +1 -1
- package/dist/web/assets/{wardley-7MLQ67FV-d-Le2twL.js → wardley-7MLQ67FV-CAGdvTyZ.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-IVAIDKWA-1Q-unpfn.js → wardleyDiagram-IVAIDKWA-DXN5Mh5B.js} +1 -1
- package/dist/web/assets/{xychartDiagram-4URNHDU4-zofaLTye.js → xychartDiagram-4URNHDU4-Y2Tpnzwb.js} +1 -1
- package/dist/web/index.html +1 -1
- package/package.json +4 -4
- package/dist/web/assets/channel-AXdPKUi0.js +0 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-DosDBlJM.js +0 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-Cmp6k7s_.js +0 -8
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from "node:util";
|
|
2
|
+
function itemPatch(previous, item) {
|
|
3
|
+
if (previous) {
|
|
4
|
+
for (const field of ["text", "output"]) {
|
|
5
|
+
const before = previous[field] ?? "";
|
|
6
|
+
const after = item[field];
|
|
7
|
+
if (after !== void 0 && after.startsWith(before) && isDeepStrictEqual({ ...previous, [field]: void 0 }, { ...item, [field]: void 0 }))
|
|
8
|
+
return {
|
|
9
|
+
id: item.id,
|
|
10
|
+
append: { field, offset: before.length, text: after.slice(before.length) }
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return { id: item.id, value: structuredClone(item) };
|
|
15
|
+
}
|
|
16
|
+
class ThreadPatchBuilder {
|
|
17
|
+
turns = /* @__PURE__ */ new Map();
|
|
18
|
+
build(view, streamed) {
|
|
19
|
+
const { turns, ...thread } = view;
|
|
20
|
+
const patch = { thread, turns: [] };
|
|
21
|
+
const turnIds = turns.map((turn) => turn.id);
|
|
22
|
+
if (!streamed && JSON.stringify(turnIds) !== JSON.stringify([...this.turns.keys()]))
|
|
23
|
+
patch.turnIds = turnIds;
|
|
24
|
+
for (const turn of turns) {
|
|
25
|
+
if (streamed && turn.id !== streamed.turnId) continue;
|
|
26
|
+
const { items, ...metadata } = turn;
|
|
27
|
+
const encoded = JSON.stringify(metadata);
|
|
28
|
+
const previous = this.turns.get(turn.id);
|
|
29
|
+
const state = previous ?? { encoded: "", items: /* @__PURE__ */ new Map() };
|
|
30
|
+
const update = { turn: metadata, items: [] };
|
|
31
|
+
for (const item of items) {
|
|
32
|
+
if (streamed && item.id !== streamed.itemId) continue;
|
|
33
|
+
const old = state.items.get(item.id);
|
|
34
|
+
if (old && isDeepStrictEqual(old.value, item)) continue;
|
|
35
|
+
update.items.push(itemPatch(old?.value, item));
|
|
36
|
+
state.items.set(item.id, { value: structuredClone(item) });
|
|
37
|
+
}
|
|
38
|
+
const itemIds = items.map((item) => item.id);
|
|
39
|
+
if (!streamed && JSON.stringify(itemIds) !== JSON.stringify([...state.items.keys()]))
|
|
40
|
+
update.itemIds = itemIds;
|
|
41
|
+
if (!previous || update.items.length || encoded !== state.encoded || update.itemIds)
|
|
42
|
+
patch.turns.push(update);
|
|
43
|
+
state.encoded = encoded;
|
|
44
|
+
if (!streamed) state.items = new Map(itemIds.map((id) => [id, state.items.get(id)]));
|
|
45
|
+
this.turns.set(turn.id, state);
|
|
46
|
+
}
|
|
47
|
+
if (!streamed) {
|
|
48
|
+
const ordered = turnIds.map((id) => [id, this.turns.get(id)]);
|
|
49
|
+
this.turns.clear();
|
|
50
|
+
for (const [id, state] of ordered) this.turns.set(id, state);
|
|
51
|
+
}
|
|
52
|
+
return patch;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
ThreadPatchBuilder
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=thread-patch.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/server/thread-patch.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ItemView, ThreadView } from '../shared/types.js';\nimport { isDeepStrictEqual } from 'node:util';\nimport type { ItemPatch, ThreadPatch } from '../shared/thread-patch.js';\n\nexport interface StreamedItem {\n turnId: string;\n itemId: string;\n}\n\ninterface ItemState {\n value: ItemView;\n}\ninterface TurnState {\n encoded: string;\n items: Map<string, ItemState>;\n}\n\nfunction itemPatch(previous: ItemView | undefined, item: ItemView): ItemPatch {\n if (previous) {\n for (const field of ['text', 'output'] as const) {\n const before = previous[field] ?? '';\n const after = item[field];\n if (\n after !== undefined &&\n after.startsWith(before) &&\n isDeepStrictEqual({ ...previous, [field]: undefined }, { ...item, [field]: undefined })\n )\n return {\n id: item.id,\n append: { field, offset: before.length, text: after.slice(before.length) },\n };\n }\n }\n return { id: item.id, value: structuredClone(item) };\n}\n\n/** Remember only one baseline. Streamed updates never traverse or serialize old item bodies. */\nexport class ThreadPatchBuilder {\n private readonly turns = new Map<string, TurnState>();\n build(view: ThreadView, streamed?: StreamedItem): ThreadPatch {\n const { turns, ...thread } = view;\n const patch: ThreadPatch = { thread, turns: [] };\n const turnIds = turns.map((turn) => turn.id);\n if (!streamed && JSON.stringify(turnIds) !== JSON.stringify([...this.turns.keys()]))\n patch.turnIds = turnIds;\n for (const turn of turns) {\n if (streamed && turn.id !== streamed.turnId) continue;\n const { items, ...metadata } = turn;\n const encoded = JSON.stringify(metadata);\n const previous = this.turns.get(turn.id);\n const state = previous ?? { encoded: '', items: new Map<string, ItemState>() };\n const update: ThreadPatch['turns'][number] = { turn: metadata, items: [] };\n for (const item of items) {\n if (streamed && item.id !== streamed.itemId) continue;\n const old = state.items.get(item.id);\n if (old && isDeepStrictEqual(old.value, item)) continue;\n update.items.push(itemPatch(old?.value, item));\n state.items.set(item.id, { value: structuredClone(item) });\n }\n const itemIds = items.map((item) => item.id);\n if (!streamed && JSON.stringify(itemIds) !== JSON.stringify([...state.items.keys()]))\n update.itemIds = itemIds;\n if (!previous || update.items.length || encoded !== state.encoded || update.itemIds)\n patch.turns.push(update);\n state.encoded = encoded;\n if (!streamed) state.items = new Map(itemIds.map((id) => [id, state.items.get(id)!]));\n this.turns.set(turn.id, state);\n }\n if (!streamed) {\n const ordered = turnIds.map((id) => [id, this.turns.get(id)!] as const);\n this.turns.clear();\n for (const [id, state] of ordered) this.turns.set(id, state);\n }\n return patch;\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,yBAAyB;AAgBlC,SAAS,UAAU,UAAgC,MAA2B;AAC5E,MAAI,UAAU;AACZ,eAAW,SAAS,CAAC,QAAQ,QAAQ,GAAY;AAC/C,YAAM,SAAS,SAAS,KAAK,KAAK;AAClC,YAAM,QAAQ,KAAK,KAAK;AACxB,UACE,UAAU,UACV,MAAM,WAAW,MAAM,KACvB,kBAAkB,EAAE,GAAG,UAAU,CAAC,KAAK,GAAG,OAAU,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,OAAU,CAAC;AAEtF,eAAO;AAAA,UACL,IAAI,KAAK;AAAA,UACT,QAAQ,EAAE,OAAO,QAAQ,OAAO,QAAQ,MAAM,MAAM,MAAM,OAAO,MAAM,EAAE;AAAA,QAC3E;AAAA,IACJ;AAAA,EACF;AACA,SAAO,EAAE,IAAI,KAAK,IAAI,OAAO,gBAAgB,IAAI,EAAE;AACrD;AAGO,MAAM,mBAAmB;AAAA,EACb,QAAQ,oBAAI,IAAuB;AAAA,EACpD,MAAM,MAAkB,UAAsC;AAC5D,UAAM,EAAE,OAAO,GAAG,OAAO,IAAI;AAC7B,UAAM,QAAqB,EAAE,QAAQ,OAAO,CAAC,EAAE;AAC/C,UAAM,UAAU,MAAM,IAAI,CAAC,SAAS,KAAK,EAAE;AAC3C,QAAI,CAAC,YAAY,KAAK,UAAU,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,KAAK,MAAM,KAAK,CAAC,CAAC;AAChF,YAAM,UAAU;AAClB,eAAW,QAAQ,OAAO;AACxB,UAAI,YAAY,KAAK,OAAO,SAAS,OAAQ;AAC7C,YAAM,EAAE,OAAO,GAAG,SAAS,IAAI;AAC/B,YAAM,UAAU,KAAK,UAAU,QAAQ;AACvC,YAAM,WAAW,KAAK,MAAM,IAAI,KAAK,EAAE;AACvC,YAAM,QAAQ,YAAY,EAAE,SAAS,IAAI,OAAO,oBAAI,IAAuB,EAAE;AAC7E,YAAM,SAAuC,EAAE,MAAM,UAAU,OAAO,CAAC,EAAE;AACzE,iBAAW,QAAQ,OAAO;AACxB,YAAI,YAAY,KAAK,OAAO,SAAS,OAAQ;AAC7C,cAAM,MAAM,MAAM,MAAM,IAAI,KAAK,EAAE;AACnC,YAAI,OAAO,kBAAkB,IAAI,OAAO,IAAI,EAAG;AAC/C,eAAO,MAAM,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC;AAC7C,cAAM,MAAM,IAAI,KAAK,IAAI,EAAE,OAAO,gBAAgB,IAAI,EAAE,CAAC;AAAA,MAC3D;AACA,YAAM,UAAU,MAAM,IAAI,CAAC,SAAS,KAAK,EAAE;AAC3C,UAAI,CAAC,YAAY,KAAK,UAAU,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,MAAM,MAAM,KAAK,CAAC,CAAC;AACjF,eAAO,UAAU;AACnB,UAAI,CAAC,YAAY,OAAO,MAAM,UAAU,YAAY,MAAM,WAAW,OAAO;AAC1E,cAAM,MAAM,KAAK,MAAM;AACzB,YAAM,UAAU;AAChB,UAAI,CAAC,SAAU,OAAM,QAAQ,IAAI,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,MAAM,IAAI,EAAE,CAAE,CAAC,CAAC;AACpF,WAAK,MAAM,IAAI,KAAK,IAAI,KAAK;AAAA,IAC/B;AACA,QAAI,CAAC,UAAU;AACb,YAAM,UAAU,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAE,CAAU;AACtE,WAAK,MAAM,MAAM;AACjB,iBAAW,CAAC,IAAI,KAAK,KAAK,QAAS,MAAK,MAAM,IAAI,IAAI,KAAK;AAAA,IAC7D;AACA,WAAO;AAAA,EACT;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/server/websocket.js
CHANGED
|
@@ -23,6 +23,14 @@ function sendBounded(socket, message, limit) {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
const encoded = JSON.stringify(outgoing);
|
|
26
|
+
if (message.type === "event" && message.kind === "threadPatch" && Buffer.byteLength(encoded) > budget) {
|
|
27
|
+
sendBounded(
|
|
28
|
+
socket,
|
|
29
|
+
{ type: "resync", threadId: message.threadId, cursor: message.cursor },
|
|
30
|
+
limit
|
|
31
|
+
);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
26
34
|
if (socket.bufferedAmount + Buffer.byteLength(encoded) > limit) {
|
|
27
35
|
socket.close(4008, "Slow connection; reconnect for snapshot");
|
|
28
36
|
socket.terminate?.();
|
|
@@ -72,7 +80,12 @@ function socketHandlers(service, config, identity, overview = false) {
|
|
|
72
80
|
throw new AppError("VALIDATION_FAILED", "Invalid subscription");
|
|
73
81
|
const input = socketMessageSchema.parse(JSON.parse(event.data));
|
|
74
82
|
if (input.type === "unsubscribe") return;
|
|
75
|
-
const stop = await service.subscribe(
|
|
83
|
+
const stop = await service.subscribe(
|
|
84
|
+
input.threadId,
|
|
85
|
+
input.after,
|
|
86
|
+
deliver,
|
|
87
|
+
input.incremental
|
|
88
|
+
);
|
|
76
89
|
if (current !== generation || ws.readyState !== 1) stop();
|
|
77
90
|
else unsubscribe = stop;
|
|
78
91
|
} catch (error) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/server/websocket.ts"],
|
|
4
|
-
"sourcesContent": ["import type { WSEvents, WSContext } from 'hono/ws';\nimport type { WebSocketLike } from '@hono/node-server';\nimport type { WebSocketServer, WebSocket } from 'ws';\nimport { socketMessageSchema } from '../shared/validation.js';\nimport type { ServerMessage, ThreadView } from '../shared/types.js';\nimport { AppError } from '../shared/errors.js';\nimport type { GatewayService } from './service.js';\nimport type { AppConfig } from './config.js';\nimport type { Identity } from './auth.js';\nimport { compactThreadForTransport } from './snapshot.js';\n\nexport interface SocketSink {\n readyState: number;\n bufferedAmount: number;\n send(data: string): void;\n close(code: number, reason: string): void;\n terminate?(): void;\n}\n/** Bounds both individual snapshots and queued bytes, including runtime broadcasts. */\nexport function sendBounded(socket: SocketSink, message: ServerMessage, limit: number): void {\n if (socket.readyState !== 1) return;\n let outgoing = message;\n const budget = Math.max(512, Math.floor(limit / 2));\n try {\n if (message.type === 'snapshot')\n outgoing = { ...message, data: compactThreadForTransport(message.data, budget) };\n else if (message.type === 'event' && message.kind === 'thread')\n outgoing = {\n ...message,\n payload: compactThreadForTransport(message.payload as ThreadView, budget),\n };\n } catch (error) {\n outgoing = {\n type: 'error',\n error:\n error instanceof AppError\n ? error.toJSON()\n : {\n code: 'SNAPSHOT_TOO_LARGE',\n message: 'Current control state exceeds the configured limit',\n },\n };\n }\n const encoded = JSON.stringify(outgoing);\n if (socket.bufferedAmount + Buffer.byteLength(encoded) > limit) {\n socket.close(4008, 'Slow connection; reconnect for snapshot');\n socket.terminate?.();\n return;\n }\n socket.send(encoded);\n}\nexport function socketHandlers(\n service: GatewayService,\n config: AppConfig,\n identity: Identity,\n overview = false,\n): WSEvents<WebSocketLike> {\n let unsubscribe: (() => void) | undefined;\n let stopRuntime: (() => void) | undefined;\n let stopOverview: (() => void) | undefined;\n let generation = 0;\n let expiry: ReturnType<typeof setTimeout> | undefined;\n const send = (ws: WSContext<WebSocketLike>, message: ServerMessage) => {\n const raw = ws.raw as WebSocket | undefined;\n sendBounded(\n raw ?? {\n readyState: ws.readyState,\n bufferedAmount: 0,\n send: (data) => ws.send(data),\n close: (code, reason) => ws.close(code, reason),\n },\n message,\n config.limits.wsBytes,\n );\n };\n return {\n onOpen(_event, ws) {\n stopRuntime = service.subscribeRuntime((message) => send(ws, message));\n if (overview) stopOverview = service.subscribeOverview((message) => send(ws, message));\n if (identity.expiresAt)\n expiry = setTimeout(\n () => ws.close(4001, 'Authentication expired'),\n Math.min(2_147_483_647, Math.max(1, identity.expiresAt - Date.now())),\n );\n },\n async onMessage(event, ws) {\n const current = ++generation;\n unsubscribe?.();\n unsubscribe = undefined;\n const deliver = (message: ServerMessage) => {\n if (current === generation && !(message.type === 'event' && message.kind === 'runtime'))\n send(ws, message);\n };\n try {\n if (typeof event.data !== 'string' || Buffer.byteLength(event.data) > 8192)\n throw new AppError('VALIDATION_FAILED', 'Invalid subscription');\n const input = socketMessageSchema.parse(JSON.parse(event.data));\n if (input.type === 'unsubscribe') return;\n const stop = await service.subscribe(input.threadId
|
|
5
|
-
"mappings": "AAGA,SAAS,2BAA2B;AAEpC,SAAS,gBAAgB;AAIzB,SAAS,iCAAiC;AAUnC,SAAS,YAAY,QAAoB,SAAwB,OAAqB;AAC3F,MAAI,OAAO,eAAe,EAAG;AAC7B,MAAI,WAAW;AACf,QAAM,SAAS,KAAK,IAAI,KAAK,KAAK,MAAM,QAAQ,CAAC,CAAC;AAClD,MAAI;AACF,QAAI,QAAQ,SAAS;AACnB,iBAAW,EAAE,GAAG,SAAS,MAAM,0BAA0B,QAAQ,MAAM,MAAM,EAAE;AAAA,aACxE,QAAQ,SAAS,WAAW,QAAQ,SAAS;AACpD,iBAAW;AAAA,QACT,GAAG;AAAA,QACH,SAAS,0BAA0B,QAAQ,SAAuB,MAAM;AAAA,MAC1E;AAAA,EACJ,SAAS,OAAO;AACd,eAAW;AAAA,MACT,MAAM;AAAA,MACN,OACE,iBAAiB,WACb,MAAM,OAAO,IACb;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACR;AAAA,EACF;AACA,QAAM,UAAU,KAAK,UAAU,QAAQ;
|
|
4
|
+
"sourcesContent": ["import type { WSEvents, WSContext } from 'hono/ws';\nimport type { WebSocketLike } from '@hono/node-server';\nimport type { WebSocketServer, WebSocket } from 'ws';\nimport { socketMessageSchema } from '../shared/validation.js';\nimport type { ServerMessage, ThreadView } from '../shared/types.js';\nimport { AppError } from '../shared/errors.js';\nimport type { GatewayService } from './service.js';\nimport type { AppConfig } from './config.js';\nimport type { Identity } from './auth.js';\nimport { compactThreadForTransport } from './snapshot.js';\n\nexport interface SocketSink {\n readyState: number;\n bufferedAmount: number;\n send(data: string): void;\n close(code: number, reason: string): void;\n terminate?(): void;\n}\n/** Bounds both individual snapshots and queued bytes, including runtime broadcasts. */\nexport function sendBounded(socket: SocketSink, message: ServerMessage, limit: number): void {\n if (socket.readyState !== 1) return;\n let outgoing = message;\n const budget = Math.max(512, Math.floor(limit / 2));\n try {\n if (message.type === 'snapshot')\n outgoing = { ...message, data: compactThreadForTransport(message.data, budget) };\n else if (message.type === 'event' && message.kind === 'thread')\n outgoing = {\n ...message,\n payload: compactThreadForTransport(message.payload as ThreadView, budget),\n };\n } catch (error) {\n outgoing = {\n type: 'error',\n error:\n error instanceof AppError\n ? error.toJSON()\n : {\n code: 'SNAPSHOT_TOO_LARGE',\n message: 'Current control state exceeds the configured limit',\n },\n };\n }\n const encoded = JSON.stringify(outgoing);\n // Large item replacements use the lossless HTTP path; never clip their body.\n if (\n message.type === 'event' &&\n message.kind === 'threadPatch' &&\n Buffer.byteLength(encoded) > budget\n ) {\n sendBounded(\n socket,\n { type: 'resync', threadId: message.threadId!, cursor: message.cursor },\n limit,\n );\n return;\n }\n if (socket.bufferedAmount + Buffer.byteLength(encoded) > limit) {\n socket.close(4008, 'Slow connection; reconnect for snapshot');\n socket.terminate?.();\n return;\n }\n socket.send(encoded);\n}\nexport function socketHandlers(\n service: GatewayService,\n config: AppConfig,\n identity: Identity,\n overview = false,\n): WSEvents<WebSocketLike> {\n let unsubscribe: (() => void) | undefined;\n let stopRuntime: (() => void) | undefined;\n let stopOverview: (() => void) | undefined;\n let generation = 0;\n let expiry: ReturnType<typeof setTimeout> | undefined;\n const send = (ws: WSContext<WebSocketLike>, message: ServerMessage) => {\n const raw = ws.raw as WebSocket | undefined;\n sendBounded(\n raw ?? {\n readyState: ws.readyState,\n bufferedAmount: 0,\n send: (data) => ws.send(data),\n close: (code, reason) => ws.close(code, reason),\n },\n message,\n config.limits.wsBytes,\n );\n };\n return {\n onOpen(_event, ws) {\n stopRuntime = service.subscribeRuntime((message) => send(ws, message));\n if (overview) stopOverview = service.subscribeOverview((message) => send(ws, message));\n if (identity.expiresAt)\n expiry = setTimeout(\n () => ws.close(4001, 'Authentication expired'),\n Math.min(2_147_483_647, Math.max(1, identity.expiresAt - Date.now())),\n );\n },\n async onMessage(event, ws) {\n const current = ++generation;\n unsubscribe?.();\n unsubscribe = undefined;\n const deliver = (message: ServerMessage) => {\n if (current === generation && !(message.type === 'event' && message.kind === 'runtime'))\n send(ws, message);\n };\n try {\n if (typeof event.data !== 'string' || Buffer.byteLength(event.data) > 8192)\n throw new AppError('VALIDATION_FAILED', 'Invalid subscription');\n const input = socketMessageSchema.parse(JSON.parse(event.data));\n if (input.type === 'unsubscribe') return;\n const stop = await service.subscribe(\n input.threadId,\n input.after,\n deliver,\n input.incremental,\n );\n if (current !== generation || ws.readyState !== 1) stop();\n else unsubscribe = stop;\n } catch (error) {\n deliver({\n type: 'error',\n error:\n error instanceof AppError\n ? error.toJSON()\n : { code: 'VALIDATION_FAILED', message: 'Invalid subscription' },\n });\n }\n },\n onClose() {\n generation++;\n unsubscribe?.();\n stopRuntime?.();\n stopOverview?.();\n clearTimeout(expiry);\n },\n onError() {\n generation++;\n unsubscribe?.();\n stopRuntime?.();\n stopOverview?.();\n clearTimeout(expiry);\n },\n };\n}\nexport function startHeartbeat(server: WebSocketServer): () => void {\n const alive = new WeakSet<WebSocket>();\n server.on('connection', (ws) => {\n alive.add(ws);\n ws.on('pong', () => alive.add(ws));\n ws.on('error', () => ws.terminate());\n });\n const timer = setInterval(() => {\n for (const ws of server.clients) {\n if (!alive.has(ws)) {\n ws.terminate();\n continue;\n }\n alive.delete(ws);\n ws.ping();\n }\n }, 25_000);\n timer.unref();\n return () => clearInterval(timer);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
function applyThreadPatch(current, patch) {
|
|
2
|
+
const turns = new Map(current.turns.map((turn) => [turn.id, turn]));
|
|
3
|
+
for (const update of patch.turns) {
|
|
4
|
+
const previous = turns.get(update.turn.id);
|
|
5
|
+
const items = new Map(previous?.items.map((item) => [item.id, item]));
|
|
6
|
+
for (const change of update.items) {
|
|
7
|
+
if (change.value) items.set(change.id, change.value);
|
|
8
|
+
else if (change.append) {
|
|
9
|
+
const item = items.get(change.id);
|
|
10
|
+
const { field, offset, text } = change.append;
|
|
11
|
+
if (!item || !Number.isSafeInteger(offset) || offset < 0 || (item[field]?.length ?? 0) < offset)
|
|
12
|
+
throw new Error("Missing streamed content; reload the thread snapshot");
|
|
13
|
+
items.set(change.id, { ...item, [field]: (item[field] ?? "").slice(0, offset) + text });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const ids = update.itemIds ?? [...items.keys()];
|
|
17
|
+
turns.set(update.turn.id, {
|
|
18
|
+
...update.turn,
|
|
19
|
+
items: ids.map((id) => {
|
|
20
|
+
const item = items.get(id);
|
|
21
|
+
if (!item) throw new Error("Missing item; reload the thread snapshot");
|
|
22
|
+
return item;
|
|
23
|
+
})
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
...patch.thread,
|
|
28
|
+
turns: (patch.turnIds ?? [...turns.keys()]).map((id) => {
|
|
29
|
+
const turn = turns.get(id);
|
|
30
|
+
if (!turn) throw new Error("Missing turn; reload the thread snapshot");
|
|
31
|
+
return turn;
|
|
32
|
+
})
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
applyThreadPatch
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=thread-patch.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/shared/thread-patch.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ItemView, ThreadView, TurnView } from './types.js';\n\nexport interface ItemPatch {\n id: string;\n value?: ItemView;\n append?: { field: 'text' | 'output'; offset: number; text: string };\n}\n\nexport interface ThreadPatch {\n thread: Omit<ThreadView, 'turns'>;\n turns: { turn: Omit<TurnView, 'items'>; items: ItemPatch[]; itemIds?: string[] }[];\n turnIds?: string[];\n}\n\n/** Absolute offsets make a streamed replacement safe after an HTTP snapshot or replay. */\nexport function applyThreadPatch(current: ThreadView, patch: ThreadPatch): ThreadView {\n const turns = new Map(current.turns.map((turn) => [turn.id, turn]));\n for (const update of patch.turns) {\n const previous = turns.get(update.turn.id);\n const items = new Map(previous?.items.map((item) => [item.id, item]));\n for (const change of update.items) {\n if (change.value) items.set(change.id, change.value);\n else if (change.append) {\n const item = items.get(change.id);\n const { field, offset, text } = change.append;\n if (\n !item ||\n !Number.isSafeInteger(offset) ||\n offset < 0 ||\n (item[field]?.length ?? 0) < offset\n )\n throw new Error('Missing streamed content; reload the thread snapshot');\n items.set(change.id, { ...item, [field]: (item[field] ?? '').slice(0, offset) + text });\n }\n }\n const ids = update.itemIds ?? [...items.keys()];\n turns.set(update.turn.id, {\n ...update.turn,\n items: ids.map((id) => {\n const item = items.get(id);\n if (!item) throw new Error('Missing item; reload the thread snapshot');\n return item;\n }),\n });\n }\n return {\n ...patch.thread,\n turns: (patch.turnIds ?? [...turns.keys()]).map((id) => {\n const turn = turns.get(id);\n if (!turn) throw new Error('Missing turn; reload the thread snapshot');\n return turn;\n }),\n };\n}\n"],
|
|
5
|
+
"mappings": "AAeO,SAAS,iBAAiB,SAAqB,OAAgC;AACpF,QAAM,QAAQ,IAAI,IAAI,QAAQ,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AAClE,aAAW,UAAU,MAAM,OAAO;AAChC,UAAM,WAAW,MAAM,IAAI,OAAO,KAAK,EAAE;AACzC,UAAM,QAAQ,IAAI,IAAI,UAAU,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AACpE,eAAW,UAAU,OAAO,OAAO;AACjC,UAAI,OAAO,MAAO,OAAM,IAAI,OAAO,IAAI,OAAO,KAAK;AAAA,eAC1C,OAAO,QAAQ;AACtB,cAAM,OAAO,MAAM,IAAI,OAAO,EAAE;AAChC,cAAM,EAAE,OAAO,QAAQ,KAAK,IAAI,OAAO;AACvC,YACE,CAAC,QACD,CAAC,OAAO,cAAc,MAAM,KAC5B,SAAS,MACR,KAAK,KAAK,GAAG,UAAU,KAAK;AAE7B,gBAAM,IAAI,MAAM,sDAAsD;AACxE,cAAM,IAAI,OAAO,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC;AAAA,MACxF;AAAA,IACF;AACA,UAAM,MAAM,OAAO,WAAW,CAAC,GAAG,MAAM,KAAK,CAAC;AAC9C,UAAM,IAAI,OAAO,KAAK,IAAI;AAAA,MACxB,GAAG,OAAO;AAAA,MACV,OAAO,IAAI,IAAI,CAAC,OAAO;AACrB,cAAM,OAAO,MAAM,IAAI,EAAE;AACzB,YAAI,CAAC,KAAM,OAAM,IAAI,MAAM,0CAA0C;AACrE,eAAO;AAAA,MACT,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACA,SAAO;AAAA,IACL,GAAG,MAAM;AAAA,IACT,QAAQ,MAAM,WAAW,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO;AACtD,YAAM,OAAO,MAAM,IAAI,EAAE;AACzB,UAAI,CAAC,KAAM,OAAM,IAAI,MAAM,0CAA0C;AACrE,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -130,6 +130,7 @@ const reconcileSchema = operationSchema.extend({ confirmEnded: z.literal(true) }
|
|
|
130
130
|
const subscribeSchema = z.object({
|
|
131
131
|
type: z.literal("subscribe"),
|
|
132
132
|
threadId: idSchema,
|
|
133
|
+
incremental: z.boolean().optional(),
|
|
133
134
|
after: z.object({ serverEpoch: idSchema, seq: z.number().int().nonnegative() }).strict().optional()
|
|
134
135
|
}).strict();
|
|
135
136
|
const socketMessageSchema = z.discriminatedUnion("type", [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/shared/validation.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from 'zod';\nimport { imageDataBytes, MAX_IMAGE_BYTES, MAX_IMAGES } from './images.js';\nimport type { TaskMessage } from './types.js';\nimport { threadNameError } from './thread-name.js';\nexport const cursorSchema = z.string().min(1).max(4096);\nexport const idSchema = z.string().min(1).max(256);\nconst projectNameSchema = z.string().trim().min(1).max(100);\nexport const createProjectSchema = z\n .object({ path: z.string().trim().min(1).max(4096), name: projectNameSchema.optional() })\n .strict();\nexport const renameProjectSchema = z.object({ name: projectNameSchema }).strict();\nexport const cloneProjectSchema = createProjectSchema.extend({\n clientOperationId: z.string().uuid(),\n repository: z.string().trim().min(1).max(4096),\n});\nexport const removeProjectSchema = z.object({}).strict();\nexport const reorderProjectsSchema = z\n .object({ projectIds: z.array(idSchema).refine((ids) => new Set(ids).size === ids.length) })\n .strict();\nexport const settingsSchema = z\n .object({\n model: z.string().min(1).max(200).optional(),\n collaborationMode: z.enum(['plan', 'default']).optional(),\n reasoningEffort: z.string().min(1).max(40).optional(),\n serviceTier: z.literal('fast').nullable().optional(),\n permissionMode: z.enum(['ask', 'auto-review', 'full-access', 'read-only']).optional(),\n approvalPolicy: z.enum(['untrusted', 'on-request', 'never']).optional(),\n approvalReviewer: z.enum(['user', 'auto_review']).optional(),\n sandbox: z.enum(['read-only', 'workspace-write', 'danger-full-access']).optional(),\n })\n .strict()\n .refine(\n (settings) =>\n settings.permissionMode === undefined ||\n (settings.sandbox === undefined &&\n settings.approvalPolicy === undefined &&\n settings.approvalReviewer === undefined),\n '\u6743\u9650\u6A21\u5F0F\u4E0D\u80FD\u4E0E\u72EC\u7ACB\u7684\u6743\u9650\u3001\u5BA1\u6279\u7B56\u7565\u6216\u5BA1\u6838\u65B9\u540C\u65F6\u8BBE\u7F6E',\n );\nexport const operationSchema = z.object({ clientOperationId: z.string().uuid() }).strict();\nexport const saveModelDefaultsSchema = operationSchema.extend({\n settings: z\n .object({\n model: z.string().min(1).max(200),\n reasoningEffort: z.string().min(1).max(40).nullable(),\n })\n .strict(),\n});\nexport const reviewTargetSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('uncommittedChanges') }).strict(),\n z\n .object({\n type: z.literal('baseBranch'),\n branch: z\n .string()\n .trim()\n .min(1)\n .max(256)\n .refine(\n (branch) =>\n !branch.startsWith('-') &&\n !/\\s/.test(branch) &&\n [...branch].every((char) => char.codePointAt(0)! >= 32 && char.codePointAt(0) !== 127),\n ),\n })\n .strict(),\n z\n .object({\n type: z.literal('commit'),\n sha: z\n .string()\n .trim()\n .regex(/^[a-fA-F0-9]{7,64}$/),\n })\n .strict(),\n z\n .object({ type: z.literal('custom'), instructions: z.string().trim().min(1).max(100_000) })\n .strict(),\n]);\nexport const startReviewSchema = operationSchema.extend({ target: reviewTargetSchema.optional() });\nexport const confirmCompatibilitySchema = operationSchema.extend({\n codexEpoch: idSchema,\n codexVersion: z.string().min(1).max(200),\n verifiedVersion: z.string().min(1).max(200),\n confirm: z.literal(true),\n});\nexport const createThreadSchema = operationSchema.extend({ settings: settingsSchema.optional() });\nexport const forkThreadSchema = createThreadSchema;\nexport const renameThreadSchema = operationSchema.extend({\n name: z\n .string()\n .superRefine((name, context) => {\n const message = threadNameError(name);\n if (message) context.addIssue({ code: 'custom', message });\n })\n .transform((name) => name.trim()),\n});\nexport const resumeThreadSchema = createThreadSchema.extend({\n confirmExternalStopped: z.boolean().optional(),\n});\nconst taskFields = {\n text: z.string().max(100_000),\n images: z\n .array(z.string().refine((value) => imageDataBytes(value) !== undefined, 'Invalid image'))\n .max(MAX_IMAGES)\n .refine(\n (images) =>\n images.reduce((sum, image) => sum + (imageDataBytes(image) ?? Infinity), 0) <=\n MAX_IMAGE_BYTES,\n 'Images exceed size limit',\n )\n .optional(),\n};\nconst hasContent = (input: TaskMessage) => Boolean(input.text.trim() || input.images?.length);\nexport const startTurnSchema = createThreadSchema\n .extend({\n ...taskFields,\n taskKind: z.literal('init').optional(),\n })\n .refine(hasContent, 'Text or an image is required')\n .refine(\n (input) => input.taskKind !== 'init' || !input.images?.length,\n 'Project initialization cannot include images',\n );\nexport const steerSchema = operationSchema\n .extend({\n expectedTurnId: idSchema,\n ...taskFields,\n })\n .refine(hasContent, 'Text or an image is required');\nexport const goalMutationSchema = z.discriminatedUnion('action', [\n operationSchema.extend({\n action: z.literal('clear'),\n confirm: z.literal(true),\n expectedVersion: z.string().regex(/^[a-f0-9]{64}$/),\n }),\n operationSchema\n .extend({\n action: z.literal('set'),\n confirm: z.literal(true),\n expectedVersion: z.string().regex(/^[a-f0-9]{64}$/),\n objective: z.string().trim().min(1).max(10000).optional(),\n status: z.enum(['active', 'paused', 'complete']).optional(),\n tokenBudget: z.number().int().positive().max(1000000000).optional(),\n })\n .refine(\n (value) =>\n value.objective !== undefined ||\n value.status !== undefined ||\n value.tokenBudget !== undefined,\n 'Goal update is empty',\n ),\n]);\nexport const recapSchema = operationSchema.extend({\n language: z.enum(['en', 'zh-Hans', 'ja', 'ko']),\n});\nexport const approveDenialSchema = operationSchema.extend({\n denialId: idSchema,\n confirm: z.literal(true),\n});\nexport const interruptSchema = operationSchema.extend({ expectedTurnId: idSchema });\nexport const retryTurnSchema = createThreadSchema.extend({ expectedTurnId: idSchema });\nconst elicitationValueSchema = z.union([\n z.string().max(10_000),\n z.number().finite(),\n z.boolean(),\n z.array(z.string().max(10_000)).max(500),\n]);\nexport const resolveActionSchema = operationSchema.extend({\n resolution: z.union([\n z\n .object({\n decision: z.string().min(1).max(200),\n content: z.record(z.string().max(1000), elicitationValueSchema).optional(),\n persist: z.literal('session').optional(),\n })\n .strict(),\n z.object({ answers: z.record(z.string(), z.array(z.string().max(10_000)).max(50)) }).strict(),\n ]),\n});\nexport const reconcileSchema = operationSchema.extend({ confirmEnded: z.literal(true) });\nexport const subscribeSchema = z\n .object({\n type: z.literal('subscribe'),\n threadId: idSchema,\n after: z\n .object({ serverEpoch: idSchema, seq: z.number().int().nonnegative() })\n .strict()\n .optional(),\n })\n .strict();\nexport const socketMessageSchema = z.discriminatedUnion('type', [\n subscribeSchema,\n z.object({ type: z.literal('unsubscribe') }).strict(),\n]);\n\nexport const archiveThreadSchema = operationSchema.extend({ archived: z.boolean() });\nexport const archivedQuerySchema = z\n .enum(['true', 'false'])\n .optional()\n .transform((value) => value === 'true');\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod';\nimport { imageDataBytes, MAX_IMAGE_BYTES, MAX_IMAGES } from './images.js';\nimport type { TaskMessage } from './types.js';\nimport { threadNameError } from './thread-name.js';\nexport const cursorSchema = z.string().min(1).max(4096);\nexport const idSchema = z.string().min(1).max(256);\nconst projectNameSchema = z.string().trim().min(1).max(100);\nexport const createProjectSchema = z\n .object({ path: z.string().trim().min(1).max(4096), name: projectNameSchema.optional() })\n .strict();\nexport const renameProjectSchema = z.object({ name: projectNameSchema }).strict();\nexport const cloneProjectSchema = createProjectSchema.extend({\n clientOperationId: z.string().uuid(),\n repository: z.string().trim().min(1).max(4096),\n});\nexport const removeProjectSchema = z.object({}).strict();\nexport const reorderProjectsSchema = z\n .object({ projectIds: z.array(idSchema).refine((ids) => new Set(ids).size === ids.length) })\n .strict();\nexport const settingsSchema = z\n .object({\n model: z.string().min(1).max(200).optional(),\n collaborationMode: z.enum(['plan', 'default']).optional(),\n reasoningEffort: z.string().min(1).max(40).optional(),\n serviceTier: z.literal('fast').nullable().optional(),\n permissionMode: z.enum(['ask', 'auto-review', 'full-access', 'read-only']).optional(),\n approvalPolicy: z.enum(['untrusted', 'on-request', 'never']).optional(),\n approvalReviewer: z.enum(['user', 'auto_review']).optional(),\n sandbox: z.enum(['read-only', 'workspace-write', 'danger-full-access']).optional(),\n })\n .strict()\n .refine(\n (settings) =>\n settings.permissionMode === undefined ||\n (settings.sandbox === undefined &&\n settings.approvalPolicy === undefined &&\n settings.approvalReviewer === undefined),\n '\u6743\u9650\u6A21\u5F0F\u4E0D\u80FD\u4E0E\u72EC\u7ACB\u7684\u6743\u9650\u3001\u5BA1\u6279\u7B56\u7565\u6216\u5BA1\u6838\u65B9\u540C\u65F6\u8BBE\u7F6E',\n );\nexport const operationSchema = z.object({ clientOperationId: z.string().uuid() }).strict();\nexport const saveModelDefaultsSchema = operationSchema.extend({\n settings: z\n .object({\n model: z.string().min(1).max(200),\n reasoningEffort: z.string().min(1).max(40).nullable(),\n })\n .strict(),\n});\nexport const reviewTargetSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('uncommittedChanges') }).strict(),\n z\n .object({\n type: z.literal('baseBranch'),\n branch: z\n .string()\n .trim()\n .min(1)\n .max(256)\n .refine(\n (branch) =>\n !branch.startsWith('-') &&\n !/\\s/.test(branch) &&\n [...branch].every((char) => char.codePointAt(0)! >= 32 && char.codePointAt(0) !== 127),\n ),\n })\n .strict(),\n z\n .object({\n type: z.literal('commit'),\n sha: z\n .string()\n .trim()\n .regex(/^[a-fA-F0-9]{7,64}$/),\n })\n .strict(),\n z\n .object({ type: z.literal('custom'), instructions: z.string().trim().min(1).max(100_000) })\n .strict(),\n]);\nexport const startReviewSchema = operationSchema.extend({ target: reviewTargetSchema.optional() });\nexport const confirmCompatibilitySchema = operationSchema.extend({\n codexEpoch: idSchema,\n codexVersion: z.string().min(1).max(200),\n verifiedVersion: z.string().min(1).max(200),\n confirm: z.literal(true),\n});\nexport const createThreadSchema = operationSchema.extend({ settings: settingsSchema.optional() });\nexport const forkThreadSchema = createThreadSchema;\nexport const renameThreadSchema = operationSchema.extend({\n name: z\n .string()\n .superRefine((name, context) => {\n const message = threadNameError(name);\n if (message) context.addIssue({ code: 'custom', message });\n })\n .transform((name) => name.trim()),\n});\nexport const resumeThreadSchema = createThreadSchema.extend({\n confirmExternalStopped: z.boolean().optional(),\n});\nconst taskFields = {\n text: z.string().max(100_000),\n images: z\n .array(z.string().refine((value) => imageDataBytes(value) !== undefined, 'Invalid image'))\n .max(MAX_IMAGES)\n .refine(\n (images) =>\n images.reduce((sum, image) => sum + (imageDataBytes(image) ?? Infinity), 0) <=\n MAX_IMAGE_BYTES,\n 'Images exceed size limit',\n )\n .optional(),\n};\nconst hasContent = (input: TaskMessage) => Boolean(input.text.trim() || input.images?.length);\nexport const startTurnSchema = createThreadSchema\n .extend({\n ...taskFields,\n taskKind: z.literal('init').optional(),\n })\n .refine(hasContent, 'Text or an image is required')\n .refine(\n (input) => input.taskKind !== 'init' || !input.images?.length,\n 'Project initialization cannot include images',\n );\nexport const steerSchema = operationSchema\n .extend({\n expectedTurnId: idSchema,\n ...taskFields,\n })\n .refine(hasContent, 'Text or an image is required');\nexport const goalMutationSchema = z.discriminatedUnion('action', [\n operationSchema.extend({\n action: z.literal('clear'),\n confirm: z.literal(true),\n expectedVersion: z.string().regex(/^[a-f0-9]{64}$/),\n }),\n operationSchema\n .extend({\n action: z.literal('set'),\n confirm: z.literal(true),\n expectedVersion: z.string().regex(/^[a-f0-9]{64}$/),\n objective: z.string().trim().min(1).max(10000).optional(),\n status: z.enum(['active', 'paused', 'complete']).optional(),\n tokenBudget: z.number().int().positive().max(1000000000).optional(),\n })\n .refine(\n (value) =>\n value.objective !== undefined ||\n value.status !== undefined ||\n value.tokenBudget !== undefined,\n 'Goal update is empty',\n ),\n]);\nexport const recapSchema = operationSchema.extend({\n language: z.enum(['en', 'zh-Hans', 'ja', 'ko']),\n});\nexport const approveDenialSchema = operationSchema.extend({\n denialId: idSchema,\n confirm: z.literal(true),\n});\nexport const interruptSchema = operationSchema.extend({ expectedTurnId: idSchema });\nexport const retryTurnSchema = createThreadSchema.extend({ expectedTurnId: idSchema });\nconst elicitationValueSchema = z.union([\n z.string().max(10_000),\n z.number().finite(),\n z.boolean(),\n z.array(z.string().max(10_000)).max(500),\n]);\nexport const resolveActionSchema = operationSchema.extend({\n resolution: z.union([\n z\n .object({\n decision: z.string().min(1).max(200),\n content: z.record(z.string().max(1000), elicitationValueSchema).optional(),\n persist: z.literal('session').optional(),\n })\n .strict(),\n z.object({ answers: z.record(z.string(), z.array(z.string().max(10_000)).max(50)) }).strict(),\n ]),\n});\nexport const reconcileSchema = operationSchema.extend({ confirmEnded: z.literal(true) });\nexport const subscribeSchema = z\n .object({\n type: z.literal('subscribe'),\n threadId: idSchema,\n incremental: z.boolean().optional(),\n after: z\n .object({ serverEpoch: idSchema, seq: z.number().int().nonnegative() })\n .strict()\n .optional(),\n })\n .strict();\nexport const socketMessageSchema = z.discriminatedUnion('type', [\n subscribeSchema,\n z.object({ type: z.literal('unsubscribe') }).strict(),\n]);\n\nexport const archiveThreadSchema = operationSchema.extend({ archived: z.boolean() });\nexport const archivedQuerySchema = z\n .enum(['true', 'false'])\n .optional()\n .transform((value) => value === 'true');\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/web/assets/{abnfDiagram-WEYOIA3C-12kbP4fE.js → abnfDiagram-WEYOIA3C-DPrSyxx5.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e,t}from"./mermaid-parser.core-
|
|
1
|
+
import{m as e,t}from"./mermaid-parser.core-DwFqVvpp.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-CAqT2rVv.js";import"./chunk-DSNLSHJZ-C0LQPoI8.js";import{n as i,r as a,t as o}from"./chunk-2E7WHVMD-DsUWsTrf.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-DcF8gYr_.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,t}from"./path-fybaL0A-.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-
|
|
1
|
+
import{n as e,t}from"./path-fybaL0A-.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-7U4_LxsV.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i){if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
|
package/dist/web/assets/{architecture-WOLXFQ4H-DLpj2b3w.js → architecture-WOLXFQ4H-DzDNYcvm.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-NGNAAXSQ-C2Wy9Xmz.js";export{M as createArchitectureServices}from"./mermaid-parser.core-
|
|
1
|
+
import"./chunk-NGNAAXSQ-C2Wy9Xmz.js";export{M as createArchitectureServices}from"./mermaid-parser.core-DwFqVvpp.js";
|