@open-mercato/cezar 0.9.1 → 0.9.2-pr772.1071
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/README.md +36 -17
- 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 +9 -1
- package/dist/agent-config/catalog.js +18 -0
- package/dist/agent-config/catalog.js.map +1 -1
- package/dist/agent-config/files.d.ts +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/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 +30 -0
- package/dist/agent-config/models.js.map +1 -0
- package/dist/agent-config/service.d.ts +1 -1
- package/dist/agent-config/service.js +4 -4
- package/dist/agent-config/service.js.map +1 -1
- package/dist/agent-config/validate.d.ts +1 -1
- package/dist/automations/coordinator.d.ts +26 -0
- package/dist/automations/coordinator.js +66 -0
- package/dist/automations/coordinator.js.map +1 -0
- package/dist/automations/github-poller.d.ts +74 -0
- package/dist/automations/github-poller.js +234 -0
- package/dist/automations/github-poller.js.map +1 -0
- package/dist/automations/scheduler.d.ts +42 -0
- package/dist/automations/scheduler.js +192 -0
- package/dist/automations/scheduler.js.map +1 -0
- package/dist/automations/store.d.ts +65 -0
- package/dist/automations/store.js +298 -0
- package/dist/automations/store.js.map +1 -0
- package/dist/automations/task-template.d.ts +18 -0
- package/dist/automations/task-template.js +95 -0
- package/dist/automations/task-template.js.map +1 -0
- package/dist/automations/types.d.ts +251 -0
- package/dist/automations/types.js +158 -0
- package/dist/automations/types.js.map +1 -0
- package/dist/config.d.ts +17 -112
- package/dist/config.js +45 -4
- package/dist/config.js.map +1 -1
- package/dist/contract/agent-config.d.ts +151 -0
- package/dist/contract/agent-profiles.d.ts +332 -0
- package/dist/contract/automations.d.ts +919 -0
- package/dist/contract/events.d.ts +45 -0
- package/dist/contract/github.d.ts +467 -0
- package/dist/contract/health.d.ts +96 -0
- package/dist/contract/index.d.ts +16 -0
- package/dist/contract/index.js +1614 -0
- package/dist/contract/projects.d.ts +185 -0
- package/dist/contract/repo.d.ts +234 -0
- package/dist/contract/runs.d.ts +1261 -0
- package/dist/contract/skills.d.ts +229 -0
- package/dist/contract/workflows.d.ts +212 -0
- package/dist/contract/workspace.d.ts +490 -0
- package/dist/core/agent-env.d.ts +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 +59 -0
- package/dist/core/agent-profiles.js +83 -0
- package/dist/core/agent-profiles.js.map +1 -0
- package/dist/core/agent-runner.d.ts +12 -1
- package/dist/core/agent-runner.js +13 -0
- package/dist/core/agent-runner.js.map +1 -1
- package/dist/core/ask.d.ts +45 -124
- package/dist/core/ask.js +103 -13
- package/dist/core/ask.js.map +1 -1
- package/dist/core/backend-detect.js +7 -2
- package/dist/core/backend-detect.js.map +1 -1
- package/dist/core/claude-cli-runner.d.ts +2 -2
- package/dist/core/claude-cli-runner.js +52 -9
- package/dist/core/claude-cli-runner.js.map +1 -1
- package/dist/core/claude-ui-mapper.d.ts +1 -1
- package/dist/core/codex-app-server-runner.d.ts +1 -1
- package/dist/core/codex-app-server-runner.js +60 -3
- package/dist/core/codex-app-server-runner.js.map +1 -1
- package/dist/core/codex-app-server-transport.d.ts +6 -1
- package/dist/core/codex-app-server-transport.js +12 -3
- package/dist/core/codex-app-server-transport.js.map +1 -1
- package/dist/core/codex-model-catalog.d.ts +1 -1
- package/dist/core/codex-ui-mapper.d.ts +5 -1
- package/dist/core/codex-ui-mapper.js +74 -17
- package/dist/core/codex-ui-mapper.js.map +1 -1
- package/dist/core/model-identity.d.ts +13 -6
- package/dist/core/model-identity.js +32 -17
- package/dist/core/model-identity.js.map +1 -1
- package/dist/core/model-presets.d.ts +2 -2
- package/dist/core/model-presets.js +1 -1
- package/dist/core/opencode-server-runner.d.ts +2 -2
- package/dist/core/opencode-ui-mapper.d.ts +4 -1
- package/dist/core/opencode-ui-mapper.js +45 -7
- package/dist/core/opencode-ui-mapper.js.map +1 -1
- package/dist/core/provider-auth.d.ts +154 -0
- package/dist/core/provider-auth.js +488 -0
- package/dist/core/provider-auth.js.map +1 -0
- package/dist/core/provider-availability.d.ts +3 -0
- package/dist/core/provider-availability.js +14 -0
- package/dist/core/provider-availability.js.map +1 -0
- package/dist/core/runner-factory.d.ts +1 -1
- package/dist/core/runner-model-catalog.d.ts +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/tool-display.d.ts +1 -1
- package/dist/core/ui-events.d.ts +1 -1
- package/dist/core/ui-events.js +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 +60 -0
- package/dist/git-diff-base.js +54 -0
- package/dist/git-diff-base.js.map +1 -0
- package/dist/git-worktree.d.ts +37 -6
- package/dist/git-worktree.js +39 -9
- package/dist/git-worktree.js.map +1 -1
- package/dist/handoff.d.ts +2 -2
- package/dist/handoff.js +1 -1
- package/dist/index.js +65 -8
- package/dist/index.js.map +1 -1
- package/dist/paths.d.ts +69 -6
- package/dist/paths.js +86 -9
- package/dist/paths.js.map +1 -1
- package/dist/planner.d.ts +2 -2
- package/dist/planner.js +7 -1
- package/dist/planner.js.map +1 -1
- package/dist/release/manifests.d.ts +81 -0
- package/dist/release/manifests.js +74 -0
- package/dist/release/manifests.js.map +1 -0
- package/dist/release/snapshot.d.ts +9 -23
- package/dist/release/snapshot.js +9 -22
- package/dist/release/snapshot.js.map +1 -1
- package/dist/release/stable.d.ts +15 -29
- package/dist/release/stable.js +14 -27
- package/dist/release/stable.js.map +1 -1
- package/dist/runs/auto-name.d.ts +1 -1
- package/dist/runs/auto-name.js +6 -1
- package/dist/runs/auto-name.js.map +1 -1
- package/dist/runs/retention.d.ts +1 -1
- package/dist/runs/store.d.ts +149 -336
- package/dist/runs/store.js +187 -9
- package/dist/runs/store.js.map +1 -1
- package/dist/runs/ui-event-sink.d.ts +1 -1
- package/dist/server/app-type.d.ts +21 -0
- package/dist/server/app-type.js +2 -0
- package/dist/server/app-type.js.map +1 -0
- package/dist/server/capabilities.d.ts +6 -5
- package/dist/server/capabilities.js +11 -0
- package/dist/server/capabilities.js.map +1 -1
- package/dist/server/forge/github.d.ts +58 -151
- package/dist/server/forge/github.js +530 -6
- package/dist/server/forge/github.js.map +1 -1
- package/dist/server/forge/index.d.ts +10 -3
- package/dist/server/forge/index.js +14 -1
- package/dist/server/forge/index.js.map +1 -1
- package/dist/server/forge/types.d.ts +86 -1
- package/dist/server/git-changes.d.ts +8 -8
- package/dist/server/git-changes.js +14 -17
- package/dist/server/git-changes.js.map +1 -1
- package/dist/server/git.d.ts +2 -0
- package/dist/server/git.js +9 -0
- package/dist/server/git.js.map +1 -1
- package/dist/server/github.d.ts +3 -3
- package/dist/server/github.js +1 -1
- package/dist/server/github.js.map +1 -1
- package/dist/server/open-in-terminal.d.ts +8 -1
- package/dist/server/open-in-terminal.js +16 -8
- package/dist/server/open-in-terminal.js.map +1 -1
- package/dist/server/pr.d.ts +2 -2
- package/dist/server/project-context.d.ts +20 -3
- package/dist/server/project-context.js +30 -1
- package/dist/server/project-context.js.map +1 -1
- package/dist/server/provider-action-gate.d.ts +8 -0
- package/dist/server/provider-action-gate.js +54 -0
- package/dist/server/provider-action-gate.js.map +1 -0
- package/dist/server/provider-auth-runtime.d.ts +21 -0
- package/dist/server/provider-auth-runtime.js +66 -0
- package/dist/server/provider-auth-runtime.js.map +1 -0
- package/dist/server/server.d.ts +12128 -47
- package/dist/server/server.js +2652 -917
- package/dist/server/server.js.map +1 -1
- package/dist/server/validators.d.ts +97 -0
- package/dist/server/validators.js +86 -0
- package/dist/server/validators.js.map +1 -0
- package/dist/server/ws.d.ts +2 -2
- package/dist/server/ws.js +2 -2
- package/dist/server/ws.js.map +1 -1
- package/dist/server-install/engine.d.ts +1 -1
- package/dist/server-install/platforms/macosx-ngrok.d.ts +1 -1
- package/dist/server-install/platforms/ubuntu-vps.d.ts +16 -1
- package/dist/server-install/platforms/ubuntu-vps.js +83 -1
- package/dist/server-install/platforms/ubuntu-vps.js.map +1 -1
- package/dist/server-install/state.d.ts +1 -1
- package/dist/server-install/steps.d.ts +2 -2
- package/dist/server-install/strategies.d.ts +1 -1
- package/dist/server-install/types.d.ts +38 -424
- package/dist/server-install/ui.d.ts +1 -1
- package/dist/skills-banner.d.ts +7 -6
- package/dist/skills-banner.js +7 -6
- package/dist/skills-banner.js.map +1 -1
- package/dist/skills-remote.d.ts +2 -2
- package/dist/skills-update.d.ts +88 -0
- package/dist/skills-update.js +392 -0
- package/dist/skills-update.js.map +1 -0
- package/dist/skills.d.ts +2 -0
- package/dist/skills.js +7 -2
- package/dist/skills.js.map +1 -1
- package/dist/todos.d.ts +2 -28
- package/dist/todos.js +1 -1
- package/dist/ui-state.d.ts +16 -2
- package/dist/ui-state.js +14 -1
- package/dist/ui-state.js.map +1 -1
- package/dist/workflows/load.d.ts +1 -1
- package/dist/workflows/run.d.ts +238 -12
- package/dist/workflows/run.js +1103 -115
- package/dist/workflows/run.js.map +1 -1
- package/dist/workflows/types.d.ts +59 -224
- package/dist/workflows/types.js +14 -0
- package/dist/workflows/types.js.map +1 -1
- package/dist/workspace/agent-accounts.d.ts +149 -0
- package/dist/workspace/agent-accounts.js +303 -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 +82 -206
- package/dist/workspace/config.js +183 -14
- package/dist/workspace/config.js.map +1 -1
- package/dist/workspace/migrations.d.ts +1 -1
- package/dist/workspace/migrations.js +19 -4
- package/dist/workspace/migrations.js.map +1 -1
- package/dist/workspace/projects.d.ts +8 -2
- package/dist/workspace/projects.js +9 -3
- package/dist/workspace/projects.js.map +1 -1
- package/dist/workspace/semaphore.d.ts +45 -0
- package/dist/workspace/semaphore.js +45 -1
- package/dist/workspace/semaphore.js.map +1 -1
- package/dist/workspace/ui-state.d.ts +13 -3
- package/dist/workspace/ui-state.js +15 -5
- package/dist/workspace/ui-state.js.map +1 -1
- package/package.json +17 -39
- package/scripts/inline-contract.mjs +112 -0
- package/scripts/mock-claude.mjs +59 -1
- package/scripts/sync-readme.mjs +20 -0
- package/web/dist/assets/alert-dialog-LMDsWZ8t.js +1 -0
- package/web/dist/assets/arrow-down-CDJD8f8N.js +1 -0
- package/web/dist/assets/arrow-left-DUirK4gC.js +1 -0
- package/web/dist/assets/bundle-mjs-BT31bpU6.js +1 -0
- package/web/dist/assets/centered-state-CX0EhxaQ.js +43 -0
- package/web/dist/assets/chevron-right-B70aoBYh.js +1 -0
- package/web/dist/assets/{chunk-BO2N2NFS-DtrdTCWa.js → chunk-BO2N2NFS-DE6qKn3r.js} +8 -8
- package/web/dist/assets/circle-check-C6IhUojk.js +1 -0
- package/web/dist/assets/circle-x-hV9f6Ypp.js +1 -0
- package/web/dist/assets/collapsible-D2igywSh.js +1 -0
- package/web/dist/assets/commit-list-ocsM8XZs.js +1 -0
- package/web/dist/assets/compare-variants-CYdYsQBv.js +1 -0
- package/web/dist/assets/{core-DePtBHcl.js → core-BCsw8oQw.js} +1 -1
- package/web/dist/assets/diff-3y-HnHEH.js +3 -0
- package/web/dist/assets/diff-stat-OeTa1MCD.js +1 -0
- package/web/dist/assets/{diff-view-DCeSegKk.js → diff-view-D8VBKGxl.js} +4 -4
- package/web/dist/assets/dropdown-menu-B9UHiJFv.js +1 -0
- package/web/dist/assets/editable-title-C9aK-GCt.js +1 -0
- package/web/dist/assets/{ellipsis-vertical-CNnSLn5a.js → ellipsis-vertical-BVp0AyW4.js} +1 -1
- package/web/dist/assets/{file-D4GBh1ao.js → file-D1v6Cb9Q.js} +1 -1
- package/web/dist/assets/folder-HNaOtP70.js +1 -0
- package/web/dist/assets/{git-pull-request-DnR8Xh4_.js → git-pull-request-C6KuSF45.js} +1 -1
- package/web/dist/assets/git-toolbar-DpRPWLaM.js +1 -0
- package/web/dist/assets/github-UumAmuAM.js +1 -0
- package/web/dist/assets/highlighted-body-OFNGDK62-BL-MfFgl.js +1 -0
- package/web/dist/assets/highlighter-CdHqIwFr.js +3 -0
- package/web/dist/assets/image-preview-M1y8lBCU.js +1 -0
- package/web/dist/assets/index-BNgqhk51.js +6 -0
- package/web/dist/assets/index-De7KdVHL.css +2 -0
- package/web/dist/assets/lib-BQXq3kEf.js +1 -0
- package/web/dist/assets/lib-BxQXEXDF.js +1 -0
- package/web/dist/assets/markdown-DfljSy6W.js +2 -0
- package/web/dist/assets/mermaid-GHXKKRXX-C4jxqUUb.js +1 -0
- package/web/dist/assets/new-task-form-CkgsW8GC.js +1 -0
- package/web/dist/assets/pill-DWy7Dbv3.js +1 -0
- package/web/dist/assets/project-router-BJR_8pfk.js +1 -0
- package/web/dist/assets/prompt-templates-CKbMbly-.js +15 -0
- package/web/dist/assets/react-runtime-CCIEwYL0.js +9 -0
- package/web/dist/assets/{refresh-cw-BT8E96Tm.js → refresh-cw-Bs4wU0JM.js} +1 -1
- package/web/dist/assets/repo-git-CBbpvexr.js +1 -0
- package/web/dist/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/web/dist/assets/run-diff-CzrO-R7P.js +3 -0
- package/web/dist/assets/run-header-BQDPFKUM.js +1 -0
- package/web/dist/assets/{search-x-BDjaMrzG.js → search-x-sxnYXz0H.js} +1 -1
- package/web/dist/assets/skill-empty-hint-CMfCEn9L.js +1 -0
- package/web/dist/assets/skills-BiWfHmCR.js +1 -0
- package/web/dist/assets/skills-DrG0KcAJ.js +1 -0
- package/web/dist/assets/sparkles-CL1cbhb_.js +1 -0
- package/web/dist/assets/{square-terminal-Ckjjn0vb.js → square-terminal-5JEPtGG-.js} +1 -1
- package/web/dist/assets/tab-link-DVT33Q2m.js +1 -0
- package/web/dist/assets/task-changes-BuuNjQ_C.js +1 -0
- package/web/dist/assets/task-commits-CVjZWXuP.js +1 -0
- package/web/dist/assets/task-files-f7USaQD1.js +2 -0
- package/web/dist/assets/task-thread-Cc7rMyer.js +9 -0
- package/web/dist/assets/textarea-BieGhkR-.js +1 -0
- package/web/dist/assets/thread-loading-CwfY_3r7.js +1 -0
- package/web/dist/assets/{trash-2-DAyZ0VSi.js → trash-2-Cmbuh3Q9.js} +1 -1
- package/web/dist/assets/{triangle-alert-Uy8rokUh.js → triangle-alert-dswtPk4F.js} +1 -1
- package/web/dist/assets/{upload-CDdyPPo_.js → upload-BY1qMAxW.js} +1 -1
- package/web/dist/assets/use-desktop-DrxT9b31.js +1 -0
- package/web/dist/assets/use-submit-shortcut-CULpfw9y.js +1 -0
- package/web/dist/assets/utils-C5bzdO9U.js +64 -0
- package/web/dist/assets/workflows-D6GsX0A9.js +11 -0
- package/web/dist/assets/zoomable-image-CEjRqsuW.js +1 -0
- package/web/dist/index.html +33 -13
- package/scripts/dev.mjs +0 -74
- package/scripts/release-snapshot.mjs +0 -130
- package/scripts/release.mjs +0 -119
- package/web/dist/assets/arrow-left-CnSdp92h.js +0 -1
- package/web/dist/assets/bundle-mjs-BegPhL5c.js +0 -1
- package/web/dist/assets/centered-state-DOsTcJZF.js +0 -43
- package/web/dist/assets/commit-list-BrxBEzRK.js +0 -1
- package/web/dist/assets/compare-variants-Bv2c9ORF.js +0 -1
- package/web/dist/assets/dist-B6XQOhgM.js +0 -1
- package/web/dist/assets/git-toolbar-pIC1ubPM.js +0 -1
- package/web/dist/assets/github-DTTSG0ht.js +0 -1
- package/web/dist/assets/highlighted-body-OFNGDK62-BuFJwunK.js +0 -1
- package/web/dist/assets/image-preview-DEhW0TFz.js +0 -1
- package/web/dist/assets/index-Cijmlz7q.js +0 -30
- package/web/dist/assets/index-DzroxqBG.css +0 -2
- package/web/dist/assets/lib-DPEZDBUN.js +0 -1
- package/web/dist/assets/lib-uHpeUPzK.js +0 -1
- package/web/dist/assets/mermaid-GHXKKRXX-CN2zQue0.js +0 -1
- package/web/dist/assets/open-mercato-toBr6SOa.svg +0 -11
- package/web/dist/assets/project-router-BMx4e8m-.js +0 -1
- package/web/dist/assets/repo-git-BusYfa3t.js +0 -1
- package/web/dist/assets/run-diff-wOJ3odA-.js +0 -3
- package/web/dist/assets/run-header-Cg5incil.js +0 -1
- package/web/dist/assets/skill-empty-hint-DTUSp6Vl.js +0 -1
- package/web/dist/assets/skills-PpP2owbM.js +0 -1
- package/web/dist/assets/tab-link-F3uQrdm2.js +0 -1
- package/web/dist/assets/task-changes-iD9kS79I.js +0 -1
- package/web/dist/assets/task-commits-COkLaUri.js +0 -1
- package/web/dist/assets/task-files-Ckttz7XH.js +0 -2
- package/web/dist/assets/task-thread-CQD91VPt.js +0 -9
- package/web/dist/assets/textarea-Bj_LCreg.js +0 -1
- package/web/dist/assets/use-desktop-DUh0STzq.js +0 -3
- package/web/dist/assets/utils-B8s5qIcK.js +0 -1
- package/web/dist/assets/workflows-BFk8C0co.js +0 -11
- package/web/dist/assets/zoomable-image-PEDOqyLQ.js +0 -1
- /package/web/{open-mercato.svg → dist/open-mercato.svg} +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
+
import { workspaceUiStateSchema } from '../contract/index.js';
|
|
3
4
|
import { cezarHomeDir, workspaceConfigPath } from '../paths.js';
|
|
4
5
|
import { readUiState } from '../ui-state.js';
|
|
5
6
|
import { loadWorkspaceConfig, mergeWriteWorkspaceConfig } from './config.js';
|
|
@@ -82,13 +83,27 @@ const migration001 = {
|
|
|
82
83
|
if (!bootRepoRoot)
|
|
83
84
|
return;
|
|
84
85
|
const repoUiState = await readUiState(bootRepoRoot);
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
// The two prefs that went GLOBAL at step 3.5, read out of the per-repo bag and validated with
|
|
87
|
+
// the DESTINATION's own field schemas. `notifications` is not named by the per-repo contract
|
|
88
|
+
// at all (it left at 3.5), so it arrives through the open catchall as `unknown` — parsing it
|
|
89
|
+
// here is what makes it assignable, and it is also the honest thing: `GET /workspace/ui-state`
|
|
90
|
+
// promises these two keys' shapes, so a hand-edited value must not be promoted into the global
|
|
91
|
+
// file unchecked. A value that does not parse is simply not imported — never a failed boot.
|
|
92
|
+
const shape = workspaceUiStateSchema.shape;
|
|
93
|
+
const importable = {};
|
|
94
|
+
const appearance = shape.appearance.safeParse(repoUiState.appearance);
|
|
95
|
+
if (appearance.success && appearance.data !== undefined)
|
|
96
|
+
importable.appearance = appearance.data;
|
|
97
|
+
const notifications = shape.notifications.safeParse(repoUiState.notifications);
|
|
98
|
+
if (notifications.success && notifications.data !== undefined) {
|
|
99
|
+
importable.notifications = notifications.data;
|
|
100
|
+
}
|
|
101
|
+
if (Object.keys(importable).length === 0)
|
|
87
102
|
return; // nothing to import — don't create the file
|
|
88
103
|
await mergeWriteWorkspaceUiState((state) => {
|
|
89
|
-
for (const key of
|
|
104
|
+
for (const [key, value] of Object.entries(importable)) {
|
|
90
105
|
if (state[key] === undefined)
|
|
91
|
-
state[key] =
|
|
106
|
+
state[key] = value;
|
|
92
107
|
}
|
|
93
108
|
});
|
|
94
109
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/workspace/migrations.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/workspace/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ForgeKind } from '../server/forge/index.ts';
|
|
2
|
+
import { type WorkspaceProject } from './config.ts';
|
|
2
3
|
/**
|
|
3
4
|
* Project registry operations over `~/.cezar/config.json` (spec
|
|
4
5
|
* 2026-07-20-multi-project-workspace, "Project identity" + "Boot flow"):
|
|
@@ -54,6 +55,11 @@ export interface ProjectListEntry extends WorkspaceProject {
|
|
|
54
55
|
status: ProjectStatus;
|
|
55
56
|
/** Current branch when cheaply available (omitted e.g. on an unborn HEAD). */
|
|
56
57
|
branch?: string;
|
|
58
|
+
/** Which forge the root's remote belongs to (#698) — classified from the
|
|
59
|
+
* remote URL alone, no `gh` probe. Omitted when there is no forge remote.
|
|
60
|
+
* The sidebar gates each project group's GitHub tab on this, instead of on
|
|
61
|
+
* the boot folder's health-level forge answer. */
|
|
62
|
+
forge?: ForgeKind;
|
|
57
63
|
}
|
|
58
64
|
/** Test hook: drop cached probes so status changes are visible immediately. */
|
|
59
65
|
export declare function clearProjectProbeCache(): void;
|
|
@@ -64,7 +70,7 @@ export declare function clearProjectProbeCache(): void;
|
|
|
64
70
|
* SAME shape the list route does — one project, one shape, whichever route
|
|
65
71
|
* produced it.
|
|
66
72
|
*/
|
|
67
|
-
export declare function probeProjectStatus(root: string): Promise<Pick<ProjectListEntry, 'status' | 'branch'>>;
|
|
73
|
+
export declare function probeProjectStatus(root: string): Promise<Pick<ProjectListEntry, 'status' | 'branch' | 'forge'>>;
|
|
68
74
|
/**
|
|
69
75
|
* Registry entries in stored order, each with its `status` (+`branch` when
|
|
70
76
|
* available). Probes run concurrently and are TTL-cached per root. A
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { realpath, stat } from 'node:fs/promises';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { basename, join, resolve, sep } from 'node:path';
|
|
4
|
+
import { forgeKindOfRemote } from '../server/forge/index.js';
|
|
4
5
|
import { getRepoInfo } from '../server/git.js';
|
|
5
6
|
import { mergeWriteWorkspaceConfig, loadWorkspaceConfig, } from './config.js';
|
|
6
7
|
/**
|
|
@@ -163,10 +164,15 @@ async function computeProbe(root) {
|
|
|
163
164
|
catch {
|
|
164
165
|
return { status: 'not-git' };
|
|
165
166
|
}
|
|
166
|
-
// Branch
|
|
167
|
-
// unborn HEAD), and a repo without
|
|
167
|
+
// Branch and forge are best-effort garnish: getRepoInfo never throws (null
|
|
168
|
+
// on e.g. an unborn HEAD), and a repo without either is still status ok.
|
|
168
169
|
const info = await getRepoInfo(root);
|
|
169
|
-
|
|
170
|
+
const forge = forgeKindOfRemote(info?.remote);
|
|
171
|
+
return {
|
|
172
|
+
status: 'ok',
|
|
173
|
+
...(info?.branch ? { branch: info.branch } : {}),
|
|
174
|
+
...(forge ? { forge } : {}),
|
|
175
|
+
};
|
|
170
176
|
}
|
|
171
177
|
async function probeRoot(root) {
|
|
172
178
|
const cached = probeCache.get(root);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/workspace/projects.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/workspace/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,12 @@
|
|
|
31
31
|
export interface WorkspaceResourceLimits {
|
|
32
32
|
/** Workspace-wide cap on concurrently *running* agent runs. */
|
|
33
33
|
maxParallel: number;
|
|
34
|
+
/** Durable monitoring sessions that do not consume active-task capacity. */
|
|
35
|
+
maxMonitoringSessions?: number;
|
|
36
|
+
/** Optional automatic monitoring re-check cadence; null means stay parked. */
|
|
37
|
+
monitoringWakeIntervalMinutes?: number | null;
|
|
38
|
+
/** Resume a run stopped by a provider usage limit when that limit resets. Default ON. */
|
|
39
|
+
autoResumeOnUsageLimit?: boolean;
|
|
34
40
|
/** Per-task process-tree memory ceiling in MiB; null = no limit. */
|
|
35
41
|
memoryLimitMb: number | null;
|
|
36
42
|
/**
|
|
@@ -42,6 +48,20 @@ export interface WorkspaceResourceLimits {
|
|
|
42
48
|
*/
|
|
43
49
|
projectLimits?: ReadonlyMap<string, number>;
|
|
44
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* The two kinds of usage-limit hold an account can be under, kept apart because they bind
|
|
53
|
+
* different work (spec 2026-08-03-auto-resume-after-usage-limit):
|
|
54
|
+
*
|
|
55
|
+
* - `deadline` — a run is parked on a reset instant that has not arrived. The window is known to
|
|
56
|
+
* be shut, so this blocks EVERYTHING on that account, resumes included.
|
|
57
|
+
* - `inFlight` — a resume is running right now, re-testing the window. Nothing is proven yet, so
|
|
58
|
+
* this blocks fresh work but NOT other resumes: a resume blocked by a resume is the deadlock
|
|
59
|
+
* that stopped a live workspace dead.
|
|
60
|
+
*/
|
|
61
|
+
export interface AccountHolds {
|
|
62
|
+
deadline: ReadonlySet<string>;
|
|
63
|
+
inFlight: ReadonlySet<string>;
|
|
64
|
+
}
|
|
45
65
|
/** One manager's seam into the shared counter. */
|
|
46
66
|
export interface SemaphoreParticipant {
|
|
47
67
|
/** Slots this manager currently holds. The #347 exemption lives in the
|
|
@@ -56,6 +76,15 @@ export interface SemaphoreParticipant {
|
|
|
56
76
|
* workspace's longest-waiting run instead of whichever manager happens to
|
|
57
77
|
* have registered first. */
|
|
58
78
|
oldestQueuedAt(): number | null;
|
|
79
|
+
/**
|
|
80
|
+
* Agent accounts this participant is holding, by KIND (spec
|
|
81
|
+
* 2026-08-03-auto-resume-after-usage-limit, `RunManager.accountHolds`).
|
|
82
|
+
*
|
|
83
|
+
* Workspace-scoped for the same reason the parallel cap is: a limit closes an ACCOUNT, and one
|
|
84
|
+
* account can be driving tasks in several projects at once. Optional so a stub participant —
|
|
85
|
+
* and any caller that predates the hold — keeps working; absent simply holds nothing.
|
|
86
|
+
*/
|
|
87
|
+
accountHolds?(): AccountHolds;
|
|
59
88
|
}
|
|
60
89
|
export interface WorkspaceSemaphoreOptions {
|
|
61
90
|
/** Snapshot source for `refresh()` — tests inject a stub; production keeps
|
|
@@ -84,8 +113,24 @@ export declare class WorkspaceSemaphore {
|
|
|
84
113
|
busy(): number;
|
|
85
114
|
/** Cached workspace-wide parallel cap. */
|
|
86
115
|
maxParallel(): number;
|
|
116
|
+
maxMonitoringSessions(): number;
|
|
117
|
+
monitoringWakeIntervalMinutes(): number | null;
|
|
118
|
+
/** Whether a usage-limit stop schedules its own resume. Absent (an older `load` stub, a config
|
|
119
|
+
* written before the key existed) reads as ON — the shipped default. */
|
|
120
|
+
autoResumeOnUsageLimit(): boolean;
|
|
87
121
|
/** Cached per-task memory ceiling (MiB), or null for no limit. */
|
|
88
122
|
memoryLimitMb(): number | null;
|
|
123
|
+
/**
|
|
124
|
+
* Every agent account held across the WHOLE workspace, by kind — the union of what each manager
|
|
125
|
+
* reports (spec 2026-08-03-auto-resume-after-usage-limit). A `pump()` consults this before
|
|
126
|
+
* starting a queued run, so a limit hit in one project also stops the same account being walked
|
|
127
|
+
* into the wall from another.
|
|
128
|
+
*
|
|
129
|
+
* Asked live rather than cached: the underlying answer is derived from run records that change
|
|
130
|
+
* on every schedule, resume and cancel, and a stale snapshot here would either stall a queue
|
|
131
|
+
* whose window has reopened or leak a stampede through one that has not.
|
|
132
|
+
*/
|
|
133
|
+
accountHolds(): AccountHolds;
|
|
89
134
|
/**
|
|
90
135
|
* A slot came free somewhere in the workspace: pump EVERY manager,
|
|
91
136
|
* longest-waiting-queue first.
|
|
@@ -13,7 +13,13 @@ function normalizeRootSync(root) {
|
|
|
13
13
|
return resolve(root);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
const DEFAULT_LIMITS = {
|
|
16
|
+
const DEFAULT_LIMITS = {
|
|
17
|
+
maxParallel: 2,
|
|
18
|
+
maxMonitoringSessions: 2,
|
|
19
|
+
monitoringWakeIntervalMinutes: null,
|
|
20
|
+
autoResumeOnUsageLimit: true,
|
|
21
|
+
memoryLimitMb: null,
|
|
22
|
+
};
|
|
17
23
|
/** Production loader: the `resources` slice of `~/.cezar/config.json`
|
|
18
24
|
* (schema-defaulted, so a missing/corrupt file yields the zero-config 2/null),
|
|
19
25
|
* plus the per-project `maxParallel` overrides built into a root→limit map.
|
|
@@ -28,6 +34,9 @@ async function loadResourceLimits() {
|
|
|
28
34
|
}
|
|
29
35
|
return {
|
|
30
36
|
maxParallel: resources.maxParallel,
|
|
37
|
+
maxMonitoringSessions: resources.maxMonitoringSessions,
|
|
38
|
+
monitoringWakeIntervalMinutes: resources.monitoringWakeIntervalMinutes,
|
|
39
|
+
autoResumeOnUsageLimit: resources.autoResumeOnUsageLimit,
|
|
31
40
|
memoryLimitMb: resources.memoryLimitMb,
|
|
32
41
|
projectLimits,
|
|
33
42
|
};
|
|
@@ -63,10 +72,45 @@ export class WorkspaceSemaphore {
|
|
|
63
72
|
maxParallel() {
|
|
64
73
|
return this.limits.maxParallel;
|
|
65
74
|
}
|
|
75
|
+
maxMonitoringSessions() {
|
|
76
|
+
return this.limits.maxMonitoringSessions ?? 2;
|
|
77
|
+
}
|
|
78
|
+
monitoringWakeIntervalMinutes() {
|
|
79
|
+
return this.limits.monitoringWakeIntervalMinutes ?? null;
|
|
80
|
+
}
|
|
81
|
+
/** Whether a usage-limit stop schedules its own resume. Absent (an older `load` stub, a config
|
|
82
|
+
* written before the key existed) reads as ON — the shipped default. */
|
|
83
|
+
autoResumeOnUsageLimit() {
|
|
84
|
+
return this.limits.autoResumeOnUsageLimit ?? true;
|
|
85
|
+
}
|
|
66
86
|
/** Cached per-task memory ceiling (MiB), or null for no limit. */
|
|
67
87
|
memoryLimitMb() {
|
|
68
88
|
return this.limits.memoryLimitMb;
|
|
69
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Every agent account held across the WHOLE workspace, by kind — the union of what each manager
|
|
92
|
+
* reports (spec 2026-08-03-auto-resume-after-usage-limit). A `pump()` consults this before
|
|
93
|
+
* starting a queued run, so a limit hit in one project also stops the same account being walked
|
|
94
|
+
* into the wall from another.
|
|
95
|
+
*
|
|
96
|
+
* Asked live rather than cached: the underlying answer is derived from run records that change
|
|
97
|
+
* on every schedule, resume and cancel, and a stale snapshot here would either stall a queue
|
|
98
|
+
* whose window has reopened or leak a stampede through one that has not.
|
|
99
|
+
*/
|
|
100
|
+
accountHolds() {
|
|
101
|
+
const deadline = new Set();
|
|
102
|
+
const inFlight = new Set();
|
|
103
|
+
for (const participant of this.participants) {
|
|
104
|
+
const holds = participant.accountHolds?.();
|
|
105
|
+
if (!holds)
|
|
106
|
+
continue;
|
|
107
|
+
for (const key of holds.deadline)
|
|
108
|
+
deadline.add(key);
|
|
109
|
+
for (const key of holds.inFlight)
|
|
110
|
+
inFlight.add(key);
|
|
111
|
+
}
|
|
112
|
+
return { deadline, inFlight };
|
|
113
|
+
}
|
|
70
114
|
/**
|
|
71
115
|
* A slot came free somewhere in the workspace: pump EVERY manager,
|
|
72
116
|
* longest-waiting-queue first.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semaphore.js","sourceRoot":"","sources":["../../src/workspace/semaphore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"semaphore.js","sourceRoot":"","sources":["../../src/workspace/semaphore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { WorkspaceUiState } from '../contract/index.js';
|
|
1
2
|
/**
|
|
2
3
|
* `~/.cezar/ui-state.json` — global GUI state, the workspace twin of the
|
|
3
4
|
* per-repo `.ai/cezar/ui-state.json` (spec 2026-07-20-multi-project-workspace,
|
|
@@ -9,8 +10,13 @@
|
|
|
9
10
|
* repo's own file.
|
|
10
11
|
*/
|
|
11
12
|
/** Read `~/.cezar/ui-state.json` on demand — never cached, never throws.
|
|
12
|
-
* Missing, unreadable, malformed, or non-object all degrade to `{}`.
|
|
13
|
-
|
|
13
|
+
* Missing, unreadable, malformed, or non-object all degrade to `{}`.
|
|
14
|
+
*
|
|
15
|
+
* Typed by the CONTRACT (`WorkspaceUiState`) for the same reason as its per-repo twin in
|
|
16
|
+
* `src/ui-state.ts`: `GET /api/v1/workspace/ui-state` answers this value verbatim, so a loose
|
|
17
|
+
* record left the route naming no key. The schema is a `z.looseObject`, so unknown prefs keep
|
|
18
|
+
* round-tripping (BACKWARD_COMPATIBILITY.md §3) — the type only adds the known names. */
|
|
19
|
+
export declare function readWorkspaceUiState(path?: string): Promise<WorkspaceUiState>;
|
|
14
20
|
/**
|
|
15
21
|
* Read-modify-write for `~/.cezar/ui-state.json`, written with the same atomic
|
|
16
22
|
* per-writer tmp+rename `0600` pattern (dir `0700`) as
|
|
@@ -19,5 +25,9 @@ export declare function readWorkspaceUiState(): Promise<Record<string, unknown>>
|
|
|
19
25
|
* corrupt file merges from `{}`. The mutator may mutate its argument in place
|
|
20
26
|
* or return a replacement. Throws on write failure (e.g. a read-only home) —
|
|
21
27
|
* degrading is the caller's policy, per house rules.
|
|
28
|
+
*
|
|
29
|
+
* Path resolved once, before the `await`, for the same reason as
|
|
30
|
+
* `mergeWriteWorkspaceConfig`: a `CEZ_HOME` that changes mid-flight must not be
|
|
31
|
+
* able to send the read and the write to two different files.
|
|
22
32
|
*/
|
|
23
|
-
export declare function mergeWriteWorkspaceUiState(mutator: (state:
|
|
33
|
+
export declare function mergeWriteWorkspaceUiState(mutator: (state: WorkspaceUiState) => WorkspaceUiState | void): Promise<WorkspaceUiState>;
|
|
@@ -12,10 +12,15 @@ import { atomicWriteJsonSync } from './config.js';
|
|
|
12
12
|
* repo's own file.
|
|
13
13
|
*/
|
|
14
14
|
/** Read `~/.cezar/ui-state.json` on demand — never cached, never throws.
|
|
15
|
-
* Missing, unreadable, malformed, or non-object all degrade to `{}`.
|
|
16
|
-
|
|
15
|
+
* Missing, unreadable, malformed, or non-object all degrade to `{}`.
|
|
16
|
+
*
|
|
17
|
+
* Typed by the CONTRACT (`WorkspaceUiState`) for the same reason as its per-repo twin in
|
|
18
|
+
* `src/ui-state.ts`: `GET /api/v1/workspace/ui-state` answers this value verbatim, so a loose
|
|
19
|
+
* record left the route naming no key. The schema is a `z.looseObject`, so unknown prefs keep
|
|
20
|
+
* round-tripping (BACKWARD_COMPATIBILITY.md §3) — the type only adds the known names. */
|
|
21
|
+
export async function readWorkspaceUiState(path = workspaceUiStatePath()) {
|
|
17
22
|
try {
|
|
18
|
-
const parsed = JSON.parse(await readFile(
|
|
23
|
+
const parsed = JSON.parse(await readFile(path, 'utf8'));
|
|
19
24
|
return parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)
|
|
20
25
|
? parsed
|
|
21
26
|
: {};
|
|
@@ -32,11 +37,16 @@ export async function readWorkspaceUiState() {
|
|
|
32
37
|
* corrupt file merges from `{}`. The mutator may mutate its argument in place
|
|
33
38
|
* or return a replacement. Throws on write failure (e.g. a read-only home) —
|
|
34
39
|
* degrading is the caller's policy, per house rules.
|
|
40
|
+
*
|
|
41
|
+
* Path resolved once, before the `await`, for the same reason as
|
|
42
|
+
* `mergeWriteWorkspaceConfig`: a `CEZ_HOME` that changes mid-flight must not be
|
|
43
|
+
* able to send the read and the write to two different files.
|
|
35
44
|
*/
|
|
36
45
|
export async function mergeWriteWorkspaceUiState(mutator) {
|
|
37
|
-
const
|
|
46
|
+
const path = workspaceUiStatePath();
|
|
47
|
+
const current = await readWorkspaceUiState(path);
|
|
38
48
|
const next = mutator(current) ?? current;
|
|
39
|
-
atomicWriteJsonSync(
|
|
49
|
+
atomicWriteJsonSync(path, next);
|
|
40
50
|
return next;
|
|
41
51
|
}
|
|
42
52
|
//# sourceMappingURL=ui-state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-state.js","sourceRoot":"","sources":["../../src/workspace/ui-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-state.js","sourceRoot":"","sources":["../../src/workspace/ui-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;GASG;AAEH;;;;;;0FAM0F;AAC1F,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAI,GAAW,oBAAoB,EAAE;IAErC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACjE,OAAO,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAC5E,CAAC,CAAE,MAA2B;YAC9B,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAA6D;IAE7D,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;IACzC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-mercato/cezar",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2-pr772.1071",
|
|
4
4
|
"description": "Local cockpit for running and tracking AI agent tasks in your repo. Uses your logged-in `claude` CLI and `gh` — zero config, zero database.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -9,9 +9,13 @@
|
|
|
9
9
|
"cez": "dist/index.js",
|
|
10
10
|
"cezar-cli": "dist/index.js"
|
|
11
11
|
},
|
|
12
|
+
"exports": {
|
|
13
|
+
".": "./dist/index.js",
|
|
14
|
+
"./app-type": "./dist/server/app-type.js",
|
|
15
|
+
"./package.json": "./package.json"
|
|
16
|
+
},
|
|
12
17
|
"files": [
|
|
13
18
|
"dist",
|
|
14
|
-
"web/open-mercato.svg",
|
|
15
19
|
"web/dist",
|
|
16
20
|
"scripts",
|
|
17
21
|
"README.md"
|
|
@@ -20,27 +24,22 @@
|
|
|
20
24
|
"node": ">=20"
|
|
21
25
|
},
|
|
22
26
|
"scripts": {
|
|
23
|
-
"
|
|
24
|
-
"build
|
|
27
|
+
"prebuild": "node scripts/sync-readme.mjs",
|
|
28
|
+
"build": "tsc",
|
|
25
29
|
"check:pack": "node scripts/check-pack.mjs",
|
|
26
|
-
"dev": "
|
|
30
|
+
"dev": "tsx src/index.ts",
|
|
27
31
|
"install-as-command": "node scripts/install-as-command.mjs --mode link",
|
|
28
32
|
"install-as-command:global": "node scripts/install-as-command.mjs --mode global",
|
|
29
33
|
"uninstall-as-command": "node scripts/install-as-command.mjs --mode uninstall",
|
|
30
|
-
"dev:server": "tsx src/index.ts",
|
|
31
34
|
"server-install": "tsx src/index.ts server-install",
|
|
32
35
|
"server-deploy": "tsx src/index.ts server-deploy",
|
|
33
36
|
"server-uninstall": "tsx src/index.ts server-uninstall",
|
|
34
|
-
"dev:web": "vite --config web/app/vite.config.ts",
|
|
35
37
|
"test": "vitest run",
|
|
36
38
|
"test:watch": "vitest",
|
|
37
39
|
"test:unit": "node --import tsx --test test/unit/*.test.ts",
|
|
38
40
|
"test:package": "node --import tsx --test test/e2e/*.test.ts",
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"typecheck:server": "tsc --noEmit -p tsconfig.test.json",
|
|
42
|
-
"typecheck:web": "tsc --noEmit -p web/app/tsconfig.json",
|
|
43
|
-
"prepublishOnly": "npm run build"
|
|
41
|
+
"typecheck": "tsc --noEmit -p tsconfig.test.json",
|
|
42
|
+
"postbuild": "node scripts/inline-contract.mjs"
|
|
44
43
|
},
|
|
45
44
|
"dependencies": {
|
|
46
45
|
"@clack/prompts": "^0.11.0",
|
|
@@ -49,43 +48,22 @@
|
|
|
49
48
|
"smol-toml": "^1.7.0",
|
|
50
49
|
"ws": "^8.21.1",
|
|
51
50
|
"yaml": "^2.5.0",
|
|
52
|
-
"zod": "^
|
|
51
|
+
"zod": "^4.4.3"
|
|
53
52
|
},
|
|
54
53
|
"devDependencies": {
|
|
55
|
-
"@
|
|
56
|
-
"@
|
|
57
|
-
"@dnd-kit/utilities": "^3.2.2",
|
|
58
|
-
"@tailwindcss/vite": "^4.3.2",
|
|
59
|
-
"@tanstack/react-query": "^5.101.2",
|
|
60
|
-
"@testing-library/react": "^16.3.2",
|
|
54
|
+
"@open-mercato/cezar-api-client": "0.9.2-pr772.1071",
|
|
55
|
+
"@open-mercato/cezar-contract": "0.9.2-pr772.1071",
|
|
61
56
|
"@types/node": "^20.14.0",
|
|
62
|
-
"@types/react": "^19.2.17",
|
|
63
|
-
"@types/react-dom": "^19.2.3",
|
|
64
57
|
"@types/ws": "^8.18.1",
|
|
65
|
-
"
|
|
66
|
-
"class-variance-authority": "^0.7.1",
|
|
67
|
-
"clsx": "^2.1.1",
|
|
68
|
-
"cmdk": "^1.1.1",
|
|
69
|
-
"jsdom": "^29.1.1",
|
|
70
|
-
"lucide-react": "^1.24.0",
|
|
71
|
-
"radix-ui": "^1.6.2",
|
|
72
|
-
"react": "^19.2.7",
|
|
73
|
-
"react-dom": "^19.2.7",
|
|
74
|
-
"react-router": "^7.18.1",
|
|
75
|
-
"shiki": "^4.3.1",
|
|
76
|
-
"streamdown": "^2.5.0",
|
|
77
|
-
"tailwind-merge": "^3.6.0",
|
|
78
|
-
"tailwindcss": "^4.3.2",
|
|
58
|
+
"esbuild": "^0.28.1",
|
|
79
59
|
"tsx": "^4.19.0",
|
|
80
|
-
"tw-animate-css": "^1.4.0",
|
|
81
60
|
"typescript": "^7.0.2",
|
|
82
|
-
"virtua": "^0.49.3",
|
|
83
|
-
"vite": "^8.1.4",
|
|
84
61
|
"vitest": "^4.1.10"
|
|
85
62
|
},
|
|
86
63
|
"repository": {
|
|
87
64
|
"type": "git",
|
|
88
|
-
"url": "https://github.com/open-mercato/cezar"
|
|
65
|
+
"url": "https://github.com/open-mercato/cezar",
|
|
66
|
+
"directory": "packages/cezar"
|
|
89
67
|
},
|
|
90
68
|
"publishConfig": {
|
|
91
69
|
"access": "public"
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle `@open-mercato/cezar-contract` into `dist` after `tsc`.
|
|
3
|
+
*
|
|
4
|
+
* The contract and the api-client are PRIVATE and ship no build of their own — they are linked as
|
|
5
|
+
* workspace packages and consumed as TypeScript source, which is what every other consumer wants:
|
|
6
|
+
* the cockpit's Vite bundles them, vitest transforms them.
|
|
7
|
+
*
|
|
8
|
+
* This package is the exception, because it is PUBLISHED. `workspace/migrations.ts` imports
|
|
9
|
+
* `workspaceUiStateSchema` — a zod value, not a type — so the installed CLI resolves the contract
|
|
10
|
+
* at runtime, and a tarball naming a package npm has never seen would fail on install. So the
|
|
11
|
+
* build folds it in: esbuild compiles the contract's source to one ESM file under `dist/contract/`,
|
|
12
|
+
* `tsc` emits its declarations beside it, and the emitted references are repointed at both.
|
|
13
|
+
*
|
|
14
|
+
* Nothing is copied at the SOURCE level — the package graph still states the dependency, and this
|
|
15
|
+
* runs only when `dist` actually names it. Delete this the day the contract is published, or the
|
|
16
|
+
* day nothing here imports a contract VALUE.
|
|
17
|
+
*
|
|
18
|
+
* DECLARATIONS ship next to the bundle, and that is not optional. The scan below matches `.d.ts`
|
|
19
|
+
* as well as `.js`, so emitted type imports get repointed too (`dist/ui-state.d.ts` names
|
|
20
|
+
* `WorkspaceUiState`). esbuild emits JavaScript only, so a bundle on its own leaves those
|
|
21
|
+
* declarations naming a module TypeScript cannot resolve — `TS7016`, and the type silently
|
|
22
|
+
* degrades to `any` for anyone consuming the published package. Every tsconfig here sets
|
|
23
|
+
* `skipLibCheck`, so nothing in this repo would have said a word. `tsc --emitDeclarationOnly`
|
|
24
|
+
* mirrors the contract's `src` tree into `dist/contract/`, which is what makes
|
|
25
|
+
* `./contract/index.js` resolve to a real `./contract/index.d.ts`.
|
|
26
|
+
*/
|
|
27
|
+
import { execFileSync } from 'node:child_process';
|
|
28
|
+
import { createRequire } from 'node:module';
|
|
29
|
+
import { existsSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
30
|
+
import { dirname, join, relative } from 'node:path';
|
|
31
|
+
import { fileURLToPath } from 'node:url';
|
|
32
|
+
import { build } from 'esbuild';
|
|
33
|
+
|
|
34
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
35
|
+
const dist = join(here, '..', 'dist');
|
|
36
|
+
const contractRoot = join(here, '..', '..', 'contract');
|
|
37
|
+
const entry = join(contractRoot, 'src', 'index.ts');
|
|
38
|
+
const outdir = join(dist, 'contract');
|
|
39
|
+
const SPEC = /(['"])@open-mercato\/cezar-contract\1/g;
|
|
40
|
+
|
|
41
|
+
/** Emitted files that name the package — the copy happens only if it is really used. */
|
|
42
|
+
const referrers = [];
|
|
43
|
+
const scan = (dir) => {
|
|
44
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
45
|
+
const p = join(dir, entry.name);
|
|
46
|
+
if (entry.isDirectory()) {
|
|
47
|
+
if (p !== outdir) scan(p);
|
|
48
|
+
} else if (/\.(js|d\.ts|js\.map)$/.test(entry.name)) {
|
|
49
|
+
SPEC.lastIndex = 0;
|
|
50
|
+
if (SPEC.test(readFileSync(p, 'utf8'))) referrers.push(p);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
scan(dist);
|
|
55
|
+
|
|
56
|
+
rmSync(outdir, { recursive: true, force: true });
|
|
57
|
+
if (referrers.length === 0) {
|
|
58
|
+
console.log('inline-contract ok — nothing in dist references the contract, nothing bundled');
|
|
59
|
+
process.exit(0);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// `zod` stays external: it is a real dependency of this package, so npm resolves it normally and
|
|
63
|
+
// the tarball does not carry a second copy.
|
|
64
|
+
await build({
|
|
65
|
+
entryPoints: [entry],
|
|
66
|
+
outfile: join(outdir, 'index.js'),
|
|
67
|
+
bundle: true,
|
|
68
|
+
format: 'esm',
|
|
69
|
+
platform: 'neutral',
|
|
70
|
+
target: 'es2022',
|
|
71
|
+
external: ['zod'],
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// `tsc` is located through the module graph rather than a guessed `node_modules` path, because
|
|
75
|
+
// `typescript` is a devDependency of THIS package and may sit here or be hoisted to the workspace
|
|
76
|
+
// root. Via the manifest's own `bin` entry: TypeScript 7's `exports` map does not publish
|
|
77
|
+
// `./bin/tsc`, so resolving that subpath directly is ERR_PACKAGE_PATH_NOT_EXPORTED.
|
|
78
|
+
const require_ = createRequire(import.meta.url);
|
|
79
|
+
const tsManifest = require_.resolve('typescript/package.json');
|
|
80
|
+
const tscBin = join(dirname(tsManifest), require_(tsManifest).bin.tsc);
|
|
81
|
+
|
|
82
|
+
// The declarations for the bundle above. `tsc` mirrors `src/**` into `outdir`, so `index.d.ts`
|
|
83
|
+
// lands beside `index.js` and its relative siblings (`./health.js` → `./health.d.ts`) resolve as
|
|
84
|
+
// TypeScript expects. Those siblings have no runtime twin, which is correct: the bundle is
|
|
85
|
+
// self-contained and nothing imports those paths at runtime.
|
|
86
|
+
execFileSync(
|
|
87
|
+
process.execPath,
|
|
88
|
+
[
|
|
89
|
+
tscBin,
|
|
90
|
+
'--project',
|
|
91
|
+
join(contractRoot, 'tsconfig.json'),
|
|
92
|
+
'--emitDeclarationOnly',
|
|
93
|
+
'--declarationMap',
|
|
94
|
+
'false',
|
|
95
|
+
'--sourceMap',
|
|
96
|
+
'false',
|
|
97
|
+
'--outDir',
|
|
98
|
+
outdir,
|
|
99
|
+
],
|
|
100
|
+
{ stdio: 'inherit' },
|
|
101
|
+
);
|
|
102
|
+
if (!existsSync(join(outdir, 'index.d.ts'))) {
|
|
103
|
+
console.error('inline-contract: tsc emitted no index.d.ts — the bundled contract would ship untyped');
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
for (const p of referrers) {
|
|
108
|
+
let rel = relative(dirname(p), join(outdir, 'index.js')).replaceAll('\\', '/');
|
|
109
|
+
if (!rel.startsWith('.')) rel = `./${rel}`;
|
|
110
|
+
writeFileSync(p, readFileSync(p, 'utf8').replace(SPEC, `'${rel}'`), 'utf8');
|
|
111
|
+
}
|
|
112
|
+
console.log(`inline-contract ok — contract bundled with declarations, ${referrers.length} file(s) repointed`);
|