@chibitek/chibi 0.1.169 → 0.1.171

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 (99) hide show
  1. package/dist/assets/{abnfDiagram-O67JEVCF-aQkRN0ee.js → abnfDiagram-O67JEVCF-DrPBKmVh.js} +1 -1
  2. package/dist/assets/{arc-BT7qPVAa.js → arc-BEIChVSB.js} +1 -1
  3. package/dist/assets/{architectureDiagram-NJMV4G6O-oMlARqKW.js → architectureDiagram-NJMV4G6O-Da60nTzs.js} +1 -1
  4. package/dist/assets/{blockDiagram-BEXU5L5S-CKUrb4js.js → blockDiagram-BEXU5L5S-_NelwIQj.js} +1 -1
  5. package/dist/assets/{c4Diagram-YGBWAQC7-BkL5cRIA.js → c4Diagram-YGBWAQC7-DUdkQ3dy.js} +1 -1
  6. package/dist/assets/channel-DEJSSlVQ.js +1 -0
  7. package/dist/assets/{chunk-2Q5K7J3B-BMitkm2s.js → chunk-2Q5K7J3B-BQgYAptM.js} +1 -1
  8. package/dist/assets/{chunk-3FUC2YCW-DOhVN2ed.js → chunk-3FUC2YCW-XXOXwcoW.js} +2 -2
  9. package/dist/assets/{chunk-5VM5RSS4-BFkFo_ng.js → chunk-5VM5RSS4-CUyMXCSt.js} +1 -1
  10. package/dist/assets/{chunk-GTNCS2PH-QbxYUf3Q.js → chunk-GTNCS2PH-BwctbINm.js} +1 -1
  11. package/dist/assets/{chunk-GWA4HPMP-BZChfTYw.js → chunk-GWA4HPMP-DQ0bZK59.js} +1 -1
  12. package/dist/assets/{chunk-JWPE2WC7-BXpmYglA.js → chunk-JWPE2WC7-BADCk9AK.js} +1 -1
  13. package/dist/assets/{chunk-NETBCI7D-CIZTrz1i.js → chunk-NETBCI7D-CoJxabSR.js} +1 -1
  14. package/dist/assets/{chunk-WEXAMYUT-FhqQ0sO0.js → chunk-WEXAMYUT-fupByVJn.js} +1 -1
  15. package/dist/assets/{chunk-XXDRQBXY-5ThtmFbP.js → chunk-XXDRQBXY-BavbGHGi.js} +1 -1
  16. package/dist/assets/{classDiagram-v2-NBCMYWYE-BzObC5Qw.js → classDiagram-v2-NBCMYWYE-B5wfUNKJ.js} +1 -1
  17. package/dist/assets/{cose-bilkent-JH36ORCC-BASV9Okv.js → cose-bilkent-JH36ORCC-DlYFmKDe.js} +1 -1
  18. package/dist/assets/{cynefin-OW5HDTMX-B0zQYMFh.js → cynefin-OW5HDTMX-Y0U-21MH.js} +1 -1
  19. package/dist/assets/{cynefinDiagram-VND7K2PF-DMEO1cHA.js → cynefinDiagram-VND7K2PF-D1Fh1sU0.js} +1 -1
  20. package/dist/assets/{dagre-6A5THRUB-BG04TSi_.js → dagre-6A5THRUB-BNU-Trog.js} +1 -1
  21. package/dist/assets/{diagram-22UHCM2B-CfpVNMhg.js → diagram-22UHCM2B-Bjie4nDQ.js} +1 -1
  22. package/dist/assets/{diagram-3UASUU5V-DG9L4I1L.js → diagram-3UASUU5V-Qnbrq1T5.js} +1 -1
  23. package/dist/assets/{diagram-ATOU4E4O-Db7Bf63S.js → diagram-ATOU4E4O-CNJasPCN.js} +1 -1
  24. package/dist/assets/{diagram-CDSNMT55-Cdzv1tJn.js → diagram-CDSNMT55-BAzGZBKX.js} +1 -1
  25. package/dist/assets/{diagram-MLGK6HIB-BBMeXGKE.js → diagram-MLGK6HIB-I8ACRaw-.js} +1 -1
  26. package/dist/assets/{diagram-MPIPVDR6-BAQ22zk3.js → diagram-MPIPVDR6-nLlrAEPz.js} +1 -1
  27. package/dist/assets/{ebnfDiagram-ZINNZB2B-BDZgSFSF.js → ebnfDiagram-ZINNZB2B-DF9BG3pH.js} +1 -1
  28. package/dist/assets/{elk-276RUBZZ-Bx4-nN8N.js → elk-276RUBZZ-C1AJYKMV.js} +1 -1
  29. package/dist/assets/{erDiagram-OPXOYQCR-D2Pn-cqm.js → erDiagram-OPXOYQCR-MNNcRrPy.js} +1 -1
  30. package/dist/assets/{flowDiagram-KWPJA3E3-hsbvL3Ow.js → flowDiagram-KWPJA3E3-C7mfBfgt.js} +1 -1
  31. package/dist/assets/{ganttDiagram-FUAMR5RP-DBUgYe4p.js → ganttDiagram-FUAMR5RP-a9zNyDbb.js} +1 -1
  32. package/dist/assets/{gitGraphDiagram-X574FWY7-ChGeSINg.js → gitGraphDiagram-X574FWY7-OL8NhUsO.js} +1 -1
  33. package/dist/assets/{index-ByXr4FRl.js → index-DojGBgbN.js} +167 -164
  34. package/dist/assets/{index-Ch93Ygtq.js → index-xypOVpVT.js} +1 -1
  35. package/dist/assets/{infoDiagram-VRGFBTTK-DY2EeC-A.js → infoDiagram-VRGFBTTK-CF-3pzUZ.js} +1 -1
  36. package/dist/assets/{ishikawaDiagram-OU5B5YK6-BznYuY04.js → ishikawaDiagram-OU5B5YK6-B2HqD-sv.js} +1 -1
  37. package/dist/assets/{journeyDiagram-ZHPQQLJL-CX74ZLbW.js → journeyDiagram-ZHPQQLJL-84gzOTb9.js} +1 -1
  38. package/dist/assets/{kanban-definition-PNTS6WVX-0DPavB-t.js → kanban-definition-PNTS6WVX-D7Ee23QC.js} +1 -1
  39. package/dist/assets/{linear-BHeqbvM8.js → linear-CdAXsmfc.js} +1 -1
  40. package/dist/assets/{mermaid.core-Dm-Ny6a0.js → mermaid.core-CE_M1v1e.js} +5 -5
  41. package/dist/assets/{mindmap-definition-NLK3R4M7-BPrMElav.js → mindmap-definition-NLK3R4M7-KSTIET9y.js} +1 -1
  42. package/dist/assets/{pegDiagram-GJSIUBJH-CaD7wyyX.js → pegDiagram-GJSIUBJH-C7ogvddb.js} +1 -1
  43. package/dist/assets/{pieDiagram-5QR66LMP-lbSp8R4K.js → pieDiagram-5QR66LMP-Bp1CgCrM.js} +1 -1
  44. package/dist/assets/{quadrantDiagram-O4NWA36T-Bs3Sn2of.js → quadrantDiagram-O4NWA36T-Bw7aN9Lh.js} +1 -1
  45. package/dist/assets/{railroadDiagram-XR7U4H2S-C88ykXCV.js → railroadDiagram-XR7U4H2S-Dij4U4NY.js} +1 -1
  46. package/dist/assets/{requirementDiagram-PLB6GJNP-mgIQnORW.js → requirementDiagram-PLB6GJNP-DOxTQvCl.js} +1 -1
  47. package/dist/assets/{sankeyDiagram-IPEJSGJF-K5esEw-m.js → sankeyDiagram-IPEJSGJF-DPCUmNbV.js} +1 -1
  48. package/dist/assets/{sequenceDiagram-PO4LG4MO-D5v8PJqQ.js → sequenceDiagram-PO4LG4MO-DPjC8zGe.js} +1 -1
  49. package/dist/assets/{sizeCapture-INFHLROL-BHBBDTEI.js → sizeCapture-INFHLROL-WlmsNlh-.js} +1 -1
  50. package/dist/assets/{stateDiagram-v2-GCMORJYK-CeRdNmKQ.js → stateDiagram-v2-GCMORJYK-BwMPiapI.js} +1 -1
  51. package/dist/assets/{swimlanes-2SLR337P-D8CbMCI8.js → swimlanes-2SLR337P-Cyja7ZPb.js} +1 -1
  52. package/dist/assets/swimlanesDiagram-TC7HE7FX-Dh25zxzq.js +8 -0
  53. package/dist/assets/{timeline-definition-EJHVYXUP-CMG02UV1.js → timeline-definition-EJHVYXUP-BehkSauz.js} +1 -1
  54. package/dist/assets/{usecaseDiagram-POWQR4AR-Bm8h6ijK.js → usecaseDiagram-POWQR4AR-koUjcmpW.js} +1 -1
  55. package/dist/assets/{vennDiagram-UO4OBE2U-Dk9tFjlM.js → vennDiagram-UO4OBE2U-Ch8TXIpy.js} +1 -1
  56. package/dist/assets/{wardleyDiagram-VNRHLVJA-61vrb2Ft.js → wardleyDiagram-VNRHLVJA-Dm5kC4c2.js} +1 -1
  57. package/dist/assets/{xychartDiagram-PMCCYNJV-C7uO44ng.js → xychartDiagram-PMCCYNJV-YA-1zyQz.js} +1 -1
  58. package/dist/handbook/atomic-handbook.html +1 -1
  59. package/dist/index.html +1 -1
  60. package/dist-server/companion/src/routes.js +28 -1
  61. package/dist-server/container-mcp.js +1 -0
  62. package/dist-server/hooks/plan-hook.js +22 -0
  63. package/dist-server/index.js +38538 -37905
  64. package/dist-server/local-computer.js +1 -0
  65. package/dist-server/openmausbot.js +389 -303
  66. package/dist-server/pair-cli.js +389 -303
  67. package/dist-server/proxy-paths.js +1 -0
  68. package/dist-server/server/atomic-engine-release.js +13 -13
  69. package/dist-server/server/bot-work-modes.js +212 -0
  70. package/dist-server/server/config.js +6 -5
  71. package/dist-server/server/drivers/acp/core.js +6 -4
  72. package/dist-server/server/drivers/acp/custom.js +51 -37
  73. package/dist-server/server/drivers/builtIn.js +2 -1
  74. package/dist-server/server/drivers/chat-mcp-tools.js +1 -0
  75. package/dist-server/server/drivers/claude.js +28 -25
  76. package/dist-server/server/drivers/codex-approval-presets.js +34 -0
  77. package/dist-server/server/drivers/codex.js +11 -35
  78. package/dist-server/server/drivers/openai-chat.js +4 -3
  79. package/dist-server/server/hooks/plan-hook.js +17 -0
  80. package/dist-server/server/index.js +92 -175
  81. package/dist-server/server/mcp-interactive-probe.js +60 -0
  82. package/dist-server/server/mcp-remote-bridge.js +13 -6
  83. package/dist-server/server/message-file.js +28 -11
  84. package/dist-server/server/plan-policy.js +14 -0
  85. package/dist-server/server/proxy-paths.js +1 -0
  86. package/dist-server/server/remote-desktop.js +142 -0
  87. package/dist-server/server/routes/message-file.js +115 -0
  88. package/dist-server/server/shared-deliverables.js +109 -0
  89. package/dist-server/server/skill-learn.js +4 -0
  90. package/dist-server/server/store.js +4 -4
  91. package/dist-server/server/subscription-bots.js +3 -2
  92. package/dist-server/shared/approval-mode.js +3 -1
  93. package/dist-server/shared/engine-choices.js +1 -1
  94. package/dist-server/shared/provider-accounts.js +5 -5
  95. package/dist-server/shared/skill-command.js +16 -0
  96. package/dist-server/vps-container-mcp.js +1 -0
  97. package/package.json +1 -1
  98. package/dist/assets/channel-BZDQCBTd.js +0 -1
  99. package/dist/assets/swimlanesDiagram-TC7HE7FX-CQHcTGnI.js +0 -8
@@ -33,7 +33,7 @@ export const MESSAGE_FILE_ROUTE = {
33
33
  };
34
34
  export const CLOUD_DESKTOP_CONTROL_ROUTE = {
35
35
  method: "POST",
36
- path: /^\/api\/bots\/[\w-]+\/computer\/(?:control|screenshot|viewer-close)$/,
36
+ path: /^\/api\/bots\/[\w-]+\/computer\/(?:control|screenshot|viewer-close|remote-frame|remote-input)$/,
37
37
  };
38
38
  export function isCloudDesktopJoin(method, path) {
39
39
  return method === CLOUD_DESKTOP_JOIN_ROUTE.method && CLOUD_DESKTOP_JOIN_ROUTE.path.test(path);
@@ -41,6 +41,28 @@ export function isCloudDesktopJoin(method, path) {
41
41
  export function isMessageFileDownload(method, path) {
42
42
  return method === MESSAGE_FILE_ROUTE.method && MESSAGE_FILE_ROUTE.path.test(path);
43
43
  }
44
+ /** The desktop's broad bot and room edits. A phone reaches the harness as
45
+ * the owner, so the harness's own display-fields-only filter for clients
46
+ * never runs; the proxy opens these to the pin toggle alone by checking the
47
+ * body itself (isPinOnlyBody) and forwarding exactly the bytes it checked. */
48
+ export const PIN_ONLY_ROUTE = {
49
+ method: "PATCH",
50
+ path: /^\/api\/(?:bots|groups)\/[\w-]+$/,
51
+ };
52
+ export function isPinOnlyRoute(method, path) {
53
+ return method === PIN_ONLY_ROUTE.method && PIN_ONLY_ROUTE.path.test(path);
54
+ }
55
+ /** `{"pinned": true|false}` and nothing else. */
56
+ export function isPinOnlyBody(raw) {
57
+ try {
58
+ const body = JSON.parse(raw.toString("utf8"));
59
+ return Boolean(body) && typeof body === "object" && !Array.isArray(body)
60
+ && Object.keys(body).length === 1 && typeof body.pinned === "boolean";
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
44
66
  export function isCloudDesktopAccess(method, path) {
45
67
  return isCloudDesktopJoin(method, path)
46
68
  || (method === CLOUD_DESKTOP_CONTROL_ROUTE.method && CLOUD_DESKTOP_CONTROL_ROUTE.path.test(path));
@@ -75,6 +97,8 @@ const ALLOWED = [
75
97
  // Pinned-row reorder: hands the viewer's own pin stamps back out in a new
76
98
  // order (server/pin-order.ts); it cannot pin, unpin or reach hidden bots.
77
99
  { method: "PUT", path: /^\/api\/pins\/order$/ },
100
+ // Pin or unpin one bot or room; the proxy refuses any other field.
101
+ PIN_ONLY_ROUTE,
78
102
  { method: "POST", path: /^\/api\/bots\/[\w-]+\/messages$/ },
79
103
  { method: "PATCH", path: /^\/api\/bots\/[\w-]+\/cards\/[\w-]+$/ },
80
104
  { method: "POST", path: /^\/api\/bots\/[\w-]+\/respond$/ },
@@ -185,6 +209,9 @@ const ALLOWED = [
185
209
  // on/off only. The full server list stays on the computer, since a local
186
210
  // server's arguments can carry anything.
187
211
  { method: "GET", path: /^\/api\/mcp\/defaults$/ },
212
+ // A marketplace connect card. The harness adds only Atomic's featured,
213
+ // vendor-run servers, threat-scans them and saves them switched off.
214
+ { method: "POST", path: /^\/api\/mcp\/registry\/add$/ },
188
215
  ];
189
216
  /** Route families worth naming in the refusal.
190
217
  *
@@ -16594,6 +16594,7 @@ var SPAWNED_PROXIES = {
16594
16594
  hook: resolveProxy("hooks/omb-hook"),
16595
16595
  // the RTK add-on's Claude PreToolUse hook (bypassPermissions turns only)
16596
16596
  rtkHook: resolveProxy("hooks/rtk-hook"),
16597
+ planHook: resolveProxy("hooks/plan-hook"),
16597
16598
  // Loaded by the external `pi` process via `-e`, not by this server — but
16598
16599
  // resolved through the same single source of truth so the packaged layout
16599
16600
  // check can assert it ships.
@@ -0,0 +1,22 @@
1
+ // server/hooks/plan-hook.ts
2
+ import { readFileSync } from "node:fs";
3
+
4
+ // server/plan-policy.ts
5
+ var PLAN_READ_TOOLS = ["Read", "Glob", "Grep"];
6
+ var PLAN_REFUSAL = "Plan mode blocked this action. Review the plan and approve it in Atomic before making changes.";
7
+ function planToolAllowed(tool) {
8
+ return typeof tool === "string" && PLAN_READ_TOOLS.includes(tool);
9
+ }
10
+
11
+ // server/hooks/plan-hook.ts
12
+ try {
13
+ const event = JSON.parse(readFileSync(0, "utf8"));
14
+ if (event.hook_event_name === "PreToolUse" && planToolAllowed(event.tool_name)) {
15
+ } else {
16
+ process.stderr.write(PLAN_REFUSAL);
17
+ process.exitCode = 2;
18
+ }
19
+ } catch {
20
+ process.stderr.write(PLAN_REFUSAL);
21
+ process.exitCode = 2;
22
+ }