@indemn/cli 1.5.0 → 1.7.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.
Files changed (311) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +9 -4
  3. package/.github/workflows/ci.yml +10 -0
  4. package/.github/workflows/publish.yml +2 -2
  5. package/.mcp.json +1 -4
  6. package/CONTRIBUTING.md +3 -1
  7. package/README.md +69 -176
  8. package/dist/cli/agents.d.ts.map +1 -1
  9. package/dist/cli/agents.js +226 -18
  10. package/dist/cli/agents.js.map +1 -1
  11. package/dist/cli/analytics.d.ts +3 -0
  12. package/dist/cli/analytics.d.ts.map +1 -0
  13. package/dist/cli/analytics.js +133 -0
  14. package/dist/cli/analytics.js.map +1 -0
  15. package/dist/cli/auth.d.ts.map +1 -1
  16. package/dist/cli/auth.js +62 -17
  17. package/dist/cli/auth.js.map +1 -1
  18. package/dist/cli/billing.d.ts +3 -0
  19. package/dist/cli/billing.d.ts.map +1 -0
  20. package/dist/cli/billing.js +23 -0
  21. package/dist/cli/billing.js.map +1 -0
  22. package/dist/cli/campaigns.d.ts +3 -0
  23. package/dist/cli/campaigns.d.ts.map +1 -0
  24. package/dist/cli/campaigns.js +34 -0
  25. package/dist/cli/campaigns.js.map +1 -0
  26. package/dist/cli/chat.d.ts.map +1 -1
  27. package/dist/cli/chat.js +69 -102
  28. package/dist/cli/chat.js.map +1 -1
  29. package/dist/cli/config.d.ts.map +1 -1
  30. package/dist/cli/config.js +71 -27
  31. package/dist/cli/config.js.map +1 -1
  32. package/dist/cli/conversations.d.ts +3 -0
  33. package/dist/cli/conversations.d.ts.map +1 -0
  34. package/dist/cli/conversations.js +129 -0
  35. package/dist/cli/conversations.js.map +1 -0
  36. package/dist/cli/distribution.d.ts +3 -0
  37. package/dist/cli/distribution.d.ts.map +1 -0
  38. package/dist/cli/distribution.js +122 -0
  39. package/dist/cli/distribution.js.map +1 -0
  40. package/dist/cli/eval.d.ts.map +1 -1
  41. package/dist/cli/eval.js +315 -71
  42. package/dist/cli/eval.js.map +1 -1
  43. package/dist/cli/functions.d.ts.map +1 -1
  44. package/dist/cli/functions.js +125 -35
  45. package/dist/cli/functions.js.map +1 -1
  46. package/dist/cli/index.js +63 -54
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/cli/init.d.ts +27 -0
  49. package/dist/cli/init.d.ts.map +1 -0
  50. package/dist/cli/init.js +152 -0
  51. package/dist/cli/init.js.map +1 -0
  52. package/dist/cli/kb.d.ts.map +1 -1
  53. package/dist/cli/kb.js +141 -15
  54. package/dist/cli/kb.js.map +1 -1
  55. package/dist/cli/link.d.ts +21 -0
  56. package/dist/cli/link.d.ts.map +1 -0
  57. package/dist/cli/link.js +112 -0
  58. package/dist/cli/link.js.map +1 -0
  59. package/dist/cli/org.d.ts.map +1 -1
  60. package/dist/cli/org.js +79 -67
  61. package/dist/cli/org.js.map +1 -1
  62. package/dist/cli/platform.d.ts +3 -0
  63. package/dist/cli/platform.d.ts.map +1 -0
  64. package/dist/cli/platform.js +133 -0
  65. package/dist/cli/platform.js.map +1 -0
  66. package/dist/cli/tickets.d.ts +3 -0
  67. package/dist/cli/tickets.d.ts.map +1 -0
  68. package/dist/cli/tickets.js +125 -0
  69. package/dist/cli/tickets.js.map +1 -0
  70. package/dist/cli/utils/output.d.ts +15 -9
  71. package/dist/cli/utils/output.d.ts.map +1 -1
  72. package/dist/cli/utils/output.js +53 -46
  73. package/dist/cli/utils/output.js.map +1 -1
  74. package/dist/cli/voice.d.ts +3 -0
  75. package/dist/cli/voice.d.ts.map +1 -0
  76. package/dist/cli/voice.js +206 -0
  77. package/dist/cli/voice.js.map +1 -0
  78. package/dist/core/diff.d.ts +16 -0
  79. package/dist/core/diff.d.ts.map +1 -0
  80. package/dist/core/diff.js +57 -0
  81. package/dist/core/diff.js.map +1 -0
  82. package/dist/core/org-resolver.d.ts +37 -0
  83. package/dist/core/org-resolver.d.ts.map +1 -0
  84. package/dist/core/org-resolver.js +73 -0
  85. package/dist/core/org-resolver.js.map +1 -0
  86. package/dist/core/runtime.d.ts +36 -0
  87. package/dist/core/runtime.d.ts.map +1 -0
  88. package/dist/core/runtime.js +62 -0
  89. package/dist/core/runtime.js.map +1 -0
  90. package/dist/core/scope.d.ts +33 -0
  91. package/dist/core/scope.d.ts.map +1 -0
  92. package/dist/core/scope.js +37 -0
  93. package/dist/core/scope.js.map +1 -0
  94. package/dist/mcp/registry.d.ts +67 -0
  95. package/dist/mcp/registry.d.ts.map +1 -0
  96. package/dist/mcp/registry.js +195 -0
  97. package/dist/mcp/registry.js.map +1 -0
  98. package/dist/mcp/server.d.ts +9 -0
  99. package/dist/mcp/server.d.ts.map +1 -1
  100. package/dist/mcp/server.js +87 -2
  101. package/dist/mcp/server.js.map +1 -1
  102. package/dist/mcp/tool-meta.d.ts +21 -0
  103. package/dist/mcp/tool-meta.d.ts.map +1 -0
  104. package/dist/mcp/tool-meta.js +203 -0
  105. package/dist/mcp/tool-meta.js.map +1 -0
  106. package/dist/mcp/tools.d.ts +2 -1
  107. package/dist/mcp/tools.d.ts.map +1 -1
  108. package/dist/mcp/tools.js +1462 -215
  109. package/dist/mcp/tools.js.map +1 -1
  110. package/dist/sdk/agent-bundle.d.ts +99 -0
  111. package/dist/sdk/agent-bundle.d.ts.map +1 -0
  112. package/dist/sdk/agent-bundle.js +211 -0
  113. package/dist/sdk/agent-bundle.js.map +1 -0
  114. package/dist/sdk/agents.d.ts +54 -1
  115. package/dist/sdk/agents.d.ts.map +1 -1
  116. package/dist/sdk/agents.js +59 -5
  117. package/dist/sdk/agents.js.map +1 -1
  118. package/dist/sdk/analytics.d.ts +158 -0
  119. package/dist/sdk/analytics.d.ts.map +1 -0
  120. package/dist/sdk/analytics.js +185 -0
  121. package/dist/sdk/analytics.js.map +1 -0
  122. package/dist/sdk/auth.d.ts +34 -12
  123. package/dist/sdk/auth.d.ts.map +1 -1
  124. package/dist/sdk/auth.js +60 -77
  125. package/dist/sdk/auth.js.map +1 -1
  126. package/dist/sdk/billing.d.ts +25 -0
  127. package/dist/sdk/billing.d.ts.map +1 -0
  128. package/dist/sdk/billing.js +61 -0
  129. package/dist/sdk/billing.js.map +1 -0
  130. package/dist/sdk/campaigns.d.ts +35 -0
  131. package/dist/sdk/campaigns.d.ts.map +1 -0
  132. package/dist/sdk/campaigns.js +59 -0
  133. package/dist/sdk/campaigns.js.map +1 -0
  134. package/dist/sdk/chat.d.ts +25 -2
  135. package/dist/sdk/chat.d.ts.map +1 -1
  136. package/dist/sdk/chat.js +37 -10
  137. package/dist/sdk/chat.js.map +1 -1
  138. package/dist/sdk/client.d.ts +93 -5
  139. package/dist/sdk/client.d.ts.map +1 -1
  140. package/dist/sdk/client.js +362 -100
  141. package/dist/sdk/client.js.map +1 -1
  142. package/dist/sdk/config-change.d.ts +74 -0
  143. package/dist/sdk/config-change.d.ts.map +1 -0
  144. package/dist/sdk/config-change.js +117 -0
  145. package/dist/sdk/config-change.js.map +1 -0
  146. package/dist/sdk/config.d.ts.map +1 -1
  147. package/dist/sdk/config.js +2 -1
  148. package/dist/sdk/config.js.map +1 -1
  149. package/dist/sdk/conversations.d.ts +101 -0
  150. package/dist/sdk/conversations.d.ts.map +1 -0
  151. package/dist/sdk/conversations.js +155 -0
  152. package/dist/sdk/conversations.js.map +1 -0
  153. package/dist/sdk/credentials.d.ts +25 -0
  154. package/dist/sdk/credentials.d.ts.map +1 -0
  155. package/dist/sdk/credentials.js +44 -0
  156. package/dist/sdk/credentials.js.map +1 -0
  157. package/dist/sdk/distribution.d.ts +94 -0
  158. package/dist/sdk/distribution.d.ts.map +1 -0
  159. package/dist/sdk/distribution.js +100 -0
  160. package/dist/sdk/distribution.js.map +1 -0
  161. package/dist/sdk/eval.d.ts +81 -0
  162. package/dist/sdk/eval.d.ts.map +1 -1
  163. package/dist/sdk/eval.js +117 -0
  164. package/dist/sdk/eval.js.map +1 -1
  165. package/dist/sdk/functions.d.ts +14 -1
  166. package/dist/sdk/functions.d.ts.map +1 -1
  167. package/dist/sdk/functions.js +48 -5
  168. package/dist/sdk/functions.js.map +1 -1
  169. package/dist/sdk/index.d.ts +2 -0
  170. package/dist/sdk/index.d.ts.map +1 -1
  171. package/dist/sdk/index.js +2 -0
  172. package/dist/sdk/index.js.map +1 -1
  173. package/dist/sdk/jarvis-chat.d.ts +28 -0
  174. package/dist/sdk/jarvis-chat.d.ts.map +1 -0
  175. package/dist/sdk/jarvis-chat.js +117 -0
  176. package/dist/sdk/jarvis-chat.js.map +1 -0
  177. package/dist/sdk/kb.d.ts +69 -1
  178. package/dist/sdk/kb.d.ts.map +1 -1
  179. package/dist/sdk/kb.js +111 -24
  180. package/dist/sdk/kb.js.map +1 -1
  181. package/dist/sdk/orgs.d.ts +13 -0
  182. package/dist/sdk/orgs.d.ts.map +1 -0
  183. package/dist/sdk/orgs.js +59 -0
  184. package/dist/sdk/orgs.js.map +1 -0
  185. package/dist/sdk/platform.d.ts +62 -0
  186. package/dist/sdk/platform.d.ts.map +1 -0
  187. package/dist/sdk/platform.js +95 -0
  188. package/dist/sdk/platform.js.map +1 -0
  189. package/dist/sdk/session.d.ts +25 -0
  190. package/dist/sdk/session.d.ts.map +1 -0
  191. package/dist/sdk/session.js +69 -0
  192. package/dist/sdk/session.js.map +1 -0
  193. package/dist/sdk/skills.d.ts +46 -0
  194. package/dist/sdk/skills.d.ts.map +1 -0
  195. package/dist/sdk/skills.js +203 -0
  196. package/dist/sdk/skills.js.map +1 -0
  197. package/dist/sdk/test-chat.d.ts +52 -0
  198. package/dist/sdk/test-chat.d.ts.map +1 -0
  199. package/dist/sdk/test-chat.js +134 -0
  200. package/dist/sdk/test-chat.js.map +1 -0
  201. package/dist/sdk/tickets.d.ts +98 -0
  202. package/dist/sdk/tickets.d.ts.map +1 -0
  203. package/dist/sdk/tickets.js +91 -0
  204. package/dist/sdk/tickets.js.map +1 -0
  205. package/dist/sdk/types.d.ts +91 -6
  206. package/dist/sdk/types.d.ts.map +1 -1
  207. package/dist/sdk/voice.d.ts +147 -0
  208. package/dist/sdk/voice.d.ts.map +1 -0
  209. package/dist/sdk/voice.js +236 -0
  210. package/dist/sdk/voice.js.map +1 -0
  211. package/package.json +22 -3
  212. package/scripts/check-skills.mjs +25 -0
  213. package/skills/agent-builder/SKILL.md +89 -252
  214. package/skills/evaluations/SKILL.md +23 -234
  215. package/skills/evaluations/references/analysis.md +95 -0
  216. package/skills/evaluations/references/cli-reference.md +28 -0
  217. package/skills/evaluations/references/json-formats.md +100 -0
  218. package/src/cli/agents.ts +202 -22
  219. package/src/cli/analytics.ts +138 -0
  220. package/src/cli/auth.ts +56 -18
  221. package/src/cli/billing.ts +25 -0
  222. package/src/cli/campaigns.ts +33 -0
  223. package/src/cli/chat.ts +66 -115
  224. package/src/cli/config.ts +65 -31
  225. package/src/cli/conversations.ts +133 -0
  226. package/src/cli/distribution.ts +116 -0
  227. package/src/cli/eval.ts +254 -70
  228. package/src/cli/functions.ts +122 -36
  229. package/src/cli/index.ts +58 -55
  230. package/src/cli/init.ts +154 -0
  231. package/src/cli/kb.ts +120 -17
  232. package/src/cli/link.ts +117 -0
  233. package/src/cli/org.ts +81 -75
  234. package/src/cli/platform.ts +128 -0
  235. package/src/cli/tickets.ts +130 -0
  236. package/src/cli/utils/output.ts +51 -42
  237. package/src/cli/voice.ts +204 -0
  238. package/src/core/diff.ts +52 -0
  239. package/src/core/org-resolver.ts +113 -0
  240. package/src/core/runtime.ts +73 -0
  241. package/src/core/scope.ts +64 -0
  242. package/src/mcp/registry.ts +236 -0
  243. package/src/mcp/server.ts +84 -2
  244. package/src/mcp/tool-meta.ts +241 -0
  245. package/src/mcp/tools.ts +1529 -265
  246. package/src/sdk/agent-bundle.ts +245 -0
  247. package/src/sdk/agents.ts +74 -5
  248. package/src/sdk/analytics.ts +220 -0
  249. package/src/sdk/auth.ts +87 -107
  250. package/src/sdk/billing.ts +59 -0
  251. package/src/sdk/campaigns.ts +60 -0
  252. package/src/sdk/chat.ts +44 -10
  253. package/src/sdk/client.ts +373 -102
  254. package/src/sdk/config-change.ts +148 -0
  255. package/src/sdk/config.ts +2 -1
  256. package/src/sdk/conversations.ts +199 -0
  257. package/src/sdk/credentials.ts +53 -0
  258. package/src/sdk/distribution.ts +132 -0
  259. package/src/sdk/eval.ts +140 -0
  260. package/src/sdk/functions.ts +52 -6
  261. package/src/sdk/index.ts +2 -0
  262. package/src/sdk/jarvis-chat.ts +112 -0
  263. package/src/sdk/kb.ts +116 -29
  264. package/src/sdk/orgs.ts +62 -0
  265. package/src/sdk/platform.ts +115 -0
  266. package/src/sdk/session.ts +90 -0
  267. package/src/sdk/skills.ts +188 -0
  268. package/src/sdk/test-chat.ts +151 -0
  269. package/src/sdk/tickets.ts +120 -0
  270. package/src/sdk/types.ts +88 -6
  271. package/src/sdk/voice.ts +262 -0
  272. package/test/cli/entry.test.ts +34 -0
  273. package/test/cli/init.test.ts +66 -0
  274. package/test/cli/link.test.ts +57 -0
  275. package/test/core/org-resolver.test.ts +92 -0
  276. package/test/core/runtime.test.ts +30 -0
  277. package/test/core/scope.test.ts +93 -0
  278. package/test/harness.test.ts +24 -0
  279. package/test/helpers/config-home.ts +22 -0
  280. package/test/helpers/fake-middleware.ts +56 -0
  281. package/test/helpers/fetch-recorder.ts +75 -0
  282. package/test/helpers/jwt.ts +9 -0
  283. package/test/helpers/mcp-pair.ts +38 -0
  284. package/test/mcp/__snapshots__/tools-snapshot.test.ts.snap +145 -0
  285. package/test/mcp/askers.test.ts +60 -0
  286. package/test/mcp/elicit-timeout.test.ts +29 -0
  287. package/test/mcp/registry.test.ts +169 -0
  288. package/test/mcp/shaping.test.ts +41 -0
  289. package/test/mcp/tools-snapshot.test.ts +42 -0
  290. package/test/sdk/agents.test.ts +232 -0
  291. package/test/sdk/analytics.test.ts +89 -0
  292. package/test/sdk/auth.test.ts +70 -0
  293. package/test/sdk/billing.test.ts +47 -0
  294. package/test/sdk/campaigns.test.ts +43 -0
  295. package/test/sdk/client.test.ts +80 -0
  296. package/test/sdk/config-change.test.ts +142 -0
  297. package/test/sdk/conversations.test.ts +80 -0
  298. package/test/sdk/credentials.test.ts +33 -0
  299. package/test/sdk/distribution.test.ts +55 -0
  300. package/test/sdk/eval.test.ts +155 -0
  301. package/test/sdk/kb-upload.test.ts +50 -0
  302. package/test/sdk/kb.test.ts +95 -0
  303. package/test/sdk/orgs.test.ts +48 -0
  304. package/test/sdk/platform.test.ts +89 -0
  305. package/test/sdk/renewal.test.ts +115 -0
  306. package/test/sdk/session.test.ts +60 -0
  307. package/test/sdk/skills.test.ts +235 -0
  308. package/test/sdk/test-chat.test.ts +112 -0
  309. package/test/sdk/tickets.test.ts +42 -0
  310. package/test/sdk/voice.test.ts +147 -0
  311. package/vitest.config.ts +11 -0
@@ -1,8 +1,16 @@
1
1
  import ora from 'ora';
2
2
  import { IndemnClient } from '../sdk/client.js';
3
- import { AgentsSDK } from '../sdk/agents.js';
3
+ import { AgentInsightsSDK, AgentsSDK } from '../sdk/agents.js';
4
+ import { CliError, EXIT } from '../core/runtime.js';
5
+ import { confirmOrExit } from './link.js';
6
+ import { DistributionSDK } from '../sdk/distribution.js';
7
+ import { readFileSync, writeFileSync } from 'node:fs';
8
+ import chalk from 'chalk';
9
+ import { isNonInteractive } from '../core/runtime.js';
10
+ import { askLine } from './utils/output.js';
11
+ import { createAgentFromSkeleton, exportAgent, importAgent, missingSkeletonFields, parseModel, } from '../sdk/agent-bundle.js';
4
12
  import { exportAgentCard } from '../report/export.js';
5
- import { formatTable, printJson, printError, printSuccess, confirm } from './utils/output.js';
13
+ import { formatTable, printJson, printError, printSuccess } from './utils/output.js';
6
14
  function formatChannels(channels) {
7
15
  if (!channels || channels.length === 0)
8
16
  return 'WEB';
@@ -85,20 +93,127 @@ export function registerAgentCommands(program) {
85
93
  });
86
94
  agents
87
95
  .command('create')
88
- .description('Create a new agent')
89
- .requiredOption('--name <name>', 'Agent name')
90
- .option('--channels <channels>', 'Comma-separated channels', 'WEB')
96
+ .description('Create an agent with its basics: name, channels, purpose, prompt and model. Asks for missing ones in a terminal.')
97
+ .option('--name <name>', 'Agent name')
98
+ .option('--channels <channels>', 'Comma-separated channels (see `indemn channels list`)', 'WEB')
99
+ .option('--description <text>', 'What the agent is for')
100
+ .option('--prompt <text>', 'System prompt')
101
+ .option('--prompt-file <path>', 'Read the system prompt from a file')
102
+ .option('--model <provider/model>', 'LLM, for example openai/gpt-4.1 (see `indemn models`)')
103
+ .option('--allow-duplicate', 'Create even if an agent with this name exists in the org')
104
+ .option('--template <id>', 'Copy a template instead (see `indemn templates list`); keeps its prompt, model, skills and knowledge')
105
+ .option('--json', 'Output as JSON')
91
106
  .action(async (options) => {
92
107
  try {
108
+ if (options.template) {
109
+ if (!options.name)
110
+ throw new CliError('Name the new agent: --name "<name>".', EXIT.NEEDS_INPUT);
111
+ const client = new IndemnClient();
112
+ if (!options.allowDuplicate && (await new AgentsSDK(client).findByName(options.name)).length) {
113
+ throw new CliError(`An agent named "${options.name}" already exists in this org. Choose another name or pass --allow-duplicate.`, EXIT.NEEDS_INPUT);
114
+ }
115
+ const res = await new DistributionSDK(client).createFromTemplate(options.template, {
116
+ name: options.name, channels: String(options.channels).split(',').map((c) => c.trim()).filter(Boolean),
117
+ });
118
+ if (options.json) {
119
+ printJson(res);
120
+ return;
121
+ }
122
+ printSuccess(`Agent created from template: ${res.new_agent_id} (${res.new_agent_name})`);
123
+ console.log(chalk.dim(' Not copied: phone numbers, voice settings, website distributions.'));
124
+ return;
125
+ }
126
+ const skeleton = {
127
+ name: options.name ?? '',
128
+ channels: String(options.channels).split(',').map((c) => c.trim()).filter(Boolean),
129
+ description: options.description,
130
+ system_prompt: options.promptFile ? readFileSync(options.promptFile, 'utf8') : options.prompt,
131
+ model: options.model ? parseModel(options.model) : undefined,
132
+ };
133
+ const missing = missingSkeletonFields(skeleton);
134
+ if (missing.length && !isNonInteractive()) {
135
+ if (missing.includes('name'))
136
+ skeleton.name = await askLine('Agent name: ');
137
+ if (missing.includes('description'))
138
+ skeleton.description = await askLine('What is this agent for? (one line, Enter to skip): ');
139
+ if (missing.includes('system_prompt'))
140
+ skeleton.system_prompt = await askLine('System prompt (Enter to skip; use --prompt-file for long prompts): ');
141
+ }
142
+ if (!skeleton.name.trim())
143
+ throw new CliError('An agent needs a name: --name "<name>".', EXIT.NEEDS_INPUT);
93
144
  const client = new IndemnClient();
94
- const sdk = new AgentsSDK(client);
95
145
  const spinner = ora('Creating agent...').start();
96
- const channels = options.channels.split(',').map((c) => c.trim());
97
- const agent = await sdk.createAgent({ name: options.name, channels });
146
+ const { agent, set } = await createAgentFromSkeleton(client, skeleton, { allowDuplicate: options.allowDuplicate });
98
147
  spinner.stop();
148
+ if (options.json) {
149
+ printJson({ agent, set });
150
+ return;
151
+ }
99
152
  printSuccess(`Agent created: ${agent._id}`);
100
153
  console.log(` Name: ${agent.name}`);
101
154
  console.log(` Channels: ${formatChannels(agent.channels || [])}`);
155
+ console.log(` Set: ${set.join(', ')}`);
156
+ const unset = missingSkeletonFields(skeleton);
157
+ if (unset.length)
158
+ console.log(chalk.dim(` Not set yet: ${unset.join(', ')}. Use \`indemn config set ${agent._id}\`.`));
159
+ }
160
+ catch (err) {
161
+ printError(err);
162
+ process.exit(1);
163
+ }
164
+ });
165
+ agents
166
+ .command('export')
167
+ .argument('<id>', 'Agent ID')
168
+ .option('-o, --output <file>', 'Write to a file instead of stdout')
169
+ .option('--include-secrets', 'Keep API keys and tokens inside skill settings (default: redacted)')
170
+ .description('Save an agent (prompt, greeting, model, skills, linked knowledge bases) to a JSON bundle')
171
+ .action(async (id, options) => {
172
+ try {
173
+ const bundle = await exportAgent(new IndemnClient(), id, { includeSecrets: options.includeSecrets });
174
+ const text = JSON.stringify(bundle, null, 2) + '\n';
175
+ if (options.output) {
176
+ writeFileSync(options.output, text, { mode: options.includeSecrets ? 0o600 : 0o644 });
177
+ printSuccess(`Wrote ${options.output}.`);
178
+ if (bundle.redacted.length)
179
+ console.log(chalk.dim(` Redacted ${bundle.redacted.length} secret value(s); fill them in after import.`));
180
+ }
181
+ else {
182
+ process.stdout.write(text);
183
+ }
184
+ }
185
+ catch (err) {
186
+ printError(err);
187
+ process.exit(1);
188
+ }
189
+ });
190
+ agents
191
+ .command('import')
192
+ .argument('<file>', 'Bundle written by `indemn agents export`')
193
+ .option('--name <name>', 'Name for the new agent (default: the bundle name)')
194
+ .option('--link-kbs', 'Link the same knowledge base ids if they exist in this org')
195
+ .option('--allow-duplicate', 'Create even if an agent with this name exists in the org')
196
+ .option('--yes', 'Do not ask for confirmation')
197
+ .option('--json', 'Output as JSON')
198
+ .description('Create a new agent in the chosen org from an exported bundle')
199
+ .action(async (file, options) => {
200
+ try {
201
+ const bundle = JSON.parse(readFileSync(file, 'utf8'));
202
+ const client = new IndemnClient();
203
+ const org = await client.resolveOrg();
204
+ await confirmOrExit(`Create agent "${options.name ?? bundle.agent?.name}" with ${bundle.skills?.length ?? 0} skill(s) in ${org.name ?? org.id} on ${client.getEnvironment()}?`, Boolean(options.yes));
205
+ const report = await importAgent(client, bundle, { name: options.name, allowDuplicate: options.allowDuplicate, linkKnowledgeBases: options.linkKbs });
206
+ if (options.json) {
207
+ printJson(report);
208
+ return;
209
+ }
210
+ printSuccess(`Agent created: ${report.agent._id} (${report.skills_created} skill(s) created, ${report.built_in_skills_reused.length} built-in reused)`);
211
+ for (const f of report.skills_failed)
212
+ console.log(chalk.yellow(` Skill ${f.name ?? '(unnamed)'} failed: ${f.error}`));
213
+ if (report.needs_secrets.length)
214
+ console.log(chalk.yellow(` Fill in ${report.needs_secrets.length} redacted secret(s) in the skills.`));
215
+ if (report.knowledge_bases_skipped.length)
216
+ console.log(chalk.dim(` Knowledge bases not linked: ${report.knowledge_bases_skipped.join(', ')}`));
102
217
  }
103
218
  catch (err) {
104
219
  printError(err);
@@ -140,16 +255,15 @@ export function registerAgentCommands(program) {
140
255
  agents
141
256
  .command('delete')
142
257
  .argument('<id>', 'Agent ID')
143
- .description('Delete an agent')
144
- .action(async (id) => {
258
+ .option('--yes', 'Do not ask for confirmation')
259
+ .description('Delete an agent (asks first; --yes for scripts)')
260
+ .action(async (id, options) => {
145
261
  try {
146
- const confirmed = await confirm(`Delete agent ${id}? This cannot be undone.`);
147
- if (!confirmed) {
148
- console.log('Cancelled.');
149
- return;
150
- }
151
262
  const client = new IndemnClient();
152
263
  const sdk = new AgentsSDK(client);
264
+ const agent = await sdk.getAgent(id);
265
+ const org = await client.resolveOrg();
266
+ await confirmOrExit(`Delete agent "${agent?.name ?? id}" (${id}) in org ${org.name ?? org.id} on ${client.getEnvironment()}? This cannot be undone.`, Boolean(options.yes));
153
267
  const spinner = ora('Deleting agent...').start();
154
268
  await sdk.deleteAgent(id);
155
269
  spinner.stop();
@@ -160,6 +274,99 @@ export function registerAgentCommands(program) {
160
274
  process.exit(1);
161
275
  }
162
276
  });
277
+ agents
278
+ .command('lifecycle')
279
+ .argument('<id>', 'Agent ID')
280
+ .argument('<stage>', 'prototype, beta or published')
281
+ .option('--yes', 'Do not ask for confirmation')
282
+ .description('Change the lifecycle stage (only the owner or an org admin may; checked by the V2 platform)')
283
+ .action(async (id, stage, options) => {
284
+ try {
285
+ if (!['prototype', 'beta', 'published'].includes(stage)) {
286
+ throw new CliError('Stage must be prototype, beta or published.', EXIT.NEEDS_INPUT);
287
+ }
288
+ const client = new IndemnClient();
289
+ const insights = new AgentInsightsSDK(client);
290
+ const before = await insights.detail(id);
291
+ if (before.lifecycle === stage) {
292
+ console.log(`Agent ${id} is already ${stage}.`);
293
+ return;
294
+ }
295
+ await confirmOrExit(`Move "${before.name}" from ${before.lifecycle ?? 'prototype'} to ${stage}?`, Boolean(options.yes));
296
+ const after = await insights.setLifecycle(id, stage);
297
+ printSuccess(`Agent ${id} is now ${after.lifecycle}.`);
298
+ }
299
+ catch (err) {
300
+ printError(err);
301
+ process.exit(1);
302
+ }
303
+ });
304
+ agents
305
+ .command('owner')
306
+ .argument('<id>', 'Agent ID')
307
+ .argument('[user-id]', 'New owner (user id); omit to show the current owner')
308
+ .option('--yes', 'Do not ask for confirmation')
309
+ .option('--json', 'Output as JSON')
310
+ .description('Show or transfer the owner (transfer: owner or org admin only)')
311
+ .action(async (id, userId, options) => {
312
+ try {
313
+ const client = new IndemnClient();
314
+ const insights = new AgentInsightsSDK(client);
315
+ const detail = await insights.detail(id);
316
+ if (!userId) {
317
+ if (options.json) {
318
+ printJson({ owner: detail.owner ?? null, lifecycle: detail.lifecycle });
319
+ return;
320
+ }
321
+ const o = detail.owner;
322
+ console.log(o ? `${[o.firstname, o.lastname].filter(Boolean).join(' ')} <${o.email ?? ''}> (${o.id})` : 'No owner recorded.');
323
+ return;
324
+ }
325
+ await confirmOrExit(`Transfer "${detail.name}" to user ${userId}?`, Boolean(options.yes));
326
+ await insights.transferOwner(id, userId);
327
+ printSuccess(`Owner of ${id} is now ${userId}.`);
328
+ }
329
+ catch (err) {
330
+ printError(err);
331
+ process.exit(1);
332
+ }
333
+ });
334
+ agents
335
+ .command('summary')
336
+ .argument('<id>', 'Agent ID')
337
+ .option('--full', 'Skills and knowledge sources instead of one paragraph')
338
+ .option('--json', 'Output as JSON')
339
+ .description('What the agent does, written for a person or an AI to read before changing it')
340
+ .action(async (id, options) => {
341
+ try {
342
+ const result = await new AgentInsightsSDK(new IndemnClient()).summary(id, { text: !options.full });
343
+ if (options.json || options.full) {
344
+ printJson(result);
345
+ return;
346
+ }
347
+ console.log(result.summary ?? '');
348
+ }
349
+ catch (err) {
350
+ printError(err);
351
+ process.exit(1);
352
+ }
353
+ });
354
+ agents
355
+ .command('stats')
356
+ .argument('<id>', 'Agent ID')
357
+ .option('--from <date>', 'YYYY-MM-DD (default: 30 days ago)')
358
+ .option('--to <date>', 'YYYY-MM-DD (default: today)')
359
+ .option('--channel <channel>', 'web, voice or all', 'all')
360
+ .description('Conversation metrics for one agent (test conversations excluded)')
361
+ .action(async (id, options) => {
362
+ try {
363
+ printJson(await new AgentInsightsSDK(new IndemnClient()).stats(id, { from: options.from, to: options.to, channel: options.channel }));
364
+ }
365
+ catch (err) {
366
+ printError(err);
367
+ process.exit(1);
368
+ }
369
+ });
163
370
  agents
164
371
  .command('card')
165
372
  .argument('<id>', 'Agent ID')
@@ -182,13 +389,14 @@ export function registerAgentCommands(program) {
182
389
  agents
183
390
  .command('clone')
184
391
  .argument('<id>', 'Agent ID to clone')
185
- .description('Clone an agent')
186
- .action(async (id) => {
392
+ .option('--name <name>', 'Name of the copy')
393
+ .description('Copy an agent of this org into a new agent in the same org')
394
+ .action(async (id, options) => {
187
395
  try {
188
396
  const client = new IndemnClient();
189
397
  const sdk = new AgentsSDK(client);
190
398
  const spinner = ora('Cloning agent...').start();
191
- const result = await sdk.cloneAgent(id);
399
+ const result = await sdk.cloneAgent(id, { name: options.name });
192
400
  spinner.stop();
193
401
  // Clone returns { new_agent_id, new_agent_name } or an Agent object
194
402
  const raw = result;
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/cli/agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/cli/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAnalyticsCommands(program: Command): void;
3
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/cli/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2GhE"}
@@ -0,0 +1,133 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { IndemnClient } from '../sdk/client.js';
3
+ import { AnalyticsSDK, AuditSDK, OrgSettingsSDK } from '../sdk/analytics.js';
4
+ import { CliError, EXIT } from '../core/runtime.js';
5
+ import { confirmOrExit } from './link.js';
6
+ import { formatTable, printError, printJson, printSuccess } from './utils/output.js';
7
+ function run(fn) {
8
+ return fn().catch((err) => {
9
+ printError(err);
10
+ process.exit(1);
11
+ });
12
+ }
13
+ function withRange(cmd, agent = true) {
14
+ cmd.option('--from <date>', 'YYYY-MM-DD (default: 30 days ago)').option('--to <date>', 'YYYY-MM-DD (default: today)');
15
+ if (agent)
16
+ cmd.option('--agent <id>', 'Only this agent').option('--channel <channel>', 'web, voice or all', 'all');
17
+ return cmd;
18
+ }
19
+ const KINDS = {
20
+ metrics: 'metrics',
21
+ performance: 'model-performance',
22
+ 'performance-by-agent': 'model-performance/bots',
23
+ volume: 'agent-volume',
24
+ handoffs: 'handoff-precursors',
25
+ feedback: 'critical-feedback',
26
+ };
27
+ export function registerAnalyticsCommands(program) {
28
+ const analytics = program.command('analytics').description('The numbers of the dashboard analytics pages (test conversations excluded)');
29
+ for (const [name, kind] of Object.entries(KINDS)) {
30
+ const perAgent = !['performance-by-agent', 'volume'].includes(name);
31
+ withRange(analytics.command(name).description(`Analytics: ${kind}`), perAgent)
32
+ .action((options) => run(async () => {
33
+ printJson(await new AnalyticsSDK(new IndemnClient()).get(kind, { from: options.from, to: options.to, channel: options.channel, agentId: options.agent }));
34
+ }));
35
+ }
36
+ withRange(analytics.command('conversations').description('The conversations behind a number, e.g. --dimension outcome --value handoff'))
37
+ .option('--dimension <name>', 'outcome, feedback, sentiment, precursor, reason, critical_feedback_theme or attribute:<key>')
38
+ .option('--value <value>', 'Value of the dimension')
39
+ .option('--search <text>', 'Text search')
40
+ .option('--page <n>', 'Page, starting at 1', '1')
41
+ .option('--page-size <n>', 'Rows per page (at most 200)', '50')
42
+ .action((options) => run(async () => {
43
+ printJson(await new AnalyticsSDK(new IndemnClient()).conversations({
44
+ from: options.from, to: options.to, channel: options.channel, agentId: options.agent, dimension: options.dimension, value: options.value,
45
+ search: options.search, page: Number(options.page), pageSize: Number(options.pageSize),
46
+ }));
47
+ }));
48
+ analytics.command('charts').description('Custom charts configured for the org').action(() => run(async () => {
49
+ printJson(await new AnalyticsSDK(new IndemnClient()).charts());
50
+ }));
51
+ withRange(analytics.command('chart').argument('<chart-id>', 'Chart ID from `analytics charts`').description('Data of one custom chart'))
52
+ .action((id, options) => run(async () => {
53
+ printJson(await new AnalyticsSDK(new IndemnClient()).chart(id, { from: options.from, to: options.to, channel: options.channel, agentId: options.agent }));
54
+ }));
55
+ const org = program.commands.find((c) => c.name() === 'org');
56
+ if (!org)
57
+ throw new Error('org command group must be registered before analytics commands');
58
+ const config = org.command('config').description('Org settings: timezone, business hours, holidays');
59
+ config.command('get').description('All org settings (handoff settings are read-only)').action(() => run(async () => {
60
+ printJson(await new OrgSettingsSDK(new IndemnClient()).get());
61
+ }));
62
+ config.command('availability').description('Is the org inside business hours now?').action(() => run(async () => {
63
+ printJson(await new OrgSettingsSDK(new IndemnClient()).availability());
64
+ }));
65
+ config.command('timezone')
66
+ .argument('<zone>', 'For example America/New_York')
67
+ .option('--yes', 'Do not ask for confirmation')
68
+ .action((zone, options) => run(async () => {
69
+ await confirmOrExit(`Set the org timezone to ${zone}? Business hours are read in this zone.`, Boolean(options.yes));
70
+ await new OrgSettingsSDK(new IndemnClient()).setTimezone(zone);
71
+ printSuccess(`Timezone set to ${zone}.`);
72
+ }));
73
+ config.command('business-hours')
74
+ .requiredOption('--file <path>', 'JSON: { "businessHoursEnabled": true, "businessHours": [{ "day": 1, "slots": [...] }], "businessHoursUtterance": "..." }')
75
+ .option('--yes', 'Do not ask for confirmation')
76
+ .description('Replace the business hours (days 0 Sunday to 6; empty slots close that day)')
77
+ .action((options) => run(async () => {
78
+ const hours = JSON.parse(readFileSync(options.file, 'utf8'));
79
+ await confirmOrExit('Replace the org business hours? Agents hand off only inside them.', Boolean(options.yes));
80
+ printJson(await new OrgSettingsSDK(new IndemnClient()).setBusinessHours(hours));
81
+ }));
82
+ const holidays = config.command('holidays').description('Days the org is closed');
83
+ holidays.command('add')
84
+ .requiredOption('--date <date>', 'YYYY-MM-DD')
85
+ .requiredOption('--name <name>', 'Holiday name')
86
+ .option('--message <text>', 'What agents say that day')
87
+ .option('--yes', 'Do not ask for confirmation')
88
+ .action((options) => run(async () => {
89
+ await confirmOrExit(`Close the org on ${options.date} (${options.name})?`, Boolean(options.yes));
90
+ printJson(await new OrgSettingsSDK(new IndemnClient()).addHolidays([{ name: options.name, date: options.date, ...(options.message ? { holidayFallbackUtterance: options.message } : {}) }]));
91
+ }));
92
+ holidays.command('remove')
93
+ .argument('<dates...>', 'YYYY-MM-DD dates')
94
+ .option('--yes', 'Do not ask for confirmation')
95
+ .action((dates, options) => run(async () => {
96
+ await confirmOrExit(`Remove ${dates.length} holiday(s)?`, Boolean(options.yes));
97
+ printJson(await new OrgSettingsSDK(new IndemnClient()).removeHolidays(dates));
98
+ }));
99
+ config.command('admin')
100
+ .argument('<settings...>', 'key=value pairs, e.g. enableTickets=true')
101
+ .option('--yes', 'Do not ask for confirmation')
102
+ .description('Indemn-only feature switches (the server refuses non-Indemn logins)')
103
+ .action((pairs, options) => run(async () => {
104
+ const settings = {};
105
+ for (const pair of pairs) {
106
+ const i = pair.indexOf('=');
107
+ if (i <= 0)
108
+ throw new CliError(`"${pair}" is not key=value.`, EXIT.NEEDS_INPUT);
109
+ const raw = pair.slice(i + 1);
110
+ settings[pair.slice(0, i)] = raw === 'true' ? true : raw === 'false' ? false : raw === 'null' ? null : Number.isFinite(Number(raw)) && raw !== '' ? Number(raw) : raw;
111
+ }
112
+ await confirmOrExit(`Change ${Object.keys(settings).join(', ')} for the org?`, Boolean(options.yes));
113
+ printJson(await new OrgSettingsSDK(new IndemnClient()).setAdminSettings(settings));
114
+ }));
115
+ program.command('audit').description('Who changed what in the org').command('list')
116
+ .option('--since <date>', 'Only entries from this date')
117
+ .option('--action <name>', 'Only this action or event type')
118
+ .option('--resource <type>', 'Only this resource type')
119
+ .option('--user <id>', 'Only this user')
120
+ .option('--limit <n>', 'At most this many (newest first)', '50')
121
+ .option('--json', 'Output as JSON')
122
+ .action((options) => run(async () => {
123
+ const rows = await new AuditSDK(new IndemnClient()).list({ since: options.since, action: options.action, resourceType: options.resource, user: options.user, limit: Number(options.limit) });
124
+ if (options.json) {
125
+ printJson(rows);
126
+ return;
127
+ }
128
+ console.log(formatTable(['When', 'Action', 'Resource', 'User', 'Status'], rows.map((e) => [
129
+ String(e.createdAt ?? ''), String(e.action ?? e.event_type ?? ''), `${e.resource_type ?? ''} ${e.resource_display ?? e.resource_id ?? ''}`.trim(), String(e.id_user ?? ''), String(e.status ?? ''),
130
+ ])));
131
+ }));
132
+ }
133
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/cli/analytics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAmB,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAErF,SAAS,GAAG,CAAC,EAAuB;IAClC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACxB,UAAU,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,GAAY,EAAE,KAAK,GAAG,IAAI;IAC3C,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,mCAAmC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC,CAAC;IACtH,IAAI,KAAK;QAAE,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;IACnH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,KAAK,GAA+B;IACxC,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,mBAAmB;IAChC,sBAAsB,EAAE,wBAAwB;IAChD,MAAM,EAAE,cAAc;IACtB,QAAQ,EAAE,oBAAoB;IAC9B,QAAQ,EAAE,mBAAmB;CAC9B,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,4EAA4E,CAAC,CAAC;IAEzI,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,CAAC,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpE,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC;aAC3E,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YAClC,SAAS,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5J,CAAC,CAAC,CAAC,CAAC;IACR,CAAC;IAED,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,6EAA6E,CAAC,CAAC;SACrI,MAAM,CAAC,oBAAoB,EAAE,6FAA6F,CAAC;SAC3H,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;SACnD,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,CAAC;SAChD,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,EAAE,IAAI,CAAC;SAC9D,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAClC,SAAS,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,aAAa,CAAC;YACjE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK;YACxI,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SACvF,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC,CAAC;IAEN,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC1G,SAAS,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC,CAAC;IAEJ,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,kCAAkC,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;SACrI,MAAM,CAAC,CAAC,EAAU,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC9C,SAAS,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5J,CAAC,CAAC,CAAC,CAAC;IAEN,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,kDAAkD,CAAC,CAAC;IAErG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,mDAAmD,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QACjH,SAAS,CAAC,MAAM,IAAI,cAAc,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC,CAAC;IACJ,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC9G,SAAS,CAAC,MAAM,IAAI,cAAc,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC,CAAC;IACJ,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;SACvB,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;SAC9C,MAAM,CAAC,CAAC,IAAY,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAChD,MAAM,aAAa,CAAC,2BAA2B,IAAI,yCAAyC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACpH,MAAM,IAAI,cAAc,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/D,YAAY,CAAC,mBAAmB,IAAI,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;SAC7B,cAAc,CAAC,eAAe,EAAE,0HAA0H,CAAC;SAC3J,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;SAC9C,WAAW,CAAC,6EAA6E,CAAC;SAC1F,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,MAAM,aAAa,CAAC,mEAAmE,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/G,SAAS,CAAC,MAAM,IAAI,cAAc,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAClF,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;SACpB,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC;SAC7C,cAAc,CAAC,eAAe,EAAE,cAAc,CAAC;SAC/C,MAAM,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;SACtD,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;SAC9C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAClC,MAAM,aAAa,CAAC,oBAAoB,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACjG,SAAS,CAAC,MAAM,IAAI,cAAc,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/L,CAAC,CAAC,CAAC,CAAC;IACN,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;SACvB,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;SAC1C,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;SAC9C,MAAM,CAAC,CAAC,KAAe,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QACnD,MAAM,aAAa,CAAC,UAAU,KAAK,CAAC,MAAM,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAChF,SAAS,CAAC,MAAM,IAAI,cAAc,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SACpB,QAAQ,CAAC,eAAe,EAAE,0CAA0C,CAAC;SACrE,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;SAC9C,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,CAAC,KAAe,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QACnD,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,qBAAqB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAChF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACxK,CAAC;QACD,MAAM,aAAa,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACrG,SAAS,CAAC,MAAM,IAAI,cAAc,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC,CAAC;IAEN,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;SAChF,MAAM,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;SAC3D,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;SACtD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;SACvC,MAAM,CAAC,aAAa,EAAE,kCAAkC,EAAE,IAAI,CAAC;SAC/D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7L,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACxF,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,aAAa,IAAI,EAAE,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;SACnM,CAAC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyCpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsG3D"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+DpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsH3D"}
package/dist/cli/auth.js CHANGED
@@ -3,6 +3,9 @@ import ora from 'ora';
3
3
  import * as readline from 'readline';
4
4
  import { Writable } from 'node:stream';
5
5
  import { login, logout, whoami } from '../sdk/auth.js';
6
+ import { findLinkFile } from '../core/org-resolver.js';
7
+ import { getOrgFlag } from '../core/scope.js';
8
+ import { SessionExpiredError } from '../core/runtime.js';
6
9
  import { printError, printSuccess, printJson } from './utils/output.js';
7
10
  function prompt(question) {
8
11
  const rl = readline.createInterface({
@@ -34,6 +37,28 @@ function promptPassword(question) {
34
37
  });
35
38
  });
36
39
  }
40
+ function describeCredential(info) {
41
+ if (info.credential === 'session') {
42
+ return info.source === 'env' ? 'session token from INDEMN_TOKEN (supplied by a host)' : 'login session';
43
+ }
44
+ return info.source === 'env' ? 'API key from INDEMN_API_KEY' : 'API key saved by an older login (run `indemn login` to switch to a session)';
45
+ }
46
+ /** Which org commands in this folder would use, without asking anything. */
47
+ function describeOrgRule(info) {
48
+ const flag = getOrgFlag();
49
+ if (flag)
50
+ return `${flag} (from --org)`;
51
+ if (process.env.INDEMN_ORG_ID)
52
+ return `${process.env.INDEMN_ORG_ID} (from INDEMN_ORG_ID)`;
53
+ const link = findLinkFile();
54
+ if (link)
55
+ return `${link.org_name ?? link.org_id} (linked in ${link.path})`;
56
+ if (info.orgs.length === 1)
57
+ return `${info.orgs[0].name} (your only org)`;
58
+ if (info.orgs.length > 1)
59
+ return `asked for each command; you belong to ${info.orgs.length}. Use --org <id> or \`indemn link\`.`;
60
+ return 'looked up on first use';
61
+ }
37
62
  export function registerAuthCommands(program) {
38
63
  program
39
64
  .command('login')
@@ -70,10 +95,21 @@ export function registerAuthCommands(program) {
70
95
  return code;
71
96
  },
72
97
  });
73
- spinner.succeed('Authenticated successfully');
74
- console.log(chalk.dim(` Org: ${result.orgId}`));
75
- console.log(chalk.dim(` Environment: ${result.environment}`));
76
- console.log(chalk.dim(` API Key: ${result.apiKey.substring(0, 12)}...`));
98
+ spinner.succeed(`Logged in as ${result.email} on ${result.environment}`);
99
+ if (result.expiresAt) {
100
+ console.log(chalk.dim(` Session valid until ${new Date(result.expiresAt).toLocaleString()}; it renews itself.`));
101
+ }
102
+ if (result.orgs.length === 0) {
103
+ console.log(chalk.yellow(' You are not a member of any organization yet. Ask an admin to add you.'));
104
+ }
105
+ else {
106
+ console.log(chalk.dim(` Organizations (${result.orgs.length}):`));
107
+ for (const o of result.orgs)
108
+ console.log(chalk.dim(` ${o.id} ${o.name}`));
109
+ if (result.orgs.length > 1) {
110
+ console.log(chalk.dim(' Choose one per command with --org <id>, or pin a project folder with `indemn link --org <id>`.'));
111
+ }
112
+ }
77
113
  }
78
114
  catch (err) {
79
115
  spinner.fail('Authentication failed');
@@ -93,11 +129,11 @@ export function registerAuthCommands(program) {
93
129
  });
94
130
  program
95
131
  .command('logout')
96
- .description('Clear stored credentials')
97
- .action(() => {
132
+ .description('Revoke the session and clear stored credentials')
133
+ .action(async () => {
98
134
  try {
99
- logout();
100
- printSuccess('Logged out successfully. Credentials cleared.');
135
+ const { revoked } = await logout();
136
+ printSuccess(revoked ? 'Logged out. The session was revoked and removed from this machine.' : 'Logged out. Credentials removed from this machine.');
101
137
  }
102
138
  catch (err) {
103
139
  printError(err);
@@ -112,21 +148,30 @@ export function registerAuthCommands(program) {
112
148
  try {
113
149
  const info = whoami();
114
150
  if (!info) {
115
- printError('Not authenticated. Run `indemn login` first.');
116
- process.exit(1);
151
+ printError(new SessionExpiredError('Not logged in. Run `indemn login` first.'));
152
+ process.exit(3);
117
153
  }
118
154
  if (options.json) {
119
- printJson(info);
155
+ printJson({ ...info, org_rule: describeOrgRule(info) });
120
156
  return;
121
157
  }
122
- console.log(chalk.bold('Current Authentication'));
123
- console.log(` API Key: ${info.apiKey}`);
124
- console.log(` Org ID: ${info.orgId}`);
125
- console.log(` User ID: ${info.userId}`);
126
- console.log(` Environment: ${info.environment}`);
158
+ console.log(chalk.bold('Current login'));
159
+ console.log(` Platform: ${info.environment}`);
160
+ if (info.email)
161
+ console.log(` User: ${info.email}`);
162
+ console.log(` Credential: ${describeCredential(info)}`);
163
+ if (info.sessionExpiresAt) {
164
+ console.log(` Session: valid until ${new Date(info.sessionExpiresAt).toLocaleString()} (renews itself)`);
165
+ }
166
+ console.log(` Org here: ${describeOrgRule(info)}`);
167
+ if (info.orgs.length) {
168
+ console.log(` Orgs:`);
169
+ for (const o of info.orgs)
170
+ console.log(` ${o.id} ${o.name}`);
171
+ }
127
172
  console.log(` Copilot: ${info.hosts.copilot}`);
128
173
  console.log(` Evaluations: ${info.hosts.evaluations}`);
129
- console.log(` Middleware: ${info.hosts.middleware}`);
174
+ console.log(` Middleware: ${info.hosts.middleware}`);
130
175
  }
131
176
  catch (err) {
132
177
  printError(err);