termdock 1.3.0 → 1.4.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.
Files changed (86) hide show
  1. package/dist/client/assets/{abnfDiagram-VRR7QNED-DboLYKjC.js → abnfDiagram-VRR7QNED-G_YxqZwv.js} +1 -1
  2. package/dist/client/assets/{arc-C7cI3SGK.js → arc-BuvKiJCC.js} +1 -1
  3. package/dist/client/assets/{architectureDiagram-ZJ3FMSHR-DupwL8qH.js → architectureDiagram-ZJ3FMSHR-BvkwEVZw.js} +1 -1
  4. package/dist/client/assets/{blockDiagram-677ZJIJ3-DNM7fUPm.js → blockDiagram-677ZJIJ3-C3bxox0Z.js} +1 -1
  5. package/dist/client/assets/{c4Diagram-LMCZKHZV-Jaxf-YGr.js → c4Diagram-LMCZKHZV-DLORcr8m.js} +1 -1
  6. package/dist/client/assets/channel-BnGIwxUi.js +1 -0
  7. package/dist/client/assets/{chunk-2Q5K7J3B-CjqqaH_Z.js → chunk-2Q5K7J3B-Dnqi-8g0.js} +1 -1
  8. package/dist/client/assets/{chunk-32BRIVSS-BYtt3b30.js → chunk-32BRIVSS-D70B4HxL.js} +1 -1
  9. package/dist/client/assets/{chunk-5VM5RSS4-C68y4tT7.js → chunk-5VM5RSS4-Cl7t39aR.js} +1 -1
  10. package/dist/client/assets/{chunk-EX3LRPZG-BpJMVcVA.js → chunk-EX3LRPZG-DKMD4DfE.js} +1 -1
  11. package/dist/client/assets/{chunk-JWPE2WC7-BaYNrMI4.js → chunk-JWPE2WC7-CsN_pMOw.js} +1 -1
  12. package/dist/client/assets/{chunk-MOJQB5TN-y5QTOrLI.js → chunk-MOJQB5TN-D8BHaQpE.js} +1 -1
  13. package/dist/client/assets/{chunk-RYQCIY6F-DiHf2o1T.js → chunk-RYQCIY6F-B8BtUiHF.js} +1 -1
  14. package/dist/client/assets/{chunk-V7JOEXUC-9j4f9aIn.js → chunk-V7JOEXUC-CdN7tlvn.js} +1 -1
  15. package/dist/client/assets/{chunk-VR4S4FIN-CdbelzcZ.js → chunk-VR4S4FIN-UPjL_wl4.js} +1 -1
  16. package/dist/client/assets/{chunk-XXDRQBXY-YAjZkdyb.js → chunk-XXDRQBXY--eX5Na_l.js} +1 -1
  17. package/dist/client/assets/classDiagram-OUVF2IWQ-DMigd9mj.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-EOCWNBFH-DMigd9mj.js +1 -0
  19. package/dist/client/assets/{cose-bilkent-JH36ORCC-lTBDAWfs.js → cose-bilkent-JH36ORCC-CEAcZx3N.js} +1 -1
  20. package/dist/client/assets/{cynefin-VYW2F7L2-Dl7ev6m4.js → cynefin-VYW2F7L2-up8zIMDo.js} +1 -1
  21. package/dist/client/assets/{cynefinDiagram-TSTJHNR4-CSxz6O5q.js → cynefinDiagram-TSTJHNR4-DZ2SQpCq.js} +1 -1
  22. package/dist/client/assets/{dagre-VKFMJZFB-zWgEHxrl.js → dagre-VKFMJZFB-DOoLtq9O.js} +1 -1
  23. package/dist/client/assets/{diagram-FQU43EPY-BQeiowzD.js → diagram-FQU43EPY-x8umATxt.js} +1 -1
  24. package/dist/client/assets/{diagram-G47NLZAW-DJezXuHM.js → diagram-G47NLZAW-Kle7Toxb.js} +1 -1
  25. package/dist/client/assets/{diagram-NH7WQ7WH-D1d1WkdQ.js → diagram-NH7WQ7WH-CezkkMqP.js} +1 -1
  26. package/dist/client/assets/{diagram-OA4YK3LP-C2ZpnAsd.js → diagram-OA4YK3LP-CaU0u6UQ.js} +1 -1
  27. package/dist/client/assets/{diagram-WEI45ONY-DH9kmAm9.js → diagram-WEI45ONY-B4m53TVj.js} +1 -1
  28. package/dist/client/assets/{ebnfDiagram-CCIWWBDH-CjnajZxN.js → ebnfDiagram-CCIWWBDH-Dpwjo8_v.js} +1 -1
  29. package/dist/client/assets/{erDiagram-Q63AITRT-CzmBQFbx.js → erDiagram-Q63AITRT-BU4R1QVk.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-23GEKE2U-ljeoJhTo.js → flowDiagram-23GEKE2U-BFtDsA0k.js} +1 -1
  31. package/dist/client/assets/{ganttDiagram-NO4QXBWP-DF3m0dot.js → ganttDiagram-NO4QXBWP-DtSEfub5.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-IHSO6WYX-BwB7r571.js → gitGraphDiagram-IHSO6WYX-BGukYlT3.js} +1 -1
  33. package/dist/client/assets/index-CP3_puZd.js +395 -0
  34. package/dist/client/assets/index-CxBkmASY.css +1 -0
  35. package/dist/client/assets/{infoDiagram-FWYZ7A6U-Cv9S0ijK.js → infoDiagram-FWYZ7A6U-Bx1NQNsL.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-FXEZZL3T-DRecz33b.js → ishikawaDiagram-FXEZZL3T-DHlxYJjl.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-5HDEW3XC-BLRRylnR.js → journeyDiagram-5HDEW3XC-BOZzlR6d.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-HUTT4EX6-BC1ph5cw.js → kanban-definition-HUTT4EX6-C2nWuUXX.js} +1 -1
  39. package/dist/client/assets/{linear-C2zeZj0z.js → linear-DtblW0g4.js} +1 -1
  40. package/dist/client/assets/{mermaid.core-BqDN_zP4.js → mermaid.core-BKSuG721.js} +4 -4
  41. package/dist/client/assets/{mindmap-definition-LN4V7U3C-BpDX-24D.js → mindmap-definition-LN4V7U3C-Co3LLQGt.js} +1 -1
  42. package/dist/client/assets/{pegDiagram-2B236MQR-Sn0Dke6L.js → pegDiagram-2B236MQR-DSUG1nB1.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-ENE6RG2P-DzMhYGWJ.js → pieDiagram-ENE6RG2P-DvEr0UPf.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-ABIIQ3AL-CuQoPglS.js → quadrantDiagram-ABIIQ3AL-C2diLBZ8.js} +1 -1
  45. package/dist/client/assets/{railroadDiagram-RFXS5EU6-C4hKErDp.js → railroadDiagram-RFXS5EU6-CqYZHCvf.js} +1 -1
  46. package/dist/client/assets/{requirementDiagram-TGXJPOKE-CE5J97_g.js → requirementDiagram-TGXJPOKE-CFAKdPQp.js} +1 -1
  47. package/dist/client/assets/{sankeyDiagram-HTMAVEWB-BDyhQ6qz.js → sankeyDiagram-HTMAVEWB-DV95NA9H.js} +1 -1
  48. package/dist/client/assets/{sequenceDiagram-DBY2YBRQ-CW-oi8so.js → sequenceDiagram-DBY2YBRQ-cbv0xzG-.js} +1 -1
  49. package/dist/client/assets/{sizeCapture-X5ZJPWSS-mMoYKQSz.js → sizeCapture-X5ZJPWSS-DpkzYB1F.js} +1 -1
  50. package/dist/client/assets/{stateDiagram-2N3HPSRC-BUd0G8S2.js → stateDiagram-2N3HPSRC-BnAwPP0V.js} +1 -1
  51. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-DtPm_oHq.js +1 -0
  52. package/dist/client/assets/{swimlanes-5IMT3BWC-B8hw4xPM.js → swimlanes-5IMT3BWC-kObRIKfj.js} +2 -2
  53. package/dist/client/assets/swimlanesDiagram-G3AALYLV-yeb4EUGj.js +8 -0
  54. package/dist/client/assets/{timeline-definition-FHXFAJF6-DykkYG1G.js → timeline-definition-FHXFAJF6-BbnAJ8pO.js} +1 -1
  55. package/dist/client/assets/{vennDiagram-L72KCM5P-BBkpVj6b.js → vennDiagram-L72KCM5P-sIu_hWKx.js} +1 -1
  56. package/dist/client/assets/{wardleyDiagram-EHGQE667-ClqSnTks.js → wardleyDiagram-EHGQE667-DpGdJtdb.js} +1 -1
  57. package/dist/client/assets/{xychartDiagram-FW5EYKEG-Ba_5tcTW.js → xychartDiagram-FW5EYKEG-C5F9faN2.js} +1 -1
  58. package/dist/client/icons/agents/amp.svg +12 -0
  59. package/dist/client/icons/agents/claude.svg +10 -0
  60. package/dist/client/icons/agents/codex.svg +10 -0
  61. package/dist/client/icons/agents/copilot.svg +12 -0
  62. package/dist/client/icons/agents/cursor.svg +3 -0
  63. package/dist/client/icons/agents/droid.svg +10 -0
  64. package/dist/client/icons/agents/gemini.svg +5 -0
  65. package/dist/client/icons/agents/goose.svg +10 -0
  66. package/dist/client/icons/agents/grok.svg +5 -0
  67. package/dist/client/icons/agents/opencode.svg +3 -0
  68. package/dist/client/index.html +2 -2
  69. package/dist/client/sw.js +1 -1
  70. package/dist/server/agent/installers.js +551 -0
  71. package/dist/server/agent/registry.js +244 -0
  72. package/dist/server/agent/session.js +162 -0
  73. package/dist/server/agentHook.js +174 -0
  74. package/dist/server/ptyHost.js +261 -0
  75. package/dist/server/ptyhost/manager.js +396 -0
  76. package/dist/server/ptyhost/protocol.js +80 -0
  77. package/dist/server/routes/terminal.js +829 -395
  78. package/dist/server/utils/gitStatus.js +114 -0
  79. package/package.json +1 -1
  80. package/dist/client/assets/channel-D1achAhM.js +0 -1
  81. package/dist/client/assets/classDiagram-OUVF2IWQ-BiqbrzEM.js +0 -1
  82. package/dist/client/assets/classDiagram-v2-EOCWNBFH-BiqbrzEM.js +0 -1
  83. package/dist/client/assets/index-QtbZAkiJ.css +0 -1
  84. package/dist/client/assets/index-odB6evg3.js +0 -394
  85. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-XLkUpRKa.js +0 -1
  86. package/dist/client/assets/swimlanesDiagram-G3AALYLV-CA2gJRr9.js +0 -8
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Framed wire protocol between the termdock server and the pty-host daemon
3
+ * over a Unix-domain socket. (架构移植自 tty7 daemon/protocol.rs,Apache-2.0)
4
+ *
5
+ * Frame layout: `[1B type][4B BE length][payload]`.
6
+ * Per-channel payloads (DATA/INPUT/REPLAY) start with `[1B idLen][id utf8]`.
7
+ * CONTROL payloads are a single JSON document.
8
+ *
9
+ * The host owns the PTYs and a bounded per-channel replay ring, and counts
10
+ * output in *chars* (both sides count JS string length, so multibyte text
11
+ * never desyncs the offset). Attach carries `since`; the host replays only
12
+ * newer output, then live data.
13
+ */
14
+ export const PTY_HOST_PROTOCOL_VERSION = 1;
15
+ export const FRAME_DATA = 0x01; // host → server: live PTY output
16
+ export const FRAME_INPUT = 0x02; // server → host: client keystrokes
17
+ export const FRAME_CONTROL = 0x03; // both ways: JSON control message
18
+ export const FRAME_REPLAY = 0x04; // host → server: historical ring output
19
+ const HEADER_LEN = 5;
20
+ const MAX_FRAME = 4 * 1024 * 1024;
21
+ export function encodeDataFrame(type, id, data) {
22
+ const idBuf = Buffer.from(id, 'utf8');
23
+ if (idBuf.length > 255)
24
+ throw new Error('channel id too long');
25
+ const dataBuf = Buffer.from(data, 'utf8');
26
+ const frame = Buffer.allocUnsafe(HEADER_LEN + 1 + idBuf.length + dataBuf.length);
27
+ frame.writeUInt8(type, 0);
28
+ frame.writeUInt32BE(1 + idBuf.length + dataBuf.length, 1);
29
+ frame.writeUInt8(idBuf.length, HEADER_LEN);
30
+ idBuf.copy(frame, HEADER_LEN + 1);
31
+ dataBuf.copy(frame, HEADER_LEN + 1 + idBuf.length);
32
+ return frame;
33
+ }
34
+ export function encodeControl(msg) {
35
+ const json = Buffer.from(JSON.stringify(msg), 'utf8');
36
+ const frame = Buffer.allocUnsafe(HEADER_LEN + json.length);
37
+ frame.writeUInt8(FRAME_CONTROL, 0);
38
+ frame.writeUInt32BE(json.length, 1);
39
+ json.copy(frame, HEADER_LEN);
40
+ return frame;
41
+ }
42
+ /** Incremental frame decoder: feed chunks, drain complete frames. */
43
+ export class FrameDecoder {
44
+ buf = Buffer.alloc(0);
45
+ feed(chunk) {
46
+ this.buf = this.buf.length === 0 ? chunk : Buffer.concat([this.buf, chunk]);
47
+ const out = [];
48
+ for (;;) {
49
+ if (this.buf.length < HEADER_LEN)
50
+ break;
51
+ const type = this.buf.readUInt8(0);
52
+ const len = this.buf.readUInt32BE(1);
53
+ if (len > MAX_FRAME) {
54
+ // Desync guard: drop everything, let the connection reset.
55
+ this.buf = Buffer.alloc(0);
56
+ break;
57
+ }
58
+ if (this.buf.length < HEADER_LEN + len)
59
+ break;
60
+ const payload = this.buf.subarray(HEADER_LEN, HEADER_LEN + len);
61
+ this.buf = this.buf.subarray(HEADER_LEN + len);
62
+ if (type === FRAME_CONTROL) {
63
+ try {
64
+ out.push({ type, id: null, data: null, control: JSON.parse(payload.toString('utf8')) });
65
+ }
66
+ catch { /* malformed control frame: skip */ }
67
+ continue;
68
+ }
69
+ if (type === FRAME_DATA || type === FRAME_INPUT || type === FRAME_REPLAY) {
70
+ const idLen = payload.readUInt8(0);
71
+ const id = payload.subarray(1, 1 + idLen).toString('utf8');
72
+ const data = payload.subarray(1 + idLen).toString('utf8');
73
+ out.push({ type, id, data, control: null });
74
+ continue;
75
+ }
76
+ // Unknown frame type: skip payload (forward compatibility).
77
+ }
78
+ return out;
79
+ }
80
+ }