@agentuity/cli 0.1.9 → 0.1.11
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/README.md +2 -2
- package/bin/cli.ts +8 -0
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/resource-region.d.ts +46 -0
- package/dist/cache/resource-region.d.ts.map +1 -0
- package/dist/cache/resource-region.js +115 -0
- package/dist/cache/resource-region.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +44 -32
- package/dist/cli.js.map +1 -1
- package/dist/cmd/ai/capabilities/show.d.ts.map +1 -1
- package/dist/cmd/ai/capabilities/show.js +12 -15
- package/dist/cmd/ai/capabilities/show.js.map +1 -1
- package/dist/cmd/ai/prompt/llm.js +5 -5
- package/dist/cmd/ai/prompt/llm.js.map +1 -1
- package/dist/cmd/auth/logout.d.ts.map +1 -1
- package/dist/cmd/auth/logout.js +5 -2
- package/dist/cmd/auth/logout.js.map +1 -1
- package/dist/cmd/build/ast.d.ts.map +1 -1
- package/dist/cmd/build/ast.js +87 -1
- package/dist/cmd/build/ast.js.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.js +8 -3
- package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server.js +5 -3
- package/dist/cmd/build/vite/vite-asset-server.js.map +1 -1
- package/dist/cmd/cloud/db/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/db/delete.js +69 -11
- package/dist/cmd/cloud/db/delete.js.map +1 -1
- package/dist/cmd/cloud/db/get.d.ts.map +1 -1
- package/dist/cmd/cloud/db/get.js +23 -7
- package/dist/cmd/cloud/db/get.js.map +1 -1
- package/dist/cmd/cloud/db/list.d.ts.map +1 -1
- package/dist/cmd/cloud/db/list.js +15 -7
- package/dist/cmd/cloud/db/list.js.map +1 -1
- package/dist/cmd/cloud/db/logs.d.ts.map +1 -1
- package/dist/cmd/cloud/db/logs.js +24 -4
- package/dist/cmd/cloud/db/logs.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +38 -0
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/cloud/env/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/env/delete.js +30 -13
- 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 +27 -30
- package/dist/cmd/cloud/env/get.js.map +1 -1
- package/dist/cmd/cloud/env/import.d.ts.map +1 -1
- package/dist/cmd/cloud/env/import.js +41 -48
- package/dist/cmd/cloud/env/import.js.map +1 -1
- package/dist/cmd/cloud/env/index.d.ts.map +1 -1
- package/dist/cmd/cloud/env/index.js +6 -2
- package/dist/cmd/cloud/env/index.js.map +1 -1
- package/dist/cmd/cloud/env/list.d.ts.map +1 -1
- package/dist/cmd/cloud/env/list.js +51 -28
- package/dist/cmd/cloud/env/list.js.map +1 -1
- package/dist/cmd/cloud/env/pull.d.ts.map +1 -1
- package/dist/cmd/cloud/env/pull.js +3 -3
- package/dist/cmd/cloud/env/pull.js.map +1 -1
- package/dist/cmd/cloud/env/push.d.ts.map +1 -1
- package/dist/cmd/cloud/env/push.js +31 -11
- package/dist/cmd/cloud/env/push.js.map +1 -1
- package/dist/cmd/cloud/env/set.d.ts.map +1 -1
- package/dist/cmd/cloud/env/set.js +41 -26
- package/dist/cmd/cloud/env/set.js.map +1 -1
- package/dist/cmd/cloud/index.d.ts.map +1 -1
- package/dist/cmd/cloud/index.js +0 -2
- package/dist/cmd/cloud/index.js.map +1 -1
- package/dist/cmd/cloud/region-lookup.d.ts +18 -0
- package/dist/cmd/cloud/region-lookup.d.ts.map +1 -0
- package/dist/cmd/cloud/region-lookup.js +64 -0
- package/dist/cmd/cloud/region-lookup.js.map +1 -0
- package/dist/cmd/cloud/sandbox/cp.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/cp.js +5 -3
- package/dist/cmd/cloud/sandbox/cp.js.map +1 -1
- package/dist/cmd/cloud/sandbox/create.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/create.js +43 -6
- package/dist/cmd/cloud/sandbox/create.js.map +1 -1
- package/dist/cmd/cloud/sandbox/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/delete.js +5 -3
- package/dist/cmd/cloud/sandbox/delete.js.map +1 -1
- package/dist/cmd/cloud/sandbox/download.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/download.js +4 -3
- package/dist/cmd/cloud/sandbox/download.js.map +1 -1
- package/dist/cmd/cloud/sandbox/env.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/env.js +4 -3
- package/dist/cmd/cloud/sandbox/env.js.map +1 -1
- package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/exec.js +4 -3
- package/dist/cmd/cloud/sandbox/exec.js.map +1 -1
- package/dist/cmd/cloud/sandbox/execution/get.js +4 -4
- package/dist/cmd/cloud/sandbox/execution/get.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.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/execution/list.js +4 -3
- package/dist/cmd/cloud/sandbox/execution/list.js.map +1 -1
- package/dist/cmd/cloud/sandbox/get.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/get.js +9 -4
- package/dist/cmd/cloud/sandbox/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/index.js +1 -1
- package/dist/cmd/cloud/sandbox/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/list.js +4 -4
- package/dist/cmd/cloud/sandbox/list.js.map +1 -1
- package/dist/cmd/cloud/sandbox/ls.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/ls.js +4 -3
- package/dist/cmd/cloud/sandbox/ls.js.map +1 -1
- package/dist/cmd/cloud/sandbox/mkdir.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/mkdir.js +4 -3
- package/dist/cmd/cloud/sandbox/mkdir.js.map +1 -1
- package/dist/cmd/cloud/sandbox/rm.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/rm.js +4 -3
- package/dist/cmd/cloud/sandbox/rm.js.map +1 -1
- package/dist/cmd/cloud/sandbox/rmdir.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/rmdir.js +4 -3
- package/dist/cmd/cloud/sandbox/rmdir.js.map +1 -1
- package/dist/cmd/cloud/sandbox/run.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/run.js +44 -6
- 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/runtime/list.js +4 -4
- package/dist/cmd/cloud/sandbox/runtime/list.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/build.d.ts +5 -0
- package/dist/cmd/cloud/sandbox/snapshot/build.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/build.js +574 -0
- package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/create.js +5 -3
- package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/delete.js +4 -4
- package/dist/cmd/cloud/sandbox/snapshot/delete.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/generate.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/snapshot/generate.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/generate.js +127 -0
- package/dist/cmd/cloud/sandbox/snapshot/generate.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/get.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/get.js +20 -4
- package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/index.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/index.js +20 -2
- package/dist/cmd/cloud/sandbox/snapshot/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/list.js +4 -4
- package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/tag.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/tag.js +4 -4
- package/dist/cmd/cloud/sandbox/snapshot/tag.js.map +1 -1
- package/dist/cmd/cloud/sandbox/upload.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/upload.js +4 -3
- package/dist/cmd/cloud/sandbox/upload.js.map +1 -1
- package/dist/cmd/cloud/sandbox/util.d.ts +13 -0
- package/dist/cmd/cloud/sandbox/util.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/util.js +40 -1
- package/dist/cmd/cloud/sandbox/util.js.map +1 -1
- package/dist/cmd/cloud/scp/download.d.ts.map +1 -1
- package/dist/cmd/cloud/scp/download.js +6 -2
- package/dist/cmd/cloud/scp/download.js.map +1 -1
- package/dist/cmd/cloud/scp/upload.d.ts.map +1 -1
- package/dist/cmd/cloud/scp/upload.js +6 -2
- package/dist/cmd/cloud/scp/upload.js.map +1 -1
- package/dist/cmd/cloud/session/get.js +4 -4
- package/dist/cmd/cloud/session/get.js.map +1 -1
- package/dist/cmd/cloud/session/list.js +4 -4
- package/dist/cmd/cloud/session/list.js.map +1 -1
- package/dist/cmd/cloud/ssh.d.ts.map +1 -1
- package/dist/cmd/cloud/ssh.js +7 -2
- package/dist/cmd/cloud/ssh.js.map +1 -1
- package/dist/cmd/cloud/storage/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/delete.js +46 -10
- package/dist/cmd/cloud/storage/delete.js.map +1 -1
- package/dist/cmd/cloud/storage/download.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/download.js +19 -6
- package/dist/cmd/cloud/storage/download.js.map +1 -1
- package/dist/cmd/cloud/storage/get.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/get.js +19 -6
- package/dist/cmd/cloud/storage/get.js.map +1 -1
- package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/list.js +17 -7
- package/dist/cmd/cloud/storage/list.js.map +1 -1
- package/dist/cmd/cloud/storage/upload.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/upload.js +19 -6
- package/dist/cmd/cloud/storage/upload.js.map +1 -1
- package/dist/cmd/cloud/thread/delete.js +4 -4
- package/dist/cmd/cloud/thread/delete.js.map +1 -1
- package/dist/cmd/cloud/thread/get.js +4 -4
- package/dist/cmd/cloud/thread/get.js.map +1 -1
- package/dist/cmd/cloud/thread/list.js +4 -4
- package/dist/cmd/cloud/thread/list.js.map +1 -1
- package/dist/cmd/project/auth/init.d.ts.map +1 -1
- package/dist/cmd/project/auth/init.js +6 -3
- package/dist/cmd/project/auth/init.js.map +1 -1
- package/dist/cmd/project/auth/shared.d.ts +6 -2
- package/dist/cmd/project/auth/shared.d.ts.map +1 -1
- package/dist/cmd/project/auth/shared.js +41 -13
- package/dist/cmd/project/auth/shared.js.map +1 -1
- package/dist/config.d.ts +37 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +55 -8
- package/dist/config.js.map +1 -1
- package/dist/env-util.d.ts +25 -2
- package/dist/env-util.d.ts.map +1 -1
- package/dist/env-util.js +44 -4
- package/dist/env-util.js.map +1 -1
- package/dist/utils/apt-validator.d.ts +20 -0
- package/dist/utils/apt-validator.d.ts.map +1 -0
- package/dist/utils/apt-validator.js +157 -0
- package/dist/utils/apt-validator.js.map +1 -0
- package/package.json +6 -6
- package/src/cache/index.ts +11 -0
- package/src/cache/resource-region.ts +183 -0
- package/src/cli.ts +47 -38
- package/src/cmd/ai/capabilities/show.ts +12 -15
- package/src/cmd/ai/prompt/llm.ts +5 -5
- package/src/cmd/auth/logout.ts +5 -2
- package/src/cmd/build/ast.ts +160 -1
- package/src/cmd/build/vite/vite-asset-server-config.ts +7 -3
- package/src/cmd/build/vite/vite-asset-server.ts +6 -3
- package/src/cmd/cloud/db/delete.ts +83 -11
- package/src/cmd/cloud/db/get.ts +29 -7
- package/src/cmd/cloud/db/list.ts +16 -7
- package/src/cmd/cloud/db/logs.ts +33 -4
- package/src/cmd/cloud/deploy.ts +49 -0
- package/src/cmd/cloud/env/delete.ts +36 -12
- package/src/cmd/cloud/env/get.ts +28 -27
- package/src/cmd/cloud/env/import.ts +43 -56
- package/src/cmd/cloud/env/index.ts +6 -2
- package/src/cmd/cloud/env/list.ts +57 -30
- package/src/cmd/cloud/env/pull.ts +9 -3
- package/src/cmd/cloud/env/push.ts +44 -11
- package/src/cmd/cloud/env/set.ts +49 -30
- package/src/cmd/cloud/index.ts +0 -2
- package/src/cmd/cloud/region-lookup.ts +89 -0
- package/src/cmd/cloud/sandbox/cp.ts +5 -3
- package/src/cmd/cloud/sandbox/create.ts +50 -6
- package/src/cmd/cloud/sandbox/delete.ts +6 -3
- package/src/cmd/cloud/sandbox/download.ts +4 -3
- package/src/cmd/cloud/sandbox/env.ts +4 -3
- package/src/cmd/cloud/sandbox/exec.ts +4 -3
- package/src/cmd/cloud/sandbox/execution/get.ts +4 -4
- package/src/cmd/cloud/sandbox/execution/index.ts +1 -1
- package/src/cmd/cloud/sandbox/execution/list.ts +4 -3
- package/src/cmd/cloud/sandbox/get.ts +10 -4
- package/src/cmd/cloud/sandbox/index.ts +1 -1
- package/src/cmd/cloud/sandbox/list.ts +4 -4
- package/src/cmd/cloud/sandbox/ls.ts +4 -3
- package/src/cmd/cloud/sandbox/mkdir.ts +4 -3
- package/src/cmd/cloud/sandbox/rm.ts +4 -3
- package/src/cmd/cloud/sandbox/rmdir.ts +4 -3
- package/src/cmd/cloud/sandbox/run.ts +51 -6
- package/src/cmd/cloud/sandbox/runtime/index.ts +1 -1
- package/src/cmd/cloud/sandbox/runtime/list.ts +4 -4
- package/src/cmd/cloud/sandbox/snapshot/build.ts +696 -0
- package/src/cmd/cloud/sandbox/snapshot/create.ts +11 -5
- package/src/cmd/cloud/sandbox/snapshot/delete.ts +4 -4
- package/src/cmd/cloud/sandbox/snapshot/generate.ts +134 -0
- package/src/cmd/cloud/sandbox/snapshot/get.ts +23 -4
- package/src/cmd/cloud/sandbox/snapshot/index.ts +20 -2
- package/src/cmd/cloud/sandbox/snapshot/list.ts +4 -4
- package/src/cmd/cloud/sandbox/snapshot/tag.ts +7 -5
- package/src/cmd/cloud/sandbox/upload.ts +4 -3
- package/src/cmd/cloud/sandbox/util.ts +60 -1
- package/src/cmd/cloud/scp/download.ts +14 -2
- package/src/cmd/cloud/scp/upload.ts +14 -2
- package/src/cmd/cloud/session/get.ts +4 -4
- package/src/cmd/cloud/session/list.ts +4 -4
- package/src/cmd/cloud/ssh.ts +15 -2
- package/src/cmd/cloud/storage/delete.ts +61 -10
- package/src/cmd/cloud/storage/download.ts +31 -6
- package/src/cmd/cloud/storage/get.ts +31 -6
- package/src/cmd/cloud/storage/list.ts +18 -7
- package/src/cmd/cloud/storage/upload.ts +31 -6
- package/src/cmd/cloud/thread/delete.ts +4 -4
- package/src/cmd/cloud/thread/get.ts +4 -4
- package/src/cmd/cloud/thread/list.ts +4 -4
- package/src/cmd/project/auth/init.ts +7 -3
- package/src/cmd/project/auth/shared.ts +53 -14
- package/src/config.ts +69 -8
- package/src/env-util.ts +50 -5
- package/src/utils/apt-validator.ts +215 -0
- package/dist/cmd/cloud/secret/delete.d.ts +0 -2
- package/dist/cmd/cloud/secret/delete.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/delete.js +0 -53
- package/dist/cmd/cloud/secret/delete.js.map +0 -1
- package/dist/cmd/cloud/secret/get.d.ts +0 -2
- package/dist/cmd/cloud/secret/get.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/get.js +0 -73
- package/dist/cmd/cloud/secret/get.js.map +0 -1
- package/dist/cmd/cloud/secret/import.d.ts +0 -2
- package/dist/cmd/cloud/secret/import.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/import.js +0 -91
- package/dist/cmd/cloud/secret/import.js.map +0 -1
- package/dist/cmd/cloud/secret/index.d.ts +0 -3
- package/dist/cmd/cloud/secret/index.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/index.js +0 -33
- package/dist/cmd/cloud/secret/index.js.map +0 -1
- package/dist/cmd/cloud/secret/list.d.ts +0 -2
- package/dist/cmd/cloud/secret/list.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/list.js +0 -65
- package/dist/cmd/cloud/secret/list.js.map +0 -1
- package/dist/cmd/cloud/secret/pull.d.ts +0 -2
- package/dist/cmd/cloud/secret/pull.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/pull.js +0 -82
- package/dist/cmd/cloud/secret/pull.js.map +0 -1
- package/dist/cmd/cloud/secret/push.d.ts +0 -2
- package/dist/cmd/cloud/secret/push.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/push.js +0 -61
- package/dist/cmd/cloud/secret/push.js.map +0 -1
- package/dist/cmd/cloud/secret/set.d.ts +0 -2
- package/dist/cmd/cloud/secret/set.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/set.js +0 -63
- package/dist/cmd/cloud/secret/set.js.map +0 -1
- package/src/cmd/cloud/secret/delete.ts +0 -65
- package/src/cmd/cloud/secret/get.ts +0 -77
- package/src/cmd/cloud/secret/import.ts +0 -110
- package/src/cmd/cloud/secret/index.ts +0 -33
- package/src/cmd/cloud/secret/list.ts +0 -70
- package/src/cmd/cloud/secret/pull.ts +0 -92
- package/src/cmd/cloud/secret/push.ts +0 -69
- package/src/cmd/cloud/secret/set.ts +0 -76
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ agentuity dev
|
|
|
32
32
|
agentuity cloud keyvalue set mykey myvalue
|
|
33
33
|
agentuity cloud agents
|
|
34
34
|
agentuity cloud env list
|
|
35
|
-
agentuity cloud
|
|
35
|
+
agentuity cloud env set MY_SECRET value --secret
|
|
36
36
|
|
|
37
37
|
# AI commands
|
|
38
38
|
agentuity ai capabilities show
|
|
@@ -82,7 +82,7 @@ agentuity --log-level=error example list
|
|
|
82
82
|
Commands are organized into groups:
|
|
83
83
|
|
|
84
84
|
- **Top-level**: `auth`, `project`, `version`, `build` (alias: `bundle`), `dev`
|
|
85
|
-
- **Cloud** (`cloud`): `keyvalue`, `agents`, `env`,
|
|
85
|
+
- **Cloud** (`cloud`): `keyvalue`, `agents`, `env`, and deployment-related commands
|
|
86
86
|
- **AI** (`ai`): `capabilities`, `prompt`, `schema`
|
|
87
87
|
- **Hidden**: `profile` (internal use only)
|
|
88
88
|
|
package/bin/cli.ts
CHANGED
|
@@ -15,6 +15,7 @@ import { setOutputOptions } from '../src/output';
|
|
|
15
15
|
import type { GlobalOptions } from '../src/types';
|
|
16
16
|
import { ensureBunOnPath } from '../src/bun-path';
|
|
17
17
|
import { checkForUpdates } from '../src/version-check';
|
|
18
|
+
import { closeDatabase } from '../src/cache';
|
|
18
19
|
|
|
19
20
|
// Cleanup TTY state before exit
|
|
20
21
|
function cleanupTTY() {
|
|
@@ -37,10 +38,12 @@ function cleanupTTY() {
|
|
|
37
38
|
process.on('SIGINT', () => {
|
|
38
39
|
process.stdout.write('\b \b'); // erase the ctrl+c display
|
|
39
40
|
cleanupTTY();
|
|
41
|
+
closeDatabase();
|
|
40
42
|
});
|
|
41
43
|
|
|
42
44
|
process.on('SIGTERM', () => {
|
|
43
45
|
cleanupTTY();
|
|
46
|
+
closeDatabase();
|
|
44
47
|
});
|
|
45
48
|
|
|
46
49
|
validateRuntime();
|
|
@@ -75,6 +78,7 @@ if (
|
|
|
75
78
|
console.log(JSON.stringify(cliSchema, null, 2));
|
|
76
79
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
77
80
|
const exit = (globalThis as any).AGENTUITY_PROCESS_EXIT || process.exit;
|
|
81
|
+
closeDatabase();
|
|
78
82
|
exit(0);
|
|
79
83
|
}
|
|
80
84
|
|
|
@@ -171,14 +175,17 @@ try {
|
|
|
171
175
|
msg.includes('canceled') || // US
|
|
172
176
|
msg === ''
|
|
173
177
|
) {
|
|
178
|
+
closeDatabase();
|
|
174
179
|
exit(0);
|
|
175
180
|
}
|
|
176
181
|
if ('name' in error && error.name === 'AbortError') {
|
|
182
|
+
closeDatabase();
|
|
177
183
|
exit(0);
|
|
178
184
|
}
|
|
179
185
|
}
|
|
180
186
|
// Also exit cleanly if error is empty/undefined (user cancellation)
|
|
181
187
|
if (!error) {
|
|
188
|
+
closeDatabase();
|
|
182
189
|
exit(0);
|
|
183
190
|
}
|
|
184
191
|
const errorWithMessage = error as { message?: string };
|
|
@@ -191,5 +198,6 @@ try {
|
|
|
191
198
|
error
|
|
192
199
|
);
|
|
193
200
|
}
|
|
201
|
+
closeDatabase();
|
|
194
202
|
exit(1);
|
|
195
203
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,YAAY,GACjB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,GAGb,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type ResourceType = 'sandbox' | 'bucket' | 'db' | 'project' | 'deployment';
|
|
2
|
+
/**
|
|
3
|
+
* Resource info returned from cache lookup
|
|
4
|
+
*/
|
|
5
|
+
export interface ResourceInfo {
|
|
6
|
+
region: string;
|
|
7
|
+
orgId?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Get the cached info (region and orgId) for a resource.
|
|
11
|
+
* Returns null if not found or expired.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getResourceInfo(type: ResourceType, profile: string, id: string): Promise<ResourceInfo | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Get the cached region for a resource.
|
|
16
|
+
* Returns null if not found or expired.
|
|
17
|
+
* @deprecated Use getResourceInfo() to get both region and orgId
|
|
18
|
+
*/
|
|
19
|
+
export declare function getResourceRegion(type: ResourceType, profile: string, id: string): Promise<string | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Set the cached info for a resource.
|
|
22
|
+
* Uses INSERT OR REPLACE to upsert.
|
|
23
|
+
*/
|
|
24
|
+
export declare function setResourceInfo(type: ResourceType, profile: string, id: string, region: string, orgId?: string): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Set the cached region for a resource.
|
|
27
|
+
* Uses INSERT OR REPLACE to upsert.
|
|
28
|
+
* @deprecated Use setResourceInfo() to set both region and orgId
|
|
29
|
+
*/
|
|
30
|
+
export declare function setResourceRegion(type: ResourceType, profile: string, id: string, region: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Delete the cached info for a resource.
|
|
33
|
+
* Called when a resource is deleted.
|
|
34
|
+
*/
|
|
35
|
+
export declare function deleteResourceRegion(type: ResourceType, profile: string, id: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Clear all cached entries for a specific profile.
|
|
38
|
+
* Useful when switching profiles or logging out.
|
|
39
|
+
*/
|
|
40
|
+
export declare function clearProfileCache(profile: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Close the database connection.
|
|
43
|
+
* Should be called on CLI exit for clean shutdown.
|
|
44
|
+
*/
|
|
45
|
+
export declare function closeDatabase(): void;
|
|
46
|
+
//# sourceMappingURL=resource-region.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-region.d.ts","sourceRoot":"","sources":["../../src/cache/resource-region.ts"],"names":[],"mappings":"AA8CA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACpC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACR,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA6B9B;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACR,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGxB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACpC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACR,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItE;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Database } from 'bun:sqlite';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { mkdir } from 'node:fs/promises';
|
|
4
|
+
import { getDefaultConfigDir } from '../config';
|
|
5
|
+
const TTL_DAYS = 7;
|
|
6
|
+
const TTL_MS = TTL_DAYS * 24 * 60 * 60 * 1000;
|
|
7
|
+
let db = null;
|
|
8
|
+
async function getDatabase() {
|
|
9
|
+
if (db) {
|
|
10
|
+
return db;
|
|
11
|
+
}
|
|
12
|
+
const configDir = getDefaultConfigDir();
|
|
13
|
+
await mkdir(configDir, { recursive: true });
|
|
14
|
+
const dbPath = join(configDir, 'resource.db');
|
|
15
|
+
db = new Database(dbPath);
|
|
16
|
+
db.run(`
|
|
17
|
+
CREATE TABLE IF NOT EXISTS resource_region_cache (
|
|
18
|
+
resource_type TEXT NOT NULL,
|
|
19
|
+
profile TEXT NOT NULL,
|
|
20
|
+
id TEXT NOT NULL,
|
|
21
|
+
region TEXT NOT NULL,
|
|
22
|
+
org_id TEXT,
|
|
23
|
+
last_updated INTEGER NOT NULL,
|
|
24
|
+
PRIMARY KEY (resource_type, profile, id)
|
|
25
|
+
)
|
|
26
|
+
`);
|
|
27
|
+
db.run(`
|
|
28
|
+
CREATE INDEX IF NOT EXISTS idx_last_updated
|
|
29
|
+
ON resource_region_cache(last_updated)
|
|
30
|
+
`);
|
|
31
|
+
return db;
|
|
32
|
+
}
|
|
33
|
+
function pruneOldEntries(database) {
|
|
34
|
+
const cutoff = Date.now() - TTL_MS;
|
|
35
|
+
database.run('DELETE FROM resource_region_cache WHERE last_updated < ?', [cutoff]);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the cached info (region and orgId) for a resource.
|
|
39
|
+
* Returns null if not found or expired.
|
|
40
|
+
*/
|
|
41
|
+
export async function getResourceInfo(type, profile, id) {
|
|
42
|
+
const database = await getDatabase();
|
|
43
|
+
const cutoff = Date.now() - TTL_MS;
|
|
44
|
+
const row = database
|
|
45
|
+
.query('SELECT region, org_id, last_updated FROM resource_region_cache WHERE resource_type = ? AND profile = ? AND id = ?')
|
|
46
|
+
.get(type, profile, id);
|
|
47
|
+
if (!row) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
// Check if entry is expired
|
|
51
|
+
if (row.last_updated < cutoff) {
|
|
52
|
+
// Remove stale entry
|
|
53
|
+
database.run('DELETE FROM resource_region_cache WHERE resource_type = ? AND profile = ? AND id = ?', [type, profile, id]);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
region: row.region,
|
|
58
|
+
orgId: row.org_id ?? undefined,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get the cached region for a resource.
|
|
63
|
+
* Returns null if not found or expired.
|
|
64
|
+
* @deprecated Use getResourceInfo() to get both region and orgId
|
|
65
|
+
*/
|
|
66
|
+
export async function getResourceRegion(type, profile, id) {
|
|
67
|
+
const info = await getResourceInfo(type, profile, id);
|
|
68
|
+
return info?.region ?? null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Set the cached info for a resource.
|
|
72
|
+
* Uses INSERT OR REPLACE to upsert.
|
|
73
|
+
*/
|
|
74
|
+
export async function setResourceInfo(type, profile, id, region, orgId) {
|
|
75
|
+
const database = await getDatabase();
|
|
76
|
+
pruneOldEntries(database);
|
|
77
|
+
database.run(`INSERT OR REPLACE INTO resource_region_cache
|
|
78
|
+
(resource_type, profile, id, region, org_id, last_updated)
|
|
79
|
+
VALUES (?, ?, ?, ?, ?, ?)`, [type, profile, id, region, orgId ?? null, Date.now()]);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Set the cached region for a resource.
|
|
83
|
+
* Uses INSERT OR REPLACE to upsert.
|
|
84
|
+
* @deprecated Use setResourceInfo() to set both region and orgId
|
|
85
|
+
*/
|
|
86
|
+
export async function setResourceRegion(type, profile, id, region) {
|
|
87
|
+
await setResourceInfo(type, profile, id, region);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Delete the cached info for a resource.
|
|
91
|
+
* Called when a resource is deleted.
|
|
92
|
+
*/
|
|
93
|
+
export async function deleteResourceRegion(type, profile, id) {
|
|
94
|
+
const database = await getDatabase();
|
|
95
|
+
database.run('DELETE FROM resource_region_cache WHERE resource_type = ? AND profile = ? AND id = ?', [type, profile, id]);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Clear all cached entries for a specific profile.
|
|
99
|
+
* Useful when switching profiles or logging out.
|
|
100
|
+
*/
|
|
101
|
+
export async function clearProfileCache(profile) {
|
|
102
|
+
const database = await getDatabase();
|
|
103
|
+
database.run('DELETE FROM resource_region_cache WHERE profile = ?', [profile]);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Close the database connection.
|
|
107
|
+
* Should be called on CLI exit for clean shutdown.
|
|
108
|
+
*/
|
|
109
|
+
export function closeDatabase() {
|
|
110
|
+
if (db) {
|
|
111
|
+
db.close();
|
|
112
|
+
db = null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=resource-region.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-region.js","sourceRoot":"","sources":["../../src/cache/resource-region.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EACX,iBAAiB,EAEjB,cAAc,EAQd,MAAM,SAAS,CAAC;AA8bjB,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA2MjE;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EACX,iBAAiB,EAEjB,cAAc,EAQd,MAAM,SAAS,CAAC;AA8bjB,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA2MjE;AA09BD,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAmMf"}
|
package/dist/cli.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdir } from 'node:fs/promises';
|
|
1
|
+
import { mkdir, unlink } from 'node:fs/promises';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { resolve, join } from 'node:path';
|
|
4
4
|
import { Command } from 'commander';
|
|
@@ -283,7 +283,7 @@ function handleProjectConfigError(error, requiresProject, logger, errorFormat) {
|
|
|
283
283
|
error &&
|
|
284
284
|
typeof error === 'object' &&
|
|
285
285
|
'name' in error &&
|
|
286
|
-
error.name === '
|
|
286
|
+
error.name === 'ProjectConfigNotFoundException') {
|
|
287
287
|
exitWithError(createError(ErrorCode.PROJECT_NOT_FOUND, 'Invalid project folder', undefined, [
|
|
288
288
|
'Use --dir to specify a different directory',
|
|
289
289
|
'Change to a directory containing agentuity.json',
|
|
@@ -550,64 +550,76 @@ async function getRegion(regions) {
|
|
|
550
550
|
return response.region;
|
|
551
551
|
}
|
|
552
552
|
}
|
|
553
|
-
const REGIONS_CACHE_FILE = 'regions.json';
|
|
554
553
|
const REGIONS_CACHE_MAX_AGE_MS = 5 * 24 * 60 * 60 * 1000; // 5 days
|
|
555
|
-
|
|
554
|
+
const LEGACY_REGIONS_CACHE_FILE = 'regions.json';
|
|
555
|
+
function getRegionsCacheFile(profileName) {
|
|
556
|
+
return `regions-${profileName}.json`;
|
|
557
|
+
}
|
|
558
|
+
async function removeLegacyRegionsCache(logger) {
|
|
559
|
+
try {
|
|
560
|
+
const legacyPath = join(getDefaultConfigDir(), LEGACY_REGIONS_CACHE_FILE);
|
|
561
|
+
const file = Bun.file(legacyPath);
|
|
562
|
+
if (await file.exists()) {
|
|
563
|
+
await unlink(legacyPath);
|
|
564
|
+
logger.trace('removed legacy regions cache file');
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
catch {
|
|
568
|
+
// Ignore errors when removing legacy file
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
async function getCachedRegions(profileName, logger) {
|
|
556
572
|
try {
|
|
557
|
-
|
|
573
|
+
// Clean up legacy single-file cache from older versions
|
|
574
|
+
await removeLegacyRegionsCache(logger);
|
|
575
|
+
const cachePath = join(getDefaultConfigDir(), getRegionsCacheFile(profileName));
|
|
558
576
|
const file = Bun.file(cachePath);
|
|
559
577
|
if (!(await file.exists())) {
|
|
560
578
|
return null;
|
|
561
579
|
}
|
|
562
580
|
const data = await file.json();
|
|
563
|
-
// Check if cache is for the same API URL (profile-aware)
|
|
564
|
-
if (data.apiUrl && data.apiUrl !== apiUrl) {
|
|
565
|
-
logger.trace('regions cache is for different API URL (cached: %s, current: %s)', data.apiUrl, apiUrl);
|
|
566
|
-
return null;
|
|
567
|
-
}
|
|
568
581
|
const age = Date.now() - data.timestamp;
|
|
569
582
|
if (age > REGIONS_CACHE_MAX_AGE_MS) {
|
|
570
|
-
logger.trace('regions cache expired (age: %dms)', age);
|
|
583
|
+
logger.trace('regions cache expired for profile %s (age: %dms)', profileName, age);
|
|
571
584
|
return null;
|
|
572
585
|
}
|
|
573
|
-
logger.trace('using cached regions (age: %dms)', age);
|
|
586
|
+
logger.trace('using cached regions for profile %s (age: %dms)', profileName, age);
|
|
574
587
|
return data.regions;
|
|
575
588
|
}
|
|
576
589
|
catch (error) {
|
|
577
|
-
logger.trace('failed to read regions cache: %s', error);
|
|
590
|
+
logger.trace('failed to read regions cache for profile %s: %s', profileName, error);
|
|
578
591
|
return null;
|
|
579
592
|
}
|
|
580
593
|
}
|
|
581
|
-
async function saveRegionsCache(
|
|
594
|
+
async function saveRegionsCache(profileName, regions, logger) {
|
|
582
595
|
try {
|
|
583
596
|
const cacheDir = getDefaultConfigDir();
|
|
584
597
|
await mkdir(cacheDir, { recursive: true });
|
|
585
|
-
const cachePath = join(cacheDir,
|
|
598
|
+
const cachePath = join(cacheDir, getRegionsCacheFile(profileName));
|
|
586
599
|
const data = {
|
|
587
600
|
timestamp: Date.now(),
|
|
588
601
|
regions,
|
|
589
|
-
apiUrl,
|
|
590
602
|
};
|
|
591
603
|
await Bun.write(cachePath, JSON.stringify(data));
|
|
592
|
-
logger.trace('saved regions cache for %s',
|
|
604
|
+
logger.trace('saved regions cache for profile %s', profileName);
|
|
593
605
|
}
|
|
594
606
|
catch (error) {
|
|
595
|
-
logger.trace('failed to save regions cache: %s', error);
|
|
607
|
+
logger.trace('failed to save regions cache for profile %s: %s', profileName, error);
|
|
596
608
|
}
|
|
597
609
|
}
|
|
598
|
-
async function fetchRegionsWithCache(
|
|
599
|
-
const cached = await getCachedRegions(
|
|
610
|
+
async function fetchRegionsWithCache(profileName, apiClient, logger) {
|
|
611
|
+
const cached = await getCachedRegions(profileName, logger);
|
|
600
612
|
if (cached) {
|
|
601
613
|
return cached;
|
|
602
614
|
}
|
|
603
615
|
const regions = await listRegions(apiClient);
|
|
604
|
-
await saveRegionsCache(
|
|
616
|
+
await saveRegionsCache(profileName, regions, logger);
|
|
605
617
|
return regions;
|
|
606
618
|
}
|
|
607
619
|
async function resolveRegion(opts) {
|
|
608
|
-
const { options, apiClient,
|
|
620
|
+
const { options, apiClient, profileName, logger, required } = opts;
|
|
609
621
|
// Fetch regions (with caching)
|
|
610
|
-
const regions = await fetchRegionsWithCache(
|
|
622
|
+
const regions = await fetchRegionsWithCache(profileName, apiClient, logger);
|
|
611
623
|
// No regions available
|
|
612
624
|
if (regions.length === 0) {
|
|
613
625
|
if (required) {
|
|
@@ -882,7 +894,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
882
894
|
if (error &&
|
|
883
895
|
typeof error === 'object' &&
|
|
884
896
|
'name' in error &&
|
|
885
|
-
error.name === '
|
|
897
|
+
error.name === 'ProjectConfigNotFoundException') {
|
|
886
898
|
// If TTY is available, prompt user to select a project
|
|
887
899
|
const hasTTY = process.stdin.isTTY && process.stdout.isTTY;
|
|
888
900
|
if (hasTTY) {
|
|
@@ -970,7 +982,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
970
982
|
return resolveRegion({
|
|
971
983
|
options: options,
|
|
972
984
|
apiClient,
|
|
973
|
-
|
|
985
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
974
986
|
logger: baseCtx.logger,
|
|
975
987
|
required: !!normalized.requiresRegion,
|
|
976
988
|
region: project?.region,
|
|
@@ -1028,7 +1040,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
1028
1040
|
return resolveRegion({
|
|
1029
1041
|
options: options,
|
|
1030
1042
|
apiClient,
|
|
1031
|
-
|
|
1043
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1032
1044
|
logger: baseCtx.logger,
|
|
1033
1045
|
required: !!normalized.requiresRegion,
|
|
1034
1046
|
region: project?.region,
|
|
@@ -1114,7 +1126,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
1114
1126
|
const region = await resolveRegion({
|
|
1115
1127
|
options: options,
|
|
1116
1128
|
apiClient,
|
|
1117
|
-
|
|
1129
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1118
1130
|
logger: baseCtx.logger,
|
|
1119
1131
|
required: !!normalized.requiresRegion,
|
|
1120
1132
|
region: project?.region,
|
|
@@ -1168,7 +1180,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
1168
1180
|
const region = await resolveRegion({
|
|
1169
1181
|
options: options,
|
|
1170
1182
|
apiClient,
|
|
1171
|
-
|
|
1183
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1172
1184
|
logger: baseCtx.logger,
|
|
1173
1185
|
required: !!normalized.requiresRegion,
|
|
1174
1186
|
});
|
|
@@ -1258,7 +1270,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
1258
1270
|
const region = await resolveRegion({
|
|
1259
1271
|
options: options,
|
|
1260
1272
|
apiClient,
|
|
1261
|
-
|
|
1273
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1262
1274
|
logger: baseCtx.logger,
|
|
1263
1275
|
required: !!normalized.requiresRegion,
|
|
1264
1276
|
region: project?.region,
|
|
@@ -1359,7 +1371,7 @@ export async function registerCommands(program, commands, baseCtx) {
|
|
|
1359
1371
|
const region = await resolveRegion({
|
|
1360
1372
|
options: baseCtx.options,
|
|
1361
1373
|
apiClient,
|
|
1362
|
-
|
|
1374
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1363
1375
|
logger: baseCtx.logger,
|
|
1364
1376
|
required: !!normalized.requiresRegion,
|
|
1365
1377
|
});
|
|
@@ -1409,7 +1421,7 @@ export async function registerCommands(program, commands, baseCtx) {
|
|
|
1409
1421
|
const region = await resolveRegion({
|
|
1410
1422
|
options: baseCtx.options,
|
|
1411
1423
|
apiClient,
|
|
1412
|
-
|
|
1424
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1413
1425
|
logger: baseCtx.logger,
|
|
1414
1426
|
required: !!normalized.requiresRegion,
|
|
1415
1427
|
});
|
|
@@ -1431,7 +1443,7 @@ export async function registerCommands(program, commands, baseCtx) {
|
|
|
1431
1443
|
const region = await resolveRegion({
|
|
1432
1444
|
options: baseCtx.options,
|
|
1433
1445
|
apiClient,
|
|
1434
|
-
|
|
1446
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1435
1447
|
logger: baseCtx.logger,
|
|
1436
1448
|
required: !!normalized.requiresRegion,
|
|
1437
1449
|
});
|