@open-mercato/cezar 0.9.2 → 0.10.0-pr892.1298
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/LICENSE +21 -0
- package/README.md +169 -38
- package/dist/agent-config/account-identity.d.ts +44 -0
- package/dist/agent-config/account-identity.js +128 -0
- package/dist/agent-config/account-identity.js.map +1 -0
- package/dist/agent-config/catalog.d.ts +8 -0
- package/dist/agent-config/catalog.js +18 -0
- package/dist/agent-config/catalog.js.map +1 -1
- package/dist/agent-config/model-settings/claude.d.ts +2 -0
- package/dist/agent-config/model-settings/claude.js +11 -0
- package/dist/agent-config/model-settings/claude.js.map +1 -0
- package/dist/agent-config/model-settings/codex.d.ts +2 -0
- package/dist/agent-config/model-settings/codex.js +16 -0
- package/dist/agent-config/model-settings/codex.js.map +1 -0
- package/dist/agent-config/model-settings/opencode.d.ts +2 -0
- package/dist/agent-config/model-settings/opencode.js +8 -0
- package/dist/agent-config/model-settings/opencode.js.map +1 -0
- package/dist/agent-config/model-settings/pi.d.ts +12 -0
- package/dist/agent-config/model-settings/pi.js +18 -0
- package/dist/agent-config/model-settings/pi.js.map +1 -0
- package/dist/agent-config/model-settings/shared.d.ts +9 -0
- package/dist/agent-config/model-settings/shared.js +93 -0
- package/dist/agent-config/model-settings/shared.js.map +1 -0
- package/dist/agent-config/model-settings/types.d.ts +9 -0
- package/dist/agent-config/model-settings/types.js +2 -0
- package/dist/agent-config/model-settings/types.js.map +1 -0
- package/dist/agent-config/models.d.ts +9 -0
- package/dist/agent-config/models.js +32 -0
- package/dist/agent-config/models.js.map +1 -0
- package/dist/agent-config/service.js +4 -4
- package/dist/agent-config/service.js.map +1 -1
- package/dist/automations/types.d.ts +4 -0
- package/dist/automations/types.js +2 -1
- package/dist/automations/types.js.map +1 -1
- package/dist/config.d.ts +10 -1
- package/dist/config.js +48 -5
- package/dist/config.js.map +1 -1
- package/dist/contract/agent-config.d.ts +2 -0
- package/dist/contract/agent-profiles.d.ts +347 -0
- package/dist/contract/automations.d.ts +24 -0
- package/dist/contract/events.d.ts +59 -0
- package/dist/contract/github.d.ts +88 -0
- package/dist/contract/health.d.ts +7 -1
- package/dist/contract/index.d.ts +1 -0
- package/dist/contract/index.js +1005 -555
- package/dist/contract/projects.d.ts +33 -5
- package/dist/contract/runs.d.ts +247 -0
- package/dist/contract/skills.d.ts +7 -0
- package/dist/contract/workflows.d.ts +6 -0
- package/dist/contract/workspace.d.ts +137 -2
- package/dist/core/agent-env.js +41 -16
- package/dist/core/agent-env.js.map +1 -1
- package/dist/core/agent-model-policy.d.ts +10 -0
- package/dist/core/agent-model-policy.js +36 -0
- package/dist/core/agent-model-policy.js.map +1 -0
- package/dist/core/agent-profiles.d.ts +62 -0
- package/dist/core/agent-profiles.js +90 -0
- package/dist/core/agent-profiles.js.map +1 -0
- package/dist/core/agent-runner.d.ts +37 -6
- package/dist/core/agent-runner.js +35 -3
- package/dist/core/agent-runner.js.map +1 -1
- package/dist/core/backend-detect.d.ts +5 -5
- package/dist/core/backend-detect.js +44 -7
- package/dist/core/backend-detect.js.map +1 -1
- package/dist/core/claude-cli-runner.js +10 -5
- package/dist/core/claude-cli-runner.js.map +1 -1
- package/dist/core/codex-app-server-runner.js +13 -3
- package/dist/core/codex-app-server-runner.js.map +1 -1
- package/dist/core/codex-app-server-transport.js +7 -2
- package/dist/core/codex-app-server-transport.js.map +1 -1
- package/dist/core/model-identity.d.ts +23 -11
- package/dist/core/model-identity.js +41 -24
- package/dist/core/model-identity.js.map +1 -1
- package/dist/core/model-presets.d.ts +8 -2
- package/dist/core/model-presets.js +51 -8
- package/dist/core/model-presets.js.map +1 -1
- package/dist/core/opencode-model-catalog.d.ts +32 -0
- package/dist/core/opencode-model-catalog.js +153 -0
- package/dist/core/opencode-model-catalog.js.map +1 -0
- package/dist/core/opencode-server-runner.d.ts +2 -0
- package/dist/core/opencode-server-runner.js +42 -11
- package/dist/core/opencode-server-runner.js.map +1 -1
- package/dist/core/pi-runner.d.ts +24 -0
- package/dist/core/pi-runner.js +349 -0
- package/dist/core/pi-runner.js.map +1 -0
- package/dist/core/pi-ui-mapper.d.ts +34 -0
- package/dist/core/pi-ui-mapper.js +270 -0
- package/dist/core/pi-ui-mapper.js.map +1 -0
- package/dist/core/provider-auth.d.ts +95 -3
- package/dist/core/provider-auth.js +234 -15
- package/dist/core/provider-auth.js.map +1 -1
- package/dist/core/provider-availability.d.ts +1 -1
- package/dist/core/provider-availability.js +2 -1
- package/dist/core/provider-availability.js.map +1 -1
- package/dist/core/runner-factory.js +3 -0
- package/dist/core/runner-factory.js.map +1 -1
- package/dist/core/shell-env.d.ts +28 -0
- package/dist/core/shell-env.js +56 -0
- package/dist/core/shell-env.js.map +1 -0
- package/dist/core/ui-events.d.ts +1 -1
- package/dist/core/usage-limit.d.ts +42 -0
- package/dist/core/usage-limit.js +209 -0
- package/dist/core/usage-limit.js.map +1 -0
- package/dist/git-diff-base.d.ts +51 -26
- package/dist/git-diff-base.js +163 -37
- package/dist/git-diff-base.js.map +1 -1
- package/dist/git-worktree.d.ts +15 -6
- package/dist/git-worktree.js +10 -3
- package/dist/git-worktree.js.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/paths.d.ts +53 -5
- package/dist/paths.js +63 -9
- package/dist/paths.js.map +1 -1
- package/dist/planner.js +6 -0
- package/dist/planner.js.map +1 -1
- package/dist/release/snapshot.d.ts +13 -2
- package/dist/release/snapshot.js +25 -1
- package/dist/release/snapshot.js.map +1 -1
- package/dist/runs/agent-tmpdir.d.ts +41 -0
- package/dist/runs/agent-tmpdir.js +183 -0
- package/dist/runs/agent-tmpdir.js.map +1 -0
- package/dist/runs/auto-name.js +6 -1
- package/dist/runs/auto-name.js.map +1 -1
- package/dist/runs/event-history.d.ts +50 -0
- package/dist/runs/event-history.js +613 -0
- package/dist/runs/event-history.js.map +1 -0
- package/dist/runs/run-index.d.ts +19 -0
- package/dist/runs/run-index.js +43 -0
- package/dist/runs/run-index.js.map +1 -0
- package/dist/runs/store.d.ts +78 -19
- package/dist/runs/store.js +175 -43
- package/dist/runs/store.js.map +1 -1
- package/dist/server/capabilities.d.ts +15 -1
- package/dist/server/capabilities.js +16 -1
- package/dist/server/capabilities.js.map +1 -1
- package/dist/server/forge/github.d.ts +169 -0
- package/dist/server/forge/github.js +511 -0
- package/dist/server/forge/github.js.map +1 -1
- package/dist/server/forge/index.d.ts +9 -0
- package/dist/server/forge/index.js +14 -0
- package/dist/server/forge/index.js.map +1 -1
- package/dist/server/git-changes.d.ts +7 -5
- package/dist/server/git-changes.js +15 -10
- package/dist/server/git-changes.js.map +1 -1
- package/dist/server/github.d.ts +2 -2
- package/dist/server/github.js +1 -1
- package/dist/server/github.js.map +1 -1
- package/dist/server/open-in-app.d.ts +2 -1
- package/dist/server/open-in-app.js +3 -1
- package/dist/server/open-in-app.js.map +1 -1
- package/dist/server/open-in-terminal.d.ts +46 -1
- package/dist/server/open-in-terminal.js +72 -13
- package/dist/server/open-in-terminal.js.map +1 -1
- package/dist/server/provider-action-gate.js +3 -1
- package/dist/server/provider-action-gate.js.map +1 -1
- package/dist/server/server.d.ts +2206 -434
- package/dist/server/server.js +1219 -136
- package/dist/server/server.js.map +1 -1
- package/dist/server-install/engine.js +5 -18
- package/dist/server-install/engine.js.map +1 -1
- package/dist/server-install/steps.js +6 -2
- package/dist/server-install/steps.js.map +1 -1
- package/dist/skills.js +4 -0
- package/dist/skills.js.map +1 -1
- package/dist/workflows/run.d.ts +229 -9
- package/dist/workflows/run.js +877 -147
- package/dist/workflows/run.js.map +1 -1
- package/dist/workflows/types.d.ts +3 -0
- package/dist/workflows/types.js +11 -2
- package/dist/workflows/types.js.map +1 -1
- package/dist/workspace/agent-accounts.d.ts +153 -0
- package/dist/workspace/agent-accounts.js +304 -0
- package/dist/workspace/agent-accounts.js.map +1 -0
- package/dist/workspace/agent-profiles.d.ts +78 -0
- package/dist/workspace/agent-profiles.js +115 -0
- package/dist/workspace/agent-profiles.js.map +1 -0
- package/dist/workspace/config.d.ts +27 -1
- package/dist/workspace/config.js +83 -2
- package/dist/workspace/config.js.map +1 -1
- package/dist/workspace/projects-cli.js +54 -4
- package/dist/workspace/projects-cli.js.map +1 -1
- package/dist/workspace/projects.d.ts +19 -1
- package/dist/workspace/projects.js +34 -1
- package/dist/workspace/projects.js.map +1 -1
- package/dist/workspace/semaphore.d.ts +46 -1
- package/dist/workspace/semaphore.js +41 -4
- package/dist/workspace/semaphore.js.map +1 -1
- package/dist/workspace/ui-state.d.ts +3 -2
- package/dist/workspace/ui-state.js +3 -2
- package/dist/workspace/ui-state.js.map +1 -1
- package/package.json +3 -3
- package/scripts/mock-claude.mjs +20 -0
- package/scripts/mock-pi-rpc.mjs +83 -0
- package/web/dist/assets/{alert-dialog-ghffK6g9.js → alert-dialog-Byp42_IG.js} +1 -1
- package/web/dist/assets/arrow-down-CGDbDYKD.js +1 -0
- package/web/dist/assets/arrow-left-ESCjr1Hq.js +1 -0
- package/web/dist/assets/centered-state-LfAW-igm.js +43 -0
- package/web/dist/assets/chevron-right-Du-P1IUd.js +1 -0
- package/web/dist/assets/{collapsible-B0JVzd0B.js → collapsible-CBiiqDJM.js} +1 -1
- package/web/dist/assets/{commit-list-wm6DPHNs.js → commit-list-6PPve7PE.js} +1 -1
- package/web/dist/assets/{compare-variants-DbdP4Y5T.js → compare-variants-BDnp6mXJ.js} +1 -1
- package/web/dist/assets/{diff-Bizc96qe.js → diff-_jK0OWpF.js} +2 -2
- package/web/dist/assets/{diff-stat-Dyfg3ltF.js → diff-stat-CIrTu4Ym.js} +1 -1
- package/web/dist/assets/{diff-view-CG8ek6tC.js → diff-view-COA_5IyY.js} +1 -1
- package/web/dist/assets/dropdown-menu-BofYpFFw.js +1 -0
- package/web/dist/assets/editable-title-_J0zFDl-.js +1 -0
- package/web/dist/assets/{ellipsis-vertical-DpGTRqC2.js → ellipsis-vertical-BeMR-l62.js} +1 -1
- package/web/dist/assets/{file-DlUGpUlb.js → file-DY996Pee.js} +1 -1
- package/web/dist/assets/{folder-BAY6Vddy.js → folder-NO3Ec-TY.js} +1 -1
- package/web/dist/assets/git-toolbar-BqJeUWcD.js +1 -0
- package/web/dist/assets/github-C96HPV9E.js +1 -0
- package/web/dist/assets/{image-preview-BWGk5fPX.js → image-preview-D9cCDfKQ.js} +1 -1
- package/web/dist/assets/index-Bx-grqa9.css +2 -0
- package/web/dist/assets/index-DoVvGDfW.js +7 -0
- package/web/dist/assets/{markdown-BGBOGCA_.js → markdown-DDzk11zj.js} +1 -1
- package/web/dist/assets/new-task-form-BNLLgC6P.js +1 -0
- package/web/dist/assets/pill-CVM1EmV4.js +1 -0
- package/web/dist/assets/{project-router-Cx8NPoqn.js → project-router-LRCtP48W.js} +1 -1
- package/web/dist/assets/prompt-templates-DFOvYgtW.js +15 -0
- package/web/dist/assets/{refresh-cw-BoGdAykg.js → refresh-cw-D1ys6QY2.js} +1 -1
- package/web/dist/assets/repo-git-CzUnsgWY.js +1 -0
- package/web/dist/assets/{run-diff-EcOkf3ti.js → run-diff-BlnqwfSS.js} +2 -2
- package/web/dist/assets/run-header-Bn7cN0Z1.js +1 -0
- package/web/dist/assets/{search-x-X3EpVhgs.js → search-x-D6FSpxId.js} +1 -1
- package/web/dist/assets/{skill-empty-hint-CZLALx6l.js → skill-empty-hint-iwpCcqgI.js} +1 -1
- package/web/dist/assets/skills-CezbOaol.js +1 -0
- package/web/dist/assets/{sparkles-Dt4q7pbG.js → sparkles-MrQrgCI9.js} +1 -1
- package/web/dist/assets/{square-terminal-hwBL8XsC.js → square-terminal-TTH64lO7.js} +1 -1
- package/web/dist/assets/tab-link-FYksz037.js +1 -0
- package/web/dist/assets/task-changes-ClWlnzBL.js +1 -0
- package/web/dist/assets/{task-commits-BTTA5k5T.js → task-commits-Crbrl86b.js} +1 -1
- package/web/dist/assets/{task-files-Da8_4C9g.js → task-files-uSCWyD0-.js} +2 -2
- package/web/dist/assets/task-thread-DPmamBA1.js +9 -0
- package/web/dist/assets/{textarea-CUdokhkv.js → textarea-B9Ahj4E4.js} +1 -1
- package/web/dist/assets/thread-loading-BH_ypQoy.js +1 -0
- package/web/dist/assets/{trash-2-DhVIdWv8.js → trash-2-D8S3V3fu.js} +1 -1
- package/web/dist/assets/{triangle-alert-XYT0DGCI.js → triangle-alert-bB7p9n5E.js} +1 -1
- package/web/dist/assets/{upload-BKjN59-1.js → upload-Bd5oRLPV.js} +1 -1
- package/web/dist/assets/{use-desktop-Bf5LS_P4.js → use-desktop-BNvbRBeZ.js} +1 -1
- package/web/dist/assets/{use-submit-shortcut-CzVyoAMd.js → use-submit-shortcut-B-xhu4Bf.js} +1 -1
- package/web/dist/assets/utils-BhpbVMwN.js +64 -0
- package/web/dist/assets/{workflows-o2QU_pvU.js → workflows-RmfbM9Vy.js} +3 -3
- package/web/dist/assets/{zoomable-image-7WyUiaVD.js → zoomable-image-BCW6ZBV0.js} +1 -1
- package/web/dist/index.html +24 -23
- package/web/dist/assets/arrow-down-Cz8qb71e.js +0 -1
- package/web/dist/assets/arrow-left-wcYKQXI_.js +0 -1
- package/web/dist/assets/centered-state-ZtnFHA-n.js +0 -43
- package/web/dist/assets/chevron-right-G4caF2QV.js +0 -1
- package/web/dist/assets/circle-check--KvBxXWp.js +0 -1
- package/web/dist/assets/circle-x-C3EFZ3xf.js +0 -1
- package/web/dist/assets/dropdown-menu-C1Dlf35P.js +0 -1
- package/web/dist/assets/editable-title-5rC_QRBZ.js +0 -1
- package/web/dist/assets/git-pull-request-agOG0iGM.js +0 -1
- package/web/dist/assets/git-toolbar-DGiNMmtY.js +0 -1
- package/web/dist/assets/github-Vp7lxYGQ.js +0 -1
- package/web/dist/assets/index-DSxyJpuK.css +0 -2
- package/web/dist/assets/index-DiawI6RX.js +0 -6
- package/web/dist/assets/new-task-form-BpAw_Dks.js +0 -1
- package/web/dist/assets/pill-Dvs-P0xy.js +0 -1
- package/web/dist/assets/prompt-templates-CSBYBR1I.js +0 -15
- package/web/dist/assets/repo-git-PmX-BNMo.js +0 -1
- package/web/dist/assets/run-header-BGiv6_qX.js +0 -1
- package/web/dist/assets/skills-CC91ouGH.js +0 -1
- package/web/dist/assets/tab-link-DIlR5T07.js +0 -1
- package/web/dist/assets/task-changes-XkHDxzQA.js +0 -1
- package/web/dist/assets/task-thread-DoNXUsHr.js +0 -9
- package/web/dist/assets/thread-loading-B8q8ukXJ.js +0 -1
- package/web/dist/assets/utils-DsLuRXwV.js +0 -64
|
@@ -2,7 +2,7 @@ import { spawn } from 'node:child_process';
|
|
|
2
2
|
import { accessSync, constants, existsSync } from 'node:fs';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
-
import { openInTerminal } from './open-in-terminal.js';
|
|
5
|
+
import { openInTerminal, refuseSpawnUnderTest } from './open-in-terminal.js';
|
|
6
6
|
import { isWsl, translateToWindowsPath } from './wsl.js';
|
|
7
7
|
const EDITORS = [
|
|
8
8
|
{ id: 'vscode', label: 'VS Code', icon: 'vscode', cli: 'code', mac: 'Visual Studio Code' },
|
|
@@ -81,6 +81,7 @@ const AGENT_CLIS = [
|
|
|
81
81
|
{ runner: 'claude', label: 'Claude CLI', icon: 'claude', bin: 'claude', envBin: process.env.CEZ_CLAUDE_BIN },
|
|
82
82
|
{ runner: 'codex', label: 'Codex CLI', icon: 'codex', bin: 'codex', envBin: process.env.CEZ_CODEX_BIN },
|
|
83
83
|
{ runner: 'opencode', label: 'OpenCode', icon: 'opencode', bin: 'opencode', envBin: process.env.CEZ_OPENCODE_BIN },
|
|
84
|
+
{ runner: 'pi', label: 'pi CLI', icon: 'pi', bin: 'pi', envBin: process.env.CEZ_PI_BIN },
|
|
84
85
|
];
|
|
85
86
|
/** The runner behind a `cli:<runner>` open target, or null when the id isn't a CLI handoff. */
|
|
86
87
|
export function agentCliRunner(targetId) {
|
|
@@ -184,6 +185,7 @@ function pickInstalledMacApp(names) {
|
|
|
184
185
|
/** Spawn detached; success = no error within a short settle window (mirrors open-in-terminal). */
|
|
185
186
|
function runDetached(bin, args) {
|
|
186
187
|
return new Promise((resolve) => {
|
|
188
|
+
refuseSpawnUnderTest(bin, args);
|
|
187
189
|
let child;
|
|
188
190
|
try {
|
|
189
191
|
child = spawn(bin, args, { stdio: 'ignore', detached: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-in-app.js","sourceRoot":"","sources":["../../src/server/open-in-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"open-in-app.js","sourceRoot":"","sources":["../../src/server/open-in-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAuCzD,MAAM,OAAO,GAAgB;IAC3B,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE;IAC1F,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE;IAC/E,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;IAChE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE;IACzF,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE;IAC3F,6FAA6F;IAC7F,yFAAyF;IACzF,6FAA6F;IAC7F,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,kBAAkB,EAAE,wBAAwB,CAAC,EAAE;IACvI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,sBAAsB,CAAC,EAAE;IAC5H,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE;IACzF,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE;IAC/E,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE;IACzF,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE;IACzF,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;IAC1E,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;IAC1E,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE;IAC/G,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;IAC5D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;CACtE,CAAC;AAEF,MAAM,kBAAkB,GACtB,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;AAE5G;;;;;;;gGAOgG;AAChG,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,QAAQ,GAAoB,OAAO,CAAC,QAAQ,EAC5C,GAAG,GAAY,KAAK,EAAE,EACtB,UAAU,GAAW,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;IAE3C,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC5C,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AACrC,CAAC;AAED,wFAAwF;AACxF,SAAS,YAAY,CAAC,KAAwB;IAC5C,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1D,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B;QACE,iBAAiB,IAAI,MAAM;QAC3B,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,IAAI,MAAM,CAAC;QAC9C,wBAAwB,IAAI,MAAM;KACnC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAiB;IACxC,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;iGAEiG;AACjG,MAAM,UAAU,GAA2F;IACzG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;IAC5G,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;IACvG,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE;IAClH,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;CACzF,CAAC;AAEF,+FAA+F;AAC/F,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,QAAQ,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC;AAED;kGACkG;AAClG,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAiB;QAC5B,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3D,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;KACxD,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,eAAe,CAAC,MAAM,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;oFAEoF;AACpF,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,QAAQ,GAAoB,OAAO,CAAC,QAAQ,EAC5C,GAAG,GAAY,KAAK,EAAE;IAEtB,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/D,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAClE,IAAI,GAAG;QAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAC7E,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED;iGACiG;AACjG,KAAK,UAAU,eAAe,CAAC,GAAW;IACxC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;qFAYqF;AACrF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY;IACrD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,OAAO,WAAW,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,GAAW;IAC3D,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IACvD,yFAAyF;IACzF,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,QAAQ;YAAE,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACrH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;uFAGuF;AACvF,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,GAAW,EAAE,GAAG,GAAY,KAAK,EAAE;IACpF,IAAI,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACjF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;gFACgF;AAChF,SAAS,mBAAmB,CAAC,KAAwB;IACnD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1D,OAAO,CACL,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACvB;QACE,iBAAiB,IAAI,MAAM;QAC3B,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,IAAI,MAAM,CAAC;QAC9C,wBAAwB,IAAI,MAAM;KACnC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAC7B,IAAI,UAAU,CAAC,CAAC,CAAE,CACpB,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,SAAS,WAAW,CAAC,GAAW,EAAE,IAAc;IAC9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,EAAW,EAAE,EAAE;YAC7B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,EAAE,CAAC,CAAC;QACd,CAAC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,UAAU,CAAC,GAAG,EAAE;YACd,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -11,7 +11,14 @@
|
|
|
11
11
|
* Returns true when a launcher was started without an immediate error; the
|
|
12
12
|
* caller shows a copy-the-command fallback otherwise.
|
|
13
13
|
*/
|
|
14
|
-
export declare function openInTerminal(cwd: string, command: string
|
|
14
|
+
export declare function openInTerminal(cwd: string, command: string,
|
|
15
|
+
/** Environment the opened shell must carry — today, the agent account's config dir (spec
|
|
16
|
+
* 2026-07-29-agent-profiles). Rendered per platform and made to PERSIST, because the window
|
|
17
|
+
* stays open and the user types the next `claude` in it themselves. An empty/absent env
|
|
18
|
+
* changes nothing about the command. Returns false without launching anything when the
|
|
19
|
+
* values cannot be embedded safely: a terminal silently aimed at the wrong account is worse
|
|
20
|
+
* than no terminal, since nothing in the window would say so. */
|
|
21
|
+
env?: Record<string, string>): Promise<boolean>;
|
|
15
22
|
/** The Windows-side (bin, args) candidates for launching `scriptPath` inside `distro` through
|
|
16
23
|
* WSL interop, in try-order — Windows Terminal first, a classic console window as fallback. Pure
|
|
17
24
|
* (no spawning) so the exact command line is unit-testable without a real WSL host.
|
|
@@ -23,3 +30,41 @@ export declare function openInTerminal(cwd: string, command: string): Promise<bo
|
|
|
23
30
|
* live and be interpreted. `wt.exe` and `conhost.exe` parse no metacharacters, so the same
|
|
24
31
|
* input is inert. `distro` is additionally validated at the source (`wslDistroName`). */
|
|
25
32
|
export declare function wslTerminalLaunchers(scriptPath: string, distro: string): Array<[string, string[]]>;
|
|
33
|
+
/** Grace period before a launch script's directory is removed. Generous next to the
|
|
34
|
+
* ~250 ms each emulator candidate is given, because the cost of being early is a
|
|
35
|
+
* window that never opens, and the cost of being late is a few hundred bytes. */
|
|
36
|
+
export declare const LAUNCH_SCRIPT_TTL_MS = 60000;
|
|
37
|
+
/**
|
|
38
|
+
* Writes the temp launch script shared by the plain-Linux and WSL branches — `cd` into
|
|
39
|
+
* the worktree, run `command`, then drop into an interactive shell so the window stays
|
|
40
|
+
* open — and schedules its own removal (#785).
|
|
41
|
+
*
|
|
42
|
+
* Every "open in terminal" used to leave its `cez-term-*` directory behind forever. On a
|
|
43
|
+
* host whose `/tmp` is a tmpfs that never reboots, cezar's own litter is part of what
|
|
44
|
+
* exhausts the directory the agents' output capture depends on, so the opener cleans up
|
|
45
|
+
* after itself. Deleting the script mid-run is safe: the emulator has already `exec`'d
|
|
46
|
+
* bash on it, and POSIX keeps an unlinked file's inode alive for every open descriptor.
|
|
47
|
+
* The timer is `unref`'d — a pending cleanup must never be the reason `cezar serve`
|
|
48
|
+
* refuses to exit.
|
|
49
|
+
*
|
|
50
|
+
* Exported for the regression test, which must prove the directory does not survive
|
|
51
|
+
* without spawning a real terminal emulator.
|
|
52
|
+
*/
|
|
53
|
+
export declare function createLaunchScript(cwd: string, command: string, ttlMs?: number): string;
|
|
54
|
+
/**
|
|
55
|
+
* A test that reaches a real launcher opens a window on the developer's machine — a Terminal on
|
|
56
|
+
* macOS, a `cmd` window on Windows, an emulator on Linux — and #820 is what that looks like: a
|
|
57
|
+
* suite run left a Terminal sitting in a `cez-profiles-home-*` fixture directory the same run had
|
|
58
|
+
* already deleted. Throwing beats returning `false`: a silent refusal would let the omission
|
|
59
|
+
* survive as a passing test, and the fix is always the same one line — inject the launcher seam
|
|
60
|
+
* (`openTerminal` / `openFile` / `openApp` on `ServerDeps`) instead of reaching the real one.
|
|
61
|
+
*
|
|
62
|
+
* `CEZ_ALLOW_TEST_SPAWN=1` is the deliberate exception, for a file that has replaced
|
|
63
|
+
* `node:child_process` with a mock: nothing reaches a real process there, and asserting the argv a
|
|
64
|
+
* launcher WOULD pass is exactly how the Windows launcher-safety cases (#469, BatBadBut) are
|
|
65
|
+
* pinned. Set it around those tests, never process-wide.
|
|
66
|
+
*
|
|
67
|
+
* Exported so `open-in-app.ts` shares this one definition rather than keeping a second copy that
|
|
68
|
+
* could drift.
|
|
69
|
+
*/
|
|
70
|
+
export declare function refuseSpawnUnderTest(bin: string, args: readonly string[]): void;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
-
import { chmodSync, mkdtempSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { chmodSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import { tmpdir } from 'node:os';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
+
import { shellQuote, withEnvPrefix } from '../core/shell-env.js';
|
|
5
6
|
import { isWsl, wslDistroName } from './wsl.js';
|
|
6
7
|
/**
|
|
7
8
|
* Open a real terminal window at `cwd` running `command` — the "take over the
|
|
@@ -16,9 +17,19 @@ import { isWsl, wslDistroName } from './wsl.js';
|
|
|
16
17
|
* Returns true when a launcher was started without an immediate error; the
|
|
17
18
|
* caller shows a copy-the-command fallback otherwise.
|
|
18
19
|
*/
|
|
19
|
-
export async function openInTerminal(cwd, command
|
|
20
|
+
export async function openInTerminal(cwd, command,
|
|
21
|
+
/** Environment the opened shell must carry — today, the agent account's config dir (spec
|
|
22
|
+
* 2026-07-29-agent-profiles). Rendered per platform and made to PERSIST, because the window
|
|
23
|
+
* stays open and the user types the next `claude` in it themselves. An empty/absent env
|
|
24
|
+
* changes nothing about the command. Returns false without launching anything when the
|
|
25
|
+
* values cannot be embedded safely: a terminal silently aimed at the wrong account is worse
|
|
26
|
+
* than no terminal, since nothing in the window would say so. */
|
|
27
|
+
env = {}) {
|
|
28
|
+
const prefixed = withEnvPrefix(command, env, process.platform);
|
|
29
|
+
if (prefixed === null)
|
|
30
|
+
return false;
|
|
20
31
|
if (process.platform === 'darwin') {
|
|
21
|
-
const script = `cd ${shellQuote(cwd)} && ${
|
|
32
|
+
const script = `cd ${shellQuote(cwd)} && ${prefixed}`;
|
|
22
33
|
return runDetached('osascript', [
|
|
23
34
|
'-e',
|
|
24
35
|
'tell application "Terminal" to activate',
|
|
@@ -27,15 +38,16 @@ export async function openInTerminal(cwd, command) {
|
|
|
27
38
|
]);
|
|
28
39
|
}
|
|
29
40
|
if (process.platform === 'win32') {
|
|
30
|
-
const inner = `cd /d "${cwd}" && ${
|
|
41
|
+
const inner = `cd /d "${cwd}" && ${prefixed}`;
|
|
31
42
|
// Windows Terminal first, classic cmd window as fallback.
|
|
32
|
-
if (await runDetached('cmd', ['/c', 'start', '', 'wt', '-d', cwd, 'cmd', '/K',
|
|
43
|
+
if (await runDetached('cmd', ['/c', 'start', '', 'wt', '-d', cwd, 'cmd', '/K', prefixed])) {
|
|
33
44
|
return true;
|
|
34
45
|
}
|
|
35
46
|
return runDetached('cmd', ['/c', 'start', '', 'cmd', '/K', inner]);
|
|
36
47
|
}
|
|
37
|
-
// Linux/other: a temp script avoids each emulator's own quoting rules.
|
|
38
|
-
|
|
48
|
+
// Linux/other: a temp script avoids each emulator's own quoting rules. It reaps
|
|
49
|
+
// itself afterwards (#785) — see `createLaunchScript`.
|
|
50
|
+
const scriptPath = createLaunchScript(cwd, prefixed);
|
|
39
51
|
if (isWsl()) {
|
|
40
52
|
// No Linux GUI here — go through interop to a Windows terminal, which re-enters this same
|
|
41
53
|
// distro (`wsl.exe -d <distro>`) to run the script we just wrote. `scriptPath`/`cwd` stay
|
|
@@ -77,18 +89,68 @@ export function wslTerminalLaunchers(scriptPath, distro) {
|
|
|
77
89
|
['conhost.exe', ['wsl.exe', '-d', distro, '--', scriptPath]],
|
|
78
90
|
];
|
|
79
91
|
}
|
|
80
|
-
/**
|
|
81
|
-
*
|
|
82
|
-
|
|
92
|
+
/** Grace period before a launch script's directory is removed. Generous next to the
|
|
93
|
+
* ~250 ms each emulator candidate is given, because the cost of being early is a
|
|
94
|
+
* window that never opens, and the cost of being late is a few hundred bytes. */
|
|
95
|
+
export const LAUNCH_SCRIPT_TTL_MS = 60_000;
|
|
96
|
+
/**
|
|
97
|
+
* Writes the temp launch script shared by the plain-Linux and WSL branches — `cd` into
|
|
98
|
+
* the worktree, run `command`, then drop into an interactive shell so the window stays
|
|
99
|
+
* open — and schedules its own removal (#785).
|
|
100
|
+
*
|
|
101
|
+
* Every "open in terminal" used to leave its `cez-term-*` directory behind forever. On a
|
|
102
|
+
* host whose `/tmp` is a tmpfs that never reboots, cezar's own litter is part of what
|
|
103
|
+
* exhausts the directory the agents' output capture depends on, so the opener cleans up
|
|
104
|
+
* after itself. Deleting the script mid-run is safe: the emulator has already `exec`'d
|
|
105
|
+
* bash on it, and POSIX keeps an unlinked file's inode alive for every open descriptor.
|
|
106
|
+
* The timer is `unref`'d — a pending cleanup must never be the reason `cezar serve`
|
|
107
|
+
* refuses to exit.
|
|
108
|
+
*
|
|
109
|
+
* Exported for the regression test, which must prove the directory does not survive
|
|
110
|
+
* without spawning a real terminal emulator.
|
|
111
|
+
*/
|
|
112
|
+
export function createLaunchScript(cwd, command, ttlMs = LAUNCH_SCRIPT_TTL_MS) {
|
|
83
113
|
const dir = mkdtempSync(join(tmpdir(), 'cez-term-'));
|
|
84
114
|
const scriptPath = join(dir, 'launch.sh');
|
|
85
115
|
writeFileSync(scriptPath, `#!/usr/bin/env bash\ncd ${shellQuote(cwd)}\n${command}\nexec bash\n`, 'utf8');
|
|
86
116
|
chmodSync(scriptPath, 0o755);
|
|
117
|
+
const timer = setTimeout(() => {
|
|
118
|
+
try {
|
|
119
|
+
rmSync(dir, { recursive: true, force: true });
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// best-effort: a launch script we cannot remove is litter, not a failure.
|
|
123
|
+
}
|
|
124
|
+
}, ttlMs);
|
|
125
|
+
timer.unref?.();
|
|
87
126
|
return scriptPath;
|
|
88
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* A test that reaches a real launcher opens a window on the developer's machine — a Terminal on
|
|
130
|
+
* macOS, a `cmd` window on Windows, an emulator on Linux — and #820 is what that looks like: a
|
|
131
|
+
* suite run left a Terminal sitting in a `cez-profiles-home-*` fixture directory the same run had
|
|
132
|
+
* already deleted. Throwing beats returning `false`: a silent refusal would let the omission
|
|
133
|
+
* survive as a passing test, and the fix is always the same one line — inject the launcher seam
|
|
134
|
+
* (`openTerminal` / `openFile` / `openApp` on `ServerDeps`) instead of reaching the real one.
|
|
135
|
+
*
|
|
136
|
+
* `CEZ_ALLOW_TEST_SPAWN=1` is the deliberate exception, for a file that has replaced
|
|
137
|
+
* `node:child_process` with a mock: nothing reaches a real process there, and asserting the argv a
|
|
138
|
+
* launcher WOULD pass is exactly how the Windows launcher-safety cases (#469, BatBadBut) are
|
|
139
|
+
* pinned. Set it around those tests, never process-wide.
|
|
140
|
+
*
|
|
141
|
+
* Exported so `open-in-app.ts` shares this one definition rather than keeping a second copy that
|
|
142
|
+
* could drift.
|
|
143
|
+
*/
|
|
144
|
+
export function refuseSpawnUnderTest(bin, args) {
|
|
145
|
+
if (!process.env.VITEST || process.env.CEZ_ALLOW_TEST_SPAWN === '1')
|
|
146
|
+
return;
|
|
147
|
+
throw new Error(`refusing to spawn a launcher from a test: ${[bin, ...args].join(' ')}\n` +
|
|
148
|
+
'Inject the launcher (ServerDeps.openTerminal / openFile / openApp) instead of calling the real one.');
|
|
149
|
+
}
|
|
89
150
|
/** Spawn detached; success = no error within a short settle window. */
|
|
90
151
|
function runDetached(bin, args) {
|
|
91
152
|
return new Promise((resolve) => {
|
|
153
|
+
refuseSpawnUnderTest(bin, args);
|
|
92
154
|
let child;
|
|
93
155
|
try {
|
|
94
156
|
child = spawn(bin, args, { stdio: 'ignore', detached: true });
|
|
@@ -111,9 +173,6 @@ function runDetached(bin, args) {
|
|
|
111
173
|
}, 250);
|
|
112
174
|
});
|
|
113
175
|
}
|
|
114
|
-
function shellQuote(s) {
|
|
115
|
-
return `'${s.replaceAll("'", `'\\''`)}'`;
|
|
116
|
-
}
|
|
117
176
|
function appleScriptQuote(s) {
|
|
118
177
|
return `"${s.replaceAll('\\', '\\\\').replaceAll('"', '\\"')}"`;
|
|
119
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-in-terminal.js","sourceRoot":"","sources":["../../src/server/open-in-terminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"open-in-terminal.js","sourceRoot":"","sources":["../../src/server/open-in-terminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { PROVIDER_IDS } from '../core/provider-auth.js';
|
|
1
2
|
import { stepKind } from '../workflows/types.js';
|
|
2
|
-
const ORDER =
|
|
3
|
+
const ORDER = PROVIDER_IDS;
|
|
3
4
|
const LABEL = {
|
|
4
5
|
claude: 'Claude Code',
|
|
5
6
|
codex: 'Codex',
|
|
6
7
|
opencode: 'OpenCode',
|
|
8
|
+
pi: 'pi',
|
|
7
9
|
};
|
|
8
10
|
export function providersRequiredByWorkflow(workflow, fallback) {
|
|
9
11
|
const required = new Set();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-action-gate.js","sourceRoot":"","sources":["../../src/server/provider-action-gate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider-action-gate.js","sourceRoot":"","sources":["../../src/server/provider-action-gate.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAoB,MAAM,uBAAuB,CAAC;AAEnE,MAAM,KAAK,GAA0B,YAAY,CAAC;AAClD,MAAM,KAAK,GAA+B;IACxC,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,EAAE,EAAE,IAAI;CACT,CAAC;AAEF,MAAM,UAAU,2BAA2B,CACzC,QAAqB,EACrB,QAAoB;IAEpB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAc,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,OAAO;YAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,GAAc,EACd,QAAqB;IAErB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,GAAG,CAAC,MAAM,IAAI,QAAQ,CAAC;AAChC,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAAC,GAAc;IACjD,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa;QAC/B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,aAAa,CAAC;QACzD,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,OAAO,EAAE,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC;IAE7C,6EAA6E;IAC7E,6EAA6E;IAC7E,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IAElC,2EAA2E;IAC3E,4EAA4E;IAC5E,4BAA4B;IAC5B,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAC1C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,QAA+B,EAC/B,QAAgC;IAEhC,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QAC3E,IAAI,GAAG,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3B,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,2DAA2D,CAAC;QACvF,CAAC;QACD,IAAI,GAAG,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,8EAA8E,CAAC;QAC1G,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|