@indemn/cli 1.0.0
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/.claude-plugin/plugin.json +13 -0
- package/.mcp.json +9 -0
- package/README.md +225 -0
- package/dist/cli/agents.d.ts +3 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +187 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/auth.d.ts +3 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +161 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/chat.d.ts +3 -0
- package/dist/cli/chat.d.ts.map +1 -0
- package/dist/cli/chat.js +142 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/config.d.ts +3 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +119 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/eval.d.ts +3 -0
- package/dist/cli/eval.d.ts.map +1 -0
- package/dist/cli/eval.js +717 -0
- package/dist/cli/eval.js.map +1 -0
- package/dist/cli/functions.d.ts +3 -0
- package/dist/cli/functions.d.ts.map +1 -0
- package/dist/cli/functions.js +346 -0
- package/dist/cli/functions.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +64 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/kb.d.ts +3 -0
- package/dist/cli/kb.d.ts.map +1 -0
- package/dist/cli/kb.js +377 -0
- package/dist/cli/kb.js.map +1 -0
- package/dist/cli/utils/output.d.ts +6 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +36 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +15 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +4 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +814 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/sdk/agents.d.ts +13 -0
- package/dist/sdk/agents.d.ts.map +1 -0
- package/dist/sdk/agents.js +27 -0
- package/dist/sdk/agents.js.map +1 -0
- package/dist/sdk/auth.d.ts +18 -0
- package/dist/sdk/auth.d.ts.map +1 -0
- package/dist/sdk/auth.js +98 -0
- package/dist/sdk/auth.js.map +1 -0
- package/dist/sdk/chat.d.ts +17 -0
- package/dist/sdk/chat.d.ts.map +1 -0
- package/dist/sdk/chat.js +113 -0
- package/dist/sdk/chat.js.map +1 -0
- package/dist/sdk/client.d.ts +36 -0
- package/dist/sdk/client.d.ts.map +1 -0
- package/dist/sdk/client.js +219 -0
- package/dist/sdk/client.js.map +1 -0
- package/dist/sdk/config.d.ts +11 -0
- package/dist/sdk/config.d.ts.map +1 -0
- package/dist/sdk/config.js +20 -0
- package/dist/sdk/config.js.map +1 -0
- package/dist/sdk/eval.d.ts +13 -0
- package/dist/sdk/eval.d.ts.map +1 -0
- package/dist/sdk/eval.js +36 -0
- package/dist/sdk/eval.js.map +1 -0
- package/dist/sdk/functions.d.ts +30 -0
- package/dist/sdk/functions.d.ts.map +1 -0
- package/dist/sdk/functions.js +59 -0
- package/dist/sdk/functions.js.map +1 -0
- package/dist/sdk/index.d.ts +12 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +12 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/kb.d.ts +30 -0
- package/dist/sdk/kb.d.ts.map +1 -0
- package/dist/sdk/kb.js +102 -0
- package/dist/sdk/kb.js.map +1 -0
- package/dist/sdk/rubrics.d.ts +14 -0
- package/dist/sdk/rubrics.d.ts.map +1 -0
- package/dist/sdk/rubrics.js +29 -0
- package/dist/sdk/rubrics.js.map +1 -0
- package/dist/sdk/test-sets.d.ts +14 -0
- package/dist/sdk/test-sets.d.ts.map +1 -0
- package/dist/sdk/test-sets.js +29 -0
- package/dist/sdk/test-sets.js.map +1 -0
- package/dist/sdk/types.d.ts +305 -0
- package/dist/sdk/types.d.ts.map +1 -0
- package/dist/sdk/types.js +3 -0
- package/dist/sdk/types.js.map +1 -0
- package/package.json +40 -0
- package/skills/agent-setup/SKILL.md +131 -0
- package/skills/eval-orchestration/SKILL.md +257 -0
- package/skills/rubric-creation/SKILL.md +163 -0
- package/skills/test-set-creation/SKILL.md +250 -0
- package/src/cli/agents.ts +206 -0
- package/src/cli/auth.ts +170 -0
- package/src/cli/chat.ts +161 -0
- package/src/cli/config.ts +131 -0
- package/src/cli/eval.ts +750 -0
- package/src/cli/functions.ts +330 -0
- package/src/cli/index.ts +68 -0
- package/src/cli/kb.ts +412 -0
- package/src/cli/utils/output.ts +42 -0
- package/src/mcp/server.ts +17 -0
- package/src/mcp/tools.ts +971 -0
- package/src/sdk/agents.ts +47 -0
- package/src/sdk/auth.ts +132 -0
- package/src/sdk/chat.ts +133 -0
- package/src/sdk/client.ts +238 -0
- package/src/sdk/config.ts +28 -0
- package/src/sdk/eval.ts +57 -0
- package/src/sdk/functions.ts +103 -0
- package/src/sdk/index.ts +11 -0
- package/src/sdk/kb.ts +183 -0
- package/src/sdk/rubrics.ts +35 -0
- package/src/sdk/test-sets.ts +35 -0
- package/src/sdk/types.ts +347 -0
- package/test/fixtures/test-rubric.json +66 -0
- package/test/fixtures/test-testset.json +55 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "indemn-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Manage Indemn AI agents — create, configure, evaluate, and chat with agents programmatically",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Indemn",
|
|
7
|
+
"email": "support@indemn.com"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://docs.indemn.com/cli",
|
|
10
|
+
"repository": "https://github.com/indemn-ai/indemn-cli",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": ["ai-agents", "insurance", "evaluations", "indemn"]
|
|
13
|
+
}
|
package/.mcp.json
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# @indemn/cli
|
|
2
|
+
|
|
3
|
+
CLI, MCP server, and Claude Code plugin for managing Indemn AI agents. Create, configure, evaluate, and chat with agents programmatically.
|
|
4
|
+
|
|
5
|
+
## Team Setup
|
|
6
|
+
|
|
7
|
+
### 1. Clone and install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
git clone https://github.com/indemn-ai/indemn-cli.git
|
|
11
|
+
cd indemn-cli
|
|
12
|
+
npm install
|
|
13
|
+
npm run build
|
|
14
|
+
npm link # puts `indemn` on your PATH
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### 2. Authenticate
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
indemn login --env dev
|
|
21
|
+
# Enter your Indemn email and password
|
|
22
|
+
# MFA code will be sent to your email if enabled
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
This does a one-time Firebase login, generates a persistent API key, and saves it to `~/.indemn/config.json`. You won't need to log in again.
|
|
26
|
+
|
|
27
|
+
### 3. Verify
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
indemn whoami # shows your user, org, environment
|
|
31
|
+
indemn agents list # lists your agents
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Quick Start
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Create an agent
|
|
38
|
+
indemn agents create --name "My Insurance Bot"
|
|
39
|
+
|
|
40
|
+
# Set its prompt
|
|
41
|
+
indemn config set <agent-id> --prompt "You are a helpful insurance assistant."
|
|
42
|
+
|
|
43
|
+
# Chat with it
|
|
44
|
+
indemn chat <agent-id>
|
|
45
|
+
|
|
46
|
+
# Run evaluations
|
|
47
|
+
indemn eval run <agent-id> --test-set <id> --rubric <id> --wait
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Command Reference
|
|
51
|
+
|
|
52
|
+
### Authentication
|
|
53
|
+
```bash
|
|
54
|
+
indemn login [--env dev|production] # Authenticate via Firebase
|
|
55
|
+
indemn logout # Clear stored credentials
|
|
56
|
+
indemn whoami # Show current user/org/env
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Agent Management
|
|
60
|
+
```bash
|
|
61
|
+
indemn agents list [--json] [--limit N]
|
|
62
|
+
indemn agents get <id> [--json]
|
|
63
|
+
indemn agents create --name "..." [--channels WEB,VOICE]
|
|
64
|
+
indemn agents update <id> [--name] [--description] [--webhook-url]
|
|
65
|
+
indemn agents delete <id>
|
|
66
|
+
indemn agents clone <id>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Configuration
|
|
70
|
+
```bash
|
|
71
|
+
indemn config get <agent-id> [--field prompt|greeting|model] [--json]
|
|
72
|
+
indemn config set <agent-id> [--prompt "..."] [--prompt-file path] [--model "..."]
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Functions
|
|
76
|
+
```bash
|
|
77
|
+
indemn functions list <agent-id> [--json]
|
|
78
|
+
indemn functions create <agent-id> --type rest_api --description "..."
|
|
79
|
+
indemn functions update <agent-id> <func-id> [--description "..."]
|
|
80
|
+
indemn functions delete <agent-id> <func-id>
|
|
81
|
+
indemn functions test <agent-id> <func-id>
|
|
82
|
+
indemn functions export <agent-id>
|
|
83
|
+
indemn functions import <agent-id> --url "..."
|
|
84
|
+
indemn functions master-list # list master function templates
|
|
85
|
+
indemn functions params list <agent-id> <func-id>
|
|
86
|
+
indemn functions params add <agent-id> <func-id> --name "..." --type string [--required]
|
|
87
|
+
indemn functions params update <agent-id> <func-id> <param-id> [--description "..."]
|
|
88
|
+
indemn functions params delete <agent-id> <func-id> <param-id>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Knowledge Bases
|
|
92
|
+
```bash
|
|
93
|
+
indemn kb list [--json] [--limit N] [--page N]
|
|
94
|
+
indemn kb create --name "..." --type qna
|
|
95
|
+
indemn kb get <kb-id>
|
|
96
|
+
indemn kb update <kb-id> [--name "..."]
|
|
97
|
+
indemn kb delete <kb-id>
|
|
98
|
+
indemn kb data list <kb-id>
|
|
99
|
+
indemn kb data add <kb-id> --question "..." --answer "..." # QnA data
|
|
100
|
+
indemn kb data add <kb-id> --source-url "https://..." # URL scraping
|
|
101
|
+
indemn kb data add <kb-id> --file /path/to/file.pdf # file upload
|
|
102
|
+
indemn kb link <agent-id> <kb-id> [kb-id...]
|
|
103
|
+
indemn kb unlink <agent-id> <kb-id>
|
|
104
|
+
indemn kb export <kb-id> [--format csv]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Evaluations
|
|
108
|
+
```bash
|
|
109
|
+
indemn eval run <agent-id> --test-set <id> [--rubric <id>] [--wait] [--eval-model gpt-4o] [--limit N]
|
|
110
|
+
indemn eval list [--agent-id <id>] [--json] [--limit N]
|
|
111
|
+
indemn eval status <run-id> [--json]
|
|
112
|
+
indemn eval results <run-id> [--json]
|
|
113
|
+
indemn eval bot-context <agent-id> [--json]
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Rubrics & Test Sets
|
|
117
|
+
```bash
|
|
118
|
+
indemn rubric list [--agent-id <id>]
|
|
119
|
+
indemn rubric create --file rubric.json
|
|
120
|
+
indemn rubric get <id> [--revision N]
|
|
121
|
+
indemn rubric update <id> --file rubric.json
|
|
122
|
+
indemn rubric delete <id>
|
|
123
|
+
indemn rubric versions <id>
|
|
124
|
+
|
|
125
|
+
indemn testset list --agent-id <id> # --agent-id required
|
|
126
|
+
indemn testset create --file testset.json
|
|
127
|
+
indemn testset get <id> [--revision N]
|
|
128
|
+
indemn testset update <id> --file testset.json
|
|
129
|
+
indemn testset delete <id>
|
|
130
|
+
indemn testset versions <id>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Chat
|
|
134
|
+
```bash
|
|
135
|
+
indemn chat <agent-id> [--session <session-id>] # interactive
|
|
136
|
+
indemn chat <agent-id> --message "Hello" # single message
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Models
|
|
140
|
+
```bash
|
|
141
|
+
indemn models # list available LLM providers and models
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### MCP Server
|
|
145
|
+
```bash
|
|
146
|
+
indemn mcp serve # Start MCP server on stdio
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## MCP Setup
|
|
150
|
+
|
|
151
|
+
### Claude Code Plugin
|
|
152
|
+
```bash
|
|
153
|
+
claude plugins install /path/to/indemn-cli
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Manual MCP Configuration
|
|
157
|
+
Add to your Claude Code MCP settings:
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"indemn-dev": {
|
|
161
|
+
"command": "node",
|
|
162
|
+
"args": ["/path/to/indemn-cli/dist/mcp/server.js"],
|
|
163
|
+
"env": {
|
|
164
|
+
"INDEMN_API_KEY": "ind_dev_...",
|
|
165
|
+
"INDEMN_ENV": "dev"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
The MCP server exposes all SDK operations as tools: `list_agents`, `create_agent`, `set_prompt`, `run_evaluation`, `chat_with_agent`, etc.
|
|
172
|
+
|
|
173
|
+
## Skills
|
|
174
|
+
|
|
175
|
+
When installed as a Claude Code plugin, the following skills are available:
|
|
176
|
+
|
|
177
|
+
| Skill | Purpose |
|
|
178
|
+
|-------|---------|
|
|
179
|
+
| `eval-orchestration` | Full evaluation lifecycle with directive allocation |
|
|
180
|
+
| `test-set-creation` | Design test sets with scenarios and diagnostics |
|
|
181
|
+
| `rubric-creation` | Create universal behavioral rubrics (3-6 rules) |
|
|
182
|
+
| `agent-setup` | End-to-end agent creation workflow |
|
|
183
|
+
|
|
184
|
+
## Global Flags
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
indemn --env dev agents list # override environment for a single command
|
|
188
|
+
indemn agents list --json # JSON output (available on most commands)
|
|
189
|
+
indemn agents list --limit 5 # limit results
|
|
190
|
+
indemn agents list --limit 5 --page 2 # pagination
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Environment Variables
|
|
194
|
+
|
|
195
|
+
| Variable | Description |
|
|
196
|
+
|----------|-------------|
|
|
197
|
+
| `INDEMN_API_KEY` | API key (alternative to `indemn login`) |
|
|
198
|
+
| `INDEMN_ENV` | Environment: `dev` or `production` (default: `dev`) |
|
|
199
|
+
| `INDEMN_ORG_ID` | Organization ID (alternative to config file) |
|
|
200
|
+
|
|
201
|
+
## Architecture
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
@indemn/cli
|
|
205
|
+
├── SDK (TypeScript API client)
|
|
206
|
+
│ ├── Copilot Server → Agents, Functions, KBs, Config
|
|
207
|
+
│ ├── Evaluations Service → Rubrics, Test Sets, Runs
|
|
208
|
+
│ └── Middleware → Chat via Socket.IO
|
|
209
|
+
├── CLI (Commander.js terminal interface)
|
|
210
|
+
├── MCP Server (tools for Claude Code)
|
|
211
|
+
└── Skills (workflow guides for Claude)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Development
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
npm install
|
|
218
|
+
npm run build # Compile TypeScript
|
|
219
|
+
npm run dev # Watch mode
|
|
220
|
+
npm test # Run tests
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## License
|
|
224
|
+
|
|
225
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/cli/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgM5D"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import { IndemnClient } from '../sdk/client.js';
|
|
3
|
+
import { AgentsSDK } from '../sdk/agents.js';
|
|
4
|
+
import { formatTable, printJson, printError, printSuccess, confirm } from './utils/output.js';
|
|
5
|
+
function formatChannels(channels) {
|
|
6
|
+
if (!channels || channels.length === 0)
|
|
7
|
+
return 'WEB';
|
|
8
|
+
return channels.map((c) => typeof c === 'string' ? c : c.name || c.type || String(c)).join(', ');
|
|
9
|
+
}
|
|
10
|
+
export function registerAgentCommands(program) {
|
|
11
|
+
const agents = program.command('agents').description('Manage AI agents');
|
|
12
|
+
agents
|
|
13
|
+
.command('list')
|
|
14
|
+
.description('List all agents')
|
|
15
|
+
.option('--json', 'Output as JSON')
|
|
16
|
+
.option('--limit <n>', 'Limit number of results')
|
|
17
|
+
.option('--page <n>', 'Page number (use with --limit)')
|
|
18
|
+
.action(async (options) => {
|
|
19
|
+
try {
|
|
20
|
+
const client = new IndemnClient();
|
|
21
|
+
const sdk = new AgentsSDK(client);
|
|
22
|
+
const spinner = ora('Fetching agents...').start();
|
|
23
|
+
let agentList = await sdk.listAgents();
|
|
24
|
+
spinner.stop();
|
|
25
|
+
if (options.page && options.limit) {
|
|
26
|
+
const page = parseInt(options.page, 10);
|
|
27
|
+
const limit = parseInt(options.limit, 10);
|
|
28
|
+
agentList = agentList.slice((page - 1) * limit, page * limit);
|
|
29
|
+
}
|
|
30
|
+
else if (options.limit) {
|
|
31
|
+
agentList = agentList.slice(0, parseInt(options.limit, 10));
|
|
32
|
+
}
|
|
33
|
+
if (options.json) {
|
|
34
|
+
printJson(agentList);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (agentList.length === 0) {
|
|
38
|
+
console.log('No agents found.');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const rows = agentList.map((a) => [
|
|
42
|
+
a._id,
|
|
43
|
+
a.name || '',
|
|
44
|
+
formatChannels(a.channels || []),
|
|
45
|
+
a.updatedAt ? new Date(a.updatedAt).toLocaleDateString() : '',
|
|
46
|
+
]);
|
|
47
|
+
console.log(formatTable(['ID', 'Name', 'Channels', 'Updated'], rows));
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
printError(err);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
agents
|
|
55
|
+
.command('get')
|
|
56
|
+
.argument('<id>', 'Agent ID')
|
|
57
|
+
.description('Get agent details')
|
|
58
|
+
.option('--json', 'Output as JSON')
|
|
59
|
+
.action(async (id, options) => {
|
|
60
|
+
try {
|
|
61
|
+
const client = new IndemnClient();
|
|
62
|
+
const sdk = new AgentsSDK(client);
|
|
63
|
+
const spinner = ora('Fetching agent...').start();
|
|
64
|
+
const agent = await sdk.getAgent(id);
|
|
65
|
+
spinner.stop();
|
|
66
|
+
if (options.json) {
|
|
67
|
+
printJson(agent);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
console.log(`ID: ${agent._id}`);
|
|
71
|
+
console.log(`Name: ${agent.name}`);
|
|
72
|
+
console.log(`Description: ${agent.description || '(none)'}`);
|
|
73
|
+
console.log(`Channels: ${formatChannels(agent.channels || [])}`);
|
|
74
|
+
console.log(`Webhook URL: ${agent.webhook_url || '(none)'}`);
|
|
75
|
+
console.log(`Webhook: ${agent.webhook_enabled ? 'enabled' : 'disabled'}`);
|
|
76
|
+
console.log(`Project: ${agent.id_project || '(none)'}`);
|
|
77
|
+
console.log(`Created: ${agent.createdAt || ''}`);
|
|
78
|
+
console.log(`Updated: ${agent.updatedAt || ''}`);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
printError(err);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
agents
|
|
86
|
+
.command('create')
|
|
87
|
+
.description('Create a new agent')
|
|
88
|
+
.requiredOption('--name <name>', 'Agent name')
|
|
89
|
+
.option('--channels <channels>', 'Comma-separated channels', 'WEB')
|
|
90
|
+
.action(async (options) => {
|
|
91
|
+
try {
|
|
92
|
+
const client = new IndemnClient();
|
|
93
|
+
const sdk = new AgentsSDK(client);
|
|
94
|
+
const spinner = ora('Creating agent...').start();
|
|
95
|
+
const channels = options.channels.split(',').map((c) => c.trim());
|
|
96
|
+
const agent = await sdk.createAgent({ name: options.name, channels });
|
|
97
|
+
spinner.stop();
|
|
98
|
+
printSuccess(`Agent created: ${agent._id}`);
|
|
99
|
+
console.log(` Name: ${agent.name}`);
|
|
100
|
+
console.log(` Channels: ${formatChannels(agent.channels || [])}`);
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
printError(err);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
agents
|
|
108
|
+
.command('update')
|
|
109
|
+
.argument('<id>', 'Agent ID')
|
|
110
|
+
.description('Update an agent')
|
|
111
|
+
.option('--name <name>', 'New agent name')
|
|
112
|
+
.option('--description <description>', 'Agent description')
|
|
113
|
+
.option('--webhook-url <url>', 'Webhook URL')
|
|
114
|
+
.action(async (id, options) => {
|
|
115
|
+
try {
|
|
116
|
+
const input = {};
|
|
117
|
+
if (options.name)
|
|
118
|
+
input.name = options.name;
|
|
119
|
+
if (options.description)
|
|
120
|
+
input.description = options.description;
|
|
121
|
+
if (options.webhookUrl)
|
|
122
|
+
input.webhook_url = options.webhookUrl;
|
|
123
|
+
if (Object.keys(input).length === 0) {
|
|
124
|
+
printError('No update options provided. Use --name, --description, or --webhook-url.');
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
const client = new IndemnClient();
|
|
128
|
+
const sdk = new AgentsSDK(client);
|
|
129
|
+
const spinner = ora('Updating agent...').start();
|
|
130
|
+
const agent = await sdk.updateAgent(id, input);
|
|
131
|
+
spinner.stop();
|
|
132
|
+
printSuccess(`Agent ${agent._id} updated.`);
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
printError(err);
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
agents
|
|
140
|
+
.command('delete')
|
|
141
|
+
.argument('<id>', 'Agent ID')
|
|
142
|
+
.description('Delete an agent')
|
|
143
|
+
.action(async (id) => {
|
|
144
|
+
try {
|
|
145
|
+
const confirmed = await confirm(`Delete agent ${id}? This cannot be undone.`);
|
|
146
|
+
if (!confirmed) {
|
|
147
|
+
console.log('Cancelled.');
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const client = new IndemnClient();
|
|
151
|
+
const sdk = new AgentsSDK(client);
|
|
152
|
+
const spinner = ora('Deleting agent...').start();
|
|
153
|
+
await sdk.deleteAgent(id);
|
|
154
|
+
spinner.stop();
|
|
155
|
+
printSuccess(`Agent ${id} deleted.`);
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
printError(err);
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
agents
|
|
163
|
+
.command('clone')
|
|
164
|
+
.argument('<id>', 'Agent ID to clone')
|
|
165
|
+
.description('Clone an agent')
|
|
166
|
+
.action(async (id) => {
|
|
167
|
+
try {
|
|
168
|
+
const client = new IndemnClient();
|
|
169
|
+
const sdk = new AgentsSDK(client);
|
|
170
|
+
const spinner = ora('Cloning agent...').start();
|
|
171
|
+
const result = await sdk.cloneAgent(id);
|
|
172
|
+
spinner.stop();
|
|
173
|
+
// Clone returns { new_agent_id, new_agent_name } or an Agent object
|
|
174
|
+
const raw = result;
|
|
175
|
+
const cloneId = raw.new_agent_id || result._id;
|
|
176
|
+
const cloneName = raw.new_agent_name || result.name;
|
|
177
|
+
printSuccess(`Agent cloned: ${cloneId}`);
|
|
178
|
+
console.log(` Name: ${cloneName}`);
|
|
179
|
+
console.log(` Source: ${id}`);
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
printError(err);
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/cli/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwEpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiG3D"}
|
package/dist/cli/auth.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import * as readline from 'readline';
|
|
4
|
+
import { login, logout, whoami } from '../sdk/auth.js';
|
|
5
|
+
import { printError, printSuccess, printJson } from './utils/output.js';
|
|
6
|
+
function prompt(question) {
|
|
7
|
+
const rl = readline.createInterface({
|
|
8
|
+
input: process.stdin,
|
|
9
|
+
output: process.stdout,
|
|
10
|
+
});
|
|
11
|
+
return new Promise((resolve) => {
|
|
12
|
+
rl.question(question, (answer) => {
|
|
13
|
+
rl.close();
|
|
14
|
+
resolve(answer.trim());
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
function promptPassword(question) {
|
|
19
|
+
return new Promise((resolve) => {
|
|
20
|
+
const rl = readline.createInterface({
|
|
21
|
+
input: process.stdin,
|
|
22
|
+
output: process.stdout,
|
|
23
|
+
});
|
|
24
|
+
// Disable echoing by writing to stdout manually
|
|
25
|
+
process.stdout.write(question);
|
|
26
|
+
const stdin = process.stdin;
|
|
27
|
+
const wasRaw = stdin.isRaw;
|
|
28
|
+
if (stdin.isTTY) {
|
|
29
|
+
stdin.setRawMode(true);
|
|
30
|
+
}
|
|
31
|
+
let password = '';
|
|
32
|
+
const onData = (char) => {
|
|
33
|
+
const c = char.toString('utf8');
|
|
34
|
+
if (c === '\n' || c === '\r' || c === '\u0004') {
|
|
35
|
+
if (stdin.isTTY) {
|
|
36
|
+
stdin.setRawMode(wasRaw ?? false);
|
|
37
|
+
}
|
|
38
|
+
stdin.removeListener('data', onData);
|
|
39
|
+
process.stdout.write('\n');
|
|
40
|
+
rl.close();
|
|
41
|
+
resolve(password);
|
|
42
|
+
}
|
|
43
|
+
else if (c === '\u0003') {
|
|
44
|
+
// Ctrl+C
|
|
45
|
+
if (stdin.isTTY) {
|
|
46
|
+
stdin.setRawMode(wasRaw ?? false);
|
|
47
|
+
}
|
|
48
|
+
stdin.removeListener('data', onData);
|
|
49
|
+
rl.close();
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
else if (c === '\u007f' || c === '\b') {
|
|
53
|
+
// Backspace
|
|
54
|
+
if (password.length > 0) {
|
|
55
|
+
password = password.slice(0, -1);
|
|
56
|
+
process.stdout.write('\b \b');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
password += c;
|
|
61
|
+
process.stdout.write('*');
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
stdin.on('data', onData);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
export function registerAuthCommands(program) {
|
|
68
|
+
program
|
|
69
|
+
.command('login')
|
|
70
|
+
.description('Authenticate with Indemn platform')
|
|
71
|
+
.option('--env <environment>', 'Target environment', 'dev')
|
|
72
|
+
.action(async (options) => {
|
|
73
|
+
try {
|
|
74
|
+
const env = options.env;
|
|
75
|
+
if (env !== 'dev' && env !== 'production') {
|
|
76
|
+
printError('Environment must be "dev" or "production"');
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
const email = await prompt('Email: ');
|
|
80
|
+
if (!email) {
|
|
81
|
+
printError('Email is required');
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
const password = await promptPassword('Password: ');
|
|
85
|
+
if (!password) {
|
|
86
|
+
printError('Password is required');
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
const spinner = ora('Authenticating...').start();
|
|
90
|
+
try {
|
|
91
|
+
const result = await login(email, password, env, {
|
|
92
|
+
mfaCodePrompt: async () => {
|
|
93
|
+
spinner.stop();
|
|
94
|
+
console.log(chalk.yellow('MFA code sent to your email.'));
|
|
95
|
+
const code = await prompt('MFA Code: ');
|
|
96
|
+
if (!code) {
|
|
97
|
+
throw new Error('MFA code is required');
|
|
98
|
+
}
|
|
99
|
+
spinner.start('Verifying MFA code...');
|
|
100
|
+
return code;
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
spinner.succeed('Authenticated successfully');
|
|
104
|
+
console.log(chalk.dim(` Org: ${result.orgId}`));
|
|
105
|
+
console.log(chalk.dim(` Environment: ${result.environment}`));
|
|
106
|
+
console.log(chalk.dim(` API Key: ${result.apiKey.substring(0, 12)}...`));
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
spinner.fail('Authentication failed');
|
|
110
|
+
throw err;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
printError(err);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
program
|
|
119
|
+
.command('logout')
|
|
120
|
+
.description('Clear stored credentials')
|
|
121
|
+
.action(() => {
|
|
122
|
+
try {
|
|
123
|
+
logout();
|
|
124
|
+
printSuccess('Logged out successfully. Credentials cleared.');
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
printError(err);
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
program
|
|
132
|
+
.command('whoami')
|
|
133
|
+
.description('Display current user and environment info')
|
|
134
|
+
.option('--json', 'Output as JSON')
|
|
135
|
+
.action((options) => {
|
|
136
|
+
try {
|
|
137
|
+
const info = whoami();
|
|
138
|
+
if (!info) {
|
|
139
|
+
printError('Not authenticated. Run `indemn login` first.');
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
if (options.json) {
|
|
143
|
+
printJson(info);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
console.log(chalk.bold('Current Authentication'));
|
|
147
|
+
console.log(` API Key: ${info.apiKey}`);
|
|
148
|
+
console.log(` Org ID: ${info.orgId}`);
|
|
149
|
+
console.log(` User ID: ${info.userId}`);
|
|
150
|
+
console.log(` Environment: ${info.environment}`);
|
|
151
|
+
console.log(` Copilot: ${info.hosts.copilot}`);
|
|
152
|
+
console.log(` Evaluations: ${info.hosts.evaluations}`);
|
|
153
|
+
console.log(` Middleware: ${info.hosts.middleware}`);
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
printError(err);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/cli/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuJ1D"}
|