@mndrk/agx 1.4.59 → 1.4.61
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/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/app-build-manifest.json +84 -70
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/app-path-routes-manifest.json +12 -10
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/build-manifest.json +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/prerender-manifest.json +12 -12
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/routes-manifest.json +16 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/audit/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/[...nextauth]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/daemon-secret/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/device/code/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/device/token/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/domains/[id]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/domains/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/learnings/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/logs/stream/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/signal/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/start/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/status/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/[id]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/complete/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/stage-prompts/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/comments/[commentId]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/comments/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/costs/route.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/costs/route.js.nft.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/costs/route_client-reference-manifest.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/dependencies/route.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/dependencies/route.js.nft.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/dependencies/route_client-reference-manifest.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/heartbeat/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/history/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/logs/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/restart-stage/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/stream/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/user-settings/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/workflows/[id]/nodes/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/workflows/[id]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/auth/callback/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/auth/device/page.js +5 -5
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/auth/device/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/auth/device.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/auth/device.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/dashboard/page.js +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/dashboard/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/dashboard/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/dashboard.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/dashboard.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/login/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/login.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/login.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page.js +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/tasks/page.js +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/tasks/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/tasks/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/workflow/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/workflow/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings/page.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app-paths-manifest.json +12 -10
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/4269.js +23 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/6158.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/6317.js +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/7143.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/middleware-manifest.json +5 -5
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/pages/404.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/pages/500.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/3424-b2ffdccf784b0ce5.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/audit/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/[...nextauth]/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/daemon-secret/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/device/code/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/device/token/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/refresh/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/status/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/domains/[id]/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/domains/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/health/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/learnings/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/logs/stream/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/orchestrator/tasks/[taskId]/cancel/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/orchestrator/tasks/[taskId]/signal/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/orchestrator/tasks/[taskId]/start/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/orchestrator/tasks/[taskId]/status/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/projects/[id]/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/projects/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/providers/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/queue/complete/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/queue/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/stage-prompts/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/comments/[commentId]/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/comments/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/costs/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/dependencies/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/heartbeat/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/history/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/logs/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/restart-stage/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/stream/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/user-settings/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/workflows/[id]/nodes/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/workflows/[id]/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/workflows/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/auth/callback/route-04c3c3cacd67004b.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/auth/device/{page-903c045ac7fbfd1c.js → page-1c6069a7a4dd058d.js} +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/dashboard/{page-ea6ccecbfa743b53.js → page-445516e005034dd0.js} +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/projects/[slug]/{page-7357b68f3783a0b4.js → page-f1c8a838c838b996.js} +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/projects/[slug]/tasks/{page-ec17b64371f48524.js → page-c76247052ae5aa25.js} +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/worker/index.js +50 -14
- package/lib/cli/runCli.js +90 -12
- package/lib/executor.js +5 -0
- package/lib/telemetry.js +109 -0
- package/package.json +3 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/2298.js +0 -23
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/2456-972d3e5278eb4a3a.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/audit/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/[...nextauth]/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/daemon-secret/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/device/code/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/device/token/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/refresh/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/auth/status/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/domains/[id]/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/domains/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/health/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/learnings/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/logs/stream/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/orchestrator/tasks/[taskId]/cancel/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/orchestrator/tasks/[taskId]/signal/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/orchestrator/tasks/[taskId]/start/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/orchestrator/tasks/[taskId]/status/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/projects/[id]/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/projects/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/providers/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/queue/complete/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/queue/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/stage-prompts/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/comments/[commentId]/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/comments/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/heartbeat/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/history/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/logs/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/restart-stage/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/[id]/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/tasks/stream/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/user-settings/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/workflows/[id]/nodes/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/workflows/[id]/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/api/workflows/route-13be4cfc17a5f679.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/auth/callback/route-13be4cfc17a5f679.js +0 -1
- /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{24myOUbvbiDvyX6evcbZU → x2zqTGbGGK8nA-dlhcQDx}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{24myOUbvbiDvyX6evcbZU → x2zqTGbGGK8nA-dlhcQDx}/_ssgManifest.js +0 -0
package/lib/cli/runCli.js
CHANGED
|
@@ -375,6 +375,9 @@ async function checkOnboarding() {
|
|
|
375
375
|
return true;
|
|
376
376
|
}
|
|
377
377
|
|
|
378
|
+
// Show telemetry notice on first run
|
|
379
|
+
require('../telemetry').showNoticeIfFirstRun();
|
|
380
|
+
|
|
378
381
|
// ============================================================
|
|
379
382
|
// CLOUD STATE HELPERS
|
|
380
383
|
// ============================================================
|
|
@@ -495,6 +498,7 @@ async function checkOnboarding() {
|
|
|
495
498
|
|
|
496
499
|
const url = `${config.apiUrl}${endpoint}`;
|
|
497
500
|
logExecutionFlow('cloudRequest', 'processing', `url=${url}`);
|
|
501
|
+
const apiStart = Date.now();
|
|
498
502
|
try {
|
|
499
503
|
const makeRequest = async (cfg) => {
|
|
500
504
|
const options = {
|
|
@@ -518,6 +522,7 @@ async function checkOnboarding() {
|
|
|
518
522
|
let { response, data } = await makeRequest(activeConfig);
|
|
519
523
|
|
|
520
524
|
if (response.status === 401) {
|
|
525
|
+
require('../telemetry').track('api_call_retry', { method, endpoint });
|
|
521
526
|
const refreshedConfig = await tryRefreshCloudToken(activeConfig);
|
|
522
527
|
if (refreshedConfig?.token) {
|
|
523
528
|
activeConfig = refreshedConfig;
|
|
@@ -530,9 +535,11 @@ async function checkOnboarding() {
|
|
|
530
535
|
throw new Error(data?.error || `HTTP ${response.status}`);
|
|
531
536
|
}
|
|
532
537
|
logExecutionFlow('cloudRequest', 'output', `status=${response.status}`);
|
|
538
|
+
require('../telemetry').track('api_call', { method, endpoint, status: response.status, duration_ms: Date.now() - apiStart });
|
|
533
539
|
return data;
|
|
534
540
|
} catch (err) {
|
|
535
541
|
logExecutionFlow('cloudRequest', 'output', `exception ${err?.message || err}`);
|
|
542
|
+
require('../telemetry').track('api_call_error', { method, endpoint, error: err.message, duration_ms: Date.now() - apiStart });
|
|
536
543
|
throw err;
|
|
537
544
|
}
|
|
538
545
|
}
|
|
@@ -790,6 +797,7 @@ async function checkOnboarding() {
|
|
|
790
797
|
let lastRun = null;
|
|
791
798
|
let runIndexEntry = null;
|
|
792
799
|
|
|
800
|
+
const taskStart = Date.now();
|
|
793
801
|
logger.log('system', `[daemon] picked task ${taskId} (${task?.stage || 'unknown'})\n`);
|
|
794
802
|
console.log(`${c.dim}[daemon] picked ${taskId} (${task?.stage || 'unknown'}) via ${provider}${model ? `/${model}` : ''}${c.reset}`);
|
|
795
803
|
|
|
@@ -976,6 +984,7 @@ async function checkOnboarding() {
|
|
|
976
984
|
};
|
|
977
985
|
console.error(`[daemon] execution failed:`, err?.stack || message);
|
|
978
986
|
logger.log('error', `[daemon] execution failed: ${message}\n${err?.stack || ''}\n`);
|
|
987
|
+
require('../telemetry').track('task_failed', { engine: provider, model, error: message, duration_ms: Date.now() - taskStart });
|
|
979
988
|
} finally {
|
|
980
989
|
await logger.flushAll();
|
|
981
990
|
try { cancellationWatcher?.destroy?.(); } catch { }
|
|
@@ -1007,6 +1016,8 @@ async function checkOnboarding() {
|
|
|
1007
1016
|
...(runIndexEntry ? { run_entry: runIndexEntry } : {}),
|
|
1008
1017
|
});
|
|
1009
1018
|
|
|
1019
|
+
require('../telemetry').track('task_completed', { engine: provider, model, decision: decisionPayload.decision, duration_ms: Date.now() - taskStart });
|
|
1020
|
+
|
|
1010
1021
|
// Best-effort: ensure cloud task status is terminal when stage/decision indicates completion.
|
|
1011
1022
|
// Some board runtimes advance `stage` to "done" but leave `status` as "in_progress".
|
|
1012
1023
|
try {
|
|
@@ -1085,6 +1096,7 @@ async function checkOnboarding() {
|
|
|
1085
1096
|
const queue = await cloudRequest('GET', '/api/queue');
|
|
1086
1097
|
task = queue?.task || null;
|
|
1087
1098
|
} catch (err) {
|
|
1099
|
+
require('../telemetry').track('daemon_poll_error', { error: err?.message || String(err) });
|
|
1088
1100
|
console.error(`${c.red}[daemon][${workerLabel}] queue poll failed:${c.reset} ${err?.message || err}`);
|
|
1089
1101
|
if (!stopping) await sleep(pollMs);
|
|
1090
1102
|
continue;
|
|
@@ -1173,12 +1185,29 @@ async function checkOnboarding() {
|
|
|
1173
1185
|
// ============================================================
|
|
1174
1186
|
|
|
1175
1187
|
// Provider aliases for convenience
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1188
|
+
const PROVIDER_ALIASES = {
|
|
1189
|
+
'c': 'claude', 'cl': 'claude', 'claude': 'claude',
|
|
1190
|
+
'x': 'codex', 'codex': 'codex',
|
|
1191
|
+
'g': 'gemini', 'gem': 'gemini', 'gemini': 'gemini',
|
|
1192
|
+
'o': 'ollama', 'ol': 'ollama', 'ollama': 'ollama'
|
|
1193
|
+
};
|
|
1194
|
+
|
|
1195
|
+
function collectFlagValues(args, flag) {
|
|
1196
|
+
const values = [];
|
|
1197
|
+
const consumedIndices = new Set();
|
|
1198
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
1199
|
+
if (args[i] === flag) {
|
|
1200
|
+
consumedIndices.add(i);
|
|
1201
|
+
const next = args[i + 1];
|
|
1202
|
+
if (typeof next === 'string' && next.length) {
|
|
1203
|
+
values.push(next);
|
|
1204
|
+
consumedIndices.add(i + 1);
|
|
1205
|
+
}
|
|
1206
|
+
i += 1;
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1209
|
+
return { values, consumedIndices };
|
|
1210
|
+
}
|
|
1182
1211
|
|
|
1183
1212
|
// ============================================================
|
|
1184
1213
|
// LOCAL-FIRST CLI COMMANDS
|
|
@@ -1203,6 +1232,7 @@ async function checkOnboarding() {
|
|
|
1203
1232
|
if (cmd === 'new') {
|
|
1204
1233
|
const jsonMode = args.includes('--json');
|
|
1205
1234
|
const runAfter = args.includes('--run') || args.includes('-r');
|
|
1235
|
+
const { values: dependsOnValues, consumedIndices: dependsOnSkipIndices } = collectFlagValues(args, '--depends-on');
|
|
1206
1236
|
|
|
1207
1237
|
// Parse --provider / -P flag and resolve alias
|
|
1208
1238
|
let provider = null;
|
|
@@ -1269,6 +1299,9 @@ async function checkOnboarding() {
|
|
|
1269
1299
|
const flagsToRemove = ['--json', '--run', '-r', '--provider', '-P', '--model', '-m', '--project', '--type', '--ticket-type'];
|
|
1270
1300
|
const goalParts = [];
|
|
1271
1301
|
for (let i = 1; i < args.length; i++) {
|
|
1302
|
+
if (dependsOnSkipIndices.has(i)) {
|
|
1303
|
+
continue;
|
|
1304
|
+
}
|
|
1272
1305
|
if (flagsToRemove.includes(args[i])) {
|
|
1273
1306
|
if (args[i] === '--provider' || args[i] === '-P') i++;
|
|
1274
1307
|
if (args[i] === '--model' || args[i] === '-m') i++;
|
|
@@ -1282,9 +1315,9 @@ async function checkOnboarding() {
|
|
|
1282
1315
|
|
|
1283
1316
|
if (!goalText) {
|
|
1284
1317
|
if (jsonMode) {
|
|
1285
|
-
console.log(JSON.stringify({ error: 'missing_goal', usage: 'agx new "<goal>" [--provider c] [--project <slug>] [--type spike|task] [--run]' }));
|
|
1318
|
+
console.log(JSON.stringify({ error: 'missing_goal', usage: 'agx new "<goal>" [--provider c] [--project <slug>] [--type spike|task] [--run] [--depends-on <task-id>]' }));
|
|
1286
1319
|
} else {
|
|
1287
|
-
console.log(`${c.red}Usage:${c.reset} agx new "<goal>" [--provider c|g|o|x] [--project <slug>] [--type spike|task] [--run]`);
|
|
1320
|
+
console.log(`${c.red}Usage:${c.reset} agx new "<goal>" [--provider c|g|o|x] [--project <slug>] [--type spike|task] [--run] [--depends-on <task-id>]`);
|
|
1288
1321
|
}
|
|
1289
1322
|
process.exit(1);
|
|
1290
1323
|
}
|
|
@@ -1318,8 +1351,13 @@ async function checkOnboarding() {
|
|
|
1318
1351
|
|
|
1319
1352
|
const content = `---\n${frontmatter.join('\n')}\n---\n\n# ${goalText}\n`;
|
|
1320
1353
|
|
|
1321
|
-
const
|
|
1354
|
+
const payload = { content };
|
|
1355
|
+
if (dependsOnValues.length) {
|
|
1356
|
+
payload.depends_on = dependsOnValues;
|
|
1357
|
+
}
|
|
1358
|
+
const { task } = await cloudRequest('POST', '/api/tasks', payload);
|
|
1322
1359
|
console.log(`${c.green}✓${c.reset} Task created in cloud`);
|
|
1360
|
+
require('../telemetry').track('task_created', { engine: provider, model: model || null });
|
|
1323
1361
|
if (task?.id) {
|
|
1324
1362
|
console.log(`${c.dim}Task ID: ${task.id}${c.reset}`);
|
|
1325
1363
|
if (task.slug) {
|
|
@@ -1473,10 +1511,15 @@ async function checkOnboarding() {
|
|
|
1473
1511
|
process.exit(1);
|
|
1474
1512
|
}
|
|
1475
1513
|
|
|
1514
|
+
const { values: dependsOnValues, consumedIndices: dependsOnSkipIndices } = collectFlagValues(args, '--depends-on');
|
|
1515
|
+
|
|
1476
1516
|
// Parse flags
|
|
1477
1517
|
let projectSlug = null, projectId = null, priority = null, engine = null, provider = null, model = null, ticketType = null, createdBy = 'user';
|
|
1478
1518
|
const taskParts = [];
|
|
1479
1519
|
for (let i = 1; i < args.length; i++) {
|
|
1520
|
+
if (dependsOnSkipIndices.has(i)) {
|
|
1521
|
+
continue;
|
|
1522
|
+
}
|
|
1480
1523
|
if (args[i] === '--project' || args[i] === '-p') {
|
|
1481
1524
|
projectSlug = args[++i];
|
|
1482
1525
|
} else if (args[i] === '--project-slug') {
|
|
@@ -1502,7 +1545,7 @@ async function checkOnboarding() {
|
|
|
1502
1545
|
|
|
1503
1546
|
const taskDesc = taskParts.join(' ');
|
|
1504
1547
|
if (!taskDesc) {
|
|
1505
|
-
console.log(`${c.yellow}Usage:${c.reset} agx new "<task>" [--project <slug>] [--project-slug <slug>] [--project-id <uuid>] [--priority n] [--engine claude|gemini|ollama|codex] [--type spike|task]`);
|
|
1548
|
+
console.log(`${c.yellow}Usage:${c.reset} agx new "<task>" [--project <slug>] [--project-slug <slug>] [--project-id <uuid>] [--priority n] [--engine claude|gemini|ollama|codex] [--type spike|task] [--depends-on <task-id>]`);
|
|
1506
1549
|
process.exit(1);
|
|
1507
1550
|
}
|
|
1508
1551
|
|
|
@@ -1532,7 +1575,11 @@ async function checkOnboarding() {
|
|
|
1532
1575
|
const content = `---\n${frontmatter.join('\n')}\n---\n\n# ${taskDesc}\n`;
|
|
1533
1576
|
|
|
1534
1577
|
try {
|
|
1535
|
-
const
|
|
1578
|
+
const payload = { content };
|
|
1579
|
+
if (dependsOnValues.length) {
|
|
1580
|
+
payload.depends_on = dependsOnValues;
|
|
1581
|
+
}
|
|
1582
|
+
const { task } = await cloudRequest('POST', '/api/tasks', payload);
|
|
1536
1583
|
console.log(`${c.green}✓${c.reset} Task created`);
|
|
1537
1584
|
console.log(` ID: ${task.id}`);
|
|
1538
1585
|
if (task.slug) {
|
|
@@ -2685,6 +2732,28 @@ async function checkOnboarding() {
|
|
|
2685
2732
|
process.exit(0);
|
|
2686
2733
|
}
|
|
2687
2734
|
|
|
2735
|
+
// ============================================================
|
|
2736
|
+
// agx telemetry - Manage anonymous usage telemetry
|
|
2737
|
+
// ============================================================
|
|
2738
|
+
if (cmd === 'telemetry') {
|
|
2739
|
+
const telemetry = require('../telemetry');
|
|
2740
|
+
const subCmd = args[1];
|
|
2741
|
+
if (subCmd === 'on') {
|
|
2742
|
+
telemetry.setEnabled(true);
|
|
2743
|
+
console.log(`${c.green}✓${c.reset} Telemetry enabled`);
|
|
2744
|
+
} else if (subCmd === 'off') {
|
|
2745
|
+
telemetry.setEnabled(false);
|
|
2746
|
+
console.log(`${c.green}✓${c.reset} Telemetry disabled`);
|
|
2747
|
+
} else {
|
|
2748
|
+
console.log(`${c.bold}agx telemetry${c.reset} — anonymous usage analytics\n`);
|
|
2749
|
+
console.log(` Status: ${telemetry.getStatus() === 'enabled' ? `${c.green}enabled${c.reset}` : `${c.dim}disabled${c.reset}`}`);
|
|
2750
|
+
console.log(`\n agx telemetry on Enable telemetry`);
|
|
2751
|
+
console.log(` agx telemetry off Disable telemetry`);
|
|
2752
|
+
console.log(`\n ${c.dim}Override with AGX_TELEMETRY=0${c.reset}`);
|
|
2753
|
+
}
|
|
2754
|
+
process.exit(0);
|
|
2755
|
+
}
|
|
2756
|
+
|
|
2688
2757
|
// First run detection — skip for non-interactive/daemon contexts
|
|
2689
2758
|
const config = loadConfig();
|
|
2690
2759
|
const isNonInteractive = args.includes('--print') || args.includes('--cloud-task') || args.some(a => a.startsWith('--cloud-task'));
|
|
@@ -2701,11 +2770,13 @@ async function checkOnboarding() {
|
|
|
2701
2770
|
async function runCli(argv = process.argv) {
|
|
2702
2771
|
const originalArgv = process.argv;
|
|
2703
2772
|
if (Array.isArray(argv)) process.argv = argv;
|
|
2773
|
+
const telemetry = require('../telemetry');
|
|
2704
2774
|
try {
|
|
2705
2775
|
if (await checkOnboarding()) return;
|
|
2706
2776
|
|
|
2707
2777
|
const args = process.argv.slice(2);
|
|
2708
2778
|
let provider = args[0];
|
|
2779
|
+
telemetry.track('cli_command', { command: args[0] || 'default', subcommand: args[1] || null });
|
|
2709
2780
|
const config = loadConfig();
|
|
2710
2781
|
|
|
2711
2782
|
// Normalize provider aliases
|
|
@@ -2793,7 +2864,11 @@ EXAMPLES:
|
|
|
2793
2864
|
agx claude -p "explain this" # One-shot question
|
|
2794
2865
|
agx codex -p "refactor this" # One-shot question
|
|
2795
2866
|
agx task ls # Check cloud tasks
|
|
2796
|
-
agx container logs # See what's happening
|
|
2867
|
+
agx container logs # See what's happening
|
|
2868
|
+
|
|
2869
|
+
TELEMETRY:
|
|
2870
|
+
agx telemetry Show telemetry status
|
|
2871
|
+
agx telemetry on/off Enable/disable anonymous usage data`);
|
|
2797
2872
|
process.exit(0);
|
|
2798
2873
|
}
|
|
2799
2874
|
|
|
@@ -3257,6 +3332,7 @@ EXAMPLES:
|
|
|
3257
3332
|
}
|
|
3258
3333
|
|
|
3259
3334
|
childProc.on('exit', (code) => {
|
|
3335
|
+
require('../telemetry').track('agent_exit', { engine: provider, exit_code: code });
|
|
3260
3336
|
process.exit(code || 0);
|
|
3261
3337
|
});
|
|
3262
3338
|
|
|
@@ -3277,6 +3353,7 @@ EXAMPLES:
|
|
|
3277
3353
|
} else {
|
|
3278
3354
|
console.error(`${c.red}Failed to start ${cmd}:${c.reset}`, err.message);
|
|
3279
3355
|
}
|
|
3356
|
+
require('../telemetry').track('agent_spawn_error', { engine: provider, error_code: err.code });
|
|
3280
3357
|
process.exit(1);
|
|
3281
3358
|
});
|
|
3282
3359
|
|
|
@@ -3341,6 +3418,7 @@ EXAMPLES:
|
|
|
3341
3418
|
|
|
3342
3419
|
} finally {
|
|
3343
3420
|
process.argv = originalArgv;
|
|
3421
|
+
await telemetry.shutdown();
|
|
3344
3422
|
}
|
|
3345
3423
|
}
|
|
3346
3424
|
|
package/lib/executor.js
CHANGED
|
@@ -133,6 +133,7 @@ async function executeTask(options) {
|
|
|
133
133
|
fs.mkdirSync(workDir, { recursive: true });
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
+
const execStart = Date.now();
|
|
136
137
|
onLog?.(`[${engine}] Starting ${stage} stage...`);
|
|
137
138
|
onProgress?.(10);
|
|
138
139
|
|
|
@@ -197,6 +198,7 @@ async function executeTask(options) {
|
|
|
197
198
|
|
|
198
199
|
proc.on('error', (err) => {
|
|
199
200
|
clearStageTimeout();
|
|
201
|
+
require('./telemetry').track('executor_spawn_error', { engine, error: err.message });
|
|
200
202
|
settle(reject)(new Error(`Failed to spawn ${engine}: ${err.message}`));
|
|
201
203
|
});
|
|
202
204
|
|
|
@@ -206,6 +208,7 @@ async function executeTask(options) {
|
|
|
206
208
|
|
|
207
209
|
if (code === 0 || code === null) {
|
|
208
210
|
onLog?.(`[${engine}] Stage completed successfully`);
|
|
211
|
+
require('./telemetry').track('executor_completed', { engine, stage, duration_ms: Date.now() - execStart });
|
|
209
212
|
settle(resolve)({
|
|
210
213
|
success: true,
|
|
211
214
|
output,
|
|
@@ -214,6 +217,7 @@ async function executeTask(options) {
|
|
|
214
217
|
});
|
|
215
218
|
} else {
|
|
216
219
|
onLog?.(`[${engine}] Stage failed with exit code ${code}`);
|
|
220
|
+
require('./telemetry').track('executor_failed', { engine, stage, exit_code: code, duration_ms: Date.now() - execStart });
|
|
217
221
|
settle(reject)(new Error(`${engine} exited with code ${code}`));
|
|
218
222
|
}
|
|
219
223
|
});
|
|
@@ -221,6 +225,7 @@ async function executeTask(options) {
|
|
|
221
225
|
// Set a timeout for the process (30 minutes max per stage)
|
|
222
226
|
timeout = setTimeout(() => {
|
|
223
227
|
try { proc.kill('SIGTERM'); } catch { /* ignore */ }
|
|
228
|
+
require('./telemetry').track('executor_timeout', { engine, stage });
|
|
224
229
|
settle(reject)(new Error(`Stage timed out after 30 minutes`));
|
|
225
230
|
}, 30 * 60 * 1000);
|
|
226
231
|
timeout.unref?.();
|
package/lib/telemetry.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const os = require('os');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const crypto = require('crypto');
|
|
7
|
+
|
|
8
|
+
const CONFIG_DIR = path.join(process.env.HOME || process.env.USERPROFILE || '', '.agx');
|
|
9
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
10
|
+
const POSTHOG_KEY = 'phc_oBf1haYu4HKjYmUZpthQ4cUf9O3UKkDSOX675M7dRWW';
|
|
11
|
+
const POSTHOG_HOST = 'https://us.i.posthog.com';
|
|
12
|
+
|
|
13
|
+
let client = null;
|
|
14
|
+
let distinctId = null;
|
|
15
|
+
|
|
16
|
+
function loadConfig() {
|
|
17
|
+
try {
|
|
18
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
19
|
+
return JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
20
|
+
}
|
|
21
|
+
} catch { }
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function saveConfig(config) {
|
|
26
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
27
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function isEnabled() {
|
|
33
|
+
if (process.env.AGX_TELEMETRY === '0') return false;
|
|
34
|
+
const config = loadConfig();
|
|
35
|
+
if (config?.telemetry?.enabled === false) return false;
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function getAnonymousId() {
|
|
40
|
+
if (distinctId) return distinctId;
|
|
41
|
+
const config = loadConfig() || {};
|
|
42
|
+
if (config.telemetry?.anonymousId) {
|
|
43
|
+
distinctId = config.telemetry.anonymousId;
|
|
44
|
+
return distinctId;
|
|
45
|
+
}
|
|
46
|
+
distinctId = crypto.randomUUID();
|
|
47
|
+
config.telemetry = { ...config.telemetry, anonymousId: distinctId };
|
|
48
|
+
saveConfig(config);
|
|
49
|
+
return distinctId;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function getClient() {
|
|
53
|
+
if (client) return client;
|
|
54
|
+
if (!isEnabled()) return null;
|
|
55
|
+
try {
|
|
56
|
+
const { PostHog } = require('posthog-node');
|
|
57
|
+
client = new PostHog(POSTHOG_KEY, { host: POSTHOG_HOST, flushAt: 1, flushInterval: 0 });
|
|
58
|
+
return client;
|
|
59
|
+
} catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function track(event, properties = {}) {
|
|
65
|
+
const ph = getClient();
|
|
66
|
+
if (!ph) return;
|
|
67
|
+
try {
|
|
68
|
+
const version = (() => { try { return require('../package.json').version; } catch { return 'unknown'; } })();
|
|
69
|
+
ph.capture({
|
|
70
|
+
distinctId: getAnonymousId(),
|
|
71
|
+
event,
|
|
72
|
+
properties: {
|
|
73
|
+
os: os.platform(),
|
|
74
|
+
arch: os.arch(),
|
|
75
|
+
node_version: process.version,
|
|
76
|
+
agx_version: version,
|
|
77
|
+
...properties,
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
} catch { }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
async function shutdown() {
|
|
84
|
+
if (client) {
|
|
85
|
+
try { await client.shutdown(); } catch { }
|
|
86
|
+
client = null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function setEnabled(enabled) {
|
|
91
|
+
const config = loadConfig() || {};
|
|
92
|
+
config.telemetry = { ...config.telemetry, enabled };
|
|
93
|
+
saveConfig(config);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function getStatus() {
|
|
97
|
+
return isEnabled() ? 'enabled' : 'disabled';
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function showNoticeIfFirstRun() {
|
|
101
|
+
const config = loadConfig() || {};
|
|
102
|
+
if (config.telemetry?.noticeSeen) return;
|
|
103
|
+
console.log('\n \x1b[2magx collects anonymous usage data to improve the tool.\x1b[0m');
|
|
104
|
+
console.log(' \x1b[2mRun \x1b[0magx telemetry off\x1b[2m to disable.\x1b[0m\n');
|
|
105
|
+
config.telemetry = { ...config.telemetry, noticeSeen: true };
|
|
106
|
+
saveConfig(config);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
module.exports = { track, shutdown, isEnabled, setEnabled, getStatus, showNoticeIfFirstRun };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mndrk/agx",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.61",
|
|
4
4
|
"description": "Autonomous AI Agent Orchestrator for Claude, Gemini, and Ollama",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -49,7 +49,8 @@
|
|
|
49
49
|
"eventsource": "^4.1.0",
|
|
50
50
|
"execa": "^5.1.1",
|
|
51
51
|
"p-map": "^7.0.4",
|
|
52
|
-
"p-retry": "^7.1.1"
|
|
52
|
+
"p-retry": "^7.1.1",
|
|
53
|
+
"posthog-node": "^4.18.0"
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
|
55
56
|
"esbuild": "^0.25.0",
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=2298,exports.ids=[2298],exports.modules={5600:(a,b,c)=>{c.d(b,{A:()=>I});var d=c(21124),e=c(38301),f=c(94195);function g({comments:a,onAddComment:b,onDeleteComment:c}){let[f,g]=(0,e.useState)(""),[h,i]=(0,e.useState)(!1),[j,k]=(0,e.useState)(!1),[l,m]=(0,e.useState)(null),n=async a=>{if(a.preventDefault(),f.trim()&&!j){k(!0);try{await b(f),g(""),i(!1)}finally{k(!1)}}},o=async a=>{if(c&&!l&&confirm("Are you sure you want to delete this comment?")){m(a);try{await c(a)}catch(a){console.error("Failed to delete comment:",a)}finally{m(null)}}};return(0,d.jsxs)("div",{className:"space-y-4",children:[h?(0,d.jsxs)("form",{onSubmit:n,className:"space-y-3 animate-fade-in-up",children:[(0,d.jsx)("textarea",{value:f,onChange:a=>g(a.target.value),placeholder:"Add context, decisions, or guidance...",className:"input resize-none h-24 focus:ring-2 focus:ring-[var(--primary)]/20",autoFocus:!0,disabled:j}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)("button",{type:"submit",disabled:!f.trim()||j,className:"btn-primary px-4 py-2 flex items-center gap-2",children:j?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("span",{className:"spinner w-4 h-4 border-2 border-white/20 border-t-white"}),"Adding..."]}):"Add Comment"}),(0,d.jsx)("button",{type:"button",onClick:()=>{i(!1),g("")},disabled:j,className:"btn-ghost px-4 py-2",children:"Cancel"})]})]}):(0,d.jsx)("button",{onClick:()=>i(!0),className:"w-full py-3 border-2 border-dashed border-[var(--card-border)] rounded-xl text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:border-[var(--primary)] hover:bg-[var(--primary-muted)] transition-all duration-200 text-sm font-medium focus-visible:outline-2 focus-visible:outline-[var(--ring)] focus-visible:outline-offset-2",children:(0,d.jsxs)("span",{className:"flex items-center justify-center gap-2",children:[(0,d.jsx)("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 4v16m8-8H4"})}),"Add comment"]})}),0===a.length?(0,d.jsxs)("div",{className:"text-center py-12 animate-fade-in",children:[(0,d.jsx)("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-xl bg-[var(--background)] border border-[var(--card-border)] mb-3",children:(0,d.jsx)("span",{className:"text-xl opacity-50",children:"\uD83D\uDCDD"})}),(0,d.jsx)("p",{className:"text-[var(--muted-foreground)] text-sm",children:"No comments yet"}),(0,d.jsx)("p",{className:"text-[var(--muted-foreground)] text-xs mt-1",children:"Add context and guidance for this task"})]}):(0,d.jsxs)("div",{className:"relative",children:[(0,d.jsx)("div",{className:"timeline-line"}),(0,d.jsx)("div",{className:"space-y-4",children:a.map((a,b)=>(0,d.jsxs)("div",{className:"timeline-item relative pl-7 animate-fade-in-up",style:{animationDelay:`${50*b}ms`},children:[(0,d.jsx)("div",{className:"timeline-dot"}),(0,d.jsxs)("div",{className:"card p-4 hover:border-[var(--primary)]/30 group",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"text-xs text-[var(--muted-foreground)] tabular-nums",children:new Date(a.created_at).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}),a.author_type&&(0,d.jsx)("span",{className:"text-[10px] uppercase tracking-wide text-[var(--muted-foreground)]",children:a.author_type})]}),c&&"user"===a.author_type&&(0,d.jsx)("button",{onClick:()=>o(a.id),disabled:l===a.id,className:"opacity-0 group-hover:opacity-100 transition-opacity text-[var(--muted-foreground)] hover:text-[var(--destructive)] p-1 rounded",title:"Delete comment",children:l===a.id?(0,d.jsx)("span",{className:"spinner w-3 h-3 border-2 border-current border-t-transparent"}):(0,d.jsx)("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})})})]}),(0,d.jsx)("p",{className:"text-sm whitespace-pre-wrap leading-relaxed",children:a.content})]})]},a.id))})]})]})}var h=c(36937);let i={30:"#94a3b8",31:"#f87171",32:"#4ade80",33:"#facc15",34:"#60a5fa",35:"#c084fc",36:"#22d3ee",37:"#e2e8f0",90:"#64748b",91:"#ef4444",92:"#22c55e",93:"#eab308",94:"#3b82f6",95:"#a855f7",96:"#06b6d4",97:"#f8fafc"},j=/\u001b\[([0-9;]*)m/g,k=/(^|\s)\[((?:\d{1,3};)*\d{1,3})m(\s|$)/g;function l(a){return Math.max(0,Math.min(255,a))}function m({taskId:a,status:b}){let[c,f]=(0,e.useState)(!1),[g,m]=(0,e.useState)(!1),{output:n,isLoading:o,isStreaming:p}=(0,h.zH)(a,{enabled:c,tail:500,maxChars:2e5}),q=(0,e.useRef)(null),r=n||(o?"Loading logs...":"in_progress"===b?"Waiting for live output...":"No output yet."),s=(0,e.useMemo)(()=>c?function(a){if(!a)return[];let b=a.replace(k,(a,b,c,d)=>b&&d?" ":b||d||""),c=[],d={},e=0;for(let a of b.matchAll(j)){let f=a.index??0;if(f>e){let a=b.slice(e,f);c.push({text:a,style:Object.keys(d).length?{...d}:void 0})}d=function(a,b){let c={...a},d=(b||"0").split(";").map(a=>Number.parseInt(a,10)).filter(a=>Number.isFinite(a));for(let a=0;a<d.length;a+=1){let b=d[a];if(0===b){delete c.color,delete c.fontStyle,delete c.fontWeight,delete c.textDecoration;continue}if(1===b){c.fontWeight=700;continue}if(3===b){c.fontStyle="italic";continue}if(4===b){c.textDecoration="underline";continue}if(22===b){delete c.fontWeight;continue}if(23===b){delete c.fontStyle;continue}if(24===b){delete c.textDecoration;continue}if(39===b){delete c.color;continue}if(38===b){let b=d[a+1];if(5===b&&Number.isFinite(d[a+2]))c.color=function(a){let b=Math.max(0,Math.min(255,a));if(b<16)return i[[30,31,32,33,34,35,36,37,90,91,92,93,94,95,96,97][b]]||"#e2e8f0";if(b>=232){let a=Math.round((b-232)/23*255);return`rgb(${a}, ${a}, ${a})`}let c=b-16,d=Math.floor(c/36),e=Math.floor(c%36/6),f=a=>0===a?0:40*a+55;return`rgb(${f(d)}, ${f(e)}, ${f(c%6)})`}(d[a+2]),a+=2;else if(2===b&&Number.isFinite(d[a+2])&&Number.isFinite(d[a+3])&&Number.isFinite(d[a+4])){let b=l(d[a+2]),e=l(d[a+3]),f=l(d[a+4]);c.color=`rgb(${b}, ${e}, ${f})`,a+=4}continue}i[b]&&(c.color=i[b])}return c}(d,a[1]||"0"),e=f+a[0].length}return e<b.length&&c.push({text:b.slice(e),style:Object.keys(d).length?{...d}:void 0}),function(a){if(!a.length)return a;let b=[];for(let c of a){if(!c.text)continue;let a=b[b.length-1],d=!!a&&JSON.stringify(a.style||null)===JSON.stringify(c.style||null);a&&d?a.text+=c.text:b.push({text:c.text,style:c.style?{...c.style}:void 0})}return b}(c)}(r):[],[r,c]);return(0,d.jsxs)("div",{className:"border-t border-[var(--card-border)] pt-8",children:[(0,d.jsxs)("button",{type:"button",onClick:()=>f(a=>!a),className:"w-full flex items-center justify-between text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]","aria-expanded":c,children:[(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{children:"Terminal Stream"}),p&&(0,d.jsx)("span",{className:"text-[10px] px-2 py-0.5 rounded-full bg-emerald-500/15 text-emerald-400 border border-emerald-500/30",children:"Live"})]}),(0,d.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:c?"Collapse":"Expand"})]}),c&&(0,d.jsxs)("div",{className:"mt-4 rounded-xl border border-[var(--card-border)] bg-[#0b0f14] shadow-inner transition-all duration-300 ease-in-out",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between px-3 py-2 border-b border-white/10 text-[10px] uppercase tracking-widest text-white/60",children:[(0,d.jsx)("span",{children:"Run Log"}),(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("span",{className:"font-mono text-[10px]",children:p?"Streaming":"Idle"}),(0,d.jsx)("button",{onClick:()=>m(!g),className:"hover:text-white transition-colors p-1",title:g?"Collapse View":"Expand View",children:g?(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,d.jsx)("path",{d:"M8 3v3a2 2 0 0 1-2 2H3"}),(0,d.jsx)("path",{d:"M21 8h-3a2 2 0 0 1-2-2V3"}),(0,d.jsx)("path",{d:"M3 16h3a2 2 0 0 1 2 2v3"}),(0,d.jsx)("path",{d:"M16 21v-3a2 2 0 0 1 2-2h3"})]}):(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,d.jsx)("path",{d:"M15 3h6v6"}),(0,d.jsx)("path",{d:"M9 21H3v-6"}),(0,d.jsx)("path",{d:"M21 3l-7 7"}),(0,d.jsx)("path",{d:"M3 21l7-7"})]})})]})]}),(0,d.jsx)("div",{ref:q,className:`${g?"max-h-[70vh]":"max-h-64"} overflow-y-auto px-3 py-3 font-mono text-xs text-slate-200 whitespace-pre-wrap leading-relaxed transition-all duration-300 ease-in-out`,children:s.map((a,b)=>(0,d.jsx)("span",{style:a.style,children:a.text},`${b}-${a.text.length}`))})]})]})}let n={task:{label:"This Task",icon:"\uD83D\uDCCC",color:"var(--primary)",bgColor:"var(--primary-muted)",description:"Specific to this task only"},project:{label:"Project",icon:"\uD83D\uDCC1",color:"var(--accent)",bgColor:"var(--accent-muted)",description:"Applies to the whole project"},global:{label:"Playbook",icon:"\uD83D\uDCD6",color:"var(--warning)",bgColor:"var(--warning-muted)",description:"Universal best practices"}};function o({learnings:a,taskId:b,projectContext:c,onAddLearning:f,compact:g=!1}){let[h,i]=(0,e.useState)(!1),[j,k]=(0,e.useState)(""),[l,m]=(0,e.useState)("task"),[o,p]=(0,e.useState)(!1),q=c?.project?[c.project.id,c.project.slug].filter(Boolean):[],r=c?.project?.name||c?.project?.slug||"Project",s=async a=>{if(a.preventDefault(),j.trim()&&!o){p(!0);try{let a="project"===l?q[0]:void 0;await f(j,l,a),k(""),i(!1)}finally{p(!1)}}},t=a.filter(a=>"task"===a.scope&&a.scope_id===b),u=q.length?a.filter(a=>"project"===a.scope&&a.scope_id&&q.includes(a.scope_id)):[],v=a.filter(a=>"global"===a.scope),w=(a,b,c)=>{let e=n[a];return(0,d.jsxs)("div",{className:g?"mb-4":"mb-6",children:[(0,d.jsxs)("div",{className:`flex items-center gap-2 ${g?"mb-2":"mb-3"}`,children:[(0,d.jsx)("span",{className:"w-5 h-5 rounded-lg flex items-center justify-center text-xs",style:{backgroundColor:e.bgColor},children:e.icon}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h4",{className:"text-xs font-semibold",style:{color:e.color},children:c||e.label}),!g&&(0,d.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)]",children:e.description})]})]}),0===b.length?(0,d.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] py-2 text-center bg-[var(--background)] rounded-lg border border-dashed border-[var(--card-border)]",children:"No learnings yet"}):(0,d.jsx)("ul",{className:"space-y-1.5",children:b.map((a,b)=>(0,d.jsx)("li",{className:`text-xs bg-[var(--background)] rounded-lg ${g?"p-2":"p-3"} border border-[var(--card-border)]
|
|
2
|
-
hover:border-[color-mix(in_srgb,var(--primary)_30%,var(--card-border))]
|
|
3
|
-
transition-colors animate-fade-in-up`,style:{animationDelay:`${30*b}ms`},children:a.content},a.id))})]})};return(0,d.jsxs)("div",{children:[!g&&(0,d.jsxs)("div",{className:"flex items-center gap-2 mb-4",children:[(0,d.jsx)("span",{className:"text-lg",children:"\uD83D\uDCA1"}),(0,d.jsx)("h3",{className:"text-lg font-semibold",children:"Learnings"}),(0,d.jsx)("span",{className:"text-xs text-[var(--muted-foreground)] bg-[var(--muted)] px-2 py-0.5 rounded-full",children:a.length})]}),h?(0,d.jsxs)("form",{onSubmit:s,className:`${g?"mb-3":"mb-5"} space-y-2 animate-fade-in-up`,children:[(0,d.jsx)("textarea",{value:j,onChange:a=>k(a.target.value),placeholder:"What did you learn?",className:`input resize-none ${g?"h-16 text-xs":"h-20 text-sm"}`,autoFocus:!0,disabled:o}),(0,d.jsx)("div",{className:"flex gap-1",children:["task","project","global"].map(a=>{let b=n[a],c=l===a,e="project"===a&&0===q.length;return(0,d.jsxs)("button",{type:"button",onClick:()=>m(a),disabled:e,className:`
|
|
4
|
-
flex-1 flex items-center justify-center gap-1 px-1.5 py-1 text-[10px] font-medium rounded-lg
|
|
5
|
-
transition-all duration-200
|
|
6
|
-
${c?"text-white shadow-md":"bg-[var(--background)] text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}
|
|
7
|
-
${e?"opacity-40 cursor-not-allowed":""}
|
|
8
|
-
`,style:c?{backgroundColor:b.color,boxShadow:`0 2px 8px -2px ${b.color}60`}:void 0,children:[(0,d.jsx)("span",{children:b.icon}),!g&&(0,d.jsx)("span",{children:b.label})]},a)})}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)("button",{type:"submit",disabled:!j.trim()||o,className:"btn-primary px-2 py-1 text-xs flex items-center gap-1.5",children:o?"...":"Add"}),(0,d.jsx)("button",{type:"button",onClick:()=>{i(!1),k("")},disabled:o,className:"btn-ghost px-2 py-1 text-xs",children:"Cancel"})]})]}):(0,d.jsx)("button",{onClick:()=>i(!0),className:`w-full ${g?"py-2 mb-3":"py-3 mb-5"} border-2 border-dashed border-[var(--card-border)] rounded-xl
|
|
9
|
-
text-[var(--muted-foreground)] hover:text-[var(--foreground)]
|
|
10
|
-
hover:border-[var(--primary)] hover:bg-[var(--primary-muted)]
|
|
11
|
-
transition-all duration-200 text-xs font-medium`,children:(0,d.jsxs)("span",{className:"flex items-center justify-center gap-2",children:[(0,d.jsx)("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 4v16m8-8H4"})}),"Add learning"]})}),w("task",t),q.length>0&&w("project",u,`Project: ${r}`),w("global",v,"Global Playbook")]})}let p=[{id:"ideation",icon:"\uD83D\uDCA1",label:"Ideation",prompt:"Research and scope. Define approach, estimate effort.",color:"var(--warning)"},{id:"planning",icon:"\uD83D\uDCCB",label:"Planning",prompt:"Create detailed plan with tasks, milestones, and dependencies.",color:"var(--info)"},{id:"execution",icon:"\uD83D\uDCBB",label:"Execution",prompt:"Implement based on plan. Write clean, tested code.",color:"var(--primary)"},{id:"verification",icon:"\uD83E\uDDEA",label:"Verification",prompt:"Test thoroughly. Find edge cases. Fix bugs. Verify against requirements.",color:"var(--accent)"},{id:"done",icon:"✅",label:"Done",prompt:"Task finished and shipped.",color:"var(--success)"}];function q({currentStage:a,onStageChange:b,readonly:c,size:e="md",stageDecisions:f,stages:g}){let h=g||p,i=a?h.findIndex(b=>b.id===a):-1;return(0,d.jsx)("div",{className:"flex items-center gap-1 flex-wrap",role:"tablist","aria-label":"Task stages",children:h.map((g,j)=>{let k=g.id===a,l=i>j,m=!c&&b,n=f?.[g.id],o=[`${g.label}: ${g.prompt||""}`];return n?.decision&&o.push(`Decision: ${n.decision}`),n?.rationale&&o.push(`Rationale: ${n.rationale}`),(0,d.jsxs)("button",{onClick:()=>m&&b(g.id),disabled:c,title:o.join(" | "),role:"tab","aria-selected":k,"aria-disabled":c,className:`
|
|
12
|
-
group relative flex items-center gap-1.5 rounded-lg font-medium
|
|
13
|
-
transition-all duration-200 select-none
|
|
14
|
-
focus-visible:outline-2 focus-visible:outline-[var(--ring)] focus-visible:outline-offset-2
|
|
15
|
-
${"sm"===e?"px-2 py-1 text-[10px]":"px-3 py-1.5 text-xs"}
|
|
16
|
-
${k?"text-white shadow-md":l?"bg-[var(--success-muted)] text-[var(--success)]":i<j&&-1!==i?"bg-[var(--background)] text-[var(--muted-foreground)] opacity-50":"bg-[var(--background)] text-[var(--muted-foreground)]"}
|
|
17
|
-
${m&&!k?"hover:bg-[var(--card-border)] hover:text-[var(--foreground)] cursor-pointer":""}
|
|
18
|
-
${c?"cursor-default":""}
|
|
19
|
-
`,style:k?{backgroundColor:g.color,boxShadow:`0 4px 14px -3px ${g.color}40`}:void 0,children:[(0,d.jsx)("span",{className:`${"sm"===e?"text-xs":"text-sm"} ${k?"":"opacity-80"}`,children:g.icon}),(0,d.jsx)("span",{className:"hidden lg:inline",children:g.label}),j<h.length-1&&(0,d.jsx)("span",{className:`
|
|
20
|
-
absolute -right-1 top-1/2 -translate-y-1/2 w-2 h-0.5
|
|
21
|
-
${l||k?"bg-[var(--success)]":"bg-[var(--card-border)]"}
|
|
22
|
-
transition-colors duration-300 hidden lg:block
|
|
23
|
-
`}),(0,d.jsx)("span",{className:"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 text-[10px] font-normal whitespace-nowrap bg-[var(--card-bg)] text-[var(--foreground)] border border-[var(--card-border)] rounded-md shadow-lg opacity-0 group-hover:opacity-100 pointer-events-none transition-opacity duration-200 lg:hidden z-50",children:g.label})]},g.id)})})}var r=c(95627),s=c.n(r),t=c(53603),u=c(43843),v=c(93130),w=c(72576),x=c(22833);let y=({editor:a})=>a?(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-1 p-2 border-b border-[var(--card-border)] mb-2 sticky top-0 bg-[var(--card-bg)] z-10 opacity-90 backdrop-blur-sm",children:[(0,d.jsx)("button",{onClick:()=>a.chain().focus().toggleBold().run(),disabled:!a.can().chain().focus().toggleBold().run(),className:`p-1.5 rounded hover:bg-[var(--muted)] ${a.isActive("bold")?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,title:"Bold",children:(0,d.jsx)("span",{className:"font-bold font-serif",children:"B"})}),(0,d.jsx)("button",{onClick:()=>a.chain().focus().toggleItalic().run(),disabled:!a.can().chain().focus().toggleItalic().run(),className:`p-1.5 rounded hover:bg-[var(--muted)] ${a.isActive("italic")?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,title:"Italic",children:(0,d.jsx)("span",{className:"italic font-serif",children:"I"})}),(0,d.jsx)("button",{onClick:()=>a.chain().focus().toggleStrike().run(),disabled:!a.can().chain().focus().toggleStrike().run(),className:`p-1.5 rounded hover:bg-[var(--muted)] ${a.isActive("strike")?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,title:"Strike",children:(0,d.jsx)("span",{className:"line-through font-serif",children:"S"})}),(0,d.jsx)("div",{className:"w-px h-4 bg-[var(--card-border)] mx-1"}),(0,d.jsx)("button",{onClick:()=>a.chain().focus().toggleCode().run(),disabled:!a.can().chain().focus().toggleCode().run(),className:`p-1.5 rounded hover:bg-[var(--muted)] ${a.isActive("code")?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,title:"Code",children:(0,d.jsx)("span",{className:"font-mono text-xs",children:"<>"})}),(0,d.jsx)("button",{onClick:()=>a.chain().focus().toggleCodeBlock().run(),className:`p-1.5 rounded hover:bg-[var(--muted)] ${a.isActive("codeBlock")?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,title:"Code Block",children:(0,d.jsx)("span",{className:"font-mono text-xs",children:"CB"})}),(0,d.jsx)("div",{className:"w-px h-4 bg-[var(--card-border)] mx-1"}),(0,d.jsx)("button",{onClick:()=>a.chain().focus().toggleHeading({level:1}).run(),className:`p-1.5 rounded hover:bg-[var(--muted)] ${a.isActive("heading",{level:1})?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,title:"H1",children:(0,d.jsx)("span",{className:"font-bold text-xs",children:"H1"})}),(0,d.jsx)("button",{onClick:()=>a.chain().focus().toggleHeading({level:2}).run(),className:`p-1.5 rounded hover:bg-[var(--muted)] ${a.isActive("heading",{level:2})?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,title:"H2",children:(0,d.jsx)("span",{className:"font-bold text-xs",children:"H2"})}),(0,d.jsx)("button",{onClick:()=>a.chain().focus().toggleHeading({level:3}).run(),className:`p-1.5 rounded hover:bg-[var(--muted)] ${a.isActive("heading",{level:3})?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,title:"H3",children:(0,d.jsx)("span",{className:"font-bold text-xs",children:"H3"})}),(0,d.jsx)("div",{className:"w-px h-4 bg-[var(--card-border)] mx-1"}),(0,d.jsx)("button",{onClick:()=>a.chain().focus().toggleBulletList().run(),className:`p-1.5 rounded hover:bg-[var(--muted)] ${a.isActive("bulletList")?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,title:"Bullet List",children:(0,d.jsx)("span",{className:"text-xs",children:"• List"})}),(0,d.jsx)("button",{onClick:()=>a.chain().focus().toggleOrderedList().run(),className:`p-1.5 rounded hover:bg-[var(--muted)] ${a.isActive("orderedList")?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,title:"Ordered List",children:(0,d.jsx)("span",{className:"text-xs",children:"1. List"})}),(0,d.jsx)("button",{onClick:()=>a.chain().focus().toggleBlockquote().run(),className:`p-1.5 rounded hover:bg-[var(--muted)] ${a.isActive("blockquote")?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,title:"Quote",children:(0,d.jsx)("span",{className:"text-xs serif italic",children:'""'})})]}):null;function z({content:a,editable:b=!0,onChange:c,onBlur:e,placeholder:f="Add a description..."}){let g=(0,t.hG)({extensions:[u.A,w.Ay.configure({openOnClick:!1}),v.A.configure({placeholder:f,emptyEditorClass:"is-editor-empty before:content-[attr(data-placeholder)] before:text-[var(--muted-foreground)] before:float-left before:pointer-events-none before:h-0"}),x.o.configure({html:!1,transformPastedText:!0,transformCopiedText:!0})],immediatelyRender:!1,content:a,editable:b,editorProps:{attributes:{class:"prose prose-sm max-w-none focus:outline-none min-h-[100px] text-[var(--foreground)]"}},onUpdate:({editor:a})=>{c?.(a.storage.markdown.getMarkdown())},onBlur:()=>{e?.()}});return(0,d.jsxs)("div",{className:"jsx-cdf669dd826a0677 relative group",children:[b&&(0,d.jsx)(y,{editor:g}),(0,d.jsx)(t.$Z,{editor:g,className:"rich-text-editor"}),(0,d.jsx)(s(),{id:"cdf669dd826a0677",children:".rich-text-editor .ProseMirror{min-height:100px;outline:none}.rich-text-editor .ProseMirror p{margin-bottom:.75em;line-height:1.6}.rich-text-editor .ProseMirror h1{font-size:1.5em;font-weight:700;margin-top:1em;margin-bottom:.5em}.rich-text-editor .ProseMirror h2{font-size:1.25em;font-weight:600;margin-top:1em;margin-bottom:.5em}.rich-text-editor .ProseMirror h3{font-size:1.1em;font-weight:600;margin-top:1em;margin-bottom:.5em}.rich-text-editor .ProseMirror ul{list-style-type:disc;padding-left:1.5em;margin-bottom:.75em}.rich-text-editor .ProseMirror ol{list-style-type:decimal;padding-left:1.5em;margin-bottom:.75em}.rich-text-editor .ProseMirror blockquote{border-left:3px solid var(--card-border);padding-left:1em;font-style:italic;color:var(--muted-foreground)}.rich-text-editor .ProseMirror pre{background:var(--muted);padding:.75em;border-radius:var(--radius-sm);font-family:monospace;overflow-x:auto;margin-bottom:.75em}.rich-text-editor .ProseMirror code{background:var(--muted);padding:.2em .4em;border-radius:var(--radius-sm);font-family:monospace;font-size:.85em}.rich-text-editor .ProseMirror a{color:var(--primary);text-decoration:underline}"})]})}var A=c(82997),B=c(3991),C=c.n(B);function D({projectContext:a,fallbackProjectSlug:b}){var c;let e=a?.project||null,f=a?.repos??[],g=a?.learnings??[],h=(c=e?.metadata)&&"object"==typeof c?Object.entries(c).filter(([a])=>!!a):[];if(!e)return(0,d.jsxs)("div",{className:"p-4 rounded-2xl border border-dashed border-[var(--card-border)] bg-[var(--card-bg)]/60 space-y-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Project Context"}),(0,d.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:b?`Task is tagged with "${b}" but no structured project context is available yet.`:"This task is not connected to a project. Link it to unlock repo maps, CI/CD notes, and project learnings."})]}),(0,d.jsx)(C(),{href:"/projects",className:"inline-flex items-center justify-center text-xs font-semibold px-3 py-1.5 rounded-full border border-[var(--card-border)] hover:border-[var(--primary)] hover:text-[var(--primary)] transition-colors",children:"Manage Projects"})]});let i=g.slice(0,3),j=g.length-i.length;return(0,d.jsxs)("div",{className:"p-4 rounded-2xl border border-[var(--card-border)] bg-[var(--card-bg)] space-y-4",children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Project Context"}),(0,d.jsx)("h3",{className:"text-base font-semibold leading-tight mt-1",children:e.name}),(0,d.jsx)("p",{className:"text-[11px] uppercase tracking-wide text-[var(--muted-foreground)]",children:e.slug})]}),(0,d.jsx)(C(),{href:"/projects",className:"text-[11px] font-semibold px-2 py-1 rounded-full border border-[var(--card-border)] hover:border-[var(--primary)] hover:text-[var(--primary)] transition-colors",children:"View"})]}),e.description&&(0,d.jsx)("p",{className:"text-sm text-[var(--foreground)] whitespace-pre-line",children:e.description}),e.ci_cd_info&&(0,d.jsxs)("div",{className:"text-xs space-y-1",children:[(0,d.jsx)("p",{className:"font-semibold text-[var(--muted-foreground)] uppercase tracking-wide",children:"CI / CD"}),(0,d.jsx)("p",{className:"text-[var(--foreground)] text-sm",children:e.ci_cd_info})]}),h.length>0&&(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)] mb-2",children:"Metadata"}),(0,d.jsx)("dl",{className:"space-y-1.5",children:h.map(([a,b])=>(0,d.jsxs)("div",{className:"flex items-start justify-between gap-2 text-xs",children:[(0,d.jsx)("dt",{className:"font-semibold text-[var(--foreground)]",children:a}),(0,d.jsx)("dd",{className:"text-[var(--muted-foreground)] text-right max-w-[160px]",children:"string"==typeof b?b:JSON.stringify(b)})]},a))})]}),(0,d.jsxs)("div",{children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,d.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Repository Map"}),(0,d.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:f.length?`${f.length} connected`:"None"})]}),0===f.length?(0,d.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:"Add repositories to help agents navigate local and remote paths."}):(0,d.jsx)("ul",{className:"space-y-2",children:f.map(a=>(0,d.jsxs)("li",{className:"p-2 rounded-xl border border-[var(--card-border)] bg-[var(--background)] space-y-1 text-xs",children:[(0,d.jsx)("p",{className:"font-semibold text-[var(--foreground)]",children:a.name}),a.path&&(0,d.jsxs)("p",{className:"text-[var(--muted-foreground)]",children:["Path: ",a.path]}),a.git_url&&(0,d.jsxs)("p",{className:"text-[var(--muted-foreground)] break-all",children:["Repo: ",(0,d.jsx)("span",{className:"text-[var(--primary)]",children:a.git_url})]}),a.notes&&(0,d.jsxs)("p",{className:"text-[var(--muted-foreground)]",children:["Notes: ",a.notes]})]},a.id||a.name))})]}),g.length>0&&(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)] mb-2",children:"Project Learnings"}),(0,d.jsx)("ul",{className:"space-y-1 text-xs text-[var(--foreground)]",children:i.map((a,b)=>(0,d.jsxs)("li",{className:"leading-relaxed",children:["• ",a]},`${a}-${b}`))}),j>0&&(0,d.jsxs)("p",{className:"text-[11px] text-[var(--muted-foreground)] mt-1",children:["+",j," more learnings in the panel below"]})]})]})}var E=c(7889);let F={queued:{label:"Queued",color:"var(--status-queued)",bgColor:"var(--status-queued-bg)"},in_progress:{label:"In Progress",color:"var(--status-in-progress)",bgColor:"var(--status-in-progress-bg)"},blocked:{label:"Blocked",color:"var(--status-blocked)",bgColor:"var(--status-blocked-bg)"},completed:{label:"Completed",color:"var(--status-completed)",bgColor:"var(--status-completed-bg)"},failed:{label:"Failed",color:"var(--status-failed)",bgColor:"var(--status-failed-bg)"}},G=["queued","in_progress","blocked","completed","failed"];function H(a){if(!a)return"N/A";let b=new Date(a);return Number.isNaN(b.getTime())?a:b.toLocaleString()}function I({task:a,comments:b,learnings:c,projectContext:h,projects:i,stage_config:j,stages:k,isDraft:l=!1,isCreating:n=!1,onClose:r,onAddComment:s,onDeleteComment:t,onAddLearning:u,onUpdate:v,onDelete:w}){let{providers:x}=(0,E.u)(),{projects:y}=(0,A.Y)(),B=i||y,C=k||p,[I,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)(!1),[P,Q]=(0,e.useState)(""),[R,S]=(0,e.useState)(null),[T,U]=(0,e.useState)(!1),[V,W]=(0,e.useState)(a.provider||""),[X,Y]=(0,e.useState)(a.model||""),[Z,$]=(0,e.useState)(a.swarm??!1),[_,aa]=(0,e.useState)([]),[ab,ac]=(0,e.useState)("gemini"),[ad,ae]=(0,e.useState)(""),[af,ag]=(0,e.useState)(!1),[ah,ai]=(0,e.useState)(null),aj=a.resolved_provider||j?.provider||"gemini",ak=a.resolved_model||j?.model||"",al=a.swarm??j?.swarm??!1;a.resolved_swarm_models||j?.swarm_models;let am=h??a.project_context??null,an=am?.project?.slug??a.project??null,[ao,ap]=(0,e.useState)(a.title||""),[aq,ar]=(0,e.useState)(""),as=async()=>{O(!0);try{await w?.()}finally{O(!1),M(!1)}},at=(0,f.YQ)(async b=>{let c=(a.description??(a=>{let b=a.match(/^---\n[\s\S]*?\n---\n([\s\S]*)$/);return(b?b[1]:a).replace(/^#\s+.+(\r?\n|$)/,"").trim()})(a.content||"")).replace(/^#\s+.+(\r?\n|$)/,"").trim();l||b===c||await v({description:b})},1e3),au=(0,f.YQ)(async b=>{if(!l&&b!==(a.title||"")){ag(!0);try{await v({title:b})}finally{ag(!1)}}},1e3),av=(0,f.YQ)(async a=>{ag(!0),ai(null);try{await v(a)}catch(a){ai(a instanceof Error?a.message:"Failed to update settings")}finally{ag(!1)}},1e3),aw=async a=>{let b="done"===a?"completed":"ideation"===a?"queued":"in_progress";if(l)return void await v({stage:a,status:b});await v({stage:a,status:b})},ax=async a=>{if(!a)return void await v({project:null,project_id:null});let b=B.find(b=>b.id===a);b&&await v({project:b.slug,project_id:b.id})},ay=async()=>{try{await aA("queued")}catch(a){console.error("Failed to retry task",a)}},az=async()=>{try{await aA("queued")}catch(a){console.error("Failed to unblock task",a)}},aA=async b=>{let c={status:b};"queued"===b&&(c.started_at=null,c.completed_at=null,c.error=void 0),"completed"!==b&&"failed"!==b&&"blocked"!==b||a.completed_at||(c.completed_at=new Date().toISOString()),await v(c)};F[a.status||"queued"];let aB=a.stage_decisions||{},aC=a.stage?aB[a.stage]:void 0,aD=function(a,b){if(!a||"object"!=typeof a)return null;let c=Object.entries(a).filter(([,a])=>!!(a&&b(a))).sort((a,b)=>{let c=Date.parse(a[1]?.decided_at||""),d=Date.parse(b[1]?.decided_at||"");return(Number.isNaN(d)?0:d)-(Number.isNaN(c)?0:c)});if(!c.length)return null;let[d,e]=c[0];return{stage:d,decision:e}}(aB,a=>"failed"===a.decision),aE=Object.entries(aB).filter(([,a])=>a?.decision==="blocked").sort((a,b)=>{let c=Date.parse(a[1]?.decided_at||""),d=Date.parse(b[1]?.decided_at||"");return(Number.isNaN(d)?0:d)-(Number.isNaN(c)?0:c)})[0],aF=aC?.decision==="blocked"?a.stage:aE?.[0],aG=aF&&aB[aF]?aB[aF]:void 0,aH=aG?.rationale,aI="string"==typeof a.error&&a.error.trim()?a.error.trim():(aD?.decision?.rationale||aD?.decision?.final_result||"").trim()||"Task marked failed.";return(0,d.jsx)("div",{className:"modal-backdrop",onClick:a=>a.target===a.currentTarget&&r(),children:(0,d.jsxs)("div",{className:"bg-[var(--card-bg)] w-full max-w-[1200px] h-[90vh] rounded-xl shadow-2xl overflow-hidden flex flex-col animate-scale-in border border-[var(--card-border)] m-4",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between px-6 py-4 border-b border-[var(--card-border)] bg-[var(--card-bg)]",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("span",{className:"text-[var(--muted-foreground)] font-mono text-sm",children:l?"New Task":a.slug||a.id.slice(0,6)}),!l&&(0,d.jsx)(q,{currentStage:a.stage,onStageChange:aw,stageDecisions:a.stage_decisions,stages:C})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[l&&(0,d.jsx)("button",{onClick:()=>{if(!aq.trim())return;let b="done"===a.stage?"completed":"ideation"===a.stage?"queued":"in_progress";v({title:ao,description:aq,stage:a.stage,status:b,project:a.project??null,project_id:a.project_id??null,provider:V||void 0,model:X||void 0,swarm:Z,swarm_models:Z?_:[]})},disabled:n||!aq.trim(),className:"btn-primary px-4 py-2 rounded-md text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed",children:n?"Creating...":"Create Task"}),!l&&af&&(0,d.jsxs)("span",{className:"text-[10px] text-[var(--muted-foreground)] animate-pulse flex items-center gap-1 mr-2",children:[(0,d.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-[var(--primary)]"}),"Saving..."]}),!l&&w&&(0,d.jsx)("button",{onClick:()=>M(!0),className:"btn-ghost p-2 rounded hover:bg-[var(--destructive-muted)] hover:text-[var(--destructive)]",title:"Delete Task",children:(0,d.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})})}),(0,d.jsx)("button",{onClick:r,className:"btn-ghost p-2 rounded",title:"Close (Esc)",children:(0,d.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})]}),L&&(0,d.jsx)("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50 rounded-xl animate-fade-in",children:(0,d.jsxs)("div",{className:"modal-content p-6 max-w-sm mx-4 animate-scale-in bg-[var(--card-bg)]",children:[(0,d.jsx)("h3",{className:"text-lg font-bold mb-2",children:"Delete Task?"}),(0,d.jsxs)("p",{className:"text-[var(--muted-foreground)] text-sm mb-6",children:["Are you sure you want to delete ",(0,d.jsx)("strong",{className:"text-[var(--foreground)]",children:a.slug||a.id.slice(0,6)}),"? This cannot be undone."]}),(0,d.jsxs)("div",{className:"flex justify-end gap-3",children:[(0,d.jsx)("button",{onClick:()=>M(!1),disabled:N,className:"btn-ghost",children:"Cancel"}),(0,d.jsx)("button",{onClick:as,disabled:N,className:"btn-destructive px-4 py-2 rounded-md",children:N?"Deleting...":"Delete"})]})]})}),(0,d.jsxs)("div",{className:"flex flex-1 overflow-hidden",children:[(0,d.jsx)("div",{className:"flex-1 overflow-y-auto scrollbar-thin",children:(0,d.jsxs)("div",{className:"max-w-3xl mx-auto p-8",children:[!l&&"failed"===a.status&&(0,d.jsxs)("div",{className:"mb-8 p-4 rounded-lg bg-[var(--status-failed-bg)] border border-[var(--status-failed)] text-[var(--status-failed)]",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),(0,d.jsx)("span",{className:"font-bold text-sm uppercase tracking-wider",children:"Task Execution Failed"})]}),(0,d.jsx)("button",{onClick:ay,className:"btn-ghost px-3 py-1 text-xs font-bold bg-white/20 rounded hover:bg-white/30 transition-colors uppercase",children:"Retry Task"})]}),(0,d.jsx)("p",{className:"text-sm font-medium",children:aI}),(0,d.jsxs)("div",{className:"mt-3 text-xs rounded-md border border-[var(--status-failed)]/40 bg-white/50 p-3",children:[(0,d.jsx)("h4",{className:"font-semibold uppercase tracking-wider mb-2",children:"Failure Metadata"}),(0,d.jsxs)("div",{className:"grid grid-cols-[140px_1fr] gap-x-3 gap-y-1.5",children:[(0,d.jsx)("span",{className:"opacity-70",children:"Stage"}),(0,d.jsx)("span",{className:"font-medium",children:a.stage||aD?.stage||"N/A"}),(0,d.jsx)("span",{className:"opacity-70",children:"Exit Code"}),(0,d.jsx)("span",{className:"font-mono",children:a.exit_code??"N/A"}),(0,d.jsx)("span",{className:"opacity-70",children:"PID"}),(0,d.jsx)("span",{className:"font-mono",children:a.pid??"N/A"}),(0,d.jsx)("span",{className:"opacity-70",children:"Completed At"}),(0,d.jsx)("span",{className:"font-medium",children:H(a.completed_at)}),aD?.decision&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("span",{className:"opacity-70",children:"Decision"}),(0,d.jsx)("span",{className:"font-medium",children:aD.decision.decision}),(0,d.jsx)("span",{className:"opacity-70",children:"Rationale"}),(0,d.jsx)("span",{className:"font-medium break-words",children:aD.decision.rationale||"N/A"}),(0,d.jsx)("span",{className:"opacity-70",children:"Final Result"}),(0,d.jsx)("span",{className:"font-medium break-words",children:aD.decision.final_result||"N/A"}),(0,d.jsx)("span",{className:"opacity-70",children:"Decided At"}),(0,d.jsx)("span",{className:"font-medium",children:H(aD.decision.decided_at)})]})]})]}),(T||P||R)&&(0,d.jsxs)("details",{className:"mt-3",open:!0,children:[(0,d.jsx)("summary",{className:"cursor-pointer select-none text-xs font-semibold uppercase tracking-wider opacity-90",children:"Error Details"}),(0,d.jsxs)("div",{className:"mt-2 rounded-md border border-[var(--status-failed)]/40 bg-[#0b0f14] text-slate-200",children:[(0,d.jsxs)("div",{className:"px-3 py-2 border-b border-white/10 text-[10px] uppercase tracking-widest text-white/60 flex items-center justify-between",children:[(0,d.jsx)("span",{children:"Log Excerpt"}),(0,d.jsx)("span",{className:"font-mono",children:T?"Loading...":R?"Unavailable":"Ready"})]}),(0,d.jsx)("pre",{className:"px-3 py-3 text-xs font-mono whitespace-pre-wrap max-h-64 overflow-y-auto",children:R?`Failed to load error details: ${R}`:P||"No error logs found."})]})]})]}),!l&&"blocked"===a.status&&(0,d.jsxs)("div",{className:"mb-8 p-4 rounded-lg bg-[var(--status-blocked-bg)] border border-[var(--status-blocked)] text-[var(--status-blocked)]",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"})}),(0,d.jsx)("span",{className:"font-bold text-sm uppercase tracking-wider",children:"Task Blocked"})]}),(0,d.jsx)("button",{onClick:az,className:"btn-ghost px-3 py-1 text-xs font-bold bg-white/20 rounded hover:bg-white/30 transition-colors uppercase",children:"Unblock Task"})]}),(0,d.jsx)("p",{className:"text-sm opacity-90 pl-7 mb-4",children:aH||"Task is blocked and requires manual intervention."}),(0,d.jsxs)("div",{className:"ml-7 text-xs rounded-md border border-[var(--status-blocked)]/40 bg-white/50 p-3",children:[(0,d.jsx)("h4",{className:"font-semibold uppercase tracking-wider mb-2",children:"Blocked Metadata"}),(0,d.jsxs)("div",{className:"grid grid-cols-[140px_1fr] gap-x-3 gap-y-1.5",children:[(0,d.jsx)("span",{className:"opacity-70",children:"Decision Stage"}),(0,d.jsx)("span",{className:"font-medium",children:aF||a.stage||"N/A"}),(0,d.jsx)("span",{className:"opacity-70",children:"Decision"}),(0,d.jsx)("span",{className:"font-medium",children:aG?.decision||"blocked"}),(0,d.jsx)("span",{className:"opacity-70",children:"Final Result"}),(0,d.jsx)("span",{className:"font-medium break-words",children:aG?.final_result||"N/A"}),(0,d.jsx)("span",{className:"opacity-70",children:"Rationale"}),(0,d.jsx)("span",{className:"font-medium break-words",children:aG?.rationale||"N/A"}),(0,d.jsx)("span",{className:"opacity-70",children:"Decided At"}),(0,d.jsx)("span",{className:"font-medium",children:H(aG?.decided_at)}),(0,d.jsx)("span",{className:"opacity-70",children:"Workflow ID"}),(0,d.jsx)("span",{className:"font-mono break-all",children:a.workflow_id||"N/A"}),(0,d.jsx)("span",{className:"opacity-70",children:"Workflow Run ID"}),(0,d.jsx)("span",{className:"font-mono break-all",children:a.workflow_run_id||"N/A"}),(0,d.jsx)("span",{className:"opacity-70",children:"Orchestration Status"}),(0,d.jsx)("span",{className:"font-medium",children:a.orchestration_status||"N/A"}),(0,d.jsx)("span",{className:"opacity-70",children:"Last Orchestration Update"}),(0,d.jsx)("span",{className:"font-medium",children:H(a.last_orchestration_update)}),(0,d.jsx)("span",{className:"opacity-70",children:"Started At"}),(0,d.jsx)("span",{className:"font-medium",children:H(a.started_at)}),(0,d.jsx)("span",{className:"opacity-70",children:"Completed At"}),(0,d.jsx)("span",{className:"font-medium",children:H(a.completed_at)})]})]})]}),(0,d.jsx)("input",{type:"text",value:ao,onChange:a=>{var b;ap(b=a.target.value),l||au(b)},placeholder:"Task title...",className:"w-full text-2xl font-bold bg-transparent border-none outline-none text-[var(--foreground)] placeholder:text-[var(--muted-foreground)]/50 mb-4"}),(0,d.jsx)("div",{className:"mb-12 min-h-[150px]",children:(0,d.jsx)(z,{content:aq,onChange:a=>{ar(a),l||at(a)},placeholder:l?"Describe the task...":"Add more detail to this task..."})}),!l&&(0,d.jsx)(m,{taskId:a.id,status:a.status}),!l&&a.history&&a.history.length>0&&(0,d.jsxs)("div",{className:"mt-12 border-t border-[var(--card-border)] pt-8",children:[(0,d.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)] mb-4",children:"Execution History"}),(0,d.jsx)("div",{className:"overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm text-left",children:[(0,d.jsx)("thead",{className:"text-xs text-[var(--muted-foreground)] border-b border-[var(--card-border)]",children:(0,d.jsxs)("tr",{children:[(0,d.jsx)("th",{className:"py-2 pr-4 font-medium",children:"Started"}),(0,d.jsx)("th",{className:"py-2 pr-4 font-medium",children:"Duration"}),(0,d.jsx)("th",{className:"py-2 pr-4 font-medium",children:"PID"}),(0,d.jsx)("th",{className:"py-2 pr-4 font-medium",children:"Exit Code"})]})}),(0,d.jsx)("tbody",{className:"divide-y divide-[var(--card-border)]",children:a.history.map(a=>(0,d.jsxs)("tr",{className:"hover:bg-[var(--muted)]/20 transition-colors",children:[(0,d.jsx)("td",{className:"py-2 pr-4 font-mono text-xs opacity-80",children:a.started_at?new Date(a.started_at).toLocaleString():"N/A"}),(0,d.jsx)("td",{className:"py-2 pr-4 font-mono text-xs opacity-80",children:a.started_at&&a.completed_at?function(a,b){let c=b.getTime()-a.getTime();if(c<1e3)return`${c}ms`;let d=Math.floor(c/1e3);if(d<60)return`${d}s`;let e=Math.floor(d/60);return`${e}m ${d%60}s`}(new Date(a.started_at),new Date(a.completed_at)):"-"}),(0,d.jsx)("td",{className:"py-2 pr-4 font-mono text-xs opacity-80",children:a.pid??"-"}),(0,d.jsx)("td",{className:"py-2 pr-4",children:(0,d.jsx)("span",{className:`inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium border ${0===a.exit_code?"bg-[var(--status-completed-bg)] text-[var(--status-completed)] border-[var(--status-completed)]/20":"bg-[var(--status-failed-bg)] text-[var(--status-failed)] border-[var(--status-failed)]/20"}`,children:a.exit_code??"-"})})]},a.id))})]})})]}),!l&&(0,d.jsxs)("div",{className:"border-t border-[var(--card-border)] pt-8",children:[(0,d.jsxs)("h3",{className:"text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)] mb-6 flex items-center justify-between",children:[(0,d.jsx)("span",{children:"Comments"}),(0,d.jsx)("span",{className:"text-[10px] bg-[var(--muted)] px-2 py-0.5 rounded-full",children:b.length})]}),(0,d.jsx)(g,{comments:b,onAddComment:s,onDeleteComment:t})]})]})}),(0,d.jsxs)("div",{className:"w-80 border-l border-[var(--card-border)] bg-[var(--muted)]/20 overflow-y-auto scrollbar-thin p-6 flex flex-col gap-8 flex-shrink-0",children:[(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("span",{className:"text-sm text-[var(--muted-foreground)]",children:"Stage"}),(0,d.jsx)("select",{value:a.stage,onChange:a=>aw(a.target.value),className:"text-sm font-medium bg-[var(--card-bg)] border border-[var(--card-border)] rounded px-2 py-1 focus:border-[var(--primary)] outline-none transition-colors cursor-pointer",children:C.map(a=>(0,d.jsx)("option",{value:a.id,children:a.label},a.id))})]}),!l&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("span",{className:"text-sm text-[var(--muted-foreground)]",children:"Status"}),(0,d.jsx)("select",{value:a.status||"queued",onChange:a=>aA(a.target.value),className:"text-sm font-medium bg-[var(--card-bg)] border border-[var(--card-border)] rounded px-2 py-1 focus:border-[var(--primary)] outline-none transition-colors cursor-pointer",children:G.map(a=>(0,d.jsx)("option",{value:a,children:F[a].label},a))})]}),(0,d.jsx)(J,{label:"ID",value:a.id}),a.slug&&(0,d.jsx)(J,{label:"Slug",value:a.slug,truncate:!0})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("span",{className:"text-sm text-[var(--muted-foreground)]",children:"Project"}),(0,d.jsxs)("select",{value:a.project_id||B.find(b=>b.slug===a.project)?.id||"",onChange:a=>ax(a.target.value),className:"text-sm font-medium bg-[var(--card-bg)] border border-[var(--card-border)] rounded px-2 py-1 focus:border-[var(--primary)] outline-none transition-colors cursor-pointer max-w-[150px] truncate",children:[(0,d.jsx)("option",{value:"",children:"None"}),B.map(a=>(0,d.jsx)("option",{value:a.id,children:a.name},a.id))]})]}),!l&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("span",{className:"text-sm text-[var(--muted-foreground)]",children:"Provider"}),(0,d.jsx)("span",{className:"text-sm font-medium",children:al?"Swarm":aj||"Default"})]}),void 0!==a.pid&&null!==a.pid&&(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("span",{className:"text-sm text-[var(--muted-foreground)]",children:"PID"}),(0,d.jsx)("span",{className:"text-sm font-mono font-medium",title:"Process ID",children:a.pid})]}),void 0!==a.exit_code&&null!==a.exit_code&&(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("span",{className:"text-sm text-[var(--muted-foreground)]",children:"Exit Code"}),(0,d.jsx)("span",{className:`text-sm font-mono font-medium ${0===a.exit_code?"text-[var(--status-completed)]":"text-[var(--status-failed)]"}`,children:a.exit_code})]})]})]}),(0,d.jsx)("div",{className:"w-full h-px bg-[var(--card-border)]"}),(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsx)("div",{className:"flex items-center justify-between",children:(0,d.jsx)("h4",{className:"text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Execution"})}),(0,d.jsxs)("div",{className:"flex items-center justify-between bg-[var(--card-bg)] p-2 rounded border border-[var(--card-border)]",children:[(0,d.jsx)("span",{className:"text-sm font-medium",children:"Swarm Mode"}),(0,d.jsx)("button",{onClick:()=>(a=>{$(a);let b={swarm:a};a?b.swarm_models=_:(b.provider=V,b.model=X),v(b)})(!Z),className:`w-10 h-5 rounded-full transition-colors relative ${Z?"bg-[var(--primary)]":"bg-[var(--muted-foreground)]/30"}`,children:(0,d.jsx)("span",{className:`absolute top-0.5 left-0.5 w-4 h-4 bg-white rounded-full transition-transform ${Z?"translate-x-5":"translate-x-0"}`})})]}),Z?(0,d.jsxs)("div",{className:"space-y-3 animate-fade-in",children:[(0,d.jsx)("label",{className:"block text-xs text-[var(--muted-foreground)]",children:"Swarm Models"}),(0,d.jsxs)("div",{className:"grid gap-2",children:[(0,d.jsxs)("div",{className:"grid grid-cols-[1fr_1.2fr_auto] gap-2",children:[(0,d.jsx)("select",{value:ab,onChange:a=>ac(a.target.value),className:"text-sm bg-[var(--card-bg)] border border-[var(--card-border)] rounded px-2 py-1.5 focus:border-[var(--primary)] outline-none transition-colors appearance-none",children:x.map(a=>(0,d.jsx)("option",{value:a.id,children:a.label},a.id))}),(0,d.jsx)("input",{value:ad,onChange:a=>ae(a.target.value),placeholder:"model name",className:"text-sm bg-[var(--card-bg)] border border-[var(--card-border)] rounded px-2 py-1.5 focus:border-[var(--primary)] outline-none transition-colors"}),(0,d.jsx)("button",{type:"button",onClick:()=>{let a=ad.trim();if(!a)return;let b={provider:ab,model:a};if(_.some(a=>a.provider.toLowerCase()===b.provider.toLowerCase()&&a.model.toLowerCase()===b.model.toLowerCase()))return;let c=[..._,b];if(aa(c),ae(""),l)return void v({swarm_models:c});Z&&av({swarm_models:c})},className:"px-3 py-1.5 text-xs font-semibold rounded-md bg-[var(--card-bg)] border border-[var(--card-border)] hover:border-[var(--muted-foreground)]",children:"Add"})]}),_.length>0&&(0,d.jsx)("div",{className:"space-y-1",children:_.map((a,b)=>(0,d.jsxs)("div",{className:"flex items-center justify-between px-2 py-1.5 rounded text-sm border bg-[var(--card-bg)] border-[var(--card-border)]",children:[(0,d.jsxs)("span",{className:"truncate",children:[(0,d.jsx)("span",{className:"text-[var(--muted-foreground)]",children:a.provider}),(0,d.jsx)("span",{className:"mx-1",children:"\xb7"}),(0,d.jsx)("span",{children:a.model})]}),(0,d.jsx)("button",{type:"button",onClick:()=>(a=>{let b=_.filter((b,c)=>c!==a);if(aa(b),l)return void v({swarm_models:b});Z&&av({swarm_models:b})})(b),className:"text-xs text-[var(--destructive)] hover:underline",children:"Remove"})]},`${a.provider}-${a.model}-${b}`))})]})]}):(0,d.jsxs)("div",{className:"space-y-3 animate-fade-in",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{className:"block text-xs text-[var(--muted-foreground)] mb-1.5",children:"Provider"}),(0,d.jsxs)("select",{value:V,onChange:a=>(a=>{if(W(a),l)return void v({provider:a});v({provider:a})})(a.target.value),className:"w-full text-sm bg-[var(--card-bg)] border border-[var(--card-border)] rounded px-2 py-1.5 focus:border-[var(--primary)] outline-none transition-colors appearance-none",children:[(0,d.jsxs)("option",{value:"",children:["Default (",aj,")"]}),x.map(a=>(0,d.jsx)("option",{value:a.id,children:a.label},a.id))]})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{className:"block text-xs text-[var(--muted-foreground)] mb-1.5",children:"Model"}),(0,d.jsx)("input",{value:X,onChange:a=>(a=>{if(Y(a),l)return void v({model:a});av({model:a})})(a.target.value),placeholder:`Default (${ak||"unspecified"})`,className:"w-full text-sm bg-[var(--card-bg)] border border-[var(--card-border)] rounded px-2 py-1.5 focus:border-[var(--primary)] outline-none transition-colors"})]})]}),ah&&(0,d.jsx)("p",{className:"text-xs text-[var(--destructive)]",children:ah})]}),!l&&(0,d.jsx)("div",{className:"w-full h-px bg-[var(--card-border)]"}),!l&&(0,d.jsx)(D,{projectContext:am,fallbackProjectSlug:an}),!l&&(0,d.jsx)("div",{className:"w-full h-px bg-[var(--card-border)]"}),!l&&(0,d.jsxs)("div",{children:[(0,d.jsxs)("button",{onClick:()=>K(!I),className:`w-full flex items-center justify-between p-3 rounded-lg border transition-all duration-200 ${I?"bg-[var(--primary-muted)] border-[var(--primary)] text-[var(--primary)]":"bg-[var(--card-bg)] border-[var(--card-border)] hover:border-[var(--muted-foreground)]"}`,children:[(0,d.jsx)("span",{className:"text-sm font-medium",children:"Learnings"}),(0,d.jsx)("span",{className:"text-xs bg-[var(--background)] px-2 py-0.5 rounded-full border border-[var(--card-border)]",children:c.length})]}),I&&(0,d.jsx)("div",{className:"mt-4 animate-fade-in-up",children:(0,d.jsx)(o,{learnings:c,taskId:a.id,projectContext:am,onAddLearning:u,compact:!0})})]}),!l&&(0,d.jsx)("div",{className:"mt-auto text-xs text-[var(--muted-foreground)]",children:(0,d.jsxs)("p",{children:["Created ",new Date(a.created_at||Date.now()).toLocaleDateString()]})})]})]})]})})}function J({label:a,value:b,truncate:c,mono:f=!0}){let[g,h]=(0,e.useState)(!1);return(0,d.jsxs)("div",{className:"flex items-center justify-between group h-7",children:[(0,d.jsx)("span",{className:"text-sm text-[var(--muted-foreground)]",children:a}),(0,d.jsxs)("button",{onClick:()=>{navigator.clipboard.writeText(b),h(!0),setTimeout(()=>h(!1),2e3)},className:`text-sm ${f?"font-mono":""} flex items-center gap-1.5 hover:bg-[var(--primary-muted)] hover:text-[var(--primary)] px-1.5 py-0.5 -mr-1.5 rounded transition-all`,title:"Click to copy",children:[(0,d.jsx)("span",{className:`${c?"max-w-[140px] truncate":""} ${g?"opacity-50":""}`,children:c&&b.length>20?b.slice(0,8)+"..."+b.slice(-8):b}),g?(0,d.jsx)("span",{className:"text-[10px] uppercase font-bold tracking-wider text-[var(--primary)] animate-scale-in",children:"Copied"}):(0,d.jsx)("svg",{className:"w-3.5 h-3.5 opacity-0 group-hover:opacity-60 transition-opacity",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})})]})]})}},7889:(a,b,c)=>{c.d(b,{u:()=>f});var d=c(38301);let e=[{id:"gemini",label:"Gemini"},{id:"claude",label:"Claude"},{id:"ollama",label:"Ollama"},{id:"codex",label:"Codex"}];function f(){let[a,b]=(0,d.useState)(e),[c,f]=(0,d.useState)(!0),g=(0,d.useMemo)(()=>a.map(a=>a.id),[a]);return{providers:a,providerIds:g,loading:c}}},88885:(a,b,c)=>{c.d(b,{Tw:()=>g,ls:()=>h,mP:()=>m,ou:()=>l});var d=c(38301);let e={ideation:"\uD83D\uDCA1",planning:"\uD83D\uDCCB",execution:"\uD83D\uDCBB",verification:"\uD83E\uDDEA",done:"✅",coding:"\uD83D\uDCBB",qa:"\uD83E\uDDEA",acceptance:"✓",pr:"\uD83D\uDD00",pr_review:"\uD83D\uDC40",merge:"\uD83D\uDE80"},f={ideation:"var(--warning)",planning:"var(--info)",execution:"var(--primary)",verification:"var(--accent)",done:"var(--success)",coding:"var(--primary)",qa:"var(--accent)",acceptance:"#8b5cf6",pr:"#f97316",pr_review:"#ef4444",merge:"#22c55e"},g=["ideation","planning","execution","verification","done"],h={ideation:{icon:"\uD83D\uDCA1",label:"Ideation",color:"var(--warning)"},planning:{icon:"\uD83D\uDCCB",label:"Planning",color:"var(--info)"},execution:{icon:"\uD83D\uDCBB",label:"Execution",color:"var(--primary)"},verification:{icon:"\uD83E\uDDEA",label:"Verification",color:"var(--accent)"},done:{icon:"✅",label:"Done",color:"var(--success)"}},i="00000000-0000-0000-0000-000000000001",j=[{id:"00000000-0000-0000-0001-000000000001",workflow_id:i,name:"ideation",label:"Ideation",prompt:"Research and scope this. Define approach, estimate effort, list unknowns.",provider:null,model:null,position:0,node_type:"step",created_at:new Date(0).toISOString(),updated_at:new Date(0).toISOString()},{id:"00000000-0000-0000-0001-000000000002",workflow_id:i,name:"planning",label:"Planning",prompt:"Create detailed plan with tasks, milestones, and dependencies.",provider:null,model:null,position:1,node_type:"step",created_at:new Date(0).toISOString(),updated_at:new Date(0).toISOString()},{id:"00000000-0000-0000-0001-000000000003",workflow_id:i,name:"execution",label:"Execution",prompt:"Implement based on the plan. Write clean, tested code.",provider:null,model:null,position:2,node_type:"step",created_at:new Date(0).toISOString(),updated_at:new Date(0).toISOString()},{id:"00000000-0000-0000-0001-000000000004",workflow_id:i,name:"verification",label:"Verification",prompt:"Test thoroughly. Find edge cases. Fix bugs. Verify it works.",provider:null,model:null,position:3,node_type:"gate",created_at:new Date(0).toISOString(),updated_at:new Date(0).toISOString()},{id:"00000000-0000-0000-0001-000000000009",workflow_id:i,name:"done",label:"Done",prompt:"Task completed and shipped.",provider:null,model:null,position:4,node_type:"terminal",created_at:new Date(0).toISOString(),updated_at:new Date(0).toISOString()}],k=[{id:"fallback-ideation-planning",workflow_id:i,from_node:"ideation",to_node:"planning",condition:"done",priority:0,created_at:new Date(0).toISOString()},{id:"fallback-planning-execution",workflow_id:i,from_node:"planning",to_node:"execution",condition:"done",priority:0,created_at:new Date(0).toISOString()},{id:"fallback-execution-verification",workflow_id:i,from_node:"execution",to_node:"verification",condition:"done",priority:0,created_at:new Date(0).toISOString()},{id:"fallback-verification-done",workflow_id:i,from_node:"verification",to_node:"done",condition:"done",priority:0,created_at:new Date(0).toISOString()},{id:"fallback-verification-execution",workflow_id:i,from_node:"verification",to_node:"execution",condition:"failed",priority:1,created_at:new Date(0).toISOString()}],l="00000000-0000-0000-0000-000000000001";function m(a={}){let b=a.workflowId||l,[c,n]=(0,d.useState)(null),[o,p]=(0,d.useState)(!0),[q,r]=(0,d.useState)(null),s=(0,d.useCallback)(async()=>{p(!0),r(null);try{let a=await fetch(`/api/workflows/${b}`);if(!a.ok)throw Error(`Failed to fetch workflow: ${a.statusText}`);let c=await a.json(),d=c.workflow??c,e=Array.isArray(d.nodes)?d.nodes:[];Array.isArray(d.transitions)&&d.transitions,e&&0!==e.length||b!==i?n(d):n({...d,nodes:j,transitions:k})}catch(a){console.error("Error fetching workflow:",a),r(a instanceof Error?a:Error(String(a)))}finally{p(!1)}},[b]),t=(0,d.useMemo)(()=>c?.nodes?.length?c.nodes.slice().sort((a,b)=>a.position-b.position).map(a=>a.name):[...g],[c]),u=(0,d.useMemo)(()=>{if(!c?.nodes?.length)return h;let a={};for(let b of c.nodes)a[b.name]={icon:e[b.name]||"\uD83D\uDCCC",label:b.label||b.name.charAt(0).toUpperCase()+b.name.slice(1),color:f[b.name]||"var(--primary)"};return a},[c]),v=(0,d.useMemo)(()=>c?.transitions||[],[c]),w=(0,d.useCallback)((a,b)=>{if(a===b)return!0;if(!c?.nodes?.length){let c=g.indexOf(a),d=g.indexOf(b);return d<c||d===c+1}let d=t.indexOf(a),e=t.indexOf(b);return!!(e<d||v.some(c=>c.from_node===a&&c.to_node===b))||e===d+1},[c,t,v]);return{workflow:c,stages:t,stageConfig:u,transitions:v,isLoading:o,error:q,refetch:s,isValidTransition:w}}}};
|