conductor-oss 0.4.0 → 0.6.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/dist/backend.d.ts +112 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +101 -0
- package/dist/backend.js.map +1 -0
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +8 -6
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +84 -147
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +3 -8
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +56 -128
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/kill.d.ts.map +1 -1
- package/dist/commands/kill.js +6 -11
- package/dist/commands/kill.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +12 -10
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/mcp-server.d.ts +0 -20
- package/dist/commands/mcp-server.d.ts.map +1 -1
- package/dist/commands/mcp-server.js +18 -22
- package/dist/commands/mcp-server.js.map +1 -1
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +7 -12
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/retry.d.ts.map +1 -1
- package/dist/commands/retry.js +2 -5
- package/dist/commands/retry.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +5 -9
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/spawn.d.ts.map +1 -1
- package/dist/commands/spawn.js +16 -17
- package/dist/commands/spawn.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +7 -7
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/task.d.ts.map +1 -1
- package/dist/commands/task.js +3 -5
- package/dist/commands/task.js.map +1 -1
- package/dist/rust-cli.d.ts +9 -0
- package/dist/rust-cli.d.ts.map +1 -0
- package/dist/rust-cli.js +75 -0
- package/dist/rust-cli.js.map +1 -0
- package/node_modules/@conductor-oss/plugin-agent-amp/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-ccr/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-claude-code/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-codex/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-cursor-cli/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-droid/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-gemini/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-github-copilot/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-opencode/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-qwen-code/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-mcp-server/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-desktop/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-discord/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-runtime-tmux/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-scm-github/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-terminal-web/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-tracker-github/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-workspace-worktree/package.json +1 -1
- package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +11 -36
- package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +10 -22
- package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +1 -1
- package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +8 -16
- package/node_modules/jose/dist/webapi/jwk/embedded.js +1 -1
- package/node_modules/jose/dist/webapi/jwk/thumbprint.js +2 -2
- package/node_modules/jose/dist/webapi/jwks/local.js +1 -1
- package/node_modules/jose/dist/webapi/jwks/remote.js +2 -2
- package/node_modules/jose/dist/webapi/jws/flattened/sign.js +5 -8
- package/node_modules/jose/dist/webapi/jws/flattened/verify.js +6 -16
- package/node_modules/jose/dist/webapi/jws/general/sign.js +3 -6
- package/node_modules/jose/dist/webapi/jws/general/verify.js +1 -1
- package/node_modules/jose/dist/webapi/jwt/encrypt.js +5 -12
- package/node_modules/jose/dist/webapi/key/import.js +1 -1
- package/node_modules/jose/dist/webapi/lib/aesgcmkw.js +1 -2
- package/node_modules/jose/dist/webapi/lib/check_key_type.js +1 -1
- package/node_modules/jose/dist/webapi/lib/content_encryption.js +217 -0
- package/node_modules/jose/dist/webapi/lib/crypto_key.js +9 -16
- package/node_modules/jose/dist/webapi/lib/ecdhes.js +1 -1
- package/node_modules/jose/dist/webapi/lib/helpers.js +19 -0
- package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +9 -11
- package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +1 -1
- package/node_modules/jose/dist/webapi/lib/key_management.js +186 -0
- package/node_modules/jose/dist/webapi/lib/normalize_key.js +10 -20
- package/node_modules/jose/dist/webapi/lib/rsaes.js +1 -1
- package/node_modules/jose/dist/webapi/lib/signing.js +68 -0
- package/node_modules/jose/dist/webapi/lib/type_checks.js +40 -0
- package/node_modules/jose/dist/webapi/util/decode_jwt.js +1 -1
- package/node_modules/jose/dist/webapi/util/decode_protected_header.js +1 -1
- package/node_modules/jose/package.json +1 -1
- package/package.json +23 -23
- package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/packages/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/packages/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js +3 -4
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__02aa69a2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__06b6b4e9._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__025155ac._.js → [root-of-the-server]__0cdc32e7._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__105e4f26._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__119c6b92._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__137fab33._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__15c7d025._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1be57288._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__66e8ccce._.js → [root-of-the-server]__1d2f280d._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1e450a04._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2ce39d51._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__30055cf3._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__85b114a2._.js → [root-of-the-server]__308f1548._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__30e803d7._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3cfb9abc._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__a45d3a1d._.js → [root-of-the-server]__3d4382ac._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__41e0efdc._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__42e88695._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__45147dc5._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__46573554._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__47b9cd43._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4c56df8f._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5064824d._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__57113ab2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5b1a6733._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__64061a84._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__668ff2cd._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6a1b89e2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7ddba7a1._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__87674bea._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__89cafbb6._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8baf1991._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__92efd41b._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__97b2fe24._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a2cdc6d9._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a80a6abe._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ac588927._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b03e9dba._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b0bc3324._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b39c66d6._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c207ffb8._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c24a825f._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c27d443a._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d0fc233f._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d35c3ac2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d3d0e4a1._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e2d46590._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e7aa992a._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ec231481._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef43f682._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f134e517._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f7e5d8de._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/_2c837d66._.js +5 -5
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__000b8c99._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__4168e031._.js → [root-of-the-server]__13c58ffa._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__29d8d063._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{_1f2460d5._.js → _08147ea0._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_0e1412de._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_69e05fca._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_80efe193._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b6d31783._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_c0f0e227._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_f36ddaa9._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_4622a292._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{node_modules_@clerk_nextjs_dist_esm_app-router_0a811c5a._.js → node_modules_@clerk_nextjs_dist_esm_app-router_9141c401._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/functions-config-manifest.json +3 -2
- package/web/.next/standalone/packages/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +8 -8
- package/web/.next/standalone/packages/web/.next/static/chunks/4486758753cb685a.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/48b4b6b3dba3b0b6.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/{2e2e8fd2ceca47dc.js → 97ae9d425d9939b0.js} +2 -2
- package/web/.next/standalone/packages/web/src/app/api/agents/route.ts +2 -196
- package/web/.next/standalone/packages/web/src/app/api/auth/session/route.ts +3 -38
- package/web/.next/standalone/packages/web/src/app/api/events/route.ts +61 -2
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/feed/stream/route.ts +75 -5
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/output/stream/route.ts +75 -5
- package/web/.next/static/chunks/4486758753cb685a.js +1 -0
- package/web/.next/static/chunks/48b4b6b3dba3b0b6.js +1 -0
- package/web/.next/static/chunks/{2e2e8fd2ceca47dc.js → 97ae9d425d9939b0.js} +2 -2
- package/node_modules/jose/dist/webapi/lib/cek.js +0 -19
- package/node_modules/jose/dist/webapi/lib/check_cek_length.js +0 -7
- package/node_modules/jose/dist/webapi/lib/check_iv_length.js +0 -7
- package/node_modules/jose/dist/webapi/lib/check_key_length.js +0 -8
- package/node_modules/jose/dist/webapi/lib/decrypt.js +0 -106
- package/node_modules/jose/dist/webapi/lib/decrypt_key_management.js +0 -127
- package/node_modules/jose/dist/webapi/lib/digest.js +0 -4
- package/node_modules/jose/dist/webapi/lib/encrypt.js +0 -74
- package/node_modules/jose/dist/webapi/lib/encrypt_key_management.js +0 -92
- package/node_modules/jose/dist/webapi/lib/get_sign_verify_key.js +0 -12
- package/node_modules/jose/dist/webapi/lib/is_disjoint.js +0 -21
- package/node_modules/jose/dist/webapi/lib/is_jwk.js +0 -6
- package/node_modules/jose/dist/webapi/lib/is_object.js +0 -14
- package/node_modules/jose/dist/webapi/lib/iv.js +0 -19
- package/node_modules/jose/dist/webapi/lib/private_symbols.js +0 -1
- package/node_modules/jose/dist/webapi/lib/sign.js +0 -9
- package/node_modules/jose/dist/webapi/lib/subtle_dsa.js +0 -31
- package/node_modules/jose/dist/webapi/lib/verify.js +0 -14
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__07d320fc._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0d3270b2._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__186317eb._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1888a793._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1ae07be2._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1c1c0e68._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1ce34a21._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__31703e2b._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__394943dc._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3bab2cf7._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3f48e8a2._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__405fc5bc._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__428f1837._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__49e358a8._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5dc7cf0d._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5fd67791._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__61a55b93._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__621d9bca._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__65fcccc8._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6b163dd7._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6c5a5852._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__78d6e137._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7dac9015._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7fcfdb86._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__90d02df4._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__95440fe8._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__968aabbd._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__97658502._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b5c89bad._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b73a3118._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c06cb06b._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c9626ece._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cb1e2942._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cc4964a5._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cdcdbbe3._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ce529f57._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cfaae401._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d2afbd4e._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e0d759be._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__eabdec9e._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ececfccf._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__eda7b9ea._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef38eeb2._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__efd26bfc._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f4d63c18._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f8ebc9db._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_5eb57175.js +0 -6
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_2c78c2f3._.js +0 -3
- package/web/.next/standalone/packages/web/.next/static/chunks/7fd2a83e9e74f215.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/91e9e111a2536f92.js +0 -1
- package/web/.next/static/chunks/7fd2a83e9e74f215.js +0 -1
- package/web/.next/static/chunks/91e9e111a2536f92.js +0 -1
- /package/web/.next/standalone/packages/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_buildManifest.js +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_ssgManifest.js +0 -0
- /package/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_buildManifest.js +0 -0
- /package/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{E4-NvSai1Ps20r9dtdpps → BHEBqfhQTyzF7_rs_EqmL}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
type JsonPrimitive = string | number | boolean | null;
|
|
2
|
+
type JsonValue = JsonPrimitive | JsonValue[] | {
|
|
3
|
+
[key: string]: JsonValue;
|
|
4
|
+
};
|
|
5
|
+
export interface BackendSession {
|
|
6
|
+
id: string;
|
|
7
|
+
projectId: string;
|
|
8
|
+
status: string;
|
|
9
|
+
activity: string | null;
|
|
10
|
+
branch: string | null;
|
|
11
|
+
issueId: string | null;
|
|
12
|
+
summary?: string | null;
|
|
13
|
+
createdAt: string;
|
|
14
|
+
lastActivityAt: string;
|
|
15
|
+
metadata: Record<string, string>;
|
|
16
|
+
workspacePath?: string | null;
|
|
17
|
+
agent?: string;
|
|
18
|
+
model?: string | null;
|
|
19
|
+
reasoningEffort?: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface BackendProject {
|
|
22
|
+
id: string;
|
|
23
|
+
name?: string | null;
|
|
24
|
+
path?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ConfigProject {
|
|
27
|
+
id: string;
|
|
28
|
+
description?: string | null;
|
|
29
|
+
path?: string;
|
|
30
|
+
repo?: string | null;
|
|
31
|
+
defaultBranch?: string | null;
|
|
32
|
+
agent?: string | null;
|
|
33
|
+
}
|
|
34
|
+
export interface ConfigResponse {
|
|
35
|
+
projects: ConfigProject[];
|
|
36
|
+
}
|
|
37
|
+
export interface SessionsResponse {
|
|
38
|
+
sessions: BackendSession[];
|
|
39
|
+
stats: {
|
|
40
|
+
totalSessions: number;
|
|
41
|
+
workingSessions: number;
|
|
42
|
+
openPRs: number;
|
|
43
|
+
needsAttention: number;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export interface SessionResponse {
|
|
47
|
+
session: BackendSession;
|
|
48
|
+
}
|
|
49
|
+
export interface HealthResponse {
|
|
50
|
+
status: string;
|
|
51
|
+
version: string;
|
|
52
|
+
uptime_secs: number;
|
|
53
|
+
executors: number;
|
|
54
|
+
event_subscribers: number;
|
|
55
|
+
queue_depth: number;
|
|
56
|
+
launching_sessions: number;
|
|
57
|
+
recovering_sessions: number;
|
|
58
|
+
detached_sessions: number;
|
|
59
|
+
}
|
|
60
|
+
export interface SessionHealthMetric {
|
|
61
|
+
id: string;
|
|
62
|
+
projectId: string;
|
|
63
|
+
status: string;
|
|
64
|
+
activity: string | null;
|
|
65
|
+
health: string;
|
|
66
|
+
ageMs: number;
|
|
67
|
+
idleMs: number;
|
|
68
|
+
createdAt: string;
|
|
69
|
+
lastActivityAt: string;
|
|
70
|
+
hasRuntime: boolean;
|
|
71
|
+
recoveryState?: string | null;
|
|
72
|
+
detachedPid?: string | null;
|
|
73
|
+
hasPR: boolean;
|
|
74
|
+
}
|
|
75
|
+
export interface SessionHealthResponse {
|
|
76
|
+
metrics: SessionHealthMetric[];
|
|
77
|
+
summary: {
|
|
78
|
+
total: number;
|
|
79
|
+
healthy: number;
|
|
80
|
+
pending: number;
|
|
81
|
+
warning: number;
|
|
82
|
+
critical: number;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export interface CleanupResponse {
|
|
86
|
+
killed: string[];
|
|
87
|
+
skipped: string[];
|
|
88
|
+
errors: Array<{
|
|
89
|
+
sessionId: string;
|
|
90
|
+
error: string;
|
|
91
|
+
}>;
|
|
92
|
+
}
|
|
93
|
+
export interface TaskGraphResponse {
|
|
94
|
+
taskId: string;
|
|
95
|
+
parentTaskId: string | null;
|
|
96
|
+
childrenTaskIds: string[];
|
|
97
|
+
attempts: Array<{
|
|
98
|
+
attemptId: string;
|
|
99
|
+
sessionId: string;
|
|
100
|
+
status: string;
|
|
101
|
+
agent?: string;
|
|
102
|
+
model?: string;
|
|
103
|
+
branch?: string | null;
|
|
104
|
+
}>;
|
|
105
|
+
}
|
|
106
|
+
export declare function apiCall<T = JsonValue>(method: string, path: string, body?: unknown): Promise<T>;
|
|
107
|
+
export declare function fetchConfiguredProjects(): Promise<Map<string, ConfigProject>>;
|
|
108
|
+
export declare function fetchProjects(): Promise<Map<string, BackendProject>>;
|
|
109
|
+
export declare function sessionWorktree(session: BackendSession): string | null;
|
|
110
|
+
export declare function sessionTmuxTarget(session: BackendSession): string;
|
|
111
|
+
export {};
|
|
112
|
+
//# sourceMappingURL=backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACtD,KAAK,SAAS,GAAG,aAAa,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE5E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,CAAC,CAAC;CACJ;AAwED,wBAAsB,OAAO,CAAC,CAAC,GAAG,SAAS,EACzC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,CAAC,CAAC,CA6BZ;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAGnF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAK1E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAEtE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEjE"}
|
package/dist/backend.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
let cachedBackendBaseUrl = null;
|
|
2
|
+
function getConfiguredBackendUrl() {
|
|
3
|
+
const explicitUrl = process.env["CONDUCTOR_BACKEND_URL"]?.trim();
|
|
4
|
+
if (explicitUrl) {
|
|
5
|
+
return explicitUrl.replace(/\/+$/, "");
|
|
6
|
+
}
|
|
7
|
+
const configuredPort = process.env["CONDUCTOR_BACKEND_PORT"]?.trim();
|
|
8
|
+
if (configuredPort) {
|
|
9
|
+
return `http://127.0.0.1:${configuredPort}`;
|
|
10
|
+
}
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
async function isHealthy(baseUrl) {
|
|
14
|
+
try {
|
|
15
|
+
const response = await fetch(`${baseUrl}/api/health`, {
|
|
16
|
+
signal: AbortSignal.timeout(1_500),
|
|
17
|
+
});
|
|
18
|
+
return response.ok;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async function resolveBackendBaseUrl() {
|
|
25
|
+
if (cachedBackendBaseUrl) {
|
|
26
|
+
return cachedBackendBaseUrl;
|
|
27
|
+
}
|
|
28
|
+
const configured = getConfiguredBackendUrl();
|
|
29
|
+
if (configured) {
|
|
30
|
+
cachedBackendBaseUrl = configured;
|
|
31
|
+
return configured;
|
|
32
|
+
}
|
|
33
|
+
for (const candidate of ["http://127.0.0.1:4747", "http://127.0.0.1:4748"]) {
|
|
34
|
+
if (await isHealthy(candidate)) {
|
|
35
|
+
cachedBackendBaseUrl = candidate;
|
|
36
|
+
return candidate;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
cachedBackendBaseUrl = "http://127.0.0.1:4747";
|
|
40
|
+
return cachedBackendBaseUrl;
|
|
41
|
+
}
|
|
42
|
+
async function readErrorMessage(response) {
|
|
43
|
+
const text = await response.text();
|
|
44
|
+
if (!text.trim()) {
|
|
45
|
+
return `${response.status} ${response.statusText}`.trim();
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const payload = JSON.parse(text);
|
|
49
|
+
if (typeof payload.error === "string" && payload.error.trim()) {
|
|
50
|
+
return payload.error;
|
|
51
|
+
}
|
|
52
|
+
if (typeof payload.detail === "string" && payload.detail.trim()) {
|
|
53
|
+
return payload.detail;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Fall back to the raw response body.
|
|
58
|
+
}
|
|
59
|
+
return text;
|
|
60
|
+
}
|
|
61
|
+
export async function apiCall(method, path, body) {
|
|
62
|
+
const baseUrl = await resolveBackendBaseUrl();
|
|
63
|
+
let response;
|
|
64
|
+
try {
|
|
65
|
+
response = await fetch(`${baseUrl}${path}`, {
|
|
66
|
+
method,
|
|
67
|
+
headers: body ? { "Content-Type": "application/json" } : undefined,
|
|
68
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
73
|
+
throw new Error(`Failed to reach Conductor backend at ${baseUrl}: ${message}. Run \`co start\`.`);
|
|
74
|
+
}
|
|
75
|
+
if (!response.ok) {
|
|
76
|
+
throw new Error(await readErrorMessage(response));
|
|
77
|
+
}
|
|
78
|
+
if (response.status === 204) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const text = await response.text();
|
|
82
|
+
if (!text.trim()) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
return JSON.parse(text);
|
|
86
|
+
}
|
|
87
|
+
export async function fetchConfiguredProjects() {
|
|
88
|
+
const response = await apiCall("GET", "/api/config");
|
|
89
|
+
return new Map(response.projects.map((project) => [project.id, project]));
|
|
90
|
+
}
|
|
91
|
+
export async function fetchProjects() {
|
|
92
|
+
const projects = await apiCall("GET", "/api/projects");
|
|
93
|
+
return new Map(projects.map((project) => [project.id, project]));
|
|
94
|
+
}
|
|
95
|
+
export function sessionWorktree(session) {
|
|
96
|
+
return session.workspacePath ?? session.metadata["worktree"] ?? null;
|
|
97
|
+
}
|
|
98
|
+
export function sessionTmuxTarget(session) {
|
|
99
|
+
return session.metadata["tmuxSession"] ?? session.id;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4EtD"}
|
package/dist/commands/cleanup.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import chalk from "chalk";
|
|
8
8
|
import ora from "ora";
|
|
9
|
-
import {
|
|
9
|
+
import { apiCall, fetchConfiguredProjects, } from "../backend.js";
|
|
10
10
|
export function registerCleanup(program) {
|
|
11
11
|
program
|
|
12
12
|
.command("cleanup")
|
|
@@ -15,17 +15,19 @@ export function registerCleanup(program) {
|
|
|
15
15
|
.option("--dry-run", "Show what would be cleaned without doing it")
|
|
16
16
|
.action(async (project, opts) => {
|
|
17
17
|
try {
|
|
18
|
-
const
|
|
19
|
-
if (project && !
|
|
20
|
-
console.error(chalk.red(`Unknown project: ${project}\nAvailable: ${
|
|
18
|
+
const configuredProjects = await fetchConfiguredProjects();
|
|
19
|
+
if (project && !configuredProjects.has(project)) {
|
|
20
|
+
console.error(chalk.red(`Unknown project: ${project}\nAvailable: ${[...configuredProjects.keys()].join(", ")}`));
|
|
21
21
|
process.exit(1);
|
|
22
22
|
}
|
|
23
|
-
const { sessionManager } = await createServices(config);
|
|
24
23
|
if (opts.dryRun) {
|
|
25
24
|
console.log(chalk.bold("Dry run -- checking for cleanable sessions...\n"));
|
|
26
25
|
}
|
|
27
26
|
const spinner = opts.dryRun ? null : ora("Cleaning up sessions").start();
|
|
28
|
-
const result = await
|
|
27
|
+
const result = await apiCall("POST", "/api/sessions/cleanup", {
|
|
28
|
+
projectId: project,
|
|
29
|
+
dryRun: Boolean(opts.dryRun),
|
|
30
|
+
});
|
|
29
31
|
spinner?.stop();
|
|
30
32
|
if (result.killed.length === 0 && result.errors.length === 0) {
|
|
31
33
|
console.log(chalk.dim("No sessions to clean up."));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4FrD"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -1,180 +1,117 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
1
|
import chalk from "chalk";
|
|
3
|
-
import {
|
|
2
|
+
import { apiCall, } from "../backend.js";
|
|
3
|
+
function formatDuration(seconds) {
|
|
4
|
+
if (seconds < 60)
|
|
5
|
+
return `${seconds}s`;
|
|
6
|
+
if (seconds < 3600)
|
|
7
|
+
return `${Math.floor(seconds / 60)}m`;
|
|
8
|
+
if (seconds < 86400)
|
|
9
|
+
return `${Math.floor(seconds / 3600)}h`;
|
|
10
|
+
return `${Math.floor(seconds / 86400)}d`;
|
|
11
|
+
}
|
|
12
|
+
function formatMs(milliseconds) {
|
|
13
|
+
if (milliseconds < 60_000)
|
|
14
|
+
return `${Math.floor(milliseconds / 1_000)}s`;
|
|
15
|
+
if (milliseconds < 3_600_000)
|
|
16
|
+
return `${Math.floor(milliseconds / 60_000)}m`;
|
|
17
|
+
if (milliseconds < 86_400_000)
|
|
18
|
+
return `${Math.floor(milliseconds / 3_600_000)}h`;
|
|
19
|
+
return `${Math.floor(milliseconds / 86_400_000)}d`;
|
|
20
|
+
}
|
|
21
|
+
function healthColor(value) {
|
|
22
|
+
switch (value) {
|
|
23
|
+
case "healthy":
|
|
24
|
+
return chalk.green(value);
|
|
25
|
+
case "pending":
|
|
26
|
+
return chalk.blue(value);
|
|
27
|
+
case "warning":
|
|
28
|
+
return chalk.yellow(value);
|
|
29
|
+
case "critical":
|
|
30
|
+
return chalk.red(value);
|
|
31
|
+
default:
|
|
32
|
+
return chalk.dim(value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function printMetric(metric) {
|
|
36
|
+
console.log(` ${healthColor(metric.health)} ${chalk.green(metric.id)} ${chalk.dim(metric.projectId)} ` +
|
|
37
|
+
`${chalk.yellow(metric.status)} idle=${chalk.dim(formatMs(metric.idleMs))} age=${chalk.dim(formatMs(metric.ageMs))}`);
|
|
38
|
+
}
|
|
4
39
|
export function registerDoctor(program) {
|
|
5
40
|
program
|
|
6
41
|
.command("doctor")
|
|
7
|
-
.description("Diagnose
|
|
8
|
-
.option("-w, --workspace <path>", "Workspace path (
|
|
42
|
+
.description("Diagnose Rust backend health and session runtime issues")
|
|
43
|
+
.option("-w, --workspace <path>", "Workspace path (reported for context only)")
|
|
9
44
|
.option("--json", "Output JSON report")
|
|
10
|
-
.option("--fix-config", "
|
|
45
|
+
.option("--fix-config", "Deprecated. Config sync now happens through the Rust backend")
|
|
11
46
|
.action(async (opts) => {
|
|
12
47
|
try {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
const parseBoardStatus = core["parseBoardStatus"];
|
|
19
|
-
const readRecentWatcherActions = core["readRecentWatcherActions"];
|
|
20
|
-
const defaultAliasMapping = core["defaultAliasMapping"];
|
|
21
|
-
if (!discoverBoards || !parseBoardStatus || !readRecentWatcherActions) {
|
|
22
|
-
throw new Error("Core diagnostics helpers are unavailable. Run pnpm build.");
|
|
23
|
-
}
|
|
24
|
-
const workspace = opts.workspace
|
|
25
|
-
?? process.env["CONDUCTOR_WORKSPACE"]
|
|
26
|
-
?? `${process.env["HOME"]}/.conductor/workspace`;
|
|
27
|
-
const boardPatternsOrConfig = config.boards?.length ? config.boards : config;
|
|
28
|
-
const boards = discoverBoards(workspace, boardPatternsOrConfig);
|
|
29
|
-
const projectIds = new Set(Object.keys(config.projects));
|
|
30
|
-
const aliasMapping = {};
|
|
31
|
-
const boardStatus = [];
|
|
32
|
-
const unresolvedProjectTags = [];
|
|
33
|
-
for (const boardPath of boards) {
|
|
34
|
-
const aliases = resolveBoardAliasesForPath
|
|
35
|
-
? resolveBoardAliasesForPath(config, workspace, boardPath)
|
|
36
|
-
: (defaultAliasMapping ? defaultAliasMapping() : {});
|
|
37
|
-
aliasMapping[boardPath] = aliases;
|
|
38
|
-
if (!existsSync(boardPath)) {
|
|
39
|
-
boardStatus.push({
|
|
40
|
-
boardPath,
|
|
41
|
-
exists: false,
|
|
42
|
-
parseOk: false,
|
|
43
|
-
headingCount: 0,
|
|
44
|
-
headings: [],
|
|
45
|
-
columns: {},
|
|
46
|
-
readyCount: 0,
|
|
47
|
-
unresolvedProjects: [],
|
|
48
|
-
errors: ["Board file does not exist"],
|
|
49
|
-
});
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
const content = readFileSync(boardPath, "utf-8");
|
|
53
|
-
const status = parseBoardStatus(boardPath, content, aliases, projectIds);
|
|
54
|
-
boardStatus.push(status);
|
|
55
|
-
for (const tag of status.unresolvedProjects) {
|
|
56
|
-
unresolvedProjectTags.push({ boardPath, tag });
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
const recentActions = readRecentWatcherActions(workspace, 20);
|
|
48
|
+
const [health, sessionHealth] = await Promise.all([
|
|
49
|
+
apiCall("GET", "/api/health"),
|
|
50
|
+
apiCall("GET", "/api/health/sessions"),
|
|
51
|
+
]);
|
|
52
|
+
const unhealthyMetrics = sessionHealth.metrics.filter((metric) => metric.health !== "healthy");
|
|
60
53
|
const hints = [];
|
|
61
|
-
if (
|
|
62
|
-
hints.push(
|
|
54
|
+
if (health.queue_depth > 0) {
|
|
55
|
+
hints.push(`${health.queue_depth} session${health.queue_depth !== 1 ? "s are" : " is"} queued waiting for launch capacity.`);
|
|
63
56
|
}
|
|
64
|
-
if (
|
|
65
|
-
hints.push("
|
|
57
|
+
if (health.recovering_sessions > 0) {
|
|
58
|
+
hints.push(`${health.recovering_sessions} session${health.recovering_sessions !== 1 ? "s are" : " is"} currently in recovery.`);
|
|
66
59
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
60
|
+
if (sessionHealth.summary.critical > 0) {
|
|
61
|
+
hints.push(`${sessionHealth.summary.critical} session${sessionHealth.summary.critical !== 1 ? "s are" : " is"} in a critical state. Review \`co status\` and session output.`);
|
|
62
|
+
}
|
|
63
|
+
if (opts.fixConfig) {
|
|
64
|
+
hints.push("`--fix-config` moved out of the JS CLI path. Restart the Rust backend to rerun config/support-file sync.");
|
|
71
65
|
}
|
|
72
|
-
if (
|
|
73
|
-
hints.push("No
|
|
66
|
+
if (hints.length === 0) {
|
|
67
|
+
hints.push("No backend health issues detected.");
|
|
74
68
|
}
|
|
75
69
|
const report = {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
boardStatus,
|
|
79
|
-
unresolvedProjectTags,
|
|
80
|
-
recentActions,
|
|
70
|
+
backend: health,
|
|
71
|
+
sessions: sessionHealth,
|
|
81
72
|
hints,
|
|
73
|
+
workspace: opts.workspace ?? process.env["CONDUCTOR_WORKSPACE"] ?? null,
|
|
82
74
|
};
|
|
83
75
|
if (opts.json) {
|
|
84
76
|
console.log(JSON.stringify(report, null, 2));
|
|
85
77
|
return;
|
|
86
78
|
}
|
|
87
79
|
console.log(chalk.bold("Conductor Doctor"));
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
console.log(chalk.bold("Watched Boards"));
|
|
91
|
-
if (boards.length === 0) {
|
|
92
|
-
console.log(chalk.yellow(" none"));
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
for (const board of boards) {
|
|
96
|
-
console.log(` ${chalk.cyan(board)}`);
|
|
97
|
-
}
|
|
80
|
+
if (report.workspace) {
|
|
81
|
+
console.log(chalk.dim(`Workspace: ${report.workspace}`));
|
|
98
82
|
}
|
|
99
83
|
console.log();
|
|
100
|
-
console.log(chalk.bold("
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
console.log(` ${chalk.yellow("unresolved projects:")} ${status.unresolvedProjects.join(", ")}`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
84
|
+
console.log(chalk.bold("Backend Health"));
|
|
85
|
+
console.log(` Status: ${health.status === "ok" ? chalk.green(health.status) : chalk.red(health.status)}`);
|
|
86
|
+
console.log(` Version: ${chalk.cyan(health.version)}`);
|
|
87
|
+
console.log(` Uptime: ${chalk.dim(formatDuration(health.uptime_secs))}`);
|
|
88
|
+
console.log(` Executors: ${chalk.dim(String(health.executors))}`);
|
|
89
|
+
console.log(` Subscribers: ${chalk.dim(String(health.event_subscribers))}`);
|
|
90
|
+
console.log(` Queue depth: ${chalk.dim(String(health.queue_depth))}`);
|
|
91
|
+
console.log(` Launching: ${chalk.dim(String(health.launching_sessions))}`);
|
|
92
|
+
console.log(` Recovering: ${chalk.dim(String(health.recovering_sessions))}`);
|
|
93
|
+
console.log(` Detached: ${chalk.dim(String(health.detached_sessions))}`);
|
|
113
94
|
console.log();
|
|
114
|
-
console.log(chalk.bold("
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
const lvl = action.level === "error" ? chalk.red(action.level) : action.level === "debug" ? chalk.dim(action.level) : chalk.green(action.level);
|
|
121
|
-
const board = action.boardPath ? ` ${chalk.cyan(action.boardPath)}` : "";
|
|
122
|
-
console.log(` ${chalk.dim(action.ts)} ${lvl}${board} ${action.action}`);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
// Config drift detection
|
|
126
|
-
const detectConfigDrift = core["detectConfigDrift"];
|
|
127
|
-
const syncAllProjectConfigs = core["syncAllProjectConfigs"];
|
|
128
|
-
let configDriftReports = [];
|
|
129
|
-
if (detectConfigDrift) {
|
|
130
|
-
configDriftReports = detectConfigDrift(config);
|
|
131
|
-
if (opts.fixConfig && syncAllProjectConfigs) {
|
|
132
|
-
const syncResult = syncAllProjectConfigs(config);
|
|
133
|
-
console.log();
|
|
134
|
-
console.log(chalk.bold("Config Sync"));
|
|
135
|
-
if (syncResult.fixed > 0) {
|
|
136
|
-
console.log(chalk.green(` Fixed ${syncResult.fixed} project-local config(s)`));
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
console.log(chalk.green(" All project-local configs are in sync"));
|
|
140
|
-
}
|
|
141
|
-
// Re-detect after fix
|
|
142
|
-
configDriftReports = detectConfigDrift(config);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
95
|
+
console.log(chalk.bold("Session Health"));
|
|
96
|
+
console.log(` total=${chalk.dim(String(sessionHealth.summary.total))} ` +
|
|
97
|
+
`healthy=${chalk.green(String(sessionHealth.summary.healthy))} ` +
|
|
98
|
+
`pending=${chalk.blue(String(sessionHealth.summary.pending))} ` +
|
|
99
|
+
`warning=${chalk.yellow(String(sessionHealth.summary.warning))} ` +
|
|
100
|
+
`critical=${chalk.red(String(sessionHealth.summary.critical))}`);
|
|
145
101
|
console.log();
|
|
146
|
-
console.log(chalk.bold("
|
|
147
|
-
if (
|
|
148
|
-
console.log(chalk.
|
|
102
|
+
console.log(chalk.bold("Sessions Needing Attention"));
|
|
103
|
+
if (unhealthyMetrics.length === 0) {
|
|
104
|
+
console.log(chalk.green(" None"));
|
|
149
105
|
}
|
|
150
106
|
else {
|
|
151
|
-
for (const
|
|
152
|
-
|
|
153
|
-
drift.status === "missing" ? chalk.yellow("missing") :
|
|
154
|
-
drift.status === "unmanaged" ? chalk.blue("unmanaged") :
|
|
155
|
-
chalk.red("drifted");
|
|
156
|
-
console.log(` ${statusLabel} ${chalk.cyan(drift.projectId)}`);
|
|
157
|
-
if (drift.reason) {
|
|
158
|
-
console.log(` ${chalk.dim(drift.reason)}`);
|
|
159
|
-
}
|
|
160
|
-
if (drift.driftedFields && drift.driftedFields.length > 0) {
|
|
161
|
-
console.log(` ${chalk.yellow("changed:")} ${drift.driftedFields.join(", ")}`);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
const driftCount = configDriftReports.filter((r) => r.status === "drifted" || r.status === "missing").length;
|
|
165
|
-
if (driftCount > 0 && !opts.fixConfig) {
|
|
166
|
-
hints.push(`${driftCount} project config(s) are drifted or missing. Run \`co doctor --fix-config\` to repair.`);
|
|
107
|
+
for (const metric of unhealthyMetrics) {
|
|
108
|
+
printMetric(metric);
|
|
167
109
|
}
|
|
168
110
|
}
|
|
169
111
|
console.log();
|
|
170
112
|
console.log(chalk.bold("Fix Hints"));
|
|
171
|
-
|
|
172
|
-
console.log(chalk.
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
for (const hint of hints) {
|
|
176
|
-
console.log(` ${chalk.yellow("-")} ${hint}`);
|
|
177
|
-
}
|
|
113
|
+
for (const hint of hints) {
|
|
114
|
+
console.log(` ${chalk.yellow("-")} ${hint}`);
|
|
178
115
|
}
|
|
179
116
|
}
|
|
180
117
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,OAAO,GAIR,MAAM,eAAe,CAAC;AAQvB,SAAS,cAAc,CAAC,OAAe;IACrC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,IAAI,OAAO,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC;IAC1D,IAAI,OAAO,GAAG,KAAK;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IAC7D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,SAAS,QAAQ,CAAC,YAAoB;IACpC,IAAI,YAAY,GAAG,MAAM;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC;IACzE,IAAI,YAAY,GAAG,SAAS;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC;IAC7E,IAAI,YAAY,GAAG,UAAU;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC;IACjF,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC;AACrD,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B;YACE,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAA2B;IAC9C,OAAO,CAAC,GAAG,CACT,KAAK,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG;QAC3F,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CACrH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,wBAAwB,EAAE,4CAA4C,CAAC;SAC9E,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC;SACtC,MAAM,CAAC,cAAc,EAAE,8DAA8D,CAAC;SACtF,MAAM,CAAC,KAAK,EAAE,IAAmB,EAAE,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChD,OAAO,CAAiB,KAAK,EAAE,aAAa,CAAC;gBAC7C,OAAO,CAAwB,KAAK,EAAE,sBAAsB,CAAC;aAC9D,CAAC,CAAC;YAEH,MAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;YAC/F,MAAM,KAAK,GAAa,EAAE,CAAC;YAE3B,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,WAAW,MAAM,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,sCAAsC,CAAC,CAAC;YAC/H,CAAC;YACD,IAAI,MAAM,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,mBAAmB,WAAW,MAAM,CAAC,mBAAmB,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,CAAC;YAClI,CAAC;YACD,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,WAAW,aAAa,CAAC,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,gEAAgE,CAAC,CAAC;YACjL,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,0GAA0G,CAAC,CAAC;YACzH,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,MAAM,GAAG;gBACb,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,aAAa;gBACvB,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,IAAI;aACxE,CAAC;YAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChH,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;YAE7E,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CACT,WAAW,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG;gBAC5D,WAAW,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG;gBAChE,WAAW,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG;gBAC/D,WAAW,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG;gBACjE,YAAY,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAChE,CAAC;YAEF,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACtD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;oBACtC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|