@agentuity/cli 0.0.51 → 0.0.52
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 +79 -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 +556 -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 +15 -21
- package/src/cmd/build/plugin.ts +2 -1
- package/src/cmd/cloud/session/get.ts +20 -14
- package/src/cmd/cloud/session/list.ts +1 -1
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
import { createSubcommand } from '../../../types';
|
|
2
|
+
import { getCommand } from '../../../command-prefix';
|
|
3
|
+
export const llmSubcommand = createSubcommand({
|
|
4
|
+
name: 'llm',
|
|
5
|
+
description: 'Generate a comprehensive prompt for LLM agents',
|
|
6
|
+
tags: ['read-only', 'fast'],
|
|
7
|
+
idempotent: true,
|
|
8
|
+
examples: [getCommand('prompt llm')],
|
|
9
|
+
async handler(_ctx) {
|
|
10
|
+
const prompt = generateLLMPrompt();
|
|
11
|
+
console.log(prompt);
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
function generateLLMPrompt() {
|
|
15
|
+
return `# Agentuity CLI - Agent Usage Guide
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
The Agentuity CLI is an agent-friendly command-line interface for managing cloud deployments, projects, secrets, and infrastructure. It provides machine-readable output, introspection capabilities, and safety features designed for automated agent usage.
|
|
20
|
+
|
|
21
|
+
## Key Principles for Agent Usage
|
|
22
|
+
|
|
23
|
+
1. **Always use \`--json\` for machine-readable output**
|
|
24
|
+
- All commands support \`--json\` for structured output
|
|
25
|
+
- Errors are also output as JSON when using \`--error-format=json\` (automatically set with \`--json\`)
|
|
26
|
+
|
|
27
|
+
2. **Use \`--explain\` before executing destructive operations**
|
|
28
|
+
- Preview what a command will do without executing it
|
|
29
|
+
- Provides structured explanation with steps, prerequisites, and warnings
|
|
30
|
+
|
|
31
|
+
3. **Use \`--dry-run\` for safe exploration**
|
|
32
|
+
- Execute validation and planning without making changes
|
|
33
|
+
- Test commands safely before actual execution
|
|
34
|
+
|
|
35
|
+
4. **Discover capabilities programmatically**
|
|
36
|
+
- Use \`${getCommand('--help=json')}\` to get the complete CLI schema
|
|
37
|
+
- Use \`${getCommand('capabilities show --json')}\` to discover available tasks
|
|
38
|
+
- Use \`${getCommand('schema show')}\` for detailed command metadata
|
|
39
|
+
|
|
40
|
+
## Machine-Readable Modes
|
|
41
|
+
|
|
42
|
+
### Global Flags
|
|
43
|
+
|
|
44
|
+
- \`--json\`: Output in JSON format (machine-readable)
|
|
45
|
+
- \`--quiet\`: Suppress non-essential output (only errors shown)
|
|
46
|
+
- \`--no-progress\`: Disable progress indicators and spinners
|
|
47
|
+
- \`--error-format json\`: Structured error output with error codes
|
|
48
|
+
- \`--explain\`: Show what command would do without executing
|
|
49
|
+
- \`--dry-run\`: Execute without making changes
|
|
50
|
+
- \`--color never\`: Disable color output
|
|
51
|
+
|
|
52
|
+
### Recommended Flag Combinations
|
|
53
|
+
|
|
54
|
+
For agent usage:
|
|
55
|
+
\`\`\`bash
|
|
56
|
+
${getCommand('--json --quiet command')}
|
|
57
|
+
\`\`\`
|
|
58
|
+
|
|
59
|
+
For safe exploration:
|
|
60
|
+
\`\`\`bash
|
|
61
|
+
${getCommand('--explain command args')}
|
|
62
|
+
${getCommand('--dry-run command args')}
|
|
63
|
+
\`\`\`
|
|
64
|
+
|
|
65
|
+
## Introspection Capabilities
|
|
66
|
+
|
|
67
|
+
### 1. Schema Discovery
|
|
68
|
+
|
|
69
|
+
Get the complete CLI schema with all commands, arguments, options, and requirements:
|
|
70
|
+
|
|
71
|
+
\`\`\`bash
|
|
72
|
+
${getCommand('--help=json')}
|
|
73
|
+
${getCommand('schema show')}
|
|
74
|
+
\`\`\`
|
|
75
|
+
|
|
76
|
+
The schema includes:
|
|
77
|
+
- Command names and descriptions
|
|
78
|
+
- Arguments (type, required/optional, variadic)
|
|
79
|
+
- Options (type, defaults, enums)
|
|
80
|
+
- Authentication requirements
|
|
81
|
+
- Project requirements
|
|
82
|
+
- Examples
|
|
83
|
+
|
|
84
|
+
### 2. Capabilities Discovery
|
|
85
|
+
|
|
86
|
+
Get high-level tasks and workflows:
|
|
87
|
+
|
|
88
|
+
\`\`\`bash
|
|
89
|
+
${getCommand('capabilities show --json')}
|
|
90
|
+
\`\`\`
|
|
91
|
+
|
|
92
|
+
This returns:
|
|
93
|
+
- Functional capabilities (auth, projects, deployment, secrets, etc.)
|
|
94
|
+
- Common workflows with step-by-step instructions
|
|
95
|
+
- Requirements for each capability (auth, project)
|
|
96
|
+
|
|
97
|
+
### 3. Examples
|
|
98
|
+
|
|
99
|
+
All commands include examples in their help text and schema:
|
|
100
|
+
|
|
101
|
+
\`\`\`bash
|
|
102
|
+
${getCommand('command subcommand --help')}
|
|
103
|
+
\`\`\`
|
|
104
|
+
|
|
105
|
+
## Error Handling
|
|
106
|
+
|
|
107
|
+
### Structured Errors
|
|
108
|
+
|
|
109
|
+
When using \`--json\` or \`--error-format=json\`, errors are structured:
|
|
110
|
+
|
|
111
|
+
\`\`\`json
|
|
112
|
+
{
|
|
113
|
+
"error": {
|
|
114
|
+
"code": "PROJECT_NOT_FOUND",
|
|
115
|
+
"message": "Invalid project folder",
|
|
116
|
+
"details": {},
|
|
117
|
+
"suggestions": [
|
|
118
|
+
"Use --dir to specify a different directory",
|
|
119
|
+
"Change to a directory containing agentuity.json",
|
|
120
|
+
"Run \\"${getCommand('project create')}\\" to create a new project"
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
\`\`\`
|
|
125
|
+
|
|
126
|
+
### Common Error Codes
|
|
127
|
+
|
|
128
|
+
- \`VALIDATION_FAILED\`: Invalid arguments or options
|
|
129
|
+
- \`AUTH_REQUIRED\`: Authentication needed
|
|
130
|
+
- \`PROJECT_NOT_FOUND\`: No project configuration found
|
|
131
|
+
- \`REGION_REQUIRED\`: Cloud region must be specified
|
|
132
|
+
- \`RESOURCE_NOT_FOUND\`: Requested resource doesn't exist
|
|
133
|
+
- \`PERMISSION_DENIED\`: Insufficient permissions
|
|
134
|
+
|
|
135
|
+
### Error Recovery
|
|
136
|
+
|
|
137
|
+
Always check error details and suggestions for recovery steps. Errors include actionable guidance.
|
|
138
|
+
|
|
139
|
+
## Authentication Flow
|
|
140
|
+
|
|
141
|
+
### Required for Most Operations
|
|
142
|
+
|
|
143
|
+
Many commands require authentication. Check the schema's \`requires.auth\` field.
|
|
144
|
+
|
|
145
|
+
### Authentication Commands
|
|
146
|
+
|
|
147
|
+
\`\`\`bash
|
|
148
|
+
# Check if authenticated
|
|
149
|
+
${getCommand('auth whoami')}
|
|
150
|
+
|
|
151
|
+
# Login (interactive)
|
|
152
|
+
${getCommand('auth login')}
|
|
153
|
+
|
|
154
|
+
# Signup (interactive)
|
|
155
|
+
${getCommand('auth signup')}
|
|
156
|
+
\`\`\`
|
|
157
|
+
|
|
158
|
+
### Non-Interactive Environments
|
|
159
|
+
|
|
160
|
+
In non-TTY environments:
|
|
161
|
+
- Commands requiring interactive input will fail with clear error messages
|
|
162
|
+
- Use API keys or pre-authenticate before running automated tasks
|
|
163
|
+
- Some commands support \`--confirm\` to skip interactive prompts
|
|
164
|
+
|
|
165
|
+
## Project Context
|
|
166
|
+
|
|
167
|
+
### Project-Based Commands
|
|
168
|
+
|
|
169
|
+
Commands requiring a project look for \`agentuity.json\` in the current directory.
|
|
170
|
+
|
|
171
|
+
### Specifying Project Directory
|
|
172
|
+
|
|
173
|
+
\`\`\`bash
|
|
174
|
+
${getCommand('--dir /path/to/project command')}
|
|
175
|
+
\`\`\`
|
|
176
|
+
|
|
177
|
+
### Creating a Project
|
|
178
|
+
|
|
179
|
+
\`\`\`bash
|
|
180
|
+
${getCommand('project create')}
|
|
181
|
+
\`\`\`
|
|
182
|
+
|
|
183
|
+
## Common Workflows
|
|
184
|
+
|
|
185
|
+
### 1. Initial Setup
|
|
186
|
+
|
|
187
|
+
\`\`\`bash
|
|
188
|
+
${getCommand('auth signup')}
|
|
189
|
+
${getCommand('auth login')}
|
|
190
|
+
${getCommand('project create')}
|
|
191
|
+
${getCommand('secret set API_KEY <value>')}
|
|
192
|
+
\`\`\`
|
|
193
|
+
|
|
194
|
+
### 2. Deploy Application
|
|
195
|
+
|
|
196
|
+
\`\`\`bash
|
|
197
|
+
# Preview deployment
|
|
198
|
+
${getCommand('--explain bundle')}
|
|
199
|
+
|
|
200
|
+
# Test deployment (dry-run)
|
|
201
|
+
${getCommand('--dry-run cloud deploy')}
|
|
202
|
+
|
|
203
|
+
# Actual deployment
|
|
204
|
+
${getCommand('bundle')}
|
|
205
|
+
${getCommand('cloud deploy')}
|
|
206
|
+
|
|
207
|
+
# Check deployment status
|
|
208
|
+
${getCommand('--json cloud deployment show')}
|
|
209
|
+
\`\`\`
|
|
210
|
+
|
|
211
|
+
### 3. Manage Secrets
|
|
212
|
+
|
|
213
|
+
\`\`\`bash
|
|
214
|
+
${getCommand('--json secret list')}
|
|
215
|
+
${getCommand('secret set DATABASE_URL <value>')}
|
|
216
|
+
${getCommand('secret get DATABASE_URL')}
|
|
217
|
+
\`\`\`
|
|
218
|
+
|
|
219
|
+
### 4. List Resources
|
|
220
|
+
|
|
221
|
+
\`\`\`bash
|
|
222
|
+
${getCommand('--json project list')}
|
|
223
|
+
${getCommand('--json cloud deployment list')}
|
|
224
|
+
${getCommand('--json kv list')}
|
|
225
|
+
\`\`\`
|
|
226
|
+
|
|
227
|
+
## Best Practices
|
|
228
|
+
|
|
229
|
+
### 1. Always Validate First
|
|
230
|
+
|
|
231
|
+
- Use \`--explain\` to understand what will happen
|
|
232
|
+
- Use \`--dry-run\` for commands that mutate state
|
|
233
|
+
- Check schema to understand command requirements
|
|
234
|
+
|
|
235
|
+
### 2. Use Structured Output
|
|
236
|
+
|
|
237
|
+
- Always use \`--json\` when parsing output programmatically
|
|
238
|
+
- Parse error messages from structured error format
|
|
239
|
+
- Never rely on human-readable text parsing
|
|
240
|
+
|
|
241
|
+
### 3. Handle Non-Interactive Mode
|
|
242
|
+
|
|
243
|
+
- Detect TTY status
|
|
244
|
+
- Provide all required arguments upfront
|
|
245
|
+
- Use \`--confirm\` or similar flags to skip prompts
|
|
246
|
+
|
|
247
|
+
### 4. Check Requirements
|
|
248
|
+
|
|
249
|
+
Before running a command, verify from schema:
|
|
250
|
+
- Does it require authentication?
|
|
251
|
+
- Does it require a project context?
|
|
252
|
+
- Does it require organization or region selection?
|
|
253
|
+
|
|
254
|
+
### 5. Progressive Enhancement
|
|
255
|
+
|
|
256
|
+
Start with safe operations:
|
|
257
|
+
1. Discover capabilities (\`capabilities show\`)
|
|
258
|
+
2. Get schema for specific command (\`--help=json\`)
|
|
259
|
+
3. Use \`--explain\` to preview
|
|
260
|
+
4. Use \`--dry-run\` to test
|
|
261
|
+
5. Execute actual command
|
|
262
|
+
|
|
263
|
+
### 6. Error Recovery
|
|
264
|
+
|
|
265
|
+
When an error occurs:
|
|
266
|
+
1. Parse the error code
|
|
267
|
+
2. Read the suggestions array
|
|
268
|
+
3. Take corrective action
|
|
269
|
+
4. Retry the operation
|
|
270
|
+
|
|
271
|
+
## Agent Safety Guidelines
|
|
272
|
+
|
|
273
|
+
### Destructive Operations
|
|
274
|
+
|
|
275
|
+
For destructive operations (delete, remove, rollback):
|
|
276
|
+
1. ALWAYS use \`--explain\` first
|
|
277
|
+
2. ALWAYS use \`--dry-run\` before execution
|
|
278
|
+
3. Verify the operation matches intent
|
|
279
|
+
4. Only then execute the actual command
|
|
280
|
+
|
|
281
|
+
### Confirmation Flags
|
|
282
|
+
|
|
283
|
+
Many destructive commands support:
|
|
284
|
+
- \`--confirm\`: Skip confirmation prompts (be careful!)
|
|
285
|
+
- \`--no-confirm\`: Disable confirmation (dangerous!)
|
|
286
|
+
|
|
287
|
+
### Non-Destructive Exploration
|
|
288
|
+
|
|
289
|
+
These are always safe:
|
|
290
|
+
- \`--help\`, \`--help=json\`
|
|
291
|
+
- \`capabilities show\`
|
|
292
|
+
- \`schema show\`
|
|
293
|
+
- \`--explain\` (never executes)
|
|
294
|
+
- \`--dry-run\` (no side effects)
|
|
295
|
+
- List commands (\`list\`, \`ls\`)
|
|
296
|
+
- Show commands (\`show\`, \`get\` without mutations)
|
|
297
|
+
|
|
298
|
+
## Examples for Common Tasks
|
|
299
|
+
|
|
300
|
+
### Discover All Commands
|
|
301
|
+
|
|
302
|
+
\`\`\`bash
|
|
303
|
+
${getCommand('--help=json')} | jq '.commands[].name'
|
|
304
|
+
\`\`\`
|
|
305
|
+
|
|
306
|
+
### Find Commands Requiring Auth
|
|
307
|
+
|
|
308
|
+
\`\`\`bash
|
|
309
|
+
${getCommand('--help=json')} | jq '.commands[] | select(.requires.auth == true) | .name'
|
|
310
|
+
\`\`\`
|
|
311
|
+
|
|
312
|
+
### Get Details About a Specific Command
|
|
313
|
+
|
|
314
|
+
\`\`\`bash
|
|
315
|
+
${getCommand('auth ssh delete --help')}
|
|
316
|
+
${getCommand('--help=json')} | jq '.commands[] | select(.name == "auth")'
|
|
317
|
+
\`\`\`
|
|
318
|
+
|
|
319
|
+
### Test a Deployment
|
|
320
|
+
|
|
321
|
+
\`\`\`bash
|
|
322
|
+
${getCommand('--explain bundle')}
|
|
323
|
+
${getCommand('--dry-run cloud deploy')}
|
|
324
|
+
${getCommand('cloud deploy')}
|
|
325
|
+
\`\`\`
|
|
326
|
+
|
|
327
|
+
### Safe SSH Key Deletion
|
|
328
|
+
|
|
329
|
+
\`\`\`bash
|
|
330
|
+
${getCommand('--explain auth ssh delete abc123')}
|
|
331
|
+
${getCommand('--dry-run auth ssh delete abc123')}
|
|
332
|
+
${getCommand('auth ssh delete abc123')}
|
|
333
|
+
\`\`\`
|
|
334
|
+
|
|
335
|
+
## Version Information
|
|
336
|
+
|
|
337
|
+
This prompt is for Agentuity CLI. Always check the version:
|
|
338
|
+
|
|
339
|
+
\`\`\`bash
|
|
340
|
+
${getCommand('version')}
|
|
341
|
+
\`\`\`
|
|
342
|
+
|
|
343
|
+
The CLI follows semantic versioning. Check schema compatibility across versions.
|
|
344
|
+
|
|
345
|
+
## Getting Help
|
|
346
|
+
|
|
347
|
+
- CLI Schema: \`${getCommand('--help=json')}\`
|
|
348
|
+
- Capabilities: \`${getCommand('capabilities show')}\`
|
|
349
|
+
- Command Help: \`${getCommand('command --help')}\`
|
|
350
|
+
- Examples: Included in help text for all commands
|
|
351
|
+
|
|
352
|
+
## Summary
|
|
353
|
+
|
|
354
|
+
The Agentuity CLI is designed for agent-friendly usage with:
|
|
355
|
+
- Complete introspection via \`--help=json\` and \`schema\` commands
|
|
356
|
+
- Machine-readable output via \`--json\`
|
|
357
|
+
- Safety features via \`--explain\` and \`--dry-run\`
|
|
358
|
+
- Structured errors with recovery suggestions
|
|
359
|
+
- Comprehensive examples for all commands
|
|
360
|
+
|
|
361
|
+
Always start with discovery (\`capabilities\`, \`schema\`), use safety features (\`--explain\`, \`--dry-run\`), and rely on structured output (\`--json\`) for reliable automation.
|
|
362
|
+
`;
|
|
363
|
+
}
|
|
364
|
+
export default llmSubcommand;
|
|
365
|
+
//# sourceMappingURL=llm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../../../../src/cmd/ai/prompt/llm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createCommand } from '../../../types';
|
|
2
|
+
import { showSubcommand } from './show';
|
|
3
|
+
export const schemaCommand = createCommand({
|
|
4
|
+
name: 'schema',
|
|
5
|
+
description: 'Output CLI schema in machine-readable format',
|
|
6
|
+
tags: ['read-only', 'fast'],
|
|
7
|
+
subcommands: [showSubcommand],
|
|
8
|
+
});
|
|
9
|
+
export default schemaCommand;
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/ai/schema/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,CAAC,MAAM,aAAa,GAAsB,aAAa,CAAC;IAC7D,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,8CAA8C;IAC3D,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,CAAC,cAAc,CAAC;CAC7B,CAAC,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createSubcommand } from '../../../types';
|
|
2
|
+
import { ErrorCode } from '../../../errors';
|
|
3
|
+
import { getCommand } from '../../../command-prefix';
|
|
4
|
+
export const showSubcommand = createSubcommand({
|
|
5
|
+
name: 'show',
|
|
6
|
+
description: 'Display the complete CLI schema',
|
|
7
|
+
tags: ['read-only', 'fast'],
|
|
8
|
+
idempotent: true,
|
|
9
|
+
examples: [getCommand('schema show'), getCommand('--help=json')],
|
|
10
|
+
async handler(ctx) {
|
|
11
|
+
const { logger } = ctx;
|
|
12
|
+
// Access the schema stored in the global context
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
|
+
const schema = global.__CLI_SCHEMA__;
|
|
15
|
+
if (!schema) {
|
|
16
|
+
logger.fatal('Schema not available. This is a CLI bug.', ErrorCode.INTERNAL_ERROR);
|
|
17
|
+
}
|
|
18
|
+
// Always output JSON (this command is primarily for machine consumption)
|
|
19
|
+
console.log(JSON.stringify(schema, null, 2));
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
export default showSubcommand;
|
|
23
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../../../src/cmd/ai/schema/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;IAC9C,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,iCAAiC;IAC9C,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAChE,KAAK,CAAC,OAAO,CAAC,GAAmB;QAChC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;QAEvB,iDAAiD;QACjD,8DAA8D;QAC9D,MAAM,MAAM,GAAI,MAAc,CAAC,cAAc,CAAC;QAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;QACpF,CAAC;QAED,yEAAyE;QACzE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;CACD,CAAC,CAAC;AAEH,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { APIError, APIResponseSchema, APIResponseSchemaOptionalData } from '@agentuity/server';
|
|
3
|
+
// Zod schemas for API validation
|
|
4
|
+
const OTPStartDataSchema = z.object({
|
|
5
|
+
otp: z.string(),
|
|
6
|
+
});
|
|
7
|
+
const OTPCompleteDataSchema = z.object({
|
|
8
|
+
apiKey: z.string(),
|
|
9
|
+
userId: z.string(),
|
|
10
|
+
expires: z.number(),
|
|
11
|
+
});
|
|
12
|
+
const SignupCompleteDataSchema = z.object({
|
|
13
|
+
userId: z.string(),
|
|
14
|
+
apiKey: z.string(),
|
|
15
|
+
expiresAt: z.number(),
|
|
16
|
+
});
|
|
17
|
+
const OTPCheckRequestSchema = z.object({
|
|
18
|
+
otp: z.string(),
|
|
19
|
+
});
|
|
20
|
+
export async function generateLoginOTP(apiClient) {
|
|
21
|
+
const resp = await apiClient.request('GET', '/cli/auth/start', APIResponseSchema(OTPStartDataSchema));
|
|
22
|
+
if (!resp.success) {
|
|
23
|
+
throw new Error(resp.message);
|
|
24
|
+
}
|
|
25
|
+
if (!resp.data) {
|
|
26
|
+
throw new Error('No OTP returned from server');
|
|
27
|
+
}
|
|
28
|
+
return resp.data.otp;
|
|
29
|
+
}
|
|
30
|
+
export async function pollForLoginCompletion(apiClient, otp, timeoutMs = 60000) {
|
|
31
|
+
const started = Date.now();
|
|
32
|
+
while (Date.now() - started < timeoutMs) {
|
|
33
|
+
const resp = await apiClient.request('POST', '/cli/auth/check', APIResponseSchemaOptionalData(OTPCompleteDataSchema), { otp }, OTPCheckRequestSchema);
|
|
34
|
+
if (!resp.success) {
|
|
35
|
+
throw new Error(resp.message);
|
|
36
|
+
}
|
|
37
|
+
if (resp.data) {
|
|
38
|
+
return {
|
|
39
|
+
apiKey: resp.data.apiKey,
|
|
40
|
+
userId: resp.data.userId,
|
|
41
|
+
expires: new Date(resp.data.expires),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
await Bun.sleep(2000);
|
|
45
|
+
}
|
|
46
|
+
throw new Error('Login timed out');
|
|
47
|
+
}
|
|
48
|
+
export function generateSignupOTP() {
|
|
49
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
50
|
+
let result = '';
|
|
51
|
+
const array = new Uint8Array(5);
|
|
52
|
+
crypto.getRandomValues(array);
|
|
53
|
+
for (let i = 0; i < 5; i++) {
|
|
54
|
+
result += chars[array[i] % chars.length];
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
export async function pollForSignupCompletion(apiClient, otp, timeoutMs = 350000) {
|
|
59
|
+
const started = Date.now();
|
|
60
|
+
while (Date.now() - started < timeoutMs) {
|
|
61
|
+
try {
|
|
62
|
+
const resp = await apiClient.request('GET', `/cli/auth/signup/${otp}`, APIResponseSchema(SignupCompleteDataSchema));
|
|
63
|
+
if (!resp.success) {
|
|
64
|
+
throw new Error(resp.message);
|
|
65
|
+
}
|
|
66
|
+
if (resp.data) {
|
|
67
|
+
return {
|
|
68
|
+
apiKey: resp.data.apiKey,
|
|
69
|
+
userId: resp.data.userId,
|
|
70
|
+
expires: new Date(resp.data.expiresAt),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (error instanceof APIError && error.status === 404) {
|
|
76
|
+
await Bun.sleep(2000);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
await Bun.sleep(2000);
|
|
82
|
+
}
|
|
83
|
+
throw new Error('Signup timed out');
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/cmd/auth/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createCommand } from '../../types';
|
|
2
|
+
import { loginCommand } from './login';
|
|
3
|
+
import { logoutCommand } from './logout';
|
|
4
|
+
import { signupCommand } from './signup';
|
|
5
|
+
import { whoamiCommand } from './whoami';
|
|
6
|
+
import { sshSubcommand } from './ssh';
|
|
7
|
+
export const command = createCommand({
|
|
8
|
+
name: 'auth',
|
|
9
|
+
description: 'Authentication and authorization related commands',
|
|
10
|
+
tags: ['read-only', 'fast'],
|
|
11
|
+
subcommands: [loginCommand, logoutCommand, signupCommand, whoamiCommand, sshSubcommand],
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmd/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,mDAAmD;IAChE,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC;CACvF,CAAC,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { createSubcommand } from '../../types';
|
|
2
|
+
import { UpgradeRequiredError, ValidationError } from '@agentuity/server';
|
|
3
|
+
import { getAppBaseURL } from '../../api';
|
|
4
|
+
import { saveAuth } from '../../config';
|
|
5
|
+
import { generateLoginOTP, pollForLoginCompletion } from './api';
|
|
6
|
+
import * as tui from '../../tui';
|
|
7
|
+
import { getCommand } from '../../command-prefix';
|
|
8
|
+
import { ErrorCode } from '../../errors';
|
|
9
|
+
export const loginCommand = createSubcommand({
|
|
10
|
+
name: 'login',
|
|
11
|
+
description: 'Login to the Agentuity Platform using a browser-based authentication flow',
|
|
12
|
+
tags: ['mutating', 'creates-resource', 'slow', 'api-intensive'],
|
|
13
|
+
toplevel: true,
|
|
14
|
+
idempotent: false,
|
|
15
|
+
requires: { apiClient: true },
|
|
16
|
+
examples: [getCommand('auth login'), getCommand('login')],
|
|
17
|
+
async handler(ctx) {
|
|
18
|
+
const { logger, config, apiClient } = ctx;
|
|
19
|
+
if (!apiClient) {
|
|
20
|
+
throw new Error('API client is not available. This is likely a configuration or initialization issue.');
|
|
21
|
+
}
|
|
22
|
+
const appUrl = getAppBaseURL(config);
|
|
23
|
+
try {
|
|
24
|
+
const otp = await tui.spinner({
|
|
25
|
+
message: 'Generating login one time code...',
|
|
26
|
+
clearOnSuccess: true,
|
|
27
|
+
callback: () => {
|
|
28
|
+
return generateLoginOTP(apiClient);
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
if (!otp) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const authURL = `${appUrl}/auth/cli`;
|
|
35
|
+
const copied = await tui.copyToClipboard(otp);
|
|
36
|
+
tui.newline();
|
|
37
|
+
if (copied) {
|
|
38
|
+
console.log(`Code copied to clipboard: ${tui.bold(otp)}`);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.log('Copy the following code:');
|
|
42
|
+
tui.newline();
|
|
43
|
+
console.log(` ${tui.bold(otp)}`);
|
|
44
|
+
}
|
|
45
|
+
tui.newline();
|
|
46
|
+
console.log('Then open the URL in your browser and paste the code:');
|
|
47
|
+
tui.newline();
|
|
48
|
+
console.log(` ${tui.link(authURL)}`);
|
|
49
|
+
tui.newline();
|
|
50
|
+
console.log(tui.muted('This code will expire in 60 seconds'));
|
|
51
|
+
tui.newline();
|
|
52
|
+
console.log('Waiting for login to complete...');
|
|
53
|
+
const result = await pollForLoginCompletion(apiClient, otp);
|
|
54
|
+
await saveAuth({
|
|
55
|
+
apiKey: result.apiKey,
|
|
56
|
+
userId: result.userId,
|
|
57
|
+
expires: result.expires,
|
|
58
|
+
});
|
|
59
|
+
tui.newline();
|
|
60
|
+
tui.success('Welcome to Agentuity! You are now logged in');
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
logger.trace(error);
|
|
64
|
+
if (error instanceof UpgradeRequiredError) {
|
|
65
|
+
const bannerBody = `${error.message}\n\nVisit: ${tui.link('https://agentuity.dev/CLI/installation')}`;
|
|
66
|
+
tui.banner('CLI Upgrade Required', bannerBody);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
else if (error instanceof ValidationError) {
|
|
70
|
+
tui.error(`API error: ${error.message}`);
|
|
71
|
+
tui.warning(`API url: ${error.url}`);
|
|
72
|
+
error.issues.map((i) => tui.arrow(`${i.message} for ${i.path}`));
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
else if (error instanceof Error) {
|
|
76
|
+
logger.fatal(`Login failed: ${error.message}`, ErrorCode.AUTH_FAILED);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
logger.fatal('Login failed', ErrorCode.AUTH_FAILED);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cmd/auth/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createSubcommand } from '../../types';
|
|
2
|
+
import { clearAuth } from '../../config';
|
|
3
|
+
import * as tui from '../../tui';
|
|
4
|
+
import { getCommand } from '../../command-prefix';
|
|
5
|
+
export const logoutCommand = createSubcommand({
|
|
6
|
+
name: 'logout',
|
|
7
|
+
description: 'Logout of the Agentuity Cloud Platform',
|
|
8
|
+
tags: ['mutating', 'deletes-resource', 'fast', 'requires-auth'],
|
|
9
|
+
toplevel: true,
|
|
10
|
+
idempotent: false,
|
|
11
|
+
examples: [getCommand('auth logout'), getCommand('logout')],
|
|
12
|
+
async handler() {
|
|
13
|
+
await clearAuth();
|
|
14
|
+
tui.success('You have been logged out');
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/cmd/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC;IAC7C,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,wCAAwC;IACrD,IAAI,EAAE,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,eAAe,CAAC;IAC/D,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE3D,KAAK,CAAC,OAAO;QACZ,MAAM,SAAS,EAAE,CAAC;QAClB,GAAG,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACzC,CAAC;CACD,CAAC,CAAC"}
|