@agentuity/cli 2.0.11 → 3.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cmd/ai/prompt/index.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/index.js +2 -7
- package/dist/cmd/ai/prompt/index.js.map +1 -1
- package/dist/cmd/build/adapters/generic.d.ts +29 -0
- package/dist/cmd/build/adapters/generic.d.ts.map +1 -0
- package/dist/cmd/build/adapters/generic.js +190 -0
- package/dist/cmd/build/adapters/generic.js.map +1 -0
- package/dist/cmd/build/adapters/index.d.ts +15 -0
- package/dist/cmd/build/adapters/index.d.ts.map +1 -0
- package/dist/cmd/build/adapters/index.js +24 -0
- package/dist/cmd/build/adapters/index.js.map +1 -0
- package/dist/cmd/build/adapters/nextjs.d.ts +11 -0
- package/dist/cmd/build/adapters/nextjs.d.ts.map +1 -0
- package/dist/cmd/build/adapters/nextjs.js +118 -0
- package/dist/cmd/build/adapters/nextjs.js.map +1 -0
- package/dist/cmd/build/adapters/static-server.d.ts +23 -0
- package/dist/cmd/build/adapters/static-server.d.ts.map +1 -0
- package/dist/cmd/build/adapters/static-server.js +137 -0
- package/dist/cmd/build/adapters/static-server.js.map +1 -0
- package/dist/cmd/build/adapters/types.d.ts +71 -0
- package/dist/cmd/build/adapters/types.d.ts.map +1 -0
- package/dist/cmd/build/adapters/types.js +8 -0
- package/dist/cmd/build/adapters/types.js.map +1 -0
- package/dist/cmd/build/detect/engine.d.ts +24 -0
- package/dist/cmd/build/detect/engine.d.ts.map +1 -0
- package/dist/cmd/build/detect/engine.js +91 -0
- package/dist/cmd/build/detect/engine.js.map +1 -0
- package/dist/cmd/build/detect/frameworks.d.ts +66 -0
- package/dist/cmd/build/detect/frameworks.d.ts.map +1 -0
- package/dist/cmd/build/detect/frameworks.js +278 -0
- package/dist/cmd/build/detect/frameworks.js.map +1 -0
- package/dist/cmd/build/detect/generic.d.ts +13 -0
- package/dist/cmd/build/detect/generic.d.ts.map +1 -0
- package/dist/cmd/build/detect/generic.js +62 -0
- package/dist/cmd/build/detect/generic.js.map +1 -0
- package/dist/cmd/build/detect/index.d.ts +27 -0
- package/dist/cmd/build/detect/index.d.ts.map +1 -0
- package/dist/cmd/build/detect/index.js +76 -0
- package/dist/cmd/build/detect/index.js.map +1 -0
- package/dist/cmd/build/detect/types.d.ts +91 -0
- package/dist/cmd/build/detect/types.d.ts.map +1 -0
- package/dist/cmd/build/detect/types.js +9 -0
- package/dist/cmd/build/detect/types.js.map +1 -0
- package/dist/cmd/build/detect/util.d.ts +41 -0
- package/dist/cmd/build/detect/util.d.ts.map +1 -0
- package/dist/cmd/build/detect/util.js +101 -0
- package/dist/cmd/build/detect/util.js.map +1 -0
- package/dist/cmd/build/index.d.ts.map +1 -1
- package/dist/cmd/build/index.js +49 -22
- package/dist/cmd/build/index.js.map +1 -1
- package/dist/cmd/build/package/index.d.ts +30 -0
- package/dist/cmd/build/package/index.d.ts.map +1 -0
- package/dist/cmd/build/package/index.js +39 -0
- package/dist/cmd/build/package/index.js.map +1 -0
- package/dist/cmd/build/package/launch.d.ts +56 -0
- package/dist/cmd/build/package/launch.d.ts.map +1 -0
- package/dist/cmd/build/package/launch.js +56 -0
- package/dist/cmd/build/package/launch.js.map +1 -0
- package/dist/cmd/build/typecheck.d.ts.map +1 -1
- package/dist/cmd/build/typecheck.js +8 -0
- package/dist/cmd/build/typecheck.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +63 -13
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/coder/create.js +7 -7
- package/dist/cmd/coder/create.js.map +1 -1
- package/dist/cmd/coder/update.js +8 -8
- package/dist/cmd/coder/update.js.map +1 -1
- package/dist/cmd/coder/workspace/create.js +9 -9
- package/dist/cmd/coder/workspace/create.js.map +1 -1
- package/dist/cmd/dev/index.d.ts +9 -0
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +127 -923
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/project/auth/shared.d.ts.map +1 -1
- package/dist/cmd/project/auth/shared.js +14 -38
- package/dist/cmd/project/auth/shared.js.map +1 -1
- package/dist/cmd/project/create.d.ts.map +1 -1
- package/dist/cmd/project/create.js +12 -19
- package/dist/cmd/project/create.js.map +1 -1
- package/dist/cmd/project/frameworks-ai-examples.d.ts +15 -0
- package/dist/cmd/project/frameworks-ai-examples.d.ts.map +1 -0
- package/dist/cmd/project/frameworks-ai-examples.js +160 -0
- package/dist/cmd/project/frameworks-ai-examples.js.map +1 -0
- package/dist/cmd/project/frameworks-landing-pages.d.ts +17 -0
- package/dist/cmd/project/frameworks-landing-pages.d.ts.map +1 -0
- package/dist/cmd/project/frameworks-landing-pages.js +242 -0
- package/dist/cmd/project/frameworks-landing-pages.js.map +1 -0
- package/dist/cmd/project/frameworks.d.ts +58 -0
- package/dist/cmd/project/frameworks.d.ts.map +1 -0
- package/dist/cmd/project/frameworks.js +152 -0
- package/dist/cmd/project/frameworks.js.map +1 -0
- package/dist/cmd/project/reconcile.d.ts.map +1 -1
- package/dist/cmd/project/reconcile.js +10 -23
- package/dist/cmd/project/reconcile.js.map +1 -1
- package/dist/cmd/project/remote-import.js +1 -1
- package/dist/cmd/project/scaffold.d.ts +58 -0
- package/dist/cmd/project/scaffold.d.ts.map +1 -0
- package/dist/cmd/project/scaffold.js +223 -0
- package/dist/cmd/project/scaffold.js.map +1 -0
- package/dist/cmd/project/template-flow.d.ts +8 -4
- package/dist/cmd/project/template-flow.d.ts.map +1 -1
- package/dist/cmd/project/template-flow.js +93 -144
- package/dist/cmd/project/template-flow.js.map +1 -1
- package/dist/deploy-metadata.d.ts +49 -0
- package/dist/deploy-metadata.d.ts.map +1 -0
- package/dist/deploy-metadata.js +183 -0
- package/dist/deploy-metadata.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +24 -30
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +13 -8
- package/src/cmd/ai/prompt/index.ts +2 -7
- package/src/cmd/build/adapters/generic.ts +239 -0
- package/src/cmd/build/adapters/index.ts +30 -0
- package/src/cmd/build/adapters/nextjs.ts +146 -0
- package/src/cmd/build/adapters/static-server.ts +143 -0
- package/src/cmd/build/adapters/types.ts +93 -0
- package/src/cmd/build/detect/engine.ts +111 -0
- package/src/cmd/build/detect/frameworks.ts +335 -0
- package/src/cmd/build/detect/generic.ts +71 -0
- package/src/cmd/build/detect/index.ts +122 -0
- package/src/cmd/build/detect/types.ts +109 -0
- package/src/cmd/build/detect/util.ts +104 -0
- package/src/cmd/build/index.ts +64 -24
- package/src/cmd/build/package/index.ts +66 -0
- package/src/cmd/build/package/launch.ts +104 -0
- package/src/cmd/build/typecheck.ts +9 -0
- package/src/cmd/cloud/deploy.ts +86 -13
- package/src/cmd/coder/create.ts +8 -8
- package/src/cmd/coder/update.ts +7 -7
- package/src/cmd/coder/workspace/create.ts +10 -10
- package/src/cmd/dev/index.ts +155 -1059
- package/src/cmd/project/auth/shared.ts +14 -39
- package/src/cmd/project/create.ts +14 -19
- package/src/cmd/project/frameworks-ai-examples.ts +166 -0
- package/src/cmd/project/frameworks-landing-pages.ts +267 -0
- package/src/cmd/project/frameworks.ts +223 -0
- package/src/cmd/project/reconcile.ts +10 -22
- package/src/cmd/project/remote-import.ts +1 -1
- package/src/cmd/project/scaffold.ts +300 -0
- package/src/cmd/project/template-flow.ts +102 -156
- package/src/deploy-metadata.ts +253 -0
- package/src/index.ts +0 -2
- package/src/types.ts +0 -31
- package/dist/agents-docs.d.ts +0 -23
- package/dist/agents-docs.d.ts.map +0 -1
- package/dist/agents-docs.js +0 -56
- package/dist/agents-docs.js.map +0 -1
- package/dist/cmd/ai/prompt/agent.d.ts +0 -10
- package/dist/cmd/ai/prompt/agent.d.ts.map +0 -1
- package/dist/cmd/ai/prompt/agent.js +0 -28
- package/dist/cmd/ai/prompt/agent.js.map +0 -1
- package/dist/cmd/build/app-router-detector.d.ts +0 -39
- package/dist/cmd/build/app-router-detector.d.ts.map +0 -1
- package/dist/cmd/build/app-router-detector.js +0 -229
- package/dist/cmd/build/app-router-detector.js.map +0 -1
- package/dist/cmd/build/format-schema.d.ts +0 -6
- package/dist/cmd/build/format-schema.d.ts.map +0 -1
- package/dist/cmd/build/format-schema.js +0 -60
- package/dist/cmd/build/format-schema.js.map +0 -1
- package/dist/cmd/build/vite/agent-discovery.d.ts +0 -37
- package/dist/cmd/build/vite/agent-discovery.d.ts.map +0 -1
- package/dist/cmd/build/vite/agent-discovery.js +0 -263
- package/dist/cmd/build/vite/agent-discovery.js.map +0 -1
- package/dist/cmd/build/vite/beacon-plugin.d.ts +0 -19
- package/dist/cmd/build/vite/beacon-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/beacon-plugin.js +0 -137
- package/dist/cmd/build/vite/beacon-plugin.js.map +0 -1
- package/dist/cmd/build/vite/browser-env-plugin.d.ts +0 -9
- package/dist/cmd/build/vite/browser-env-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/browser-env-plugin.js +0 -28
- package/dist/cmd/build/vite/browser-env-plugin.js.map +0 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts +0 -67
- package/dist/cmd/build/vite/bun-dev-server.d.ts.map +0 -1
- package/dist/cmd/build/vite/bun-dev-server.js +0 -340
- package/dist/cmd/build/vite/bun-dev-server.js.map +0 -1
- package/dist/cmd/build/vite/bundle-files.d.ts +0 -12
- package/dist/cmd/build/vite/bundle-files.d.ts.map +0 -1
- package/dist/cmd/build/vite/bundle-files.js +0 -107
- package/dist/cmd/build/vite/bundle-files.js.map +0 -1
- package/dist/cmd/build/vite/config-loader.d.ts +0 -29
- package/dist/cmd/build/vite/config-loader.d.ts.map +0 -1
- package/dist/cmd/build/vite/config-loader.js +0 -57
- package/dist/cmd/build/vite/config-loader.js.map +0 -1
- package/dist/cmd/build/vite/db-rewrite.d.ts +0 -50
- package/dist/cmd/build/vite/db-rewrite.d.ts.map +0 -1
- package/dist/cmd/build/vite/db-rewrite.js +0 -169
- package/dist/cmd/build/vite/db-rewrite.js.map +0 -1
- package/dist/cmd/build/vite/docs-generator.d.ts +0 -13
- package/dist/cmd/build/vite/docs-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/docs-generator.js +0 -97
- package/dist/cmd/build/vite/docs-generator.js.map +0 -1
- package/dist/cmd/build/vite/env-types-generator.d.ts +0 -26
- package/dist/cmd/build/vite/env-types-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/env-types-generator.js +0 -110
- package/dist/cmd/build/vite/env-types-generator.js.map +0 -1
- package/dist/cmd/build/vite/index.d.ts +0 -3
- package/dist/cmd/build/vite/index.d.ts.map +0 -1
- package/dist/cmd/build/vite/index.js +0 -4
- package/dist/cmd/build/vite/index.js.map +0 -1
- package/dist/cmd/build/vite/lifecycle-generator.d.ts +0 -19
- package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/lifecycle-generator.js +0 -328
- package/dist/cmd/build/vite/lifecycle-generator.js.map +0 -1
- package/dist/cmd/build/vite/metadata-generator.d.ts +0 -36
- package/dist/cmd/build/vite/metadata-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/metadata-generator.js +0 -575
- package/dist/cmd/build/vite/metadata-generator.js.map +0 -1
- package/dist/cmd/build/vite/prompt-generator.d.ts +0 -23
- package/dist/cmd/build/vite/prompt-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/prompt-generator.js +0 -123
- package/dist/cmd/build/vite/prompt-generator.js.map +0 -1
- package/dist/cmd/build/vite/public-asset-path-plugin.d.ts +0 -45
- package/dist/cmd/build/vite/public-asset-path-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/public-asset-path-plugin.js +0 -166
- package/dist/cmd/build/vite/public-asset-path-plugin.js.map +0 -1
- package/dist/cmd/build/vite/route-discovery.d.ts +0 -64
- package/dist/cmd/build/vite/route-discovery.d.ts.map +0 -1
- package/dist/cmd/build/vite/route-discovery.js +0 -187
- package/dist/cmd/build/vite/route-discovery.js.map +0 -1
- package/dist/cmd/build/vite/server-bundler.d.ts +0 -20
- package/dist/cmd/build/vite/server-bundler.d.ts.map +0 -1
- package/dist/cmd/build/vite/server-bundler.js +0 -388
- package/dist/cmd/build/vite/server-bundler.js.map +0 -1
- package/dist/cmd/build/vite/static-renderer.d.ts +0 -26
- package/dist/cmd/build/vite/static-renderer.d.ts.map +0 -1
- package/dist/cmd/build/vite/static-renderer.js +0 -188
- package/dist/cmd/build/vite/static-renderer.js.map +0 -1
- package/dist/cmd/build/vite/tailwind-source-plugin.d.ts +0 -15
- package/dist/cmd/build/vite/tailwind-source-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/tailwind-source-plugin.js +0 -61
- package/dist/cmd/build/vite/tailwind-source-plugin.js.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts +0 -24
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server-config.js +0 -285
- package/dist/cmd/build/vite/vite-asset-server-config.js.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server.d.ts +0 -30
- package/dist/cmd/build/vite/vite-asset-server.d.ts.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server.js +0 -109
- package/dist/cmd/build/vite/vite-asset-server.js.map +0 -1
- package/dist/cmd/build/vite/vite-builder.d.ts +0 -59
- package/dist/cmd/build/vite/vite-builder.d.ts.map +0 -1
- package/dist/cmd/build/vite/vite-builder.js +0 -401
- package/dist/cmd/build/vite/vite-builder.js.map +0 -1
- package/dist/cmd/build/vite/workbench-generator.d.ts +0 -10
- package/dist/cmd/build/vite/workbench-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/workbench-generator.js +0 -135
- package/dist/cmd/build/vite/workbench-generator.js.map +0 -1
- package/dist/cmd/build/vite/ws-proxy.d.ts +0 -53
- package/dist/cmd/build/vite/ws-proxy.d.ts.map +0 -1
- package/dist/cmd/build/vite/ws-proxy.js +0 -95
- package/dist/cmd/build/vite/ws-proxy.js.map +0 -1
- package/dist/cmd/build/vite-bundler.d.ts +0 -29
- package/dist/cmd/build/vite-bundler.d.ts.map +0 -1
- package/dist/cmd/build/vite-bundler.js +0 -93
- package/dist/cmd/build/vite-bundler.js.map +0 -1
- package/dist/cmd/dev/agents.d.ts +0 -2
- package/dist/cmd/dev/agents.d.ts.map +0 -1
- package/dist/cmd/dev/agents.js +0 -123
- package/dist/cmd/dev/agents.js.map +0 -1
- package/dist/cmd/dev/api.d.ts +0 -20
- package/dist/cmd/dev/api.d.ts.map +0 -1
- package/dist/cmd/dev/api.js +0 -42
- package/dist/cmd/dev/api.js.map +0 -1
- package/dist/cmd/dev/dev-lock.d.ts +0 -62
- package/dist/cmd/dev/dev-lock.d.ts.map +0 -1
- package/dist/cmd/dev/dev-lock.js +0 -250
- package/dist/cmd/dev/dev-lock.js.map +0 -1
- package/dist/cmd/dev/download.d.ts +0 -11
- package/dist/cmd/dev/download.d.ts.map +0 -1
- package/dist/cmd/dev/download.js +0 -94
- package/dist/cmd/dev/download.js.map +0 -1
- package/dist/cmd/dev/file-watcher.d.ts +0 -24
- package/dist/cmd/dev/file-watcher.d.ts.map +0 -1
- package/dist/cmd/dev/file-watcher.js +0 -349
- package/dist/cmd/dev/file-watcher.js.map +0 -1
- package/dist/cmd/dev/process-manager.d.ts +0 -104
- package/dist/cmd/dev/process-manager.d.ts.map +0 -1
- package/dist/cmd/dev/process-manager.js +0 -204
- package/dist/cmd/dev/process-manager.js.map +0 -1
- package/dist/cmd/dev/sync.d.ts +0 -12
- package/dist/cmd/dev/sync.d.ts.map +0 -1
- package/dist/cmd/dev/sync.js +0 -227
- package/dist/cmd/dev/sync.js.map +0 -1
- package/dist/cmd/dev/templates.d.ts +0 -3
- package/dist/cmd/dev/templates.d.ts.map +0 -1
- package/dist/cmd/dev/templates.js +0 -58
- package/dist/cmd/dev/templates.js.map +0 -1
- package/dist/cmd/project/download.d.ts +0 -35
- package/dist/cmd/project/download.d.ts.map +0 -1
- package/dist/cmd/project/download.js +0 -403
- package/dist/cmd/project/download.js.map +0 -1
- package/dist/cmd/project/templates.d.ts +0 -9
- package/dist/cmd/project/templates.d.ts.map +0 -1
- package/dist/cmd/project/templates.js +0 -34
- package/dist/cmd/project/templates.js.map +0 -1
- package/src/agents-docs.ts +0 -86
- package/src/cmd/ai/prompt/agent.md +0 -305
- package/src/cmd/ai/prompt/agent.ts +0 -31
- package/src/cmd/build/app-router-detector.ts +0 -320
- package/src/cmd/build/format-schema.ts +0 -66
- package/src/cmd/build/vite/agent-discovery.ts +0 -380
- package/src/cmd/build/vite/beacon-plugin.ts +0 -164
- package/src/cmd/build/vite/browser-env-plugin.ts +0 -34
- package/src/cmd/build/vite/bun-dev-server.ts +0 -458
- package/src/cmd/build/vite/bundle-files.ts +0 -135
- package/src/cmd/build/vite/config-loader.ts +0 -76
- package/src/cmd/build/vite/db-rewrite.ts +0 -189
- package/src/cmd/build/vite/docs-generator.ts +0 -103
- package/src/cmd/build/vite/env-types-generator.ts +0 -145
- package/src/cmd/build/vite/index.ts +0 -3
- package/src/cmd/build/vite/lifecycle-generator.ts +0 -381
- package/src/cmd/build/vite/metadata-generator.ts +0 -713
- package/src/cmd/build/vite/prompt-generator.ts +0 -169
- package/src/cmd/build/vite/public-asset-path-plugin.ts +0 -209
- package/src/cmd/build/vite/route-discovery.ts +0 -271
- package/src/cmd/build/vite/server-bundler.ts +0 -481
- package/src/cmd/build/vite/static-renderer.ts +0 -239
- package/src/cmd/build/vite/tailwind-source-plugin.ts +0 -73
- package/src/cmd/build/vite/vite-asset-server-config.ts +0 -349
- package/src/cmd/build/vite/vite-asset-server.ts +0 -154
- package/src/cmd/build/vite/vite-builder.ts +0 -503
- package/src/cmd/build/vite/workbench-generator.ts +0 -152
- package/src/cmd/build/vite/ws-proxy.ts +0 -126
- package/src/cmd/build/vite-bundler.ts +0 -137
- package/src/cmd/dev/agents.ts +0 -140
- package/src/cmd/dev/api.ts +0 -65
- package/src/cmd/dev/dev-lock.ts +0 -332
- package/src/cmd/dev/download.ts +0 -117
- package/src/cmd/dev/file-watcher.ts +0 -423
- package/src/cmd/dev/process-manager.ts +0 -261
- package/src/cmd/dev/sync.ts +0 -411
- package/src/cmd/dev/templates.ts +0 -66
- package/src/cmd/project/download.ts +0 -505
- package/src/cmd/project/templates.ts +0 -56
package/src/cmd/dev/dev-lock.ts
DELETED
|
@@ -1,332 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dev Lock Manager
|
|
3
|
-
*
|
|
4
|
-
* Manages a lockfile to track the dev server process and its children.
|
|
5
|
-
* On startup, detects and cleans up stale processes from previous sessions.
|
|
6
|
-
* Ensures proper cleanup on all exit paths.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { join, dirname } from 'node:path';
|
|
10
|
-
import { randomUUID } from 'node:crypto';
|
|
11
|
-
import { existsSync, unlinkSync } from 'node:fs';
|
|
12
|
-
import { promises as fs } from 'node:fs';
|
|
13
|
-
|
|
14
|
-
interface LoggerLike {
|
|
15
|
-
debug: (msg: string, ...args: unknown[]) => void;
|
|
16
|
-
warn: (msg: string, ...args: unknown[]) => void;
|
|
17
|
-
error: (msg: string, ...args: unknown[]) => void;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Lockfile format for tracking dev server processes
|
|
22
|
-
*/
|
|
23
|
-
export interface DevLockFileV1 {
|
|
24
|
-
version: 1;
|
|
25
|
-
projectRoot: string;
|
|
26
|
-
mainPid: number;
|
|
27
|
-
instanceId: string;
|
|
28
|
-
createdAt: string;
|
|
29
|
-
updatedAt: string;
|
|
30
|
-
ports: {
|
|
31
|
-
bun?: number;
|
|
32
|
-
vite?: number;
|
|
33
|
-
gravity?: number;
|
|
34
|
-
};
|
|
35
|
-
children: Array<{
|
|
36
|
-
pid: number;
|
|
37
|
-
type: 'gravity' | 'vite' | 'other';
|
|
38
|
-
description?: string;
|
|
39
|
-
}>;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface DevLockManager {
|
|
43
|
-
state: DevLockFileV1;
|
|
44
|
-
registerChild: (info: {
|
|
45
|
-
pid: number;
|
|
46
|
-
type: 'gravity' | 'vite' | 'other';
|
|
47
|
-
description?: string;
|
|
48
|
-
}) => Promise<void>;
|
|
49
|
-
updatePorts: (ports: Partial<DevLockFileV1['ports']>) => Promise<void>;
|
|
50
|
-
release: () => Promise<void>;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function getLockPath(rootDir: string): string {
|
|
54
|
-
return join(rootDir, '.agentuity', 'devserver.lock');
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Check if a process with the given PID exists
|
|
59
|
-
*/
|
|
60
|
-
function pidExists(pid: number): boolean {
|
|
61
|
-
if (!Number.isInteger(pid) || pid <= 0) return false;
|
|
62
|
-
try {
|
|
63
|
-
process.kill(pid, 0);
|
|
64
|
-
return true;
|
|
65
|
-
} catch (err: unknown) {
|
|
66
|
-
const error = err as NodeJS.ErrnoException;
|
|
67
|
-
if (error.code === 'ESRCH' || error.code === 'EINVAL') return false;
|
|
68
|
-
// EPERM means it exists but we can't signal it
|
|
69
|
-
return error.code === 'EPERM';
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Kill a process by PID with SIGTERM, then SIGKILL if still alive
|
|
75
|
-
*/
|
|
76
|
-
async function killPid(pid: number, logger: LoggerLike): Promise<void> {
|
|
77
|
-
if (!pidExists(pid)) return;
|
|
78
|
-
|
|
79
|
-
try {
|
|
80
|
-
process.kill(pid, 'SIGTERM');
|
|
81
|
-
logger.debug('Sent SIGTERM to pid %d', pid);
|
|
82
|
-
} catch (err: unknown) {
|
|
83
|
-
const error = err as NodeJS.ErrnoException;
|
|
84
|
-
if (error.code === 'ESRCH') return;
|
|
85
|
-
logger.debug('Error sending SIGTERM to pid %d: %s', pid, error.message);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Give it a moment to exit gracefully
|
|
89
|
-
await new Promise((r) => setTimeout(r, 500));
|
|
90
|
-
|
|
91
|
-
if (!pidExists(pid)) return;
|
|
92
|
-
|
|
93
|
-
// Force kill
|
|
94
|
-
try {
|
|
95
|
-
process.kill(pid, 'SIGKILL');
|
|
96
|
-
logger.debug('Sent SIGKILL to pid %d', pid);
|
|
97
|
-
} catch (err: unknown) {
|
|
98
|
-
const error = err as NodeJS.ErrnoException;
|
|
99
|
-
if (error.code !== 'ESRCH') {
|
|
100
|
-
logger.debug('Error sending SIGKILL to pid %d: %s', pid, error.message);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Wait for process to fully terminate
|
|
105
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Read an existing lockfile (if any)
|
|
110
|
-
*/
|
|
111
|
-
async function readLock(lockPath: string, logger: LoggerLike): Promise<DevLockFileV1 | null> {
|
|
112
|
-
if (!existsSync(lockPath)) return null;
|
|
113
|
-
try {
|
|
114
|
-
const raw = await fs.readFile(lockPath, 'utf8');
|
|
115
|
-
const parsed = JSON.parse(raw);
|
|
116
|
-
if (parsed && parsed.version === 1) return parsed as DevLockFileV1;
|
|
117
|
-
} catch (err) {
|
|
118
|
-
logger.warn('Failed to read/parse devserver.lock: %s', err);
|
|
119
|
-
}
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Remove lockfile if it exists
|
|
125
|
-
*/
|
|
126
|
-
async function removeLock(lockPath: string, logger: LoggerLike): Promise<void> {
|
|
127
|
-
try {
|
|
128
|
-
await fs.unlink(lockPath);
|
|
129
|
-
logger.debug('Removed devserver.lock');
|
|
130
|
-
} catch (err: unknown) {
|
|
131
|
-
const error = err as NodeJS.ErrnoException;
|
|
132
|
-
if (error.code !== 'ENOENT') {
|
|
133
|
-
logger.debug('Failed to remove devserver.lock: %s', error.message);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Check if a port is in use by attempting to connect to it.
|
|
140
|
-
* Uses GET instead of HEAD since some servers return 405 for HEAD requests.
|
|
141
|
-
* Any response (including errors like 404, 500) means the port is in use.
|
|
142
|
-
*/
|
|
143
|
-
async function isPortResponding(port: number): Promise<boolean> {
|
|
144
|
-
try {
|
|
145
|
-
const response = await fetch(`http://127.0.0.1:${port}/`, {
|
|
146
|
-
method: 'GET',
|
|
147
|
-
signal: AbortSignal.timeout(500),
|
|
148
|
-
});
|
|
149
|
-
// Consume body to avoid memory leaks
|
|
150
|
-
await response.text().catch(() => {});
|
|
151
|
-
return true;
|
|
152
|
-
} catch (err: unknown) {
|
|
153
|
-
// Connection refused (ECONNREFUSED) means nothing is listening
|
|
154
|
-
// Other errors (timeout, reset) might indicate a busy port
|
|
155
|
-
const error = err as Error & { cause?: { code?: string } };
|
|
156
|
-
const code = error.cause?.code;
|
|
157
|
-
if (code === 'ECONNREFUSED' || code === 'ECONNRESET') {
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
// For other errors (like timeout), assume port might be in use but unresponsive
|
|
161
|
-
return false;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Kill processes referenced by a stale lock, then remove the lock
|
|
167
|
-
*/
|
|
168
|
-
async function cleanupStaleLock(
|
|
169
|
-
rootDir: string,
|
|
170
|
-
lock: DevLockFileV1,
|
|
171
|
-
logger: LoggerLike
|
|
172
|
-
): Promise<void> {
|
|
173
|
-
const lockPath = getLockPath(rootDir);
|
|
174
|
-
logger.debug(
|
|
175
|
-
'Cleaning up stale devserver.lock (pid=%d, instance=%s)',
|
|
176
|
-
lock.mainPid,
|
|
177
|
-
lock.instanceId
|
|
178
|
-
);
|
|
179
|
-
|
|
180
|
-
// Collect all PIDs to kill (children first, then main)
|
|
181
|
-
const childPids: number[] = [];
|
|
182
|
-
for (const child of lock.children ?? []) {
|
|
183
|
-
if (child.pid && child.pid !== lock.mainPid && child.pid !== process.pid) {
|
|
184
|
-
childPids.push(child.pid);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// Kill children first
|
|
189
|
-
for (const pid of childPids) {
|
|
190
|
-
await killPid(pid, logger);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
// Kill main process if it's not us
|
|
194
|
-
if (lock.mainPid !== process.pid) {
|
|
195
|
-
await killPid(lock.mainPid, logger);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// Remove the stale lockfile
|
|
199
|
-
await removeLock(lockPath, logger);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Ensure there is no conflicting dev server for this project
|
|
204
|
-
* Always cleans up any existing lock and kills associated processes
|
|
205
|
-
*/
|
|
206
|
-
async function ensureNoActiveDevForProject(
|
|
207
|
-
rootDir: string,
|
|
208
|
-
_port: number,
|
|
209
|
-
logger: LoggerLike
|
|
210
|
-
): Promise<void> {
|
|
211
|
-
const lockPath = getLockPath(rootDir);
|
|
212
|
-
const existing = await readLock(lockPath, logger);
|
|
213
|
-
if (!existing) return;
|
|
214
|
-
|
|
215
|
-
const now = Date.now();
|
|
216
|
-
const createdAt = Date.parse(existing.createdAt || '');
|
|
217
|
-
const ageMs = Number.isFinite(createdAt) ? now - createdAt : Infinity;
|
|
218
|
-
|
|
219
|
-
const mainAlive = pidExists(existing.mainPid);
|
|
220
|
-
|
|
221
|
-
// Check if the recorded Bun port is still responding
|
|
222
|
-
let bunPortInUse = false;
|
|
223
|
-
if (existing.ports?.bun) {
|
|
224
|
-
bunPortInUse = await isPortResponding(existing.ports.bun);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
logger.debug(
|
|
228
|
-
'Found existing lock (pid=%d, mainAlive=%s, bunPortInUse=%s, age=%dms) - cleaning up',
|
|
229
|
-
existing.mainPid,
|
|
230
|
-
mainAlive,
|
|
231
|
-
bunPortInUse,
|
|
232
|
-
ageMs
|
|
233
|
-
);
|
|
234
|
-
|
|
235
|
-
await cleanupStaleLock(rootDir, existing, logger);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Initialize a new lock for the current dev run
|
|
240
|
-
* This should be called after ensureNoActiveDevForProject has possibly cleaned stale state
|
|
241
|
-
*/
|
|
242
|
-
async function initDevLock(
|
|
243
|
-
rootDir: string,
|
|
244
|
-
port: number,
|
|
245
|
-
logger: LoggerLike
|
|
246
|
-
): Promise<DevLockManager> {
|
|
247
|
-
const lockPath = getLockPath(rootDir);
|
|
248
|
-
await fs.mkdir(dirname(lockPath), { recursive: true });
|
|
249
|
-
|
|
250
|
-
const state: DevLockFileV1 = {
|
|
251
|
-
version: 1,
|
|
252
|
-
projectRoot: rootDir,
|
|
253
|
-
mainPid: process.pid,
|
|
254
|
-
instanceId: randomUUID(),
|
|
255
|
-
createdAt: new Date().toISOString(),
|
|
256
|
-
updatedAt: new Date().toISOString(),
|
|
257
|
-
ports: { bun: port },
|
|
258
|
-
children: [],
|
|
259
|
-
};
|
|
260
|
-
|
|
261
|
-
const writeLock = async () => {
|
|
262
|
-
state.updatedAt = new Date().toISOString();
|
|
263
|
-
await fs.writeFile(lockPath, JSON.stringify(state, null, 2), { encoding: 'utf8' });
|
|
264
|
-
};
|
|
265
|
-
|
|
266
|
-
await writeLock();
|
|
267
|
-
logger.debug('Created devserver.lock (pid=%d, instance=%s)', state.mainPid, state.instanceId);
|
|
268
|
-
|
|
269
|
-
const manager: DevLockManager = {
|
|
270
|
-
state,
|
|
271
|
-
|
|
272
|
-
async registerChild(child) {
|
|
273
|
-
if (!child.pid) return;
|
|
274
|
-
// Avoid duplicates
|
|
275
|
-
if (state.children.some((c) => c.pid === child.pid)) return;
|
|
276
|
-
state.children.push(child);
|
|
277
|
-
await writeLock();
|
|
278
|
-
logger.debug('Registered child process (pid=%d, type=%s)', child.pid, child.type);
|
|
279
|
-
},
|
|
280
|
-
|
|
281
|
-
async updatePorts(ports) {
|
|
282
|
-
state.ports = { ...state.ports, ...ports };
|
|
283
|
-
await writeLock();
|
|
284
|
-
},
|
|
285
|
-
|
|
286
|
-
async release() {
|
|
287
|
-
await removeLock(lockPath, logger);
|
|
288
|
-
},
|
|
289
|
-
};
|
|
290
|
-
|
|
291
|
-
return manager;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
/**
|
|
295
|
-
* Main entry point for dev lock management
|
|
296
|
-
* Call this early in the dev command to:
|
|
297
|
-
* 1. Clean up any stale processes from previous sessions
|
|
298
|
-
* 2. Create a new lockfile for this session
|
|
299
|
-
*/
|
|
300
|
-
export async function prepareDevLock(
|
|
301
|
-
rootDir: string,
|
|
302
|
-
port: number,
|
|
303
|
-
logger: LoggerLike
|
|
304
|
-
): Promise<DevLockManager> {
|
|
305
|
-
await ensureNoActiveDevForProject(rootDir, port, logger);
|
|
306
|
-
return initDevLock(rootDir, port, logger);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Utility to kill all processes in a lockfile by path
|
|
311
|
-
* Useful for emergency cleanup without creating a new lock
|
|
312
|
-
*/
|
|
313
|
-
export async function cleanupLockfile(rootDir: string, logger: LoggerLike): Promise<void> {
|
|
314
|
-
const lockPath = getLockPath(rootDir);
|
|
315
|
-
const existing = await readLock(lockPath, logger);
|
|
316
|
-
if (existing) {
|
|
317
|
-
await cleanupStaleLock(rootDir, existing, logger);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Synchronous lockfile removal for use in process.on('exit') handlers
|
|
323
|
-
* Does not kill processes - just removes the file
|
|
324
|
-
*/
|
|
325
|
-
export function releaseLockSync(rootDir: string): void {
|
|
326
|
-
const lockPath = getLockPath(rootDir);
|
|
327
|
-
try {
|
|
328
|
-
unlinkSync(lockPath);
|
|
329
|
-
} catch {
|
|
330
|
-
// Ignore errors - file may already be gone
|
|
331
|
-
}
|
|
332
|
-
}
|
package/src/cmd/dev/download.ts
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { mkdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
|
-
import { tmpdir, platform } from 'node:os';
|
|
4
|
-
import { join, dirname } from 'node:path';
|
|
5
|
-
import * as tar from 'tar';
|
|
6
|
-
import { StructuredError } from '@agentuity/core';
|
|
7
|
-
import { spinner } from '../../tui';
|
|
8
|
-
|
|
9
|
-
interface GravityClient {
|
|
10
|
-
filename: string;
|
|
11
|
-
version: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const GravityVersionError = StructuredError('GravityVersionError')<{
|
|
15
|
-
status: number;
|
|
16
|
-
statusText: string;
|
|
17
|
-
}>();
|
|
18
|
-
const GravityDownloadError = StructuredError('GravityDownloadError')<{
|
|
19
|
-
status: number;
|
|
20
|
-
statusText: string;
|
|
21
|
-
}>();
|
|
22
|
-
const GravityExtractionError = StructuredError('GravityExtractionError')<{
|
|
23
|
-
path: string;
|
|
24
|
-
}>();
|
|
25
|
-
|
|
26
|
-
function getBaseURL(): string {
|
|
27
|
-
return process.env.AGENTUITY_SH_URL || 'https://agentuity.sh';
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
*
|
|
32
|
-
* @returns full path to the downloaded file
|
|
33
|
-
*/
|
|
34
|
-
export async function download(gravityDir: string): Promise<GravityClient> {
|
|
35
|
-
const baseURL = getBaseURL();
|
|
36
|
-
|
|
37
|
-
// Step 1: Get the latest version from agentuity.sh
|
|
38
|
-
const tag = (await spinner({
|
|
39
|
-
message: 'Checking Agentuity Gravity',
|
|
40
|
-
callback: async () => {
|
|
41
|
-
const resp = await fetch(`${baseURL}/release/gravity/version`, {
|
|
42
|
-
signal: AbortSignal.timeout(10_000),
|
|
43
|
-
});
|
|
44
|
-
if (!resp.ok) {
|
|
45
|
-
throw new GravityVersionError({
|
|
46
|
-
status: resp.status,
|
|
47
|
-
statusText: resp.statusText,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
const text = (await resp.text()).trim();
|
|
51
|
-
return text.startsWith('v') ? text : `v${text}`;
|
|
52
|
-
},
|
|
53
|
-
clearOnSuccess: true,
|
|
54
|
-
})) as string;
|
|
55
|
-
|
|
56
|
-
const version = tag.startsWith('v') ? tag.slice(1) : tag;
|
|
57
|
-
const releaseFilename = join(gravityDir, version, 'gravity');
|
|
58
|
-
|
|
59
|
-
// Step 2: Check if already downloaded
|
|
60
|
-
if (await Bun.file(releaseFilename).exists()) {
|
|
61
|
-
return { filename: releaseFilename, version };
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Step 3: Download the binary from agentuity.sh
|
|
65
|
-
const os = platform();
|
|
66
|
-
let arch: string = process.arch;
|
|
67
|
-
if (arch === 'x64') {
|
|
68
|
-
arch = 'x86_64';
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const tmpFile = join(tmpdir(), `${randomUUID()}.tar.gz`);
|
|
72
|
-
|
|
73
|
-
try {
|
|
74
|
-
await spinner({
|
|
75
|
-
message: `Downloading Gravity ${version}`,
|
|
76
|
-
callback: async () => {
|
|
77
|
-
const resp = await fetch(`${baseURL}/release/gravity/${tag}/${os}/${arch}`, {
|
|
78
|
-
signal: AbortSignal.timeout(60_000),
|
|
79
|
-
});
|
|
80
|
-
if (!resp.ok) {
|
|
81
|
-
throw new GravityDownloadError({
|
|
82
|
-
status: resp.status,
|
|
83
|
-
statusText: resp.statusText,
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
const buffer = await resp.arrayBuffer();
|
|
87
|
-
writeFileSync(tmpFile, Buffer.from(buffer));
|
|
88
|
-
},
|
|
89
|
-
clearOnSuccess: true,
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
// Step 4: Extract the tarball
|
|
93
|
-
await spinner({
|
|
94
|
-
message: 'Extracting release',
|
|
95
|
-
callback: async () => {
|
|
96
|
-
const downloadDir = dirname(releaseFilename);
|
|
97
|
-
if (!(await Bun.file(downloadDir).exists())) {
|
|
98
|
-
mkdirSync(downloadDir, { recursive: true });
|
|
99
|
-
}
|
|
100
|
-
await tar.x({ file: tmpFile, cwd: downloadDir, chmod: true });
|
|
101
|
-
},
|
|
102
|
-
clearOnSuccess: true,
|
|
103
|
-
});
|
|
104
|
-
} finally {
|
|
105
|
-
// Clean up temp file regardless of success or failure
|
|
106
|
-
if (await Bun.file(tmpFile).exists()) {
|
|
107
|
-
rmSync(tmpFile);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// Step 5: Verify the binary was extracted
|
|
112
|
-
if (!(await Bun.file(releaseFilename).exists())) {
|
|
113
|
-
throw new GravityExtractionError({ path: releaseFilename });
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return { filename: releaseFilename, version };
|
|
117
|
-
}
|