@agentuity/cli 0.1.8 → 0.1.10
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 -18
- 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/ai/skills/generator.d.ts.map +1 -1
- package/dist/cmd/ai/skills/generator.js +9 -1
- package/dist/cmd/ai/skills/generator.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/metadata-generator.js +1 -1
- package/dist/cmd/build/vite/metadata-generator.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 +50 -1
- 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 +54 -2
- 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 +26 -4
- package/dist/cmd/cloud/sandbox/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/index.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/index.js +3 -1
- package/dist/cmd/cloud/sandbox/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/list.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/list.js +16 -9
- 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 +51 -2
- package/dist/cmd/cloud/sandbox/run.js.map +1 -1
- package/dist/cmd/cloud/sandbox/runtime/index.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/runtime/index.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/runtime/index.js +19 -0
- package/dist/cmd/cloud/sandbox/runtime/index.js.map +1 -0
- package/dist/cmd/cloud/sandbox/runtime/list.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/runtime/list.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/runtime/list.js +68 -0
- package/dist/cmd/cloud/sandbox/runtime/list.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/create.js +41 -8
- 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/get.js +5 -5
- package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/index.js +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/list.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/list.js +8 -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 +14 -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 +40 -12
- 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 +61 -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 +51 -17
- package/src/cmd/ai/capabilities/show.ts +12 -15
- package/src/cmd/ai/prompt/llm.ts +5 -5
- package/src/cmd/ai/skills/generator.ts +9 -1
- package/src/cmd/auth/logout.ts +5 -2
- package/src/cmd/build/ast.ts +160 -1
- package/src/cmd/build/vite/metadata-generator.ts +1 -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 +63 -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 +61 -2
- 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 +27 -4
- package/src/cmd/cloud/sandbox/index.ts +3 -1
- package/src/cmd/cloud/sandbox/list.ts +16 -9
- 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 +58 -2
- package/src/cmd/cloud/sandbox/runtime/index.ts +20 -0
- package/src/cmd/cloud/sandbox/runtime/list.ts +75 -0
- package/src/cmd/cloud/sandbox/snapshot/create.ts +53 -8
- package/src/cmd/cloud/sandbox/snapshot/delete.ts +4 -4
- package/src/cmd/cloud/sandbox/snapshot/get.ts +5 -5
- package/src/cmd/cloud/sandbox/snapshot/index.ts +1 -1
- package/src/cmd/cloud/sandbox/snapshot/list.ts +8 -4
- package/src/cmd/cloud/sandbox/snapshot/tag.ts +20 -4
- 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 +52 -13
- package/src/config.ts +74 -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,11 +550,29 @@ 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;
|
|
@@ -562,46 +580,46 @@ async function getCachedRegions(logger) {
|
|
|
562
580
|
const data = await file.json();
|
|
563
581
|
const age = Date.now() - data.timestamp;
|
|
564
582
|
if (age > REGIONS_CACHE_MAX_AGE_MS) {
|
|
565
|
-
logger.trace('regions cache expired (age: %dms)', age);
|
|
583
|
+
logger.trace('regions cache expired for profile %s (age: %dms)', profileName, age);
|
|
566
584
|
return null;
|
|
567
585
|
}
|
|
568
|
-
logger.trace('using cached regions (age: %dms)', age);
|
|
586
|
+
logger.trace('using cached regions for profile %s (age: %dms)', profileName, age);
|
|
569
587
|
return data.regions;
|
|
570
588
|
}
|
|
571
589
|
catch (error) {
|
|
572
|
-
logger.trace('failed to read regions cache: %s', error);
|
|
590
|
+
logger.trace('failed to read regions cache for profile %s: %s', profileName, error);
|
|
573
591
|
return null;
|
|
574
592
|
}
|
|
575
593
|
}
|
|
576
|
-
async function saveRegionsCache(regions, logger) {
|
|
594
|
+
async function saveRegionsCache(profileName, regions, logger) {
|
|
577
595
|
try {
|
|
578
596
|
const cacheDir = getDefaultConfigDir();
|
|
579
597
|
await mkdir(cacheDir, { recursive: true });
|
|
580
|
-
const cachePath = join(cacheDir,
|
|
598
|
+
const cachePath = join(cacheDir, getRegionsCacheFile(profileName));
|
|
581
599
|
const data = {
|
|
582
600
|
timestamp: Date.now(),
|
|
583
601
|
regions,
|
|
584
602
|
};
|
|
585
603
|
await Bun.write(cachePath, JSON.stringify(data));
|
|
586
|
-
logger.trace('saved regions cache');
|
|
604
|
+
logger.trace('saved regions cache for profile %s', profileName);
|
|
587
605
|
}
|
|
588
606
|
catch (error) {
|
|
589
|
-
logger.trace('failed to save regions cache: %s', error);
|
|
607
|
+
logger.trace('failed to save regions cache for profile %s: %s', profileName, error);
|
|
590
608
|
}
|
|
591
609
|
}
|
|
592
|
-
async function fetchRegionsWithCache(apiClient, logger) {
|
|
593
|
-
const cached = await getCachedRegions(logger);
|
|
610
|
+
async function fetchRegionsWithCache(profileName, apiClient, logger) {
|
|
611
|
+
const cached = await getCachedRegions(profileName, logger);
|
|
594
612
|
if (cached) {
|
|
595
613
|
return cached;
|
|
596
614
|
}
|
|
597
615
|
const regions = await listRegions(apiClient);
|
|
598
|
-
await saveRegionsCache(regions, logger);
|
|
616
|
+
await saveRegionsCache(profileName, regions, logger);
|
|
599
617
|
return regions;
|
|
600
618
|
}
|
|
601
619
|
async function resolveRegion(opts) {
|
|
602
|
-
const { options, apiClient, logger, required } = opts;
|
|
620
|
+
const { options, apiClient, profileName, logger, required } = opts;
|
|
603
621
|
// Fetch regions (with caching)
|
|
604
|
-
const regions = await fetchRegionsWithCache(apiClient, logger);
|
|
622
|
+
const regions = await fetchRegionsWithCache(profileName, apiClient, logger);
|
|
605
623
|
// No regions available
|
|
606
624
|
if (regions.length === 0) {
|
|
607
625
|
if (required) {
|
|
@@ -876,7 +894,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
876
894
|
if (error &&
|
|
877
895
|
typeof error === 'object' &&
|
|
878
896
|
'name' in error &&
|
|
879
|
-
error.name === '
|
|
897
|
+
error.name === 'ProjectConfigNotFoundException') {
|
|
880
898
|
// If TTY is available, prompt user to select a project
|
|
881
899
|
const hasTTY = process.stdin.isTTY && process.stdout.isTTY;
|
|
882
900
|
if (hasTTY) {
|
|
@@ -964,6 +982,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
964
982
|
return resolveRegion({
|
|
965
983
|
options: options,
|
|
966
984
|
apiClient,
|
|
985
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
967
986
|
logger: baseCtx.logger,
|
|
968
987
|
required: !!normalized.requiresRegion,
|
|
969
988
|
region: project?.region,
|
|
@@ -1021,6 +1040,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
1021
1040
|
return resolveRegion({
|
|
1022
1041
|
options: options,
|
|
1023
1042
|
apiClient,
|
|
1043
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1024
1044
|
logger: baseCtx.logger,
|
|
1025
1045
|
required: !!normalized.requiresRegion,
|
|
1026
1046
|
region: project?.region,
|
|
@@ -1106,6 +1126,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
1106
1126
|
const region = await resolveRegion({
|
|
1107
1127
|
options: options,
|
|
1108
1128
|
apiClient,
|
|
1129
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1109
1130
|
logger: baseCtx.logger,
|
|
1110
1131
|
required: !!normalized.requiresRegion,
|
|
1111
1132
|
region: project?.region,
|
|
@@ -1159,6 +1180,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
1159
1180
|
const region = await resolveRegion({
|
|
1160
1181
|
options: options,
|
|
1161
1182
|
apiClient,
|
|
1183
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1162
1184
|
logger: baseCtx.logger,
|
|
1163
1185
|
required: !!normalized.requiresRegion,
|
|
1164
1186
|
});
|
|
@@ -1248,6 +1270,7 @@ async function registerSubcommand(parent, subcommand, baseCtx, hidden) {
|
|
|
1248
1270
|
const region = await resolveRegion({
|
|
1249
1271
|
options: options,
|
|
1250
1272
|
apiClient,
|
|
1273
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1251
1274
|
logger: baseCtx.logger,
|
|
1252
1275
|
required: !!normalized.requiresRegion,
|
|
1253
1276
|
region: project?.region,
|
|
@@ -1348,6 +1371,7 @@ export async function registerCommands(program, commands, baseCtx) {
|
|
|
1348
1371
|
const region = await resolveRegion({
|
|
1349
1372
|
options: baseCtx.options,
|
|
1350
1373
|
apiClient,
|
|
1374
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1351
1375
|
logger: baseCtx.logger,
|
|
1352
1376
|
required: !!normalized.requiresRegion,
|
|
1353
1377
|
});
|
|
@@ -1397,6 +1421,7 @@ export async function registerCommands(program, commands, baseCtx) {
|
|
|
1397
1421
|
const region = await resolveRegion({
|
|
1398
1422
|
options: baseCtx.options,
|
|
1399
1423
|
apiClient,
|
|
1424
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1400
1425
|
logger: baseCtx.logger,
|
|
1401
1426
|
required: !!normalized.requiresRegion,
|
|
1402
1427
|
});
|
|
@@ -1418,6 +1443,7 @@ export async function registerCommands(program, commands, baseCtx) {
|
|
|
1418
1443
|
const region = await resolveRegion({
|
|
1419
1444
|
options: baseCtx.options,
|
|
1420
1445
|
apiClient,
|
|
1446
|
+
profileName: baseCtx.config?.name ?? defaultProfileName,
|
|
1421
1447
|
logger: baseCtx.logger,
|
|
1422
1448
|
required: !!normalized.requiresRegion,
|
|
1423
1449
|
});
|