@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
@@ -0,0 +1,211 @@
1
+ import { AgentsSDK } from './agents.js';
2
+ import { ConfigSDK } from './config.js';
3
+ import { FunctionsSDK } from './functions.js';
4
+ import { transferDestination } from './skills.js';
5
+ import { modelForAgent } from './config-change.js';
6
+ import { KBSDK } from './kb.js';
7
+ import { CliError, EXIT } from '../core/runtime.js';
8
+ export const BUNDLE_FORMAT = 'indemn-agent/1';
9
+ const REDACTED = '<redacted>';
10
+ const SECRET_KEY = /(api[-_]?key|token|secret|password|passwd|authorization|auth|bearer|credential|private[-_]?key|client[-_]?secret)/i;
11
+ /** Web addresses that are secrets themselves: webhooks (anyone holding one can post), and URLs with a key in the query. */
12
+ const SECRET_URL = /^https?:\/\/\S*(hooks\.slack\.com\/|hooks\.zapier\.com\/|discord(app)?\.com\/api\/webhooks\/|\/webhooks?\/|[?&](api[-_]?key|key|token|secret|sig|signature|access_token|password)=)/i;
13
+ /** Replace every value under a secret-looking key, and every secret web address, at any depth. */
14
+ export function redactSecrets(value) {
15
+ const redacted = [];
16
+ const walk = (v, path) => {
17
+ if (Array.isArray(v))
18
+ return v.map((x, i) => walk(x, `${path}[${i}]`));
19
+ if (v && typeof v === 'object') {
20
+ const out = {};
21
+ for (const [k, x] of Object.entries(v)) {
22
+ const p = path ? `${path}.${k}` : k;
23
+ if ((SECRET_KEY.test(k) && x !== null && typeof x !== 'object' && x !== '') || (typeof x === 'string' && SECRET_URL.test(x))) {
24
+ out[k] = REDACTED;
25
+ redacted.push(p);
26
+ }
27
+ else {
28
+ out[k] = walk(x, p);
29
+ }
30
+ }
31
+ return out;
32
+ }
33
+ return v;
34
+ };
35
+ return { value: walk(value, ''), redacted };
36
+ }
37
+ function channelNames(channels) {
38
+ return (channels ?? []).map((c) => (typeof c === 'string' ? c : String(c.name ?? c.type ?? c)));
39
+ }
40
+ /**
41
+ * Everything needed to rebuild an agent elsewhere: name, channels, prompt,
42
+ * greeting, model, skills with parameters, and the ids of linked knowledge
43
+ * bases. Secrets inside skill settings are redacted unless asked otherwise.
44
+ */
45
+ export async function exportAgent(client, agentId, opts = {}) {
46
+ const agents = new AgentsSDK(client);
47
+ const functions = new FunctionsSDK(client);
48
+ const agent = await agents.getAgent(agentId);
49
+ const config = await new ConfigSDK(client).getConfig(agentId);
50
+ const skills = await functions.listFunctions(agentId);
51
+ const withParams = [];
52
+ for (const f of skills) {
53
+ const params = await functions.listParameters(agentId, f._id).catch(() => []);
54
+ withParams.push({
55
+ type: f.type,
56
+ name: f.name,
57
+ description: f.description,
58
+ configurationSchema: f.configurationSchema,
59
+ parameters: params.map(({ _id, ...rest }) => rest),
60
+ });
61
+ }
62
+ const mappings = await new KBSDK(client).listMappings(agentId).catch(() => []);
63
+ const llm = config.llm_config;
64
+ const bundle = {
65
+ format: BUNDLE_FORMAT,
66
+ exported_at: new Date().toISOString(),
67
+ source: { agent_id: agentId, org_id: await client.currentOrgId(), environment: client.getEnvironment() },
68
+ agent: { name: agent.name, description: agent.description, channels: channelNames(agent.channels) },
69
+ configuration: {
70
+ system_prompt: config.ai_config?.system_prompt,
71
+ first_message: config.first_message,
72
+ llm_config: llm ? { provider: llm.provider, model: llm.model, parameters: llm.parameters } : undefined,
73
+ },
74
+ skills: withParams,
75
+ knowledge_base_ids: mappings.map((m) => String(m.id ?? '')).filter(Boolean),
76
+ redacted: [],
77
+ };
78
+ if (opts.includeSecrets)
79
+ return bundle;
80
+ const { value, redacted } = redactSecrets(bundle.skills);
81
+ return { ...bundle, skills: value, redacted };
82
+ }
83
+ /**
84
+ * Create a new agent in the current org from a bundle. Skills that carry
85
+ * redacted secrets are still created; the report lists what must be filled in.
86
+ */
87
+ export async function importAgent(client, bundle, opts = {}) {
88
+ if (bundle.format !== BUNDLE_FORMAT)
89
+ throw new CliError(`Not an agent bundle (format ${String(bundle.format)}; expected ${BUNDLE_FORMAT}).`);
90
+ const agents = new AgentsSDK(client);
91
+ const functions = new FunctionsSDK(client);
92
+ const name = opts.name ?? bundle.agent.name;
93
+ if (!opts.allowDuplicate && (await agents.findByName(name)).length) {
94
+ throw new CliError(`An agent named "${name}" already exists in this org. Pass a new name, or allow a duplicate explicitly.`, EXIT.NEEDS_INPUT);
95
+ }
96
+ const agent = await agents.createAgent({ name, channels: bundle.agent.channels.length ? bundle.agent.channels : ['WEB'] });
97
+ if (bundle.agent.description)
98
+ await agents.updateAgent(agent._id, { description: bundle.agent.description });
99
+ const config = {};
100
+ if (bundle.configuration.system_prompt !== undefined)
101
+ config.system_prompt = bundle.configuration.system_prompt;
102
+ if (bundle.configuration.first_message)
103
+ config.first_message = JSON.stringify(bundle.configuration.first_message);
104
+ if (bundle.configuration.llm_config?.model)
105
+ config.llm_config = bundle.configuration.llm_config;
106
+ if (Object.keys(config).length)
107
+ await new ConfigSDK(client).setConfig(agent._id, config);
108
+ const report = {
109
+ agent, skills_created: 0, built_in_skills_reused: [], skills_failed: [], knowledge_bases_linked: [], knowledge_bases_skipped: [], needs_secrets: bundle.redacted,
110
+ };
111
+ // A new agent comes with the built-in skills; creating them again duplicates them (or fails).
112
+ const builtIns = (await functions.listFunctions(agent._id)).filter((f) => f.systemDeveloped);
113
+ for (const skill of bundle.skills) {
114
+ try {
115
+ // Call transfers are saved the way the dashboard saves them (older exports carry the destination elsewhere).
116
+ const config = skill.type === 'transfer_call' && skill.configurationSchema ? transferDestination({}, skill.configurationSchema) : skill.configurationSchema;
117
+ const builtIn = builtIns.find((f) => f.type === skill.type);
118
+ if (builtIn) {
119
+ if (config) {
120
+ await functions.updateFunction(agent._id, builtIn._id, {
121
+ type: skill.type, description: skill.description ?? builtIn.description ?? '', configurationSchema: config,
122
+ });
123
+ }
124
+ builtIns.splice(builtIns.indexOf(builtIn), 1);
125
+ report.built_in_skills_reused.push(skill.name ?? skill.type);
126
+ continue;
127
+ }
128
+ const created = await functions.createFunction(agent._id, { type: skill.type, name: skill.name, description: skill.description });
129
+ if (config) {
130
+ await functions.updateFunction(agent._id, created._id, {
131
+ type: skill.type, description: skill.description ?? '', configurationSchema: config,
132
+ });
133
+ }
134
+ for (const p of skill.parameters) {
135
+ const allowedValues = p.isEnumsEnabled ? (p.enums ?? []).map((e) => e.payload ?? e.title ?? '').filter(Boolean) : undefined;
136
+ await functions.addParameter(agent._id, created._id, { name: p.name, type: p.type, description: p.description, required: p.is_required, allowedValues });
137
+ }
138
+ report.skills_created++;
139
+ }
140
+ catch (err) {
141
+ report.skills_failed.push({ name: skill.name, error: err instanceof Error ? err.message : String(err) });
142
+ }
143
+ }
144
+ if (opts.linkKnowledgeBases && bundle.knowledge_base_ids.length) {
145
+ const kb = new KBSDK(client);
146
+ for (const id of bundle.knowledge_base_ids) {
147
+ try {
148
+ await kb.linkKB(agent._id, [id]);
149
+ report.knowledge_bases_linked.push(id);
150
+ }
151
+ catch {
152
+ report.knowledge_bases_skipped.push(id);
153
+ }
154
+ }
155
+ }
156
+ else {
157
+ report.knowledge_bases_skipped.push(...bundle.knowledge_base_ids);
158
+ }
159
+ return report;
160
+ }
161
+ /** Fields a new agent should have before it is created; the caller asks for the missing ones. */
162
+ export function missingSkeletonFields(s) {
163
+ const missing = [];
164
+ if (!s.name?.trim())
165
+ missing.push('name');
166
+ if (!s.description?.trim())
167
+ missing.push('description');
168
+ if (!s.system_prompt?.trim())
169
+ missing.push('system_prompt');
170
+ return missing;
171
+ }
172
+ /**
173
+ * Create an agent with its basics in one go: refuse a duplicate name, create
174
+ * it, then set the purpose, prompt and model. Returns what was set.
175
+ */
176
+ export async function createAgentFromSkeleton(client, s, opts = {}) {
177
+ const agents = new AgentsSDK(client);
178
+ const name = s.name.trim();
179
+ if (!name)
180
+ throw new CliError('An agent needs a name.', EXIT.NEEDS_INPUT);
181
+ if (!opts.allowDuplicate) {
182
+ const same = await agents.findByName(name);
183
+ if (same.length) {
184
+ throw new CliError(`An agent named "${name}" already exists in this org (${same.map((a) => a._id).join(', ')}). Choose another name or allow a duplicate explicitly.`, EXIT.NEEDS_INPUT);
185
+ }
186
+ }
187
+ const agent = await agents.createAgent({ name, channels: s.channels?.length ? s.channels : ['WEB'] });
188
+ const set = ['name', 'channels'];
189
+ if (s.description?.trim()) {
190
+ await agents.updateAgent(agent._id, { description: s.description.trim() });
191
+ set.push('description');
192
+ }
193
+ const config = {};
194
+ if (s.system_prompt?.trim())
195
+ config.system_prompt = s.system_prompt;
196
+ if (s.model)
197
+ config.llm_config = await modelForAgent(client, s.model, s.channels ?? ['WEB']);
198
+ if (Object.keys(config).length) {
199
+ await new ConfigSDK(client).setConfig(agent._id, config);
200
+ set.push(...Object.keys(config).map((k) => (k === 'llm_config' ? 'model' : k)));
201
+ }
202
+ return { agent, set };
203
+ }
204
+ /** "openai/gpt-4.1" -> { provider: "openai", model: "gpt-4.1" }. */
205
+ export function parseModel(value) {
206
+ const i = value.indexOf('/');
207
+ if (i <= 0 || i === value.length - 1)
208
+ throw new CliError(`Model must look like provider/model, for example openai/gpt-4.1 (got "${value}").`, EXIT.NEEDS_INPUT);
209
+ return { provider: value.slice(0, i), model: value.slice(i + 1) };
210
+ }
211
+ //# sourceMappingURL=agent-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-bundle.js","sourceRoot":"","sources":["../../src/sdk/agent-bundle.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,59 @@ export declare class AgentsSDK {
8
8
  createAgent(input: CreateAgentInput): Promise<Agent>;
9
9
  updateAgent(id: string, input: UpdateAgentInput): Promise<Agent>;
10
10
  deleteAgent(id: string): Promise<void>;
11
- cloneAgent(id: string): Promise<Agent>;
11
+ /** Agents in this org with the same name (case and surrounding spaces ignored). */
12
+ findByName(name: string): Promise<Agent[]>;
13
+ /**
14
+ * Copy an agent within the current org. copilot's clone route accepts a
15
+ * source from any org, so the source is first fetched through the org
16
+ * (copilot refuses an agent of another org) before cloning.
17
+ */
18
+ cloneAgent(id: string, opts?: {
19
+ name?: string;
20
+ channels?: string[];
21
+ }): Promise<Agent>;
22
+ }
23
+ export type Lifecycle = 'prototype' | 'beta' | 'published';
24
+ /** An agent as the V2 platform (Darwin) describes it: lifecycle, owner, tools and knowledge. */
25
+ export interface AgentDetail {
26
+ id: string;
27
+ name: string;
28
+ lifecycle?: Lifecycle;
29
+ owner?: {
30
+ id: string;
31
+ firstname?: string;
32
+ lastname?: string;
33
+ email?: string;
34
+ } | null;
35
+ owner_id?: string;
36
+ lifecycle_history?: Array<{
37
+ from_stage?: string;
38
+ to_stage?: string;
39
+ changed_by?: string;
40
+ changed_at?: string;
41
+ }>;
42
+ [key: string]: unknown;
43
+ }
44
+ /**
45
+ * Agent operations that live on the V2 platform or in analytics. Lifecycle
46
+ * and ownership go through Darwin because it checks the caller is the owner
47
+ * or an org admin; copilot only checks membership.
48
+ */
49
+ export declare class AgentInsightsSDK {
50
+ private client;
51
+ constructor(client: IndemnClient);
52
+ detail(id: string): Promise<AgentDetail>;
53
+ setLifecycle(id: string, lifecycle: Lifecycle): Promise<AgentDetail>;
54
+ transferOwner(id: string, ownerId: string): Promise<AgentDetail>;
55
+ /** A compact description an AI can read before acting: `text` is one paragraph, otherwise skills and knowledge are listed. */
56
+ summary(id: string, opts?: {
57
+ text?: boolean;
58
+ }): Promise<unknown>;
59
+ /** Conversation metrics for one agent (org analytics filtered by agent). Default: the last 30 days. */
60
+ stats(id: string, opts?: {
61
+ from?: string;
62
+ to?: string;
63
+ channel?: 'web' | 'voice' | 'all';
64
+ }): Promise<unknown>;
12
65
  }
13
66
  //# sourceMappingURL=agents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/sdk/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE5E,qBAAa,SAAS;IACR,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAElC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAM9B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAQpC,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;IAOpD,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;IAOhE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;CAM7C"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/sdk/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE5E,qBAAa,SAAS;IACR,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAElC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAM9B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAUpC,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;IAQpD,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;IAOhE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C,mFAAmF;IAC7E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAKhD;;;;OAIG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAO,GAAG,OAAO,CAAC,KAAK,CAAC;CAQhG;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,gGAAgG;AAChG,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD;;;;GAIG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAExC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIxC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAIpE,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIhE,8HAA8H;IAC9H,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpE,uGAAuG;IACvG,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAOlH"}
@@ -1,3 +1,4 @@
1
+ import { CliError } from '../core/runtime.js';
1
2
  export class AgentsSDK {
2
3
  client;
3
4
  constructor(client) {
@@ -8,11 +9,16 @@ export class AgentsSDK {
8
9
  }
9
10
  async getAgent(id) {
10
11
  const result = await this.client.copilotGet(`/organization/:org_id/ai-studio/v2/bots/${id}`);
11
- // v2 endpoint returns array even for single bot
12
- return Array.isArray(result) ? result[0] : result;
12
+ // v2 endpoint returns array even for single bot; an empty one means deleted or not in this org
13
+ const agent = Array.isArray(result) ? result[0] : result;
14
+ if (!agent)
15
+ throw new CliError(`Agent ${id} was not found in this organization (deleted, or in another org).`);
16
+ return agent;
13
17
  }
14
18
  async createAgent(input) {
15
- return this.client.copilotPost('/organization/:org_id/ai-studio/bots', { name: input.name, channels: input.channels || ['WEB'] });
19
+ return this.client.copilotPost('/organization/:org_id/ai-studio/bots',
20
+ // copilot matches channel names exactly (WEB, VOICE, EMAIL) and fails on "voice".
21
+ { name: input.name, channels: (input.channels || ['WEB']).map((c) => c.toUpperCase()) });
16
22
  }
17
23
  async updateAgent(id, input) {
18
24
  return this.client.copilotPut(`/organization/:org_id/ai-studio/bots/${id}`, input);
@@ -20,8 +26,56 @@ export class AgentsSDK {
20
26
  async deleteAgent(id) {
21
27
  await this.client.copilotDelete(`/organization/:org_id/ai-studio/bots/${id}`);
22
28
  }
23
- async cloneAgent(id) {
24
- return this.client.copilotPost('/organization/:org_id/ai-studio/v2/bots/clone', { source_id_bot: id });
29
+ /** Agents in this org with the same name (case and surrounding spaces ignored). */
30
+ async findByName(name) {
31
+ const wanted = name.trim().toLowerCase();
32
+ return (await this.listAgents()).filter((a) => !a.trashed && (a.name ?? '').trim().toLowerCase() === wanted);
33
+ }
34
+ /**
35
+ * Copy an agent within the current org. copilot's clone route accepts a
36
+ * source from any org, so the source is first fetched through the org
37
+ * (copilot refuses an agent of another org) before cloning.
38
+ */
39
+ async cloneAgent(id, opts = {}) {
40
+ const source = await this.getAgent(id);
41
+ if (!source)
42
+ throw new Error(`Agent ${id} is not in this org.`);
43
+ return this.client.copilotPost('/organization/:org_id/ai-studio/v2/bots/clone', { source_id_bot: id, ...(opts.name ? { agent_name: opts.name } : {}), ...(opts.channels ? { channels: opts.channels.map((c) => c.toUpperCase()) } : {}) });
44
+ }
45
+ }
46
+ function isoDay(d) {
47
+ return d.toISOString().slice(0, 10);
48
+ }
49
+ /**
50
+ * Agent operations that live on the V2 platform or in analytics. Lifecycle
51
+ * and ownership go through Darwin because it checks the caller is the owner
52
+ * or an org admin; copilot only checks membership.
53
+ */
54
+ export class AgentInsightsSDK {
55
+ client;
56
+ constructor(client) {
57
+ this.client = client;
58
+ }
59
+ detail(id) {
60
+ return this.client.platformRequest('GET', `/v1-agents/${id}`);
61
+ }
62
+ setLifecycle(id, lifecycle) {
63
+ return this.client.platformRequest('PATCH', `/v1-agents/${id}/lifecycle`, { body: { lifecycle } });
64
+ }
65
+ transferOwner(id, ownerId) {
66
+ return this.client.platformRequest('PATCH', `/v1-agents/${id}/owner`, { body: { owner_id: ownerId } });
67
+ }
68
+ /** A compact description an AI can read before acting: `text` is one paragraph, otherwise skills and knowledge are listed. */
69
+ summary(id, opts = {}) {
70
+ return this.client.platformRequest('GET', `/v1-agents/${id}/summary${opts.text ? '/text' : ''}`);
71
+ }
72
+ /** Conversation metrics for one agent (org analytics filtered by agent). Default: the last 30 days. */
73
+ stats(id, opts = {}) {
74
+ const to = opts.to ?? isoDay(new Date());
75
+ const from = opts.from ?? isoDay(new Date(Date.now() - 30 * 86_400_000));
76
+ return this.client.copilotGet('/organization/:org_id/analytics/metrics', {
77
+ agent_id: id, date_from: from, date_to: to, channel: opts.channel ?? 'all',
78
+ });
25
79
  }
26
80
  }
27
81
  //# sourceMappingURL=agents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/sdk/agents.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IACA;IAApB,YAAoB,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAE5C,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAC3B,yCAAyC,CAC1C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CACzC,2CAA2C,EAAE,EAAE,CAChD,CAAC;QACF,gDAAgD;QAChD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAuB;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAC5B,sCAAsC,EACtC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,CAC1D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,KAAuB;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAC3B,wCAAwC,EAAE,EAAE,EAC5C,KAAK,CACN,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAC7B,wCAAwC,EAAE,EAAE,CAC7C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAC5B,+CAA+C,EAC/C,EAAE,aAAa,EAAE,EAAE,EAAE,CACtB,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/sdk/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ import type { IndemnClient } from './client.js';
2
+ export interface AnalyticsRange {
3
+ from?: string;
4
+ to?: string;
5
+ channel?: 'web' | 'voice' | 'all';
6
+ agentId?: string;
7
+ }
8
+ /** YYYY-MM-DD range, default the last 30 days; copilot refuses spans over 365 days. */
9
+ export declare function rangeQuery(r: AnalyticsRange, opts?: {
10
+ withChannel?: boolean;
11
+ withAgent?: boolean;
12
+ }): Record<string, string>;
13
+ export type MetricKind = 'metrics' | 'model-performance' | 'model-performance/bots' | 'agent-volume' | 'handoff-precursors' | 'critical-feedback';
14
+ /** The numbers the dashboard's analytics pages show. Test conversations are excluded by copilot. */
15
+ export declare class AnalyticsSDK {
16
+ private client;
17
+ constructor(client: IndemnClient);
18
+ get(kind: MetricKind, range?: AnalyticsRange): Promise<unknown>;
19
+ /** Conversations behind a number, for example all with a given outcome (1-based pages, at most 200 rows). */
20
+ conversations(range: AnalyticsRange & {
21
+ dimension?: string;
22
+ value?: string;
23
+ search?: string;
24
+ page?: number;
25
+ pageSize?: number;
26
+ }): Promise<unknown>;
27
+ charts(): Promise<{
28
+ charts?: unknown[];
29
+ }>;
30
+ chart(id: string, range?: AnalyticsRange): Promise<unknown>;
31
+ }
32
+ export interface BusinessHours {
33
+ businessHoursEnabled: boolean;
34
+ businessHours?: Array<{
35
+ day: number;
36
+ slots: unknown[];
37
+ }>;
38
+ businessHoursUtterance?: string;
39
+ }
40
+ /**
41
+ * Org settings the dashboard lets members change: timezone, business hours,
42
+ * holidays. Handoff settings are read-only over the API. The route that
43
+ * deletes the whole configuration is deliberately never called.
44
+ */
45
+ export declare class OrgSettingsSDK {
46
+ private client;
47
+ constructor(client: IndemnClient);
48
+ get(): Promise<Record<string, unknown>>;
49
+ /** Whether the org is inside business hours now. */
50
+ availability(): Promise<unknown>;
51
+ setTimezone(timezone: string): Promise<unknown>;
52
+ setBusinessHours(hours: BusinessHours): Promise<unknown>;
53
+ addHolidays(holidays: Array<{
54
+ name: string;
55
+ date: string;
56
+ type?: string;
57
+ holidayFallbackUtterance?: string;
58
+ }>): Promise<unknown>;
59
+ removeHolidays(dates: string[]): Promise<unknown>;
60
+ /** Indemn-only feature switches; copilot refuses anyone without an @indemn.ai login. */
61
+ setAdminSettings(settings: Record<string, unknown>): Promise<unknown>;
62
+ /** An Admin-tab change checked as the page checks it; reads the saved disclosure only when the change touches it. */
63
+ planAdmin(input: Record<string, unknown>): Promise<AdminPlan>;
64
+ }
65
+ /** The switches on the dashboard's Settings → Admin tab (org-settings.tsx), by the name the MCP tool takes. */
66
+ export declare const ADMIN_SWITCHES: {
67
+ readonly conversation_summaries: {
68
+ readonly key: "summaryEnabled";
69
+ readonly label: "AI Conversation Summaries";
70
+ };
71
+ readonly canned_responses: {
72
+ readonly key: "cannedResponsesEnabled";
73
+ readonly label: "Canned Responses";
74
+ };
75
+ readonly indemn_branding: {
76
+ readonly key: "displayBranding";
77
+ readonly label: "Show Indemn Branding";
78
+ };
79
+ readonly underwriting_portal: {
80
+ readonly key: "enableUnderwritingPortal";
81
+ readonly label: "Underwriting Portal (Intake Manager)";
82
+ };
83
+ readonly smart_inbox: {
84
+ readonly key: "enableSmartInbox";
85
+ readonly label: "Smart Inbox";
86
+ };
87
+ readonly solutions: {
88
+ readonly key: "enableSolutions";
89
+ readonly label: "Solutions";
90
+ };
91
+ readonly tickets: {
92
+ readonly key: "enableTickets";
93
+ readonly label: "Tickets";
94
+ };
95
+ readonly agent_testing: {
96
+ readonly key: "enableAgentTesting";
97
+ readonly label: "Agent Testing Mode";
98
+ };
99
+ readonly composer_dictation: {
100
+ readonly key: "enableComposerDictation";
101
+ readonly label: "Composer Dictation";
102
+ };
103
+ readonly web_ai_disclosure: {
104
+ readonly key: "showAiDisclosureWeb";
105
+ readonly label: "Show Web AI Disclosure";
106
+ };
107
+ };
108
+ /** The conversation timers, in minutes here; copilot stores days and refuses less than these minimums (orgConfig.js). */
109
+ export declare const ADMIN_TIMERS: {
110
+ readonly ongoing_to_ended_minutes: {
111
+ readonly key: "unassignedInactiveDays";
112
+ readonly label: "Ongoing → Ended";
113
+ readonly min: 1;
114
+ };
115
+ readonly ended_to_resolved_minutes: {
116
+ readonly key: "endedToResolvedDays";
117
+ readonly label: "Ended → Resolved";
118
+ readonly min: 10;
119
+ };
120
+ readonly resolved_to_archived_minutes: {
121
+ readonly key: "resolvedToArchivedDays";
122
+ readonly label: "Resolved → Archived";
123
+ readonly min: 1;
124
+ };
125
+ };
126
+ export interface AdminPlan {
127
+ /** The admin-settings body: real booleans, days for the timers, null for "the default". */
128
+ body: Record<string, unknown>;
129
+ /** The changes in the page's words, for the approval. */
130
+ changes: string[];
131
+ }
132
+ /** Refuses what the Admin tab refuses: nothing to change, a timer under its minimum, a disclosure shown without text. */
133
+ export declare function planAdminSettings(input: Record<string, unknown>, saved?: Record<string, unknown>): AdminPlan;
134
+ export interface AuditEntry {
135
+ _id?: string;
136
+ id_user?: string;
137
+ event_type?: string;
138
+ action?: string;
139
+ resource_type?: string;
140
+ resource_id?: string;
141
+ resource_display?: string;
142
+ status?: string;
143
+ createdAt?: string;
144
+ [key: string]: unknown;
145
+ }
146
+ /** Who changed what in the org. copilot returns the full history; filtering happens here. */
147
+ export declare class AuditSDK {
148
+ private client;
149
+ constructor(client: IndemnClient);
150
+ list(filter?: {
151
+ since?: string;
152
+ action?: string;
153
+ resourceType?: string;
154
+ user?: string;
155
+ limit?: number;
156
+ }): Promise<AuditEntry[]>;
157
+ }
158
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/sdk/analytics.ts"],"names":[],"mappings":"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"}