@qodeca/xezar 0.10.1
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 +810 -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 +71 -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 +597 -0
- package/dist/contract/health.d.ts +102 -0
- package/dist/contract/index.d.ts +16 -0
- package/dist/contract/index.js +1953 -0
- package/dist/contract/projects.d.ts +210 -0
- package/dist/contract/repo.d.ts +234 -0
- package/dist/contract/runs.d.ts +1527 -0
- package/dist/contract/skills.d.ts +234 -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 +115 -0
- package/dist/core/ask.js +256 -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 +65 -0
- package/dist/core/claude-cli-runner.js +479 -0
- package/dist/core/claude-cli-runner.js.map +1 -0
- package/dist/core/claude-model-catalog.d.ts +24 -0
- package/dist/core/claude-model-catalog.js +208 -0
- package/dist/core/claude-model-catalog.js.map +1 -0
- package/dist/core/claude-ui-mapper.d.ts +79 -0
- package/dist/core/claude-ui-mapper.js +597 -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 +109 -0
- package/dist/core/codex-ui-mapper.js +764 -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 +91 -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 +535 -0
- package/dist/core/opencode-server-runner.js.map +1 -0
- package/dist/core/opencode-ui-mapper.d.ts +111 -0
- package/dist/core/opencode-ui-mapper.js +668 -0
- package/dist/core/opencode-ui-mapper.js.map +1 -0
- package/dist/core/pi-runner.d.ts +24 -0
- package/dist/core/pi-runner.js +349 -0
- package/dist/core/pi-runner.js.map +1 -0
- package/dist/core/pi-ui-mapper.d.ts +34 -0
- package/dist/core/pi-ui-mapper.js +270 -0
- package/dist/core/pi-ui-mapper.js.map +1 -0
- package/dist/core/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 +28 -0
- package/dist/core/runner-model-catalog.js +62 -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 +332 -0
- package/dist/core/ui-events.js +22 -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 +684 -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 +78 -0
- package/dist/release/manifests.js +57 -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 +33 -0
- package/dist/release/stable.js +50 -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/arm-repo-handle.d.ts +17 -0
- package/dist/runs/arm-repo-handle.js +24 -0
- package/dist/runs/arm-repo-handle.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 +490 -0
- package/dist/runs/store.js +1283 -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 +80 -0
- package/dist/runs/ui-event-sink.js +209 -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 +535 -0
- package/dist/server/forge/github.js +2544 -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 +267 -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 +192 -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 +13578 -0
- package/dist/server/server.js +5284 -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 +83 -0
- package/dist/server/ws.js +216 -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 +348 -0
- package/dist/server-install/platforms/macosx-ngrok.js.map +1 -0
- package/dist/server-install/platforms/ubuntu-vps.d.ts +63 -0
- package/dist/server-install/platforms/ubuntu-vps.js +997 -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 +803 -0
- package/dist/workflows/run.js +3483 -0
- package/dist/workflows/run.js.map +1 -0
- package/dist/workflows/types.d.ts +145 -0
- package/dist/workflows/types.js +194 -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 +85 -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 +524 -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-CGskMvgc.js +1 -0
- package/web/dist/assets/arrow-down-G8adPhbu.js +1 -0
- package/web/dist/assets/arrow-left-BJsIW6A0.js +1 -0
- package/web/dist/assets/bundle-mjs-BT31bpU6.js +1 -0
- package/web/dist/assets/centered-state-B_V_Ai2h.js +43 -0
- package/web/dist/assets/chevron-right-CFzn-von.js +1 -0
- package/web/dist/assets/chunk-BO2N2NFS-DE6qKn3r.js +131 -0
- package/web/dist/assets/collapsible-B_8uYwHb.js +1 -0
- package/web/dist/assets/commit-list-C4Dv6vUL.js +1 -0
- package/web/dist/assets/compare-variants-SR2zZfZq.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-CbozNUJq.js +3 -0
- package/web/dist/assets/diff-stat-btAmKFJr.js +1 -0
- package/web/dist/assets/diff-view-BpFTcG3R.js +6 -0
- package/web/dist/assets/diff-woXpYk--.js +1 -0
- package/web/dist/assets/dropdown-menu-Z80KMInL.js +1 -0
- package/web/dist/assets/editable-title-wS5NWwob.js +1 -0
- package/web/dist/assets/ellipsis-vertical-Bmi2u2TG.js +1 -0
- package/web/dist/assets/engine-javascript-FQvzRocB.js +141 -0
- package/web/dist/assets/file-DKoYWRsv.js +1 -0
- package/web/dist/assets/folder-u01HScRT.js +1 -0
- package/web/dist/assets/git-toolbar-DZlZjTGz.js +1 -0
- package/web/dist/assets/github-CFURo9kf.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-C8DK1_sG.js +3 -0
- package/web/dist/assets/html-BY76lXLH.js +1 -0
- package/web/dist/assets/image-preview-BR3iIIhf.js +1 -0
- package/web/dist/assets/index-BcI5hug3.css +2 -0
- package/web/dist/assets/index-DlC81_GI.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-5FuCZDA4.js +2 -0
- package/web/dist/assets/markdown-BYOwaDjH.js +1 -0
- package/web/dist/assets/mermaid-GHXKKRXX-C4jxqUUb.js +1 -0
- package/web/dist/assets/new-task-form-BydHBbef.js +1 -0
- package/web/dist/assets/pill-vNzaaYxj.js +1 -0
- package/web/dist/assets/project-router-BbCzrHKs.js +1 -0
- package/web/dist/assets/prompt-templates-B7Fs2b1S.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-DGliez3E.js +1 -0
- package/web/dist/assets/repo-git-CJFDMauC.js +1 -0
- package/web/dist/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/web/dist/assets/run-diff-Bq9vkSNK.js +3 -0
- package/web/dist/assets/run-header-Cd8mSKBG.js +1 -0
- package/web/dist/assets/rust-Cfkwpbl8.js +1 -0
- package/web/dist/assets/search-x-69n_672Y.js +1 -0
- package/web/dist/assets/shellscript-CLZ0U2zV.js +1 -0
- package/web/dist/assets/skill-empty-hint-DTu0LzaJ.js +1 -0
- package/web/dist/assets/skills-Cs-auniL.js +1 -0
- package/web/dist/assets/skills-D4P-Hgey.js +1 -0
- package/web/dist/assets/sparkles-B8agSxBZ.js +1 -0
- package/web/dist/assets/sql-BsFa4tDR.js +1 -0
- package/web/dist/assets/square-terminal-Cf4Og6ct.js +1 -0
- package/web/dist/assets/tab-link-Cp2-CJS8.js +1 -0
- package/web/dist/assets/task-changes-DYgNXOyY.js +1 -0
- package/web/dist/assets/task-commits-BRpZSz1G.js +1 -0
- package/web/dist/assets/task-files-pKOwSyLh.js +2 -0
- package/web/dist/assets/task-thread-Bfyqqy-t.js +9 -0
- package/web/dist/assets/textarea--cpYshee.js +1 -0
- package/web/dist/assets/thread-loading-GyH2Atwo.js +1 -0
- package/web/dist/assets/toml-CcmNWLt0.js +1 -0
- package/web/dist/assets/trash-2--ZtrzUx3.js +1 -0
- package/web/dist/assets/triangle-alert-D5tJwRD2.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-SnwVxKOA.js +1 -0
- package/web/dist/assets/use-desktop-C31lOFUD.js +1 -0
- package/web/dist/assets/use-submit-shortcut-JY8M_MPL.js +1 -0
- package/web/dist/assets/utils-Bb8ohcr3.js +64 -0
- package/web/dist/assets/workflows-BmOehP-A.js +11 -0
- package/web/dist/assets/yaml-rwi0_p6S.js +1 -0
- package/web/dist/assets/zoomable-image-0G3IBXWC.js +1 -0
- package/web/dist/index.html +80 -0
- package/web/dist/xezar.svg +14 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { toolDisplay } from './tool-display.js';
|
|
2
|
+
export function createPiUiState() {
|
|
3
|
+
return {
|
|
4
|
+
sessionStarted: false,
|
|
5
|
+
sessionId: null,
|
|
6
|
+
turnSeq: 0,
|
|
7
|
+
turnId: null,
|
|
8
|
+
stopReason: 'end_turn',
|
|
9
|
+
turnUsage: null,
|
|
10
|
+
turnCostUsd: null,
|
|
11
|
+
startedItems: new Set(),
|
|
12
|
+
textByItem: new Map(),
|
|
13
|
+
tools: new Map(),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function piTurnStarted(state) {
|
|
17
|
+
const turnSeq = state.turnSeq + 1;
|
|
18
|
+
const turnId = `turn_${turnSeq}`;
|
|
19
|
+
return {
|
|
20
|
+
events: [{ type: 'turn.started', turnId }],
|
|
21
|
+
state: { ...state, turnSeq, turnId, stopReason: 'end_turn' },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function mapPiRpcMessage(value, state) {
|
|
25
|
+
if (!isRecord(value) || typeof value.type !== 'string')
|
|
26
|
+
return { events: [], state };
|
|
27
|
+
if (value.type === 'response') {
|
|
28
|
+
if (value.command === 'get_state' && value.success === true && isRecord(value.data)) {
|
|
29
|
+
const sessionId = string(value.data.sessionId);
|
|
30
|
+
if (sessionId && !state.sessionStarted) {
|
|
31
|
+
const model = isRecord(value.data.model) ? string(value.data.model.id) : undefined;
|
|
32
|
+
return {
|
|
33
|
+
events: [{ type: 'session.started', sessionId, backend: 'pi', ...(model ? { model } : {}) }],
|
|
34
|
+
state: { ...state, sessionStarted: true, sessionId },
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (value.success === false) {
|
|
39
|
+
return {
|
|
40
|
+
events: [{ type: 'session.error', message: rpcError(value), fatal: false }],
|
|
41
|
+
state,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return { events: [], state };
|
|
45
|
+
}
|
|
46
|
+
switch (value.type) {
|
|
47
|
+
case 'message_update':
|
|
48
|
+
return mapMessageUpdate(value, state);
|
|
49
|
+
case 'message_end':
|
|
50
|
+
return mapMessageEnd(value, state);
|
|
51
|
+
case 'tool_execution_start':
|
|
52
|
+
return mapToolStart(value, state);
|
|
53
|
+
case 'tool_execution_update':
|
|
54
|
+
return mapToolUpdate(value, state);
|
|
55
|
+
case 'tool_execution_end':
|
|
56
|
+
return mapToolEnd(value, state);
|
|
57
|
+
case 'agent_settled':
|
|
58
|
+
return completeTurn(state.stopReason, state);
|
|
59
|
+
case 'extension_error': {
|
|
60
|
+
const message = string(value.error) ?? string(value.message) ?? 'pi extension error';
|
|
61
|
+
return { events: [{ type: 'session.error', message, fatal: false }], state };
|
|
62
|
+
}
|
|
63
|
+
default:
|
|
64
|
+
return { events: [], state };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function mapMessageUpdate(value, state) {
|
|
68
|
+
const update = isRecord(value.assistantMessageEvent) ? value.assistantMessageEvent : undefined;
|
|
69
|
+
const updateType = update ? string(update.type) : undefined;
|
|
70
|
+
const contentIndex = update ? number(update.contentIndex) ?? 0 : 0;
|
|
71
|
+
if (!update || !updateType || !state.turnId)
|
|
72
|
+
return { events: [], state };
|
|
73
|
+
if (updateType === 'done') {
|
|
74
|
+
return {
|
|
75
|
+
events: [],
|
|
76
|
+
state: { ...state, stopReason: string(update.reason) === 'length' ? 'max_tokens' : 'end_turn' },
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (updateType === 'error') {
|
|
80
|
+
const reason = string(update.reason) === 'aborted' ? 'cancelled' : 'error';
|
|
81
|
+
const error = isRecord(update.error) ? string(update.error.errorMessage) : undefined;
|
|
82
|
+
return {
|
|
83
|
+
events: [{ type: 'session.error', message: error ?? `pi model ${reason}`, fatal: false }],
|
|
84
|
+
state: { ...state, stopReason: reason },
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const field = updateType.startsWith('thinking_') ? 'reasoning' : updateType.startsWith('text_') ? 'text' : null;
|
|
88
|
+
if (!field)
|
|
89
|
+
return { events: [], state };
|
|
90
|
+
const itemId = `${state.turnId}_${field}_${contentIndex}`;
|
|
91
|
+
const events = [];
|
|
92
|
+
let startedItems = state.startedItems;
|
|
93
|
+
let textByItem = state.textByItem;
|
|
94
|
+
const makeItem = (text) => field === 'text'
|
|
95
|
+
? { kind: 'message', id: itemId, role: 'assistant', text }
|
|
96
|
+
: { kind: 'reasoning', id: itemId, text };
|
|
97
|
+
if (!startedItems.has(itemId)) {
|
|
98
|
+
events.push({ type: 'item.started', item: makeItem('') });
|
|
99
|
+
startedItems = new Set(startedItems).add(itemId);
|
|
100
|
+
}
|
|
101
|
+
const delta = string(update.delta);
|
|
102
|
+
if (delta !== undefined) {
|
|
103
|
+
events.push({ type: 'item.delta', itemId, field, delta });
|
|
104
|
+
const next = new Map(textByItem);
|
|
105
|
+
next.set(itemId, `${next.get(itemId) ?? ''}${delta}`);
|
|
106
|
+
textByItem = next;
|
|
107
|
+
}
|
|
108
|
+
if (updateType.endsWith('_end')) {
|
|
109
|
+
const text = string(update.content) ?? textByItem.get(itemId) ?? '';
|
|
110
|
+
events.push({ type: 'item.completed', item: makeItem(text) });
|
|
111
|
+
}
|
|
112
|
+
return { events, state: { ...state, startedItems, textByItem } };
|
|
113
|
+
}
|
|
114
|
+
function mapToolStart(value, state) {
|
|
115
|
+
const id = string(value.toolCallId);
|
|
116
|
+
const name = string(value.toolName);
|
|
117
|
+
if (!id || !name)
|
|
118
|
+
return { events: [], state };
|
|
119
|
+
const display = toolDisplay(name, value.args);
|
|
120
|
+
const item = {
|
|
121
|
+
kind: 'tool',
|
|
122
|
+
id,
|
|
123
|
+
name,
|
|
124
|
+
toolKind: display.toolKind,
|
|
125
|
+
title: display.title,
|
|
126
|
+
status: 'running',
|
|
127
|
+
input: value.args,
|
|
128
|
+
};
|
|
129
|
+
const diffs = toolDiffs(name, value.args);
|
|
130
|
+
if (diffs)
|
|
131
|
+
item.diffs = diffs;
|
|
132
|
+
const tools = new Map(state.tools);
|
|
133
|
+
tools.set(id, item);
|
|
134
|
+
const events = [{ type: 'item.started', item }];
|
|
135
|
+
const plan = toolPlan(name, value.args);
|
|
136
|
+
if (plan)
|
|
137
|
+
events.push({ type: 'plan.updated', entries: plan });
|
|
138
|
+
return { events, state: { ...state, tools } };
|
|
139
|
+
}
|
|
140
|
+
function mapToolUpdate(value, state) {
|
|
141
|
+
const id = string(value.toolCallId);
|
|
142
|
+
const previous = id ? state.tools.get(id) : undefined;
|
|
143
|
+
if (!id || !previous)
|
|
144
|
+
return { events: [], state };
|
|
145
|
+
const output = contentText(isRecord(value.partialResult) ? value.partialResult.content : undefined);
|
|
146
|
+
if (output === undefined)
|
|
147
|
+
return { events: [], state };
|
|
148
|
+
const item = { ...previous, output };
|
|
149
|
+
const tools = new Map(state.tools);
|
|
150
|
+
tools.set(id, item);
|
|
151
|
+
return { events: [{ type: 'item.updated', item }], state: { ...state, tools } };
|
|
152
|
+
}
|
|
153
|
+
function mapToolEnd(value, state) {
|
|
154
|
+
const id = string(value.toolCallId);
|
|
155
|
+
const previous = id ? state.tools.get(id) : undefined;
|
|
156
|
+
if (!id || !previous)
|
|
157
|
+
return { events: [], state };
|
|
158
|
+
const result = isRecord(value.result) ? value.result : {};
|
|
159
|
+
const output = contentText(result.content);
|
|
160
|
+
const isError = value.isError === true;
|
|
161
|
+
const item = {
|
|
162
|
+
...previous,
|
|
163
|
+
status: isError ? 'failed' : 'completed',
|
|
164
|
+
...(isError ? { error: output ?? 'pi tool failed' } : output !== undefined ? { output } : {}),
|
|
165
|
+
};
|
|
166
|
+
const tools = new Map(state.tools);
|
|
167
|
+
tools.set(id, item);
|
|
168
|
+
return { events: [{ type: 'item.completed', item }], state: { ...state, tools } };
|
|
169
|
+
}
|
|
170
|
+
function completeTurn(reason, state) {
|
|
171
|
+
if (!state.turnId)
|
|
172
|
+
return { events: [], state };
|
|
173
|
+
const event = {
|
|
174
|
+
type: 'turn.completed',
|
|
175
|
+
turnId: state.turnId,
|
|
176
|
+
stopReason: reason,
|
|
177
|
+
};
|
|
178
|
+
if (state.turnUsage)
|
|
179
|
+
event.usage = state.turnUsage;
|
|
180
|
+
if (state.turnCostUsd !== null)
|
|
181
|
+
event.costUsd = state.turnCostUsd;
|
|
182
|
+
// Cleared with the turn id: the next turn's counts are its own, and a turn pi ends without
|
|
183
|
+
// reporting usage must not inherit the previous turn's numbers.
|
|
184
|
+
return { events: [event], state: { ...state, turnId: null, turnUsage: null, turnCostUsd: null } };
|
|
185
|
+
}
|
|
186
|
+
function mapMessageEnd(value, state) {
|
|
187
|
+
const message = isRecord(value.message) ? value.message : undefined;
|
|
188
|
+
const usage = message && message.role === 'assistant' ? usageEvent(message.usage) : undefined;
|
|
189
|
+
if (!usage)
|
|
190
|
+
return { events: [], state };
|
|
191
|
+
return {
|
|
192
|
+
events: [usage],
|
|
193
|
+
state: { ...state, turnUsage: usage.usage, turnCostUsd: usage.costUsd ?? null },
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
function usageEvent(value) {
|
|
197
|
+
if (!isRecord(value))
|
|
198
|
+
return undefined;
|
|
199
|
+
const input = number(value.input) ?? 0;
|
|
200
|
+
const output = number(value.output) ?? 0;
|
|
201
|
+
const cacheRead = number(value.cacheRead);
|
|
202
|
+
const cacheWrite = number(value.cacheWrite);
|
|
203
|
+
const total = number(value.totalTokens) ?? input + output + (cacheRead ?? 0) + (cacheWrite ?? 0);
|
|
204
|
+
if (total <= 0)
|
|
205
|
+
return undefined;
|
|
206
|
+
const cost = isRecord(value.cost) ? number(value.cost.total) : undefined;
|
|
207
|
+
return {
|
|
208
|
+
type: 'usage.updated',
|
|
209
|
+
usage: {
|
|
210
|
+
input,
|
|
211
|
+
output,
|
|
212
|
+
total,
|
|
213
|
+
...(cacheRead !== undefined ? { cacheRead } : {}),
|
|
214
|
+
...(cacheWrite !== undefined ? { cacheWrite } : {}),
|
|
215
|
+
},
|
|
216
|
+
...(cost !== undefined ? { costUsd: cost } : {}),
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
function toolDiffs(name, input) {
|
|
220
|
+
if (!isRecord(input) || !['edit', 'write'].includes(name.toLowerCase()))
|
|
221
|
+
return undefined;
|
|
222
|
+
const path = string(input.path) ?? string(input.file_path) ?? string(input.filePath);
|
|
223
|
+
if (!path)
|
|
224
|
+
return undefined;
|
|
225
|
+
const oldText = string(input.oldText) ?? string(input.old_string) ?? (name.toLowerCase() === 'write' ? null : undefined);
|
|
226
|
+
const newText = string(input.newText) ?? string(input.new_string) ?? string(input.content);
|
|
227
|
+
if (oldText === undefined && newText === undefined)
|
|
228
|
+
return undefined;
|
|
229
|
+
return [{ path, oldText: oldText ?? null, ...(newText !== undefined ? { newText } : {}) }];
|
|
230
|
+
}
|
|
231
|
+
function toolPlan(name, input) {
|
|
232
|
+
if (!['todowrite', 'todo_write'].includes(name.toLowerCase()) || !isRecord(input) || !Array.isArray(input.todos)) {
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
235
|
+
const entries = [];
|
|
236
|
+
for (const todo of input.todos) {
|
|
237
|
+
if (!isRecord(todo))
|
|
238
|
+
continue;
|
|
239
|
+
const content = string(todo.content);
|
|
240
|
+
const status = string(todo.status);
|
|
241
|
+
if (!content || !['pending', 'in_progress', 'completed', 'cancelled'].includes(status ?? ''))
|
|
242
|
+
continue;
|
|
243
|
+
entries.push({ content, status: status });
|
|
244
|
+
}
|
|
245
|
+
return entries;
|
|
246
|
+
}
|
|
247
|
+
function rpcError(value) {
|
|
248
|
+
const error = isRecord(value.error) ? value.error : undefined;
|
|
249
|
+
return string(error?.message) ?? string(value.message) ?? `pi RPC command ${string(value.command) ?? 'unknown'} failed`;
|
|
250
|
+
}
|
|
251
|
+
function contentText(value) {
|
|
252
|
+
if (typeof value === 'string')
|
|
253
|
+
return value;
|
|
254
|
+
if (!Array.isArray(value))
|
|
255
|
+
return undefined;
|
|
256
|
+
const parts = value
|
|
257
|
+
.map((part) => (isRecord(part) && part.type === 'text' ? string(part.text) : undefined))
|
|
258
|
+
.filter((part) => part !== undefined);
|
|
259
|
+
return parts.length > 0 ? parts.join('\n') : undefined;
|
|
260
|
+
}
|
|
261
|
+
function isRecord(value) {
|
|
262
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
263
|
+
}
|
|
264
|
+
function string(value) {
|
|
265
|
+
return typeof value === 'string' ? value : undefined;
|
|
266
|
+
}
|
|
267
|
+
function number(value) {
|
|
268
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=pi-ui-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-ui-mapper.js","sourceRoot":"","sources":["../../src/core/pi-ui-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live process telemetry for the Runs table (#348): while any run has a
|
|
3
|
+
* registered backend process, ONE `ps` snapshot every ~2 s is aggregated per
|
|
4
|
+
* run over the process's full descendant tree (the CLI plus every Bash child
|
|
5
|
+
* an agent spawned) into `{ cpuPct, rssBytes, procCount }`.
|
|
6
|
+
*
|
|
7
|
+
* Design constraints, in order:
|
|
8
|
+
* - never affect a run — a missing/failing `ps` (Windows, exotic containers)
|
|
9
|
+
* degrades silently to "no data";
|
|
10
|
+
* - one shared sampler, not one per run — N parallel runs still cost a
|
|
11
|
+
* single `ps` every tick, and the timer is unref()ed and stopped the
|
|
12
|
+
* moment the registry empties, so an idle cockpit spawns nothing;
|
|
13
|
+
* - parsing + tree aggregation are pure functions, testable against canned
|
|
14
|
+
* `ps` output (scripts/test-process-usage.mjs).
|
|
15
|
+
*/
|
|
16
|
+
/** One aggregated sample for a run's process tree. */
|
|
17
|
+
export interface ProcessUsage {
|
|
18
|
+
/** Sum of `%cpu` across the tree — can exceed 100 on multi-core work. */
|
|
19
|
+
cpuPct: number;
|
|
20
|
+
/** Sum of resident set sizes, in bytes. */
|
|
21
|
+
rssBytes: number;
|
|
22
|
+
/** Number of live processes in the tree, the root included. */
|
|
23
|
+
procCount: number;
|
|
24
|
+
}
|
|
25
|
+
/** One parsed `ps` row (`pid ppid rss %cpu`; rss is in KB, ps's unit). */
|
|
26
|
+
export interface ProcStat {
|
|
27
|
+
pid: number;
|
|
28
|
+
ppid: number;
|
|
29
|
+
rssKb: number;
|
|
30
|
+
cpuPct: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Parse `ps -axo pid=,ppid=,rss=,%cpu=` output (the `=` suffixes suppress
|
|
34
|
+
* headers on darwin and linux alike). Malformed lines are skipped — `ps`
|
|
35
|
+
* racing process exits can truncate rows.
|
|
36
|
+
*/
|
|
37
|
+
export declare function parsePsOutput(text: string): ProcStat[];
|
|
38
|
+
/**
|
|
39
|
+
* Aggregate the full descendant tree rooted at `rootPid` from one `ps`
|
|
40
|
+
* snapshot. Null when the root is gone (process exited between register and
|
|
41
|
+
* sample) — callers treat that as "no data", not zero usage.
|
|
42
|
+
*/
|
|
43
|
+
export declare function aggregateTreeUsage(procs: ProcStat[], rootPid: number): ProcessUsage | null;
|
|
44
|
+
export declare const SAMPLE_INTERVAL_MS = 2000;
|
|
45
|
+
type UsageListener = (usage: Record<string, ProcessUsage>) => void;
|
|
46
|
+
/** Start tracking a run's process tree. A re-register (a run's next agent
|
|
47
|
+
* step) replaces the pid but keeps nothing else — peaks are per session and
|
|
48
|
+
* the engine maxes them into the run record on unregister. */
|
|
49
|
+
export declare function registerRunProcess(runId: string, pid: number): void;
|
|
50
|
+
/** Stop tracking; returns the session's peaks (undefined when no sample ever
|
|
51
|
+
* landed — `ps` unavailable, or the process died before the first tick). */
|
|
52
|
+
export declare function unregisterRunProcess(runId: string): {
|
|
53
|
+
peakRssBytes: number;
|
|
54
|
+
peakProcCount: number;
|
|
55
|
+
} | undefined;
|
|
56
|
+
/** Latest sample for one run, if any. */
|
|
57
|
+
export declare function currentUsage(runId: string): ProcessUsage | undefined;
|
|
58
|
+
/** Latest samples for every registered run that has data. */
|
|
59
|
+
export declare function allUsage(): Record<string, ProcessUsage>;
|
|
60
|
+
/** Subscribe to fresh samples (fires ~every 2 s while runs are registered);
|
|
61
|
+
* returns the unsubscribe. The SSE endpoint relays these to the GUI. */
|
|
62
|
+
export declare function onUsage(listener: UsageListener): () => void;
|
|
63
|
+
/** Test hook: fan one snapshot out to every subscriber without shelling `ps` —
|
|
64
|
+
* lets unit tests prove a dispose()d subscriber stops receiving ticks. */
|
|
65
|
+
export declare function emitUsageForTest(snapshot: Record<string, ProcessUsage>): void;
|
|
66
|
+
export {};
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live process telemetry for the Runs table (#348): while any run has a
|
|
3
|
+
* registered backend process, ONE `ps` snapshot every ~2 s is aggregated per
|
|
4
|
+
* run over the process's full descendant tree (the CLI plus every Bash child
|
|
5
|
+
* an agent spawned) into `{ cpuPct, rssBytes, procCount }`.
|
|
6
|
+
*
|
|
7
|
+
* Design constraints, in order:
|
|
8
|
+
* - never affect a run — a missing/failing `ps` (Windows, exotic containers)
|
|
9
|
+
* degrades silently to "no data";
|
|
10
|
+
* - one shared sampler, not one per run — N parallel runs still cost a
|
|
11
|
+
* single `ps` every tick, and the timer is unref()ed and stopped the
|
|
12
|
+
* moment the registry empties, so an idle cockpit spawns nothing;
|
|
13
|
+
* - parsing + tree aggregation are pure functions, testable against canned
|
|
14
|
+
* `ps` output (scripts/test-process-usage.mjs).
|
|
15
|
+
*/
|
|
16
|
+
import { execFile } from 'node:child_process';
|
|
17
|
+
/**
|
|
18
|
+
* Parse `ps -axo pid=,ppid=,rss=,%cpu=` output (the `=` suffixes suppress
|
|
19
|
+
* headers on darwin and linux alike). Malformed lines are skipped — `ps`
|
|
20
|
+
* racing process exits can truncate rows.
|
|
21
|
+
*/
|
|
22
|
+
export function parsePsOutput(text) {
|
|
23
|
+
const out = [];
|
|
24
|
+
for (const line of text.split('\n')) {
|
|
25
|
+
const parts = line.trim().split(/\s+/);
|
|
26
|
+
if (parts.length < 4)
|
|
27
|
+
continue;
|
|
28
|
+
const pid = Number(parts[0]);
|
|
29
|
+
const ppid = Number(parts[1]);
|
|
30
|
+
const rssKb = Number(parts[2]);
|
|
31
|
+
const cpuPct = Number(parts[3]);
|
|
32
|
+
if (!Number.isInteger(pid) || !Number.isInteger(ppid))
|
|
33
|
+
continue;
|
|
34
|
+
out.push({
|
|
35
|
+
pid,
|
|
36
|
+
ppid,
|
|
37
|
+
rssKb: Number.isFinite(rssKb) && rssKb > 0 ? rssKb : 0,
|
|
38
|
+
cpuPct: Number.isFinite(cpuPct) && cpuPct > 0 ? cpuPct : 0,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Aggregate the full descendant tree rooted at `rootPid` from one `ps`
|
|
45
|
+
* snapshot. Null when the root is gone (process exited between register and
|
|
46
|
+
* sample) — callers treat that as "no data", not zero usage.
|
|
47
|
+
*/
|
|
48
|
+
export function aggregateTreeUsage(procs, rootPid) {
|
|
49
|
+
const byPid = new Map();
|
|
50
|
+
const children = new Map();
|
|
51
|
+
for (const p of procs) {
|
|
52
|
+
byPid.set(p.pid, p);
|
|
53
|
+
const siblings = children.get(p.ppid);
|
|
54
|
+
if (siblings)
|
|
55
|
+
siblings.push(p.pid);
|
|
56
|
+
else
|
|
57
|
+
children.set(p.ppid, [p.pid]);
|
|
58
|
+
}
|
|
59
|
+
if (!byPid.has(rootPid))
|
|
60
|
+
return null;
|
|
61
|
+
let cpuPct = 0;
|
|
62
|
+
let rssKb = 0;
|
|
63
|
+
let procCount = 0;
|
|
64
|
+
const queue = [rootPid];
|
|
65
|
+
const seen = new Set(); // pid-reuse in a torn snapshot can't loop us
|
|
66
|
+
while (queue.length > 0) {
|
|
67
|
+
const pid = queue.pop();
|
|
68
|
+
if (seen.has(pid))
|
|
69
|
+
continue;
|
|
70
|
+
seen.add(pid);
|
|
71
|
+
const p = byPid.get(pid);
|
|
72
|
+
if (!p)
|
|
73
|
+
continue;
|
|
74
|
+
cpuPct += p.cpuPct;
|
|
75
|
+
rssKb += p.rssKb;
|
|
76
|
+
procCount += 1;
|
|
77
|
+
for (const child of children.get(pid) ?? [])
|
|
78
|
+
queue.push(child);
|
|
79
|
+
}
|
|
80
|
+
return { cpuPct: Math.round(cpuPct * 10) / 10, rssBytes: rssKb * 1024, procCount };
|
|
81
|
+
}
|
|
82
|
+
// ---- registry + sampler -----------------------------------------------------
|
|
83
|
+
export const SAMPLE_INTERVAL_MS = 2_000;
|
|
84
|
+
const entries = new Map();
|
|
85
|
+
const listeners = new Set();
|
|
86
|
+
let timer = null;
|
|
87
|
+
let sampling = false;
|
|
88
|
+
/** Start tracking a run's process tree. A re-register (a run's next agent
|
|
89
|
+
* step) replaces the pid but keeps nothing else — peaks are per session and
|
|
90
|
+
* the engine maxes them into the run record on unregister. */
|
|
91
|
+
export function registerRunProcess(runId, pid) {
|
|
92
|
+
entries.set(runId, { pid, peakRssBytes: 0, peakProcCount: 0 });
|
|
93
|
+
if (!timer) {
|
|
94
|
+
timer = setInterval(() => void sample(), SAMPLE_INTERVAL_MS);
|
|
95
|
+
timer.unref?.();
|
|
96
|
+
void sample(); // first data point right away, not 2 s late
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Stop tracking; returns the session's peaks (undefined when no sample ever
|
|
100
|
+
* landed — `ps` unavailable, or the process died before the first tick). */
|
|
101
|
+
export function unregisterRunProcess(runId) {
|
|
102
|
+
const entry = entries.get(runId);
|
|
103
|
+
entries.delete(runId);
|
|
104
|
+
if (entries.size === 0 && timer) {
|
|
105
|
+
clearInterval(timer);
|
|
106
|
+
timer = null;
|
|
107
|
+
}
|
|
108
|
+
if (!entry || entry.peakProcCount === 0)
|
|
109
|
+
return undefined;
|
|
110
|
+
return { peakRssBytes: entry.peakRssBytes, peakProcCount: entry.peakProcCount };
|
|
111
|
+
}
|
|
112
|
+
/** Latest sample for one run, if any. */
|
|
113
|
+
export function currentUsage(runId) {
|
|
114
|
+
return entries.get(runId)?.last;
|
|
115
|
+
}
|
|
116
|
+
/** Latest samples for every registered run that has data. */
|
|
117
|
+
export function allUsage() {
|
|
118
|
+
const out = {};
|
|
119
|
+
for (const [runId, entry] of entries) {
|
|
120
|
+
if (entry.last)
|
|
121
|
+
out[runId] = entry.last;
|
|
122
|
+
}
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
125
|
+
/** Subscribe to fresh samples (fires ~every 2 s while runs are registered);
|
|
126
|
+
* returns the unsubscribe. The SSE endpoint relays these to the GUI. */
|
|
127
|
+
export function onUsage(listener) {
|
|
128
|
+
listeners.add(listener);
|
|
129
|
+
return () => listeners.delete(listener);
|
|
130
|
+
}
|
|
131
|
+
/** Test hook: fan one snapshot out to every subscriber without shelling `ps` —
|
|
132
|
+
* lets unit tests prove a dispose()d subscriber stops receiving ticks. */
|
|
133
|
+
export function emitUsageForTest(snapshot) {
|
|
134
|
+
for (const listener of listeners) {
|
|
135
|
+
try {
|
|
136
|
+
listener(snapshot);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// mirror sample(): one broken listener never kills the fan-out
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async function sample() {
|
|
144
|
+
if (sampling || entries.size === 0)
|
|
145
|
+
return;
|
|
146
|
+
sampling = true;
|
|
147
|
+
try {
|
|
148
|
+
const text = await runPs();
|
|
149
|
+
if (text === null)
|
|
150
|
+
return; // ps unavailable — degrade to no data
|
|
151
|
+
const procs = parsePsOutput(text);
|
|
152
|
+
for (const entry of entries.values()) {
|
|
153
|
+
const usage = aggregateTreeUsage(procs, entry.pid);
|
|
154
|
+
entry.last = usage ?? undefined;
|
|
155
|
+
if (usage) {
|
|
156
|
+
entry.peakRssBytes = Math.max(entry.peakRssBytes, usage.rssBytes);
|
|
157
|
+
entry.peakProcCount = Math.max(entry.peakProcCount, usage.procCount);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (listeners.size > 0) {
|
|
161
|
+
const snapshot = allUsage();
|
|
162
|
+
for (const listener of listeners) {
|
|
163
|
+
try {
|
|
164
|
+
listener(snapshot);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// a broken SSE stream must not kill the sampler
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
finally {
|
|
173
|
+
sampling = false;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/** One system-wide snapshot in the `pid ppid rssKb cpu` shape `parsePsOutput` expects; null on
|
|
177
|
+
* any failure. Unix uses `ps`; Windows uses PowerShell's Win32_Process (WorkingSetSize → KB,
|
|
178
|
+
* cpu reported as 0 — the memory guard only needs RSS). */
|
|
179
|
+
function runPs() {
|
|
180
|
+
if (process.platform === 'win32') {
|
|
181
|
+
return new Promise((resolve) => {
|
|
182
|
+
execFile('powershell', [
|
|
183
|
+
'-NoProfile',
|
|
184
|
+
'-Command',
|
|
185
|
+
"Get-CimInstance Win32_Process | ForEach-Object { \"$($_.ProcessId) $($_.ParentProcessId) $([math]::Round($_.WorkingSetSize/1024)) 0\" }",
|
|
186
|
+
], { maxBuffer: 16 * 1024 * 1024, windowsHide: true }, (err, stdout) => resolve(err ? null : stdout));
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
return new Promise((resolve) => {
|
|
190
|
+
execFile('ps', ['-axo', 'pid=,ppid=,rss=,%cpu='], { maxBuffer: 16 * 1024 * 1024 }, (err, stdout) => resolve(err ? null : stdout));
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=process-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-usage.js","sourceRoot":"","sources":["../../src/core/process-usage.ts"],"names":[],"mappings":"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"}
|