@agentuity/cli 2.0.0-beta.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.ts +8 -1
- package/dist/auth.d.ts +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +12 -1
- package/dist/auth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +29 -1
- package/dist/cli.js.map +1 -1
- package/dist/cmd/auth/ssh/delete.js +1 -1
- package/dist/cmd/auth/ssh/delete.js.map +1 -1
- package/dist/cmd/build/app-config-extractor.d.ts +27 -0
- package/dist/cmd/build/app-config-extractor.d.ts.map +1 -0
- package/dist/cmd/build/app-config-extractor.js +152 -0
- package/dist/cmd/build/app-config-extractor.js.map +1 -0
- package/dist/cmd/build/ci.d.ts +18 -0
- package/dist/cmd/build/ci.d.ts.map +1 -0
- package/dist/cmd/build/ci.js +188 -0
- package/dist/cmd/build/ci.js.map +1 -0
- package/dist/cmd/build/index.d.ts.map +1 -1
- package/dist/cmd/build/index.js +50 -14
- package/dist/cmd/build/index.js.map +1 -1
- package/dist/cmd/build/vite/agent-discovery.d.ts.map +1 -1
- package/dist/cmd/build/vite/agent-discovery.js +26 -2
- package/dist/cmd/build/vite/agent-discovery.js.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts +35 -0
- package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.js +232 -4
- package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
- package/dist/cmd/build/vite/config-loader.d.ts +15 -20
- package/dist/cmd/build/vite/config-loader.d.ts.map +1 -1
- package/dist/cmd/build/vite/config-loader.js +41 -74
- package/dist/cmd/build/vite/config-loader.js.map +1 -1
- package/dist/cmd/build/vite/route-discovery.d.ts +5 -0
- package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
- package/dist/cmd/build/vite/route-discovery.js +13 -11
- package/dist/cmd/build/vite/route-discovery.js.map +1 -1
- package/dist/cmd/build/vite/static-renderer.d.ts +3 -4
- package/dist/cmd/build/vite/static-renderer.d.ts.map +1 -1
- package/dist/cmd/build/vite/static-renderer.js +28 -44
- package/dist/cmd/build/vite/static-renderer.js.map +1 -1
- package/dist/cmd/build/vite/tailwind-source-plugin.d.ts +15 -0
- package/dist/cmd/build/vite/tailwind-source-plugin.d.ts.map +1 -0
- package/dist/cmd/build/vite/tailwind-source-plugin.js +61 -0
- package/dist/cmd/build/vite/tailwind-source-plugin.js.map +1 -0
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.js +4 -48
- package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
- package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-builder.js +70 -155
- package/dist/cmd/build/vite/vite-builder.js.map +1 -1
- package/dist/cmd/cloud/agent/get.d.ts.map +1 -1
- package/dist/cmd/cloud/agent/get.js +1 -0
- package/dist/cmd/cloud/agent/get.js.map +1 -1
- package/dist/cmd/cloud/apikey/delete.js +1 -1
- package/dist/cmd/cloud/apikey/delete.js.map +1 -1
- package/dist/cmd/cloud/apikey/get.d.ts.map +1 -1
- package/dist/cmd/cloud/apikey/get.js +1 -0
- package/dist/cmd/cloud/apikey/get.js.map +1 -1
- package/dist/cmd/cloud/apikey/index.d.ts.map +1 -1
- package/dist/cmd/cloud/apikey/index.js +1 -0
- package/dist/cmd/cloud/apikey/index.js.map +1 -1
- package/dist/cmd/cloud/db/delete.js +1 -1
- package/dist/cmd/cloud/db/delete.js.map +1 -1
- package/dist/cmd/cloud/deploy-fork.d.ts +10 -0
- package/dist/cmd/cloud/deploy-fork.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy-fork.js +71 -32
- package/dist/cmd/cloud/deploy-fork.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +54 -12
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/cloud/deployment/remove.js +17 -17
- package/dist/cmd/cloud/deployment/remove.js.map +1 -1
- package/dist/cmd/cloud/deployment/show.js +1 -1
- package/dist/cmd/cloud/deployment/show.js.map +1 -1
- package/dist/cmd/cloud/email/create.js +1 -1
- package/dist/cmd/cloud/email/create.js.map +1 -1
- package/dist/cmd/cloud/email/delete.js +1 -1
- package/dist/cmd/cloud/email/delete.js.map +1 -1
- package/dist/cmd/cloud/email/destination/delete.js +1 -1
- package/dist/cmd/cloud/email/destination/delete.js.map +1 -1
- package/dist/cmd/cloud/email/get.d.ts.map +1 -1
- package/dist/cmd/cloud/email/get.js +1 -0
- package/dist/cmd/cloud/email/get.js.map +1 -1
- package/dist/cmd/cloud/email/inbound/get.d.ts.map +1 -1
- package/dist/cmd/cloud/email/inbound/get.js +1 -0
- package/dist/cmd/cloud/email/inbound/get.js.map +1 -1
- package/dist/cmd/cloud/email/outbound/get.d.ts.map +1 -1
- package/dist/cmd/cloud/email/outbound/get.js +1 -0
- package/dist/cmd/cloud/email/outbound/get.js.map +1 -1
- package/dist/cmd/cloud/env/delete.js +1 -1
- package/dist/cmd/cloud/env/delete.js.map +1 -1
- package/dist/cmd/cloud/env/get.d.ts.map +1 -1
- package/dist/cmd/cloud/env/get.js +1 -0
- package/dist/cmd/cloud/env/get.js.map +1 -1
- package/dist/cmd/cloud/eval/get.d.ts.map +1 -1
- package/dist/cmd/cloud/eval/get.js +1 -0
- package/dist/cmd/cloud/eval/get.js.map +1 -1
- package/dist/cmd/cloud/eval/index.d.ts.map +1 -1
- package/dist/cmd/cloud/eval/index.js +1 -0
- package/dist/cmd/cloud/eval/index.js.map +1 -1
- package/dist/cmd/cloud/eval/list.js +1 -1
- package/dist/cmd/cloud/eval/list.js.map +1 -1
- package/dist/cmd/cloud/eval-run/get.d.ts.map +1 -1
- package/dist/cmd/cloud/eval-run/get.js +1 -0
- package/dist/cmd/cloud/eval-run/get.js.map +1 -1
- package/dist/cmd/cloud/eval-run/index.d.ts.map +1 -1
- package/dist/cmd/cloud/eval-run/index.js +1 -0
- package/dist/cmd/cloud/eval-run/index.js.map +1 -1
- package/dist/cmd/cloud/eval-run/list.js +1 -1
- package/dist/cmd/cloud/eval-run/list.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete-namespace.js +1 -1
- package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete.js +1 -1
- package/dist/cmd/cloud/keyvalue/delete.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/get.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/get.js +1 -0
- package/dist/cmd/cloud/keyvalue/get.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/index.js +1 -1
- package/dist/cmd/cloud/keyvalue/index.js.map +1 -1
- package/dist/cmd/cloud/machine/delete.js +1 -1
- package/dist/cmd/cloud/machine/delete.js.map +1 -1
- package/dist/cmd/cloud/oidc/delete.js +1 -1
- package/dist/cmd/cloud/oidc/delete.js.map +1 -1
- package/dist/cmd/cloud/oidc/get.d.ts.map +1 -1
- package/dist/cmd/cloud/oidc/get.js +1 -0
- package/dist/cmd/cloud/oidc/get.js.map +1 -1
- package/dist/cmd/cloud/queue/create.d.ts.map +1 -1
- package/dist/cmd/cloud/queue/create.js +1 -0
- package/dist/cmd/cloud/queue/create.js.map +1 -1
- package/dist/cmd/cloud/queue/delete.js +1 -1
- package/dist/cmd/cloud/queue/delete.js.map +1 -1
- package/dist/cmd/cloud/queue/get.d.ts.map +1 -1
- package/dist/cmd/cloud/queue/get.js +1 -0
- package/dist/cmd/cloud/queue/get.js.map +1 -1
- package/dist/cmd/cloud/redis/get.js +1 -1
- package/dist/cmd/cloud/redis/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/checkpoint/create.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/checkpoint/create.js +1 -0
- package/dist/cmd/cloud/sandbox/checkpoint/create.js.map +1 -1
- package/dist/cmd/cloud/sandbox/checkpoint/delete.js +1 -1
- package/dist/cmd/cloud/sandbox/checkpoint/delete.js.map +1 -1
- package/dist/cmd/cloud/sandbox/checkpoint/index.js +1 -1
- package/dist/cmd/cloud/sandbox/checkpoint/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/create.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/create.js +14 -0
- package/dist/cmd/cloud/sandbox/create.js.map +1 -1
- package/dist/cmd/cloud/sandbox/delete.js +1 -1
- package/dist/cmd/cloud/sandbox/delete.js.map +1 -1
- package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/exec.js +76 -66
- package/dist/cmd/cloud/sandbox/exec.js.map +1 -1
- package/dist/cmd/cloud/sandbox/execution/index.js +1 -1
- package/dist/cmd/cloud/sandbox/execution/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/execution/list.js +2 -2
- package/dist/cmd/cloud/sandbox/execution/list.js.map +1 -1
- package/dist/cmd/cloud/sandbox/fs/cp.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/fs/cp.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/{cp.js → fs/cp.js} +13 -13
- package/dist/cmd/cloud/sandbox/fs/cp.js.map +1 -0
- package/dist/cmd/cloud/sandbox/fs/download.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/fs/download.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/{download.js → fs/download.js} +7 -7
- package/dist/cmd/cloud/sandbox/fs/download.js.map +1 -0
- package/dist/cmd/cloud/sandbox/fs/index.d.ts +2 -0
- package/dist/cmd/cloud/sandbox/fs/index.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/fs/index.js +36 -0
- package/dist/cmd/cloud/sandbox/fs/index.js.map +1 -0
- package/dist/cmd/cloud/sandbox/fs/ls.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/fs/ls.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/{ls.js → fs/ls.js} +10 -10
- package/dist/cmd/cloud/sandbox/fs/ls.js.map +1 -0
- package/dist/cmd/cloud/sandbox/fs/mkdir.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/fs/mkdir.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/{mkdir.js → fs/mkdir.js} +6 -6
- package/dist/cmd/cloud/sandbox/fs/mkdir.js.map +1 -0
- package/dist/cmd/cloud/sandbox/fs/rm.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/fs/rm.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/{rm.js → fs/rm.js} +6 -5
- package/dist/cmd/cloud/sandbox/fs/rm.js.map +1 -0
- package/dist/cmd/cloud/sandbox/fs/rmdir.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/fs/rmdir.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/{rmdir.js → fs/rmdir.js} +6 -6
- package/dist/cmd/cloud/sandbox/fs/rmdir.js.map +1 -0
- package/dist/cmd/cloud/sandbox/fs/upload.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/fs/upload.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/{upload.js → fs/upload.js} +7 -7
- package/dist/cmd/cloud/sandbox/fs/upload.js.map +1 -0
- package/dist/cmd/cloud/sandbox/index.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/index.js +4 -14
- package/dist/cmd/cloud/sandbox/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/job/create.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/job/create.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/job/create.js +52 -0
- package/dist/cmd/cloud/sandbox/job/create.js.map +1 -0
- package/dist/cmd/cloud/sandbox/job/destroy.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/job/destroy.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/job/destroy.js +59 -0
- package/dist/cmd/cloud/sandbox/job/destroy.js.map +1 -0
- package/dist/cmd/cloud/sandbox/job/get.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/job/get.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/job/get.js +66 -0
- package/dist/cmd/cloud/sandbox/job/get.js.map +1 -0
- package/dist/cmd/cloud/sandbox/job/index.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/job/index.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/job/index.js +41 -0
- package/dist/cmd/cloud/sandbox/job/index.js.map +1 -0
- package/dist/cmd/cloud/sandbox/job/list.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/job/list.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/job/list.js +67 -0
- package/dist/cmd/cloud/sandbox/job/list.js.map +1 -0
- package/dist/cmd/cloud/sandbox/job/logs.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/job/logs.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/job/logs.js +124 -0
- package/dist/cmd/cloud/sandbox/job/logs.js.map +1 -0
- package/dist/cmd/cloud/sandbox/run.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/run.js +14 -2
- package/dist/cmd/cloud/sandbox/run.js.map +1 -1
- package/dist/cmd/cloud/sandbox/runtime/index.js +1 -1
- package/dist/cmd/cloud/sandbox/runtime/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/build.js +2 -2
- package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/create.js +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/delete.js +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/delete.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/index.js +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/index.js.map +1 -1
- package/dist/cmd/cloud/schedule/create.d.ts.map +1 -1
- package/dist/cmd/cloud/schedule/create.js +1 -0
- package/dist/cmd/cloud/schedule/create.js.map +1 -1
- package/dist/cmd/cloud/schedule/delete.js +1 -1
- package/dist/cmd/cloud/schedule/delete.js.map +1 -1
- package/dist/cmd/cloud/schedule/delivery/get.d.ts.map +1 -1
- package/dist/cmd/cloud/schedule/delivery/get.js +1 -0
- package/dist/cmd/cloud/schedule/delivery/get.js.map +1 -1
- package/dist/cmd/cloud/schedule/destination/create.d.ts.map +1 -1
- package/dist/cmd/cloud/schedule/destination/create.js +1 -0
- package/dist/cmd/cloud/schedule/destination/create.js.map +1 -1
- package/dist/cmd/cloud/schedule/destination/delete.js +1 -1
- package/dist/cmd/cloud/schedule/destination/delete.js.map +1 -1
- package/dist/cmd/cloud/schedule/destination/get.d.ts.map +1 -1
- package/dist/cmd/cloud/schedule/destination/get.js +1 -0
- package/dist/cmd/cloud/schedule/destination/get.js.map +1 -1
- package/dist/cmd/cloud/schedule/get.d.ts.map +1 -1
- package/dist/cmd/cloud/schedule/get.js +1 -0
- package/dist/cmd/cloud/schedule/get.js.map +1 -1
- package/dist/cmd/cloud/session/get.d.ts.map +1 -1
- package/dist/cmd/cloud/session/get.js +1 -0
- package/dist/cmd/cloud/session/get.js.map +1 -1
- package/dist/cmd/cloud/session/index.d.ts.map +1 -1
- package/dist/cmd/cloud/session/index.js +1 -0
- package/dist/cmd/cloud/session/index.js.map +1 -1
- package/dist/cmd/cloud/session/list.js +1 -1
- package/dist/cmd/cloud/session/list.js.map +1 -1
- package/dist/cmd/cloud/storage/delete.js +1 -1
- package/dist/cmd/cloud/storage/delete.js.map +1 -1
- package/dist/cmd/cloud/stream/delete.js +1 -1
- package/dist/cmd/cloud/stream/delete.js.map +1 -1
- package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/get.js +1 -0
- package/dist/cmd/cloud/stream/get.js.map +1 -1
- package/dist/cmd/cloud/task/delete.js +1 -1
- package/dist/cmd/cloud/task/delete.js.map +1 -1
- package/dist/cmd/cloud/task/index.d.ts.map +1 -1
- package/dist/cmd/cloud/task/index.js +1 -0
- package/dist/cmd/cloud/task/index.js.map +1 -1
- package/dist/cmd/cloud/thread/delete.js +1 -1
- package/dist/cmd/cloud/thread/delete.js.map +1 -1
- package/dist/cmd/cloud/thread/get.d.ts.map +1 -1
- package/dist/cmd/cloud/thread/get.js +1 -0
- package/dist/cmd/cloud/thread/get.js.map +1 -1
- package/dist/cmd/cloud/thread/index.d.ts.map +1 -1
- package/dist/cmd/cloud/thread/index.js +1 -0
- package/dist/cmd/cloud/thread/index.js.map +1 -1
- package/dist/cmd/cloud/thread/list.js +1 -1
- package/dist/cmd/cloud/thread/list.js.map +1 -1
- package/dist/cmd/cloud/vector/delete-namespace.js +1 -1
- package/dist/cmd/cloud/vector/delete-namespace.js.map +1 -1
- package/dist/cmd/cloud/vector/delete.js +1 -1
- package/dist/cmd/cloud/vector/delete.js.map +1 -1
- package/dist/cmd/cloud/vector/get.d.ts.map +1 -1
- package/dist/cmd/cloud/vector/get.js +1 -0
- package/dist/cmd/cloud/vector/get.js.map +1 -1
- package/dist/cmd/cloud/vector/index.js +1 -1
- package/dist/cmd/cloud/vector/index.js.map +1 -1
- package/dist/cmd/cloud/webhook/create.d.ts.map +1 -1
- package/dist/cmd/cloud/webhook/create.js +1 -0
- package/dist/cmd/cloud/webhook/create.js.map +1 -1
- package/dist/cmd/cloud/webhook/delete.js +1 -1
- package/dist/cmd/cloud/webhook/delete.js.map +1 -1
- package/dist/cmd/cloud/webhook/get.d.ts.map +1 -1
- package/dist/cmd/cloud/webhook/get.js +1 -0
- package/dist/cmd/cloud/webhook/get.js.map +1 -1
- package/dist/cmd/coder/hub-url.d.ts.map +1 -1
- package/dist/cmd/coder/hub-url.js +3 -1
- package/dist/cmd/coder/hub-url.js.map +1 -1
- package/dist/cmd/coder/start.js +6 -6
- package/dist/cmd/coder/start.js.map +1 -1
- package/dist/cmd/coder/tui-init.d.ts +2 -2
- package/dist/cmd/coder/tui-init.js +2 -2
- package/dist/cmd/coder/tui-init.js.map +1 -1
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +161 -130
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/dev/process-manager.d.ts +104 -0
- package/dist/cmd/dev/process-manager.d.ts.map +1 -0
- package/dist/cmd/dev/process-manager.js +204 -0
- package/dist/cmd/dev/process-manager.js.map +1 -0
- package/dist/cmd/git/account/remove.d.ts.map +1 -1
- package/dist/cmd/git/account/remove.js +1 -0
- package/dist/cmd/git/account/remove.js.map +1 -1
- package/dist/cmd/profile/delete.js +1 -1
- package/dist/cmd/profile/delete.js.map +1 -1
- package/dist/cmd/project/delete.js +1 -1
- package/dist/cmd/project/delete.js.map +1 -1
- package/dist/cmd/project/hostname/get.d.ts.map +1 -1
- package/dist/cmd/project/hostname/get.js +1 -0
- package/dist/cmd/project/hostname/get.js.map +1 -1
- package/dist/cmd/project/show.d.ts.map +1 -1
- package/dist/cmd/project/show.js +9 -0
- package/dist/cmd/project/show.js.map +1 -1
- package/dist/cmd/support/report.d.ts.map +1 -1
- package/dist/cmd/support/report.js +19 -10
- package/dist/cmd/support/report.js.map +1 -1
- package/dist/cmd/upgrade/index.d.ts.map +1 -1
- package/dist/cmd/upgrade/index.js +3 -16
- package/dist/cmd/upgrade/index.js.map +1 -1
- package/dist/errors.d.ts +24 -10
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +42 -12
- package/dist/errors.js.map +1 -1
- package/dist/schema-generator.d.ts.map +1 -1
- package/dist/schema-generator.js +3 -13
- package/dist/schema-generator.js.map +1 -1
- package/dist/schema-parser.d.ts.map +1 -1
- package/dist/schema-parser.js +8 -0
- package/dist/schema-parser.js.map +1 -1
- package/dist/steps.d.ts.map +1 -1
- package/dist/steps.js +38 -0
- package/dist/steps.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +25 -9
- package/dist/tui.js.map +1 -1
- package/dist/utils/stream-capture.d.ts +9 -0
- package/dist/utils/stream-capture.d.ts.map +1 -0
- package/dist/utils/stream-capture.js +34 -0
- package/dist/utils/stream-capture.js.map +1 -0
- package/dist/utils/stream-url.d.ts +23 -0
- package/dist/utils/stream-url.d.ts.map +1 -0
- package/dist/utils/stream-url.js +153 -0
- package/dist/utils/stream-url.js.map +1 -0
- package/dist/utils/version-mismatch.d.ts +39 -0
- package/dist/utils/version-mismatch.d.ts.map +1 -0
- package/dist/utils/version-mismatch.js +161 -0
- package/dist/utils/version-mismatch.js.map +1 -0
- package/dist/utils/zip.d.ts.map +1 -1
- package/dist/utils/zip.js +19 -10
- package/dist/utils/zip.js.map +1 -1
- package/package.json +11 -7
- package/src/auth.ts +12 -2
- package/src/cli.ts +33 -1
- package/src/cmd/auth/ssh/delete.ts +1 -1
- package/src/cmd/build/app-config-extractor.ts +186 -0
- package/src/cmd/build/ci.ts +225 -0
- package/src/cmd/build/index.ts +61 -14
- package/src/cmd/build/vite/agent-discovery.ts +30 -5
- package/src/cmd/build/vite/bun-dev-server.ts +319 -6
- package/src/cmd/build/vite/config-loader.ts +45 -77
- package/src/cmd/build/vite/route-discovery.ts +25 -12
- package/src/cmd/build/vite/static-renderer.ts +34 -47
- package/src/cmd/build/vite/tailwind-source-plugin.ts +73 -0
- package/src/cmd/build/vite/vite-asset-server-config.ts +4 -47
- package/src/cmd/build/vite/vite-builder.ts +80 -168
- package/src/cmd/cloud/agent/get.ts +1 -0
- package/src/cmd/cloud/apikey/delete.ts +1 -1
- package/src/cmd/cloud/apikey/get.ts +1 -0
- package/src/cmd/cloud/apikey/index.ts +1 -0
- package/src/cmd/cloud/db/delete.ts +1 -1
- package/src/cmd/cloud/deploy-fork.ts +90 -33
- package/src/cmd/cloud/deploy.ts +69 -13
- package/src/cmd/cloud/deployment/remove.ts +17 -17
- package/src/cmd/cloud/deployment/show.ts +1 -1
- package/src/cmd/cloud/email/create.ts +1 -1
- package/src/cmd/cloud/email/delete.ts +1 -1
- package/src/cmd/cloud/email/destination/delete.ts +1 -1
- package/src/cmd/cloud/email/get.ts +1 -0
- package/src/cmd/cloud/email/inbound/get.ts +1 -0
- package/src/cmd/cloud/email/outbound/get.ts +1 -0
- package/src/cmd/cloud/env/delete.ts +1 -1
- package/src/cmd/cloud/env/get.ts +1 -0
- package/src/cmd/cloud/eval/get.ts +1 -0
- package/src/cmd/cloud/eval/index.ts +1 -0
- package/src/cmd/cloud/eval/list.ts +1 -1
- package/src/cmd/cloud/eval-run/get.ts +1 -0
- package/src/cmd/cloud/eval-run/index.ts +1 -0
- package/src/cmd/cloud/eval-run/list.ts +1 -1
- package/src/cmd/cloud/keyvalue/delete-namespace.ts +1 -1
- package/src/cmd/cloud/keyvalue/delete.ts +1 -1
- package/src/cmd/cloud/keyvalue/get.ts +1 -0
- package/src/cmd/cloud/keyvalue/index.ts +1 -1
- package/src/cmd/cloud/machine/delete.ts +1 -1
- package/src/cmd/cloud/oidc/delete.ts +1 -1
- package/src/cmd/cloud/oidc/get.ts +1 -0
- package/src/cmd/cloud/queue/create.ts +1 -0
- package/src/cmd/cloud/queue/delete.ts +1 -1
- package/src/cmd/cloud/queue/get.ts +1 -0
- package/src/cmd/cloud/redis/get.ts +1 -1
- package/src/cmd/cloud/sandbox/checkpoint/create.ts +1 -0
- package/src/cmd/cloud/sandbox/checkpoint/delete.ts +1 -1
- package/src/cmd/cloud/sandbox/checkpoint/index.ts +1 -1
- package/src/cmd/cloud/sandbox/create.ts +16 -0
- package/src/cmd/cloud/sandbox/delete.ts +1 -1
- package/src/cmd/cloud/sandbox/exec.ts +102 -90
- package/src/cmd/cloud/sandbox/execution/index.ts +1 -1
- package/src/cmd/cloud/sandbox/execution/list.ts +2 -2
- package/src/cmd/cloud/sandbox/{cp.ts → fs/cp.ts} +13 -13
- package/src/cmd/cloud/sandbox/{download.ts → fs/download.ts} +7 -7
- package/src/cmd/cloud/sandbox/fs/index.ts +36 -0
- package/src/cmd/cloud/sandbox/{ls.ts → fs/ls.ts} +10 -10
- package/src/cmd/cloud/sandbox/{mkdir.ts → fs/mkdir.ts} +6 -6
- package/src/cmd/cloud/sandbox/{rm.ts → fs/rm.ts} +6 -5
- package/src/cmd/cloud/sandbox/{rmdir.ts → fs/rmdir.ts} +6 -6
- package/src/cmd/cloud/sandbox/{upload.ts → fs/upload.ts} +7 -7
- package/src/cmd/cloud/sandbox/index.ts +4 -14
- package/src/cmd/cloud/sandbox/job/create.ts +63 -0
- package/src/cmd/cloud/sandbox/job/destroy.ts +67 -0
- package/src/cmd/cloud/sandbox/job/get.ts +78 -0
- package/src/cmd/cloud/sandbox/job/index.ts +42 -0
- package/src/cmd/cloud/sandbox/job/list.ts +81 -0
- package/src/cmd/cloud/sandbox/job/logs.ts +139 -0
- package/src/cmd/cloud/sandbox/run.ts +16 -2
- package/src/cmd/cloud/sandbox/runtime/index.ts +1 -1
- package/src/cmd/cloud/sandbox/snapshot/build.ts +2 -2
- package/src/cmd/cloud/sandbox/snapshot/create.ts +1 -0
- package/src/cmd/cloud/sandbox/snapshot/delete.ts +1 -1
- package/src/cmd/cloud/sandbox/snapshot/index.ts +1 -1
- package/src/cmd/cloud/schedule/create.ts +1 -0
- package/src/cmd/cloud/schedule/delete.ts +1 -1
- package/src/cmd/cloud/schedule/delivery/get.ts +1 -0
- package/src/cmd/cloud/schedule/destination/create.ts +1 -0
- package/src/cmd/cloud/schedule/destination/delete.ts +1 -1
- package/src/cmd/cloud/schedule/destination/get.ts +1 -0
- package/src/cmd/cloud/schedule/get.ts +1 -0
- package/src/cmd/cloud/session/get.ts +1 -0
- package/src/cmd/cloud/session/index.ts +1 -0
- package/src/cmd/cloud/session/list.ts +1 -1
- package/src/cmd/cloud/storage/delete.ts +1 -1
- package/src/cmd/cloud/stream/delete.ts +1 -1
- package/src/cmd/cloud/stream/get.ts +1 -0
- package/src/cmd/cloud/task/delete.ts +1 -1
- package/src/cmd/cloud/task/index.ts +1 -0
- package/src/cmd/cloud/thread/delete.ts +1 -1
- package/src/cmd/cloud/thread/get.ts +1 -0
- package/src/cmd/cloud/thread/index.ts +1 -0
- package/src/cmd/cloud/thread/list.ts +1 -1
- package/src/cmd/cloud/vector/delete-namespace.ts +1 -1
- package/src/cmd/cloud/vector/delete.ts +1 -1
- package/src/cmd/cloud/vector/get.ts +1 -0
- package/src/cmd/cloud/vector/index.ts +1 -1
- package/src/cmd/cloud/webhook/create.ts +1 -0
- package/src/cmd/cloud/webhook/delete.ts +1 -1
- package/src/cmd/cloud/webhook/get.ts +1 -0
- package/src/cmd/coder/hub-url.ts +3 -1
- package/src/cmd/coder/start.ts +6 -6
- package/src/cmd/coder/tui-init.ts +4 -4
- package/src/cmd/dev/index.ts +171 -131
- package/src/cmd/dev/process-manager.ts +261 -0
- package/src/cmd/git/account/remove.ts +1 -0
- package/src/cmd/profile/delete.ts +1 -1
- package/src/cmd/project/delete.ts +1 -1
- package/src/cmd/project/hostname/get.ts +1 -0
- package/src/cmd/project/show.ts +9 -0
- package/src/cmd/support/report.ts +21 -10
- package/src/cmd/upgrade/index.ts +3 -18
- package/src/errors.ts +44 -12
- package/src/schema-generator.ts +3 -13
- package/src/schema-parser.ts +11 -0
- package/src/steps.ts +38 -0
- package/src/tui.ts +24 -9
- package/src/utils/stream-capture.ts +39 -0
- package/src/utils/stream-url.ts +226 -0
- package/src/utils/version-mismatch.ts +204 -0
- package/src/utils/zip.ts +22 -10
- package/dist/cmd/cloud/sandbox/cp.d.ts +0 -3
- package/dist/cmd/cloud/sandbox/cp.d.ts.map +0 -1
- package/dist/cmd/cloud/sandbox/cp.js.map +0 -1
- package/dist/cmd/cloud/sandbox/download.d.ts +0 -3
- package/dist/cmd/cloud/sandbox/download.d.ts.map +0 -1
- package/dist/cmd/cloud/sandbox/download.js.map +0 -1
- package/dist/cmd/cloud/sandbox/ls.d.ts +0 -3
- package/dist/cmd/cloud/sandbox/ls.d.ts.map +0 -1
- package/dist/cmd/cloud/sandbox/ls.js.map +0 -1
- package/dist/cmd/cloud/sandbox/mkdir.d.ts +0 -3
- package/dist/cmd/cloud/sandbox/mkdir.d.ts.map +0 -1
- package/dist/cmd/cloud/sandbox/mkdir.js.map +0 -1
- package/dist/cmd/cloud/sandbox/rm.d.ts +0 -3
- package/dist/cmd/cloud/sandbox/rm.d.ts.map +0 -1
- package/dist/cmd/cloud/sandbox/rm.js.map +0 -1
- package/dist/cmd/cloud/sandbox/rmdir.d.ts +0 -3
- package/dist/cmd/cloud/sandbox/rmdir.d.ts.map +0 -1
- package/dist/cmd/cloud/sandbox/rmdir.js.map +0 -1
- package/dist/cmd/cloud/sandbox/upload.d.ts +0 -3
- package/dist/cmd/cloud/sandbox/upload.d.ts.map +0 -1
- package/dist/cmd/cloud/sandbox/upload.js.map +0 -1
|
@@ -18,7 +18,7 @@ export const deleteSubcommand = createSubcommand({
|
|
|
18
18
|
name: 'delete',
|
|
19
19
|
description: 'Delete a project',
|
|
20
20
|
tags: ['destructive', 'deletes-resource', 'slow', 'requires-auth'],
|
|
21
|
-
aliases: ['rm', 'del'],
|
|
21
|
+
aliases: ['rm', 'del', 'remove', 'terminate'],
|
|
22
22
|
requires: { auth: true, apiClient: true },
|
|
23
23
|
idempotent: false,
|
|
24
24
|
examples: [
|
|
@@ -12,6 +12,7 @@ const HostnameGetResponseSchema = z.object({
|
|
|
12
12
|
|
|
13
13
|
export const getSubcommand = createSubcommand({
|
|
14
14
|
name: 'get',
|
|
15
|
+
aliases: ['show', 'info'],
|
|
15
16
|
description: 'Show the current vanity hostname for the project',
|
|
16
17
|
tags: ['read-only', 'fast', 'requires-auth', 'requires-project'],
|
|
17
18
|
requires: { auth: true, apiClient: true, project: true },
|
package/src/cmd/project/show.ts
CHANGED
|
@@ -12,6 +12,14 @@ const ProjectShowResponseSchema = z.object({
|
|
|
12
12
|
orgId: z.string().describe('Organization ID'),
|
|
13
13
|
secrets: z.record(z.string(), z.string()).optional().describe('Project secrets (masked)'),
|
|
14
14
|
env: z.record(z.string(), z.string()).optional().describe('Environment variables'),
|
|
15
|
+
urls: z
|
|
16
|
+
.object({
|
|
17
|
+
dashboard: z.string().describe('Dashboard URL for the project'),
|
|
18
|
+
app: z.string().describe('Public URL for the latest deployment'),
|
|
19
|
+
custom: z.array(z.string()).describe('Custom domain URLs'),
|
|
20
|
+
})
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Project URLs'),
|
|
15
23
|
});
|
|
16
24
|
|
|
17
25
|
export const showSubcommand = createSubcommand({
|
|
@@ -60,6 +68,7 @@ export const showSubcommand = createSubcommand({
|
|
|
60
68
|
orgId: project.orgId,
|
|
61
69
|
secrets: project.secrets,
|
|
62
70
|
env: project.env,
|
|
71
|
+
urls: project.urls,
|
|
63
72
|
};
|
|
64
73
|
},
|
|
65
74
|
});
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createSubcommand } from '../../types';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { createWriteStream, readFileSync } from 'node:fs';
|
|
4
4
|
import { join, basename } from 'node:path';
|
|
5
5
|
import { tmpdir } from 'node:os';
|
|
6
6
|
import { getLogSessionsInCurrentWindow } from '../../internal-logger';
|
|
7
7
|
import * as tui from '../../tui';
|
|
8
8
|
import { randomBytes } from 'node:crypto';
|
|
9
|
-
import
|
|
9
|
+
import archiver from 'archiver';
|
|
10
10
|
import { APIResponseSchema } from '@agentuity/server';
|
|
11
11
|
import { StructuredError } from '@agentuity/core';
|
|
12
12
|
|
|
@@ -61,10 +61,19 @@ async function createReportZip(sessionDirs: string[]): Promise<string> {
|
|
|
61
61
|
throw NoSessionDirectoriesError();
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
// Create zip in temp directory
|
|
64
|
+
// Create zip in temp directory, streaming to disk instead of buffering in memory
|
|
65
65
|
const tempZip = join(tmpdir(), `agentuity-report-${randomBytes(8).toString('hex')}.zip`);
|
|
66
66
|
|
|
67
|
-
const
|
|
67
|
+
const output = createWriteStream(tempZip);
|
|
68
|
+
const zip = archiver('zip', { zlib: { level: 9 } });
|
|
69
|
+
|
|
70
|
+
const writeDone = new Promise<void>((resolve, reject) => {
|
|
71
|
+
output.on('close', resolve);
|
|
72
|
+
output.on('error', reject);
|
|
73
|
+
zip.on('error', reject);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
zip.pipe(output);
|
|
68
77
|
|
|
69
78
|
for (const sessionDir of sessionDirs) {
|
|
70
79
|
const sessionFile = join(sessionDir, 'session.json');
|
|
@@ -75,14 +84,15 @@ async function createReportZip(sessionDirs: string[]): Promise<string> {
|
|
|
75
84
|
|
|
76
85
|
// Add files with session ID prefix to avoid conflicts
|
|
77
86
|
if (await Bun.file(sessionFile).exists()) {
|
|
78
|
-
zip.
|
|
87
|
+
zip.file(sessionFile, { name: `${sessionId}/session.json` });
|
|
79
88
|
}
|
|
80
89
|
if (await Bun.file(logsFile).exists()) {
|
|
81
|
-
zip.
|
|
90
|
+
zip.file(logsFile, { name: `${sessionId}/logs.jsonl` });
|
|
82
91
|
}
|
|
83
92
|
}
|
|
84
93
|
|
|
85
|
-
zip.
|
|
94
|
+
await zip.finalize();
|
|
95
|
+
await writeDone;
|
|
86
96
|
|
|
87
97
|
return tempZip;
|
|
88
98
|
}
|
|
@@ -95,14 +105,15 @@ async function uploadReport(
|
|
|
95
105
|
zipPath: string,
|
|
96
106
|
logger: import('../../types').Logger
|
|
97
107
|
): Promise<void> {
|
|
98
|
-
|
|
108
|
+
// Use Bun.file() to stream the zip to S3 without loading it into memory.
|
|
109
|
+
// Bun automatically sets Content-Length from the file size.
|
|
110
|
+
const file = Bun.file(zipPath);
|
|
99
111
|
|
|
100
112
|
const response = await fetch(presignedUrl, {
|
|
101
113
|
method: 'PUT',
|
|
102
|
-
body:
|
|
114
|
+
body: file,
|
|
103
115
|
headers: {
|
|
104
116
|
'Content-Type': 'application/zip',
|
|
105
|
-
'Content-Length': fileBuffer.length.toString(),
|
|
106
117
|
},
|
|
107
118
|
});
|
|
108
119
|
|
package/src/cmd/upgrade/index.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { getVersion, getCompareUrl, getReleaseUrl, toTag } from '../../version';
|
|
|
3
3
|
import { getCommand } from '../../command-prefix';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { ErrorCode, createError, exitWithError } from '../../errors';
|
|
6
|
+
import { isJSONMode } from '../../output';
|
|
6
7
|
import * as tui from '../../tui';
|
|
7
8
|
import { tmpdir } from 'node:os';
|
|
8
9
|
import { getInstallationType, type InstallationType } from '../../utils/installation-type';
|
|
@@ -235,8 +236,8 @@ export const command = createCommand({
|
|
|
235
236
|
};
|
|
236
237
|
}
|
|
237
238
|
|
|
238
|
-
// Show version info
|
|
239
|
-
if (!
|
|
239
|
+
// Show version info (suppress in JSON mode)
|
|
240
|
+
if (!isJSONMode(options)) {
|
|
240
241
|
tui.info(`Current version: ${tui.muted(normalizedCurrent)}`);
|
|
241
242
|
tui.info(`Latest version: ${tui.bold(normalizedLatest)}`);
|
|
242
243
|
tui.newline();
|
|
@@ -249,22 +250,6 @@ export const command = createCommand({
|
|
|
249
250
|
tui.newline();
|
|
250
251
|
}
|
|
251
252
|
|
|
252
|
-
// Confirm upgrade
|
|
253
|
-
if (!force) {
|
|
254
|
-
const shouldUpgrade = await tui.confirm('Do you want to upgrade?', true);
|
|
255
|
-
|
|
256
|
-
if (!shouldUpgrade) {
|
|
257
|
-
const message = 'Upgrade cancelled';
|
|
258
|
-
tui.info(message);
|
|
259
|
-
return {
|
|
260
|
-
upgraded: false,
|
|
261
|
-
from: currentVersion,
|
|
262
|
-
to: latestVersion,
|
|
263
|
-
message,
|
|
264
|
-
};
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
|
|
268
253
|
// Perform the upgrade using bun
|
|
269
254
|
await tui.spinner({
|
|
270
255
|
type: 'logger',
|
package/src/errors.ts
CHANGED
|
@@ -1,22 +1,51 @@
|
|
|
1
1
|
import type { Logger } from './types';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Standard exit codes for the CLI
|
|
4
|
+
* Standard exit codes for the CLI.
|
|
5
|
+
*
|
|
6
|
+
* Values start at 10 to avoid collisions with Unix signal numbers (1-9)
|
|
7
|
+
* and shell conventions (e.g. 2 = misuse of builtins, 9 = SIGKILL/OOM).
|
|
8
|
+
* Range 10-125 is safe — below shell-reserved 126-128 and signal-death
|
|
9
|
+
* codes 128+N.
|
|
10
|
+
*
|
|
11
|
+
* 0 and 1 are kept as universal success/failure codes.
|
|
5
12
|
*/
|
|
6
13
|
export enum ExitCode {
|
|
7
14
|
SUCCESS = 0,
|
|
8
15
|
GENERAL_ERROR = 1,
|
|
9
|
-
VALIDATION_ERROR =
|
|
10
|
-
AUTH_ERROR =
|
|
11
|
-
NOT_FOUND =
|
|
12
|
-
PERMISSION_ERROR =
|
|
13
|
-
NETWORK_ERROR =
|
|
14
|
-
FILE_ERROR =
|
|
15
|
-
USER_CANCELLED =
|
|
16
|
-
BUILD_FAILED =
|
|
17
|
-
SECURITY_ERROR =
|
|
16
|
+
VALIDATION_ERROR = 10,
|
|
17
|
+
AUTH_ERROR = 11,
|
|
18
|
+
NOT_FOUND = 12,
|
|
19
|
+
PERMISSION_ERROR = 13,
|
|
20
|
+
NETWORK_ERROR = 14,
|
|
21
|
+
FILE_ERROR = 15,
|
|
22
|
+
USER_CANCELLED = 16,
|
|
23
|
+
BUILD_FAILED = 17,
|
|
24
|
+
SECURITY_ERROR = 18,
|
|
25
|
+
PAYMENT_REQUIRED = 19,
|
|
26
|
+
UPGRADE_REQUIRED = 20,
|
|
18
27
|
}
|
|
19
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Human-readable descriptions for each exit code.
|
|
31
|
+
* This is the single source of truth consumed by the schema generator and AI help.
|
|
32
|
+
*/
|
|
33
|
+
export const exitCodeDescriptions: Record<number, string> = {
|
|
34
|
+
[ExitCode.SUCCESS]: 'Success',
|
|
35
|
+
[ExitCode.GENERAL_ERROR]: 'General error',
|
|
36
|
+
[ExitCode.VALIDATION_ERROR]: 'Validation error (invalid arguments or options)',
|
|
37
|
+
[ExitCode.AUTH_ERROR]: 'Authentication error (login required or credentials invalid)',
|
|
38
|
+
[ExitCode.NOT_FOUND]: 'Resource not found (project, file, deployment, etc.)',
|
|
39
|
+
[ExitCode.PERMISSION_ERROR]: 'Permission denied (insufficient access rights)',
|
|
40
|
+
[ExitCode.NETWORK_ERROR]: 'Network error (API unreachable or timeout)',
|
|
41
|
+
[ExitCode.FILE_ERROR]: 'File system error (file read/write failed)',
|
|
42
|
+
[ExitCode.USER_CANCELLED]: 'User cancelled (operation aborted by user)',
|
|
43
|
+
[ExitCode.BUILD_FAILED]: 'Build failed',
|
|
44
|
+
[ExitCode.SECURITY_ERROR]: 'Security error (malware detected)',
|
|
45
|
+
[ExitCode.PAYMENT_REQUIRED]: 'Payment required (plan upgrade needed)',
|
|
46
|
+
[ExitCode.UPGRADE_REQUIRED]: 'Upgrade required (CLI version too old)',
|
|
47
|
+
};
|
|
48
|
+
|
|
20
49
|
/**
|
|
21
50
|
* Standard error codes for the CLI
|
|
22
51
|
*/
|
|
@@ -152,7 +181,11 @@ export function getExitCode(errorCode: ErrorCode): ExitCode {
|
|
|
152
181
|
|
|
153
182
|
// Payment required - user needs to upgrade their plan
|
|
154
183
|
case ErrorCode.PAYMENT_REQUIRED:
|
|
155
|
-
return ExitCode.
|
|
184
|
+
return ExitCode.PAYMENT_REQUIRED;
|
|
185
|
+
|
|
186
|
+
// Upgrade required - CLI version too old
|
|
187
|
+
case ErrorCode.UPGRADE_REQUIRED:
|
|
188
|
+
return ExitCode.UPGRADE_REQUIRED;
|
|
156
189
|
|
|
157
190
|
// Resource conflicts and other errors
|
|
158
191
|
case ErrorCode.RESOURCE_ALREADY_EXISTS:
|
|
@@ -162,7 +195,6 @@ export function getExitCode(errorCode: ErrorCode): ExitCode {
|
|
|
162
195
|
case ErrorCode.RUNTIME_ERROR:
|
|
163
196
|
case ErrorCode.INTERNAL_ERROR:
|
|
164
197
|
case ErrorCode.NOT_IMPLEMENTED:
|
|
165
|
-
case ErrorCode.UPGRADE_REQUIRED:
|
|
166
198
|
default:
|
|
167
199
|
return ExitCode.GENERAL_ERROR;
|
|
168
200
|
}
|
package/src/schema-generator.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
2
|
import type { CommandDefinition, SubcommandDefinition, CommandSchemas } from './types';
|
|
3
|
+
import { exitCodeDescriptions } from './errors';
|
|
3
4
|
import { parseArgsSchema, parseOptionsSchema } from './schema-parser';
|
|
4
5
|
import * as z from 'zod';
|
|
5
6
|
|
|
@@ -313,18 +314,7 @@ export function generateCLISchema(
|
|
|
313
314
|
name: 'agentuity',
|
|
314
315
|
version,
|
|
315
316
|
description: 'Agentuity CLI',
|
|
316
|
-
exitCodes: {
|
|
317
|
-
0: 'Success',
|
|
318
|
-
1: 'General error',
|
|
319
|
-
2: 'Validation error (invalid arguments or options)',
|
|
320
|
-
3: 'Authentication error (login required or credentials invalid)',
|
|
321
|
-
4: 'Resource not found (project, file, deployment, etc.)',
|
|
322
|
-
5: 'Permission denied (insufficient access rights)',
|
|
323
|
-
6: 'Network error (API unreachable or timeout)',
|
|
324
|
-
7: 'File system error (file read/write failed)',
|
|
325
|
-
8: 'User cancelled (operation aborted by user)',
|
|
326
|
-
9: 'Build failed',
|
|
327
|
-
},
|
|
317
|
+
exitCodes: { ...exitCodeDescriptions },
|
|
328
318
|
globalOptions: [
|
|
329
319
|
{
|
|
330
320
|
name: 'config',
|
|
@@ -358,7 +348,7 @@ export function generateCLISchema(
|
|
|
358
348
|
name: 'org-id',
|
|
359
349
|
type: 'string',
|
|
360
350
|
required: false,
|
|
361
|
-
description: 'Use a specific organization when performing operations',
|
|
351
|
+
description: 'Use a specific organization when performing operations (alias: --org)',
|
|
362
352
|
},
|
|
363
353
|
{
|
|
364
354
|
name: 'color-scheme',
|
package/src/schema-parser.ts
CHANGED
|
@@ -454,6 +454,17 @@ export function buildValidationInput(
|
|
|
454
454
|
value = true;
|
|
455
455
|
}
|
|
456
456
|
|
|
457
|
+
// Handle --org alias for --org-id: if orgId is not set but org is, use that value
|
|
458
|
+
// Only treat --org as an --org-id alias if the schema does NOT declare a separate 'org' option
|
|
459
|
+
if (
|
|
460
|
+
(opt.name === 'orgId' || opt.name === 'org-id') &&
|
|
461
|
+
value === undefined &&
|
|
462
|
+
rawOptions.org !== undefined &&
|
|
463
|
+
!parsed.some((o) => o.name === 'org')
|
|
464
|
+
) {
|
|
465
|
+
value = rawOptions.org;
|
|
466
|
+
}
|
|
467
|
+
|
|
457
468
|
if (value !== undefined) {
|
|
458
469
|
result.options[opt.name] = value;
|
|
459
470
|
}
|
package/src/steps.ts
CHANGED
|
@@ -10,6 +10,7 @@ import type { LogLevel } from './types';
|
|
|
10
10
|
import { ValidationInputError, ValidationOutputError, type IssuesType } from '@agentuity/server';
|
|
11
11
|
import { clearLastLines, isTTYLike } from './tui';
|
|
12
12
|
import { appendLog, isLogCollectionEnabled } from './log-collector';
|
|
13
|
+
import { getOutputOptions, isJSONMode } from './output';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Error thrown when step execution is interrupted by a signal (e.g., Ctrl+C).
|
|
@@ -700,6 +701,43 @@ async function runStepsPlain(steps: Step[]): Promise<void> {
|
|
|
700
701
|
* Run a series of steps with animated progress
|
|
701
702
|
*/
|
|
702
703
|
export async function runSteps(steps: Step[], logLevel?: LogLevel): Promise<void> {
|
|
704
|
+
const outputOptions = getOutputOptions();
|
|
705
|
+
|
|
706
|
+
// In JSON mode, skip all UI rendering
|
|
707
|
+
if (outputOptions && isJSONMode(outputOptions)) {
|
|
708
|
+
const abortController = new AbortController();
|
|
709
|
+
for (const step of steps) {
|
|
710
|
+
if (abortController.signal.aborted) break;
|
|
711
|
+
if (step) {
|
|
712
|
+
const ctx: StepContext = {
|
|
713
|
+
signal: abortController.signal,
|
|
714
|
+
progress: () => {},
|
|
715
|
+
};
|
|
716
|
+
let outcome: StepOutcome;
|
|
717
|
+
try {
|
|
718
|
+
outcome = await step.run(ctx);
|
|
719
|
+
} catch (err) {
|
|
720
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
721
|
+
throw new StepInterruptError();
|
|
722
|
+
}
|
|
723
|
+
outcome = {
|
|
724
|
+
status: 'error',
|
|
725
|
+
message: err instanceof Error ? err.message : String(err),
|
|
726
|
+
cause: err instanceof Error ? err : undefined,
|
|
727
|
+
};
|
|
728
|
+
}
|
|
729
|
+
if (outcome.status === 'error') {
|
|
730
|
+
if (outcome.cause instanceof Error && outcome.cause.name === 'AbortError') {
|
|
731
|
+
throw new StepInterruptError();
|
|
732
|
+
}
|
|
733
|
+
const errorMsg = outcome.message || 'An unknown error occurred';
|
|
734
|
+
throw new Error(errorMsg);
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
return;
|
|
739
|
+
}
|
|
740
|
+
|
|
703
741
|
const useTUI = isTTYLike() && (!logLevel || ['info', 'warn', 'error'].includes(logLevel));
|
|
704
742
|
|
|
705
743
|
if (useTUI) {
|
package/src/tui.ts
CHANGED
|
@@ -25,6 +25,12 @@ function ensureCursorRestoration(): void {
|
|
|
25
25
|
exitHandlerInstalled = true;
|
|
26
26
|
|
|
27
27
|
const restoreCursor = () => {
|
|
28
|
+
// Only write ANSI escape sequences when stderr is a real terminal.
|
|
29
|
+
// Writing to non-TTY streams (pipes, command substitution, etc.)
|
|
30
|
+
// pollutes captured output with invisible control characters.
|
|
31
|
+
if (!process.stderr.isTTY) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
28
34
|
// Skip cursor restoration in CI - terminals don't support these sequences
|
|
29
35
|
if (process.env.CI) {
|
|
30
36
|
return;
|
|
@@ -293,8 +299,13 @@ export function getSeverityColor(severity: string): (text: string) => string {
|
|
|
293
299
|
export function success(message: string): void {
|
|
294
300
|
const color = getColor('success');
|
|
295
301
|
const reset = getColor('reset');
|
|
296
|
-
|
|
297
|
-
|
|
302
|
+
if (process.stderr.isTTY) {
|
|
303
|
+
// Clear line first to ensure no leftover content from previous output
|
|
304
|
+
process.stderr.write(`\r\x1b[2K${color}${ICONS.success} ${message}${reset}\n`);
|
|
305
|
+
} else {
|
|
306
|
+
// No ANSI control sequences for non-TTY streams (pipes, command substitution)
|
|
307
|
+
process.stderr.write(`${ICONS.success} ${message}\n`);
|
|
308
|
+
}
|
|
298
309
|
}
|
|
299
310
|
|
|
300
311
|
/**
|
|
@@ -1242,18 +1253,23 @@ export async function spinner<T>(
|
|
|
1242
1253
|
const { getOutputOptions, shouldDisableProgress } = await import('./output');
|
|
1243
1254
|
const outputOptions = getOutputOptions();
|
|
1244
1255
|
const noProgress = outputOptions ? shouldDisableProgress(outputOptions) : false;
|
|
1256
|
+
const isJsonMode = outputOptions?.json === true;
|
|
1245
1257
|
|
|
1246
|
-
// If
|
|
1247
|
-
// the callback without animation
|
|
1248
|
-
|
|
1258
|
+
// If stderr is not a real terminal or progress disabled, just execute
|
|
1259
|
+
// the callback without animation. We check stderr specifically because
|
|
1260
|
+
// the spinner writes ANSI sequences to stderr — isTTYLike() may return
|
|
1261
|
+
// true when stdout is a TTY but stderr is piped (e.g. 2>&1 in $()).
|
|
1262
|
+
if (!process.stderr.isTTY || noProgress) {
|
|
1249
1263
|
try {
|
|
1250
1264
|
const result =
|
|
1251
1265
|
options.type === 'progress'
|
|
1252
1266
|
? await options.callback(() => {})
|
|
1253
1267
|
: options.type === 'logger'
|
|
1254
1268
|
? await options.callback((logMessage: string) => {
|
|
1255
|
-
// In
|
|
1256
|
-
|
|
1269
|
+
// In JSON mode, don't write logs to stdout
|
|
1270
|
+
if (!isJsonMode) {
|
|
1271
|
+
process.stdout.write(logMessage + '\n');
|
|
1272
|
+
}
|
|
1257
1273
|
})
|
|
1258
1274
|
: options.type === 'countdown'
|
|
1259
1275
|
? await options.callback()
|
|
@@ -1263,7 +1279,6 @@ export async function spinner<T>(
|
|
|
1263
1279
|
|
|
1264
1280
|
// If clearOnSuccess is true, don't show success message
|
|
1265
1281
|
// Also skip success message in JSON mode
|
|
1266
|
-
const isJsonMode = outputOptions?.json === true;
|
|
1267
1282
|
if (!options.clearOnSuccess && !isJsonMode) {
|
|
1268
1283
|
const successColor = getColor('success');
|
|
1269
1284
|
console.error(`${successColor}${ICONS.success} ${message}${reset}`);
|
|
@@ -1273,7 +1288,7 @@ export async function spinner<T>(
|
|
|
1273
1288
|
} catch (err) {
|
|
1274
1289
|
const clearOnError =
|
|
1275
1290
|
(options.type === 'progress' || options.type === 'simple') && options.clearOnError;
|
|
1276
|
-
if (!clearOnError) {
|
|
1291
|
+
if (!clearOnError && !isJsonMode) {
|
|
1277
1292
|
const errorColor = getColor('error');
|
|
1278
1293
|
console.error(`${errorColor}${ICONS.error} ${message}${reset}`);
|
|
1279
1294
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { createWriteStream } from 'node:fs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Stream a ReadableStream of raw bytes to a file on disk.
|
|
5
|
+
*
|
|
6
|
+
* This mirrors the pattern used by the deploy fork wrapper to capture child
|
|
7
|
+
* process stdout/stderr without accumulating the output in memory. Returns
|
|
8
|
+
* the total number of bytes written.
|
|
9
|
+
*/
|
|
10
|
+
export async function captureStreamToFile(
|
|
11
|
+
stream: ReadableStream<Uint8Array>,
|
|
12
|
+
filePath: string
|
|
13
|
+
): Promise<number> {
|
|
14
|
+
const writer = createWriteStream(filePath);
|
|
15
|
+
const reader = stream.getReader();
|
|
16
|
+
let totalBytes = 0;
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
while (true) {
|
|
20
|
+
const { done, value } = await reader.read();
|
|
21
|
+
if (done) break;
|
|
22
|
+
|
|
23
|
+
const ok = writer.write(value);
|
|
24
|
+
totalBytes += value.byteLength;
|
|
25
|
+
|
|
26
|
+
// Respect backpressure: wait for drain when the internal buffer is full
|
|
27
|
+
if (!ok) {
|
|
28
|
+
await new Promise<void>((resolve) => writer.once('drain', resolve));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
} finally {
|
|
32
|
+
await new Promise<void>((resolve, reject) => {
|
|
33
|
+
writer.once('error', reject);
|
|
34
|
+
writer.end(resolve);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return totalBytes;
|
|
39
|
+
}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { writeAndDrain } from '@agentuity/server';
|
|
2
|
+
import type { Logger } from '@agentuity/core';
|
|
3
|
+
import * as tui from '../tui';
|
|
4
|
+
|
|
5
|
+
export interface StreamUrlOptions {
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
follow?: boolean;
|
|
8
|
+
timestamps?: boolean;
|
|
9
|
+
grep?: string;
|
|
10
|
+
tail?: number;
|
|
11
|
+
json?: boolean;
|
|
12
|
+
label?: string;
|
|
13
|
+
raw?: boolean;
|
|
14
|
+
v2?: boolean;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface StreamUrlResult {
|
|
18
|
+
bytesRead: number;
|
|
19
|
+
chunks: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class StreamFetchError extends Error {
|
|
23
|
+
constructor(
|
|
24
|
+
public status: number,
|
|
25
|
+
public statusText: string,
|
|
26
|
+
message: string
|
|
27
|
+
) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = 'StreamFetchError';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function escapeRegExp(str: string): string {
|
|
34
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export async function streamUrlToWritable(
|
|
38
|
+
url: string,
|
|
39
|
+
writable: NodeJS.WritableStream,
|
|
40
|
+
logger: Logger,
|
|
41
|
+
options: StreamUrlOptions = {}
|
|
42
|
+
): Promise<StreamUrlResult> {
|
|
43
|
+
const {
|
|
44
|
+
signal,
|
|
45
|
+
follow,
|
|
46
|
+
timestamps,
|
|
47
|
+
grep,
|
|
48
|
+
tail,
|
|
49
|
+
json,
|
|
50
|
+
label = 'stream',
|
|
51
|
+
raw = false,
|
|
52
|
+
v2 = false,
|
|
53
|
+
} = options;
|
|
54
|
+
const streamStart = Date.now();
|
|
55
|
+
let bytesRead = 0;
|
|
56
|
+
let chunks = 0;
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
const fetchUrl = new URL(url);
|
|
60
|
+
|
|
61
|
+
if (follow || v2) {
|
|
62
|
+
fetchUrl.searchParams.set('v', '2');
|
|
63
|
+
}
|
|
64
|
+
if (follow) {
|
|
65
|
+
fetchUrl.searchParams.set('follow', 'true');
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const redactedUrl =
|
|
69
|
+
fetchUrl.origin + fetchUrl.pathname + (fetchUrl.search ? '?REDACTED' : '');
|
|
70
|
+
logger.debug('[%s] fetching: %s', label, redactedUrl);
|
|
71
|
+
const response = await fetch(fetchUrl.href, { signal });
|
|
72
|
+
logger.debug(
|
|
73
|
+
'[%s] response status=%d in %dms',
|
|
74
|
+
label,
|
|
75
|
+
response.status,
|
|
76
|
+
Date.now() - streamStart
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
if (!response.ok || !response.body) {
|
|
80
|
+
logger.debug('[%s] not ok or no body', label);
|
|
81
|
+
if (!json) {
|
|
82
|
+
tui.error(`Failed to fetch stream: ${response.status} ${response.statusText}`);
|
|
83
|
+
}
|
|
84
|
+
throw new StreamFetchError(
|
|
85
|
+
response.status,
|
|
86
|
+
response.statusText,
|
|
87
|
+
`Failed to fetch stream: ${response.status} ${response.statusText}`
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const reader = response.body.getReader();
|
|
92
|
+
|
|
93
|
+
if (raw) {
|
|
94
|
+
while (true) {
|
|
95
|
+
const { done, value } = await reader.read();
|
|
96
|
+
if (done) {
|
|
97
|
+
logger.debug(
|
|
98
|
+
'[%s] EOF after %dms (%d chunks, %d bytes)',
|
|
99
|
+
label,
|
|
100
|
+
Date.now() - streamStart,
|
|
101
|
+
chunks,
|
|
102
|
+
bytesRead
|
|
103
|
+
);
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (value) {
|
|
108
|
+
chunks++;
|
|
109
|
+
bytesRead += value.length;
|
|
110
|
+
if (chunks <= 3 || chunks % 100 === 0) {
|
|
111
|
+
logger.debug(
|
|
112
|
+
'[%s] chunk #%d: %d bytes (total: %d bytes, +%dms)',
|
|
113
|
+
label,
|
|
114
|
+
chunks,
|
|
115
|
+
value.length,
|
|
116
|
+
bytesRead,
|
|
117
|
+
Date.now() - streamStart
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
await writeAndDrain(writable, value);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
} else {
|
|
124
|
+
const decoder = new TextDecoder();
|
|
125
|
+
let leftover = '';
|
|
126
|
+
const grepPattern = grep ? new RegExp(escapeRegExp(grep), 'i') : null;
|
|
127
|
+
const needsFiltering = tail !== undefined || grepPattern !== null;
|
|
128
|
+
const tailBuffer: string[] = [];
|
|
129
|
+
const maxTail = tail ?? Infinity;
|
|
130
|
+
const liveOutput = follow && needsFiltering;
|
|
131
|
+
|
|
132
|
+
const outputLine = async (line: string) => {
|
|
133
|
+
if (json) {
|
|
134
|
+
const obj = {
|
|
135
|
+
timestamp: new Date().toISOString(),
|
|
136
|
+
stream: label,
|
|
137
|
+
message: line,
|
|
138
|
+
};
|
|
139
|
+
await writeAndDrain(writable, Buffer.from(JSON.stringify(obj) + '\n'));
|
|
140
|
+
} else {
|
|
141
|
+
const formatted = timestamps ? formatLineWithTimestamp(line) : line;
|
|
142
|
+
await writeAndDrain(writable, Buffer.from(formatted + '\n'));
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const processFilteredLine = async (line: string) => {
|
|
147
|
+
if (grepPattern && !grepPattern.test(line)) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (tail !== undefined) {
|
|
151
|
+
tailBuffer.push(line);
|
|
152
|
+
if (tailBuffer.length > maxTail) {
|
|
153
|
+
tailBuffer.shift();
|
|
154
|
+
}
|
|
155
|
+
if (liveOutput) {
|
|
156
|
+
await outputLine(line);
|
|
157
|
+
}
|
|
158
|
+
} else {
|
|
159
|
+
await outputLine(line);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
while (true) {
|
|
164
|
+
const { done, value } = await reader.read();
|
|
165
|
+
if (done) {
|
|
166
|
+
if (leftover) {
|
|
167
|
+
if (needsFiltering) {
|
|
168
|
+
await processFilteredLine(leftover);
|
|
169
|
+
} else {
|
|
170
|
+
await outputLine(leftover);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
logger.debug(
|
|
174
|
+
'[%s] EOF after %dms (%d chunks, %d bytes)',
|
|
175
|
+
label,
|
|
176
|
+
Date.now() - streamStart,
|
|
177
|
+
chunks,
|
|
178
|
+
bytesRead
|
|
179
|
+
);
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if (value) {
|
|
184
|
+
chunks++;
|
|
185
|
+
bytesRead += value.length;
|
|
186
|
+
const text = leftover + decoder.decode(value, { stream: true });
|
|
187
|
+
const lines = text.split('\n');
|
|
188
|
+
leftover = lines.pop() ?? '';
|
|
189
|
+
|
|
190
|
+
for (const line of lines) {
|
|
191
|
+
if (needsFiltering) {
|
|
192
|
+
await processFilteredLine(line);
|
|
193
|
+
} else {
|
|
194
|
+
await outputLine(line);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (!liveOutput && needsFiltering && tailBuffer.length > 0) {
|
|
201
|
+
for (const line of tailBuffer) {
|
|
202
|
+
await outputLine(line);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return { bytesRead, chunks };
|
|
208
|
+
} catch (err) {
|
|
209
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
210
|
+
logger.debug('[%s] aborted after %dms', label, Date.now() - streamStart);
|
|
211
|
+
return { bytesRead, chunks };
|
|
212
|
+
}
|
|
213
|
+
logger.debug('[%s] error after %dms: %s', label, Date.now() - streamStart, err);
|
|
214
|
+
throw err;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function formatLineWithTimestamp(line: string): string {
|
|
219
|
+
const timestamp = new Date().toLocaleTimeString('en-US', {
|
|
220
|
+
hour12: false,
|
|
221
|
+
hour: '2-digit',
|
|
222
|
+
minute: '2-digit',
|
|
223
|
+
second: '2-digit',
|
|
224
|
+
});
|
|
225
|
+
return `${tui.muted(timestamp)} ${line}`;
|
|
226
|
+
}
|