@openagt/dashboard 0.0.0-stage → 0.9.0
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 +125 -2
- package/dist/agent-id.d.ts +13 -0
- package/dist/agent-id.d.ts.map +1 -0
- package/dist/agent-id.js +20 -0
- package/dist/agent-id.js.map +1 -0
- package/dist/agent-locks.d.ts +3 -0
- package/dist/agent-locks.d.ts.map +1 -0
- package/dist/agent-locks.js +40 -0
- package/dist/agent-locks.js.map +1 -0
- package/dist/agent-view.d.ts +39 -0
- package/dist/agent-view.d.ts.map +1 -0
- package/dist/agent-view.js +45 -0
- package/dist/agent-view.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +11 -0
- package/dist/bin.js.map +1 -0
- package/dist/branch-name.d.ts +8 -0
- package/dist/branch-name.d.ts.map +1 -0
- package/dist/branch-name.js +20 -0
- package/dist/branch-name.js.map +1 -0
- package/dist/bridge-browser.d.ts +217 -0
- package/dist/bridge-browser.d.ts.map +1 -0
- package/dist/bridge-browser.js +520 -0
- package/dist/bridge-browser.js.map +1 -0
- package/dist/browser-stream.d.ts +20 -0
- package/dist/browser-stream.d.ts.map +1 -0
- package/dist/browser-stream.js +51 -0
- package/dist/browser-stream.js.map +1 -0
- package/dist/browser.d.ts +16 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +38 -0
- package/dist/browser.js.map +1 -0
- package/dist/built-in.d.ts +38 -0
- package/dist/built-in.d.ts.map +1 -0
- package/dist/built-in.js +119 -0
- package/dist/built-in.js.map +1 -0
- package/dist/chrome-extension/background.js +532 -0
- package/dist/chrome-extension/content.js +1475 -0
- package/dist/chrome-extension/driver-plan.js +41 -0
- package/dist/chrome-extension/fingerprint.js +43 -0
- package/dist/chrome-extension/manifest.json +31 -0
- package/dist/chrome-extension/options.html +48 -0
- package/dist/chrome-extension/options.js +122 -0
- package/dist/cli.d.ts +43 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +186 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +16 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +30 -0
- package/dist/client.js.map +1 -0
- package/dist/cloud-run-state.d.ts +27 -0
- package/dist/cloud-run-state.d.ts.map +1 -0
- package/dist/cloud-run-state.js +36 -0
- package/dist/cloud-run-state.js.map +1 -0
- package/dist/cloud-scratch-refs.d.ts +85 -0
- package/dist/cloud-scratch-refs.d.ts.map +1 -0
- package/dist/cloud-scratch-refs.js +275 -0
- package/dist/cloud-scratch-refs.js.map +1 -0
- package/dist/cloud-work.d.ts +66 -0
- package/dist/cloud-work.d.ts.map +1 -0
- package/dist/cloud-work.js +204 -0
- package/dist/cloud-work.js.map +1 -0
- package/dist/daemon-runtime.d.ts +42 -0
- package/dist/daemon-runtime.d.ts.map +1 -0
- package/dist/daemon-runtime.js +183 -0
- package/dist/daemon-runtime.js.map +1 -0
- package/dist/daemon-services.d.ts +37 -0
- package/dist/daemon-services.d.ts.map +1 -0
- package/dist/daemon-services.js +126 -0
- package/dist/daemon-services.js.map +1 -0
- package/dist/daemon-tick.d.ts +68 -0
- package/dist/daemon-tick.d.ts.map +1 -0
- package/dist/daemon-tick.js +97 -0
- package/dist/daemon-tick.js.map +1 -0
- package/dist/daemon.d.ts +65 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +202 -0
- package/dist/daemon.js.map +1 -0
- package/dist/dashboard/activity.d.ts +41 -0
- package/dist/dashboard/activity.d.ts.map +1 -0
- package/dist/dashboard/activity.js +56 -0
- package/dist/dashboard/activity.js.map +1 -0
- package/dist/dashboard/agent-handoff.d.ts +244 -0
- package/dist/dashboard/agent-handoff.d.ts.map +1 -0
- package/dist/dashboard/agent-handoff.js +310 -0
- package/dist/dashboard/agent-handoff.js.map +1 -0
- package/dist/dashboard/bridge-endpoints.d.ts +158 -0
- package/dist/dashboard/bridge-endpoints.d.ts.map +1 -0
- package/dist/dashboard/bridge-endpoints.js +382 -0
- package/dist/dashboard/bridge-endpoints.js.map +1 -0
- package/dist/dashboard/bridge-question.d.ts +33 -0
- package/dist/dashboard/bridge-question.d.ts.map +1 -0
- package/dist/dashboard/bridge-question.js +20 -0
- package/dist/dashboard/bridge-question.js.map +1 -0
- package/dist/dashboard/bridge-sessions.d.ts +25 -0
- package/dist/dashboard/bridge-sessions.d.ts.map +1 -0
- package/dist/dashboard/bridge-sessions.js +46 -0
- package/dist/dashboard/bridge-sessions.js.map +1 -0
- package/dist/dashboard/bridge-starts.d.ts +61 -0
- package/dist/dashboard/bridge-starts.d.ts.map +1 -0
- package/dist/dashboard/bridge-starts.js +94 -0
- package/dist/dashboard/bridge-starts.js.map +1 -0
- package/dist/dashboard/bridge-store.d.ts +179 -0
- package/dist/dashboard/bridge-store.d.ts.map +1 -0
- package/dist/dashboard/bridge-store.js +262 -0
- package/dist/dashboard/bridge-store.js.map +1 -0
- package/dist/dashboard/bundle.d.ts +12 -0
- package/dist/dashboard/bundle.d.ts.map +1 -0
- package/dist/dashboard/bundle.js +22 -0
- package/dist/dashboard/bundle.js.map +1 -0
- package/dist/dashboard/cache.d.ts +47 -0
- package/dist/dashboard/cache.d.ts.map +1 -0
- package/dist/dashboard/cache.js +87 -0
- package/dist/dashboard/cache.js.map +1 -0
- package/dist/dashboard/content-type.d.ts +3 -0
- package/dist/dashboard/content-type.d.ts.map +1 -0
- package/dist/dashboard/content-type.js +31 -0
- package/dist/dashboard/content-type.js.map +1 -0
- package/dist/dashboard/dashboard.d.ts +38 -0
- package/dist/dashboard/dashboard.d.ts.map +1 -0
- package/dist/dashboard/dashboard.js +42 -0
- package/dist/dashboard/dashboard.js.map +1 -0
- package/dist/dashboard/docs.d.ts +39 -0
- package/dist/dashboard/docs.d.ts.map +1 -0
- package/dist/dashboard/docs.js +59 -0
- package/dist/dashboard/docs.js.map +1 -0
- package/dist/dashboard/git-status.d.ts +44 -0
- package/dist/dashboard/git-status.d.ts.map +1 -0
- package/dist/dashboard/git-status.js +37 -0
- package/dist/dashboard/git-status.js.map +1 -0
- package/dist/dashboard/http.d.ts +29 -0
- package/dist/dashboard/http.d.ts.map +1 -0
- package/dist/dashboard/http.js +74 -0
- package/dist/dashboard/http.js.map +1 -0
- package/dist/dashboard/index.d.ts +24 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +23 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/interventions.d.ts +67 -0
- package/dist/dashboard/interventions.d.ts.map +1 -0
- package/dist/dashboard/interventions.js +169 -0
- package/dist/dashboard/interventions.js.map +1 -0
- package/dist/dashboard/keyed-watcher.d.ts +29 -0
- package/dist/dashboard/keyed-watcher.d.ts.map +1 -0
- package/dist/dashboard/keyed-watcher.js +42 -0
- package/dist/dashboard/keyed-watcher.js.map +1 -0
- package/dist/dashboard/keys.d.ts +31 -0
- package/dist/dashboard/keys.d.ts.map +1 -0
- package/dist/dashboard/keys.js +37 -0
- package/dist/dashboard/keys.js.map +1 -0
- package/dist/dashboard/models.d.ts +25 -0
- package/dist/dashboard/models.d.ts.map +1 -0
- package/dist/dashboard/models.js +30 -0
- package/dist/dashboard/models.js.map +1 -0
- package/dist/dashboard/module-host.d.ts +44 -0
- package/dist/dashboard/module-host.d.ts.map +1 -0
- package/dist/dashboard/module-host.js +91 -0
- package/dist/dashboard/module-host.js.map +1 -0
- package/dist/dashboard/module-serve.d.ts +15 -0
- package/dist/dashboard/module-serve.d.ts.map +1 -0
- package/dist/dashboard/module-serve.js +45 -0
- package/dist/dashboard/module-serve.js.map +1 -0
- package/dist/dashboard/open-in-app.d.ts +43 -0
- package/dist/dashboard/open-in-app.d.ts.map +1 -0
- package/dist/dashboard/open-in-app.js +98 -0
- package/dist/dashboard/open-in-app.js.map +1 -0
- package/dist/dashboard/open-questions.d.ts +45 -0
- package/dist/dashboard/open-questions.d.ts.map +1 -0
- package/dist/dashboard/open-questions.js +62 -0
- package/dist/dashboard/open-questions.js.map +1 -0
- package/dist/dashboard/overview.d.ts +78 -0
- package/dist/dashboard/overview.d.ts.map +1 -0
- package/dist/dashboard/overview.js +87 -0
- package/dist/dashboard/overview.js.map +1 -0
- package/dist/dashboard/projects.d.ts +101 -0
- package/dist/dashboard/projects.d.ts.map +1 -0
- package/dist/dashboard/projects.js +63 -0
- package/dist/dashboard/projects.js.map +1 -0
- package/dist/dashboard/pull-requests.d.ts +127 -0
- package/dist/dashboard/pull-requests.d.ts.map +1 -0
- package/dist/dashboard/pull-requests.js +137 -0
- package/dist/dashboard/pull-requests.js.map +1 -0
- package/dist/dashboard/queue.d.ts +17 -0
- package/dist/dashboard/queue.d.ts.map +1 -0
- package/dist/dashboard/queue.js +19 -0
- package/dist/dashboard/queue.js.map +1 -0
- package/dist/dashboard/quota.d.ts +53 -0
- package/dist/dashboard/quota.d.ts.map +1 -0
- package/dist/dashboard/quota.js +42 -0
- package/dist/dashboard/quota.js.map +1 -0
- package/dist/dashboard/relay-endpoints.d.ts +32 -0
- package/dist/dashboard/relay-endpoints.d.ts.map +1 -0
- package/dist/dashboard/relay-endpoints.js +115 -0
- package/dist/dashboard/relay-endpoints.js.map +1 -0
- package/dist/dashboard/remote-run.d.ts +95 -0
- package/dist/dashboard/remote-run.d.ts.map +1 -0
- package/dist/dashboard/remote-run.js +235 -0
- package/dist/dashboard/remote-run.js.map +1 -0
- package/dist/dashboard/rpc-serve.d.ts +106 -0
- package/dist/dashboard/rpc-serve.d.ts.map +1 -0
- package/dist/dashboard/rpc-serve.js +180 -0
- package/dist/dashboard/rpc-serve.js.map +1 -0
- package/dist/dashboard/run-inbox.d.ts +31 -0
- package/dist/dashboard/run-inbox.d.ts.map +1 -0
- package/dist/dashboard/run-inbox.js +51 -0
- package/dist/dashboard/run-inbox.js.map +1 -0
- package/dist/dashboard/server.d.ts +105 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +231 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/dashboard/static.d.ts +9 -0
- package/dist/dashboard/static.d.ts.map +1 -0
- package/dist/dashboard/static.js +54 -0
- package/dist/dashboard/static.js.map +1 -0
- package/dist/dashboard/types.d.ts +135 -0
- package/dist/dashboard/types.d.ts.map +1 -0
- package/dist/dashboard/types.js +2 -0
- package/dist/dashboard/types.js.map +1 -0
- package/dist/dashboard/web-start-endpoints.d.ts +32 -0
- package/dist/dashboard/web-start-endpoints.d.ts.map +1 -0
- package/dist/dashboard/web-start-endpoints.js +75 -0
- package/dist/dashboard/web-start-endpoints.js.map +1 -0
- package/dist/dashboard-bundle/assets/client-CbBRB9m4.js +9 -0
- package/dist/dashboard-bundle/assets/jsx-runtime-By8HlURe.js +1 -0
- package/dist/dashboard-bundle/assets/main-B98UOA3_.js +140 -0
- package/dist/dashboard-bundle/assets/main-ByRjbCiA.css +2 -0
- package/dist/dashboard-bundle/assets/module-v213KWfH.js +21 -0
- package/dist/dashboard-bundle/assets/react-CZI7_Jkm.js +1 -0
- package/dist/dashboard-bundle/assets/react-dom-cJyBB_A4.js +1 -0
- package/dist/dashboard-bundle/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/dist/dashboard-bundle/host/module.js +1 -0
- package/dist/dashboard-bundle/host/react-dom-client.js +1 -0
- package/dist/dashboard-bundle/host/react-dom.js +1 -0
- package/dist/dashboard-bundle/host/react-jsx-runtime.js +1 -0
- package/dist/dashboard-bundle/host/react.js +1 -0
- package/dist/dashboard-bundle/index.html +42 -0
- package/dist/dashboard-bundle/logo-animated.svg +34 -0
- package/dist/dashboard-bundle/logo.svg +16 -0
- package/dist/dashboard-rpc/context.d.ts +56 -0
- package/dist/dashboard-rpc/context.d.ts.map +1 -0
- package/dist/dashboard-rpc/context.js +106 -0
- package/dist/dashboard-rpc/context.js.map +1 -0
- package/dist/dashboard-rpc/control.d.ts +124 -0
- package/dist/dashboard-rpc/control.d.ts.map +1 -0
- package/dist/dashboard-rpc/control.js +284 -0
- package/dist/dashboard-rpc/control.js.map +1 -0
- package/dist/dashboard-rpc/devices.d.ts +9 -0
- package/dist/dashboard-rpc/devices.d.ts.map +1 -0
- package/dist/dashboard-rpc/devices.js +12 -0
- package/dist/dashboard-rpc/devices.js.map +1 -0
- package/dist/dashboard-rpc/events-tail.d.ts +68 -0
- package/dist/dashboard-rpc/events-tail.d.ts.map +1 -0
- package/dist/dashboard-rpc/events-tail.js +257 -0
- package/dist/dashboard-rpc/events-tail.js.map +1 -0
- package/dist/dashboard-rpc/events.d.ts +39 -0
- package/dist/dashboard-rpc/events.d.ts.map +1 -0
- package/dist/dashboard-rpc/events.js +47 -0
- package/dist/dashboard-rpc/events.js.map +1 -0
- package/dist/dashboard-rpc/index.d.ts +29 -0
- package/dist/dashboard-rpc/index.d.ts.map +1 -0
- package/dist/dashboard-rpc/index.js +40 -0
- package/dist/dashboard-rpc/index.js.map +1 -0
- package/dist/dashboard-rpc/models.d.ts +4 -0
- package/dist/dashboard-rpc/models.d.ts.map +1 -0
- package/dist/dashboard-rpc/models.js +8 -0
- package/dist/dashboard-rpc/models.js.map +1 -0
- package/dist/dashboard-rpc/modules.d.ts +45 -0
- package/dist/dashboard-rpc/modules.d.ts.map +1 -0
- package/dist/dashboard-rpc/modules.js +79 -0
- package/dist/dashboard-rpc/modules.js.map +1 -0
- package/dist/dashboard-rpc/preferences.d.ts +41 -0
- package/dist/dashboard-rpc/preferences.d.ts.map +1 -0
- package/dist/dashboard-rpc/preferences.js +65 -0
- package/dist/dashboard-rpc/preferences.js.map +1 -0
- package/dist/dashboard-rpc/projects.d.ts +85 -0
- package/dist/dashboard-rpc/projects.d.ts.map +1 -0
- package/dist/dashboard-rpc/projects.js +129 -0
- package/dist/dashboard-rpc/projects.js.map +1 -0
- package/dist/dashboard-rpc/quota.d.ts +4 -0
- package/dist/dashboard-rpc/quota.d.ts.map +1 -0
- package/dist/dashboard-rpc/quota.js +15 -0
- package/dist/dashboard-rpc/quota.js.map +1 -0
- package/dist/dashboard-rpc/reads.d.ts +185 -0
- package/dist/dashboard-rpc/reads.d.ts.map +1 -0
- package/dist/dashboard-rpc/reads.js +370 -0
- package/dist/dashboard-rpc/reads.js.map +1 -0
- package/dist/dashboard-rpc/relay-agent.d.ts +9 -0
- package/dist/dashboard-rpc/relay-agent.d.ts.map +1 -0
- package/dist/dashboard-rpc/relay-agent.js +21 -0
- package/dist/dashboard-rpc/relay-agent.js.map +1 -0
- package/dist/dashboard-rpc/relay-dispatch.d.ts +9 -0
- package/dist/dashboard-rpc/relay-dispatch.d.ts.map +1 -0
- package/dist/dashboard-rpc/relay-dispatch.js +24 -0
- package/dist/dashboard-rpc/relay-dispatch.js.map +1 -0
- package/dist/dashboard-rpc/stream-forward.d.ts +17 -0
- package/dist/dashboard-rpc/stream-forward.d.ts.map +1 -0
- package/dist/dashboard-rpc/stream-forward.js +38 -0
- package/dist/dashboard-rpc/stream-forward.js.map +1 -0
- package/dist/dashboard-rpc/test-context.d.ts +23 -0
- package/dist/dashboard-rpc/test-context.d.ts.map +1 -0
- package/dist/dashboard-rpc/test-context.js +43 -0
- package/dist/dashboard-rpc/test-context.js.map +1 -0
- package/dist/driver-names.d.ts +22 -0
- package/dist/driver-names.d.ts.map +1 -0
- package/dist/driver-names.js +29 -0
- package/dist/driver-names.js.map +1 -0
- package/dist/error-message.d.ts +8 -0
- package/dist/error-message.d.ts.map +1 -0
- package/dist/error-message.js +10 -0
- package/dist/error-message.js.map +1 -0
- package/dist/event-stream.d.ts +33 -0
- package/dist/event-stream.d.ts.map +1 -0
- package/dist/event-stream.js +104 -0
- package/dist/event-stream.js.map +1 -0
- package/dist/events.d.ts +236 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +5 -0
- package/dist/events.js.map +1 -0
- package/dist/format-bytes.d.ts +3 -0
- package/dist/format-bytes.d.ts.map +1 -0
- package/dist/format-bytes.js +18 -0
- package/dist/format-bytes.js.map +1 -0
- package/dist/has-remote.d.ts +8 -0
- package/dist/has-remote.d.ts.map +1 -0
- package/dist/has-remote.js +10 -0
- package/dist/has-remote.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/install.d.ts +31 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +54 -0
- package/dist/install.js.map +1 -0
- package/dist/jsonl-tail.d.ts +59 -0
- package/dist/jsonl-tail.d.ts.map +1 -0
- package/dist/jsonl-tail.js +152 -0
- package/dist/jsonl-tail.js.map +1 -0
- package/dist/loopback-host.d.ts +20 -0
- package/dist/loopback-host.d.ts.map +1 -0
- package/dist/loopback-host.js +31 -0
- package/dist/loopback-host.js.map +1 -0
- package/dist/module-server.d.ts +56 -0
- package/dist/module-types/dashboard/components/DiffStat.d.ts +6 -0
- package/dist/module-types/dashboard/components/DriverModelMenu.d.ts +23 -0
- package/dist/module-types/dashboard/components/LinkActions.d.ts +26 -0
- package/dist/module-types/dashboard/components/Markdown.d.ts +4 -0
- package/dist/module-types/dashboard/components/SettingsRows.d.ts +37 -0
- package/dist/module-types/dashboard/components/StartAgentButton.d.ts +39 -0
- package/dist/module-types/dashboard/components/ui/badge.d.ts +2 -0
- package/dist/module-types/dashboard/components/ui/button.d.ts +10 -0
- package/dist/module-types/dashboard/components/ui/card.d.ts +5 -0
- package/dist/module-types/dashboard/components/ui/checkbox.d.ts +7 -0
- package/dist/module-types/dashboard/components/ui/dropdown-menu.d.ts +16 -0
- package/dist/module-types/dashboard/components/ui/input.d.ts +2 -0
- package/dist/module-types/dashboard/components/ui/option-label.d.ts +4 -0
- package/dist/module-types/dashboard/components/ui/popover.d.ts +8 -0
- package/dist/module-types/dashboard/components/ui/scroll-area.d.ts +10 -0
- package/dist/module-types/dashboard/components/ui/separator.d.ts +3 -0
- package/dist/module-types/dashboard/components/ui/skeleton.d.ts +2 -0
- package/dist/module-types/dashboard/components/ui/slider.d.ts +9 -0
- package/dist/module-types/dashboard/components/ui/tooltip.d.ts +11 -0
- package/dist/module-types/dashboard/lib/agent-settings.d.ts +2 -0
- package/dist/module-types/dashboard/lib/draft-handoff.d.ts +15 -0
- package/dist/module-types/dashboard/lib/format-date.d.ts +51 -0
- package/dist/module-types/dashboard/lib/host-services.d.ts +12 -0
- package/dist/module-types/dashboard/lib/models.d.ts +24 -0
- package/dist/module-types/dashboard/lib/route.d.ts +38 -0
- package/dist/module-types/dashboard/lib/rpc.d.ts +31 -0
- package/dist/module-types/dashboard/lib/use-action.d.ts +25 -0
- package/dist/module-types/dashboard/lib/use-async.d.ts +45 -0
- package/dist/module-types/dashboard/lib/use-modules.d.ts +79 -0
- package/dist/module-types/dashboard/lib/utils.d.ts +3 -0
- package/dist/module-types/dashboard/module/index.d.ts +335 -0
- package/dist/module-types/dashboard/rpc/models.d.ts +2 -0
- package/dist/module-types/dashboard/rpc/modules.d.ts +5 -0
- package/dist/module-types/src/agent-id.d.ts +12 -0
- package/dist/module-types/src/agent-locks.d.ts +2 -0
- package/dist/module-types/src/agent-view.d.ts +38 -0
- package/dist/module-types/src/bridge-browser.d.ts +216 -0
- package/dist/module-types/src/browser-stream.d.ts +19 -0
- package/dist/module-types/src/browser.d.ts +15 -0
- package/dist/module-types/src/built-in.d.ts +37 -0
- package/dist/module-types/src/client.d.ts +15 -0
- package/dist/module-types/src/cloud-run-state.d.ts +26 -0
- package/dist/module-types/src/dashboard/activity.d.ts +40 -0
- package/dist/module-types/src/dashboard/agent-handoff.d.ts +243 -0
- package/dist/module-types/src/dashboard/bridge-endpoints.d.ts +157 -0
- package/dist/module-types/src/dashboard/bridge-question.d.ts +32 -0
- package/dist/module-types/src/dashboard/bridge-store.d.ts +178 -0
- package/dist/module-types/src/dashboard/cache.d.ts +46 -0
- package/dist/module-types/src/dashboard/content-type.d.ts +2 -0
- package/dist/module-types/src/dashboard/dashboard.d.ts +37 -0
- package/dist/module-types/src/dashboard/docs.d.ts +38 -0
- package/dist/module-types/src/dashboard/git-status.d.ts +43 -0
- package/dist/module-types/src/dashboard/http.d.ts +28 -0
- package/dist/module-types/src/dashboard/interventions.d.ts +66 -0
- package/dist/module-types/src/dashboard/keyed-watcher.d.ts +28 -0
- package/dist/module-types/src/dashboard/keys.d.ts +30 -0
- package/dist/module-types/src/dashboard/models.d.ts +24 -0
- package/dist/module-types/src/dashboard/module-host.d.ts +43 -0
- package/dist/module-types/src/dashboard/module-serve.d.ts +14 -0
- package/dist/module-types/src/dashboard/open-in-app.d.ts +42 -0
- package/dist/module-types/src/dashboard/open-questions.d.ts +44 -0
- package/dist/module-types/src/dashboard/overview.d.ts +77 -0
- package/dist/module-types/src/dashboard/projects.d.ts +100 -0
- package/dist/module-types/src/dashboard/pull-requests.d.ts +126 -0
- package/dist/module-types/src/dashboard/queue.d.ts +16 -0
- package/dist/module-types/src/dashboard/quota.d.ts +52 -0
- package/dist/module-types/src/dashboard/remote-run.d.ts +94 -0
- package/dist/module-types/src/dashboard/rpc-serve.d.ts +105 -0
- package/dist/module-types/src/dashboard/run-inbox.d.ts +30 -0
- package/dist/module-types/src/dashboard/types.d.ts +134 -0
- package/dist/module-types/src/dashboard-rpc/context.d.ts +55 -0
- package/dist/module-types/src/dashboard-rpc/control.d.ts +123 -0
- package/dist/module-types/src/dashboard-rpc/devices.d.ts +8 -0
- package/dist/module-types/src/dashboard-rpc/events-tail.d.ts +67 -0
- package/dist/module-types/src/dashboard-rpc/events.d.ts +38 -0
- package/dist/module-types/src/dashboard-rpc/index.d.ts +28 -0
- package/dist/module-types/src/dashboard-rpc/models.d.ts +3 -0
- package/dist/module-types/src/dashboard-rpc/modules.d.ts +44 -0
- package/dist/module-types/src/dashboard-rpc/preferences.d.ts +40 -0
- package/dist/module-types/src/dashboard-rpc/projects.d.ts +84 -0
- package/dist/module-types/src/dashboard-rpc/quota.d.ts +3 -0
- package/dist/module-types/src/dashboard-rpc/reads.d.ts +184 -0
- package/dist/module-types/src/dashboard-rpc/relay-agent.d.ts +8 -0
- package/dist/module-types/src/dashboard-rpc/stream-forward.d.ts +16 -0
- package/dist/module-types/src/driver-names.d.ts +21 -0
- package/dist/module-types/src/error-message.d.ts +7 -0
- package/dist/module-types/src/event-stream.d.ts +32 -0
- package/dist/module-types/src/events.d.ts +235 -0
- package/dist/module-types/src/format-bytes.d.ts +2 -0
- package/dist/module-types/src/has-remote.d.ts +7 -0
- package/dist/module-types/src/index.d.ts +41 -0
- package/dist/module-types/src/jsonl-tail.d.ts +58 -0
- package/dist/module-types/src/loopback-host.d.ts +19 -0
- package/dist/module-types/src/node-fs.d.ts +32 -0
- package/dist/module-types/src/open-choices.d.ts +14 -0
- package/dist/module-types/src/openagent-dir.d.ts +10 -0
- package/dist/module-types/src/openagent-gitignore.d.ts +11 -0
- package/dist/module-types/src/pick-directory.d.ts +29 -0
- package/dist/module-types/src/preference-defaults.d.ts +42 -0
- package/dist/module-types/src/project-commands.d.ts +23 -0
- package/dist/module-types/src/project-errors.d.ts +59 -0
- package/dist/module-types/src/project-hooks.d.ts +129 -0
- package/dist/module-types/src/project-modules.d.ts +49 -0
- package/dist/module-types/src/project-presets.d.ts +29 -0
- package/dist/module-types/src/project.d.ts +28 -0
- package/dist/module-types/src/publish-levels.d.ts +32 -0
- package/dist/module-types/src/quota-boundary.d.ts +64 -0
- package/dist/module-types/src/quota-poller.d.ts +82 -0
- package/dist/module-types/src/registry.d.ts +226 -0
- package/dist/module-types/src/store/agent-checkout.d.ts +53 -0
- package/dist/module-types/src/store/agent-store.d.ts +266 -0
- package/dist/module-types/src/store/branches.d.ts +163 -0
- package/dist/module-types/src/store/git-host.d.ts +113 -0
- package/dist/module-types/src/store/index.d.ts +9 -0
- package/dist/module-types/src/store/provided.d.ts +16 -0
- package/dist/module-types/src/store/queue.d.ts +45 -0
- package/dist/module-types/src/store/repository.d.ts +32 -0
- package/dist/module-types/src/store/run-record.d.ts +21 -0
- package/dist/module-types/src/store/runs.d.ts +107 -0
- package/dist/module-types/src/store/tickets.d.ts +72 -0
- package/dist/module-types/src/terminal.d.ts +3 -0
- package/dist/module-types/src/worktrees.d.ts +89 -0
- package/dist/module.css +50 -0
- package/dist/node-fs.d.ts +33 -0
- package/dist/node-fs.d.ts.map +1 -0
- package/dist/node-fs.js +57 -0
- package/dist/node-fs.js.map +1 -0
- package/dist/open-choices.d.ts +15 -0
- package/dist/open-choices.d.ts.map +1 -0
- package/dist/open-choices.js +31 -0
- package/dist/open-choices.js.map +1 -0
- package/dist/openagent-dir.d.ts +11 -0
- package/dist/openagent-dir.d.ts.map +1 -0
- package/dist/openagent-dir.js +11 -0
- package/dist/openagent-dir.js.map +1 -0
- package/dist/openagent-gitignore.d.ts +12 -0
- package/dist/openagent-gitignore.d.ts.map +1 -0
- package/dist/openagent-gitignore.js +19 -0
- package/dist/openagent-gitignore.js.map +1 -0
- package/dist/pick-directory.d.ts +30 -0
- package/dist/pick-directory.d.ts.map +1 -0
- package/dist/pick-directory.js +102 -0
- package/dist/pick-directory.js.map +1 -0
- package/dist/preference-defaults.d.ts +43 -0
- package/dist/preference-defaults.d.ts.map +1 -0
- package/dist/preference-defaults.js +34 -0
- package/dist/preference-defaults.js.map +1 -0
- package/dist/project-commands.d.ts +24 -0
- package/dist/project-commands.d.ts.map +1 -0
- package/dist/project-commands.js +57 -0
- package/dist/project-commands.js.map +1 -0
- package/dist/project-errors.d.ts +60 -0
- package/dist/project-errors.d.ts.map +1 -0
- package/dist/project-errors.js +51 -0
- package/dist/project-errors.js.map +1 -0
- package/dist/project-hooks.d.ts +130 -0
- package/dist/project-hooks.d.ts.map +1 -0
- package/dist/project-hooks.js +232 -0
- package/dist/project-hooks.js.map +1 -0
- package/dist/project-modules.d.ts +50 -0
- package/dist/project-modules.d.ts.map +1 -0
- package/dist/project-modules.js +110 -0
- package/dist/project-modules.js.map +1 -0
- package/dist/project-pass.d.ts +32 -0
- package/dist/project-pass.d.ts.map +1 -0
- package/dist/project-pass.js +45 -0
- package/dist/project-pass.js.map +1 -0
- package/dist/project-presets.d.ts +30 -0
- package/dist/project-presets.d.ts.map +1 -0
- package/dist/project-presets.js +74 -0
- package/dist/project-presets.js.map +1 -0
- package/dist/project.d.ts +29 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +41 -0
- package/dist/project.js.map +1 -0
- package/dist/publish-levels.d.ts +33 -0
- package/dist/publish-levels.d.ts.map +1 -0
- package/dist/publish-levels.js +53 -0
- package/dist/publish-levels.js.map +1 -0
- package/dist/quota-boundary.d.ts +65 -0
- package/dist/quota-boundary.d.ts.map +1 -0
- package/dist/quota-boundary.js +135 -0
- package/dist/quota-boundary.js.map +1 -0
- package/dist/quota-poller.d.ts +83 -0
- package/dist/quota-poller.d.ts.map +1 -0
- package/dist/quota-poller.js +118 -0
- package/dist/quota-poller.js.map +1 -0
- package/dist/registry.d.ts +227 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +364 -0
- package/dist/registry.js.map +1 -0
- package/dist/remove-files.d.ts +24 -0
- package/dist/remove-files.d.ts.map +1 -0
- package/dist/remove-files.js +98 -0
- package/dist/remove-files.js.map +1 -0
- package/dist/request-path.d.ts +10 -0
- package/dist/request-path.d.ts.map +1 -0
- package/dist/request-path.js +16 -0
- package/dist/request-path.js.map +1 -0
- package/dist/store/agent-checkout.d.ts +54 -0
- package/dist/store/agent-checkout.d.ts.map +1 -0
- package/dist/store/agent-checkout.js +61 -0
- package/dist/store/agent-checkout.js.map +1 -0
- package/dist/store/agent-store.d.ts +267 -0
- package/dist/store/agent-store.d.ts.map +1 -0
- package/dist/store/agent-store.js +190 -0
- package/dist/store/agent-store.js.map +1 -0
- package/dist/store/branches.d.ts +164 -0
- package/dist/store/branches.d.ts.map +1 -0
- package/dist/store/branches.js +187 -0
- package/dist/store/branches.js.map +1 -0
- package/dist/store/git-host.d.ts +114 -0
- package/dist/store/git-host.d.ts.map +1 -0
- package/dist/store/git-host.js +103 -0
- package/dist/store/git-host.js.map +1 -0
- package/dist/store/index.d.ts +10 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +10 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/provided.d.ts +17 -0
- package/dist/store/provided.d.ts.map +1 -0
- package/dist/store/provided.js +37 -0
- package/dist/store/provided.js.map +1 -0
- package/dist/store/queue.d.ts +46 -0
- package/dist/store/queue.d.ts.map +1 -0
- package/dist/store/queue.js +61 -0
- package/dist/store/queue.js.map +1 -0
- package/dist/store/repository.d.ts +33 -0
- package/dist/store/repository.d.ts.map +1 -0
- package/dist/store/repository.js +25 -0
- package/dist/store/repository.js.map +1 -0
- package/dist/store/run-record.d.ts +22 -0
- package/dist/store/run-record.d.ts.map +1 -0
- package/dist/store/run-record.js +108 -0
- package/dist/store/run-record.js.map +1 -0
- package/dist/store/runs.d.ts +108 -0
- package/dist/store/runs.d.ts.map +1 -0
- package/dist/store/runs.js +146 -0
- package/dist/store/runs.js.map +1 -0
- package/dist/store/test-branches.d.ts +18 -0
- package/dist/store/test-branches.d.ts.map +1 -0
- package/dist/store/test-branches.js +59 -0
- package/dist/store/test-branches.js.map +1 -0
- package/dist/store/test-runs.d.ts +15 -0
- package/dist/store/test-runs.d.ts.map +1 -0
- package/dist/store/test-runs.js +37 -0
- package/dist/store/test-runs.js.map +1 -0
- package/dist/store/tickets.d.ts +73 -0
- package/dist/store/tickets.d.ts.map +1 -0
- package/dist/store/tickets.js +67 -0
- package/dist/store/tickets.js.map +1 -0
- package/dist/terminal.d.ts +4 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +97 -0
- package/dist/terminal.js.map +1 -0
- package/dist/update-check.d.ts +44 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +71 -0
- package/dist/update-check.js.map +1 -0
- package/dist/worktrees.d.ts +90 -0
- package/dist/worktrees.d.ts.map +1 -0
- package/dist/worktrees.js +123 -0
- package/dist/worktrees.js.map +1 -0
- package/package.json +103 -3
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { readFinishedDiary } from './agent-store.js';
|
|
3
|
+
import { projectBranches } from './branches.js';
|
|
4
|
+
import { isRunId, projectRuns } from './runs.js';
|
|
5
|
+
import { OPENAGENT_DIR } from '../openagent-dir.js';
|
|
6
|
+
/**
|
|
7
|
+
* A run's checkout, as the project's branches provider lists it, or `undefined` when it lists
|
|
8
|
+
* none for the id. The provider's list is shared for a few seconds; a run that is not in it may
|
|
9
|
+
* have started a moment ago, so a miss asks once more, fresh (`branches.ts` bounds how fresh).
|
|
10
|
+
*/
|
|
11
|
+
export async function findCheckout(projectCwd, agentId, branches, opts = {}) {
|
|
12
|
+
const source = await branches(projectCwd).catch(() => undefined);
|
|
13
|
+
if (!source)
|
|
14
|
+
return undefined;
|
|
15
|
+
const known = (await source.list().catch(() => [])).find(checkout => checkout.id === agentId);
|
|
16
|
+
if (known || opts.cached)
|
|
17
|
+
return known;
|
|
18
|
+
return (await source.list({ fresh: true }).catch(() => [])).find(checkout => checkout.id === agentId);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The checkout an agent id resolves to (#738/#797): the agent's own checkout while the project's
|
|
22
|
+
* branches provider lists one for it, else the project root. The list is asked fresh on a miss:
|
|
23
|
+
* a run that just started has its checkout before its tool has written the card (#766), and the
|
|
24
|
+
* event stream resolves its path once, when the browser opens it.
|
|
25
|
+
*
|
|
26
|
+
* An unknown or finished `agentId` falls back to the project root rather than failing: the
|
|
27
|
+
* run's checkout may already be gone, and the project's own state is still the sane thing to
|
|
28
|
+
* act on. This is the one resolution every run-addressed surface shares — the daemon's serve
|
|
29
|
+
* targets and previews, and each dashboard RPC — so the fallback rules cannot drift apart.
|
|
30
|
+
*/
|
|
31
|
+
export async function resolveAgentCheckout(projectCwd, agentId, branches = projectBranches) {
|
|
32
|
+
if (!agentId || !isRunId(agentId))
|
|
33
|
+
return projectCwd;
|
|
34
|
+
return (await findCheckout(projectCwd, agentId, branches))?.path ?? projectCwd;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The diary a run-scoped subscribe should follow (#1472, #1774): the run's own `<id>.jsonl`.
|
|
38
|
+
* While the run has a checkout it is a file there, under the checkout's `.openagent/`,
|
|
39
|
+
* written by the run's tool as the agent works. Once the run is recorded and its checkout
|
|
40
|
+
* reclaimed, it is the finished run's diary, whole, from the project's runs provider. A run that
|
|
41
|
+
* has neither yet was started a moment ago: its tool has not made the checkout, so the diary is
|
|
42
|
+
* nowhere yet, and the tail asks again (`../dashboard-rpc/events-tail.ts`). A project with no
|
|
43
|
+
* runs provider answers the same for a finished run: nowhere, where nothing more comes.
|
|
44
|
+
*
|
|
45
|
+
* `cached` answers from the shared lists only, never asking the checkouts fresh on a miss: for a
|
|
46
|
+
* reader that asks about a finished run for as long as it is open, in case it is resumed.
|
|
47
|
+
*
|
|
48
|
+
* Only the events tails resolve here; every other run-addressed surface keeps
|
|
49
|
+
* {@link resolveAgentCheckout}'s root fallback, where the project's own state is the sane
|
|
50
|
+
* thing to act on.
|
|
51
|
+
*/
|
|
52
|
+
export async function resolveAgentDiary(projectCwd, agentId, runs = projectRuns, branches = projectBranches, opts = {}) {
|
|
53
|
+
if (!agentId || !isRunId(agentId))
|
|
54
|
+
return undefined;
|
|
55
|
+
const checkout = await findCheckout(projectCwd, agentId, branches, opts);
|
|
56
|
+
if (checkout)
|
|
57
|
+
return { file: join(checkout.path, OPENAGENT_DIR, `${agentId}.jsonl`) };
|
|
58
|
+
const finished = await readFinishedDiary(projectCwd, agentId, runs);
|
|
59
|
+
return finished ? { finished } : { pending: true };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=agent-checkout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-checkout.js","sourceRoot":"","sources":["../../src/store/agent-checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAmC,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,OAAO,EAAE,WAAW,EAAmC,MAAM,WAAW,CAAA;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAkB,EAAE,OAAe,EAAE,QAAqB,EAAE,IAAI,GAAyB,EAAE;IAC5H,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAC7B,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;IAC7F,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACtC,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;AACvG,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAkB,EAAE,OAA2B,EAAE,QAAQ,GAAgB,eAAe;IACjI,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,UAAU,CAAA;IACpD,OAAO,CAAC,MAAM,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,IAAI,UAAU,CAAA;AAChF,CAAC;AASD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,OAA2B,EAC3B,IAAI,GAAY,WAAW,EAC3B,QAAQ,GAAgB,eAAe,EACvC,IAAI,GAAyB,EAAE;IAE/B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAA;IACnD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IACxE,IAAI,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,QAAQ,CAAC,EAAE,CAAA;IACrF,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IACnE,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AACpD,CAAC"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import type { OpenAgentEvent } from '../events.js';
|
|
2
|
+
import { type BranchesFor, type Checkout } from './branches.js';
|
|
3
|
+
import { type AnyDiaryLine, type RunsFor } from './runs.js';
|
|
4
|
+
/**
|
|
5
|
+
* The read side of a project's runs (#1774). The daemon runs no agent and writes no run: a run's
|
|
6
|
+
* tool keeps the run's card (`<id>.json`) and diary (`<id>.jsonl`) under the `.openagent/`
|
|
7
|
+
* of the run's own checkout while it works, and a finished run is whatever the project's runs
|
|
8
|
+
* provider answers (`runs.ts`), when one of its packages provides them. The dashboard is a
|
|
9
|
+
* projection of those files and that answer.
|
|
10
|
+
*/
|
|
11
|
+
export type AgentStatus = 'running' | 'done' | 'stopped' | 'failed' | 'waiting';
|
|
12
|
+
/**
|
|
13
|
+
* A queryable snapshot of the agent, derived entirely from the event log. Lets the
|
|
14
|
+
* dashboard render a header (and a future agent list) without parsing every line.
|
|
15
|
+
*/
|
|
16
|
+
export interface AgentMeta {
|
|
17
|
+
status: AgentStatus;
|
|
18
|
+
/** Stable, path-safe id for this agent (derived from {@link startedAt}). */
|
|
19
|
+
id: string;
|
|
20
|
+
/** ISO timestamp the store was opened (run start). */
|
|
21
|
+
startedAt: string;
|
|
22
|
+
/** ISO timestamp of the last event written. */
|
|
23
|
+
updatedAt: string;
|
|
24
|
+
/** ISO timestamp the run ended (the `end` event), absent while it is going. The skill's card field. */
|
|
25
|
+
endedAt?: string;
|
|
26
|
+
/** What the run cost so far in US dollars, summed over its `usage` events; absent until one says. The skill's card field. */
|
|
27
|
+
cost?: number;
|
|
28
|
+
/**
|
|
29
|
+
* The OS pid of the process running this run, on {@link host} — whatever process the project's
|
|
30
|
+
* start hook began. Recorded on the card so Stop has something to signal, and so a reader can
|
|
31
|
+
* tell a run that is working from one whose process died without recording an ending (#716).
|
|
32
|
+
*/
|
|
33
|
+
pid?: number;
|
|
34
|
+
/** The host the owning {@link pid} lives on, so a pid probe only trusts a match (#716). */
|
|
35
|
+
host?: string;
|
|
36
|
+
/** What this session was asked for (from the `intent` event). */
|
|
37
|
+
intent?: string;
|
|
38
|
+
/**
|
|
39
|
+
* The run this one was started for, by its id: this run is that run's subagent. Written on the
|
|
40
|
+
* card by the tool that started it; absent on a run a person or a schedule started.
|
|
41
|
+
*/
|
|
42
|
+
parent?: string;
|
|
43
|
+
/**
|
|
44
|
+
* The branch the run was told to start from, by its name: a person's local branch picked in the
|
|
45
|
+
* launcher, or, for a subagent, its main agent's branch. Written on the card by the tool that
|
|
46
|
+
* started it; absent on a run that started from origin's default branch.
|
|
47
|
+
*/
|
|
48
|
+
base?: string;
|
|
49
|
+
/**
|
|
50
|
+
* The commit the run's own work begins at: where its branch was made, for a run started from a
|
|
51
|
+
* branch other than the default one (a subagent starts from its main agent's). Its changes are
|
|
52
|
+
* measured from it; absent, from the default branch. Written on the card by the tool that
|
|
53
|
+
* started it.
|
|
54
|
+
*/
|
|
55
|
+
baseCommit?: string;
|
|
56
|
+
/**
|
|
57
|
+
* The last commit of the run's work, written on the card when its main agent landed it: its
|
|
58
|
+
* branch is gone, and its changes are read from this commit. Absent on a run that is not landed.
|
|
59
|
+
*/
|
|
60
|
+
landed?: string;
|
|
61
|
+
/** The wrapped agent (from the `session` event). */
|
|
62
|
+
driver?: string;
|
|
63
|
+
/** The workspace the agent builds in (from the `session` event). */
|
|
64
|
+
workspace?: string;
|
|
65
|
+
/** The wrapped agent's real session id, once it reports one. */
|
|
66
|
+
sessionId?: string;
|
|
67
|
+
/** The link shown to jump into the live agent session. */
|
|
68
|
+
sessionLink?: string;
|
|
69
|
+
/**
|
|
70
|
+
* The branch the agent's work is on: the card's, and for a run with a checkout the branch that
|
|
71
|
+
* checkout has checked out right now (the branches provider reads it), since the agent renames
|
|
72
|
+
* its branch itself while the card learns the new name only when the run ends.
|
|
73
|
+
*
|
|
74
|
+
* Recorded, not derived: a clean agent loses its checkout, and the agent renames its branch
|
|
75
|
+
* itself (#1725), so no name built from the run's id is guaranteed to be the one holding the
|
|
76
|
+
* commits.
|
|
77
|
+
*/
|
|
78
|
+
branch?: string;
|
|
79
|
+
/**
|
|
80
|
+
* The hand-off anchor a cloud run pushed for its session to clone at (#1601): an empty commit
|
|
81
|
+
* unique to this run, folded from the `cloud-anchor` event. The session works on a `claude/*`
|
|
82
|
+
* branch of the cloud's own naming, and this is the ancestor by which the daemon's adoption
|
|
83
|
+
* pass recognizes which of origin's `claude/*` heads is this run's. Absent on non-web runs
|
|
84
|
+
* and on web runs whose pre-hand-off push failed.
|
|
85
|
+
*/
|
|
86
|
+
cloudAnchor?: string;
|
|
87
|
+
/**
|
|
88
|
+
* The pull request this session's work is on (E6), recorded when one is opened rather than
|
|
89
|
+
* re-derived from branch names and timestamps by every surface that wants it.
|
|
90
|
+
*/
|
|
91
|
+
pr?: {
|
|
92
|
+
number: number;
|
|
93
|
+
url: string;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* What this session's end-of-session handoff is armed to do (#1102): push its branch, and open
|
|
97
|
+
* a draft PR for it. Both start on.
|
|
98
|
+
*
|
|
99
|
+
* On the meta because the checkboxes that show it live in a different process from the agent that
|
|
100
|
+
* obeys it, and a tab opened after the agent started has no event history to fold — the same
|
|
101
|
+
* reason {@link browserStreamPort} is here. Absent means an older agent, which the reader treats
|
|
102
|
+
* as armed, matching what that agent will actually do.
|
|
103
|
+
*
|
|
104
|
+
* `merge` mirrors the auto-merge arming (#1216, #1382) — display-only, like the rest of this
|
|
105
|
+
* field: the agent merges off its own config, never off the meta. Absent on records from before
|
|
106
|
+
* #1382, which the reader treats as off.
|
|
107
|
+
*/
|
|
108
|
+
handoff?: {
|
|
109
|
+
push: boolean;
|
|
110
|
+
pr: boolean;
|
|
111
|
+
merge?: boolean;
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* How the handoff's merge half went (#1418), folded from the `handoff` event's `merge` field.
|
|
115
|
+
*
|
|
116
|
+
* What the daemon's CI watch scans for: `watched` is a PR waiting for green that *this* side
|
|
117
|
+
* must merge (the repo could not arm the git host's auto-merge), `auto-armed` one the git host will land by
|
|
118
|
+
* itself but whose checks going red is still ours to notice. On the meta because the watch
|
|
119
|
+
* reads metas, not event logs, and must survive both the agent's process and the daemon's.
|
|
120
|
+
* Absent on runs from before this field, and on every agent whose handoff had no merge to report.
|
|
121
|
+
*/
|
|
122
|
+
mergeOutcome?: 'auto-armed' | 'merged' | 'watched' | 'withheld' | 'failed';
|
|
123
|
+
/**
|
|
124
|
+
* The choice gate the agent is currently parked on (#636): set when a `choice` event fires and
|
|
125
|
+
* cleared when its `choice-resolved` (or the agent's `end`) arrives. Present means the agent is
|
|
126
|
+
* paused waiting for the user's answer — the second "needs you" source after open PRs (#624).
|
|
127
|
+
*/
|
|
128
|
+
pendingChoice?: {
|
|
129
|
+
id: string;
|
|
130
|
+
title: string;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* The browser bridge holds a question this run's cloud session is parked on (#1668). Not stored:
|
|
134
|
+
* the daemon annotates a web run's record on the way to the dashboard, the way a relayed run's
|
|
135
|
+
* label is, because the bridge store is in memory and the archive on disk knows nothing of it.
|
|
136
|
+
*/
|
|
137
|
+
cloudWaiting?: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* The run was started by another machine's daemon (#1648): its {@link host} is not this one.
|
|
140
|
+
* Not stored either — annotated on the way to the dashboard like {@link cloudWaiting}, since
|
|
141
|
+
* the shared data branch shows every machine's runs here and only this daemon knows which host
|
|
142
|
+
* it is.
|
|
143
|
+
*/
|
|
144
|
+
otherHost?: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* The run ended clean and its process is still alive on this host: the tool that runs it is
|
|
147
|
+
* still saving its record and cleaning up its checkout, the window every surface says "saving…" for.
|
|
148
|
+
* Not stored: annotated on the way to the dashboard like {@link otherHost}, since only this
|
|
149
|
+
* machine can ask whether the process is alive.
|
|
150
|
+
*/
|
|
151
|
+
saving?: boolean;
|
|
152
|
+
/**
|
|
153
|
+
* The loopback port the agent's browser preview is listening on (#813), or absent when the agent
|
|
154
|
+
* has no browser. What lets the daemon proxy the pane: the port is allocated per agent and the
|
|
155
|
+
* dashboard is a different process, so meta is the only place it can learn it.
|
|
156
|
+
*/
|
|
157
|
+
browserStreamPort?: number;
|
|
158
|
+
/**
|
|
159
|
+
* Where this run executes (#1050/#1053/#610): `actions` for a GitHub Actions run, `web` for a
|
|
160
|
+
* Claude Code cloud session, `remote` when relayed to a connected device (#1067), absent for a
|
|
161
|
+
* local run. Persisted so the agent view can tell a burst-mode Actions run from a stalled live
|
|
162
|
+
* feed, show a cloud agent's session link after a reload, and gate the browser pane off (#1053).
|
|
163
|
+
*/
|
|
164
|
+
target?: 'local' | 'actions' | 'remote' | 'web';
|
|
165
|
+
/** The connected device a remote agent (#1067) executes on, for the session list + notice after a reload. */
|
|
166
|
+
remoteLabel?: string;
|
|
167
|
+
/**
|
|
168
|
+
* The flow this agent started under (#1467): `build` for the scope→build orchestration, `prompt`
|
|
169
|
+
* for the direct-prompt path (research and transparent runs record `prompt` too). Persisted so a
|
|
170
|
+
* continuation (#762) can re-enter the flow its first leg ran — the composer's Resume always
|
|
171
|
+
* arrives as a `prompt` start, and without this record a resumed build agent ended as a bare
|
|
172
|
+
* prompt session (no synthesize framing, no backlog offer). Absent on records from before this
|
|
173
|
+
* field, which a reader treats as unknown (the continuation then keeps the prompt path).
|
|
174
|
+
*/
|
|
175
|
+
kind?: 'build' | 'prompt';
|
|
176
|
+
/**
|
|
177
|
+
* The model id the current leg's agent was started with (#1438), folded from each leg's
|
|
178
|
+
* `session` event — a continuation (#762) may run a different model than the first leg, so
|
|
179
|
+
* the latest leg wins rather than the first pinning it. Absent when the leg left the agent
|
|
180
|
+
* on its own default (and on records from before this field).
|
|
181
|
+
*/
|
|
182
|
+
model?: string;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* The slice of a filesystem the store's reads need: the logic is testable with an in-memory fs,
|
|
186
|
+
* and only {@link nodeStoreFs} touches disk.
|
|
187
|
+
*/
|
|
188
|
+
export interface StoreFs {
|
|
189
|
+
read(path: string): Promise<string>;
|
|
190
|
+
write(path: string, contents: string): Promise<void>;
|
|
191
|
+
append(path: string, contents: string): Promise<void>;
|
|
192
|
+
exists(path: string): Promise<boolean>;
|
|
193
|
+
mkdir(path: string): Promise<void>;
|
|
194
|
+
/** List a directory's entries (names only). Missing dir yields `[]`. */
|
|
195
|
+
readdir(path: string): Promise<string[]>;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* A project's finished runs, most-recent first: what its runs provider answers, unfolded into
|
|
199
|
+
* OpenAgent's meta. No provider, or one that cannot be read, is no runs, never a throw.
|
|
200
|
+
*
|
|
201
|
+
* `since` (epoch ms) is for a caller that only wants recent runs — a poll on a cadence, not the
|
|
202
|
+
* history list. `fresh` asks the provider past its last answer: the caller knows a run just finished.
|
|
203
|
+
*/
|
|
204
|
+
export declare function listAgents(cwd: string, runs?: RunsFor, opts?: {
|
|
205
|
+
since?: number;
|
|
206
|
+
fresh?: boolean;
|
|
207
|
+
}): Promise<AgentMeta[]>;
|
|
208
|
+
/**
|
|
209
|
+
* One finished run's whole diary, from the project's runs provider: for a reader that follows a
|
|
210
|
+
* run past its checkout. `undefined` for an unknown or unsafe id, a project with no provider, and
|
|
211
|
+
* a record that still says `running` — the marker a run's tool may leave as it starts, before its
|
|
212
|
+
* checkout exists: that run is not finished, its diary is still to come in the checkout.
|
|
213
|
+
*/
|
|
214
|
+
export declare function readFinishedDiary(cwd: string, agentId: string, runs?: RunsFor): Promise<AnyDiaryLine[] | undefined>;
|
|
215
|
+
/**
|
|
216
|
+
* Whether `pid` is a live process on this host. `process.kill(pid, 0)` sends no signal but
|
|
217
|
+
* throws `ESRCH` once the process is gone; `EPERM` means it exists under another user (still
|
|
218
|
+
* alive). A pid on a *different* host is unknowable here, so callers guard on {@link AgentMeta.host}
|
|
219
|
+
* before trusting a result. A recycled pid (another process reusing a dead agent's number) reads as
|
|
220
|
+
* alive — an accepted, vanishingly rare miss on a single dev box.
|
|
221
|
+
*/
|
|
222
|
+
export declare function isPidAlive(pid: number): boolean;
|
|
223
|
+
/**
|
|
224
|
+
* The run a checkout holds, off its live card, `<id>.json` under the checkout's `.openagent/`:
|
|
225
|
+
* the shape agent-driver's log writes, read as the meta the card unfolds to, `running` or not (a
|
|
226
|
+
* run that ended waiting on a question keeps its checkout), on the branch the checkout is on now
|
|
227
|
+
* (the provider read it), since the agent renames its branch itself while its card learns the new
|
|
228
|
+
* name only when the run ends. `undefined` when there is no card.
|
|
229
|
+
* Never healed here: the tool that started the run sweeps its own dead runs.
|
|
230
|
+
*/
|
|
231
|
+
export declare function readLiveMeta(checkout: Checkout, fs?: StoreFs): Promise<AgentMeta | undefined>;
|
|
232
|
+
/** A run with a checkout, plus that checkout (#738): where to read the run's git and file status from. */
|
|
233
|
+
export interface LiveAgent extends AgentMeta {
|
|
234
|
+
/** The run's own checkout, a worktree under `.branches/`. */
|
|
235
|
+
cwd: string;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Every run of a project that has a checkout (#738): each checkout the project's branches
|
|
239
|
+
* provider lists, its card through {@link readLiveMeta}. Newest first, by id. Never throws: a
|
|
240
|
+
* project with no provider has no checkouts, and an unreadable checkout is skipped.
|
|
241
|
+
*/
|
|
242
|
+
export declare function readLiveMetas(cwd: string, fs?: StoreFs, branches?: BranchesFor): Promise<LiveAgent[]>;
|
|
243
|
+
/**
|
|
244
|
+
* One run's events, for a reader that replays them: the diary in the run's checkout while it has
|
|
245
|
+
* one (it is the newer of the two), else the finished run's diary from the runs provider.
|
|
246
|
+
* `undefined` for an unknown or unsafe id.
|
|
247
|
+
*/
|
|
248
|
+
export declare function loadAgentEvents(cwd: string, id: string, fs?: StoreFs, runs?: RunsFor, branches?: BranchesFor): Promise<OpenAgentEvent[] | undefined>;
|
|
249
|
+
/**
|
|
250
|
+
* What each of the named runs is doing now, by id: the last thing its diary says it did (a tool
|
|
251
|
+
* it used, with what) or said, on one line. Only a run with a checkout whose card says `running`
|
|
252
|
+
* has an entry: an ended run is doing nothing, and its row says how it ended.
|
|
253
|
+
*/
|
|
254
|
+
export declare function readDoing(cwd: string, ids: readonly string[], fs?: StoreFs, branches?: BranchesFor): Promise<Record<string, string>>;
|
|
255
|
+
/** A {@link StoreFs} backed by `node:fs/promises`. See {@link nodeFs}. */
|
|
256
|
+
export declare function nodeStoreFs(): StoreFs;
|
|
257
|
+
/**
|
|
258
|
+
* A project's runs: the ones with a checkout prepended to the finished ones, newest-first.
|
|
259
|
+
* Forgiving — a side that cannot be read simply contributes nothing.
|
|
260
|
+
*
|
|
261
|
+
* The checkout's card wins over the recorded one (#768): a resumed run has a record from its
|
|
262
|
+
* first leg AND is going again, and the record alone would show a running agent as finished.
|
|
263
|
+
*/
|
|
264
|
+
export declare function readAllAgents(cwd: string, fs?: StoreFs, runs?: RunsFor, branches?: BranchesFor): Promise<AgentMeta[]>;
|
|
265
|
+
/** One run's meta by id, the checkout's card winning over the record: {@link readAllAgents}'s rule for a single row. */
|
|
266
|
+
export declare function findAgent(cwd: string, agentId: string, fs?: StoreFs, runs?: RunsFor, branches?: BranchesFor): Promise<AgentMeta | undefined>;
|
|
267
|
+
//# sourceMappingURL=agent-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-store.d.ts","sourceRoot":"","sources":["../../src/store/agent-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { nodeFs } from '../node-fs.js';
|
|
3
|
+
import { OPENAGENT_DIR } from '../openagent-dir.js';
|
|
4
|
+
import { projectBranches } from './branches.js';
|
|
5
|
+
import { isRunId, parseRunCard, projectRuns } from './runs.js';
|
|
6
|
+
import { eventsOf, fromRunCard } from './run-record.js';
|
|
7
|
+
/** Newest run first: an id sorts chronologically, so the id order IS the time order (no parse). */
|
|
8
|
+
const byIdDesc = (a, b) => (a.id < b.id ? 1 : a.id > b.id ? -1 : 0);
|
|
9
|
+
/**
|
|
10
|
+
* A project's finished runs, most-recent first: what its runs provider answers, unfolded into
|
|
11
|
+
* OpenAgent's meta. No provider, or one that cannot be read, is no runs, never a throw.
|
|
12
|
+
*
|
|
13
|
+
* `since` (epoch ms) is for a caller that only wants recent runs — a poll on a cadence, not the
|
|
14
|
+
* history list. `fresh` asks the provider past its last answer: the caller knows a run just finished.
|
|
15
|
+
*/
|
|
16
|
+
export async function listAgents(cwd, runs = projectRuns, opts = {}) {
|
|
17
|
+
const { since, fresh } = opts;
|
|
18
|
+
const cards = (await (await runs(cwd).catch(() => undefined))?.list(fresh ? { fresh } : {}).catch(() => [])) ?? [];
|
|
19
|
+
return cards
|
|
20
|
+
.filter(card => since === undefined || Date.parse(card.startedAt) >= since)
|
|
21
|
+
.map(fromRunCard)
|
|
22
|
+
.sort(byIdDesc);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* One finished run's whole diary, from the project's runs provider: for a reader that follows a
|
|
26
|
+
* run past its checkout. `undefined` for an unknown or unsafe id, a project with no provider, and
|
|
27
|
+
* a record that still says `running` — the marker a run's tool may leave as it starts, before its
|
|
28
|
+
* checkout exists: that run is not finished, its diary is still to come in the checkout.
|
|
29
|
+
*/
|
|
30
|
+
export async function readFinishedDiary(cwd, agentId, runs = projectRuns) {
|
|
31
|
+
if (!isRunId(agentId))
|
|
32
|
+
return undefined;
|
|
33
|
+
const run = await (await runs(cwd).catch(() => undefined))?.show(agentId).catch(() => undefined);
|
|
34
|
+
return run && run.card.status !== 'running' ? run.diary : undefined;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Whether `pid` is a live process on this host. `process.kill(pid, 0)` sends no signal but
|
|
38
|
+
* throws `ESRCH` once the process is gone; `EPERM` means it exists under another user (still
|
|
39
|
+
* alive). A pid on a *different* host is unknowable here, so callers guard on {@link AgentMeta.host}
|
|
40
|
+
* before trusting a result. A recycled pid (another process reusing a dead agent's number) reads as
|
|
41
|
+
* alive — an accepted, vanishingly rare miss on a single dev box.
|
|
42
|
+
*/
|
|
43
|
+
export function isPidAlive(pid) {
|
|
44
|
+
try {
|
|
45
|
+
process.kill(pid, 0);
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
return err.code === 'EPERM';
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The run a checkout holds, off its live card, `<id>.json` under the checkout's `.openagent/`:
|
|
54
|
+
* the shape agent-driver's log writes, read as the meta the card unfolds to, `running` or not (a
|
|
55
|
+
* run that ended waiting on a question keeps its checkout), on the branch the checkout is on now
|
|
56
|
+
* (the provider read it), since the agent renames its branch itself while its card learns the new
|
|
57
|
+
* name only when the run ends. `undefined` when there is no card.
|
|
58
|
+
* Never healed here: the tool that started the run sweeps its own dead runs.
|
|
59
|
+
*/
|
|
60
|
+
export async function readLiveMeta(checkout, fs = nodeStoreFs()) {
|
|
61
|
+
const path = join(checkout.path, OPENAGENT_DIR, `${checkout.id}.json`);
|
|
62
|
+
if (!(await fs.exists(path)))
|
|
63
|
+
return undefined;
|
|
64
|
+
const card = parseRunCard(await fs.read(path).catch(() => ''));
|
|
65
|
+
if (!card)
|
|
66
|
+
return undefined;
|
|
67
|
+
return fromRunCard(checkout.branch ? { ...card, branch: checkout.branch } : card);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Every run of a project that has a checkout (#738): each checkout the project's branches
|
|
71
|
+
* provider lists, its card through {@link readLiveMeta}. Newest first, by id. Never throws: a
|
|
72
|
+
* project with no provider has no checkouts, and an unreadable checkout is skipped.
|
|
73
|
+
*/
|
|
74
|
+
export async function readLiveMetas(cwd, fs = nodeStoreFs(), branches = projectBranches) {
|
|
75
|
+
const checkouts = (await (await branches(cwd).catch(() => undefined))?.list().catch(() => [])) ?? [];
|
|
76
|
+
const agents = [];
|
|
77
|
+
for (const checkout of checkouts) {
|
|
78
|
+
const meta = await readLiveMeta(checkout, fs).catch(() => undefined);
|
|
79
|
+
if (meta)
|
|
80
|
+
agents.push({ ...meta, cwd: checkout.path });
|
|
81
|
+
}
|
|
82
|
+
return agents.sort(byIdDesc);
|
|
83
|
+
}
|
|
84
|
+
/** A diary file's lines; a torn trailing line from a write in flight is dropped. */
|
|
85
|
+
function parseDiary(raw) {
|
|
86
|
+
const lines = [];
|
|
87
|
+
for (const line of raw.split('\n')) {
|
|
88
|
+
const trimmed = line.trim();
|
|
89
|
+
if (!trimmed)
|
|
90
|
+
continue;
|
|
91
|
+
try {
|
|
92
|
+
lines.push(JSON.parse(trimmed));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return lines;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* One run's events, for a reader that replays them: the diary in the run's checkout while it has
|
|
102
|
+
* one (it is the newer of the two), else the finished run's diary from the runs provider.
|
|
103
|
+
* `undefined` for an unknown or unsafe id.
|
|
104
|
+
*/
|
|
105
|
+
export async function loadAgentEvents(cwd, id, fs = nodeStoreFs(), runs = projectRuns, branches = projectBranches) {
|
|
106
|
+
if (!isRunId(id))
|
|
107
|
+
return undefined;
|
|
108
|
+
const live = (await readLiveMetas(cwd, fs, branches).catch(() => [])).find(agent => agent.id === id);
|
|
109
|
+
const liveDiary = live ? join(live.cwd, OPENAGENT_DIR, `${id}.jsonl`) : undefined;
|
|
110
|
+
if (liveDiary && (await fs.exists(liveDiary)))
|
|
111
|
+
return eventsOf(parseDiary(await fs.read(liveDiary).catch(() => '')));
|
|
112
|
+
const diary = await readFinishedDiary(cwd, id, runs);
|
|
113
|
+
return diary ? eventsOf(diary) : undefined;
|
|
114
|
+
}
|
|
115
|
+
/** How long a line saying what a run is doing may be. */
|
|
116
|
+
const DOING_MAX = 140;
|
|
117
|
+
/** One diary line as what the agent is doing, or `undefined` for a line that says nothing of it. */
|
|
118
|
+
function doingOf(line) {
|
|
119
|
+
const text = line.kind === 'action' && typeof line['label'] === 'string'
|
|
120
|
+
? typeof line['detail'] === 'string' ? `${line['label']} ${line['detail']}` : line['label']
|
|
121
|
+
: line.kind === 'said' && typeof line['text'] === 'string'
|
|
122
|
+
? line['text']
|
|
123
|
+
: undefined;
|
|
124
|
+
const flat = text?.replace(/\s+/g, ' ').trim();
|
|
125
|
+
if (!flat)
|
|
126
|
+
return undefined;
|
|
127
|
+
return flat.length > DOING_MAX ? flat.slice(0, DOING_MAX - 1) + '…' : flat;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* What each of the named runs is doing now, by id: the last thing its diary says it did (a tool
|
|
131
|
+
* it used, with what) or said, on one line. Only a run with a checkout whose card says `running`
|
|
132
|
+
* has an entry: an ended run is doing nothing, and its row says how it ended.
|
|
133
|
+
*/
|
|
134
|
+
export async function readDoing(cwd, ids, fs = nodeStoreFs(), branches = projectBranches) {
|
|
135
|
+
const doing = {};
|
|
136
|
+
const live = await readLiveMetas(cwd, fs, branches).catch(() => []);
|
|
137
|
+
for (const agent of live) {
|
|
138
|
+
if (agent.status !== 'running' || !ids.includes(agent.id))
|
|
139
|
+
continue;
|
|
140
|
+
const lines = (await fs.read(join(agent.cwd, OPENAGENT_DIR, `${agent.id}.jsonl`)).catch(() => '')).split('\n');
|
|
141
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
142
|
+
const said = doingOf(parseDiary(lines[i])[0] ?? { kind: '' });
|
|
143
|
+
if (said === undefined)
|
|
144
|
+
continue;
|
|
145
|
+
doing[agent.id] = said;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return doing;
|
|
150
|
+
}
|
|
151
|
+
/** A {@link StoreFs} backed by `node:fs/promises`. See {@link nodeFs}. */
|
|
152
|
+
export function nodeStoreFs() {
|
|
153
|
+
// Destructured rather than returned whole: the narrow interface is the contract,
|
|
154
|
+
// so the object should not carry methods the store was never handed.
|
|
155
|
+
const { read, write, append, exists, mkdir, readdir } = nodeFs();
|
|
156
|
+
return { read, write, append, exists, mkdir, readdir };
|
|
157
|
+
}
|
|
158
|
+
/** The runs each project had a checkout for at its last {@link readAllAgents}, by project path. */
|
|
159
|
+
const liveSeen = new Map();
|
|
160
|
+
/**
|
|
161
|
+
* A project's runs: the ones with a checkout prepended to the finished ones, newest-first.
|
|
162
|
+
* Forgiving — a side that cannot be read simply contributes nothing.
|
|
163
|
+
*
|
|
164
|
+
* The checkout's card wins over the recorded one (#768): a resumed run has a record from its
|
|
165
|
+
* first leg AND is going again, and the record alone would show a running agent as finished.
|
|
166
|
+
*/
|
|
167
|
+
export async function readAllAgents(cwd, fs = nodeStoreFs(), runs = projectRuns, branches = projectBranches) {
|
|
168
|
+
const live = await readLiveMetas(cwd, fs, branches).catch(() => []);
|
|
169
|
+
// A run that left its checkout since the last read was recorded a moment before: the provider's
|
|
170
|
+
// list read before that would not have it, and its row would blink out until the next read.
|
|
171
|
+
const ids = new Set(live.map(agent => agent.id));
|
|
172
|
+
const before = liveSeen.get(cwd);
|
|
173
|
+
liveSeen.set(cwd, ids);
|
|
174
|
+
const fresh = before !== undefined && [...before].some(id => !ids.has(id));
|
|
175
|
+
const archived = await listAgents(cwd, runs, { fresh }).catch(() => []);
|
|
176
|
+
// A run that is both (a stopped run keeps its checkout, and is recorded) reads as its checkout's
|
|
177
|
+
// card, plus the one late fact the record alone learns: the pull request the dashboard's own
|
|
178
|
+
// Open PR wrote onto the record, since OpenAgent never writes a checkout's card.
|
|
179
|
+
const recorded = new Map(archived.map(agent => [agent.id, agent]));
|
|
180
|
+
const withRecordedPr = (agent) => {
|
|
181
|
+
const pr = recorded.get(agent.id)?.pr;
|
|
182
|
+
return agent.pr === undefined && pr ? { ...agent, pr } : agent;
|
|
183
|
+
};
|
|
184
|
+
return [...live.map(withRecordedPr), ...archived.filter(agent => !live.some(l => l.id === agent.id))];
|
|
185
|
+
}
|
|
186
|
+
/** One run's meta by id, the checkout's card winning over the record: {@link readAllAgents}'s rule for a single row. */
|
|
187
|
+
export async function findAgent(cwd, agentId, fs = nodeStoreFs(), runs = projectRuns, branches = projectBranches) {
|
|
188
|
+
return (await readAllAgents(cwd, fs, runs, branches)).find(agent => agent.id === agentId);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=agent-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-store.js","sourceRoot":"","sources":["../../src/store/agent-store.ts"],"names":[],"mappings":"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"}
|