@prismshadow/penguin-server 0.2.15 → 0.2.17

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 (124) hide show
  1. package/README.md +1 -1
  2. package/dist/api/types.d.ts +318 -86
  3. package/dist/api/types.js +9 -3
  4. package/dist/auth-token.d.ts +1 -1
  5. package/dist/auth-token.js +2 -2
  6. package/dist/{chunk-HMTT2PX4.js → chunk-2LZDP26O.js} +8 -5
  7. package/dist/chunk-2LZDP26O.js.map +1 -0
  8. package/dist/{chunk-LPPVGHYD.js → chunk-BL4U7GYY.js} +2 -2
  9. package/dist/chunk-BL4U7GYY.js.map +1 -0
  10. package/dist/{chunk-5Z4UCHDB.js → chunk-D3JNA6ZI.js} +69 -6
  11. package/dist/chunk-D3JNA6ZI.js.map +1 -0
  12. package/dist/{chunk-TOOTEEM4.js → chunk-G7GY7PJU.js} +1 -1
  13. package/dist/chunk-G7GY7PJU.js.map +1 -0
  14. package/dist/chunk-GGIINEEK.js +3401 -0
  15. package/dist/chunk-GGIINEEK.js.map +1 -0
  16. package/dist/chunk-HDBZRVA5.js +29 -0
  17. package/dist/chunk-HDBZRVA5.js.map +1 -0
  18. package/dist/{chunk-NVWAYYRX.js → chunk-HPOHMZCH.js} +686 -531
  19. package/dist/chunk-HPOHMZCH.js.map +1 -0
  20. package/dist/{chunk-QFV3ERQO.js → chunk-OQZDL3TR.js} +2 -2
  21. package/dist/hmr/manifest.js +1 -1
  22. package/dist/index.js +9351 -5551
  23. package/dist/index.js.map +1 -1
  24. package/dist/machine-status.js +2 -2
  25. package/dist/model-catalog.d.ts +610 -0
  26. package/dist/model-catalog.js +108 -0
  27. package/dist/model-catalog.js.map +1 -0
  28. package/dist/plugin/index.d.ts +141 -78
  29. package/dist/reset-admin-password.js +3 -4
  30. package/dist/reset-admin-password.js.map +1 -1
  31. package/dist/version-report.js +2 -2
  32. package/package.json +15 -14
  33. package/web-dist/assets/{abnfDiagram-VCTEODGH-CKWh4hoA.js → abnfDiagram-VCTEODGH-DMzkb4l4.js} +1 -1
  34. package/web-dist/assets/{addon-clipboard-DxLqat7q.js → addon-clipboard-BtD2BVSi.js} +1 -1
  35. package/web-dist/assets/{addon-fit-B8oPGPkW.js → addon-fit-Dr6HWsi_.js} +1 -1
  36. package/web-dist/assets/{addon-web-links-C0W5TcK0.js → addon-web-links-VEE3YLzQ.js} +1 -1
  37. package/web-dist/assets/{arc-Dp9EkaAH.js → arc-CvMPOU_B.js} +1 -1
  38. package/web-dist/assets/{architectureDiagram-5GKGNRK7-BQ3LUcle.js → architectureDiagram-5GKGNRK7-Bk65mIBz.js} +1 -1
  39. package/web-dist/assets/{blockDiagram-I7D4REHJ-CZzyU0Jj.js → blockDiagram-I7D4REHJ-D54-XSNs.js} +1 -1
  40. package/web-dist/assets/{c4Diagram-7LVT6UL2-Qps3jeAu.js → c4Diagram-7LVT6UL2-Dm954LSt.js} +1 -1
  41. package/web-dist/assets/channel-CVHI75kz.js +1 -0
  42. package/web-dist/assets/{chunk-2Q5K7J3B-CQMntzuX.js → chunk-2Q5K7J3B-D_LJ_7Cn.js} +1 -1
  43. package/web-dist/assets/{chunk-5VM5RSS4-2H2ZJAte.js → chunk-5VM5RSS4-B8RI4tl3.js} +1 -1
  44. package/web-dist/assets/{chunk-F27PBJKO-B30xCNBv.js → chunk-F27PBJKO-aVSYH9JV.js} +1 -1
  45. package/web-dist/assets/{chunk-IMKFNOWR-Cyfx4zDs.js → chunk-IMKFNOWR-DnkdWeq2.js} +1 -1
  46. package/web-dist/assets/{chunk-JWPE2WC7-DADUytTh.js → chunk-JWPE2WC7-C2pJzKuW.js} +1 -1
  47. package/web-dist/assets/{chunk-POPQ4Y6H-9bjsAxLS.js → chunk-POPQ4Y6H-Bx7Iikzx.js} +1 -1
  48. package/web-dist/assets/{chunk-SVP7TREG-B9xO1VpN.js → chunk-SVP7TREG-qJC2SMqr.js} +1 -1
  49. package/web-dist/assets/{chunk-TICWLB2K-B6oDkrep.js → chunk-TICWLB2K-Crl_BgKI.js} +1 -1
  50. package/web-dist/assets/{chunk-XXDRQBXY-BbU8DR4B.js → chunk-XXDRQBXY-BFFemuGm.js} +1 -1
  51. package/web-dist/assets/classDiagram-ZZMXUADV-CBdzAPFu.js +1 -0
  52. package/web-dist/assets/classDiagram-v2-VYDZK3BY-CBdzAPFu.js +1 -0
  53. package/web-dist/assets/{cose-bilkent-JH36ORCC-pkbuyec-.js → cose-bilkent-JH36ORCC-Bmh2Kx7h.js} +1 -1
  54. package/web-dist/assets/{cynefin-OW5HDTMX-DU9YQQnc.js → cynefin-OW5HDTMX-BveNWnUV.js} +1 -1
  55. package/web-dist/assets/{cynefinDiagram-5FMLGOSQ-3a3XuhQq.js → cynefinDiagram-5FMLGOSQ-85itazbJ.js} +1 -1
  56. package/web-dist/assets/{dagre-GXQ25YYZ-BfZ9C5CZ.js → dagre-GXQ25YYZ-DIZT-KY_.js} +1 -1
  57. package/web-dist/assets/{diagram-S7CK7UJ4-BoGhVBMn.js → diagram-S7CK7UJ4-Dum-g63f.js} +1 -1
  58. package/web-dist/assets/{diagram-UQ7AKVKN-zE67quty.js → diagram-UQ7AKVKN-DallMKJl.js} +1 -1
  59. package/web-dist/assets/{diagram-VSXAHHWV-NihoXeXm.js → diagram-VSXAHHWV-DWELqxfN.js} +1 -1
  60. package/web-dist/assets/{diagram-VX7I27RA-1627np0S.js → diagram-VX7I27RA-BNs0gB9E.js} +1 -1
  61. package/web-dist/assets/{diagram-Z3DM3KII-Ddg_bUan.js → diagram-Z3DM3KII-C9mF9xAd.js} +1 -1
  62. package/web-dist/assets/{ebnfDiagram-PWID7BFC-CmPUOM4j.js → ebnfDiagram-PWID7BFC-D_Diy9HH.js} +1 -1
  63. package/web-dist/assets/{erDiagram-RLTQ6QDP-DiTnEK72.js → erDiagram-RLTQ6QDP-4QTS5VIh.js} +1 -1
  64. package/web-dist/assets/{flowDiagram-HODETNUW-mGQ38tRM.js → flowDiagram-HODETNUW-CliTRrtV.js} +1 -1
  65. package/web-dist/assets/{ganttDiagram-EL5Y4UJY-DU7MlzpW.js → ganttDiagram-EL5Y4UJY-DCRd-Ss4.js} +1 -1
  66. package/web-dist/assets/{gitGraphDiagram-WWUBYQGX-CRE_3vjl.js → gitGraphDiagram-WWUBYQGX-CTz13GjS.js} +1 -1
  67. package/web-dist/assets/highlighter-BScH1Ud3.js +2 -0
  68. package/web-dist/assets/{highlighter-core-B5CvXcEK.js → highlighter-core-DKz8Z6-I.js} +1 -1
  69. package/web-dist/assets/{highlighter.worker-D6D9fPma.js → highlighter.worker-CKF6ok1g.js} +1 -1
  70. package/web-dist/assets/index-BUvJ5Ctt.js +1299 -0
  71. package/web-dist/assets/index-DRj7nvPY.css +1 -0
  72. package/web-dist/assets/{infoDiagram-27XIBGKW-Cdo6Ar-a.js → infoDiagram-27XIBGKW-DNfTEPAV.js} +1 -1
  73. package/web-dist/assets/{ishikawaDiagram-5VMMS53U-C27pgect.js → ishikawaDiagram-5VMMS53U-B7aCjjG1.js} +1 -1
  74. package/web-dist/assets/{journeyDiagram-3NMN7TZE-CVxtKpLG.js → journeyDiagram-3NMN7TZE-COmDALVr.js} +1 -1
  75. package/web-dist/assets/{kanban-definition-UXKFOSKX-DWA31Da7.js → kanban-definition-UXKFOSKX-BzUfPINh.js} +1 -1
  76. package/web-dist/assets/{layout-DWKCU9PO.js → layout-BwzuPU4M.js} +1 -1
  77. package/web-dist/assets/{linear-BwCthj_k.js → linear-WPZTYjz3.js} +1 -1
  78. package/web-dist/assets/mermaid.core-zKzlwpkw.js +310 -0
  79. package/web-dist/assets/{mindmap-definition-YA3MSWOX-BLEDhbn1.js → mindmap-definition-YA3MSWOX-DCRg7eAx.js} +1 -1
  80. package/web-dist/assets/{pegDiagram-XKGWAZYB-CLEM1SDU.js → pegDiagram-XKGWAZYB-DyphzDLU.js} +1 -1
  81. package/web-dist/assets/{pieDiagram-E7YTZNPT-B__g6eF0.js → pieDiagram-E7YTZNPT-BI5DueGA.js} +1 -1
  82. package/web-dist/assets/powershell-DXrKVo3G.js +1 -0
  83. package/web-dist/assets/powershell-Dpen1YoG.js +1 -0
  84. package/web-dist/assets/{quadrantDiagram-AXDQQJYC-C7VQ2LMY.js → quadrantDiagram-AXDQQJYC-GZxSMY2Z.js} +1 -1
  85. package/web-dist/assets/{railroadDiagram-O6MQD6OU-eWNnzjwS.js → railroadDiagram-O6MQD6OU-DEFCigBf.js} +1 -1
  86. package/web-dist/assets/{requirementDiagram-BXWQKSXE-Bi5qeD4b.js → requirementDiagram-BXWQKSXE-Br0thc4j.js} +1 -1
  87. package/web-dist/assets/{sankeyDiagram-P5KCCOFB-DG1VOpXX.js → sankeyDiagram-P5KCCOFB-DYf0pY67.js} +1 -1
  88. package/web-dist/assets/{sequenceDiagram-WJ2MYXX4-Fhkw73Th.js → sequenceDiagram-WJ2MYXX4-1EFMboX4.js} +1 -1
  89. package/web-dist/assets/{sizeCapture-INFHLROL-D9E_17SF.js → sizeCapture-INFHLROL-BuOFv-5q.js} +1 -1
  90. package/web-dist/assets/{stateDiagram-D77RDMKH-Cs5Y0xhW.js → stateDiagram-D77RDMKH-Bg3H1tjX.js} +1 -1
  91. package/web-dist/assets/stateDiagram-v2-MP3YSRHH-DfaDaPAd.js +1 -0
  92. package/web-dist/assets/{swimlanes-42K2YHIH-t-EocvKZ.js → swimlanes-42K2YHIH-BuOa6Osb.js} +1 -1
  93. package/web-dist/assets/swimlanesDiagram-VR7AAH4N-BopAC7b8.js +8 -0
  94. package/web-dist/assets/{timeline-definition-24CTP7MA-CozGCxuA.js → timeline-definition-24CTP7MA-BDekfdDT.js} +1 -1
  95. package/web-dist/assets/{vennDiagram-4TSXK5OY-ewU8ycSa.js → vennDiagram-4TSXK5OY-DnC09UI4.js} +1 -1
  96. package/web-dist/assets/{wardleyDiagram-VM6X3IG4-DuAhDu-0.js → wardleyDiagram-VM6X3IG4-BXKvxuZQ.js} +1 -1
  97. package/web-dist/assets/{xterm-v5e56GC9.js → xterm-oY4DYg5s.js} +1 -1
  98. package/web-dist/assets/{xychartDiagram-S5SC5T6Z-BxGuZO23.js → xychartDiagram-S5SC5T6Z-DdDC1VLb.js} +1 -1
  99. package/web-dist/index.html +12 -6
  100. package/web-dist/{workflow-ui.css → workbench-ui.css} +72 -67
  101. package/dist/benchmark-package.d.ts +0 -39
  102. package/dist/benchmark-package.js +0 -97
  103. package/dist/benchmark-package.js.map +0 -1
  104. package/dist/chunk-54E64LWB.js +0 -63
  105. package/dist/chunk-54E64LWB.js.map +0 -1
  106. package/dist/chunk-5Z4UCHDB.js.map +0 -1
  107. package/dist/chunk-HMTT2PX4.js.map +0 -1
  108. package/dist/chunk-JKJXQTHH.js +0 -19
  109. package/dist/chunk-JKJXQTHH.js.map +0 -1
  110. package/dist/chunk-LPPVGHYD.js.map +0 -1
  111. package/dist/chunk-NVWAYYRX.js.map +0 -1
  112. package/dist/chunk-Q4ON2L6E.js +0 -52
  113. package/dist/chunk-Q4ON2L6E.js.map +0 -1
  114. package/dist/chunk-TOOTEEM4.js.map +0 -1
  115. package/web-dist/assets/channel--PblgLlC.js +0 -1
  116. package/web-dist/assets/classDiagram-ZZMXUADV-mn8tbuqa.js +0 -1
  117. package/web-dist/assets/classDiagram-v2-VYDZK3BY-mn8tbuqa.js +0 -1
  118. package/web-dist/assets/highlighter-CzfXQ6yd.js +0 -2
  119. package/web-dist/assets/index-BdG4qRyI.js +0 -1275
  120. package/web-dist/assets/index-W-xYFoIm.css +0 -1
  121. package/web-dist/assets/mermaid.core-BcTrmPOv.js +0 -310
  122. package/web-dist/assets/stateDiagram-v2-MP3YSRHH-CEM51fAf.js +0 -1
  123. package/web-dist/assets/swimlanesDiagram-VR7AAH4N-BrR66vrK.js +0 -8
  124. /package/dist/{chunk-QFV3ERQO.js.map → chunk-OQZDL3TR.js.map} +0 -0
@@ -1,15 +1,15 @@
1
- import { SessionSource, OmniMessage, ToolCallPayload, CompactionMode } from '@prismshadow/penguin-core/omnimessage';
2
- export { SessionSource } from '@prismshadow/penguin-core/omnimessage';
1
+ import { SessionSource, AmspRecord, ToolCallPayload, CompactionMode } from '@prismshadow/amsp';
2
+ export { SessionSource } from '@prismshadow/amsp';
3
3
  import { ThinkingLevelName, ToolDefinitionConfig, MCPServerConfig } from '@prismshadow/penguin-core/interfaces';
4
4
  import { HarnessHistory, VersionReport } from '@prismshadow/penguin-core';
5
5
  export { HarnessHistoryEntry, IfacesSummary } from '@prismshadow/penguin-core';
6
6
  import { IfacesDiff } from '@prismshadow/penguin-hmr';
7
7
  export { IfaceChange, IfacesDiff, MemberChange, ModuleChange } from '@prismshadow/penguin-hmr';
8
8
 
9
- /** A request the workflow's handler receives (the HTTP shape, minus the transport). */
10
- interface WorkflowRequest {
9
+ /** A request the workbench's handler receives (the HTTP shape, minus the transport). */
10
+ interface WorkbenchRequest {
11
11
  method: string;
12
- /** Path below the workflow's `api/` mount, always starting with `/`. */
12
+ /** Path below the workbench's `api/` mount, always starting with `/`. */
13
13
  path: string;
14
14
  query: Record<string, string>;
15
15
  /** Request headers, names lower-cased. The app's own credentials (`cookie`, `authorization`) are withheld. */
@@ -19,12 +19,12 @@ interface WorkflowRequest {
19
19
  /** The body as sent, when there is one and it is not JSON: a form, an upload, plain text. */
20
20
  bytes?: Uint8Array;
21
21
  }
22
- interface WorkflowResponse {
22
+ interface WorkbenchResponse {
23
23
  /** HTTP status; 200 when absent. */
24
24
  status?: number;
25
25
  /**
26
26
  * Response headers. Naming a `content-type` is what makes the response something other than
27
- * JSON; `location` with a 3xx status redirects. `set-cookie` is dropped — a workflow does not
27
+ * JSON; `location` with a 3xx status redirects. `set-cookie` is dropped — a workbench does not
28
28
  * write the app's cookies.
29
29
  */
30
30
  headers?: Record<string, string>;
@@ -42,8 +42,8 @@ interface WorkflowResponse {
42
42
  */
43
43
  stream?: AsyncIterable<Uint8Array | string>;
44
44
  }
45
- /** How the Web App draws a contributed tab: a page of the workflow, or a renderer it carries. */
46
- type WorkflowTabRenderer = {
45
+ /** How the Web App draws a contributed tab: a page of the workbench, or a renderer it carries. */
46
+ type WorkbenchTabRenderer = {
47
47
  iframe: {
48
48
  src: string;
49
49
  };
@@ -51,28 +51,28 @@ type WorkflowTabRenderer = {
51
51
  builtin: string;
52
52
  };
53
53
  /**
54
- * One tab beside Chat, as the workflow contributed it (`WebModule.sessionTabs`). In a
55
- * manifest `renderer.iframe.src` is a path inside the workflow folder, under `ui/`; in a
56
- * `WorkflowInfo` it is the URL that file is served from.
54
+ * One tab beside Chat, as the workbench contributed it (`WebModule.sessionTabs`). In a
55
+ * manifest `renderer.iframe.src` is a path inside the workbench folder, under `ui/`; in a
56
+ * `WorkbenchInfo` it is the URL that file is served from.
57
57
  */
58
- interface WorkflowTab {
58
+ interface WorkbenchTab {
59
59
  id: string;
60
- /** Unique within the workflow; the tab's stable name (it appears in the full-page URL). */
60
+ /** Unique within the workbench; the tab's stable name (it appears in the full-page URL). */
61
61
  key: string;
62
62
  title: string;
63
63
  titleZh?: string;
64
- renderer: WorkflowTabRenderer;
64
+ renderer: WorkbenchTabRenderer;
65
65
  }
66
- interface WorkflowInfo {
66
+ interface WorkbenchInfo {
67
67
  id: string;
68
68
  name: string;
69
69
  version: string | null;
70
70
  /** Content revision of the whole folder (what history records). */
71
71
  revision: string;
72
- /** Content revision of `ui/`: the cache key of the workflow's pages. Null when it has no `ui/`. */
72
+ /** Content revision of `ui/`: the cache key of the workbench's pages. Null when it has no `ui/`. */
73
73
  uiRev: string | null;
74
74
  /** The tabs of the instance that is SERVING — the previous one's while `error` is set. */
75
- tabs: WorkflowTab[];
75
+ tabs: WorkbenchTab[];
76
76
  loadedAt: string;
77
77
  /** The boot error when the current files do not load (the previous instance, if any, keeps serving). */
78
78
  error: string | null;
@@ -82,7 +82,7 @@ interface WorkflowInfo {
82
82
  */
83
83
  hints: string[];
84
84
  }
85
- interface WorkflowVersion {
85
+ interface WorkbenchVersion {
86
86
  revision: string;
87
87
  savedAt: string;
88
88
  name: string;
@@ -97,11 +97,11 @@ interface WorkflowVersion {
97
97
  * frontend SPA (single source of truth).
98
98
  *
99
99
  * These field definitions are authoritative for the Web API contract. Conventions:
100
- * - DTO fields use camelCase; OmniMessage keeps the core protocol as-is (snake_case shell),
100
+ * - DTO fields use camelCase; an AMSP record keeps its own shape as-is (snake_case envelope),
101
101
  * no conversion;
102
102
  * - This file holds only types, no implementation; exposed to the frontend via package
103
103
  * exports `"./api"` for type-only import;
104
- * - Types are taken only from core's pure subpaths (omnimessage / interfaces), so the
104
+ * - Types are taken only from `@prismshadow/amsp` and core's pure `interfaces` subpath, so the
105
105
  * frontend can safely reference them.
106
106
  *
107
107
  * Docs: packages/docs/content/server-api.{zh,en}.md (site path /docs/server-api) is the
@@ -204,8 +204,9 @@ interface MeResponse {
204
204
  * "desktop" is the shell's own window (one-shot token); "setup" was claimed through the
205
205
  * first-login link on a server whose admin password has never been set. Both may set a
206
206
  * password without the old one (it is random and was never shown); only "desktop" opens
207
- * desktop-only routes. "token" marks a request authenticated by the local API token's
208
- * Bearer header (the CLI and agent-driven calls) — no stored session at all.
207
+ * desktop-only routes. "token" marks the local API token's authority, carried by a Bearer
208
+ * header or an exchanged Remote cookie; neither can perform writes requiring a person's
209
+ * sign-in.
209
210
  */
210
211
  sessionVia: "password" | "desktop" | "setup" | "token";
211
212
  /**
@@ -454,6 +455,13 @@ interface UiPrefs {
454
455
  * shallow, so this whole map is one field.
455
456
  */
456
457
  todoDismissed?: Record<string, Record<string, string>>;
458
+ /**
459
+ * Notices the user closed, by notice id (a machine's model keys only this server's environment
460
+ * holds: `machine-env-only:<machine id>`), each the SIGNATURE of what it named when closed — its
461
+ * items sorted, one per line — so it comes back when a new item appears (web's
462
+ * `lib/notice-dismissals.ts`). Replaced whole on every write, like `todoDismissed`.
463
+ */
464
+ noticesDismissed?: Record<string, string>;
457
465
  /**
458
466
  * The draft screen's user-defined shortcuts, in display order. Replaced whole on every write
459
467
  * (the merge is shallow, so the array is one field like any other) and bounded on write by
@@ -576,7 +584,11 @@ interface ModelEffectiveConnection {
576
584
  baseUrlSource: ConnectionSourceDto;
577
585
  clientType?: string;
578
586
  clientTypeSource: ConnectionSourceDto;
579
- /** `env` = no row or group key, and the environment lends one on the effective endpoint (modelEnvFallback). */
587
+ /**
588
+ * `env` = no key in the file, and MMSP's routed client reads its own variable for the row's
589
+ * endpoint (no base URL, or the client's default endpoint) — reported when that variable
590
+ * holds a value here (`envKeyMasked`), `none` otherwise.
591
+ */
580
592
  apiKeySource: "model" | "provider" | "env" | "none";
581
593
  /** Mask of the key the row would use, whichever source; absent when none. */
582
594
  apiKeyMasked?: string;
@@ -630,21 +642,18 @@ interface ModelInfo {
630
642
  discount?: number;
631
643
  /**
632
644
  * Environment variable name the entry falls back to when api_key is empty (e.g.
633
- * ANTHROPIC_API_KEY); unset when it gets no fallback — an id nothing routes, or an entry
634
- * whose base URL is not the vendor's own official endpoint (a gateway preset, a custom /
635
- * vLLM / user-created row with its own endpoint, a vendor row re-pointed at a proxy).
645
+ * ANTHROPIC_API_KEY): only for a row with no key in the file whose routed MMSP client reads
646
+ * that variable for its endpoint — no base URL on the row or its group, or the client's own
647
+ * default endpoint. Unset for a row with a key (its own or a group key that reaches it), a row
648
+ * sent to any other base URL (a gateway, Penguin Go, ModelScope, a vendor's second host or a
649
+ * proxy), or an id nothing routes.
636
650
  */
637
651
  envKey?: string;
638
652
  /**
639
653
  * Masked preview (same rule as `credential.apiKeyMasked`) of the value the server process
640
- * currently holds for `envKey` — the plaintext is never serialized. Reported only where the
641
- * fallback may be presented as covering the entry (core's modelEnvPreviewKey): a row whose
642
- * effective base URL is a vendor endpoint (or the Penguin Go relay), or a row with no base URL
643
- * in a built-in group other than custom, on the client its id's family names. Gateway rows
644
- * never carry it, and neither do custom / vLLM / user-defined rows with no base URL,
645
- * although those do fall back. Absent = the variable is unset or empty, or the entry is not
646
- * previewable. Computed on the effective shape, and only when no row or group key reaches
647
- * the row.
654
+ * currently holds for `envKey` — the plaintext is never serialized. Absent = the variable is
655
+ * unset or empty, or the entry gets no fallback. Reported only when no row or group key
656
+ * reaches the row.
648
657
  */
649
658
  envKeyMasked?: string;
650
659
  /** The row's OWN key (masked) and base URL — overrides of its group's; see `effective`. */
@@ -744,10 +753,11 @@ interface ModelsUpdateRequest {
744
753
  * `POST /models/sync-presets` (owner): `add` adds the catalog's presets the Project lacks
745
754
  * (retired rows never), as a new Project stores them, writes the catalog's
746
755
  * `[providers.<id>]` table for a group that has neither rows nor a table yet, and seeds the
747
- * added rows' promotions, touching nothing else; `restore` puts every built-in row and
748
- * built-in group table back to the catalog (facts reset, base URLs and protocols set on models
749
- * or groups return to the catalog's, keys and the user's own rows and groups kept, promotions
750
- * reset, deleted presets added back).
756
+ * added rows' promotions, touching nothing else; `restore` makes the model configuration a new
757
+ * Project's and keeps only the API keys: the presets in catalog order, the catalog's group
758
+ * tables, default model and promotions, no vision model, and every other row and every
759
+ * user-defined group deleted. Penguin Go included: its platform's next sync brings back the
760
+ * platform's own models and promotions.
751
761
  */
752
762
  type PresetSyncMode = "add" | "restore";
753
763
  interface PresetSyncRequest {
@@ -756,7 +766,7 @@ interface PresetSyncRequest {
756
766
  interface PresetSyncResponse extends ModelsResponse {
757
767
  /** Preset rows added (both modes). */
758
768
  added: number;
759
- /** Built-in rows reset to the catalog (`restore`; 0 for `add`). */
769
+ /** Preset rows the Project already had that `restore` changed (0 for `add`). */
760
770
  restored: number;
761
771
  }
762
772
  /**
@@ -949,17 +959,17 @@ interface ModelBalanceAmount {
949
959
  /**
950
960
  * Why a group's balance could not be read:
951
961
  * - `unsupported`: the group publishes no balance endpoint (no `balance` descriptor in the catalog);
952
- * - `no_key`: the group has no API key to ask with — none stored, and no environment variable
953
- * the credential rule lends its rows for the balance endpoint's host;
962
+ * - `no_key`: the group has no API key to ask with — none stored, and no vendor variable that
963
+ * MMSP's vendor client reads for the group's base URL;
954
964
  * - `upstream_failed`: the vendor could not be reached in time, refused the request, or answered
955
965
  * without a readable balance.
956
966
  */
957
967
  type ModelBalanceErrorCode = "unsupported" | "no_key" | "upstream_failed";
958
968
  /**
959
969
  * GET /api/projects/:p/models/balance?provider=<group>[&force=1] (Project member): the account
960
- * balance behind the group's API key — the stored one, or else the environment key its rows
961
- * fall back to under the credential rule (DeepSeek's DEEPSEEK_API_KEY) — read server-side from
962
- * the endpoint the catalog's `balance` descriptor names. The key never reaches the browser, and
970
+ * balance behind the group's API key — the stored one, or else the environment key MMSP's
971
+ * vendor client reads for the group's base URL (DeepSeek's DEEPSEEK_API_KEY) — read server-side
972
+ * from the endpoint the catalog's `balance` descriptor names. The key never reaches the browser, and
963
973
  * neither does the vendor's own text. Like the connectivity test, a balance that cannot be read is an answer
964
974
  * (`ok: false` with a code), not a failed request. Readings and vendor failures are cached for
965
975
  * 60 s per Project and group, for as long as the group's key is the same; `force=1` skips the
@@ -990,7 +1000,8 @@ interface ModelBalanceFailure {
990
1000
  /**
991
1001
  * How the authorization code travels back. `callback` sends the browser to a harness URL
992
1002
  * the provider redirects to; `manual` asks the provider for a one-time code the user copies
993
- * back by hand, for the case where that redirect cannot reach the harness.
1003
+ * back by hand, for the case where that redirect cannot reach the harness — or where the
1004
+ * provider would refuse it: only an HTTPS or loopback HTTP origin can be redirected to.
994
1005
  */
995
1006
  type ModelOAuthMode = "callback" | "manual";
996
1007
  /**
@@ -1001,13 +1012,19 @@ type ModelOAuthMode = "callback" | "manual";
1001
1012
  interface ModelOAuthStartRequest {
1002
1013
  /** Provider group id (must be a catalog group that publishes a key-minting flow). */
1003
1014
  provider: string;
1004
- /** Defaults to `callback`. */
1015
+ /** Defaults to `callback`; the response says which mode the flow was opened in. */
1005
1016
  mode?: ModelOAuthMode;
1006
1017
  }
1007
1018
  /** The opaque flow handle plus the page to send the user to. No secret of the flow's is included. */
1008
1019
  interface ModelOAuthStartResponse {
1009
1020
  flowId: string;
1010
1021
  authorizeUrl: string;
1022
+ /**
1023
+ * The mode the flow was opened in: `manual` for a `callback` request when the origin the
1024
+ * request reached this server on is neither HTTPS nor loopback HTTP, which the provider's
1025
+ * authorization page refuses as a callback.
1026
+ */
1027
+ mode: ModelOAuthMode;
1011
1028
  }
1012
1029
  /** Why a flow failed, as a code the frontend phrases; never carries a code, a verifier or a key. */
1013
1030
  type ModelOAuthErrorCode = "invalid_request" | "code_rejected" | "upstream_failed" | "unreachable" | "apply_failed";
@@ -1176,8 +1193,10 @@ interface AgentSummary {
1176
1193
  kernelOutdated: boolean;
1177
1194
  /** Vault key count (number of keys in agent_state/.vault.toml). */
1178
1195
  vaultKeyCount: number;
1179
- /** Schedule count (number of .toml files under agent_state/schedule/, including invalid ones). */
1196
+ /** Schedule count (number of .toml files directly under agent_state/schedule/, including invalid ones; archived files under schedule/expired/ are not counted). */
1180
1197
  scheduleCount: number;
1198
+ /** Workbench folders with a manifest, including ones with a load error. */
1199
+ workbenchCount: number;
1181
1200
  /** Installed Skill count (number of agent_state/skills/<name>/ directories with a SKILL.md). */
1182
1201
  skillCount: number;
1183
1202
  /** Installed hook-package count (number of agent_state/hooks/<name>/ directories with a hooks.json). */
@@ -1438,6 +1457,14 @@ interface AgentApiSettings {
1438
1457
  * change here applies to API Sessions created afterwards.
1439
1458
  */
1440
1459
  approvalMode: ApprovalMode;
1460
+ /** Null follows the Project's default model. Applied only to new API Sessions. */
1461
+ model: ModelRefDto | null;
1462
+ /** Null follows the Agent/Project thinking configuration. */
1463
+ thinkingLevel: ThinkingLevelName | null;
1464
+ /** Null creates a temporary Workspace for each new API Session. */
1465
+ workspace: string | null;
1466
+ /** Positive integer. Checked for each API run; defaults to four concurrent Agent sessions. */
1467
+ maxConcurrentRuns: number;
1441
1468
  keys: AgentApiKeyInfo[];
1442
1469
  }
1443
1470
  interface AgentApiResponse {
@@ -1453,6 +1480,10 @@ interface AgentApiUpdateRequest {
1453
1480
  enabled?: boolean;
1454
1481
  open?: boolean;
1455
1482
  approvalMode?: ApprovalMode;
1483
+ model?: ModelRefDto | null;
1484
+ thinkingLevel?: ThinkingLevelName | null;
1485
+ workspace?: string | null;
1486
+ maxConcurrentRuns?: number;
1456
1487
  }
1457
1488
  /** POST …/api/keys body (owner only). */
1458
1489
  interface AgentApiKeyCreateRequest {
@@ -1702,7 +1733,7 @@ interface SessionInfo {
1702
1733
  * What kind of conversation this is, read from core session_meta — the single source of
1703
1734
  * truth (the DB stores no source). With the user's marks it decides where the Session is
1704
1735
  * listed (`archived`): a `user` Session is in the sidebar until archived; an `api`,
1705
- * `schedule` or `cli` Session is archived until the user keeps it, and in the sidebar marked
1736
+ * `schedule`, `cli` or `workbench` Session is archived until the user keeps it, and in the sidebar marked
1706
1737
  * with its source once kept; a `subagent` or `company` Session is in no list — its parent's
1707
1738
  * Agent panel and company mode's own views open them. A Trace head that records no source
1708
1739
  * (written before it was required) reads as `company` for a row the organization runtime
@@ -1737,7 +1768,7 @@ interface SessionInfo {
1737
1768
  hasTrace: boolean;
1738
1769
  /**
1739
1770
  * Whether the Session is archived — the listing rule's answer, never the bare mark: the user
1740
- * archived it, or a program opened it (source `api`, `schedule` or `cli`) and the user has
1771
+ * archived it, or a program opened it (source `api`, `schedule`, `cli` or `workbench`) and the user has
1741
1772
  * not kept it. An archived Session is left out of the sidebar and listed on the archive page
1742
1773
  * (`/api/me/archived-sessions`). Always false for a `subagent` or `company` Session, which is
1743
1774
  * in no list.
@@ -1772,7 +1803,7 @@ interface SessionInfo {
1772
1803
  * the organization and is not read while company mode is off — this is a durable stamp on
1773
1804
  * the row: development mode's list hides an "org" Session either way.
1774
1805
  */
1775
- client?: "web" | "cli" | "org" | "api";
1806
+ client?: "web" | "cli" | "org" | "api" | "workbench";
1776
1807
  /**
1777
1808
  * Background work the Session's loaded runtime still owns: command sessions running past
1778
1809
  * their yield window (`exec_command` promotions and `run_in_background` launches) and
@@ -1793,7 +1824,7 @@ interface SessionBackgroundTasks {
1793
1824
  }
1794
1825
  /**
1795
1826
  * Session list category, the listing rule applied server-side: `archived` when the user
1796
- * archived the Session, or when a program opened it (source `api`, `schedule` or `cli`) and the
1827
+ * archived the Session, or when a program opened it (source `api`, `schedule`, `cli` or `workbench`) and the
1797
1828
  * user has not kept it — unarchiving keeps it; otherwise `active`. A `subagent` or `company`
1798
1829
  * Session belongs to neither, whatever its marks: the list leaves it out of every category and
1799
1830
  * every total (a parent's Agent panel and company mode's own views open them).
@@ -1858,7 +1889,7 @@ interface SessionsResponse {
1858
1889
  * `user`, or a row whose Trace has not been read yet); the other three are what a program
1859
1890
  * opened. `subagent` and `company` Sessions are never archived, so never listed.
1860
1891
  */
1861
- type ArchivedSessionSource = "user" | "api" | "schedule" | "cli";
1892
+ type ArchivedSessionSource = "user" | "api" | "schedule" | "cli" | "workbench";
1862
1893
  /** Query of GET /api/me/archived-sessions/groups, and the part every archive query shares. */
1863
1894
  interface ArchivedSessionsQuery {
1864
1895
  /** Case-insensitive substring of the title (the DB title, else the Trace's first-prompt title); at most 200 characters. */
@@ -1867,7 +1898,7 @@ interface ArchivedSessionsQuery {
1867
1898
  /** One Project the user can open (404 `project_not_found` otherwise); absent = every Project they own or are a member of. */
1868
1899
  projectId?: string;
1869
1900
  }
1870
- /** One group of the archive page: one Workspace of one Project. */
1901
+ /** One group of the archive page: one Workspace of one Project, on this server or on one machine. */
1871
1902
  interface ArchivedSessionGroup {
1872
1903
  projectId: string;
1873
1904
  projectName: string;
@@ -1877,6 +1908,12 @@ interface ArchivedSessionGroup {
1877
1908
  count: number;
1878
1909
  /** The newest `lastActiveAt` in the group — the order the groups come in, newest first. */
1879
1910
  latest: string;
1911
+ /** The machine the group's Sessions live on (its own id); absent on this server's groups. */
1912
+ machineId?: string;
1913
+ /** That machine's ssh alias, for the group's header. */
1914
+ machineAlias?: string;
1915
+ /** That machine's own time when it counted the group: a batch on the whole group passes it as `until`. */
1916
+ asOf?: string;
1880
1917
  }
1881
1918
  /** GET /api/me/archived-sessions/groups. */
1882
1919
  interface ArchivedSessionGroupsResponse {
@@ -1888,6 +1925,11 @@ interface ArchivedSessionGroupsResponse {
1888
1925
  * filter's `until`, so it acts on the Sessions the count saw and on none that came after.
1889
1926
  */
1890
1927
  asOf: string;
1928
+ /** Machines the user's Projects use whose archive could not be read (not connected, or no answer). */
1929
+ unreachable?: Array<{
1930
+ machineId: string;
1931
+ alias: string;
1932
+ }>;
1891
1933
  }
1892
1934
  /** Query of GET /api/me/archived-sessions: one group's page, newest activity first. */
1893
1935
  interface ArchivedSessionsRowsQuery extends ArchivedSessionsQuery {
@@ -1898,6 +1940,8 @@ interface ArchivedSessionsRowsQuery extends ArchivedSessionsQuery {
1898
1940
  limit: number;
1899
1941
  /** `<lastActiveAt>,<sessionId>` of the last row held, as the Session list's cursor. */
1900
1942
  before?: string;
1943
+ /** The group's machine (`ArchivedSessionGroup.machineId`): the page is read from it. */
1944
+ machineId?: string;
1901
1945
  }
1902
1946
  /** GET /api/me/archived-sessions. */
1903
1947
  interface ArchivedSessionsResponse {
@@ -1905,11 +1949,16 @@ interface ArchivedSessionsResponse {
1905
1949
  sessions: SessionInfo[];
1906
1950
  hasMore: boolean;
1907
1951
  }
1908
- /** What an archive-page batch acts on: explicit ids (1–500), or every archived row a filter matches. */
1909
- type ArchivedSessionsBatch = {
1952
+ /**
1953
+ * What an archive-page batch acts on: explicit ids (1–500), or every archived row a filter
1954
+ * matches — on this server, or with `machineId` on that machine (the filter then names its Project).
1955
+ */
1956
+ type ArchivedSessionsBatch = ({
1910
1957
  sessionIds: string[];
1911
1958
  } | {
1912
1959
  filter: ArchivedSessionsBatchFilter;
1960
+ }) & {
1961
+ machineId?: string;
1913
1962
  };
1914
1963
  /** A batch's filter: the archive query, one group's Workspace, and the snapshot it was counted at. */
1915
1964
  interface ArchivedSessionsBatchFilter extends ArchivedSessionsQuery {
@@ -2087,7 +2136,7 @@ interface TracePosition {
2087
2136
  ordinal: number;
2088
2137
  }
2089
2138
  /** History-only transport metadata; `tracePosition` is never persisted into Trace JSONL. */
2090
- type HistoryMessage = OmniMessage & {
2139
+ type HistoryMessage = AmspRecord & {
2091
2140
  tracePosition?: TracePosition;
2092
2141
  };
2093
2142
  interface SessionForkRequest {
@@ -2133,7 +2182,7 @@ interface SessionPatchRequest {
2133
2182
  * - `cursor`: the Session channel's most recently assigned SSE event id
2134
2183
  * (`<epoch>-<seq>`); every event published up to and including this id is already
2135
2184
  * reflected in `fragments`.
2136
- * - `fragments`: one synthetic `partial_* start` OmniMessage per open streaming
2185
+ * - `fragments`: one synthetic `partial_* start` AmspRecord per open streaming
2137
2186
  * fragment, whose payload carries the full accumulated content so far (text/thinking
2138
2187
  * prefix, tool-call name + accumulated arguments, tool-output prefix + images), with
2139
2188
  * the original `origin` chain preserved.
@@ -2148,7 +2197,7 @@ interface SessionPatchRequest {
2148
2197
  */
2149
2198
  interface MessagesLiveTail {
2150
2199
  cursor: string;
2151
- fragments: OmniMessage[];
2200
+ fragments: AmspRecord[];
2152
2201
  }
2153
2202
  /**
2154
2203
  * Pagination envelope of a windowed `GET /messages` (`tailLimit` / `before` requests
@@ -2202,6 +2251,11 @@ interface MessagesPageInfo {
2202
2251
  * window is told from a plain rotation. Absent when the Session has no Trace yet.
2203
2252
  */
2204
2253
  contextModel?: ModelRefDto;
2254
+ /**
2255
+ * Agent State directory recorded by the starting context's `session_meta`. Seeds memory
2256
+ * change detection when that record falls before the window. Absent without a Trace.
2257
+ */
2258
+ agentState?: string;
2205
2259
  }
2206
2260
  /** Message history: the full messages and events from concatenating all of this Session's Trace files in order (excludes partial_*). */
2207
2261
  interface MessagesResponse {
@@ -2973,6 +3027,50 @@ interface WeChatScanVerifyRequest {
2973
3027
  interface MessagingTestMessageResponse {
2974
3028
  ok: true;
2975
3029
  }
3030
+ /**
3031
+ * One bot account a server has enabled: the channel and its account id (Feishu `app_id`,
3032
+ * Telegram bot id, QQ App ID, WeChat bot id), which is public by design. Never a Session,
3033
+ * never a secret.
3034
+ */
3035
+ interface MessagingAccount {
3036
+ channel: MessagingChannel;
3037
+ accountId: string;
3038
+ }
3039
+ /**
3040
+ * GET /api/messaging/accounts (admin only) — every bot account this server has enabled,
3041
+ * across all its Projects. A server that connects machines asks each of them this when a
3042
+ * bot is about to be turned on, so that one account is enabled on one server at a time.
3043
+ */
3044
+ interface MessagingAccountsResponse {
3045
+ accounts: MessagingAccount[];
3046
+ }
3047
+ /** A server that has the asked-about bot enabled: a machine by id and alias, or this server (both null). */
3048
+ interface MessagingAccountHolder {
3049
+ machineId: string | null;
3050
+ alias: string | null;
3051
+ }
3052
+ /**
3053
+ * Why a machine could not be asked: no connection to it, a build without the accounts
3054
+ * route (it answered 404), or any other failed answer.
3055
+ */
3056
+ type MessagingUnreachableReason = "not_connected" | "older_build" | "failed";
3057
+ /** A machine of the Project that could not be asked whether it holds the bot. */
3058
+ interface MessagingUnreachableMachine {
3059
+ machineId: string;
3060
+ alias: string;
3061
+ reason: MessagingUnreachableReason;
3062
+ }
3063
+ /**
3064
+ * GET /api/projects/:projectId/messaging/account-holders?channel=&accountId= — which servers
3065
+ * have this bot enabled: this server, and each machine the Project uses that could be asked.
3066
+ * Machines that could not be asked are listed apart; the caller decides what to do about
3067
+ * them. Never names a Session. A caller who is not an admin is answered for this server
3068
+ * only, because machines are admins' (both lists then hold no machine).
3069
+ */
3070
+ interface MessagingAccountHoldersResponse {
3071
+ holders: MessagingAccountHolder[];
3072
+ unreachable: MessagingUnreachableMachine[];
3073
+ }
2976
3074
  /** Docs: /docs/server-api § "Streaming (SSE)". */
2977
3075
  type ServerEvent =
2978
3076
  /**
@@ -2981,7 +3079,7 @@ type ServerEvent =
2981
3079
  */
2982
3080
  {
2983
3081
  type: "approval_request";
2984
- toolCall: OmniMessage<ToolCallPayload>;
3082
+ toolCall: AmspRecord<ToolCallPayload>;
2985
3083
  origin?: string[];
2986
3084
  }
2987
3085
  /** Session run status flip (for toggling the input area and list); `queued` = queued follow-up count (see TaskCreateRequest.queueIfBusy). */
@@ -3089,6 +3187,17 @@ type ServerEvent =
3089
3187
  | {
3090
3188
  type: "hello";
3091
3189
  }
3190
+ /**
3191
+ * The stream's own beat, written by the endpoint's SSE writer every 20 seconds (http/sse.ts)
3192
+ * on `/api/events`, and by the hub on a machine's aggregate stream. The socket's ping and the
3193
+ * `: ping` comment line are invisible to a stream's consumer, so without this a stream that
3194
+ * stopped while its socket stayed healthy would look alive forever: the hub
3195
+ * (machines/event-hub.ts) and the browser (web api/socket.ts) each end a stream that misses
3196
+ * two beats and re-issue it with its last event id.
3197
+ */
3198
+ | {
3199
+ type: "heartbeat";
3200
+ }
3092
3201
  /** The served web assets were hot-swapped by a platform upgrade: clients reload to pick them up. */
3093
3202
  | {
3094
3203
  type: "web_updated";
@@ -3129,7 +3238,7 @@ type ServerEvent =
3129
3238
  projectId: string;
3130
3239
  } | ScheduleServerEvent | GoalServerEvent | CompanyServerEvent | BuiltinBrowserServerEvent | MachineServerEvent;
3131
3240
  /**
3132
- * The machines' two events on the user channel, published to admins only — the Machines page,
3241
+ * The machines' events on the user channel, published to admins only — the Machines page,
3133
3242
  * and the `/server/<id>` proxy everything else about a machine goes through, are admin-only.
3134
3243
  */
3135
3244
  type MachineServerEvent =
@@ -3144,11 +3253,13 @@ type MachineServerEvent =
3144
3253
  type: "machines_changed";
3145
3254
  }
3146
3255
  /**
3147
- * One of a connected machine's own user-channel events, relayed by this server from that
3148
- * machine's `GET /api/events` (machines/event-relay.ts). The page holds one event stream to
3149
- * this server whatever the number of machines: a stream per machine made five connected
3150
- * machines take the browser's whole HTTP/1.1 allowance of six connections to one origin, and
3151
- * every other request of the page then waited behind them for good.
3256
+ * One of a connected machine's own user-channel events, tagged with the machine it came
3257
+ * from. They ride the machines aggregate (event-hub.ts, `GET …/machines/events`) — ONE
3258
+ * stream for every connected machine, whose per-machine frames have this same shape; the
3259
+ * page that re-publishes them on its own channel wraps them this way too. One stream, not
3260
+ * a stream per machine: five of those once took the browser's whole HTTP/1.1 allowance of
3261
+ * six connections to one origin, and every other request of the page then waited behind
3262
+ * them for good.
3152
3263
  */
3153
3264
  | {
3154
3265
  type: "machine_event";
@@ -3198,19 +3309,19 @@ type ScheduleServerEvent =
3198
3309
  name: string;
3199
3310
  sessionId: string;
3200
3311
  }
3201
- /** A workflow of the Agent was (re)loaded — its folder changed, a reload was requested, or a version was restored. */
3312
+ /** A workbench of the Agent was (re)loaded — its folder changed, a reload was requested, or a version was restored. */
3202
3313
  | {
3203
- type: "workflow_updated";
3314
+ type: "workbench_updated";
3204
3315
  projectId: string;
3205
3316
  agentId: string;
3206
- workflow: WorkflowInfo;
3317
+ workbench: WorkbenchInfo;
3207
3318
  }
3208
- /** A workflow's folder is gone — removed from the Web App or deleted on disk. */
3319
+ /** A workbench's folder is gone — removed from the Web App or deleted on disk. */
3209
3320
  | {
3210
- type: "workflow_removed";
3321
+ type: "workbench_removed";
3211
3322
  projectId: string;
3212
3323
  agentId: string;
3213
- workflowId: string;
3324
+ workbenchId: string;
3214
3325
  };
3215
3326
  interface TraceFileInfo {
3216
3327
  /** Trace file index (one file corresponds to one complete model context). */
@@ -3290,7 +3401,7 @@ interface SessionContextResponse extends SessionContextParts {
3290
3401
  compactionThreshold: number | null;
3291
3402
  }
3292
3403
  interface TraceEventsResponse {
3293
- events: OmniMessage[];
3404
+ events: AmspRecord[];
3294
3405
  offset: number;
3295
3406
  limit: number;
3296
3407
  /**
@@ -3319,6 +3430,11 @@ interface RequestSpan {
3319
3430
  approvalWaitMs?: number;
3320
3431
  /** LLM generation duration = durationMs − approvalWaitMs (≥ 0): only this can be used as the TPS denominator, not durationMs. */
3321
3432
  activeMs?: number;
3433
+ /**
3434
+ * The thinking level this request went out at, as its `request_begin` records it. Absent
3435
+ * when no level was sent, and on Traces written before the field — unknown, not a level.
3436
+ */
3437
+ thinkingLevel?: string;
3322
3438
  }
3323
3439
  /**
3324
3440
  * Per-Task Token / duration figures (aggregated server-side over the **entire** Trace file,
@@ -3348,6 +3464,14 @@ interface TraceTaskStats {
3348
3464
  * mode; treat an absent value as `summarize`, which is what the badge said before the split.
3349
3465
  */
3350
3466
  compactionMode?: CompactionMode;
3467
+ /**
3468
+ * A short label for the round navigator: the first non-empty line of the user text that
3469
+ * started this turn, with harness marker blocks and attachment lines removed, whitespace
3470
+ * collapsed, at most 120 characters (the view truncates it further to fit). Absent when no
3471
+ * user text started the turn — a summarize compaction turn, an image-only send — or none of
3472
+ * its lines is left (only attachment lines).
3473
+ */
3474
+ prompt?: string;
3351
3475
  /**
3352
3476
  * This turn's message index range within the **entire file** (inclusive). A single
3353
3477
  * sequential scan on the server tells which turn each message belongs to; the frontend
@@ -3434,7 +3558,8 @@ interface ToolCallSpan {
3434
3558
  startTs: string;
3435
3559
  endTs?: string;
3436
3560
  durationMs?: number;
3437
- stopReason?: string;
3561
+ /** The paired tool_call_output's `status` (completed / aborted / fatal); absent while the call has no output. */
3562
+ status?: string;
3438
3563
  }
3439
3564
  /** Workspace file entry (Files tab). */
3440
3565
  interface WorkspaceFileEntry {
@@ -3556,7 +3681,8 @@ interface TraceToolSpan {
3556
3681
  approvalTs?: string;
3557
3682
  decision?: string;
3558
3683
  outputTs?: string;
3559
- stopReason?: string;
3684
+ /** The tool_call_output's `status` (completed / aborted / fatal); absent while unclosed. */
3685
+ status?: string;
3560
3686
  /** The Task that initiated this tool (grouped with its tool_call segment): async output belongs to this Task even if it arrives after request_end. */
3561
3687
  taskIndex: number;
3562
3688
  }
@@ -3929,7 +4055,11 @@ interface UsageResponse {
3929
4055
  /** List of Model paired references that have appeared in this Project (for the filter dropdown). */
3930
4056
  models: ModelRefDto[];
3931
4057
  }
3932
- /** Display-facing schedule status: the file's `enabled` only expresses intent; the rest is derived from runtime state. */
4058
+ /**
4059
+ * Display-facing schedule status: the file's `enabled` only expresses intent; the rest is derived from runtime state.
4060
+ * The scheduler archives an agent's settled tasks (done / missed / expired) into `schedule/expired/`, so the agent
4061
+ * listings show those three only while a queued fire is still to be sent or when the move failed.
4062
+ */
3933
4063
  type ScheduleStatus = "active" | "disabled" | "expired" | "done" | "missed" | "invalid";
3934
4064
  interface ScheduleItem {
3935
4065
  /** Filename (without .toml) is the identifier. */
@@ -4206,10 +4336,8 @@ interface BenchmarkArchiveImportRequest {
4206
4336
  */
4207
4337
  overwrite?: boolean;
4208
4338
  /**
4209
- * The repository folder the package was fetched from, at one commit: what
4210
- * `penguin benchmark import --origin-url … --origin-ref … --origin-path …` sends for an Agent's
4211
- * import of a folder link. The copy's origin is then `git` with these fields and the time of the
4212
- * import, instead of `zip`.
4339
+ * The repository folder the package was fetched from, pinned to one commit. The copy's origin
4340
+ * is then `git` with these fields and the import time, instead of `zip`.
4213
4341
  */
4214
4342
  origin?: BenchmarkArchiveGitOrigin;
4215
4343
  }
@@ -4286,6 +4414,10 @@ interface PluginItem {
4286
4414
  repository?: string;
4287
4415
  /** The plugin's skills (metadata only), each with its own dated `version`. */
4288
4416
  skills: SkillMetadataItem[];
4417
+ workbenches?: Array<{
4418
+ name: string;
4419
+ version: string;
4420
+ }>;
4289
4421
  /** The hook points the plugin's hook package answers at (`[]` without one). */
4290
4422
  hooks: string[];
4291
4423
  /** The hook package's own dated version (`penguin.hooks.version`, `YYYY.MM.DD.N`); absent without a hook package. */
@@ -4359,6 +4491,11 @@ interface PluginInstallRequest {
4359
4491
  names: string[];
4360
4492
  }
4361
4493
  interface AgentPluginsInstallResponse {
4494
+ workbenches?: Array<{
4495
+ name: string;
4496
+ plugin: string;
4497
+ version: string;
4498
+ }>;
4362
4499
  skills: SkillMetadataItem[];
4363
4500
  hooks: HookItem[];
4364
4501
  /** The Agent's MCP servers after the install (a plugin's servers join its `tools.mcpServers`). A server name the Agent already has from someone else is 409 `mcp_server_name_taken`, nothing installed. */
@@ -4428,6 +4565,9 @@ interface SkillArchiveInstallRequest {
4428
4565
  interface PluginIndexEntry {
4429
4566
  /** Package specifier — the string a Project's plugin list names. */
4430
4567
  name: string;
4568
+ /** Localized display names; the UI falls back to the package name. */
4569
+ title?: string;
4570
+ titleZh?: string;
4431
4571
  /** Semantic version of this entry. */
4432
4572
  version: string;
4433
4573
  description: string;
@@ -4642,6 +4782,24 @@ interface DesktopTrayCommandMessage {
4642
4782
  showTrayIcon?: boolean;
4643
4783
  locale?: DesktopTrayLocale;
4644
4784
  }
4785
+ /**
4786
+ * The API socket (PRFC-0011): one WebSocket per tab, every frame a call to an existing
4787
+ * endpoint. It has its own upgrade route, {@link API_SOCKET_PATH}: the runtime's websocket
4788
+ * seam authenticates the cookie and the Origin there and hands the socket to the platform,
4789
+ * which serves the protocol as the signed-in user (server: socket/ref.ts). Shared so the Web
4790
+ * App and anything else that speaks to another server spell the address the same way.
4791
+ */
4792
+ declare const API_SOCKET_PATH = "/api/socket";
4793
+ /**
4794
+ * Paths whose answer depends on the KIND of session behind the request — the desktop shell's
4795
+ * own window (`sessionVia === "desktop"`: its update, tray and privacy relays, folder access,
4796
+ * revealing a file) or a first-login link (a password change without the old password). The
4797
+ * socket's handshake does not say how the cookie behind it was minted, so these are made over
4798
+ * HTTP: the socket answers them 421 `not_on_socket` and the Web App never sends them there.
4799
+ */
4800
+ declare function sessionKindPath(pathname: string): boolean;
4801
+ /** The API socket's address. No id is involved: the handshake's cookie names the user. */
4802
+ declare function apiSocketPath(): string;
4645
4803
  /** What the shell's read of one folder came to. */
4646
4804
  interface DesktopFolderAccessResult {
4647
4805
  /** The folder could be read. Always true off macOS, where the shell reads nothing. */
@@ -4732,6 +4890,34 @@ interface RestartResponse {
4732
4890
  restarting: boolean;
4733
4891
  reason?: "no_supervisor";
4734
4892
  }
4893
+ /**
4894
+ * What the API socket this server holds to one machine is doing (machines/machine-sockets.ts) —
4895
+ * the fact behind `MachineInfo.socket`. `since` is the instant the state was entered, so the
4896
+ * Machines page can say how long a machine has been dialling, failing or connected instead of
4897
+ * sending someone to the browser console for it.
4898
+ */
4899
+ interface MachineSocketFact {
4900
+ /**
4901
+ * `connected` once the handshake completed, `dialling` while a dial is outstanding, `refused`
4902
+ * when the machine answered the handshake with a status (a program predating the socket), and
4903
+ * `failed` when the dial did not complete or a socket that was up closed.
4904
+ */
4905
+ state: "connected" | "dialling" | "refused" | "failed";
4906
+ /** When that state was entered (ISO). */
4907
+ since: string;
4908
+ /** The transport's own words where there are any: a refusal's status, a dial's error. */
4909
+ detail?: string;
4910
+ }
4911
+ /**
4912
+ * One machine's event, as the machines aggregate stream carries it
4913
+ * (`GET /api/projects/:projectId/machines/events`): the machine's own `ServerEvent`, with the
4914
+ * machine it came from — one stream carries many machines, and the tag is what keeps their
4915
+ * events apart (docs: /docs/server-api § "One event stream per machine").
4916
+ */
4917
+ interface MachineEvent {
4918
+ machineId: string;
4919
+ event: ServerEvent;
4920
+ }
4735
4921
  /** One `Host` entry of the server's `~/.ssh/config`, as the Machines page lists it. */
4736
4922
  interface MachineInfo {
4737
4923
  /** `ssh:<alias>` — the id the install route is asked for. */
@@ -4817,6 +5003,15 @@ interface MachineInfo {
4817
5003
  * here, one that never got as far as a connection.
4818
5004
  */
4819
5005
  keepConnected?: true;
5006
+ /**
5007
+ * The API socket this server holds to that machine — connected, dialling, refused or failed,
5008
+ * and since when (machines/machine-sockets.ts). Null for `local`, and until a stream has
5009
+ * asked for a socket at all. A fact about one process on THIS side, like `connection` and
5010
+ * for the same reason: it says the socket exists and what it is doing, never that the far
5011
+ * side is answering. The Machines page reads it so a stuck stream does not have to be found
5012
+ * in the browser console.
5013
+ */
5014
+ socket: MachineSocketFact | null;
4820
5015
  /**
4821
5016
  * The machine's API as last seen by this server's proxy — stamped by traffic passing
4822
5017
  * through, never by a probe of its own. `answeredAt` when the last forwarded request got
@@ -4886,6 +5081,12 @@ interface MachineSkippedModel {
4886
5081
  /** The far side's error code (`model_not_addable`, `model_not_routable`). */
4887
5082
  code: string;
4888
5083
  reason: string;
5084
+ /**
5085
+ * The entry is one of this server's built-in models for its group, which the machine refused
5086
+ * as not addable: the machine's build does not list it yet, so updating the machine, then
5087
+ * syncing again, carries it. Absent for any other refusal.
5088
+ */
5089
+ builtInHere?: true;
4889
5090
  }
4890
5091
  /** A model entry that takes `variable` from this server's environment. */
4891
5092
  interface MachineEnvOnly {
@@ -4896,17 +5097,28 @@ interface MachineEnvOnly {
4896
5097
  }
4897
5098
  /**
4898
5099
  * A machine this server keeps connected, while it is being brought back. Attempts back off
4899
- * from 5 s, doubling to a 5-minute cap, so a machine that is down for a day costs a probe every
4900
- * five minutes; after three failures in a row the connection check runs on its own, and its
4901
- * answer is what the page shows as the explanation.
5100
+ * from 5 s, doubling to a 5-minute cap, and stop after `maxAttempts` failures in a row (about a
5101
+ * quarter of an hour) — or after the first, when ssh refused in a way no retry fixes — until a
5102
+ * person asks for a Retry (`POST …/machines/:machineId/reconnect`). After three failures in a
5103
+ * row the connection check runs on its own, and its answer is what the page shows as the
5104
+ * explanation.
4902
5105
  */
4903
5106
  interface MachineReconnect {
4904
- /** When this streak began: the moment the machine was found not connected. */
5107
+ /** When this streak began: the moment the machine was found not connected, or the Retry that began it again. */
4905
5108
  since: string;
4906
5109
  /** Attempts that failed in this streak; 0 while the first is still to run or running. */
4907
5110
  attempts: number;
4908
- /** When the next attempt runs; null while one is running. */
5111
+ /** How many failures in a row end the streak: the page says "attempt n of this". */
5112
+ maxAttempts: number;
5113
+ /** When the next attempt runs; null while one is running, and once the streak stopped. */
4909
5114
  nextAt: string | null;
5115
+ /**
5116
+ * The streak stopped, and nothing runs until a person asks for a Retry, which begins a new
5117
+ * one: `attempts` — `maxAttempts` failed in a row; `ssh` — ssh refused in a way retrying
5118
+ * cannot fix (a host key unknown or changed, an unusable key file, a key refused, a broken
5119
+ * ssh config), said by `sshReason`.
5120
+ */
5121
+ gaveUp?: "attempts" | "ssh";
4910
5122
  /** The last attempt's failure in the far side's words; null before the first one fails. */
4911
5123
  lastError: string | null;
4912
5124
  /** Why ssh refused, when the last failure was ssh's own — for the page to say in its language. */
@@ -5948,6 +6160,11 @@ interface OrgHandbookFile {
5948
6160
  updatedAt: string;
5949
6161
  }
5950
6162
  interface OrgHandbookFilesResponse {
6163
+ /**
6164
+ * The handbook directory's absolute path on this server: the Web App browses it with the Files
6165
+ * panel's own directory-addressed routes, which take the same Project access these do.
6166
+ */
6167
+ dir: string;
5951
6168
  /** The index first, then the other documents by path. */
5952
6169
  files: OrgHandbookFile[];
5953
6170
  }
@@ -6380,6 +6597,10 @@ interface BrowserLinkCapabilities {
6380
6597
  */
6381
6598
  interface BuiltinBrowserTab {
6382
6599
  id: number;
6600
+ /** The built-in tab belongs to this conversation; absent for pages opened outside a conversation. */
6601
+ sessionId?: string;
6602
+ /** Electron storage partition, shared only within this tab's Project. */
6603
+ partition?: string;
6383
6604
  url: string;
6384
6605
  title: string;
6385
6606
  loading: boolean;
@@ -6618,6 +6839,8 @@ interface BuiltinBrowserImportSourcesResponse {
6618
6839
  }
6619
6840
  /** POST /api/builtin-browser/import. */
6620
6841
  interface BuiltinBrowserImportRequest {
6842
+ sessionId?: string;
6843
+ projectId?: string;
6621
6844
  sourceId: string;
6622
6845
  cookies?: boolean;
6623
6846
  history?: boolean;
@@ -6682,6 +6905,7 @@ type BuiltinBrowserServerEvent =
6682
6905
  /** Create a guest for `url`, then POST /tabs/claim with `requestId` once it has a webContents id. */
6683
6906
  | {
6684
6907
  type: "builtin_browser_open";
6908
+ partition?: string;
6685
6909
  requestId: string;
6686
6910
  url: string;
6687
6911
  activate: boolean;
@@ -6690,6 +6914,12 @@ type BuiltinBrowserServerEvent =
6690
6914
  } | {
6691
6915
  type: "builtin_browser_close";
6692
6916
  tabId: number;
6917
+ }
6918
+ /** A draft or healed conversation acquired its permanent id. */
6919
+ | {
6920
+ type: "builtin_browser_session";
6921
+ fromSessionId: string;
6922
+ sessionId: string;
6693
6923
  } | {
6694
6924
  type: "builtin_browser_activity";
6695
6925
  tabId: number;
@@ -6757,11 +6987,13 @@ type DesktopBrowserCommand =
6757
6987
  | {
6758
6988
  op: "set-cookies";
6759
6989
  cookies: DesktopBrowserCookie[];
6990
+ partition?: string;
6760
6991
  }
6761
6992
  /** Reply: `{}`. */
6762
6993
  | {
6763
6994
  op: "clear-data";
6764
6995
  storages: ("cookies" | "cache" | "storage")[];
6996
+ partition?: string;
6765
6997
  }
6766
6998
  /**
6767
6999
  * Reply: `{}`. The tabs whose pages may be throttled while out of sight (Electron's background
@@ -6885,4 +7117,4 @@ interface DesktopBrowserEventMessage {
6885
7117
  event: DesktopBrowserEvent;
6886
7118
  }
6887
7119
 
6888
- export { type AdminPasswordResetRequest, type AdminUserCreateRequest, type AdminUserCreateResponse, type AdminUsersResponse, type AgentApiKeyCreateRequest, type AgentApiKeyCreateResponse, type AgentApiKeyInfo, type AgentApiResponse, type AgentApiSettings, type AgentApiUpdateRequest, type AgentCompactionConfigDto, type AgentConfigDto, type AgentConfigResponse, type AgentConfigUpdateRequest, type AgentCreateRequest, type AgentCreateResponse, type AgentHooksConfigDto, type AgentHooksResponse, type AgentImportRequest, type AgentImportResponse, type AgentKernelUpdateResponse, type AgentMcpServerItem, type AgentMcpServersResponse, type AgentMemoryConfigDto, type AgentModelConfigDto, type AgentPluginsInstallResponse, type AgentSchedulesConfigDto, type AgentSkillsConfigDto, type AgentSkillsResponse, type AgentSummary, type AgentTraceDateGroup, type AgentTraceFileRef, type AgentTraceSessionEntry, type AgentTraceSessionFile, type AgentTraceSessionGroup, type AgentTracesResponse, type AgentVaultConfigDto, type AgentsResponse, type ApprovalDecisionRequest, type ApprovalMode, type ArchivedSessionGroup, type ArchivedSessionGroupsResponse, type ArchivedSessionSource, type ArchivedSessionsBatch, type ArchivedSessionsBatchFilter, type ArchivedSessionsBatchResponse, type ArchivedSessionsQuery, type ArchivedSessionsResponse, type ArchivedSessionsRowsQuery, type AuthLoginRequest, type AuthResponse, type BenchmarkArchiveGitOrigin, type BenchmarkArchiveImportRequest, type BenchmarkArchiveImportResponse, type BenchmarkCaseScore, type BenchmarkCaseSummary, type BenchmarkCasesResponse, type BenchmarkCreateCase, type BenchmarkCreateRequest, type BenchmarkCreateResponse, type BenchmarkEvaluation, type BenchmarkManifestProblem, type BenchmarkOrigin, type BenchmarkOriginKind, type BenchmarkRunScore, type BenchmarkStatus, type BenchmarkSummary, type BenchmarksResponse, type BrowserBackend, type BrowserBackendInfo, type BrowserBackendResponse, type BrowserExtensionCloseCode, type BrowserExtensionPairRequest, type BrowserExtensionPairResponse, type BrowserExtensionPairingResponse, type BrowserExtensionRecord, type BrowserExtensionsResponse, type BrowserHello, type BrowserLinkCapabilities, type BuiltinBrowserAction, type BuiltinBrowserDialog, type BuiltinBrowserExecResult, type BuiltinBrowserHistoryEntry, type BuiltinBrowserHistoryResponse, type BuiltinBrowserImportBrowser, type BuiltinBrowserImportRequest, type BuiltinBrowserImportResult, type BuiltinBrowserImportSource, type BuiltinBrowserImportSourcesResponse, type BuiltinBrowserLoadWarning, type BuiltinBrowserMetrics, type BuiltinBrowserScanResult, type BuiltinBrowserScreenshot, type BuiltinBrowserServerEvent, type BuiltinBrowserSettings, type BuiltinBrowserStatus, type BuiltinBrowserTab, type BuiltinBrowserTabMetrics, type BuiltinBrowserTabsResponse, type BuiltinBrowserUnavailableReason, type CaseMaterial, type ChatDefaultsDto, type CommandPolicyDto, type CommandPolicyRuleDto, type CompanyServerEvent, type ConnectionSourceDto, type ContextFileShare, type ContextToolShare, type ContributionsResponse, type CostParts, type CredentialInfo, type DefaultModelResponse, type DefaultModelUpdateRequest, type DesktopBrowserCommand, type DesktopBrowserCommandMessage, type DesktopBrowserCookie, type DesktopBrowserEvent, type DesktopBrowserEventMessage, type DesktopBrowserReplyMessage, type DesktopFolderAccessMessage, type DesktopFolderAccessResult, type DesktopFolderAccessResultMessage, type DesktopOpenPrivacySettingsMessage, type DesktopPrivacyPane, type DesktopTrayCommandMessage, type DesktopTrayLocale, type DesktopTrayPatch, type DesktopTrayStatus, type DesktopTrayStatusMessage, type DesktopTrayStatusResponse, type DesktopUpdateStatus, type DesktopUpdateStatusResponse, type DesktopUpdaterCommandMessage, type DesktopUpdaterStatusMessage, type DirAccessResponse, type DirEntryInfo, type DirListResponse, type DirLocation, type DirStandardFolders, type DirectorySkillItem, type DirectorySkillsResponse, type DraftShortcut, type Employment, type EndpointModelListRequest, type EndpointModelListResponse, type ErrorBody, type ErrorDetails, type FeishuBindingInfo, type FeishuBindingPutRequest, type FeishuBindingResponse, type FeishuTestRequest, type FeishuTestResponse, type FilesCreateRequest, type FilesMoveRequest, type FilesStatRequest, type FilesStatResponse, type FilesWriteRequest, type GoalResponse, type GoalServerEvent, type GoalStateView, type HistoryMessage, type HookArchiveInstallRequest, type HookItem, type InstallResponse, type InstalledPlugin, type InstalledPluginsResponse, type LanguageIndexResponse, type LanguageSummary, MACHINE_PHASES, type MachineCheck, type MachineConfigSync, type MachineDiagnosis, type MachineEnvOnly, type MachineInfo, type MachineJob, type MachinePhase, type MachineReconnect, type MachineServerEvent, type MachineServerStatus, type MachineSkippedModel, type MachineSourceReach, type MachineSshFailure, type MachineUninstallRequest, type MachineUseRefusal, type MachinesAddRequest, type MachinesCheckoutImage, type MachinesResponse, type MachinesStopUsingRequest, type MachinesUseRequest, type MachinesUseResponse, type McpServerTestResponse, type McpTransport, type MeResponse, type MemberAddRequest, type MemberAddResponse, type MemberInfo, type MembersResponse, type MemoryFileInfo, type MemoryFileResponse, type MemoryFilesResponse, type MemoryImportMode, type MemoryImportRequest, type MemoryImportResponse, type MemoryOverviewResponse, type MemoryScopeExport, type MemoryScopeInfo, type MemoryTransferFile, type MessagesLiveTail, type MessagesPageInfo, type MessagesResponse, type MessagingBindingCommon, type MessagingBindingInfo, type MessagingBindingStateRequest, type MessagingBindingsResponse, type MessagingChannel, type MessagingChannelState, type MessagingDeliveryError, type MessagingDeliveryPatch, type MessagingRuntimeState, type MessagingRuntimeStatus, type MessagingTestMessageResponse, type ModelBalanceAmount, type ModelBalanceErrorCode, type ModelBalanceFailure, type ModelBalanceReading, type ModelBalanceResponse, type ModelEffectiveConnection, type ModelInfo, type ModelOAuthCodeRequest, type ModelOAuthCodeResponse, type ModelOAuthErrorCode, type ModelOAuthMode, type ModelOAuthStartRequest, type ModelOAuthStartResponse, type ModelOAuthStatusResponse, type ModelPricingDto, type ModelProtocolDetectRequest, type ModelProtocolDetectResponse, type ModelProtocolProbeDto, type ModelRefDto, type ModelScopeAuthFlowErrorCode, type ModelScopeAuthFlowStatusResponse, type ModelScopeAuthStartResponse, type ModelTestRequest, type ModelTestResponse, type ModelUpdateEntry, type ModelVisionDetectRequest, type ModelVisionDetectResponse, type ModelVisionOutcome, type ModelsResponse, type ModelsUpdateRequest, type OrgApprovalMode, type OrgBudgetAlert, type OrgCalendarItem, type OrgCalendarOutcome, type OrgCalendarResponse, type OrgCalendarUpsertRequest, type OrgCalendarWriteResponse, type OrgChannelCreateRequest, type OrgChannelDetail, type OrgChannelItem, type OrgChannelMember, type OrgChannelMemberRequest, type OrgChannelMessage, type OrgChannelMessageSendRequest, type OrgChannelMessagesResponse, type OrgChannelNotice, type OrgChannelNoticeKind, type OrgChannelPatchRequest, type OrgChannelReadRequest, type OrgChannelsResponse, type OrgChartResponse, type OrgDeskItem, type OrgDeskResponse, type OrgEmployeeItem, type OrgEmployeePatchRequest, type OrgEmployeeState, type OrgFinanceEmployee, type OrgFinanceResponse, type OrgFinanceTicket, type OrgHandbookFile, type OrgHandbookFileResponse, type OrgHandbookFileWriteRequest, type OrgHandbookFilesResponse, type OrgHandbookResponse, type OrgHireRequest, type OrgInbox, type OrgLanguage, type OrgSessionsResponse, type OrgSpendSummary, type OrgStatus, type OrgTicketAttachRequest, type OrgTicketBlockRequest, type OrgTicketChange, type OrgTicketCreateRequest, type OrgTicketDetail, type OrgTicketHistoryAction, type OrgTicketHistoryEntry, type OrgTicketItem, type OrgTicketMoveRequest, type OrgTicketPriority, type OrgTicketProgressRequest, type OrgTicketSessionItem, type OrgTicketStartRequest, type OrgTicketStartResponse, type OrgTicketStatus, type OrgTicketUpdateRequest, type OrgTicketsResponse, type OrgTriggerKind, type OrganizationCreateRequest, type OrganizationDetail, type OrganizationPatchRequest, type OrganizationSettings, type OrganizationSummary, type OrganizationsResponse, type PasswordChangeRequest, type PendingFollowUpInfo, type PendingSteeringInfo, type PinnedBalance, type PlatformAuthFlowErrorCode, type PlatformAuthFlowStatusResponse, type PlatformAuthStartResponse, type PlatformModelSyncResponse, type PluginArchiveImportRequest, type PluginConfigActionDecl, type PluginConfigActionResponse, type PluginConfigBackend, type PluginConfigColumnGroup, type PluginConfigEntry, type PluginConfigField, type PluginConfigNewRow, type PluginConfigNotice, type PluginConfigOption, type PluginConfigPinColumn, type PluginConfigResponse, type PluginConfigRowChoice, type PluginConfigTableColumn, type PluginConfigTableRow, type PluginConfigUnavailableDecl, type PluginConfigUpdateRequest, type PluginConfiguration, type PluginFilesResponse, type PluginGroupItem, type PluginIndexEntry, type PluginIndexResponse, type PluginInstallOutcome, type PluginInstallRequest, type PluginItem, type PluginLibraryResponse, type PluginMcpServerItem, type PluginReadmeResponse, type PluginSetupKeyItem, type PluginUpdateRef, type PrefsResponse, type PresetSyncMode, type PresetSyncRequest, type PresetSyncResponse, type ProjectCreateRequest, type ProjectCreateResponse, type ProjectRole, type ProjectScheduleItem, type ProjectSchedulesResponse, type ProjectSummary, type ProjectUpdateRequest, type ProjectUpdateResponse, type ProjectsResponse, type ProtocolProbeOutcome, type ProviderConnectionDto, type ProviderConnectionUpdate, type ProxyProbeDto, type ProxyProbeOutcome, type ProxyProbeProvider, type ProxyProbeResponse, type ProxyProbeTargetDto, type ProxyProbeTargetsResponse, type QQBindingInfo, type QQBindingPutRequest, type QQBindingResponse, type QQScanPollResponse, type QQScanStartResponse, type QQTestRequest, type QQTestResponse, type QuickStartItem, type RecalledMessageResponse, type RendererRef, type RequestSpan, type RestartResponse, type RetryNowResponse, type ScheduleItem, type ScheduleServerEvent, type ScheduleStatus, type ScheduleUpsertRequest, type SchedulesResponse, type SemanticIdKind, type SemanticIdSuggestReason, type SemanticIdSuggestRequest, type SemanticIdSuggestResponse, type ServerEvent, type ServerSettings, type ServerSettingsResponse, type ServerSettingsUpdateRequest, type SessionBackgroundTasks, type SessionBatchPageRequest, type SessionBatchResult, type SessionCategory, type SessionCategoryCounts, type SessionContextParts, type SessionContextResponse, type SessionCreateRequest, type SessionCreateResponse, type SessionForkRequest, type SessionForkResponse, type SessionInfo, type SessionPatchRequest, type SessionProcessInfo, type SessionProcessesResponse, type SessionResponse, type SessionSandbox, type SessionSandboxMode, type SessionSandboxNetwork, type SessionSandboxPreset, type SessionStatus, type SessionSwitchModelRequest, type SessionTracesResponse, type SessionsBatchRequest, type SessionsBatchResponse, type SessionsResponse, type SkillArchiveInstallRequest, type SkillMetadataItem, type SshHostRequest, type SshHostResponse, type SshHostSummary, type SshHostsResponse, type SteerRequest, type StoredKeybindings, type SubagentMessageResponse, type SubagentRuntimeInfo, TICKET_SLUG_PATTERN, type TaskCreateRequest, type TaskCreateResponse, type TaskInputPart, type TelegramBindingInfo, type TelegramBindingPutRequest, type TelegramBindingResponse, type TelegramTestRequest, type TelegramTestResponse, type ToolCallSpan, type TraceAnalysisResponse, type TraceEventsResponse, type TraceFileInfo, type TraceImportRequest, type TraceImportResponse, type TraceModelSegment, type TraceOtherSpan, type TracePosition, type TraceTaskStats, type TraceToolSpan, type UiPrefs, type UnavailableSandboxBackend, type UnsatisfiedPlugin, type UpdateCheckResponse, type UpdateJobPhase, type UpdateJobStatus, type UpdateProfileRequest, type UpdateProfileResponse, type UpdateRunResponse, type UploadLimits, type UsageAgentSeries, type UsageBucket, type UsageEntitySeriesCounts, type UsageErrorCount, type UsageErrorItem, type UsageErrorKind, type UsageErrors, type UsageErrorsClearResponse, type UsageErrorsPage, type UsageGranularity, type UsageGroupBy, type UsageGroupRow, type UsageModelSeries, type UsageModelTotal, type UsageModelTotals, type UsageResponse, type UsageSeriesPoint, type UsageTrendPointInTrace, type UserInfo, type VaultEntryInfo, type VaultEntryUpdate, type VaultResponse, type VaultUpdateRequest, type VersionHistoryDiffResponse, type VersionHistoryResponse, type VersionResponse, type VersionRollbackResponse, type WeChatBindingInfo, type WeChatBindingPutRequest, type WeChatBindingResponse, type WeChatScanPollResponse, type WeChatScanStartResponse, type WeChatScanStatus, type WeChatScanVerifyRequest, type WeChatTestResponse, type WebContribution, type WorkflowInfo, type WorkflowRequest, type WorkflowResponse, type WorkflowVersion, type WorkspaceFileEntry, type WorkspaceFilesResponse, type WorkspaceSearchHit, type WorkspaceSearchResponse };
7120
+ export { API_SOCKET_PATH, type AdminPasswordResetRequest, type AdminUserCreateRequest, type AdminUserCreateResponse, type AdminUsersResponse, type AgentApiKeyCreateRequest, type AgentApiKeyCreateResponse, type AgentApiKeyInfo, type AgentApiResponse, type AgentApiSettings, type AgentApiUpdateRequest, type AgentCompactionConfigDto, type AgentConfigDto, type AgentConfigResponse, type AgentConfigUpdateRequest, type AgentCreateRequest, type AgentCreateResponse, type AgentHooksConfigDto, type AgentHooksResponse, type AgentImportRequest, type AgentImportResponse, type AgentKernelUpdateResponse, type AgentMcpServerItem, type AgentMcpServersResponse, type AgentMemoryConfigDto, type AgentModelConfigDto, type AgentPluginsInstallResponse, type AgentSchedulesConfigDto, type AgentSkillsConfigDto, type AgentSkillsResponse, type AgentSummary, type AgentTraceDateGroup, type AgentTraceFileRef, type AgentTraceSessionEntry, type AgentTraceSessionFile, type AgentTraceSessionGroup, type AgentTracesResponse, type AgentVaultConfigDto, type AgentsResponse, type ApprovalDecisionRequest, type ApprovalMode, type ArchivedSessionGroup, type ArchivedSessionGroupsResponse, type ArchivedSessionSource, type ArchivedSessionsBatch, type ArchivedSessionsBatchFilter, type ArchivedSessionsBatchResponse, type ArchivedSessionsQuery, type ArchivedSessionsResponse, type ArchivedSessionsRowsQuery, type AuthLoginRequest, type AuthResponse, type BenchmarkArchiveGitOrigin, type BenchmarkArchiveImportRequest, type BenchmarkArchiveImportResponse, type BenchmarkCaseScore, type BenchmarkCaseSummary, type BenchmarkCasesResponse, type BenchmarkCreateCase, type BenchmarkCreateRequest, type BenchmarkCreateResponse, type BenchmarkEvaluation, type BenchmarkManifestProblem, type BenchmarkOrigin, type BenchmarkOriginKind, type BenchmarkRunScore, type BenchmarkStatus, type BenchmarkSummary, type BenchmarksResponse, type BrowserBackend, type BrowserBackendInfo, type BrowserBackendResponse, type BrowserExtensionCloseCode, type BrowserExtensionPairRequest, type BrowserExtensionPairResponse, type BrowserExtensionPairingResponse, type BrowserExtensionRecord, type BrowserExtensionsResponse, type BrowserHello, type BrowserLinkCapabilities, type BuiltinBrowserAction, type BuiltinBrowserDialog, type BuiltinBrowserExecResult, type BuiltinBrowserHistoryEntry, type BuiltinBrowserHistoryResponse, type BuiltinBrowserImportBrowser, type BuiltinBrowserImportRequest, type BuiltinBrowserImportResult, type BuiltinBrowserImportSource, type BuiltinBrowserImportSourcesResponse, type BuiltinBrowserLoadWarning, type BuiltinBrowserMetrics, type BuiltinBrowserScanResult, type BuiltinBrowserScreenshot, type BuiltinBrowserServerEvent, type BuiltinBrowserSettings, type BuiltinBrowserStatus, type BuiltinBrowserTab, type BuiltinBrowserTabMetrics, type BuiltinBrowserTabsResponse, type BuiltinBrowserUnavailableReason, type CaseMaterial, type ChatDefaultsDto, type CommandPolicyDto, type CommandPolicyRuleDto, type CompanyServerEvent, type ConnectionSourceDto, type ContextFileShare, type ContextToolShare, type ContributionsResponse, type CostParts, type CredentialInfo, type DefaultModelResponse, type DefaultModelUpdateRequest, type DesktopBrowserCommand, type DesktopBrowserCommandMessage, type DesktopBrowserCookie, type DesktopBrowserEvent, type DesktopBrowserEventMessage, type DesktopBrowserReplyMessage, type DesktopFolderAccessMessage, type DesktopFolderAccessResult, type DesktopFolderAccessResultMessage, type DesktopOpenPrivacySettingsMessage, type DesktopPrivacyPane, type DesktopTrayCommandMessage, type DesktopTrayLocale, type DesktopTrayPatch, type DesktopTrayStatus, type DesktopTrayStatusMessage, type DesktopTrayStatusResponse, type DesktopUpdateStatus, type DesktopUpdateStatusResponse, type DesktopUpdaterCommandMessage, type DesktopUpdaterStatusMessage, type DirAccessResponse, type DirEntryInfo, type DirListResponse, type DirLocation, type DirStandardFolders, type DirectorySkillItem, type DirectorySkillsResponse, type DraftShortcut, type Employment, type EndpointModelListRequest, type EndpointModelListResponse, type ErrorBody, type ErrorDetails, type FeishuBindingInfo, type FeishuBindingPutRequest, type FeishuBindingResponse, type FeishuTestRequest, type FeishuTestResponse, type FilesCreateRequest, type FilesMoveRequest, type FilesStatRequest, type FilesStatResponse, type FilesWriteRequest, type GoalResponse, type GoalServerEvent, type GoalStateView, type HistoryMessage, type HookArchiveInstallRequest, type HookItem, type InstallResponse, type InstalledPlugin, type InstalledPluginsResponse, type LanguageIndexResponse, type LanguageSummary, MACHINE_PHASES, type MachineCheck, type MachineConfigSync, type MachineDiagnosis, type MachineEnvOnly, type MachineEvent, type MachineInfo, type MachineJob, type MachinePhase, type MachineReconnect, type MachineServerEvent, type MachineServerStatus, type MachineSkippedModel, type MachineSocketFact, type MachineSourceReach, type MachineSshFailure, type MachineUninstallRequest, type MachineUseRefusal, type MachinesAddRequest, type MachinesCheckoutImage, type MachinesResponse, type MachinesStopUsingRequest, type MachinesUseRequest, type MachinesUseResponse, type McpServerTestResponse, type McpTransport, type MeResponse, type MemberAddRequest, type MemberAddResponse, type MemberInfo, type MembersResponse, type MemoryFileInfo, type MemoryFileResponse, type MemoryFilesResponse, type MemoryImportMode, type MemoryImportRequest, type MemoryImportResponse, type MemoryOverviewResponse, type MemoryScopeExport, type MemoryScopeInfo, type MemoryTransferFile, type MessagesLiveTail, type MessagesPageInfo, type MessagesResponse, type MessagingAccount, type MessagingAccountHolder, type MessagingAccountHoldersResponse, type MessagingAccountsResponse, type MessagingBindingCommon, type MessagingBindingInfo, type MessagingBindingStateRequest, type MessagingBindingsResponse, type MessagingChannel, type MessagingChannelState, type MessagingDeliveryError, type MessagingDeliveryPatch, type MessagingRuntimeState, type MessagingRuntimeStatus, type MessagingTestMessageResponse, type MessagingUnreachableMachine, type MessagingUnreachableReason, type ModelBalanceAmount, type ModelBalanceErrorCode, type ModelBalanceFailure, type ModelBalanceReading, type ModelBalanceResponse, type ModelEffectiveConnection, type ModelInfo, type ModelOAuthCodeRequest, type ModelOAuthCodeResponse, type ModelOAuthErrorCode, type ModelOAuthMode, type ModelOAuthStartRequest, type ModelOAuthStartResponse, type ModelOAuthStatusResponse, type ModelPricingDto, type ModelProtocolDetectRequest, type ModelProtocolDetectResponse, type ModelProtocolProbeDto, type ModelRefDto, type ModelScopeAuthFlowErrorCode, type ModelScopeAuthFlowStatusResponse, type ModelScopeAuthStartResponse, type ModelTestRequest, type ModelTestResponse, type ModelUpdateEntry, type ModelVisionDetectRequest, type ModelVisionDetectResponse, type ModelVisionOutcome, type ModelsResponse, type ModelsUpdateRequest, type OrgApprovalMode, type OrgBudgetAlert, type OrgCalendarItem, type OrgCalendarOutcome, type OrgCalendarResponse, type OrgCalendarUpsertRequest, type OrgCalendarWriteResponse, type OrgChannelCreateRequest, type OrgChannelDetail, type OrgChannelItem, type OrgChannelMember, type OrgChannelMemberRequest, type OrgChannelMessage, type OrgChannelMessageSendRequest, type OrgChannelMessagesResponse, type OrgChannelNotice, type OrgChannelNoticeKind, type OrgChannelPatchRequest, type OrgChannelReadRequest, type OrgChannelsResponse, type OrgChartResponse, type OrgDeskItem, type OrgDeskResponse, type OrgEmployeeItem, type OrgEmployeePatchRequest, type OrgEmployeeState, type OrgFinanceEmployee, type OrgFinanceResponse, type OrgFinanceTicket, type OrgHandbookFile, type OrgHandbookFileResponse, type OrgHandbookFileWriteRequest, type OrgHandbookFilesResponse, type OrgHandbookResponse, type OrgHireRequest, type OrgInbox, type OrgLanguage, type OrgSessionsResponse, type OrgSpendSummary, type OrgStatus, type OrgTicketAttachRequest, type OrgTicketBlockRequest, type OrgTicketChange, type OrgTicketCreateRequest, type OrgTicketDetail, type OrgTicketHistoryAction, type OrgTicketHistoryEntry, type OrgTicketItem, type OrgTicketMoveRequest, type OrgTicketPriority, type OrgTicketProgressRequest, type OrgTicketSessionItem, type OrgTicketStartRequest, type OrgTicketStartResponse, type OrgTicketStatus, type OrgTicketUpdateRequest, type OrgTicketsResponse, type OrgTriggerKind, type OrganizationCreateRequest, type OrganizationDetail, type OrganizationPatchRequest, type OrganizationSettings, type OrganizationSummary, type OrganizationsResponse, type PasswordChangeRequest, type PendingFollowUpInfo, type PendingSteeringInfo, type PinnedBalance, type PlatformAuthFlowErrorCode, type PlatformAuthFlowStatusResponse, type PlatformAuthStartResponse, type PlatformModelSyncResponse, type PluginArchiveImportRequest, type PluginConfigActionDecl, type PluginConfigActionResponse, type PluginConfigBackend, type PluginConfigColumnGroup, type PluginConfigEntry, type PluginConfigField, type PluginConfigNewRow, type PluginConfigNotice, type PluginConfigOption, type PluginConfigPinColumn, type PluginConfigResponse, type PluginConfigRowChoice, type PluginConfigTableColumn, type PluginConfigTableRow, type PluginConfigUnavailableDecl, type PluginConfigUpdateRequest, type PluginConfiguration, type PluginFilesResponse, type PluginGroupItem, type PluginIndexEntry, type PluginIndexResponse, type PluginInstallOutcome, type PluginInstallRequest, type PluginItem, type PluginLibraryResponse, type PluginMcpServerItem, type PluginReadmeResponse, type PluginSetupKeyItem, type PluginUpdateRef, type PrefsResponse, type PresetSyncMode, type PresetSyncRequest, type PresetSyncResponse, type ProjectCreateRequest, type ProjectCreateResponse, type ProjectRole, type ProjectScheduleItem, type ProjectSchedulesResponse, type ProjectSummary, type ProjectUpdateRequest, type ProjectUpdateResponse, type ProjectsResponse, type ProtocolProbeOutcome, type ProviderConnectionDto, type ProviderConnectionUpdate, type ProxyProbeDto, type ProxyProbeOutcome, type ProxyProbeProvider, type ProxyProbeResponse, type ProxyProbeTargetDto, type ProxyProbeTargetsResponse, type QQBindingInfo, type QQBindingPutRequest, type QQBindingResponse, type QQScanPollResponse, type QQScanStartResponse, type QQTestRequest, type QQTestResponse, type QuickStartItem, type RecalledMessageResponse, type RendererRef, type RequestSpan, type RestartResponse, type RetryNowResponse, type ScheduleItem, type ScheduleServerEvent, type ScheduleStatus, type ScheduleUpsertRequest, type SchedulesResponse, type SemanticIdKind, type SemanticIdSuggestReason, type SemanticIdSuggestRequest, type SemanticIdSuggestResponse, type ServerEvent, type ServerSettings, type ServerSettingsResponse, type ServerSettingsUpdateRequest, type SessionBackgroundTasks, type SessionBatchPageRequest, type SessionBatchResult, type SessionCategory, type SessionCategoryCounts, type SessionContextParts, type SessionContextResponse, type SessionCreateRequest, type SessionCreateResponse, type SessionForkRequest, type SessionForkResponse, type SessionInfo, type SessionPatchRequest, type SessionProcessInfo, type SessionProcessesResponse, type SessionResponse, type SessionSandbox, type SessionSandboxMode, type SessionSandboxNetwork, type SessionSandboxPreset, type SessionStatus, type SessionSwitchModelRequest, type SessionTracesResponse, type SessionsBatchRequest, type SessionsBatchResponse, type SessionsResponse, type SkillArchiveInstallRequest, type SkillMetadataItem, type SshHostRequest, type SshHostResponse, type SshHostSummary, type SshHostsResponse, type SteerRequest, type StoredKeybindings, type SubagentMessageResponse, type SubagentRuntimeInfo, TICKET_SLUG_PATTERN, type TaskCreateRequest, type TaskCreateResponse, type TaskInputPart, type TelegramBindingInfo, type TelegramBindingPutRequest, type TelegramBindingResponse, type TelegramTestRequest, type TelegramTestResponse, type ToolCallSpan, type TraceAnalysisResponse, type TraceEventsResponse, type TraceFileInfo, type TraceImportRequest, type TraceImportResponse, type TraceModelSegment, type TraceOtherSpan, type TracePosition, type TraceTaskStats, type TraceToolSpan, type UiPrefs, type UnavailableSandboxBackend, type UnsatisfiedPlugin, type UpdateCheckResponse, type UpdateJobPhase, type UpdateJobStatus, type UpdateProfileRequest, type UpdateProfileResponse, type UpdateRunResponse, type UploadLimits, type UsageAgentSeries, type UsageBucket, type UsageEntitySeriesCounts, type UsageErrorCount, type UsageErrorItem, type UsageErrorKind, type UsageErrors, type UsageErrorsClearResponse, type UsageErrorsPage, type UsageGranularity, type UsageGroupBy, type UsageGroupRow, type UsageModelSeries, type UsageModelTotal, type UsageModelTotals, type UsageResponse, type UsageSeriesPoint, type UsageTrendPointInTrace, type UserInfo, type VaultEntryInfo, type VaultEntryUpdate, type VaultResponse, type VaultUpdateRequest, type VersionHistoryDiffResponse, type VersionHistoryResponse, type VersionResponse, type VersionRollbackResponse, type WeChatBindingInfo, type WeChatBindingPutRequest, type WeChatBindingResponse, type WeChatScanPollResponse, type WeChatScanStartResponse, type WeChatScanStatus, type WeChatScanVerifyRequest, type WeChatTestResponse, type WebContribution, type WorkbenchInfo, type WorkbenchRequest, type WorkbenchResponse, type WorkbenchVersion, type WorkspaceFileEntry, type WorkspaceFilesResponse, type WorkspaceSearchHit, type WorkspaceSearchResponse, apiSocketPath, sessionKindPath };