@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.
- package/dist/assets/{abnfDiagram-O67JEVCF-aQkRN0ee.js → abnfDiagram-O67JEVCF-DrPBKmVh.js} +1 -1
- package/dist/assets/{arc-BT7qPVAa.js → arc-BEIChVSB.js} +1 -1
- package/dist/assets/{architectureDiagram-NJMV4G6O-oMlARqKW.js → architectureDiagram-NJMV4G6O-Da60nTzs.js} +1 -1
- package/dist/assets/{blockDiagram-BEXU5L5S-CKUrb4js.js → blockDiagram-BEXU5L5S-_NelwIQj.js} +1 -1
- package/dist/assets/{c4Diagram-YGBWAQC7-BkL5cRIA.js → c4Diagram-YGBWAQC7-DUdkQ3dy.js} +1 -1
- package/dist/assets/channel-DEJSSlVQ.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-BMitkm2s.js → chunk-2Q5K7J3B-BQgYAptM.js} +1 -1
- package/dist/assets/{chunk-3FUC2YCW-DOhVN2ed.js → chunk-3FUC2YCW-XXOXwcoW.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-BFkFo_ng.js → chunk-5VM5RSS4-CUyMXCSt.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-QbxYUf3Q.js → chunk-GTNCS2PH-BwctbINm.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-BZChfTYw.js → chunk-GWA4HPMP-DQ0bZK59.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-BXpmYglA.js → chunk-JWPE2WC7-BADCk9AK.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-CIZTrz1i.js → chunk-NETBCI7D-CoJxabSR.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-FhqQ0sO0.js → chunk-WEXAMYUT-fupByVJn.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-5ThtmFbP.js → chunk-XXDRQBXY-BavbGHGi.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-BzObC5Qw.js → classDiagram-v2-NBCMYWYE-B5wfUNKJ.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-BASV9Okv.js → cose-bilkent-JH36ORCC-DlYFmKDe.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-B0zQYMFh.js → cynefin-OW5HDTMX-Y0U-21MH.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-DMEO1cHA.js → cynefinDiagram-VND7K2PF-D1Fh1sU0.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-BG04TSi_.js → dagre-6A5THRUB-BNU-Trog.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-CfpVNMhg.js → diagram-22UHCM2B-Bjie4nDQ.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-DG9L4I1L.js → diagram-3UASUU5V-Qnbrq1T5.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-Db7Bf63S.js → diagram-ATOU4E4O-CNJasPCN.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-Cdzv1tJn.js → diagram-CDSNMT55-BAzGZBKX.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-BBMeXGKE.js → diagram-MLGK6HIB-I8ACRaw-.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-BAQ22zk3.js → diagram-MPIPVDR6-nLlrAEPz.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-BDZgSFSF.js → ebnfDiagram-ZINNZB2B-DF9BG3pH.js} +1 -1
- package/dist/assets/{elk-276RUBZZ-Bx4-nN8N.js → elk-276RUBZZ-C1AJYKMV.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-D2Pn-cqm.js → erDiagram-OPXOYQCR-MNNcRrPy.js} +1 -1
- package/dist/assets/{flowDiagram-KWPJA3E3-hsbvL3Ow.js → flowDiagram-KWPJA3E3-C7mfBfgt.js} +1 -1
- package/dist/assets/{ganttDiagram-FUAMR5RP-DBUgYe4p.js → ganttDiagram-FUAMR5RP-a9zNyDbb.js} +1 -1
- package/dist/assets/{gitGraphDiagram-X574FWY7-ChGeSINg.js → gitGraphDiagram-X574FWY7-OL8NhUsO.js} +1 -1
- package/dist/assets/{index-ByXr4FRl.js → index-DojGBgbN.js} +167 -164
- package/dist/assets/{index-Ch93Ygtq.js → index-xypOVpVT.js} +1 -1
- package/dist/assets/{infoDiagram-VRGFBTTK-DY2EeC-A.js → infoDiagram-VRGFBTTK-CF-3pzUZ.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-BznYuY04.js → ishikawaDiagram-OU5B5YK6-B2HqD-sv.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-CX74ZLbW.js → journeyDiagram-ZHPQQLJL-84gzOTb9.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-0DPavB-t.js → kanban-definition-PNTS6WVX-D7Ee23QC.js} +1 -1
- package/dist/assets/{linear-BHeqbvM8.js → linear-CdAXsmfc.js} +1 -1
- package/dist/assets/{mermaid.core-Dm-Ny6a0.js → mermaid.core-CE_M1v1e.js} +5 -5
- package/dist/assets/{mindmap-definition-NLK3R4M7-BPrMElav.js → mindmap-definition-NLK3R4M7-KSTIET9y.js} +1 -1
- package/dist/assets/{pegDiagram-GJSIUBJH-CaD7wyyX.js → pegDiagram-GJSIUBJH-C7ogvddb.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-lbSp8R4K.js → pieDiagram-5QR66LMP-Bp1CgCrM.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-Bs3Sn2of.js → quadrantDiagram-O4NWA36T-Bw7aN9Lh.js} +1 -1
- package/dist/assets/{railroadDiagram-XR7U4H2S-C88ykXCV.js → railroadDiagram-XR7U4H2S-Dij4U4NY.js} +1 -1
- package/dist/assets/{requirementDiagram-PLB6GJNP-mgIQnORW.js → requirementDiagram-PLB6GJNP-DOxTQvCl.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-K5esEw-m.js → sankeyDiagram-IPEJSGJF-DPCUmNbV.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-D5v8PJqQ.js → sequenceDiagram-PO4LG4MO-DPjC8zGe.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-BHBBDTEI.js → sizeCapture-INFHLROL-WlmsNlh-.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-CeRdNmKQ.js → stateDiagram-v2-GCMORJYK-BwMPiapI.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-D8CbMCI8.js → swimlanes-2SLR337P-Cyja7ZPb.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-Dh25zxzq.js +8 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-CMG02UV1.js → timeline-definition-EJHVYXUP-BehkSauz.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-Bm8h6ijK.js → usecaseDiagram-POWQR4AR-koUjcmpW.js} +1 -1
- package/dist/assets/{vennDiagram-UO4OBE2U-Dk9tFjlM.js → vennDiagram-UO4OBE2U-Ch8TXIpy.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-61vrb2Ft.js → wardleyDiagram-VNRHLVJA-Dm5kC4c2.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-C7uO44ng.js → xychartDiagram-PMCCYNJV-YA-1zyQz.js} +1 -1
- package/dist/handbook/atomic-handbook.html +1 -1
- package/dist/index.html +1 -1
- package/dist-server/companion/src/routes.js +28 -1
- package/dist-server/container-mcp.js +1 -0
- package/dist-server/hooks/plan-hook.js +22 -0
- package/dist-server/index.js +38538 -37905
- package/dist-server/local-computer.js +1 -0
- package/dist-server/openmausbot.js +389 -303
- package/dist-server/pair-cli.js +389 -303
- package/dist-server/proxy-paths.js +1 -0
- package/dist-server/server/atomic-engine-release.js +13 -13
- package/dist-server/server/bot-work-modes.js +212 -0
- package/dist-server/server/config.js +6 -5
- package/dist-server/server/drivers/acp/core.js +6 -4
- package/dist-server/server/drivers/acp/custom.js +51 -37
- package/dist-server/server/drivers/builtIn.js +2 -1
- package/dist-server/server/drivers/chat-mcp-tools.js +1 -0
- package/dist-server/server/drivers/claude.js +28 -25
- package/dist-server/server/drivers/codex-approval-presets.js +34 -0
- package/dist-server/server/drivers/codex.js +11 -35
- package/dist-server/server/drivers/openai-chat.js +4 -3
- package/dist-server/server/hooks/plan-hook.js +17 -0
- package/dist-server/server/index.js +92 -175
- package/dist-server/server/mcp-interactive-probe.js +60 -0
- package/dist-server/server/mcp-remote-bridge.js +13 -6
- package/dist-server/server/message-file.js +28 -11
- package/dist-server/server/plan-policy.js +14 -0
- package/dist-server/server/proxy-paths.js +1 -0
- package/dist-server/server/remote-desktop.js +142 -0
- package/dist-server/server/routes/message-file.js +115 -0
- package/dist-server/server/shared-deliverables.js +109 -0
- package/dist-server/server/skill-learn.js +4 -0
- package/dist-server/server/store.js +4 -4
- package/dist-server/server/subscription-bots.js +3 -2
- package/dist-server/shared/approval-mode.js +3 -1
- package/dist-server/shared/engine-choices.js +1 -1
- package/dist-server/shared/provider-accounts.js +5 -5
- package/dist-server/shared/skill-command.js +16 -0
- package/dist-server/vps-container-mcp.js +1 -0
- package/package.json +1 -1
- package/dist/assets/channel-BZDQCBTd.js +0 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-CQHcTGnI.js +0 -8
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { namedApprovalParams } from "./codex-approval-presets.js";
|
|
1
2
|
import { codexToolSurfaceArgs } from "./codex-tool-surface.js";
|
|
2
3
|
import { codexImage } from "./codex-image.js";
|
|
3
4
|
// Official Codex app-server over newline-delimited JSON-RPC on stdio.
|
|
@@ -183,40 +184,6 @@ function additionalPermissionSummary(permissions, reason) {
|
|
|
183
184
|
const plainRecord = (value) => value && typeof value === "object" && !Array.isArray(value)
|
|
184
185
|
? value
|
|
185
186
|
: null;
|
|
186
|
-
/** Codex persists these values on its native thread. Keep them explicit on
|
|
187
|
-
* start, resume, and every turn so switching modes cannot leave a more
|
|
188
|
-
* permissive sandbox/reviewer stuck to the next request. */
|
|
189
|
-
/** Ask and Edits both run Codex's workspace-write sandbox with the person as
|
|
190
|
-
* reviewer: Codex has no narrower "edits only" mode, so the selector never
|
|
191
|
-
* offers Edits for it (supportsApprovalMode) and a stray value asks. */
|
|
192
|
-
function namedApprovalParams(mode) {
|
|
193
|
-
if (mode === "full") {
|
|
194
|
-
return {
|
|
195
|
-
thread: {
|
|
196
|
-
approvalPolicy: "never",
|
|
197
|
-
approvalsReviewer: "user",
|
|
198
|
-
sandbox: "danger-full-access",
|
|
199
|
-
},
|
|
200
|
-
turn: {
|
|
201
|
-
approvalPolicy: "never",
|
|
202
|
-
approvalsReviewer: "user",
|
|
203
|
-
sandboxPolicy: { type: "dangerFullAccess" },
|
|
204
|
-
},
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
return {
|
|
208
|
-
thread: {
|
|
209
|
-
approvalPolicy: "on-request",
|
|
210
|
-
approvalsReviewer: mode === "auto" ? "auto_review" : "user",
|
|
211
|
-
sandbox: "workspace-write",
|
|
212
|
-
},
|
|
213
|
-
turn: {
|
|
214
|
-
approvalPolicy: "on-request",
|
|
215
|
-
approvalsReviewer: mode === "auto" ? "auto_review" : "user",
|
|
216
|
-
sandboxPolicy: { type: "workspaceWrite" },
|
|
217
|
-
},
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
187
|
/** Linked repos besides the working folder become extra writable roots of
|
|
221
188
|
* Codex's workspace-write sandbox (the app-server's equivalent of the CLI's
|
|
222
189
|
* --add-dir). Full access already reaches them; read-only and a named
|
|
@@ -559,6 +526,9 @@ export const CodexDriver = {
|
|
|
559
526
|
// instance's legacy fullAuto setting. Harness turns always send an
|
|
560
527
|
// explicit mode, which takes precedence.
|
|
561
528
|
const approvalMode = turn.approvalMode ?? (config.fullAuto ? "full" : "ask");
|
|
529
|
+
// Plan has no MCP/harness tools, even when a user opted into native MCP.
|
|
530
|
+
if (approvalMode === "plan")
|
|
531
|
+
turn = { ...turn, integrations: undefined, mcpFromUserConfig: false };
|
|
562
532
|
// The person's servers this turn mounts. One that would clobber a
|
|
563
533
|
// harness-owned variable is left out, not fatal: the rest still mount.
|
|
564
534
|
const customServers = {};
|
|
@@ -627,7 +597,7 @@ export const CodexDriver = {
|
|
|
627
597
|
// The harness's own mounts above are never switched off by this.
|
|
628
598
|
if (!turn.mcpFromUserConfig) {
|
|
629
599
|
const harnessMounts = new Set(["openmausbot_connectors", "atomic_accounts", "agents", "computer", "browser", "openmausbot_phone"]);
|
|
630
|
-
appServerArgs.push(...codexUserMcpOffArgs(new Map([...declaredInCodexConfig].filter(([name]) => !harnessMounts.has(name)))));
|
|
600
|
+
appServerArgs.push(...codexUserMcpOffArgs(new Map([...declaredInCodexConfig].filter(([name]) => approvalMode === "plan" || !harnessMounts.has(name)))));
|
|
631
601
|
// Same rule for the person's plugins (a `git ls-remote` per Git
|
|
632
602
|
// marketplace at every start) and personal skills (listed in the
|
|
633
603
|
// model's context on every call). Sign-in is untouched.
|
|
@@ -656,6 +626,8 @@ export const CodexDriver = {
|
|
|
656
626
|
const prefix = "mcp_servers.openmausbot_phone";
|
|
657
627
|
appServerArgs.push("-c", `${prefix}.command=${JSON.stringify(bridge.command)}`, "-c", `${prefix}.args=${JSON.stringify(bridge.args)}`, "-c", `${prefix}.env_vars=${JSON.stringify(Object.keys(bridge.env))}`, "-c", `${prefix}.default_tools_approval_mode="auto"`);
|
|
658
628
|
}
|
|
629
|
+
if (approvalMode === "plan")
|
|
630
|
+
appServerArgs.push("-c", 'web_search="disabled"', "-c", "features.apps=false", "-c", "features.multi_agent=false");
|
|
659
631
|
const child = spawnCli(config.cli, appServerArgs, {
|
|
660
632
|
cwd: childCwd,
|
|
661
633
|
env,
|
|
@@ -925,6 +897,10 @@ export const CodexDriver = {
|
|
|
925
897
|
: isAdditionalPermission
|
|
926
898
|
? { permissions: allow ? grantedPermissions(params.permissions) : {}, scope: "turn" }
|
|
927
899
|
: { decision: allow ? (legacy ? "approved" : "accept") : legacy ? "denied" : "decline" };
|
|
900
|
+
if (approvalMode === "plan" && isPermission) {
|
|
901
|
+
send({ jsonrpc: "2.0", id: msg.id, result: permissionResult(false) });
|
|
902
|
+
return;
|
|
903
|
+
}
|
|
928
904
|
if (autoAcceptPermissions && isPermission && !serverConfirm) {
|
|
929
905
|
return send({
|
|
930
906
|
jsonrpc: "2.0",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PLAN_REFUSAL } from "../plan-policy.js";
|
|
1
2
|
import { newEventId, newId } from "../contracts.js";
|
|
2
3
|
import { redactSecretsInText } from "../redact.js";
|
|
3
4
|
import { toolDetailPreview } from "../tool-summary.js";
|
|
@@ -423,8 +424,8 @@ export function createOpenAIChatRuntime(options) {
|
|
|
423
424
|
// so it is honoured here: without it every single tool call on
|
|
424
425
|
// an OpenAI-compatible engine stops for a card, and a Chief's
|
|
425
426
|
// delegated Full access cannot help either.
|
|
426
|
-
const allowed = turn.approvalMode === "full"
|
|
427
|
-
|| await approval.ask(call.function.name, inputPreview ?? "This tool has no arguments.", tools.customTool?.(call.function.name));
|
|
427
|
+
const allowed = (turn.approvalMode !== "plan" || tools.planReadOnly?.(call.function.name) === true) && (turn.approvalMode === "full"
|
|
428
|
+
|| await approval.ask(call.function.name, inputPreview ?? "This tool has no arguments.", tools.customTool?.(call.function.name)));
|
|
428
429
|
abort.signal.throwIfAborted();
|
|
429
430
|
emit({ ...base(turn.threadId, turnId), type: "item.started", itemType: "tool", itemId: call.id,
|
|
430
431
|
title: call.function.name, ...(inputPreview ? { input: inputPreview } : {}),
|
|
@@ -444,7 +445,7 @@ export function createOpenAIChatRuntime(options) {
|
|
|
444
445
|
}
|
|
445
446
|
else {
|
|
446
447
|
denials.push(call.function.name);
|
|
447
|
-
result = { ok: false, text: "Permission denied or expired; the tool was not executed." };
|
|
448
|
+
result = { ok: false, text: turn.approvalMode === "plan" && tools.planReadOnly?.(call.function.name) !== true ? PLAN_REFUSAL : "Permission denied or expired; the tool was not executed." };
|
|
448
449
|
}
|
|
449
450
|
}
|
|
450
451
|
catch (error) {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Atomic Engineering, 2026-10-31. Claude PreToolUse Plan guard.
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { planToolAllowed, PLAN_REFUSAL } from "../plan-policy.js";
|
|
4
|
+
try {
|
|
5
|
+
const event = JSON.parse(readFileSync(0, "utf8"));
|
|
6
|
+
if (event.hook_event_name === "PreToolUse" && planToolAllowed(event.tool_name)) {
|
|
7
|
+
// No permission override: reads still obey Claude's normal access checks.
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
process.stderr.write(PLAN_REFUSAL);
|
|
11
|
+
process.exitCode = 2;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
process.stderr.write(PLAN_REFUSAL);
|
|
16
|
+
process.exitCode = 2;
|
|
17
|
+
}
|