@agentuity/cli 0.0.51 → 0.0.53
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/api.js +68 -0
- package/dist/api.js.map +1 -0
- package/dist/auth.js +225 -0
- package/dist/auth.js.map +1 -0
- package/dist/banner.js +35 -0
- package/dist/banner.js.map +1 -0
- package/dist/cli-logger.js +72 -0
- package/dist/cli-logger.js.map +1 -0
- package/dist/cli.js +822 -0
- package/dist/cli.js.map +1 -0
- package/dist/cmd/ai/capabilities/index.js +10 -0
- package/dist/cmd/ai/capabilities/index.js.map +1 -0
- package/dist/cmd/ai/capabilities/show.js +221 -0
- package/dist/cmd/ai/capabilities/show.js.map +1 -0
- package/dist/cmd/ai/index.js +11 -0
- package/dist/cmd/ai/index.js.map +1 -0
- package/dist/cmd/ai/prompt/index.js +10 -0
- package/dist/cmd/ai/prompt/index.js.map +1 -0
- package/dist/cmd/ai/prompt/llm.js +365 -0
- package/dist/cmd/ai/prompt/llm.js.map +1 -0
- package/dist/cmd/ai/schema/index.js +10 -0
- package/dist/cmd/ai/schema/index.js.map +1 -0
- package/dist/cmd/ai/schema/show.js +23 -0
- package/dist/cmd/ai/schema/show.js.map +1 -0
- package/dist/cmd/auth/api.js +85 -0
- package/dist/cmd/auth/api.js.map +1 -0
- package/dist/cmd/auth/index.js +13 -0
- package/dist/cmd/auth/index.js.map +1 -0
- package/dist/cmd/auth/login.js +84 -0
- package/dist/cmd/auth/login.js.map +1 -0
- package/dist/cmd/auth/logout.js +17 -0
- package/dist/cmd/auth/logout.js.map +1 -0
- package/dist/cmd/auth/signup.js +55 -0
- package/dist/cmd/auth/signup.js.map +1 -0
- package/dist/cmd/auth/ssh/add.js +239 -0
- package/dist/cmd/auth/ssh/add.js.map +1 -0
- package/dist/cmd/auth/ssh/api.js +53 -0
- package/dist/cmd/auth/ssh/api.js.map +1 -0
- package/dist/cmd/auth/ssh/delete.js +126 -0
- package/dist/cmd/auth/ssh/delete.js.map +1 -0
- package/dist/cmd/auth/ssh/index.js +11 -0
- package/dist/cmd/auth/ssh/index.js.map +1 -0
- package/dist/cmd/auth/ssh/list.js +70 -0
- package/dist/cmd/auth/ssh/list.js.map +1 -0
- package/dist/cmd/auth/whoami.js +68 -0
- package/dist/cmd/auth/whoami.js.map +1 -0
- package/dist/cmd/build/ast.js +608 -0
- package/dist/cmd/build/ast.js.map +1 -0
- package/dist/cmd/build/ast.test.js +389 -0
- package/dist/cmd/build/ast.test.js.map +1 -0
- package/dist/cmd/build/bundler.js +304 -0
- package/dist/cmd/build/bundler.js.map +1 -0
- package/dist/cmd/build/file.js +10 -0
- package/dist/cmd/build/file.js.map +1 -0
- package/dist/cmd/build/fix-duplicate-exports.js +167 -0
- package/dist/cmd/build/fix-duplicate-exports.js.map +1 -0
- package/dist/cmd/build/fix-duplicate-exports.test.js +300 -0
- package/dist/cmd/build/fix-duplicate-exports.test.js.map +1 -0
- package/dist/cmd/build/index.d.ts.map +1 -1
- package/dist/cmd/build/index.js +81 -0
- package/dist/cmd/build/index.js.map +1 -0
- package/dist/cmd/build/patch/_util.js +42 -0
- package/dist/cmd/build/patch/_util.js.map +1 -0
- package/dist/cmd/build/patch/aisdk.js +65 -0
- package/dist/cmd/build/patch/aisdk.js.map +1 -0
- package/dist/cmd/build/patch/index.js +97 -0
- package/dist/cmd/build/patch/index.js.map +1 -0
- package/dist/cmd/build/patch/llm.js +18 -0
- package/dist/cmd/build/patch/llm.js.map +1 -0
- package/dist/cmd/build/plugin.d.ts.map +1 -1
- package/dist/cmd/build/plugin.js +581 -0
- package/dist/cmd/build/plugin.js.map +1 -0
- package/dist/cmd/cloud/agents/index.js +133 -0
- package/dist/cmd/cloud/agents/index.js.map +1 -0
- package/dist/cmd/cloud/deploy.js +341 -0
- package/dist/cmd/cloud/deploy.js.map +1 -0
- package/dist/cmd/cloud/deployment/index.js +20 -0
- package/dist/cmd/cloud/deployment/index.js.map +1 -0
- package/dist/cmd/cloud/deployment/list.js +89 -0
- package/dist/cmd/cloud/deployment/list.js.map +1 -0
- package/dist/cmd/cloud/deployment/remove.js +60 -0
- package/dist/cmd/cloud/deployment/remove.js.map +1 -0
- package/dist/cmd/cloud/deployment/rollback.js +80 -0
- package/dist/cmd/cloud/deployment/rollback.js.map +1 -0
- package/dist/cmd/cloud/deployment/show.js +106 -0
- package/dist/cmd/cloud/deployment/show.js.map +1 -0
- package/dist/cmd/cloud/deployment/undeploy.js +45 -0
- package/dist/cmd/cloud/deployment/undeploy.js.map +1 -0
- package/dist/cmd/cloud/deployment/utils.js +10 -0
- package/dist/cmd/cloud/deployment/utils.js.map +1 -0
- package/dist/cmd/cloud/domain.js +77 -0
- package/dist/cmd/cloud/domain.js.map +1 -0
- package/dist/cmd/cloud/env/delete.js +50 -0
- package/dist/cmd/cloud/env/delete.js.map +1 -0
- package/dist/cmd/cloud/env/get.js +65 -0
- package/dist/cmd/cloud/env/get.js.map +1 -0
- package/dist/cmd/cloud/env/import.js +113 -0
- package/dist/cmd/cloud/env/import.js.map +1 -0
- package/dist/cmd/cloud/env/index.js +24 -0
- package/dist/cmd/cloud/env/index.js.map +1 -0
- package/dist/cmd/cloud/env/list.js +58 -0
- package/dist/cmd/cloud/env/list.js.map +1 -0
- package/dist/cmd/cloud/env/pull.js +81 -0
- package/dist/cmd/cloud/env/pull.js.map +1 -0
- package/dist/cmd/cloud/env/push.js +61 -0
- package/dist/cmd/cloud/env/push.js.map +1 -0
- package/dist/cmd/cloud/env/set.js +73 -0
- package/dist/cmd/cloud/env/set.js.map +1 -0
- package/dist/cmd/cloud/index.js +31 -0
- package/dist/cmd/cloud/index.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/create-namespace.js +41 -0
- package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/delete-namespace.js +64 -0
- package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/delete.js +47 -0
- package/dist/cmd/cloud/keyvalue/delete.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/get.js +65 -0
- package/dist/cmd/cloud/keyvalue/get.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/index.js +32 -0
- package/dist/cmd/cloud/keyvalue/index.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/keys.js +50 -0
- package/dist/cmd/cloud/keyvalue/keys.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/list-namespaces.js +37 -0
- package/dist/cmd/cloud/keyvalue/list-namespaces.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/repl.js +277 -0
- package/dist/cmd/cloud/keyvalue/repl.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/search.js +72 -0
- package/dist/cmd/cloud/keyvalue/search.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/set.js +59 -0
- package/dist/cmd/cloud/keyvalue/set.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/stats.js +82 -0
- package/dist/cmd/cloud/keyvalue/stats.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/util.js +19 -0
- package/dist/cmd/cloud/keyvalue/util.js.map +1 -0
- package/dist/cmd/cloud/objectstore/delete-bucket.js +66 -0
- package/dist/cmd/cloud/objectstore/delete-bucket.js.map +1 -0
- package/dist/cmd/cloud/objectstore/delete.js +56 -0
- package/dist/cmd/cloud/objectstore/delete.js.map +1 -0
- package/dist/cmd/cloud/objectstore/get.js +64 -0
- package/dist/cmd/cloud/objectstore/get.js.map +1 -0
- package/dist/cmd/cloud/objectstore/index.js +28 -0
- package/dist/cmd/cloud/objectstore/index.js.map +1 -0
- package/dist/cmd/cloud/objectstore/list-buckets.js +37 -0
- package/dist/cmd/cloud/objectstore/list-buckets.js.map +1 -0
- package/dist/cmd/cloud/objectstore/list-keys.js +52 -0
- package/dist/cmd/cloud/objectstore/list-keys.js.map +1 -0
- package/dist/cmd/cloud/objectstore/put.js +57 -0
- package/dist/cmd/cloud/objectstore/put.js.map +1 -0
- package/dist/cmd/cloud/objectstore/repl.js +219 -0
- package/dist/cmd/cloud/objectstore/repl.js.map +1 -0
- package/dist/cmd/cloud/objectstore/url.js +55 -0
- package/dist/cmd/cloud/objectstore/url.js.map +1 -0
- package/dist/cmd/cloud/objectstore/util.js +18 -0
- package/dist/cmd/cloud/objectstore/util.js.map +1 -0
- package/dist/cmd/cloud/resource/add.js +70 -0
- package/dist/cmd/cloud/resource/add.js.map +1 -0
- package/dist/cmd/cloud/resource/delete.js +126 -0
- package/dist/cmd/cloud/resource/delete.js.map +1 -0
- package/dist/cmd/cloud/resource/index.js +12 -0
- package/dist/cmd/cloud/resource/index.js.map +1 -0
- package/dist/cmd/cloud/resource/list.js +89 -0
- package/dist/cmd/cloud/resource/list.js.map +1 -0
- package/dist/cmd/cloud/scp/download.js +72 -0
- package/dist/cmd/cloud/scp/download.js.map +1 -0
- package/dist/cmd/cloud/scp/index.js +10 -0
- package/dist/cmd/cloud/scp/index.js.map +1 -0
- package/dist/cmd/cloud/scp/upload.js +75 -0
- package/dist/cmd/cloud/scp/upload.js.map +1 -0
- package/dist/cmd/cloud/secret/delete.js +50 -0
- package/dist/cmd/cloud/secret/delete.js.map +1 -0
- package/dist/cmd/cloud/secret/get.js +69 -0
- package/dist/cmd/cloud/secret/get.js.map +1 -0
- package/dist/cmd/cloud/secret/import.js +88 -0
- package/dist/cmd/cloud/secret/import.js.map +1 -0
- package/dist/cmd/cloud/secret/index.js +24 -0
- package/dist/cmd/cloud/secret/index.js.map +1 -0
- package/dist/cmd/cloud/secret/list.js +58 -0
- package/dist/cmd/cloud/secret/list.js.map +1 -0
- package/dist/cmd/cloud/secret/pull.js +81 -0
- package/dist/cmd/cloud/secret/pull.js.map +1 -0
- package/dist/cmd/cloud/secret/push.js +61 -0
- package/dist/cmd/cloud/secret/push.js.map +1 -0
- package/dist/cmd/cloud/secret/set.js +57 -0
- package/dist/cmd/cloud/secret/set.js.map +1 -0
- package/dist/cmd/cloud/session/get.d.ts.map +1 -1
- package/dist/cmd/cloud/session/get.js +155 -0
- package/dist/cmd/cloud/session/get.js.map +1 -0
- package/dist/cmd/cloud/session/index.js +11 -0
- package/dist/cmd/cloud/session/index.js.map +1 -0
- package/dist/cmd/cloud/session/list.js +132 -0
- package/dist/cmd/cloud/session/list.js.map +1 -0
- package/dist/cmd/cloud/session/logs.js +56 -0
- package/dist/cmd/cloud/session/logs.js.map +1 -0
- package/dist/cmd/cloud/ssh.js +67 -0
- package/dist/cmd/cloud/ssh.js.map +1 -0
- package/dist/cmd/dev/agents.js +103 -0
- package/dist/cmd/dev/agents.js.map +1 -0
- package/dist/cmd/dev/api.js +26 -0
- package/dist/cmd/dev/api.js.map +1 -0
- package/dist/cmd/dev/download.js +77 -0
- package/dist/cmd/dev/download.js.map +1 -0
- package/dist/cmd/dev/index.js +745 -0
- package/dist/cmd/dev/index.js.map +1 -0
- package/dist/cmd/dev/sync.js +229 -0
- package/dist/cmd/dev/sync.js.map +1 -0
- package/dist/cmd/dev/templates.js +75 -0
- package/dist/cmd/dev/templates.js.map +1 -0
- package/dist/cmd/index.js +49 -0
- package/dist/cmd/index.js.map +1 -0
- package/dist/cmd/profile/create.js +89 -0
- package/dist/cmd/profile/create.js.map +1 -0
- package/dist/cmd/profile/delete.js +63 -0
- package/dist/cmd/profile/delete.js.map +1 -0
- package/dist/cmd/profile/index.js +14 -0
- package/dist/cmd/profile/index.js.map +1 -0
- package/dist/cmd/profile/list.js +28 -0
- package/dist/cmd/profile/list.js.map +1 -0
- package/dist/cmd/profile/show.js +68 -0
- package/dist/cmd/profile/show.js.map +1 -0
- package/dist/cmd/profile/use.js +37 -0
- package/dist/cmd/profile/use.js.map +1 -0
- package/dist/cmd/project/create.js +92 -0
- package/dist/cmd/project/create.js.map +1 -0
- package/dist/cmd/project/delete.js +117 -0
- package/dist/cmd/project/delete.js.map +1 -0
- package/dist/cmd/project/download.js +217 -0
- package/dist/cmd/project/download.js.map +1 -0
- package/dist/cmd/project/index.js +12 -0
- package/dist/cmd/project/index.js.map +1 -0
- package/dist/cmd/project/list.js +51 -0
- package/dist/cmd/project/list.js.map +1 -0
- package/dist/cmd/project/show.js +54 -0
- package/dist/cmd/project/show.js.map +1 -0
- package/dist/cmd/project/template-flow.js +315 -0
- package/dist/cmd/project/template-flow.js.map +1 -0
- package/dist/cmd/project/templates.js +31 -0
- package/dist/cmd/project/templates.js.map +1 -0
- package/dist/cmd/repl/index.js +444 -0
- package/dist/cmd/repl/index.js.map +1 -0
- package/dist/cmd/version/index.js +29 -0
- package/dist/cmd/version/index.js.map +1 -0
- package/dist/command-prefix.js +37 -0
- package/dist/command-prefix.js.map +1 -0
- package/dist/config.js +536 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto/box.js +382 -0
- package/dist/crypto/box.js.map +1 -0
- package/dist/crypto/box.test.js +317 -0
- package/dist/crypto/box.test.js.map +1 -0
- package/dist/download.js +64 -0
- package/dist/download.js.map +1 -0
- package/dist/env-util.js +219 -0
- package/dist/env-util.js.map +1 -0
- package/dist/env-util.test.js +146 -0
- package/dist/env-util.test.js.map +1 -0
- package/dist/errors.js +177 -0
- package/dist/errors.js.map +1 -0
- package/dist/explain.js +90 -0
- package/dist/explain.js.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/json.js +29 -0
- package/dist/json.js.map +1 -0
- package/dist/legacy-check.js +104 -0
- package/dist/legacy-check.js.map +1 -0
- package/dist/output.js +207 -0
- package/dist/output.js.map +1 -0
- package/dist/repl.js +1176 -0
- package/dist/repl.js.map +1 -0
- package/dist/runtime.js +19 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema-generator.js +289 -0
- package/dist/schema-generator.js.map +1 -0
- package/dist/schema-parser.js +145 -0
- package/dist/schema-parser.js.map +1 -0
- package/dist/sound.js +44 -0
- package/dist/sound.js.map +1 -0
- package/dist/steps.js +293 -0
- package/dist/steps.js.map +1 -0
- package/dist/terminal.js +130 -0
- package/dist/terminal.js.map +1 -0
- package/dist/tui.js +1124 -0
- package/dist/tui.js.map +1 -0
- package/dist/types.js +163 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/detectSubagent.js +25 -0
- package/dist/utils/detectSubagent.js.map +1 -0
- package/dist/utils/format.js +21 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/zip.js +33 -0
- package/dist/utils/zip.js.map +1 -0
- package/dist/version.js +24 -0
- package/dist/version.js.map +1 -0
- package/package.json +6 -6
- package/src/banner.ts +1 -1
- package/src/cmd/build/index.ts +18 -22
- package/src/cmd/build/plugin.ts +95 -64
- package/src/cmd/cloud/session/get.ts +20 -14
- package/src/cmd/cloud/session/list.ts +1 -1
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { describe, test, expect } from 'bun:test';
|
|
2
|
+
import { looksLikeSecret } from './env-util';
|
|
3
|
+
describe('looksLikeSecret', () => {
|
|
4
|
+
describe('key name patterns', () => {
|
|
5
|
+
test('detects _SECRET suffix', () => {
|
|
6
|
+
expect(looksLikeSecret('API_SECRET', 'value')).toBe(true);
|
|
7
|
+
expect(looksLikeSecret('DB_SECRET', 'value')).toBe(true);
|
|
8
|
+
});
|
|
9
|
+
test('detects _KEY suffix', () => {
|
|
10
|
+
expect(looksLikeSecret('API_KEY', 'value')).toBe(true);
|
|
11
|
+
expect(looksLikeSecret('STRIPE_KEY', 'value')).toBe(true);
|
|
12
|
+
});
|
|
13
|
+
test('detects _TOKEN suffix', () => {
|
|
14
|
+
expect(looksLikeSecret('AUTH_TOKEN', 'value')).toBe(true);
|
|
15
|
+
expect(looksLikeSecret('GITHUB_TOKEN', 'value')).toBe(true);
|
|
16
|
+
});
|
|
17
|
+
test('detects _PASSWORD suffix', () => {
|
|
18
|
+
expect(looksLikeSecret('DB_PASSWORD', 'value')).toBe(true);
|
|
19
|
+
expect(looksLikeSecret('ADMIN_PASSWORD', 'value')).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
test('detects _PRIVATE suffix', () => {
|
|
22
|
+
expect(looksLikeSecret('SSH_PRIVATE', 'value')).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
test('detects _CERT and _CERTIFICATE suffixes', () => {
|
|
25
|
+
expect(looksLikeSecret('SSL_CERT', 'value')).toBe(true);
|
|
26
|
+
expect(looksLikeSecret('SSL_CERTIFICATE', 'value')).toBe(true);
|
|
27
|
+
});
|
|
28
|
+
test('detects SECRET_ prefix', () => {
|
|
29
|
+
expect(looksLikeSecret('SECRET_VALUE', 'value')).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
test('detects APIKEY and API_KEY patterns', () => {
|
|
32
|
+
expect(looksLikeSecret('APIKEY', 'value')).toBe(true);
|
|
33
|
+
expect(looksLikeSecret('API_KEY', 'value')).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
test('detects JWT prefix', () => {
|
|
36
|
+
expect(looksLikeSecret('JWT_SECRET', 'value')).toBe(true);
|
|
37
|
+
expect(looksLikeSecret('JWT', 'value')).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
test('detects PASSWORD in key name', () => {
|
|
40
|
+
expect(looksLikeSecret('DATABASE_PASSWORD', 'value')).toBe(true);
|
|
41
|
+
expect(looksLikeSecret('PASSWORD', 'value')).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
test('detects CREDENTIAL in key name', () => {
|
|
44
|
+
expect(looksLikeSecret('AWS_CREDENTIALS', 'value')).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
test('detects AUTH.*KEY pattern', () => {
|
|
47
|
+
expect(looksLikeSecret('AUTH_API_KEY', 'value')).toBe(true);
|
|
48
|
+
expect(looksLikeSecret('AUTHKEY', 'value')).toBe(true);
|
|
49
|
+
});
|
|
50
|
+
test('is case insensitive for key patterns', () => {
|
|
51
|
+
expect(looksLikeSecret('api_secret', 'value')).toBe(true);
|
|
52
|
+
expect(looksLikeSecret('Api_Key', 'value')).toBe(true);
|
|
53
|
+
expect(looksLikeSecret('AUTH_token', 'value')).toBe(true);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe('value patterns', () => {
|
|
57
|
+
test('detects JWT tokens', () => {
|
|
58
|
+
const jwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
|
|
59
|
+
expect(looksLikeSecret('TOKEN', jwt)).toBe(true);
|
|
60
|
+
expect(looksLikeSecret('SOME_VAR', jwt)).toBe(true);
|
|
61
|
+
});
|
|
62
|
+
test('detects Bearer tokens', () => {
|
|
63
|
+
expect(looksLikeSecret('AUTH', 'Bearer abc123def456ghi789jkl012mno345pqr')).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
test('detects AWS access keys', () => {
|
|
66
|
+
expect(looksLikeSecret('AWS', 'AKIAIOSFODNN7EXAMPLE')).toBe(true);
|
|
67
|
+
expect(looksLikeSecret('AWS', 'ASIAIOSFODNN7EXAMPLE')).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
test('detects GitHub tokens', () => {
|
|
70
|
+
expect(looksLikeSecret('GH', 'ghp_1234567890abcdefghijklmnopqrstuvwxyz')).toBe(true);
|
|
71
|
+
expect(looksLikeSecret('GH', 'ghs_1234567890abcdefghijklmnopqrstuvwxyz')).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
test('detects long alphanumeric strings (API keys)', () => {
|
|
74
|
+
// 32+ characters, mixed alphanumeric
|
|
75
|
+
expect(looksLikeSecret('KEY', 'sk_test_51A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4Y5Z6')).toBe(true);
|
|
76
|
+
expect(looksLikeSecret('KEY', 'abc123def456ghi789jkl012mno345pqr678stu901vwx234yz')).toBe(true);
|
|
77
|
+
});
|
|
78
|
+
test('does not flag numeric-only long strings', () => {
|
|
79
|
+
expect(looksLikeSecret('ID', '12345678901234567890123456789012')).toBe(false);
|
|
80
|
+
});
|
|
81
|
+
test('detects PEM certificates', () => {
|
|
82
|
+
expect(looksLikeSecret('CERT', '-----BEGIN CERTIFICATE-----\nMIIC...')).toBe(true);
|
|
83
|
+
expect(looksLikeSecret('CERT', '-----BEGIN PRIVATE KEY-----\nMIIC...')).toBe(true);
|
|
84
|
+
expect(looksLikeSecret('CERT', '-----BEGIN RSA PRIVATE KEY-----\nMIIC...')).toBe(true);
|
|
85
|
+
});
|
|
86
|
+
test('does not flag short values', () => {
|
|
87
|
+
expect(looksLikeSecret('VAR', 'short')).toBe(false);
|
|
88
|
+
expect(looksLikeSecret('VAR', '1234567')).toBe(false);
|
|
89
|
+
});
|
|
90
|
+
test('does not flag empty values', () => {
|
|
91
|
+
expect(looksLikeSecret('VAR', '')).toBe(false);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('non-secret patterns', () => {
|
|
95
|
+
test('regular environment variables are not flagged', () => {
|
|
96
|
+
expect(looksLikeSecret('NODE_ENV', 'production')).toBe(false);
|
|
97
|
+
expect(looksLikeSecret('PORT', '3500')).toBe(false);
|
|
98
|
+
expect(looksLikeSecret('HOST', 'localhost')).toBe(false);
|
|
99
|
+
expect(looksLikeSecret('DATABASE_URL', 'postgres://localhost:5432/mydb')).toBe(false);
|
|
100
|
+
});
|
|
101
|
+
test('configuration values are not flagged', () => {
|
|
102
|
+
expect(looksLikeSecret('LOG_LEVEL', 'debug')).toBe(false);
|
|
103
|
+
expect(looksLikeSecret('CACHE_TTL', '3600')).toBe(false);
|
|
104
|
+
expect(looksLikeSecret('MAX_CONNECTIONS', '100')).toBe(false);
|
|
105
|
+
});
|
|
106
|
+
test('URLs without secrets are not flagged', () => {
|
|
107
|
+
expect(looksLikeSecret('API_URL', 'https://api.example.com')).toBe(false);
|
|
108
|
+
expect(looksLikeSecret('WEBHOOK_URL', 'https://example.com/webhook')).toBe(false);
|
|
109
|
+
});
|
|
110
|
+
test('paths are not flagged', () => {
|
|
111
|
+
expect(looksLikeSecret('DATA_PATH', '/var/data/app')).toBe(false);
|
|
112
|
+
expect(looksLikeSecret('CONFIG_FILE', '/etc/app/config.json')).toBe(false);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('edge cases', () => {
|
|
116
|
+
test('handles mixed key and value patterns', () => {
|
|
117
|
+
// Key pattern triggers detection
|
|
118
|
+
expect(looksLikeSecret('API_KEY', 'simple')).toBe(true);
|
|
119
|
+
// Value pattern triggers detection even without key pattern
|
|
120
|
+
const jwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
|
|
121
|
+
expect(looksLikeSecret('CONFIG', jwt)).toBe(true);
|
|
122
|
+
});
|
|
123
|
+
test('real-world API key formats', () => {
|
|
124
|
+
// Stripe (contains underscore, 32+ chars)
|
|
125
|
+
expect(looksLikeSecret('STRIPE', 'sk_test_51HqL7xAbCdEfGhIjK12345678901234567890')).toBe(true);
|
|
126
|
+
// Long API key format (32+ alphanumeric)
|
|
127
|
+
expect(looksLikeSecret('OPENAI', 'sk-proj-1234567890abcdefghijklmnopqrstuvwxyz')).toBe(true);
|
|
128
|
+
// Contains dots (periods not in our pattern, but key name helps)
|
|
129
|
+
expect(looksLikeSecret('SENDGRID_API_KEY', 'SG.1234567890abcdefghijklmnopqrstuvwxyz.1234567890abcdefghijklmnopqrstuvwxyz')).toBe(true);
|
|
130
|
+
});
|
|
131
|
+
test('UUIDs are correctly identified as non-secrets', () => {
|
|
132
|
+
// Standard UUID format should not be flagged
|
|
133
|
+
expect(looksLikeSecret('REQUEST_ID', '550e8400-e29b-41d4-a716-446655440000')).toBe(false);
|
|
134
|
+
expect(looksLikeSecret('USER_ID', '123e4567-e89b-12d3-a456-426614174000')).toBe(false);
|
|
135
|
+
});
|
|
136
|
+
test('hex hashes are flagged (better safe than sorry)', () => {
|
|
137
|
+
// 32+ character hex strings could be secrets or hashes - we flag them
|
|
138
|
+
// Users can confirm they're just hashes if needed
|
|
139
|
+
expect(looksLikeSecret('BUILD_HASH', 'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6')).toBe(true);
|
|
140
|
+
// But with context that clearly indicates it's not a secret, the key name won't trigger
|
|
141
|
+
// So short hex strings without secret-like key names won't be flagged
|
|
142
|
+
expect(looksLikeSecret('COMMIT', 'abc123def')).toBe(false);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
//# sourceMappingURL=env-util.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-util.test.js","sourceRoot":"","sources":["../src/env-util.test.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard exit codes for the CLI
|
|
3
|
+
*/
|
|
4
|
+
export var ExitCode;
|
|
5
|
+
(function (ExitCode) {
|
|
6
|
+
ExitCode[ExitCode["SUCCESS"] = 0] = "SUCCESS";
|
|
7
|
+
ExitCode[ExitCode["GENERAL_ERROR"] = 1] = "GENERAL_ERROR";
|
|
8
|
+
ExitCode[ExitCode["VALIDATION_ERROR"] = 2] = "VALIDATION_ERROR";
|
|
9
|
+
ExitCode[ExitCode["AUTH_ERROR"] = 3] = "AUTH_ERROR";
|
|
10
|
+
ExitCode[ExitCode["NOT_FOUND"] = 4] = "NOT_FOUND";
|
|
11
|
+
ExitCode[ExitCode["PERMISSION_ERROR"] = 5] = "PERMISSION_ERROR";
|
|
12
|
+
ExitCode[ExitCode["NETWORK_ERROR"] = 6] = "NETWORK_ERROR";
|
|
13
|
+
ExitCode[ExitCode["FILE_ERROR"] = 7] = "FILE_ERROR";
|
|
14
|
+
ExitCode[ExitCode["USER_CANCELLED"] = 8] = "USER_CANCELLED";
|
|
15
|
+
})(ExitCode || (ExitCode = {}));
|
|
16
|
+
/**
|
|
17
|
+
* Standard error codes for the CLI
|
|
18
|
+
*/
|
|
19
|
+
export var ErrorCode;
|
|
20
|
+
(function (ErrorCode) {
|
|
21
|
+
// Validation errors
|
|
22
|
+
ErrorCode["VALIDATION_FAILED"] = "VALIDATION_FAILED";
|
|
23
|
+
ErrorCode["MISSING_ARGUMENT"] = "MISSING_ARGUMENT";
|
|
24
|
+
ErrorCode["INVALID_ARGUMENT"] = "INVALID_ARGUMENT";
|
|
25
|
+
ErrorCode["INVALID_OPTION"] = "INVALID_OPTION";
|
|
26
|
+
ErrorCode["UNKNOWN_COMMAND"] = "UNKNOWN_COMMAND";
|
|
27
|
+
// Authentication errors
|
|
28
|
+
ErrorCode["AUTH_REQUIRED"] = "AUTH_REQUIRED";
|
|
29
|
+
ErrorCode["AUTH_FAILED"] = "AUTH_FAILED";
|
|
30
|
+
ErrorCode["AUTH_EXPIRED"] = "AUTH_EXPIRED";
|
|
31
|
+
ErrorCode["PERMISSION_DENIED"] = "PERMISSION_DENIED";
|
|
32
|
+
// Project/Configuration errors
|
|
33
|
+
ErrorCode["PROJECT_NOT_FOUND"] = "PROJECT_NOT_FOUND";
|
|
34
|
+
ErrorCode["PROJECT_INVALID"] = "PROJECT_INVALID";
|
|
35
|
+
ErrorCode["CONFIG_NOT_FOUND"] = "CONFIG_NOT_FOUND";
|
|
36
|
+
ErrorCode["CONFIG_INVALID"] = "CONFIG_INVALID";
|
|
37
|
+
// Resource errors
|
|
38
|
+
ErrorCode["RESOURCE_NOT_FOUND"] = "RESOURCE_NOT_FOUND";
|
|
39
|
+
ErrorCode["RESOURCE_ALREADY_EXISTS"] = "RESOURCE_ALREADY_EXISTS";
|
|
40
|
+
ErrorCode["RESOURCE_CONFLICT"] = "RESOURCE_CONFLICT";
|
|
41
|
+
// Organization/Region errors
|
|
42
|
+
ErrorCode["ORG_REQUIRED"] = "ORG_REQUIRED";
|
|
43
|
+
ErrorCode["ORG_NOT_FOUND"] = "ORG_NOT_FOUND";
|
|
44
|
+
ErrorCode["REGION_REQUIRED"] = "REGION_REQUIRED";
|
|
45
|
+
ErrorCode["REGION_NOT_FOUND"] = "REGION_NOT_FOUND";
|
|
46
|
+
ErrorCode["NO_REGIONS_AVAILABLE"] = "NO_REGIONS_AVAILABLE";
|
|
47
|
+
// Network/API errors
|
|
48
|
+
ErrorCode["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
49
|
+
ErrorCode["API_ERROR"] = "API_ERROR";
|
|
50
|
+
ErrorCode["TIMEOUT"] = "TIMEOUT";
|
|
51
|
+
// File system errors
|
|
52
|
+
ErrorCode["FILE_NOT_FOUND"] = "FILE_NOT_FOUND";
|
|
53
|
+
ErrorCode["FILE_READ_ERROR"] = "FILE_READ_ERROR";
|
|
54
|
+
ErrorCode["FILE_WRITE_ERROR"] = "FILE_WRITE_ERROR";
|
|
55
|
+
ErrorCode["DIRECTORY_NOT_FOUND"] = "DIRECTORY_NOT_FOUND";
|
|
56
|
+
// Runtime errors
|
|
57
|
+
ErrorCode["RUNTIME_ERROR"] = "RUNTIME_ERROR";
|
|
58
|
+
ErrorCode["INTERNAL_ERROR"] = "INTERNAL_ERROR";
|
|
59
|
+
ErrorCode["NOT_IMPLEMENTED"] = "NOT_IMPLEMENTED";
|
|
60
|
+
// User cancellation
|
|
61
|
+
ErrorCode["USER_CANCELLED"] = "USER_CANCELLED";
|
|
62
|
+
})(ErrorCode || (ErrorCode = {}));
|
|
63
|
+
/**
|
|
64
|
+
* Map error codes to exit codes
|
|
65
|
+
*/
|
|
66
|
+
export function getExitCode(errorCode) {
|
|
67
|
+
switch (errorCode) {
|
|
68
|
+
// Validation errors
|
|
69
|
+
case ErrorCode.VALIDATION_FAILED:
|
|
70
|
+
case ErrorCode.MISSING_ARGUMENT:
|
|
71
|
+
case ErrorCode.INVALID_ARGUMENT:
|
|
72
|
+
case ErrorCode.INVALID_OPTION:
|
|
73
|
+
case ErrorCode.UNKNOWN_COMMAND:
|
|
74
|
+
case ErrorCode.PROJECT_INVALID:
|
|
75
|
+
case ErrorCode.CONFIG_INVALID:
|
|
76
|
+
return ExitCode.VALIDATION_ERROR;
|
|
77
|
+
// Authentication errors
|
|
78
|
+
case ErrorCode.AUTH_REQUIRED:
|
|
79
|
+
case ErrorCode.AUTH_FAILED:
|
|
80
|
+
case ErrorCode.AUTH_EXPIRED:
|
|
81
|
+
return ExitCode.AUTH_ERROR;
|
|
82
|
+
// Permission errors
|
|
83
|
+
case ErrorCode.PERMISSION_DENIED:
|
|
84
|
+
return ExitCode.PERMISSION_ERROR;
|
|
85
|
+
// Not found errors
|
|
86
|
+
case ErrorCode.PROJECT_NOT_FOUND:
|
|
87
|
+
case ErrorCode.CONFIG_NOT_FOUND:
|
|
88
|
+
case ErrorCode.RESOURCE_NOT_FOUND:
|
|
89
|
+
case ErrorCode.ORG_NOT_FOUND:
|
|
90
|
+
case ErrorCode.REGION_NOT_FOUND:
|
|
91
|
+
case ErrorCode.FILE_NOT_FOUND:
|
|
92
|
+
case ErrorCode.DIRECTORY_NOT_FOUND:
|
|
93
|
+
case ErrorCode.NO_REGIONS_AVAILABLE:
|
|
94
|
+
return ExitCode.NOT_FOUND;
|
|
95
|
+
// Network/API errors
|
|
96
|
+
case ErrorCode.NETWORK_ERROR:
|
|
97
|
+
case ErrorCode.API_ERROR:
|
|
98
|
+
case ErrorCode.TIMEOUT:
|
|
99
|
+
return ExitCode.NETWORK_ERROR;
|
|
100
|
+
// File system errors
|
|
101
|
+
case ErrorCode.FILE_READ_ERROR:
|
|
102
|
+
case ErrorCode.FILE_WRITE_ERROR:
|
|
103
|
+
return ExitCode.FILE_ERROR;
|
|
104
|
+
// User cancellation
|
|
105
|
+
case ErrorCode.USER_CANCELLED:
|
|
106
|
+
return ExitCode.USER_CANCELLED;
|
|
107
|
+
// Resource conflicts and other errors
|
|
108
|
+
case ErrorCode.RESOURCE_ALREADY_EXISTS:
|
|
109
|
+
case ErrorCode.RESOURCE_CONFLICT:
|
|
110
|
+
case ErrorCode.ORG_REQUIRED:
|
|
111
|
+
case ErrorCode.REGION_REQUIRED:
|
|
112
|
+
case ErrorCode.RUNTIME_ERROR:
|
|
113
|
+
case ErrorCode.INTERNAL_ERROR:
|
|
114
|
+
case ErrorCode.NOT_IMPLEMENTED:
|
|
115
|
+
default:
|
|
116
|
+
return ExitCode.GENERAL_ERROR;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Format error in JSON structure
|
|
121
|
+
*/
|
|
122
|
+
export function formatErrorJSON(error) {
|
|
123
|
+
const exitCode = error.exitCode ?? getExitCode(error.code);
|
|
124
|
+
const output = {
|
|
125
|
+
error: {
|
|
126
|
+
code: error.code,
|
|
127
|
+
message: error.message,
|
|
128
|
+
exitCode,
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
if (error.details) {
|
|
132
|
+
output.error.details = error.details;
|
|
133
|
+
}
|
|
134
|
+
if (error.suggestions && error.suggestions.length > 0) {
|
|
135
|
+
output.error.suggestions = error.suggestions;
|
|
136
|
+
}
|
|
137
|
+
return JSON.stringify(output, null, 2);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Format error for human-readable output
|
|
141
|
+
*/
|
|
142
|
+
export function formatErrorHuman(error) {
|
|
143
|
+
let output = `error: ${error.message}`;
|
|
144
|
+
if (error.details && Object.keys(error.details).length > 0) {
|
|
145
|
+
output += '\n\nDetails:';
|
|
146
|
+
for (const [key, value] of Object.entries(error.details)) {
|
|
147
|
+
output += `\n ${key}: ${JSON.stringify(value)}`;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (error.suggestions && error.suggestions.length > 0) {
|
|
151
|
+
output += '\n\nSuggestions:';
|
|
152
|
+
for (const suggestion of error.suggestions) {
|
|
153
|
+
output += `\n - ${suggestion}`;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return output;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Exit the process with a structured error
|
|
160
|
+
*/
|
|
161
|
+
export function exitWithError(error, logger, errorFormat = 'text') {
|
|
162
|
+
if (errorFormat === 'json') {
|
|
163
|
+
console.error(formatErrorJSON(error));
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
console.error(formatErrorHuman(error));
|
|
167
|
+
}
|
|
168
|
+
const exitCode = error.exitCode ?? getExitCode(error.code);
|
|
169
|
+
process.exit(exitCode);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Create a structured error from a simple message and code
|
|
173
|
+
*/
|
|
174
|
+
export function createError(code, message, details, suggestions) {
|
|
175
|
+
return { code, message, details, suggestions };
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/explain.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as tui from './tui';
|
|
2
|
+
/**
|
|
3
|
+
* Utilities for explain mode and dry-run mode
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Check if explain mode is enabled
|
|
7
|
+
*/
|
|
8
|
+
export function isExplainMode(options) {
|
|
9
|
+
return options.explain === true;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Check if dry-run mode is enabled
|
|
13
|
+
*/
|
|
14
|
+
export function isDryRunMode(options) {
|
|
15
|
+
return options.dryRun === true;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Check if the command should execute (not explain, not dry-run unless specifically handling dry-run)
|
|
19
|
+
*/
|
|
20
|
+
export function shouldExecute(options) {
|
|
21
|
+
return !options.explain && !options.dryRun;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Output an explanation plan
|
|
25
|
+
*/
|
|
26
|
+
export function outputExplain(plan, options) {
|
|
27
|
+
if (options.json) {
|
|
28
|
+
console.log(JSON.stringify({ explain: plan }, null, 2));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Human-readable output
|
|
32
|
+
console.log(tui.bold('Command Explanation:'));
|
|
33
|
+
console.log(` ${plan.command}`);
|
|
34
|
+
tui.newline();
|
|
35
|
+
if (plan.description) {
|
|
36
|
+
console.log(tui.bold('Description:'));
|
|
37
|
+
console.log(` ${plan.description}`);
|
|
38
|
+
tui.newline();
|
|
39
|
+
}
|
|
40
|
+
if (plan.prerequisites && plan.prerequisites.length > 0) {
|
|
41
|
+
console.log(tui.bold('Prerequisites:'));
|
|
42
|
+
for (const prereq of plan.prerequisites) {
|
|
43
|
+
console.log(` ${tui.bullet} ${prereq}`);
|
|
44
|
+
}
|
|
45
|
+
tui.newline();
|
|
46
|
+
}
|
|
47
|
+
console.log(tui.bold('This command will:'));
|
|
48
|
+
for (const step of plan.steps) {
|
|
49
|
+
console.log(` • ${step.action}`);
|
|
50
|
+
if (step.details && Object.keys(step.details).length > 0) {
|
|
51
|
+
for (const [key, value] of Object.entries(step.details)) {
|
|
52
|
+
console.log(` ${tui.muted(`${key}: ${JSON.stringify(value)}`)}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
tui.newline();
|
|
57
|
+
if (plan.warnings && plan.warnings.length > 0) {
|
|
58
|
+
console.log(tui.bold('Warnings:'));
|
|
59
|
+
for (const warn of plan.warnings) {
|
|
60
|
+
console.log(` ⚠ ${warn}`);
|
|
61
|
+
}
|
|
62
|
+
tui.newline();
|
|
63
|
+
}
|
|
64
|
+
if (plan.estimatedDuration) {
|
|
65
|
+
console.log(tui.muted(`Estimated duration: ${plan.estimatedDuration}`));
|
|
66
|
+
tui.newline();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a simple explain plan
|
|
71
|
+
*/
|
|
72
|
+
export function createExplainPlan(command, description, steps) {
|
|
73
|
+
return {
|
|
74
|
+
command,
|
|
75
|
+
description,
|
|
76
|
+
steps: steps.map((action) => ({ action })),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Output dry-run result
|
|
81
|
+
*/
|
|
82
|
+
export function outputDryRun(message, options) {
|
|
83
|
+
if (options.json) {
|
|
84
|
+
console.log(JSON.stringify({ dryRun: true, message }, null, 2));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
console.log(tui.muted('[DRY RUN] ') + message);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=explain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../src/explain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAE7B;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAsB;IACnD,OAAO,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAsB;IAClD,OAAO,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAsB;IACnD,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC5C,CAAC;AAsBD;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAiB,EAAE,OAAsB;IACtE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO;IACR,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACjC,GAAG,CAAC,OAAO,EAAE,CAAC;IAEd,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACrC,GAAG,CAAC,OAAO,EAAE,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,CAAC;IACf,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;QACF,CAAC;IACF,CAAC;IACD,GAAG,CAAC,OAAO,EAAE,CAAC;IAEd,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACxE,GAAG,CAAC,OAAO,EAAE,CAAC;IACf,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAChC,OAAe,EACf,WAAmB,EACnB,KAAe;IAEf,OAAO;QACN,OAAO;QACP,WAAW;QACX,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC1C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,OAAsB;IACnE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,CAAC;IAChD,CAAC;AACF,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export { createCLI, registerCommands } from './cli';
|
|
2
|
+
export { validateRuntime, isBun } from './runtime';
|
|
3
|
+
export { generateCLISchema } from './schema-generator';
|
|
4
|
+
export { ErrorCode, createError, exitWithError, formatErrorJSON, formatErrorHuman, } from './errors';
|
|
5
|
+
export { wrapLogger, CLILogger } from './cli-logger';
|
|
6
|
+
export { isJSONMode, isQuietMode, shouldDisableProgress, shouldDisableColors, outputJSON, outputSuccess, outputInfo, outputWarning, canPrompt, createSuccessResponse, createErrorResponse, createMetadata, setOutputOptions, getOutputOptions, createBatchResult, outputBatchResult, } from './output';
|
|
7
|
+
export { isExplainMode, isDryRunMode, shouldExecute, outputExplain, createExplainPlan, outputDryRun, } from './explain';
|
|
8
|
+
export { getVersion, getRevision, getPackageName, getPackage } from './version';
|
|
9
|
+
export { requireAuth, optionalAuth } from './auth';
|
|
10
|
+
export { loadConfig, saveConfig, getDefaultConfigPath, getDefaultConfigDir, getProfilePath, ensureConfigDir, saveProfile, getProfile, fetchProfiles, saveAuth, clearAuth, getAuth, } from './config';
|
|
11
|
+
export { APIClient, getAPIBaseURL, getAppBaseURL } from './api';
|
|
12
|
+
export { ConsoleLogger, createLogger, } from '@agentuity/server';
|
|
13
|
+
export { showBanner } from './banner';
|
|
14
|
+
export { discoverCommands } from './cmd';
|
|
15
|
+
export { detectColorScheme } from './terminal';
|
|
16
|
+
export { getCommandPrefix, getCommand } from './command-prefix';
|
|
17
|
+
export * as tui from './tui';
|
|
18
|
+
export { createRepl, } from './repl';
|
|
19
|
+
export { runSteps, setStepsColorScheme, stepSuccess, stepSkipped, stepError } from './steps';
|
|
20
|
+
export { playSound } from './sound';
|
|
21
|
+
export { downloadWithProgress, downloadWithSpinner, downloadGitHubTarball, } from './download';
|
|
22
|
+
export { createSubcommand, createCommand } from './types';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAsC,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EACN,SAAS,EACT,WAAW,EACX,aAAa,EACb,eAAe,EACf,gBAAgB,GAEhB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EACN,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,UAAU,EACV,aAAa,EACb,SAAS,EACT,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAKjB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,GAGZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,EACN,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,QAAQ,EACR,SAAS,EACT,OAAO,GACP,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EACN,aAAa,EACb,YAAY,GAEZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,EACN,UAAU,GAOV,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EACN,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GAGrB,MAAM,YAAY,CAAC;AAYpB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/json.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export function isPossiblyJSON(val) {
|
|
2
|
+
if (val) {
|
|
3
|
+
if (typeof val === 'object') {
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
if (typeof val === 'string') {
|
|
7
|
+
const v = val.trim();
|
|
8
|
+
if (v.startsWith('{') && v.endsWith('}')) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
if (v.startsWith('[') && v.endsWith(']')) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
export function tryParseJSON(val) {
|
|
19
|
+
if (isPossiblyJSON(val)) {
|
|
20
|
+
try {
|
|
21
|
+
return JSON.parse(val);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
/* */
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return val;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=json.js.map
|
package/dist/json.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,GAAY;IAC1C,IAAI,GAAG,EAAE,CAAC;QACT,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAI,GAAc,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACb,CAAC;YACD,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACvC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAa,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACR,KAAK;QACN,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import * as tui from './tui';
|
|
4
|
+
/**
|
|
5
|
+
* Check if the legacy (Go-based) Agentuity CLI is installed
|
|
6
|
+
* and block execution with migration instructions
|
|
7
|
+
*/
|
|
8
|
+
export async function checkLegacyCLI() {
|
|
9
|
+
const homeDir = homedir();
|
|
10
|
+
const legacyLocations = [
|
|
11
|
+
'/opt/homebrew/bin/agentuity', // Homebrew ARM64 (M1/M2/M3 Macs)
|
|
12
|
+
'/usr/local/bin/agentuity', // Homebrew Intel Macs / Linux
|
|
13
|
+
'/usr/bin/agentuity', // System install
|
|
14
|
+
join(homeDir, '.bin/agentuity'), // User bin from install script
|
|
15
|
+
join(homeDir, 'bin/agentuity'), // User bin alternate
|
|
16
|
+
join(homeDir, '.local/bin/agentuity'), // XDG user bin
|
|
17
|
+
];
|
|
18
|
+
const foundInstalls = [];
|
|
19
|
+
// Check if Homebrew manages the agentuity package
|
|
20
|
+
let isBrewManaged = false;
|
|
21
|
+
try {
|
|
22
|
+
const brewCheck = Bun.spawn(['brew', 'list', '--versions', 'agentuity'], {
|
|
23
|
+
stdout: 'ignore',
|
|
24
|
+
stderr: 'ignore',
|
|
25
|
+
});
|
|
26
|
+
const exitCode = await brewCheck.exited;
|
|
27
|
+
isBrewManaged = exitCode === 0;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Homebrew not installed or command failed
|
|
31
|
+
}
|
|
32
|
+
// Check file system locations
|
|
33
|
+
for (const location of legacyLocations) {
|
|
34
|
+
const file = Bun.file(location);
|
|
35
|
+
if (await file.exists()) {
|
|
36
|
+
try {
|
|
37
|
+
// Check if it's a compiled binary (not TypeScript)
|
|
38
|
+
const proc = Bun.spawn(['file', location], { stdout: 'pipe' });
|
|
39
|
+
const output = await new Response(proc.stdout).text();
|
|
40
|
+
await proc.exited;
|
|
41
|
+
if (output.includes('Mach-O') || output.includes('ELF')) {
|
|
42
|
+
// Determine method: if brew manages the package, mark all installs as homebrew
|
|
43
|
+
// otherwise check if it's in user home (install-script) or system (manual)
|
|
44
|
+
const method = isBrewManaged
|
|
45
|
+
? 'homebrew'
|
|
46
|
+
: location.includes(homeDir)
|
|
47
|
+
? 'install-script'
|
|
48
|
+
: 'manual';
|
|
49
|
+
foundInstalls.push({ path: location, method });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Ignore errors
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (foundInstalls.length === 0 && !isBrewManaged) {
|
|
58
|
+
return; // No legacy CLI found
|
|
59
|
+
}
|
|
60
|
+
// Block execution and show removal instructions
|
|
61
|
+
tui.newline();
|
|
62
|
+
tui.error('Legacy CLI Conflict Detected');
|
|
63
|
+
tui.newline();
|
|
64
|
+
console.log(' The legacy (Go-based) Agentuity CLI is installed and conflicts with the new');
|
|
65
|
+
console.log(' TypeScript-based CLI. Please remove it before continuing.');
|
|
66
|
+
tui.newline();
|
|
67
|
+
// Filter installs into brew-managed and manual
|
|
68
|
+
const brewInstalls = foundInstalls.filter((install) => isBrewManaged || install.method === 'homebrew');
|
|
69
|
+
const manualInstalls = foundInstalls.filter((install) => !isBrewManaged && install.method !== 'homebrew');
|
|
70
|
+
// Show Homebrew removal section if any brew-managed installs
|
|
71
|
+
if (brewInstalls.length > 0) {
|
|
72
|
+
console.log(' ' + tui.bold('Remove via Homebrew:'));
|
|
73
|
+
tui.bullet('brew uninstall agentuity');
|
|
74
|
+
tui.newline();
|
|
75
|
+
// Show which files will be removed by brew
|
|
76
|
+
console.log(' ' + tui.muted('This will remove:'));
|
|
77
|
+
for (const install of brewInstalls) {
|
|
78
|
+
console.log(` "${install.path}"`);
|
|
79
|
+
}
|
|
80
|
+
tui.newline();
|
|
81
|
+
}
|
|
82
|
+
// Show manual removal section if any manual installs
|
|
83
|
+
if (manualInstalls.length > 0) {
|
|
84
|
+
console.log(' ' + tui.bold('Remove the following legacy CLI installations:'));
|
|
85
|
+
tui.newline();
|
|
86
|
+
for (const install of manualInstalls) {
|
|
87
|
+
console.log(` ${tui.muted('"' + install.path + '"')}`);
|
|
88
|
+
if (install.method === 'install-script') {
|
|
89
|
+
tui.bullet(`rm "${install.path}"`);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
tui.bullet(`sudo rm "${install.path}"`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
tui.newline();
|
|
96
|
+
}
|
|
97
|
+
console.log(' ' + tui.bold('After removal, install the new CLI:'));
|
|
98
|
+
tui.bullet('bun install -g @agentuity/cli');
|
|
99
|
+
tui.newline();
|
|
100
|
+
console.log(` Learn more: ${tui.link('https://docs.agentuity.dev/cli/migration')}`);
|
|
101
|
+
tui.newline();
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=legacy-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-check.js","sourceRoot":"","sources":["../src/legacy-check.ts"],"names":[],"mappings":"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"}
|