@wjarka/cezarion 0.10.0-pr30.54
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 +838 -0
- 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 +72 -0
- package/dist/agent-config/catalog.js +223 -0
- package/dist/agent-config/catalog.js.map +1 -0
- package/dist/agent-config/files.d.ts +46 -0
- package/dist/agent-config/files.js +119 -0
- package/dist/agent-config/files.js.map +1 -0
- 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/seed.d.ts +7 -0
- package/dist/agent-config/seed.js +90 -0
- package/dist/agent-config/seed.js.map +1 -0
- package/dist/agent-config/service.d.ts +44 -0
- package/dist/agent-config/service.js +71 -0
- package/dist/agent-config/service.js.map +1 -0
- package/dist/agent-config/validate.d.ts +21 -0
- package/dist/agent-config/validate.js +76 -0
- package/dist/agent-config/validate.js.map +1 -0
- 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 +255 -0
- package/dist/automations/types.js +159 -0
- package/dist/automations/types.js.map +1 -0
- package/dist/config.d.ts +77 -0
- package/dist/config.js +242 -0
- package/dist/config.js.map +1 -0
- package/dist/contract/agent-config.d.ts +153 -0
- package/dist/contract/agent-profiles.d.ts +347 -0
- package/dist/contract/automations.d.ts +935 -0
- package/dist/contract/events.d.ts +104 -0
- package/dist/contract/github.d.ts +556 -0
- package/dist/contract/health.d.ts +102 -0
- package/dist/contract/index.d.ts +16 -0
- package/dist/contract/index.js +1895 -0
- package/dist/contract/projects.d.ts +210 -0
- package/dist/contract/repo.d.ts +234 -0
- package/dist/contract/runs.d.ts +1473 -0
- package/dist/contract/skills.d.ts +232 -0
- package/dist/contract/workflows.d.ts +218 -0
- package/dist/contract/workspace.d.ts +579 -0
- package/dist/core/agent-env.d.ts +31 -0
- package/dist/core/agent-env.js +371 -0
- package/dist/core/agent-env.js.map +1 -0
- 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 +211 -0
- package/dist/core/agent-runner.js +68 -0
- package/dist/core/agent-runner.js.map +1 -0
- package/dist/core/ask.d.ts +105 -0
- package/dist/core/ask.js +187 -0
- package/dist/core/ask.js.map +1 -0
- package/dist/core/backend-detect.d.ts +16 -0
- package/dist/core/backend-detect.js +155 -0
- package/dist/core/backend-detect.js.map +1 -0
- package/dist/core/claude-cli-runner.d.ts +59 -0
- package/dist/core/claude-cli-runner.js +483 -0
- package/dist/core/claude-cli-runner.js.map +1 -0
- package/dist/core/claude-ui-mapper.d.ts +80 -0
- package/dist/core/claude-ui-mapper.js +598 -0
- package/dist/core/claude-ui-mapper.js.map +1 -0
- package/dist/core/codex-app-server-runner.d.ts +41 -0
- package/dist/core/codex-app-server-runner.js +584 -0
- package/dist/core/codex-app-server-runner.js.map +1 -0
- package/dist/core/codex-app-server-transport.d.ts +35 -0
- package/dist/core/codex-app-server-transport.js +150 -0
- package/dist/core/codex-app-server-transport.js.map +1 -0
- package/dist/core/codex-model-catalog.d.ts +10 -0
- package/dist/core/codex-model-catalog.js +110 -0
- package/dist/core/codex-model-catalog.js.map +1 -0
- package/dist/core/codex-ui-mapper.d.ts +112 -0
- package/dist/core/codex-ui-mapper.js +766 -0
- package/dist/core/codex-ui-mapper.js.map +1 -0
- package/dist/core/model-identity.d.ts +125 -0
- package/dist/core/model-identity.js +132 -0
- package/dist/core/model-identity.js.map +1 -0
- package/dist/core/model-presets.d.ts +21 -0
- package/dist/core/model-presets.js +81 -0
- package/dist/core/model-presets.js.map +1 -0
- package/dist/core/ndjson.d.ts +6 -0
- package/dist/core/ndjson.js +23 -0
- package/dist/core/ndjson.js.map +1 -0
- 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 +32 -0
- package/dist/core/opencode-server-runner.js +882 -0
- package/dist/core/opencode-server-runner.js.map +1 -0
- package/dist/core/opencode-ui-mapper.d.ts +137 -0
- package/dist/core/opencode-ui-mapper.js +800 -0
- package/dist/core/opencode-ui-mapper.js.map +1 -0
- package/dist/core/pi-model-catalog.d.ts +31 -0
- package/dist/core/pi-model-catalog.js +152 -0
- package/dist/core/pi-model-catalog.js.map +1 -0
- package/dist/core/pi-runner.d.ts +24 -0
- package/dist/core/pi-runner.js +403 -0
- package/dist/core/pi-runner.js.map +1 -0
- package/dist/core/pi-ui-mapper.d.ts +36 -0
- package/dist/core/pi-ui-mapper.js +304 -0
- package/dist/core/pi-ui-mapper.js.map +1 -0
- package/dist/core/process-usage.d.ts +66 -0
- package/dist/core/process-usage.js +193 -0
- package/dist/core/process-usage.js.map +1 -0
- package/dist/core/provider-auth.d.ts +154 -0
- package/dist/core/provider-auth.js +509 -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 +8 -0
- package/dist/core/runner-factory.js +25 -0
- package/dist/core/runner-factory.js.map +1 -0
- package/dist/core/runner-model-catalog.d.ts +29 -0
- package/dist/core/runner-model-catalog.js +78 -0
- package/dist/core/runner-model-catalog.js.map +1 -0
- package/dist/core/secret-redaction.d.ts +37 -0
- package/dist/core/secret-redaction.js +115 -0
- package/dist/core/secret-redaction.js.map +1 -0
- 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 +31 -0
- package/dist/core/tool-display.js +179 -0
- package/dist/core/tool-display.js.map +1 -0
- package/dist/core/ui-events.d.ts +335 -0
- package/dist/core/ui-events.js +25 -0
- package/dist/core/ui-events.js.map +1 -0
- 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/core/usage.d.ts +11 -0
- package/dist/core/usage.js +15 -0
- package/dist/core/usage.js.map +1 -0
- package/dist/core/v1-text-coalescer.d.ts +36 -0
- package/dist/core/v1-text-coalescer.js +72 -0
- package/dist/core/v1-text-coalescer.js.map +1 -0
- package/dist/git-diff-base.d.ts +85 -0
- package/dist/git-diff-base.js +180 -0
- package/dist/git-diff-base.js.map +1 -0
- package/dist/git-refs.d.ts +11 -0
- package/dist/git-refs.js +14 -0
- package/dist/git-refs.js.map +1 -0
- package/dist/git-worktree.d.ts +161 -0
- package/dist/git-worktree.js +508 -0
- package/dist/git-worktree.js.map +1 -0
- package/dist/handoff.d.ts +62 -0
- package/dist/handoff.js +154 -0
- package/dist/handoff.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +680 -0
- package/dist/index.js.map +1 -0
- package/dist/install-as-command.d.ts +40 -0
- package/dist/install-as-command.js +52 -0
- package/dist/install-as-command.js.map +1 -0
- package/dist/pack-check.d.ts +17 -0
- package/dist/pack-check.js +27 -0
- package/dist/pack-check.js.map +1 -0
- package/dist/paths.d.ts +140 -0
- package/dist/paths.js +192 -0
- package/dist/paths.js.map +1 -0
- package/dist/planner.d.ts +27 -0
- package/dist/planner.js +268 -0
- package/dist/planner.js.map +1 -0
- 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 +67 -0
- package/dist/release/snapshot.js +97 -0
- package/dist/release/snapshot.js.map +1 -0
- package/dist/release/stable.d.ts +38 -0
- package/dist/release/stable.js +55 -0
- package/dist/release/stable.js.map +1 -0
- 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.d.ts +75 -0
- package/dist/runs/auto-name.js +179 -0
- package/dist/runs/auto-name.js.map +1 -0
- 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/retention.d.ts +60 -0
- package/dist/runs/retention.js +86 -0
- package/dist/runs/retention.js.map +1 -0
- package/dist/runs/review-gate.d.ts +18 -0
- package/dist/runs/review-gate.js +21 -0
- package/dist/runs/review-gate.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 +446 -0
- package/dist/runs/store.js +1118 -0
- package/dist/runs/store.js.map +1 -0
- package/dist/runs/task-markers.d.ts +28 -0
- package/dist/runs/task-markers.js +74 -0
- package/dist/runs/task-markers.js.map +1 -0
- package/dist/runs/task-refs.d.ts +25 -0
- package/dist/runs/task-refs.js +74 -0
- package/dist/runs/task-refs.js.map +1 -0
- package/dist/runs/ui-event-sink.d.ts +81 -0
- package/dist/runs/ui-event-sink.js +210 -0
- package/dist/runs/ui-event-sink.js.map +1 -0
- 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 +70 -0
- package/dist/server/capabilities.js +152 -0
- package/dist/server/capabilities.js.map +1 -0
- package/dist/server/checkout.d.ts +128 -0
- package/dist/server/checkout.js +296 -0
- package/dist/server/checkout.js.map +1 -0
- package/dist/server/forge/github.d.ts +513 -0
- package/dist/server/forge/github.js +2364 -0
- package/dist/server/forge/github.js.map +1 -0
- package/dist/server/forge/index.d.ts +40 -0
- package/dist/server/forge/index.js +72 -0
- package/dist/server/forge/index.js.map +1 -0
- package/dist/server/forge/types.d.ts +242 -0
- package/dist/server/forge/types.js +2 -0
- package/dist/server/forge/types.js.map +1 -0
- package/dist/server/fs-browse.d.ts +105 -0
- package/dist/server/fs-browse.js +182 -0
- package/dist/server/fs-browse.js.map +1 -0
- package/dist/server/git-changes.d.ts +213 -0
- package/dist/server/git-changes.js +555 -0
- package/dist/server/git-changes.js.map +1 -0
- package/dist/server/git.d.ts +28 -0
- package/dist/server/git.js +112 -0
- package/dist/server/git.js.map +1 -0
- package/dist/server/github.d.ts +9 -0
- package/dist/server/github.js +8 -0
- package/dist/server/github.js.map +1 -0
- package/dist/server/launch-key.d.ts +7 -0
- package/dist/server/launch-key.js +33 -0
- package/dist/server/launch-key.js.map +1 -0
- package/dist/server/open-in-app.d.ts +66 -0
- package/dist/server/open-in-app.js +211 -0
- package/dist/server/open-in-app.js.map +1 -0
- package/dist/server/open-in-terminal.d.ts +70 -0
- package/dist/server/open-in-terminal.js +179 -0
- package/dist/server/open-in-terminal.js.map +1 -0
- package/dist/server/pr.d.ts +7 -0
- package/dist/server/pr.js +7 -0
- package/dist/server/pr.js.map +1 -0
- package/dist/server/project-context.d.ts +120 -0
- package/dist/server/project-context.js +182 -0
- package/dist/server/project-context.js.map +1 -0
- package/dist/server/provider-action-gate.d.ts +8 -0
- package/dist/server/provider-action-gate.js +56 -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 +13138 -0
- package/dist/server/server.js +5263 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/static-ui.d.ts +49 -0
- package/dist/server/static-ui.js +92 -0
- package/dist/server/static-ui.js.map +1 -0
- 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 +85 -0
- package/dist/server/ws.js +218 -0
- package/dist/server/ws.js.map +1 -0
- package/dist/server/wsl.d.ts +25 -0
- package/dist/server/wsl.js +92 -0
- package/dist/server/wsl.js.map +1 -0
- package/dist/server-install/engine.d.ts +50 -0
- package/dist/server-install/engine.js +324 -0
- package/dist/server-install/engine.js.map +1 -0
- package/dist/server-install/platforms/macosx-ngrok.d.ts +6 -0
- package/dist/server-install/platforms/macosx-ngrok.js +345 -0
- package/dist/server-install/platforms/macosx-ngrok.js.map +1 -0
- package/dist/server-install/platforms/ubuntu-vps.d.ts +78 -0
- package/dist/server-install/platforms/ubuntu-vps.js +1016 -0
- package/dist/server-install/platforms/ubuntu-vps.js.map +1 -0
- package/dist/server-install/state.d.ts +52 -0
- package/dist/server-install/state.js +182 -0
- package/dist/server-install/state.js.map +1 -0
- package/dist/server-install/steps.d.ts +109 -0
- package/dist/server-install/steps.js +334 -0
- package/dist/server-install/steps.js.map +1 -0
- package/dist/server-install/strategies.d.ts +4 -0
- package/dist/server-install/strategies.js +20 -0
- package/dist/server-install/strategies.js.map +1 -0
- package/dist/server-install/types.d.ts +287 -0
- package/dist/server-install/types.js +121 -0
- package/dist/server-install/types.js.map +1 -0
- package/dist/server-install/ui.d.ts +42 -0
- package/dist/server-install/ui.js +130 -0
- package/dist/server-install/ui.js.map +1 -0
- package/dist/skills-banner.d.ts +22 -0
- package/dist/skills-banner.js +41 -0
- package/dist/skills-banner.js.map +1 -0
- package/dist/skills-remote.d.ts +84 -0
- package/dist/skills-remote.js +468 -0
- package/dist/skills-remote.js.map +1 -0
- 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 +82 -0
- package/dist/skills.js +251 -0
- package/dist/skills.js.map +1 -0
- package/dist/todos.d.ts +48 -0
- package/dist/todos.js +201 -0
- package/dist/todos.js.map +1 -0
- package/dist/ui-state.d.ts +26 -0
- package/dist/ui-state.js +38 -0
- package/dist/ui-state.js.map +1 -0
- package/dist/update-check.d.ts +12 -0
- package/dist/update-check.js +41 -0
- package/dist/update-check.js.map +1 -0
- package/dist/workflows/load.d.ts +15 -0
- package/dist/workflows/load.js +56 -0
- package/dist/workflows/load.js.map +1 -0
- package/dist/workflows/run.d.ts +758 -0
- package/dist/workflows/run.js +3389 -0
- package/dist/workflows/run.js.map +1 -0
- package/dist/workflows/types.d.ts +153 -0
- package/dist/workflows/types.js +212 -0
- package/dist/workflows/types.js.map +1 -0
- 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 +169 -0
- package/dist/workspace/config.js +379 -0
- package/dist/workspace/config.js.map +1 -0
- package/dist/workspace/migrations.d.ts +45 -0
- package/dist/workspace/migrations.js +147 -0
- package/dist/workspace/migrations.js.map +1 -0
- package/dist/workspace/projects-cli.d.ts +25 -0
- package/dist/workspace/projects-cli.js +172 -0
- package/dist/workspace/projects-cli.js.map +1 -0
- package/dist/workspace/projects.d.ts +109 -0
- package/dist/workspace/projects.js +250 -0
- package/dist/workspace/projects.js.map +1 -0
- package/dist/workspace/semaphore.d.ts +179 -0
- package/dist/workspace/semaphore.js +195 -0
- package/dist/workspace/semaphore.js.map +1 -0
- package/dist/workspace/ui-state.d.ts +34 -0
- package/dist/workspace/ui-state.js +53 -0
- package/dist/workspace/ui-state.js.map +1 -0
- package/package.json +70 -0
- package/scripts/check-pack.mjs +46 -0
- package/scripts/inline-contract.mjs +112 -0
- package/scripts/install-as-command.mjs +120 -0
- package/scripts/mock-claude.mjs +520 -0
- package/scripts/mock-pi-rpc.mjs +83 -0
- package/scripts/sync-readme.mjs +20 -0
- package/scripts/test-process-usage.mjs +47 -0
- package/web/dist/assets/alert-dialog-B4Ofsgv7.js +1 -0
- package/web/dist/assets/arrow-down-Dy8dup7j.js +1 -0
- package/web/dist/assets/arrow-left-BJaucbhn.js +1 -0
- package/web/dist/assets/bundle-mjs-BT31bpU6.js +1 -0
- package/web/dist/assets/centered-state-duPW0phQ.js +43 -0
- package/web/dist/assets/chevron-right-Be4A5TCS.js +1 -0
- package/web/dist/assets/chunk-BO2N2NFS-DE6qKn3r.js +131 -0
- package/web/dist/assets/collapsible-DdcNBdSk.js +1 -0
- package/web/dist/assets/commit-list-CgvN9vec.js +1 -0
- package/web/dist/assets/compare-variants-CQA2nd65.js +1 -0
- package/web/dist/assets/core-BCsw8oQw.js +12 -0
- package/web/dist/assets/css-BsVw1vtW.js +1 -0
- package/web/dist/assets/diff-B6Agp5Hl.js +3 -0
- package/web/dist/assets/diff-stat-BoXuGkgq.js +1 -0
- package/web/dist/assets/diff-view-CD8XI-fj.js +6 -0
- package/web/dist/assets/diff-woXpYk--.js +1 -0
- package/web/dist/assets/dropdown-menu-B3SYw-k5.js +1 -0
- package/web/dist/assets/editable-title-B-hjp5wl.js +1 -0
- package/web/dist/assets/ellipsis-vertical-BYwzw0xl.js +1 -0
- package/web/dist/assets/engine-javascript-FQvzRocB.js +141 -0
- package/web/dist/assets/file-BRj5eISx.js +1 -0
- package/web/dist/assets/folder-z4oT5981.js +1 -0
- package/web/dist/assets/git-toolbar-owSEkYld.js +1 -0
- package/web/dist/assets/github-Bz2VgRX3.js +1 -0
- package/web/dist/assets/go-rLFTqkRN.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/html-BY76lXLH.js +1 -0
- package/web/dist/assets/image-preview-h3WFluuy.js +1 -0
- package/web/dist/assets/index-BbcQNT92.css +2 -0
- package/web/dist/assets/index-EtQQQ6Kj.js +7 -0
- package/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/web/dist/assets/javascript-BgS3c2Ky.js +1 -0
- package/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/web/dist/assets/json-qhed-kSA.js +1 -0
- package/web/dist/assets/jsonc-CYpm1nAK.js +1 -0
- package/web/dist/assets/jsx-Bz0zcwM4.js +1 -0
- package/web/dist/assets/lib-BQXq3kEf.js +1 -0
- package/web/dist/assets/lib-BxQXEXDF.js +1 -0
- package/web/dist/assets/markdown-BYOwaDjH.js +1 -0
- package/web/dist/assets/markdown-DqBKYPiB.js +2 -0
- package/web/dist/assets/mermaid-GHXKKRXX-C4jxqUUb.js +1 -0
- package/web/dist/assets/new-task-form-BdJKRBJX.js +1 -0
- package/web/dist/assets/pill-BQfmfpYp.js +1 -0
- package/web/dist/assets/project-router-DxgFZY1l.js +1 -0
- package/web/dist/assets/prompt-templates-B6m16gq-.js +15 -0
- package/web/dist/assets/python-gzcpVVnB.js +1 -0
- package/web/dist/assets/react-runtime-CCIEwYL0.js +9 -0
- package/web/dist/assets/refresh-cw-mhSpxf2a.js +1 -0
- package/web/dist/assets/repo-git-CUNRxR3_.js +1 -0
- package/web/dist/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/web/dist/assets/run-diff-DsmmDVfx.js +3 -0
- package/web/dist/assets/run-header-BkhrseLJ.js +1 -0
- package/web/dist/assets/rust-Cfkwpbl8.js +1 -0
- package/web/dist/assets/search-x-BqDMB2g8.js +1 -0
- package/web/dist/assets/shellscript-CLZ0U2zV.js +1 -0
- package/web/dist/assets/skill-empty-hint-BWEvTggc.js +1 -0
- package/web/dist/assets/skills-9oR_oHse.js +1 -0
- package/web/dist/assets/skills-DwIxnnWO.js +1 -0
- package/web/dist/assets/sparkles-DIoTQpyx.js +1 -0
- package/web/dist/assets/sql-BsFa4tDR.js +1 -0
- package/web/dist/assets/square-terminal-Cc7CuQxc.js +1 -0
- package/web/dist/assets/tab-link-D1fQgpmO.js +1 -0
- package/web/dist/assets/task-changes-BKeLlDpK.js +1 -0
- package/web/dist/assets/task-commits-gcEFZIa5.js +1 -0
- package/web/dist/assets/task-files-BGAqoXTW.js +2 -0
- package/web/dist/assets/task-thread-DT8aUYTS.js +9 -0
- package/web/dist/assets/textarea-BOVbfy5C.js +1 -0
- package/web/dist/assets/thread-loading-CypW73KD.js +1 -0
- package/web/dist/assets/toml-CcmNWLt0.js +1 -0
- package/web/dist/assets/trash-2-CJq6LHWn.js +1 -0
- package/web/dist/assets/triangle-alert-CjDFvU27.js +1 -0
- package/web/dist/assets/tsx-udAQXfEw.js +1 -0
- package/web/dist/assets/typescript-bsJCZSQ-.js +1 -0
- package/web/dist/assets/upload-CPDZlJeK.js +1 -0
- package/web/dist/assets/use-desktop-5JsLmi0a.js +1 -0
- package/web/dist/assets/use-submit-shortcut-CHVFevty.js +1 -0
- package/web/dist/assets/utils-DiO6zyJd.js +64 -0
- package/web/dist/assets/workflows-rQDFzWRt.js +11 -0
- package/web/dist/assets/yaml-rwi0_p6S.js +1 -0
- package/web/dist/assets/zoomable-image-COWqb11v.js +1 -0
- package/web/dist/index.html +80 -0
- package/web/dist/open-mercato.svg +11 -0
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { rmSync } from 'node:fs';
|
|
3
|
+
import { lstat, open, readFile, readdir, realpath, stat } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { join, resolve, sep } from 'node:path';
|
|
6
|
+
import { resolveTaskDiffBase } from '../git-diff-base.js';
|
|
7
|
+
import { isSafeGitRef } from '../git-refs.js';
|
|
8
|
+
/** Run git, never throw — degradation is the caller's policy. `env` overrides (e.g. a scratch
|
|
9
|
+
* `GIT_INDEX_FILE`) merge over the process env. */
|
|
10
|
+
function git(cwd, args, env) {
|
|
11
|
+
return new Promise((resolvePromise) => {
|
|
12
|
+
execFile('git', args, {
|
|
13
|
+
cwd,
|
|
14
|
+
maxBuffer: 32 * 1024 * 1024,
|
|
15
|
+
encoding: 'utf8',
|
|
16
|
+
...(env ? { env: { ...process.env, ...env } } : {}),
|
|
17
|
+
}, (err, stdout, stderr) => resolvePromise({ ok: !err, stdout: stdout ?? '', stderr: stderr ?? '' }));
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** First line of git's stderr (or stdout) as a one-line human reason. */
|
|
21
|
+
function gitReason(res, fallback) {
|
|
22
|
+
const text = (res.stderr.trim() || res.stdout.trim()).split('\n')[0]?.trim();
|
|
23
|
+
return text || fallback;
|
|
24
|
+
}
|
|
25
|
+
// ---- structured changes -----------------------------------------------------
|
|
26
|
+
/** Per-file patch cap — the GUI shows a "truncated" note past this. */
|
|
27
|
+
const PATCH_CAP = 200_000;
|
|
28
|
+
/** Parse `git diff --numstat -z -M`: `adds TAB dels TAB path NUL`, or for a
|
|
29
|
+
* rename/copy `adds TAB dels TAB NUL old NUL new NUL`. Binary files report
|
|
30
|
+
* `-` for both counters. Exported for tests. */
|
|
31
|
+
export function parseNumstatZ(out) {
|
|
32
|
+
const tokens = out.split('\0');
|
|
33
|
+
const entries = [];
|
|
34
|
+
let i = 0;
|
|
35
|
+
while (i < tokens.length) {
|
|
36
|
+
const head = tokens[i] ?? '';
|
|
37
|
+
if (!head) {
|
|
38
|
+
i += 1;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const m = /^(\d+|-)\t(\d+|-)\t([\s\S]*)$/.exec(head);
|
|
42
|
+
if (!m) {
|
|
43
|
+
i += 1;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const binary = m[1] === '-';
|
|
47
|
+
const adds = binary ? 0 : Number(m[1]);
|
|
48
|
+
const dels = m[2] === '-' ? 0 : Number(m[2]);
|
|
49
|
+
if (m[3]) {
|
|
50
|
+
entries.push({ adds, dels, binary, path: m[3] });
|
|
51
|
+
i += 1;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
entries.push({ adds, dels, binary, oldPath: tokens[i + 1] ?? '', path: tokens[i + 2] ?? '' });
|
|
55
|
+
i += 3;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return entries;
|
|
59
|
+
}
|
|
60
|
+
/** Parse `git diff --name-status -z -M`: `X NUL path NUL`, renames/copies
|
|
61
|
+
* `Rnnn NUL old NUL new NUL`. Exported for tests. */
|
|
62
|
+
export function parseNameStatusZ(out) {
|
|
63
|
+
const tokens = out.split('\0');
|
|
64
|
+
const entries = [];
|
|
65
|
+
let i = 0;
|
|
66
|
+
while (i < tokens.length) {
|
|
67
|
+
const status = tokens[i] ?? '';
|
|
68
|
+
if (!status) {
|
|
69
|
+
i += 1;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (/^[RC]/.test(status)) {
|
|
73
|
+
entries.push({ status, oldPath: tokens[i + 1] ?? '', path: tokens[i + 2] ?? '' });
|
|
74
|
+
i += 3;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
entries.push({ status, path: tokens[i + 1] ?? '' });
|
|
78
|
+
i += 2;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return entries;
|
|
82
|
+
}
|
|
83
|
+
/** Split one `git diff --patch` blob into per-file sections, in git's file
|
|
84
|
+
* order (the same order `--numstat`/`--name-status` use). Exported for tests. */
|
|
85
|
+
export function splitPatch(patch) {
|
|
86
|
+
if (!patch.trim())
|
|
87
|
+
return [];
|
|
88
|
+
const starts = [];
|
|
89
|
+
const re = /^diff --git /gm;
|
|
90
|
+
for (let m = re.exec(patch); m; m = re.exec(patch))
|
|
91
|
+
starts.push(m.index);
|
|
92
|
+
return starts.map((start, idx) => patch.slice(start, starts[idx + 1] ?? patch.length));
|
|
93
|
+
}
|
|
94
|
+
/** Undo git's C-style path quoting (`core.quotePath`): git wraps paths with
|
|
95
|
+
* special bytes in double-quotes and escapes `\`, `"`, `\t`, `\n`, `\r`, `\f`
|
|
96
|
+
* plus octal `\NNN` byte escapes. Unquoted input (the common ASCII case, and
|
|
97
|
+
* anything containing only a space) is returned verbatim. Octal escapes are
|
|
98
|
+
* decoded per byte, which is lossy for multibyte UTF-8 names — those rare
|
|
99
|
+
* paths simply miss the map and fall back to positional matching below. */
|
|
100
|
+
function unquoteGitPath(raw) {
|
|
101
|
+
if (!raw.startsWith('"') || !raw.endsWith('"'))
|
|
102
|
+
return raw;
|
|
103
|
+
const inner = raw.slice(1, -1);
|
|
104
|
+
return inner.replace(/\\([\\"tnrf])|\\([0-7]{3})/g, (_m, esc, oct) => {
|
|
105
|
+
if (oct)
|
|
106
|
+
return String.fromCharCode(parseInt(oct, 8));
|
|
107
|
+
switch (esc) {
|
|
108
|
+
case 't':
|
|
109
|
+
return '\t';
|
|
110
|
+
case 'n':
|
|
111
|
+
return '\n';
|
|
112
|
+
case 'r':
|
|
113
|
+
return '\r';
|
|
114
|
+
case 'f':
|
|
115
|
+
return '\f';
|
|
116
|
+
default:
|
|
117
|
+
return esc ?? '';
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/** The new-side ("b/") path a single `git diff` section describes, or null when
|
|
122
|
+
* it can't be resolved. Renames/copies report their target; a deletion reports
|
|
123
|
+
* its removed ("a/") path — the exact path `git diff --name-status` lists for
|
|
124
|
+
* the same entry, so the two associate by path. The `---`/`+++` lines carry one
|
|
125
|
+
* path each (never ambiguous, even with spaces); only binary/mode-only/submodule
|
|
126
|
+
* sections, which lack them, fall back to the `diff --git` header. */
|
|
127
|
+
function sectionPath(section) {
|
|
128
|
+
const renameTo = section.match(/^rename to (.+)$/m) ?? section.match(/^copy to (.+)$/m);
|
|
129
|
+
if (renameTo)
|
|
130
|
+
return unquoteGitPath(renameTo[1] ?? '');
|
|
131
|
+
const plus = section.match(/^\+\+\+ (.+)$/m);
|
|
132
|
+
if (plus && plus[1] !== '/dev/null')
|
|
133
|
+
return stripSidePrefix(unquoteGitPath(plus[1] ?? ''));
|
|
134
|
+
const minus = section.match(/^--- (.+)$/m);
|
|
135
|
+
if (minus && minus[1] !== '/dev/null')
|
|
136
|
+
return stripSidePrefix(unquoteGitPath(minus[1] ?? ''));
|
|
137
|
+
const nl = section.indexOf('\n');
|
|
138
|
+
const header = nl < 0 ? section : section.slice(0, nl);
|
|
139
|
+
const quoted = header.match(/^diff --git (?:"a\/.*"|a\/\S+) (?:"b\/(.*)"|b\/(\S+))$/);
|
|
140
|
+
if (quoted)
|
|
141
|
+
return unquoteGitPath(quoted[1] != null ? `"${quoted[1]}"` : (quoted[2] ?? ''));
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
/** Strip the single leading `a/` or `b/` diff prefix (a real path segment named
|
|
145
|
+
* `a`/`b` keeps its later segments — only the first prefix is removed). */
|
|
146
|
+
function stripSidePrefix(p) {
|
|
147
|
+
return p.replace(/^[ab]\//, '');
|
|
148
|
+
}
|
|
149
|
+
/** Map each `git diff --patch` section to the file path it describes, so a file's
|
|
150
|
+
* patch is looked up by path rather than by position. This is robust to the two
|
|
151
|
+
* listings (`--name-status` and `--patch`) disagreeing on file count — the case
|
|
152
|
+
* where positional matching used to blank *every* file's patch. Exported for tests. */
|
|
153
|
+
export function patchByPath(sections) {
|
|
154
|
+
const map = new Map();
|
|
155
|
+
for (const section of sections) {
|
|
156
|
+
const path = sectionPath(section);
|
|
157
|
+
if (path != null && !map.has(path))
|
|
158
|
+
map.set(path, section);
|
|
159
|
+
}
|
|
160
|
+
return map;
|
|
161
|
+
}
|
|
162
|
+
function statusWord(letter) {
|
|
163
|
+
switch (letter[0]) {
|
|
164
|
+
case 'A':
|
|
165
|
+
return 'added';
|
|
166
|
+
case 'D':
|
|
167
|
+
return 'deleted';
|
|
168
|
+
case 'R':
|
|
169
|
+
return 'renamed';
|
|
170
|
+
case 'C':
|
|
171
|
+
return 'copied';
|
|
172
|
+
default:
|
|
173
|
+
// M, T (typechange), U — the GUI treats them all as "modified".
|
|
174
|
+
return 'modified';
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Structured "what changed here" for a directory vs its base branch:
|
|
179
|
+
* committed + uncommitted + untracked (via `add -N`), anchored by the shared
|
|
180
|
+
* `resolveTaskDiffBase` rule (`src/git-diff-base.ts`) — the merge-base against
|
|
181
|
+
* the freshest base ref, so the diff stays *this task's* changes even after the
|
|
182
|
+
* base moves on, and the branch's state at `runStartedAt` when the agent
|
|
183
|
+
* repointed the worktree onto another branch (#591, #751).
|
|
184
|
+
* `worktreeShortstat` resolves through the same helper; the text-blob `/diff`
|
|
185
|
+
* endpoint (`worktreeDiff`) deliberately does not — see its own note.
|
|
186
|
+
*/
|
|
187
|
+
export async function collectChanges(dir, baseBranch, opts = {}) {
|
|
188
|
+
if (!isSafeGitRef(baseBranch))
|
|
189
|
+
return { ok: false, error: 'refusing option-like base ref' };
|
|
190
|
+
const patchCap = opts.patchCap ?? PATCH_CAP;
|
|
191
|
+
// `git add -N .` (intent-to-add) makes untracked files appear in the diff, but it MUTATES the
|
|
192
|
+
// index — fine in a task worktree cezar owns, but forbidden on the user's real main tree (a
|
|
193
|
+
// read-only GET must never stage files, #major-index-mutation). When `intentToAdd` is false we
|
|
194
|
+
// build a SCRATCH index (GIT_INDEX_FILE) seeded from HEAD + intent-to-add, so untracked files
|
|
195
|
+
// still show WITHOUT touching the user's real index.
|
|
196
|
+
let env;
|
|
197
|
+
let scratchIndex;
|
|
198
|
+
try {
|
|
199
|
+
if (opts.intentToAdd === false) {
|
|
200
|
+
scratchIndex = join(tmpdir(), `cez-scratch-index-${process.pid}-${scratchSeq++}`);
|
|
201
|
+
env = { GIT_INDEX_FILE: scratchIndex };
|
|
202
|
+
await git(dir, ['read-tree', 'HEAD'], env); // seed with tracked files; harmless if no HEAD
|
|
203
|
+
await git(dir, ['add', '-N', '.'], env);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
await git(dir, ['add', '-N', '.']);
|
|
207
|
+
}
|
|
208
|
+
// Which ref anchors this task's diff — merge-base normally, the checked-out branch's
|
|
209
|
+
// pre-run state when the agent repointed the worktree onto it (#591, #751). The rule is
|
|
210
|
+
// shared with `worktreeShortstat`, and it runs WITH the scratch-index `env`: picking
|
|
211
|
+
// between two repointed anchors compares them with `git diff --shortstat`, and `git diff`
|
|
212
|
+
// refreshes and rewrites the index it reads. On the user's real main tree that would be a
|
|
213
|
+
// read-only GET writing their index, and it would measure against a different index than
|
|
214
|
+
// the listing below. The ref lookups themselves ignore `GIT_INDEX_FILE`.
|
|
215
|
+
const { base, repointedHead } = await resolveTaskDiffBase((args) => git(dir, args, env), baseBranch, {
|
|
216
|
+
taskBranch: opts.taskBranch,
|
|
217
|
+
runStartedAt: opts.runStartedAt,
|
|
218
|
+
});
|
|
219
|
+
const nameStatus = await git(dir, ['diff', '--name-status', '-z', '-M', base], env);
|
|
220
|
+
if (!nameStatus.ok)
|
|
221
|
+
return { ok: false, error: gitReason(nameStatus, 'git diff failed') };
|
|
222
|
+
const numstat = await git(dir, ['diff', '--numstat', '-z', '-M', base], env);
|
|
223
|
+
if (!numstat.ok)
|
|
224
|
+
return { ok: false, error: gitReason(numstat, 'git diff failed') };
|
|
225
|
+
const patchOut = await git(dir, ['diff', '--patch', '-M', '--no-color', base], env);
|
|
226
|
+
if (!patchOut.ok)
|
|
227
|
+
return { ok: false, error: gitReason(patchOut, 'git diff failed') };
|
|
228
|
+
return {
|
|
229
|
+
ok: true,
|
|
230
|
+
changes: {
|
|
231
|
+
...assemblePayload(nameStatus.stdout, numstat.stdout, patchOut.stdout, patchCap),
|
|
232
|
+
...(repointedHead ? { repointedHead } : {}),
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
finally {
|
|
237
|
+
if (scratchIndex)
|
|
238
|
+
rmSync(scratchIndex, { force: true });
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/** Monotonic suffix for scratch index files, so concurrent /api/repo/changes calls never share
|
|
242
|
+
* one (each is cleaned up in the finally above). */
|
|
243
|
+
let scratchSeq = 0;
|
|
244
|
+
/** The three raw `git diff` listings (name-status, numstat, patch) → the `{files, stat}`
|
|
245
|
+
* payload. Shared by the working-tree diff above and the commit diff below. Each file's
|
|
246
|
+
* patch is matched by path (`patchByPath`), so a mismatch between the name-status and
|
|
247
|
+
* patch file counts — a typechange, submodule, or any entry that emits no `diff --git`
|
|
248
|
+
* block — drops at most that one file's patch instead of blanking every file's. Positional
|
|
249
|
+
* matching remains the fallback for a section whose path can't be parsed, but only when the
|
|
250
|
+
* counts agree (the same condition the old all-or-nothing guard required). Exported for tests. */
|
|
251
|
+
export function assemblePayload(nameStatusOut, numstatOut, patchOut, patchCap) {
|
|
252
|
+
const statuses = parseNameStatusZ(nameStatusOut);
|
|
253
|
+
const counts = parseNumstatZ(numstatOut);
|
|
254
|
+
const patches = splitPatch(patchOut);
|
|
255
|
+
const countByPath = new Map(counts.map((entry) => [entry.path, entry]));
|
|
256
|
+
const patchesByPath = patchByPath(patches);
|
|
257
|
+
const alignable = patches.length === statuses.length;
|
|
258
|
+
const files = statuses.map((entry, idx) => {
|
|
259
|
+
const count = countByPath.get(entry.path);
|
|
260
|
+
let patch = patchesByPath.get(entry.path) ?? (alignable ? (patches[idx] ?? '') : '');
|
|
261
|
+
if (patch.length > patchCap)
|
|
262
|
+
patch = `${patch.slice(0, patchCap)}\n… (patch truncated)`;
|
|
263
|
+
return {
|
|
264
|
+
path: entry.path,
|
|
265
|
+
...(entry.oldPath ? { oldPath: entry.oldPath } : {}),
|
|
266
|
+
status: statusWord(entry.status),
|
|
267
|
+
adds: count?.adds ?? 0,
|
|
268
|
+
dels: count?.dels ?? 0,
|
|
269
|
+
binary: count?.binary ?? false,
|
|
270
|
+
...(imageMimeType(entry.path) ? { image: true } : {}),
|
|
271
|
+
patch,
|
|
272
|
+
};
|
|
273
|
+
});
|
|
274
|
+
return {
|
|
275
|
+
files,
|
|
276
|
+
stat: {
|
|
277
|
+
adds: files.reduce((sum, f) => sum + f.adds, 0),
|
|
278
|
+
dels: files.reduce((sum, f) => sum + f.dels, 0),
|
|
279
|
+
files: files.length,
|
|
280
|
+
},
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* The commits reachable from the worktree's current HEAD after its base, newest first. A review
|
|
285
|
+
* task may deliberately repoint HEAD to the reviewed branch, so this list retains that useful
|
|
286
|
+
* history even though `collectChanges` narrows its payload to uncommitted work in that case.
|
|
287
|
+
* Empty (not an error) when the branch has no commits past base.
|
|
288
|
+
*/
|
|
289
|
+
export async function collectRunCommits(dir, baseBranch) {
|
|
290
|
+
if (!isSafeGitRef(baseBranch))
|
|
291
|
+
return { ok: false, error: 'refusing option-like base ref' };
|
|
292
|
+
const mergeBase = await git(dir, ['merge-base', baseBranch, 'HEAD']);
|
|
293
|
+
const base = mergeBase.ok && mergeBase.stdout.trim() ? mergeBase.stdout.trim() : baseBranch;
|
|
294
|
+
const log = await git(dir, ['log', '--pretty=format:%H%x1f%s%x1f%an%x1f%cr', `${base}..HEAD`]);
|
|
295
|
+
if (!log.ok)
|
|
296
|
+
return { ok: false, error: gitReason(log, 'git log failed') };
|
|
297
|
+
const commits = log.stdout
|
|
298
|
+
.split('\n')
|
|
299
|
+
.filter(Boolean)
|
|
300
|
+
.map((line) => {
|
|
301
|
+
const [sha = '', subject = '', author = '', when = ''] = line.split('\x1f');
|
|
302
|
+
return { sha, subject, author, when };
|
|
303
|
+
});
|
|
304
|
+
return { ok: true, commits };
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Structured diff of ONE commit vs its first parent (`--root` covers the initial commit).
|
|
308
|
+
* A merge commit honestly answers zero files — `git diff-tree` shows no diff for merges
|
|
309
|
+
* without `-m`/`-c`, and inventing one side's diff would misattribute the changes.
|
|
310
|
+
* Unknown/invalid shas degrade to `{ ok:false, error }` for the route's 409.
|
|
311
|
+
*/
|
|
312
|
+
export async function collectCommitChanges(dir, sha, patchCap = PATCH_CAP) {
|
|
313
|
+
if (!/^[0-9a-f]{4,40}$/i.test(sha))
|
|
314
|
+
return { ok: false, error: `not a commit hash: ${sha}` };
|
|
315
|
+
const meta = await git(dir, ['show', '-s', '--format=%H%x1f%s%x1f%an%x1f%cr', `${sha}^{commit}`]);
|
|
316
|
+
if (!meta.ok)
|
|
317
|
+
return { ok: false, error: gitReason(meta, `unknown commit: ${sha}`) };
|
|
318
|
+
const [fullSha = '', subject = '', author = '', when = ''] = meta.stdout.trim().split('\x1f');
|
|
319
|
+
const common = ['diff-tree', '--no-commit-id', '--root', '-r', '-M'];
|
|
320
|
+
const nameStatus = await git(dir, [...common, '--name-status', '-z', fullSha]);
|
|
321
|
+
if (!nameStatus.ok)
|
|
322
|
+
return { ok: false, error: gitReason(nameStatus, 'git diff-tree failed') };
|
|
323
|
+
const numstat = await git(dir, [...common, '--numstat', '-z', fullSha]);
|
|
324
|
+
if (!numstat.ok)
|
|
325
|
+
return { ok: false, error: gitReason(numstat, 'git diff-tree failed') };
|
|
326
|
+
const patchOut = await git(dir, [...common, '--patch', '--no-color', fullSha]);
|
|
327
|
+
if (!patchOut.ok)
|
|
328
|
+
return { ok: false, error: gitReason(patchOut, 'git diff-tree failed') };
|
|
329
|
+
const payload = assemblePayload(nameStatus.stdout, numstat.stdout, patchOut.stdout, patchCap);
|
|
330
|
+
return { ok: true, commit: { sha: fullSha, subject, author, when, ...payload } };
|
|
331
|
+
}
|
|
332
|
+
// ---- worktree file browsing ---------------------------------------------------
|
|
333
|
+
/** Max file content served to the Files tab — past this the GUI shows an
|
|
334
|
+
* honest "too large" state instead of the bytes. */
|
|
335
|
+
export const FILE_CONTENT_CAP = 512_000;
|
|
336
|
+
/**
|
|
337
|
+
* Extensions the Files tab renders inline as `<img>` — the only kinds the
|
|
338
|
+
* `/files?raw=1` mode will ever serve as bytes (anything else stays JSON, so a
|
|
339
|
+
* worktree HTML file can never become a same-origin document). SVG is included:
|
|
340
|
+
* inert inside `<img>`, and the raw response carries a no-script CSP for the
|
|
341
|
+
* "opened the URL directly" case. Keep in sync with IMAGE_EXTENSIONS in
|
|
342
|
+
* web/app/src/routes/task-git/file-preview.tsx.
|
|
343
|
+
*/
|
|
344
|
+
const IMAGE_MIME = {
|
|
345
|
+
png: 'image/png',
|
|
346
|
+
jpg: 'image/jpeg',
|
|
347
|
+
jpeg: 'image/jpeg',
|
|
348
|
+
gif: 'image/gif',
|
|
349
|
+
webp: 'image/webp',
|
|
350
|
+
svg: 'image/svg+xml',
|
|
351
|
+
bmp: 'image/bmp',
|
|
352
|
+
ico: 'image/x-icon',
|
|
353
|
+
avif: 'image/avif',
|
|
354
|
+
};
|
|
355
|
+
/** The image MIME type for a path, or null when it is not an image we serve raw. */
|
|
356
|
+
export function imageMimeType(path) {
|
|
357
|
+
const name = path.slice(path.lastIndexOf('/') + 1);
|
|
358
|
+
const dot = name.lastIndexOf('.');
|
|
359
|
+
if (dot <= 0)
|
|
360
|
+
return null;
|
|
361
|
+
return IMAGE_MIME[name.slice(dot + 1).toLowerCase()] ?? null;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Extensions the "open in the OS default app" route (#365) will hand to the OS launcher —
|
|
365
|
+
* deliberately NOT `imageMimeType`'s list, even though it is otherwise the same set minus one.
|
|
366
|
+
*
|
|
367
|
+
* `IMAGE_MIME` earns its SVG entry from two mitigations that belong to the HTTP response:
|
|
368
|
+
* the bytes land inside an `<img>` (inert), and the raw route attaches a no-script CSP. The OS
|
|
369
|
+
* launcher has neither — it just asks the OS to open the file, and the default handler for
|
|
370
|
+
* `.svg` is usually a browser, which runs `<script>` inside it from a `file://` origin. A repo
|
|
371
|
+
* can force an SVG down the preview branch on demand (`*.svg binary` in its own `.gitattributes`
|
|
372
|
+
* makes numstat report it binary ⇒ `shouldPreviewImage`), so this is reachable, not theoretical.
|
|
373
|
+
*
|
|
374
|
+
* Raster only: pixels, no document. Sharing the list with the raw route would silently inherit
|
|
375
|
+
* a decision that was justified by a CSP this path never applies.
|
|
376
|
+
*/
|
|
377
|
+
const OS_OPENABLE_EXT = new Set(['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp', 'ico', 'avif']);
|
|
378
|
+
/** True when `path` is an image safe to hand to the OS's default handler — see OS_OPENABLE_EXT. */
|
|
379
|
+
export function isOsOpenableImage(path) {
|
|
380
|
+
const name = path.slice(path.lastIndexOf('/') + 1);
|
|
381
|
+
const dot = name.lastIndexOf('.');
|
|
382
|
+
if (dot <= 0)
|
|
383
|
+
return false;
|
|
384
|
+
return OS_OPENABLE_EXT.has(name.slice(dot + 1).toLowerCase());
|
|
385
|
+
}
|
|
386
|
+
/** True when the first 8 KB contain a NUL byte — good enough for a viewer flag. */
|
|
387
|
+
async function sniffBinary(path, size) {
|
|
388
|
+
const handle = await open(path, 'r');
|
|
389
|
+
try {
|
|
390
|
+
const len = Math.min(size, 8192);
|
|
391
|
+
if (len === 0)
|
|
392
|
+
return false;
|
|
393
|
+
const buf = Buffer.alloc(len);
|
|
394
|
+
await handle.read(buf, 0, len, 0);
|
|
395
|
+
return buf.includes(0);
|
|
396
|
+
}
|
|
397
|
+
finally {
|
|
398
|
+
await handle.close();
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Directory listing or file content from inside `root`, traversal-safe:
|
|
403
|
+
* anything resolving outside the root (dot-segments, absolute paths, NUL) is
|
|
404
|
+
* rejected — same "not a file we serve" stance as `isSafeAssetFilename` in
|
|
405
|
+
* src/server/static-ui.ts. `.git` and symlinks are off-limits too.
|
|
406
|
+
*/
|
|
407
|
+
export async function readWorktreePath(root, relPath, contentCap = FILE_CONTENT_CAP) {
|
|
408
|
+
if (relPath.includes('\0'))
|
|
409
|
+
return { kind: 'invalid', error: 'invalid path' };
|
|
410
|
+
const rootAbs = resolve(root);
|
|
411
|
+
const target = resolve(rootAbs, relPath);
|
|
412
|
+
if (target !== rootAbs && !target.startsWith(rootAbs + sep)) {
|
|
413
|
+
return { kind: 'invalid', error: `path escapes the worktree: ${relPath}` };
|
|
414
|
+
}
|
|
415
|
+
const gitDir = join(rootAbs, '.git');
|
|
416
|
+
if (target === gitDir || target.startsWith(gitDir + sep)) {
|
|
417
|
+
return { kind: 'invalid', error: '.git internals are not browsable' };
|
|
418
|
+
}
|
|
419
|
+
const display = target === rootAbs ? '' : target.slice(rootAbs.length + 1).split(sep).join('/');
|
|
420
|
+
let info;
|
|
421
|
+
try {
|
|
422
|
+
info = await lstat(target);
|
|
423
|
+
}
|
|
424
|
+
catch {
|
|
425
|
+
return { kind: 'missing', error: `no such file or directory in the worktree: ${relPath || '/'}` };
|
|
426
|
+
}
|
|
427
|
+
if (info.isSymbolicLink()) {
|
|
428
|
+
return { kind: 'invalid', error: `symlinks are not served: ${display}` };
|
|
429
|
+
}
|
|
430
|
+
// Intermediate symlinked DIRECTORIES: `resolve()` never follows links and the `lstat` above
|
|
431
|
+
// only guards the final component, so a path through a symlinked dir (e.g. `link/secret.txt`
|
|
432
|
+
// where `link -> /etc`) would otherwise be served. Resolve the whole chain and re-check
|
|
433
|
+
// containment against the real root (#blocker-symlink-traversal).
|
|
434
|
+
let realTarget;
|
|
435
|
+
let realRoot;
|
|
436
|
+
try {
|
|
437
|
+
realTarget = await realpath(target);
|
|
438
|
+
realRoot = await realpath(rootAbs);
|
|
439
|
+
}
|
|
440
|
+
catch {
|
|
441
|
+
return { kind: 'missing', error: `no such file or directory in the worktree: ${relPath || '/'}` };
|
|
442
|
+
}
|
|
443
|
+
if (realTarget !== realRoot && !realTarget.startsWith(realRoot + sep)) {
|
|
444
|
+
return { kind: 'invalid', error: `path escapes the worktree: ${relPath}` };
|
|
445
|
+
}
|
|
446
|
+
if (info.isDirectory()) {
|
|
447
|
+
const dirents = await readdir(target, { withFileTypes: true });
|
|
448
|
+
const entries = [];
|
|
449
|
+
for (const d of dirents) {
|
|
450
|
+
if (d.name === '.git')
|
|
451
|
+
continue;
|
|
452
|
+
if (d.isDirectory()) {
|
|
453
|
+
entries.push({ name: d.name, type: 'dir' });
|
|
454
|
+
}
|
|
455
|
+
else if (d.isFile()) {
|
|
456
|
+
const size = await stat(join(target, d.name))
|
|
457
|
+
.then((s) => s.size)
|
|
458
|
+
.catch(() => undefined);
|
|
459
|
+
entries.push({ name: d.name, type: 'file', ...(size !== undefined ? { size } : {}) });
|
|
460
|
+
}
|
|
461
|
+
// Symlinks, sockets, … deliberately omitted from the listing.
|
|
462
|
+
}
|
|
463
|
+
entries.sort((a, b) => (a.type === b.type ? a.name.localeCompare(b.name) : a.type === 'dir' ? -1 : 1));
|
|
464
|
+
return { kind: 'dir', path: display, entries };
|
|
465
|
+
}
|
|
466
|
+
if (!info.isFile())
|
|
467
|
+
return { kind: 'invalid', error: `not a regular file: ${display}` };
|
|
468
|
+
const binary = await sniffBinary(target, info.size).catch(() => true);
|
|
469
|
+
const tooLarge = info.size > contentCap;
|
|
470
|
+
if (binary || tooLarge) {
|
|
471
|
+
return { kind: 'file', path: display, size: info.size, binary, tooLarge };
|
|
472
|
+
}
|
|
473
|
+
const content = await readFile(target, 'utf8');
|
|
474
|
+
return { kind: 'file', path: display, size: info.size, binary: false, tooLarge: false, content };
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Repo-view branch action (`POST /api/repo/branch`): switch to `name` when it
|
|
478
|
+
* already exists locally, otherwise create it from `from` (or HEAD) and switch.
|
|
479
|
+
* Name validation is delegated to `git check-ref-format --branch` — git's own
|
|
480
|
+
* rules, not a reimplementation — behind an explicit dash-guard (#431).
|
|
481
|
+
* Predictable failures (invalid name, unknown `from`, dirty-tree checkout
|
|
482
|
+
* conflict) come back as `{ ok:false, error }`.
|
|
483
|
+
*/
|
|
484
|
+
export async function createOrSwitchBranch(dir, name, from) {
|
|
485
|
+
// Dash-guard (#431): `name` reaches `git checkout <name>` / `git checkout -b <name>` as a
|
|
486
|
+
// positional operand, so it gets the same explicit guard as `from` below — check-ref-format
|
|
487
|
+
// already rejects option-like names, and the point is not to rely on that alone.
|
|
488
|
+
if (!isSafeGitRef(name))
|
|
489
|
+
return { ok: false, error: `invalid branch name: ${name}` };
|
|
490
|
+
const check = await git(dir, ['check-ref-format', '--branch', name]);
|
|
491
|
+
if (!check.ok)
|
|
492
|
+
return { ok: false, error: `invalid branch name: ${name}` };
|
|
493
|
+
const exists = await git(dir, ['rev-parse', '--verify', '--quiet', `refs/heads/${name}`]);
|
|
494
|
+
if (exists.ok) {
|
|
495
|
+
const sw = await git(dir, ['checkout', name]);
|
|
496
|
+
if (!sw.ok)
|
|
497
|
+
return { ok: false, error: gitReason(sw, `git checkout ${name} failed`) };
|
|
498
|
+
return { ok: true, branch: name, created: false };
|
|
499
|
+
}
|
|
500
|
+
if (from) {
|
|
501
|
+
// Dash-guard (#431): `from` becomes a positional operand of `checkout -b`.
|
|
502
|
+
if (!isSafeGitRef(from))
|
|
503
|
+
return { ok: false, error: `invalid start point: ${from}` };
|
|
504
|
+
// `--quiet` keeps git silent on failure, so supply our own reason.
|
|
505
|
+
const start = await git(dir, ['rev-parse', '--verify', '--quiet', `${from}^{commit}`]);
|
|
506
|
+
if (!start.ok)
|
|
507
|
+
return { ok: false, error: `unknown start point: ${from}` };
|
|
508
|
+
}
|
|
509
|
+
const create = await git(dir, from ? ['checkout', '-b', name, from] : ['checkout', '-b', name]);
|
|
510
|
+
if (!create.ok)
|
|
511
|
+
return { ok: false, error: gitReason(create, `git checkout -b ${name} failed`) };
|
|
512
|
+
return { ok: true, branch: name, created: true };
|
|
513
|
+
}
|
|
514
|
+
/** `git add -A && git commit -m <message>` in `dir`. A clean tree, a failing
|
|
515
|
+
* hook or missing identity all come back as `{ ok:false, error }`. */
|
|
516
|
+
export async function commitAll(dir, message) {
|
|
517
|
+
const status = await git(dir, ['status', '--porcelain']);
|
|
518
|
+
if (!status.ok)
|
|
519
|
+
return { ok: false, error: gitReason(status, 'git status failed') };
|
|
520
|
+
if (!status.stdout.trim()) {
|
|
521
|
+
return { ok: false, error: 'nothing to commit — the working tree is clean' };
|
|
522
|
+
}
|
|
523
|
+
const add = await git(dir, ['add', '-A']);
|
|
524
|
+
if (!add.ok)
|
|
525
|
+
return { ok: false, error: gitReason(add, 'git add failed') };
|
|
526
|
+
const commit = await git(dir, ['commit', '-m', message]);
|
|
527
|
+
if (!commit.ok)
|
|
528
|
+
return { ok: false, error: gitReason(commit, 'git commit failed') };
|
|
529
|
+
const head = await git(dir, ['rev-parse', 'HEAD']);
|
|
530
|
+
return { ok: true, sha: head.ok ? head.stdout.trim() : '' };
|
|
531
|
+
}
|
|
532
|
+
/** Push the current branch, setting upstream when it has none. No remote,
|
|
533
|
+
* detached HEAD and rejected pushes all degrade to `{ ok:false, error }`. */
|
|
534
|
+
export async function pushCurrentBranch(dir) {
|
|
535
|
+
const branchRes = await git(dir, ['rev-parse', '--abbrev-ref', 'HEAD']);
|
|
536
|
+
if (!branchRes.ok)
|
|
537
|
+
return { ok: false, error: gitReason(branchRes, 'not a git repository') };
|
|
538
|
+
const branch = branchRes.stdout.trim();
|
|
539
|
+
if (!branch || branch === 'HEAD') {
|
|
540
|
+
return { ok: false, error: 'detached HEAD — check out a branch before pushing' };
|
|
541
|
+
}
|
|
542
|
+
const remotesRes = await git(dir, ['remote']);
|
|
543
|
+
const remotes = remotesRes.stdout.split('\n').map((r) => r.trim()).filter(Boolean);
|
|
544
|
+
if (remotes.length === 0) {
|
|
545
|
+
return { ok: false, error: 'no remote configured — add one with `git remote add origin <url>`' };
|
|
546
|
+
}
|
|
547
|
+
const remote = remotes.includes('origin') ? 'origin' : remotes[0];
|
|
548
|
+
const upstream = await git(dir, ['rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{u}']);
|
|
549
|
+
const args = upstream.ok ? ['push'] : ['push', '-u', remote, branch];
|
|
550
|
+
const push = await git(dir, args);
|
|
551
|
+
if (!push.ok)
|
|
552
|
+
return { ok: false, error: gitReason(push, 'git push failed') };
|
|
553
|
+
return { ok: true, branch, remote, upstreamSet: !upstream.ok };
|
|
554
|
+
}
|
|
555
|
+
//# sourceMappingURL=git-changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-changes.js","sourceRoot":"","sources":["../../src/server/git-changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface RepoInfo {
|
|
2
|
+
root: string;
|
|
3
|
+
branch: string;
|
|
4
|
+
remote?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface StatusEntry {
|
|
7
|
+
status: string;
|
|
8
|
+
path: string;
|
|
9
|
+
}
|
|
10
|
+
export interface LogEntry {
|
|
11
|
+
hash: string;
|
|
12
|
+
subject: string;
|
|
13
|
+
author: string;
|
|
14
|
+
when: string;
|
|
15
|
+
}
|
|
16
|
+
/** Null when `dir` isn't inside a git repository. */
|
|
17
|
+
export declare function getRepoInfo(dir: string): Promise<RepoInfo | null>;
|
|
18
|
+
/** The current commit, pinned as a full SHA. Null outside a repository or before its first commit. */
|
|
19
|
+
export declare function getHeadCommit(root: string): Promise<string | null>;
|
|
20
|
+
export declare function getStatus(root: string): Promise<StatusEntry[]>;
|
|
21
|
+
/** Working-tree diff vs HEAD (staged + unstaged), capped for the GUI. */
|
|
22
|
+
export declare function getDiff(root: string, cap?: number): Promise<string>;
|
|
23
|
+
/** Local + origin branch names, deduped (origin/x counts as x), sorted.
|
|
24
|
+
* Feeds the Repo tab's base-branch picker. */
|
|
25
|
+
export declare function getBranches(root: string): Promise<string[]>;
|
|
26
|
+
/** One commit — message + stat + patch — for the Repo view's expandable rows. */
|
|
27
|
+
export declare function getCommit(root: string, sha: string, cap?: number): Promise<string>;
|
|
28
|
+
export declare function getLog(root: string, count?: number): Promise<LogEntry[]>;
|