@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.
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +9 -4
- package/.github/workflows/ci.yml +10 -0
- package/.github/workflows/publish.yml +2 -2
- package/.mcp.json +1 -4
- package/CONTRIBUTING.md +3 -1
- package/README.md +69 -176
- package/dist/cli/agents.d.ts.map +1 -1
- package/dist/cli/agents.js +226 -18
- package/dist/cli/agents.js.map +1 -1
- package/dist/cli/analytics.d.ts +3 -0
- package/dist/cli/analytics.d.ts.map +1 -0
- package/dist/cli/analytics.js +133 -0
- package/dist/cli/analytics.js.map +1 -0
- package/dist/cli/auth.d.ts.map +1 -1
- package/dist/cli/auth.js +62 -17
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/billing.d.ts +3 -0
- package/dist/cli/billing.d.ts.map +1 -0
- package/dist/cli/billing.js +23 -0
- package/dist/cli/billing.js.map +1 -0
- package/dist/cli/campaigns.d.ts +3 -0
- package/dist/cli/campaigns.d.ts.map +1 -0
- package/dist/cli/campaigns.js +34 -0
- package/dist/cli/campaigns.js.map +1 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +69 -102
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +71 -27
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/conversations.d.ts +3 -0
- package/dist/cli/conversations.d.ts.map +1 -0
- package/dist/cli/conversations.js +129 -0
- package/dist/cli/conversations.js.map +1 -0
- package/dist/cli/distribution.d.ts +3 -0
- package/dist/cli/distribution.d.ts.map +1 -0
- package/dist/cli/distribution.js +122 -0
- package/dist/cli/distribution.js.map +1 -0
- package/dist/cli/eval.d.ts.map +1 -1
- package/dist/cli/eval.js +315 -71
- package/dist/cli/eval.js.map +1 -1
- package/dist/cli/functions.d.ts.map +1 -1
- package/dist/cli/functions.js +125 -35
- package/dist/cli/functions.js.map +1 -1
- package/dist/cli/index.js +63 -54
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +27 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +152 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/kb.d.ts.map +1 -1
- package/dist/cli/kb.js +141 -15
- package/dist/cli/kb.js.map +1 -1
- package/dist/cli/link.d.ts +21 -0
- package/dist/cli/link.d.ts.map +1 -0
- package/dist/cli/link.js +112 -0
- package/dist/cli/link.js.map +1 -0
- package/dist/cli/org.d.ts.map +1 -1
- package/dist/cli/org.js +79 -67
- package/dist/cli/org.js.map +1 -1
- package/dist/cli/platform.d.ts +3 -0
- package/dist/cli/platform.d.ts.map +1 -0
- package/dist/cli/platform.js +133 -0
- package/dist/cli/platform.js.map +1 -0
- package/dist/cli/tickets.d.ts +3 -0
- package/dist/cli/tickets.d.ts.map +1 -0
- package/dist/cli/tickets.js +125 -0
- package/dist/cli/tickets.js.map +1 -0
- package/dist/cli/utils/output.d.ts +15 -9
- package/dist/cli/utils/output.d.ts.map +1 -1
- package/dist/cli/utils/output.js +53 -46
- package/dist/cli/utils/output.js.map +1 -1
- package/dist/cli/voice.d.ts +3 -0
- package/dist/cli/voice.d.ts.map +1 -0
- package/dist/cli/voice.js +206 -0
- package/dist/cli/voice.js.map +1 -0
- package/dist/core/diff.d.ts +16 -0
- package/dist/core/diff.d.ts.map +1 -0
- package/dist/core/diff.js +57 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/org-resolver.d.ts +37 -0
- package/dist/core/org-resolver.d.ts.map +1 -0
- package/dist/core/org-resolver.js +73 -0
- package/dist/core/org-resolver.js.map +1 -0
- package/dist/core/runtime.d.ts +36 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +62 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/scope.d.ts +33 -0
- package/dist/core/scope.d.ts.map +1 -0
- package/dist/core/scope.js +37 -0
- package/dist/core/scope.js.map +1 -0
- package/dist/mcp/registry.d.ts +67 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +195 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +87 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-meta.d.ts +21 -0
- package/dist/mcp/tool-meta.d.ts.map +1 -0
- package/dist/mcp/tool-meta.js +203 -0
- package/dist/mcp/tool-meta.js.map +1 -0
- package/dist/mcp/tools.d.ts +2 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +1462 -215
- package/dist/mcp/tools.js.map +1 -1
- package/dist/sdk/agent-bundle.d.ts +99 -0
- package/dist/sdk/agent-bundle.d.ts.map +1 -0
- package/dist/sdk/agent-bundle.js +211 -0
- package/dist/sdk/agent-bundle.js.map +1 -0
- package/dist/sdk/agents.d.ts +54 -1
- package/dist/sdk/agents.d.ts.map +1 -1
- package/dist/sdk/agents.js +59 -5
- package/dist/sdk/agents.js.map +1 -1
- package/dist/sdk/analytics.d.ts +158 -0
- package/dist/sdk/analytics.d.ts.map +1 -0
- package/dist/sdk/analytics.js +185 -0
- package/dist/sdk/analytics.js.map +1 -0
- package/dist/sdk/auth.d.ts +34 -12
- package/dist/sdk/auth.d.ts.map +1 -1
- package/dist/sdk/auth.js +60 -77
- package/dist/sdk/auth.js.map +1 -1
- package/dist/sdk/billing.d.ts +25 -0
- package/dist/sdk/billing.d.ts.map +1 -0
- package/dist/sdk/billing.js +61 -0
- package/dist/sdk/billing.js.map +1 -0
- package/dist/sdk/campaigns.d.ts +35 -0
- package/dist/sdk/campaigns.d.ts.map +1 -0
- package/dist/sdk/campaigns.js +59 -0
- package/dist/sdk/campaigns.js.map +1 -0
- package/dist/sdk/chat.d.ts +25 -2
- package/dist/sdk/chat.d.ts.map +1 -1
- package/dist/sdk/chat.js +37 -10
- package/dist/sdk/chat.js.map +1 -1
- package/dist/sdk/client.d.ts +93 -5
- package/dist/sdk/client.d.ts.map +1 -1
- package/dist/sdk/client.js +362 -100
- package/dist/sdk/client.js.map +1 -1
- package/dist/sdk/config-change.d.ts +74 -0
- package/dist/sdk/config-change.d.ts.map +1 -0
- package/dist/sdk/config-change.js +117 -0
- package/dist/sdk/config-change.js.map +1 -0
- package/dist/sdk/config.d.ts.map +1 -1
- package/dist/sdk/config.js +2 -1
- package/dist/sdk/config.js.map +1 -1
- package/dist/sdk/conversations.d.ts +101 -0
- package/dist/sdk/conversations.d.ts.map +1 -0
- package/dist/sdk/conversations.js +155 -0
- package/dist/sdk/conversations.js.map +1 -0
- package/dist/sdk/credentials.d.ts +25 -0
- package/dist/sdk/credentials.d.ts.map +1 -0
- package/dist/sdk/credentials.js +44 -0
- package/dist/sdk/credentials.js.map +1 -0
- package/dist/sdk/distribution.d.ts +94 -0
- package/dist/sdk/distribution.d.ts.map +1 -0
- package/dist/sdk/distribution.js +100 -0
- package/dist/sdk/distribution.js.map +1 -0
- package/dist/sdk/eval.d.ts +81 -0
- package/dist/sdk/eval.d.ts.map +1 -1
- package/dist/sdk/eval.js +117 -0
- package/dist/sdk/eval.js.map +1 -1
- package/dist/sdk/functions.d.ts +14 -1
- package/dist/sdk/functions.d.ts.map +1 -1
- package/dist/sdk/functions.js +48 -5
- package/dist/sdk/functions.js.map +1 -1
- package/dist/sdk/index.d.ts +2 -0
- package/dist/sdk/index.d.ts.map +1 -1
- package/dist/sdk/index.js +2 -0
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/jarvis-chat.d.ts +28 -0
- package/dist/sdk/jarvis-chat.d.ts.map +1 -0
- package/dist/sdk/jarvis-chat.js +117 -0
- package/dist/sdk/jarvis-chat.js.map +1 -0
- package/dist/sdk/kb.d.ts +69 -1
- package/dist/sdk/kb.d.ts.map +1 -1
- package/dist/sdk/kb.js +111 -24
- package/dist/sdk/kb.js.map +1 -1
- package/dist/sdk/orgs.d.ts +13 -0
- package/dist/sdk/orgs.d.ts.map +1 -0
- package/dist/sdk/orgs.js +59 -0
- package/dist/sdk/orgs.js.map +1 -0
- package/dist/sdk/platform.d.ts +62 -0
- package/dist/sdk/platform.d.ts.map +1 -0
- package/dist/sdk/platform.js +95 -0
- package/dist/sdk/platform.js.map +1 -0
- package/dist/sdk/session.d.ts +25 -0
- package/dist/sdk/session.d.ts.map +1 -0
- package/dist/sdk/session.js +69 -0
- package/dist/sdk/session.js.map +1 -0
- package/dist/sdk/skills.d.ts +46 -0
- package/dist/sdk/skills.d.ts.map +1 -0
- package/dist/sdk/skills.js +203 -0
- package/dist/sdk/skills.js.map +1 -0
- package/dist/sdk/test-chat.d.ts +52 -0
- package/dist/sdk/test-chat.d.ts.map +1 -0
- package/dist/sdk/test-chat.js +134 -0
- package/dist/sdk/test-chat.js.map +1 -0
- package/dist/sdk/tickets.d.ts +98 -0
- package/dist/sdk/tickets.d.ts.map +1 -0
- package/dist/sdk/tickets.js +91 -0
- package/dist/sdk/tickets.js.map +1 -0
- package/dist/sdk/types.d.ts +91 -6
- package/dist/sdk/types.d.ts.map +1 -1
- package/dist/sdk/voice.d.ts +147 -0
- package/dist/sdk/voice.d.ts.map +1 -0
- package/dist/sdk/voice.js +236 -0
- package/dist/sdk/voice.js.map +1 -0
- package/package.json +22 -3
- package/scripts/check-skills.mjs +25 -0
- package/skills/agent-builder/SKILL.md +89 -252
- package/skills/evaluations/SKILL.md +23 -234
- package/skills/evaluations/references/analysis.md +95 -0
- package/skills/evaluations/references/cli-reference.md +28 -0
- package/skills/evaluations/references/json-formats.md +100 -0
- package/src/cli/agents.ts +202 -22
- package/src/cli/analytics.ts +138 -0
- package/src/cli/auth.ts +56 -18
- package/src/cli/billing.ts +25 -0
- package/src/cli/campaigns.ts +33 -0
- package/src/cli/chat.ts +66 -115
- package/src/cli/config.ts +65 -31
- package/src/cli/conversations.ts +133 -0
- package/src/cli/distribution.ts +116 -0
- package/src/cli/eval.ts +254 -70
- package/src/cli/functions.ts +122 -36
- package/src/cli/index.ts +58 -55
- package/src/cli/init.ts +154 -0
- package/src/cli/kb.ts +120 -17
- package/src/cli/link.ts +117 -0
- package/src/cli/org.ts +81 -75
- package/src/cli/platform.ts +128 -0
- package/src/cli/tickets.ts +130 -0
- package/src/cli/utils/output.ts +51 -42
- package/src/cli/voice.ts +204 -0
- package/src/core/diff.ts +52 -0
- package/src/core/org-resolver.ts +113 -0
- package/src/core/runtime.ts +73 -0
- package/src/core/scope.ts +64 -0
- package/src/mcp/registry.ts +236 -0
- package/src/mcp/server.ts +84 -2
- package/src/mcp/tool-meta.ts +241 -0
- package/src/mcp/tools.ts +1529 -265
- package/src/sdk/agent-bundle.ts +245 -0
- package/src/sdk/agents.ts +74 -5
- package/src/sdk/analytics.ts +220 -0
- package/src/sdk/auth.ts +87 -107
- package/src/sdk/billing.ts +59 -0
- package/src/sdk/campaigns.ts +60 -0
- package/src/sdk/chat.ts +44 -10
- package/src/sdk/client.ts +373 -102
- package/src/sdk/config-change.ts +148 -0
- package/src/sdk/config.ts +2 -1
- package/src/sdk/conversations.ts +199 -0
- package/src/sdk/credentials.ts +53 -0
- package/src/sdk/distribution.ts +132 -0
- package/src/sdk/eval.ts +140 -0
- package/src/sdk/functions.ts +52 -6
- package/src/sdk/index.ts +2 -0
- package/src/sdk/jarvis-chat.ts +112 -0
- package/src/sdk/kb.ts +116 -29
- package/src/sdk/orgs.ts +62 -0
- package/src/sdk/platform.ts +115 -0
- package/src/sdk/session.ts +90 -0
- package/src/sdk/skills.ts +188 -0
- package/src/sdk/test-chat.ts +151 -0
- package/src/sdk/tickets.ts +120 -0
- package/src/sdk/types.ts +88 -6
- package/src/sdk/voice.ts +262 -0
- package/test/cli/entry.test.ts +34 -0
- package/test/cli/init.test.ts +66 -0
- package/test/cli/link.test.ts +57 -0
- package/test/core/org-resolver.test.ts +92 -0
- package/test/core/runtime.test.ts +30 -0
- package/test/core/scope.test.ts +93 -0
- package/test/harness.test.ts +24 -0
- package/test/helpers/config-home.ts +22 -0
- package/test/helpers/fake-middleware.ts +56 -0
- package/test/helpers/fetch-recorder.ts +75 -0
- package/test/helpers/jwt.ts +9 -0
- package/test/helpers/mcp-pair.ts +38 -0
- package/test/mcp/__snapshots__/tools-snapshot.test.ts.snap +145 -0
- package/test/mcp/askers.test.ts +60 -0
- package/test/mcp/elicit-timeout.test.ts +29 -0
- package/test/mcp/registry.test.ts +169 -0
- package/test/mcp/shaping.test.ts +41 -0
- package/test/mcp/tools-snapshot.test.ts +42 -0
- package/test/sdk/agents.test.ts +232 -0
- package/test/sdk/analytics.test.ts +89 -0
- package/test/sdk/auth.test.ts +70 -0
- package/test/sdk/billing.test.ts +47 -0
- package/test/sdk/campaigns.test.ts +43 -0
- package/test/sdk/client.test.ts +80 -0
- package/test/sdk/config-change.test.ts +142 -0
- package/test/sdk/conversations.test.ts +80 -0
- package/test/sdk/credentials.test.ts +33 -0
- package/test/sdk/distribution.test.ts +55 -0
- package/test/sdk/eval.test.ts +155 -0
- package/test/sdk/kb-upload.test.ts +50 -0
- package/test/sdk/kb.test.ts +95 -0
- package/test/sdk/orgs.test.ts +48 -0
- package/test/sdk/platform.test.ts +89 -0
- package/test/sdk/renewal.test.ts +115 -0
- package/test/sdk/session.test.ts +60 -0
- package/test/sdk/skills.test.ts +235 -0
- package/test/sdk/test-chat.test.ts +112 -0
- package/test/sdk/tickets.test.ts +42 -0
- package/test/sdk/voice.test.ts +147 -0
- package/vitest.config.ts +11 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { z } from 'zod/v3';
|
|
2
|
+
import { ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { NeedsInputError, PERSON_TIMEOUT_MS } from '../core/runtime.js';
|
|
4
|
+
import { runWithOrg } from '../core/scope.js';
|
|
5
|
+
import { TOOL_META } from './tool-meta.js';
|
|
6
|
+
function text(data, isError = false) {
|
|
7
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }], ...(isError ? { isError: true } : {}) };
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Handlers return `success(data)`, a JSON text block. Rewrap it as
|
|
11
|
+
* `{ context, data }` so the caller always sees which org and platform
|
|
12
|
+
* answered. Error results and non-JSON text pass through untouched.
|
|
13
|
+
*/
|
|
14
|
+
/** About 20k tokens: Claude Code refuses tool results over 25k tokens. */
|
|
15
|
+
export const MAX_RESULT_CHARS = 80_000;
|
|
16
|
+
/** Keep a result inside the size limit: trim a list and say so, or cut other text with a note. */
|
|
17
|
+
function fit(body) {
|
|
18
|
+
const full = JSON.stringify(body, null, 2);
|
|
19
|
+
if (full.length <= MAX_RESULT_CHARS)
|
|
20
|
+
return text(body);
|
|
21
|
+
const hint = 'Result was too large. Ask for less: use limit/page, a filter, or response_format "concise".';
|
|
22
|
+
const list = Array.isArray(body.data) ? body.data : body.data?.items;
|
|
23
|
+
if (Array.isArray(list)) {
|
|
24
|
+
const shaped = (keep) => ({ context: body.context, data: { items: list.slice(0, keep), returned: keep, total: list.length, truncated: true, hint } });
|
|
25
|
+
let keep = list.length;
|
|
26
|
+
while (keep > 0 && JSON.stringify(shaped(keep), null, 2).length > MAX_RESULT_CHARS)
|
|
27
|
+
keep = Math.floor(keep * 0.7);
|
|
28
|
+
return text(shaped(keep));
|
|
29
|
+
}
|
|
30
|
+
return { content: [{ type: 'text', text: `${full.slice(0, MAX_RESULT_CHARS)}\n... [truncated: ${full.length - MAX_RESULT_CHARS} more characters. ${hint}]` }] };
|
|
31
|
+
}
|
|
32
|
+
function withContext(result, context, page) {
|
|
33
|
+
if (result.isError || result.content.length !== 1 || result.content[0].type !== 'text')
|
|
34
|
+
return result;
|
|
35
|
+
let data;
|
|
36
|
+
try {
|
|
37
|
+
data = JSON.parse(result.content[0].text);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
// A question back to the caller is not data from the platform: keep its shape.
|
|
43
|
+
if (data && typeof data === 'object' && data.needs_input === true)
|
|
44
|
+
return result;
|
|
45
|
+
if (page && Array.isArray(data)) {
|
|
46
|
+
const all = data;
|
|
47
|
+
const end = (page.page - 1) * page.limit + page.limit;
|
|
48
|
+
const hasMore = end < all.length;
|
|
49
|
+
// Spelled out: a bare has_more is easy for a model to skip, then it answers from one page.
|
|
50
|
+
const next = hasMore ? { next: `${all.length - end} more: call again with page ${page.page + 1}` } : {};
|
|
51
|
+
data = { items: all.slice(end - page.limit, end), page: page.page, limit: page.limit, total: all.length, has_more: hasMore, ...next };
|
|
52
|
+
}
|
|
53
|
+
return fit({ context, data });
|
|
54
|
+
}
|
|
55
|
+
/** Why a person's answer stopped the change, so the agent tells them instead of retrying. */
|
|
56
|
+
const NOT_APPROVED = {
|
|
57
|
+
accept: 'Proceed was not ticked. Nothing was changed.',
|
|
58
|
+
// Said as a choice, not a failure: a model reading "declined" as an error calls the tool again.
|
|
59
|
+
decline: 'The person pressed Decline: they chose not to make this change. Nothing was changed. Tell them so and do not call this tool again unless they ask for it again.',
|
|
60
|
+
cancel: 'The question was dismissed, or this host cannot show it (Claude Code in -p mode cancels at once). Nothing was changed; calling again with confirm: true does not help. Approve in an interactive session, or use the indemn CLI with --yes.',
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Ask before a destructive call. With elicitation the host asks the person
|
|
64
|
+
* directly and a `confirm` argument is ignored, so an agent cannot confirm
|
|
65
|
+
* for itself. Without elicitation `confirm: true` proceeds; anything else
|
|
66
|
+
* returns a dry run and the call is not made.
|
|
67
|
+
*/
|
|
68
|
+
/** Approval forms show a few short lines: a long prompt diff would push the Proceed box off the screen. */
|
|
69
|
+
export function fitForm(text, maxLines = 8, maxLine = 140) {
|
|
70
|
+
const lines = text.split('\n');
|
|
71
|
+
// A short message stays whole; only long, many-line text (a prompt diff) is shortened.
|
|
72
|
+
const cut = lines.length > maxLines || text.length > 900;
|
|
73
|
+
const shown = lines.slice(0, maxLines).map((l) => (l.length > maxLine ? `${l.slice(0, maxLine - 1)}…` : l));
|
|
74
|
+
return cut ? `${shown.join('\n')}\n(Shortened to fit; ask to see the full change before approving.)` : text;
|
|
75
|
+
}
|
|
76
|
+
export async function guardDestructive(server, toolName, args, preview, formText = preview) {
|
|
77
|
+
if (server.server.getClientCapabilities()?.elicitation) {
|
|
78
|
+
try {
|
|
79
|
+
const answer = await server.server.elicitInput({
|
|
80
|
+
message: `${formText} Proceed?`,
|
|
81
|
+
requestedSchema: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
properties: { confirm: { type: 'boolean', title: 'Proceed', description: 'Tick (Space), then submit, to make this change.' } },
|
|
84
|
+
required: ['confirm'],
|
|
85
|
+
},
|
|
86
|
+
}, { timeout: PERSON_TIMEOUT_MS });
|
|
87
|
+
if (answer.action === 'accept' && answer.content?.confirm === true)
|
|
88
|
+
return { proceed: true, byPerson: true };
|
|
89
|
+
return { proceed: false, result: text({ cancelled: true, action: toolName, would: preview, reason: NOT_APPROVED[answer.action] }) };
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
if (err?.code === ErrorCode.RequestTimeout) {
|
|
93
|
+
return { proceed: false, result: text({ cancelled: true, action: toolName, would: preview, reason: 'No answer within 10 minutes; nothing was changed.' }) };
|
|
94
|
+
}
|
|
95
|
+
// The host can ask the person but asking failed: nothing is changed. Falling back to `confirm`
|
|
96
|
+
// would let the model approve its own change.
|
|
97
|
+
return { proceed: false, result: text({ cancelled: true, action: toolName, would: preview, reason: 'The approval form could not be shown, so nothing was changed. Tell the person; they can ask again.' }) };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (args.confirm === true)
|
|
101
|
+
return { proceed: true, byPerson: false };
|
|
102
|
+
return {
|
|
103
|
+
proceed: false,
|
|
104
|
+
result: text({
|
|
105
|
+
dry_run: true,
|
|
106
|
+
action: toolName,
|
|
107
|
+
would: preview,
|
|
108
|
+
to_proceed: 'Show this to the user. Only after they agree, call again with confirm: true.',
|
|
109
|
+
}),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function defaultPreview(name, meta, args) {
|
|
113
|
+
const shown = Object.entries(args)
|
|
114
|
+
.filter(([k]) => k !== 'confirm' && k !== 'org_id')
|
|
115
|
+
.map(([k, v]) => `${k}=${typeof v === 'string' ? v : JSON.stringify(v)}`)
|
|
116
|
+
.join(', ');
|
|
117
|
+
return `${meta.title} (${name}${shown ? `: ${shown}` : ''}).`;
|
|
118
|
+
}
|
|
119
|
+
export function createRegistry(server, opts) {
|
|
120
|
+
const metaTable = opts.meta ?? TOOL_META;
|
|
121
|
+
const registered = [];
|
|
122
|
+
return {
|
|
123
|
+
tool(name, description, shape, handler, extra = {}) {
|
|
124
|
+
const meta = metaTable[name];
|
|
125
|
+
if (!meta)
|
|
126
|
+
throw new Error(`MCP tool "${name}" has no entry in tool-meta.ts`);
|
|
127
|
+
const inputSchema = { ...shape };
|
|
128
|
+
const orgScoped = meta.orgScoped !== false && Boolean(opts.resolveOrg);
|
|
129
|
+
if (orgScoped) {
|
|
130
|
+
inputSchema.org_id = z
|
|
131
|
+
.string()
|
|
132
|
+
.optional()
|
|
133
|
+
.describe('Organization id to act on. Omit it to use the linked folder or your only org; with several orgs you are asked.');
|
|
134
|
+
}
|
|
135
|
+
if (meta.paginate && ('limit' in shape || 'page' in shape)) {
|
|
136
|
+
throw new Error(`MCP tool "${name}" is paged by the registry; remove its own limit/page arguments`);
|
|
137
|
+
}
|
|
138
|
+
const paginate = Boolean(meta.paginate);
|
|
139
|
+
if (paginate) {
|
|
140
|
+
inputSchema.limit = z.number().int().min(1).max(200).optional().describe('Items per page (default 50)');
|
|
141
|
+
inputSchema.page = z.number().int().min(1).optional().describe('Page, starting at 1');
|
|
142
|
+
}
|
|
143
|
+
if (meta.guard) {
|
|
144
|
+
inputSchema.confirm = z
|
|
145
|
+
.boolean()
|
|
146
|
+
.optional()
|
|
147
|
+
.describe('Set true only after the user has agreed to the dry run. Ignored when the host can ask the user itself.');
|
|
148
|
+
}
|
|
149
|
+
server.registerTool(name, { title: meta.title, description, inputSchema, annotations: meta.annotations }, (async (args) => {
|
|
150
|
+
try {
|
|
151
|
+
const org = orgScoped ? await opts.resolveOrg(typeof args.org_id === 'string' ? args.org_id : undefined) : undefined;
|
|
152
|
+
return await runWithOrg(org?.id, async () => {
|
|
153
|
+
let confirmedByPerson = false;
|
|
154
|
+
// A guarded tool asks every time, or only when guardWhen says so (e.g. the agent may be live).
|
|
155
|
+
if (meta.guard && (!extra.guardWhen || await extra.guardWhen(args))) {
|
|
156
|
+
// Names, not ids, in what the person approves ("Darwin Web Test", not 6abb…).
|
|
157
|
+
const found = opts.displayNames
|
|
158
|
+
? await opts.displayNames(args, org?.id).catch(() => ({ names: {} }))
|
|
159
|
+
: { names: {} };
|
|
160
|
+
if (found.missing?.length) {
|
|
161
|
+
return { content: [{ type: 'text', text: `Error: Not found: ${found.missing.join(', ')}. Nothing was changed and nothing was asked. Look it up again (list tools give the ids) and retry.` }], isError: true };
|
|
162
|
+
}
|
|
163
|
+
const names = found.names;
|
|
164
|
+
const named = (s) => Object.entries(names).reduce((t, [id, label]) => t.split(id).join(`"${label}"`), s);
|
|
165
|
+
const base = named(extra.preview ? await extra.preview(args) : meta.describe ? meta.describe(args) : defaultPreview(name, meta, args));
|
|
166
|
+
const ctx = await opts.context();
|
|
167
|
+
const orgLabel = org ? org.name ?? names[org.id] ?? org.id : undefined;
|
|
168
|
+
const where = orgLabel ? ` Org: ${orgLabel}. Platform: ${ctx.environment}.` : ` Platform: ${ctx.environment}.`;
|
|
169
|
+
const gate = await guardDestructive(server, name, args, base + where, fitForm(base) + where);
|
|
170
|
+
if (!gate.proceed)
|
|
171
|
+
return gate.result;
|
|
172
|
+
confirmedByPerson = gate.byPerson;
|
|
173
|
+
}
|
|
174
|
+
const result = await handler(args, { confirmedByPerson });
|
|
175
|
+
return withContext(result, { ...(await opts.context()), ...(confirmedByPerson ? { approved_by_person: true } : {}) }, paginate ? { limit: Number(args.limit ?? 50), page: Number(args.page ?? 1) } : undefined);
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
if (err instanceof NeedsInputError) {
|
|
180
|
+
// The resolver's text names the CLI flag; an MCP caller passes org_id.
|
|
181
|
+
const message = err.message.replace('Choose one with --org <id>', 'Call again with org_id set to one of the ids below');
|
|
182
|
+
return text({ needs_input: true, message, choices: err.choices, to_proceed: 'Ask the user which organization to use, then call again with org_id set to its id.' });
|
|
183
|
+
}
|
|
184
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
185
|
+
return { content: [{ type: 'text', text: `Error: ${message}` }], isError: true };
|
|
186
|
+
}
|
|
187
|
+
}));
|
|
188
|
+
registered.push(name);
|
|
189
|
+
},
|
|
190
|
+
names() {
|
|
191
|
+
return [...registered];
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { type Askers } from '../core/scope.js';
|
|
3
|
+
/**
|
|
4
|
+
* Questions the CLI may need answered during a tool call, asked through the
|
|
5
|
+
* host (Claude Code shows a dialog). Stdin carries the MCP protocol, so the
|
|
6
|
+
* terminal is never used. Without elicitation: the org question becomes a
|
|
7
|
+
* needs_input result, and an MFA renewal asks the person to log in again.
|
|
8
|
+
*/
|
|
9
|
+
export declare function mcpAskers(server: McpServer): Askers;
|
|
1
10
|
export declare function startServer(): Promise<void>;
|
|
2
11
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1D;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CA8DnD;AAUD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAajD"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -2,12 +2,97 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
3
|
import { IndemnClient } from '../sdk/client.js';
|
|
4
4
|
import { registerTools } from './tools.js';
|
|
5
|
+
import { setAskers } from '../core/scope.js';
|
|
6
|
+
import { cliVersion, SessionExpiredError, PERSON_TIMEOUT_MS } from '../core/runtime.js';
|
|
7
|
+
/**
|
|
8
|
+
* Questions the CLI may need answered during a tool call, asked through the
|
|
9
|
+
* host (Claude Code shows a dialog). Stdin carries the MCP protocol, so the
|
|
10
|
+
* terminal is never used. Without elicitation: the org question becomes a
|
|
11
|
+
* needs_input result, and an MFA renewal asks the person to log in again.
|
|
12
|
+
*/
|
|
13
|
+
export function mcpAskers(server) {
|
|
14
|
+
const canAsk = () => Boolean(server.server.getClientCapabilities()?.elicitation);
|
|
15
|
+
// A person needs time to answer; the MCP default of 60 s is too short.
|
|
16
|
+
const ask = (params) => server.server.elicitInput(params, { timeout: PERSON_TIMEOUT_MS });
|
|
17
|
+
return {
|
|
18
|
+
chooseOrg: async (choices) => {
|
|
19
|
+
if (!canAsk())
|
|
20
|
+
return undefined;
|
|
21
|
+
try {
|
|
22
|
+
const answer = await ask({
|
|
23
|
+
message: 'You belong to several organizations. Which one should this act on?',
|
|
24
|
+
requestedSchema: {
|
|
25
|
+
type: 'object',
|
|
26
|
+
properties: {
|
|
27
|
+
org_id: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
title: 'Organization',
|
|
30
|
+
oneOf: choices.map((c) => ({ const: c.id, title: c.name ? `${c.name} (${c.id})` : c.id })),
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
required: ['org_id'],
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
return answer.action === 'accept' && typeof answer.content?.org_id === 'string' ? answer.content.org_id : undefined;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
form: async (message, fields) => {
|
|
43
|
+
if (!canAsk())
|
|
44
|
+
return undefined;
|
|
45
|
+
try {
|
|
46
|
+
const answer = await ask({
|
|
47
|
+
message,
|
|
48
|
+
requestedSchema: {
|
|
49
|
+
type: 'object',
|
|
50
|
+
properties: Object.fromEntries(fields.map((f) => [f.key, { type: 'string', title: f.title, description: f.description }])),
|
|
51
|
+
required: fields.filter((f) => f.required).map((f) => f.key),
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
if (answer.action !== 'accept' || !answer.content)
|
|
55
|
+
return undefined;
|
|
56
|
+
return Object.fromEntries(Object.entries(answer.content).map(([k, v]) => [k, String(v ?? '')]));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
mfaCode: async () => {
|
|
63
|
+
if (!canAsk()) {
|
|
64
|
+
throw new SessionExpiredError('The session needs renewing and your account uses MFA. Run `indemn login` in a terminal, then retry.');
|
|
65
|
+
}
|
|
66
|
+
const answer = await ask({
|
|
67
|
+
message: 'Your Indemn session needs renewing. Enter the MFA code that was just emailed to you.',
|
|
68
|
+
requestedSchema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
properties: { code: { type: 'string', title: 'MFA code', description: '6 digits', minLength: 6, maxLength: 6 } },
|
|
71
|
+
required: ['code'],
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
if (answer.action !== 'accept' || typeof answer.content?.code !== 'string') {
|
|
75
|
+
throw new SessionExpiredError('MFA code not entered. Run `indemn login` in a terminal, then retry.');
|
|
76
|
+
}
|
|
77
|
+
return answer.content.code;
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** Guidance every MCP host (Claude Code, Jarvis, others) gives the model. */
|
|
82
|
+
const SERVER_INSTRUCTIONS = [
|
|
83
|
+
'Indemn tools manage AI agents on the Indemn platform for the signed-in person.',
|
|
84
|
+
'Talking to people: call agents, knowledge bases, skills, test sets, rubrics and runs by their names, never ids. Show an id only when the person asks for one; tell two items with the same name apart by a detail such as the channel or phone number. When the person wants more about an item, give its url (its page in the dashboard). Use plain words instead of internal field names, keep answers short, and offer details on request.',
|
|
85
|
+
'Changes: when the host shows an approval form, that form is the question; call the tool and do not ask again in chat. context.approved_by_person means the person approved in that form. When a tool returns dry_run instead, show it and call again with confirm: true only after the person agreed.',
|
|
86
|
+
'If a tool returns needs_input, ask the person and call again with their answer.',
|
|
87
|
+
].join('\n');
|
|
5
88
|
export async function startServer() {
|
|
89
|
+
IndemnClient.setClientKind('mcp');
|
|
6
90
|
const client = new IndemnClient();
|
|
7
91
|
const server = new McpServer({
|
|
8
92
|
name: 'indemn',
|
|
9
|
-
version:
|
|
10
|
-
});
|
|
93
|
+
version: cliVersion(),
|
|
94
|
+
}, { instructions: SERVER_INSTRUCTIONS });
|
|
95
|
+
setAskers(mcpAskers(server));
|
|
11
96
|
registerTools(server, client);
|
|
12
97
|
const transport = new StdioServerTransport();
|
|
13
98
|
await server.connect(transport);
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Metadata for every MCP tool. The host (Claude Code, Jarvis) reads the
|
|
4
|
+
* annotations to decide when to ask the user. `guard` makes the registry
|
|
5
|
+
* require a confirmation before the tool runs; each area switches it on for
|
|
6
|
+
* its own tools together with a precise `describe` preview.
|
|
7
|
+
*/
|
|
8
|
+
export interface ToolMeta {
|
|
9
|
+
title: string;
|
|
10
|
+
annotations: ToolAnnotations;
|
|
11
|
+
/** Ask before running: elicitation, else `confirm: true`, else a dry run. */
|
|
12
|
+
guard?: boolean;
|
|
13
|
+
/** One sentence naming exactly what the call would change, for the confirmation. */
|
|
14
|
+
describe?: (args: Record<string, unknown>) => string;
|
|
15
|
+
/** False for tools that never touch an org-scoped route. Default true. */
|
|
16
|
+
orgScoped?: boolean;
|
|
17
|
+
/** List tool: the registry adds limit/page and returns { items, page, limit, total, has_more }. */
|
|
18
|
+
paginate?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare const TOOL_META: Record<string, ToolMeta>;
|
|
21
|
+
//# sourceMappingURL=tool-meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-meta.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,eAAe,CAAC;IAC7B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IACrD,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAkBD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA2M9C,CAAC"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
const read = (title) => ({
|
|
2
|
+
title,
|
|
3
|
+
annotations: { title, readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
4
|
+
});
|
|
5
|
+
const write = (title, extra = {}) => ({
|
|
6
|
+
title,
|
|
7
|
+
annotations: { title, readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false, ...extra },
|
|
8
|
+
});
|
|
9
|
+
/** Overwrites or removes something that cannot be restored from the tool itself. */
|
|
10
|
+
const destroy = (title, extra = {}) => ({
|
|
11
|
+
title,
|
|
12
|
+
annotations: { title, readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false, ...extra },
|
|
13
|
+
});
|
|
14
|
+
export const TOOL_META = {
|
|
15
|
+
// Login and organizations
|
|
16
|
+
whoami: { ...read('Who am I'), orgScoped: false },
|
|
17
|
+
list_organizations: { ...read('List my organizations'), orgScoped: false },
|
|
18
|
+
list_org_members: { ...read('List organization members'), paginate: true },
|
|
19
|
+
list_channels: read('List channels'),
|
|
20
|
+
// Agents
|
|
21
|
+
list_agents: { ...read('List agents'), paginate: true },
|
|
22
|
+
get_agent: read('Get agent'),
|
|
23
|
+
create_agent: write('Create agent'),
|
|
24
|
+
update_agent: { ...write('Update agent', { idempotentHint: true }), guard: true, describe: (a) => `This will change agent ${a.agent_id}.` },
|
|
25
|
+
delete_agent: { ...destroy('Delete agent'), guard: true, describe: (a) => `This will delete agent ${a.agent_id}. It cannot be restored from the CLI.` },
|
|
26
|
+
agent_summary: read('Summarize agent'),
|
|
27
|
+
agent_stats: read('Agent conversation metrics'),
|
|
28
|
+
set_agent_lifecycle: {
|
|
29
|
+
...write('Change agent lifecycle', { idempotentHint: true }),
|
|
30
|
+
guard: true,
|
|
31
|
+
describe: (a) => `This will move agent ${a.agent_id} to lifecycle "${a.lifecycle}". Published means live for customers.`,
|
|
32
|
+
},
|
|
33
|
+
transfer_agent_owner: {
|
|
34
|
+
...write('Transfer agent ownership', { idempotentHint: true }),
|
|
35
|
+
guard: true,
|
|
36
|
+
describe: (a) => `This will make user ${a.owner_id} the owner of agent ${a.agent_id}.`,
|
|
37
|
+
},
|
|
38
|
+
clone_agent: write('Clone agent'),
|
|
39
|
+
export_agent: read('Export agent bundle'),
|
|
40
|
+
import_agent: {
|
|
41
|
+
...write('Import agent bundle'),
|
|
42
|
+
guard: true,
|
|
43
|
+
describe: (a) => `This will create a new agent "${String(a.name ?? a.bundle?.agent?.name ?? '')}" with ${(a.bundle?.skills ?? []).length} skill(s).`,
|
|
44
|
+
},
|
|
45
|
+
// Prompt and configuration
|
|
46
|
+
get_config: read('Get agent configuration'),
|
|
47
|
+
set_config: { ...destroy('Change agent prompt, greeting or model', { idempotentHint: true }), guard: true },
|
|
48
|
+
get_prompt: read('Get agent prompt'),
|
|
49
|
+
set_prompt: { ...destroy('Replace agent prompt', { idempotentHint: true }), guard: true },
|
|
50
|
+
// Skills (the CLI still calls them functions)
|
|
51
|
+
list_functions: { ...read('List skills'), paginate: true },
|
|
52
|
+
create_function: write('Create skill'),
|
|
53
|
+
update_function: { ...write('Update skill', { idempotentHint: true }), guard: true, describe: (a) => `This will change skill ${a.function_id} of agent ${a.agent_id}.` },
|
|
54
|
+
delete_function: { ...destroy('Delete skill'), guard: true, describe: (a) => `This will delete skill ${a.function_id} from agent ${a.agent_id}.` },
|
|
55
|
+
test_function: write('Test skill', { openWorldHint: true }),
|
|
56
|
+
export_functions: read('Export skills'),
|
|
57
|
+
import_functions: {
|
|
58
|
+
...destroy('Import skills, replacing existing ones', { openWorldHint: true }),
|
|
59
|
+
guard: true,
|
|
60
|
+
describe: (a) => `This will DELETE every skill of agent ${a.agent_id}, including the built-in handoff and FAQ retriever, and replace them with the skills in ${a.url}. There is no undo.`,
|
|
61
|
+
},
|
|
62
|
+
generate_skills_from_doc: write('Propose skills from a document', { openWorldHint: true }),
|
|
63
|
+
bulk_create_skills: {
|
|
64
|
+
...write('Create several skills'),
|
|
65
|
+
guard: true,
|
|
66
|
+
describe: (a) => `This will create ${(a.functions ?? []).length} skill(s) on agent ${a.agent_id}.`,
|
|
67
|
+
},
|
|
68
|
+
list_function_parameters: read('List skill parameters'),
|
|
69
|
+
add_function_parameter: write('Add skill parameter'),
|
|
70
|
+
update_function_parameter: write('Update skill parameter', { idempotentHint: true }),
|
|
71
|
+
delete_function_parameter: { ...destroy('Delete skill parameter'), guard: true, describe: (a) => `This will delete parameter ${a.parameter_id} of skill ${a.function_id} on agent ${a.agent_id}.` },
|
|
72
|
+
list_master_functions: { ...read('List skill templates'), paginate: true },
|
|
73
|
+
list_llm_models: { ...read('List LLM models'), paginate: true },
|
|
74
|
+
// Knowledge bases
|
|
75
|
+
list_knowledge_bases: { ...read('List knowledge bases'), paginate: true },
|
|
76
|
+
get_knowledge_base: read('Get knowledge base'),
|
|
77
|
+
create_knowledge_base: write('Create knowledge base'),
|
|
78
|
+
update_knowledge_base: write('Update knowledge base', { idempotentHint: true }),
|
|
79
|
+
delete_knowledge_base: { ...destroy('Delete knowledge base'), guard: true, describe: (a) => `This will delete knowledge base ${a.kb_id} with all its sources and vectors.` },
|
|
80
|
+
list_kb_data: read('List knowledge base entries'),
|
|
81
|
+
add_kb_data: write('Add knowledge base entry'),
|
|
82
|
+
scrape_url: write('Scrape a website into a knowledge base', { openWorldHint: true }),
|
|
83
|
+
upload_kb_file: write('Upload file to knowledge base'),
|
|
84
|
+
update_kb_data: write('Update knowledge base entry', { idempotentHint: true }),
|
|
85
|
+
delete_kb_data: { ...destroy('Delete knowledge base entry'), guard: true, describe: (a) => `This will delete source ${a.source_id} from knowledge base ${a.kb_id}, with its vectors.` },
|
|
86
|
+
link_kb: write('Link knowledge bases to agent', { idempotentHint: true }),
|
|
87
|
+
unlink_kb: { ...destroy('Unlink knowledge base from agent'), guard: true, describe: (a) => `This will unlink knowledge base ${a.kb_id} from agent ${a.agent_id}; the agent stops using it immediately.` },
|
|
88
|
+
export_kb: read('Export knowledge base'),
|
|
89
|
+
import_kb: { ...destroy('Import into knowledge base'), guard: true, describe: (a) => `This will import new content into knowledge base ${a.kb_id}.` },
|
|
90
|
+
kb_chunks: read('Show what the agent learned from a source'),
|
|
91
|
+
reimport_kb_source: {
|
|
92
|
+
...write('Re-crawl a website source', { openWorldHint: true }),
|
|
93
|
+
guard: true,
|
|
94
|
+
describe: (a) => `This will re-crawl source ${a.source_id} of knowledge base ${a.kb_id}; its chunks are replaced when done.`,
|
|
95
|
+
},
|
|
96
|
+
kb_scrape_status: read('Crawl and import progress'),
|
|
97
|
+
kb_gaps: read('Unanswered questions'),
|
|
98
|
+
kb_check: read('Check if knowledge answers a question'),
|
|
99
|
+
// Conversations
|
|
100
|
+
list_conversations: read('List conversations of an agent'),
|
|
101
|
+
get_conversation: read('Get a conversation with its messages'),
|
|
102
|
+
mark_conversation_test: {
|
|
103
|
+
...write('Mark conversations as test', { idempotentHint: true }),
|
|
104
|
+
guard: true,
|
|
105
|
+
describe: (a) => `This will mark ${a.conversation_ids?.length ?? 0} conversation(s) of agent ${a.agent_id} as test: removed from analytics, usage billing reversed.`,
|
|
106
|
+
},
|
|
107
|
+
// Voice
|
|
108
|
+
list_voices: { ...read('List voices'), orgScoped: false },
|
|
109
|
+
list_voice_models: read('List speech models'),
|
|
110
|
+
get_agent_voice: read('Get agent voice settings'),
|
|
111
|
+
set_agent_voice: { ...write('Change agent voice', { idempotentHint: true }), guard: true, describe: (a) => `This will change the voice of agent ${a.agent_id} to ${a.name ? `"${a.name}"` : a.voice_id}; callers hear it on the next call.` },
|
|
112
|
+
set_agent_transcriber: { ...write('Change agent transcriber', { idempotentHint: true }), guard: true, describe: (a) => `This will change how agent ${a.agent_id} hears callers to ${a.provider}/${a.model} (${a.language}); it applies from the next call.` },
|
|
113
|
+
list_agent_numbers: read('List phone numbers'),
|
|
114
|
+
attach_phone_number: { ...write('Attach phone number'), guard: true, describe: (a) => `This will attach ${a.phone_number} to agent ${a.agent_id}; its voice settings reset to the defaults. Numbers the org does not own are refused (never bought).` },
|
|
115
|
+
search_phone_numbers: read('Search phone numbers to buy'),
|
|
116
|
+
get_phone_number: read('Get phone number details'),
|
|
117
|
+
buy_phone_number: { ...write('Buy phone number'), guard: true, describe: (a) => `This will BUY ${a.phone_number} from Twilio and attach it to agent ${a.agent_id}. The org pays for it every month, and it cannot be undone from here.` },
|
|
118
|
+
detach_phone_number: { ...destroy('Detach phone number'), guard: true, describe: (a) => `This will detach ${a.phone_number} from agent ${a.agent_id}; calls to it stop reaching the agent.` },
|
|
119
|
+
voice_preview: write('Start a test voice call'),
|
|
120
|
+
// Distributions, templates, solutions
|
|
121
|
+
list_distributions: read('List website distributions'),
|
|
122
|
+
get_embed_code: read('Get embed code of an agent'),
|
|
123
|
+
create_distribution: { ...write('Open agent on a website path'), guard: true, describe: (a) => `This will open agent ${a.agent_id} on ${a.host}${a.path_expression ?? a.path}; visitors of that page see it.` },
|
|
124
|
+
update_distribution: { ...write('Change a website distribution', { idempotentHint: true }), guard: true, describe: (a) => `This will change distribution ${a.distribution_id}; visitors see it immediately.` },
|
|
125
|
+
list_templates: { ...read('List agent templates'), paginate: true },
|
|
126
|
+
create_template: { ...write('Publish agent as template'), guard: true, describe: (a) => `This will publish agent ${a.agent_id} as template "${a.name}"; every org on the platform can copy its prompt and skills.` },
|
|
127
|
+
delete_template: { ...destroy('Remove template'), guard: true, describe: (a) => `This will remove template ${a.template_id} for every org.` },
|
|
128
|
+
create_agent_from_template: write('Create agent from template'),
|
|
129
|
+
list_solutions: read('List solutions'),
|
|
130
|
+
// Analytics, org settings, audit
|
|
131
|
+
get_analytics: read('Get analytics'),
|
|
132
|
+
list_analytics_conversations: read('Conversations behind an analytics number'),
|
|
133
|
+
list_custom_charts: read('List custom charts'),
|
|
134
|
+
get_custom_chart: read('Get custom chart data'),
|
|
135
|
+
get_org_settings: read('Get org settings'),
|
|
136
|
+
set_org_timezone: { ...write('Set org timezone', { idempotentHint: true }), guard: true, describe: (a) => `This will set the org timezone to ${a.timezone}.` },
|
|
137
|
+
set_business_hours: { ...destroy('Replace business hours', { idempotentHint: true }), guard: true, describe: (a) => `This will replace the org business hours (enabled: ${a.enabled}).` },
|
|
138
|
+
add_holiday: { ...write('Add holiday'), guard: true, describe: (a) => `This will close the org on ${a.date} (${a.name}).` },
|
|
139
|
+
set_org_admin_settings: { ...write('Change org admin settings', { idempotentHint: true }), guard: true },
|
|
140
|
+
list_audit_logs: read('List audit log'),
|
|
141
|
+
// Tickets
|
|
142
|
+
list_tickets: read('List tickets'),
|
|
143
|
+
get_ticket: read('Get ticket'),
|
|
144
|
+
create_ticket: write('Create ticket'),
|
|
145
|
+
update_ticket: write('Update, assign or close a ticket'),
|
|
146
|
+
archive_ticket: { ...destroy('Archive ticket'), guard: true, describe: (a) => `This will archive ticket ${a.ticket_id}.` },
|
|
147
|
+
list_ticket_rules: read('List ticket rules'),
|
|
148
|
+
save_ticket_rule: write('Create or change a ticket rule'),
|
|
149
|
+
delete_ticket_rule: { ...destroy('Delete ticket rule'), guard: true, describe: (a) => `This will delete ticket rule ${a.rule_id}; agents stop opening tickets for it.` },
|
|
150
|
+
// Billing (read-only)
|
|
151
|
+
get_billing: read('Billing status, invoices, usage or plans'),
|
|
152
|
+
// Campaigns (read-only)
|
|
153
|
+
get_campaigns: read('Read campaigns and templates'),
|
|
154
|
+
// V2 platform and Jarvis (Darwin)
|
|
155
|
+
platform_list: read('List V2 platform items'),
|
|
156
|
+
platform_get: read('Get a V2 platform item'),
|
|
157
|
+
platform_save: { ...write('Create or change a V2 platform item'), guard: true, describe: (a) => `This will ${a.id ? `change ${a.resource} ${a.id}` : `create a ${a.resource}`} on the V2 platform.` },
|
|
158
|
+
platform_delete: { ...destroy('Delete a V2 platform item'), guard: true, describe: (a) => `This will delete ${a.resource} ${a.id} from the V2 platform.` },
|
|
159
|
+
validate_platform_template: read('Validate a V2 template'),
|
|
160
|
+
run_simulation: { ...write('Run V2 simulations (paid)'), guard: true, describe: (a) => `This will run simulations for V2 agent ${a.agent_id} with paid model calls.` },
|
|
161
|
+
simulation_status: read('Simulation jobs and results'),
|
|
162
|
+
org_evaluations: read('Baseline evaluation coverage'),
|
|
163
|
+
jarvis_create_job: { ...write('Ask Jarvis for baseline evaluations (paid)'), guard: true, describe: (a) => `This will ask Jarvis to generate baseline evaluations for ${(a.bot_ids ?? []).length} agent(s) with paid model calls.` },
|
|
164
|
+
jarvis_jobs: read('Jarvis jobs'),
|
|
165
|
+
jarvis_chat: { ...write('Chat with Jarvis', { openWorldHint: true }), guard: true, describe: () => 'This sends a message to Jarvis, which may create or change templates, agents or connectors in the org.' },
|
|
166
|
+
// Chat
|
|
167
|
+
chat_with_agent: write('Chat with agent (test conversation)'),
|
|
168
|
+
// Evaluations
|
|
169
|
+
run_evaluation: {
|
|
170
|
+
...write('Run evaluation (paid, cannot be cancelled)'),
|
|
171
|
+
guard: true,
|
|
172
|
+
describe: (a) => `This will evaluate agent ${a.agent_id ?? a.bot_id} on test set ${a.test_set_id}${a.limit ? ` (first ${a.limit} items)` : ''}${a.date_from ? ` against real conversations from ${a.date_from} to ${a.date_to}` : ''} with concurrency ${a.concurrency ?? 1}. It uses paid model calls and cannot be cancelled.`,
|
|
173
|
+
},
|
|
174
|
+
eval_gate_verdict: read('Judge a run like the CI gate'),
|
|
175
|
+
eval_trends: read('Evaluation trends'),
|
|
176
|
+
compare_eval_runs: read('Compare two evaluation runs'),
|
|
177
|
+
eval_report_link: write('Render evaluation report on the server', { idempotentHint: true }),
|
|
178
|
+
eval_quality_metrics: { ...read('Voice quality metric names'), orgScoped: false },
|
|
179
|
+
list_prod_calls: read('List production voice calls'),
|
|
180
|
+
promote_prod_call: { ...write('Promote a call to a regression test', { idempotentHint: true }), guard: true, describe: (a) => `This will add call ${a.session_id} to the agent's "Regressions (review)" test set.` },
|
|
181
|
+
evaluate_transcript: { ...write('Grade a transcript (paid)'), guard: true, describe: (a) => `This will grade a replayed transcript for agent ${a.agent_id} with paid model calls.` },
|
|
182
|
+
list_evaluator_configs: { ...read('List evaluator configs'), paginate: true },
|
|
183
|
+
get_eval_status: read('Get evaluation status'),
|
|
184
|
+
get_eval_results: read('Get evaluation results'),
|
|
185
|
+
get_bot_context: read('Get agent context for evaluation'),
|
|
186
|
+
list_rubrics: { ...read('List rubrics'), paginate: true },
|
|
187
|
+
get_rubric: read('Get rubric'),
|
|
188
|
+
create_rubric: write('Create rubric'),
|
|
189
|
+
update_rubric: write('Update rubric', { idempotentHint: true }),
|
|
190
|
+
delete_rubric: { ...destroy('Delete rubric'), guard: true, describe: (a) => `This will delete rubric ${a.rubric_id}.` },
|
|
191
|
+
list_rubric_versions: read('List rubric versions'),
|
|
192
|
+
list_test_sets: { ...read('List test sets'), paginate: true },
|
|
193
|
+
get_test_set: read('Get test set'),
|
|
194
|
+
create_test_set: write('Create test set'),
|
|
195
|
+
update_test_set: write('Update test set', { idempotentHint: true }),
|
|
196
|
+
delete_test_set: { ...destroy('Delete test set'), guard: true, describe: (a) => `This will delete test set ${a.test_set_id}.` },
|
|
197
|
+
list_test_set_versions: read('List test set versions'),
|
|
198
|
+
// Reports (write local files)
|
|
199
|
+
export_eval_markdown: { ...write('Export evaluation as Markdown file', { idempotentHint: true }), orgScoped: false },
|
|
200
|
+
export_eval_report: { ...write('Export evaluation PDF report', { idempotentHint: true }), orgScoped: false },
|
|
201
|
+
export_agent_card: write('Export agent card PDF', { idempotentHint: true }),
|
|
202
|
+
};
|
|
203
|
+
//# sourceMappingURL=tool-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-meta.js","sourceRoot":"","sources":["../../src/mcp/tool-meta.ts"],"names":[],"mappings":"AAqBA,MAAM,IAAI,GAAG,CAAC,KAAa,EAAY,EAAE,CAAC,CAAC;IACzC,KAAK;IACL,WAAW,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;CAC/G,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,QAAkC,EAAE,EAAY,EAAE,CAAC,CAAC;IAChF,KAAK;IACL,WAAW,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE;CAC3H,CAAC,CAAC;AAEH,oFAAoF;AACpF,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,QAAkC,EAAE,EAAY,EAAE,CAAC,CAAC;IAClF,KAAK;IACL,WAAW,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE;CAC1H,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAA6B;IACjD,0BAA0B;IAC1B,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;IACjD,kBAAkB,EAAE,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;IAC1E,gBAAgB,EAAE,EAAE,GAAG,IAAI,CAAC,2BAA2B,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC1E,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC;IAEpC,SAAS;IACT,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;IACvD,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;IAC5B,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC;IACnC,YAAY,EAAE,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,GAAG,EAAE;IAC3I,YAAY,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,uCAAuC,EAAE;IACvJ,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC;IACtC,WAAW,EAAE,IAAI,CAAC,4BAA4B,CAAC;IAC/C,mBAAmB,EAAE;QACnB,GAAG,KAAK,CAAC,wBAAwB,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAC5D,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAC,QAAQ,kBAAkB,CAAC,CAAC,SAAS,wCAAwC;KACzH;IACD,oBAAoB,EAAE;QACpB,GAAG,KAAK,CAAC,0BAA0B,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAC9D,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,uBAAuB,CAAC,CAAC,QAAQ,GAAG;KACvF;IACD,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC;IACjC,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC;IACzC,YAAY,EAAE;QACZ,GAAG,KAAK,CAAC,qBAAqB,CAAC;QAC/B,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iCAAiC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAK,CAAC,CAAC,MAAoD,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,UAAU,CAAE,CAAC,CAAC,MAA6C,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,YAAY;KAC5O;IAED,2BAA2B;IAC3B,UAAU,EAAE,IAAI,CAAC,yBAAyB,CAAC;IAC3C,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,wCAAwC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;IAC3G,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC;IACpC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,sBAAsB,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;IAEzF,8CAA8C;IAC9C,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC1D,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC;IACtC,eAAe,EAAE,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,CAAC,WAAW,aAAa,CAAC,CAAC,QAAQ,GAAG,EAAE;IACxK,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,CAAC,WAAW,eAAe,CAAC,CAAC,QAAQ,GAAG,EAAE;IAClJ,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC3D,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC;IACvC,gBAAgB,EAAE;QAChB,GAAG,OAAO,CAAC,wCAAwC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAC7E,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,yCAAyC,CAAC,CAAC,QAAQ,2FAA2F,CAAC,CAAC,GAAG,qBAAqB;KAC1L;IACD,wBAAwB,EAAE,KAAK,CAAC,gCAAgC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC1F,kBAAkB,EAAE;QAClB,GAAG,KAAK,CAAC,uBAAuB,CAAC;QACjC,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAE,CAAC,CAAC,SAAmC,IAAI,EAAE,CAAC,CAAC,MAAM,sBAAsB,CAAC,CAAC,QAAQ,GAAG;KAC9H;IACD,wBAAwB,EAAE,IAAI,CAAC,uBAAuB,CAAC;IACvD,sBAAsB,EAAE,KAAK,CAAC,qBAAqB,CAAC;IACpD,yBAAyB,EAAE,KAAK,CAAC,wBAAwB,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IACpF,yBAAyB,EAAE,EAAE,GAAG,OAAO,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,8BAA8B,CAAC,CAAC,YAAY,aAAa,CAAC,CAAC,WAAW,aAAa,CAAC,CAAC,QAAQ,GAAG,EAAE;IACnM,qBAAqB,EAAE,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC1E,eAAe,EAAE,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAE/D,kBAAkB;IAClB,oBAAoB,EAAE,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;IACzE,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC;IAC9C,qBAAqB,EAAE,KAAK,CAAC,uBAAuB,CAAC;IACrD,qBAAqB,EAAE,KAAK,CAAC,uBAAuB,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAC/E,qBAAqB,EAAE,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,CAAC,KAAK,oCAAoC,EAAE;IAC5K,YAAY,EAAE,IAAI,CAAC,6BAA6B,CAAC;IACjD,WAAW,EAAE,KAAK,CAAC,0BAA0B,CAAC;IAC9C,UAAU,EAAE,KAAK,CAAC,wCAAwC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACpF,cAAc,EAAE,KAAK,CAAC,+BAA+B,CAAC;IACtD,cAAc,EAAE,KAAK,CAAC,6BAA6B,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAC9E,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,6BAA6B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,2BAA2B,CAAC,CAAC,SAAS,wBAAwB,CAAC,CAAC,KAAK,qBAAqB,EAAE;IACvL,OAAO,EAAE,KAAK,CAAC,+BAA+B,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IACzE,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,QAAQ,yCAAyC,EAAE;IACzM,SAAS,EAAE,IAAI,CAAC,uBAAuB,CAAC;IACxC,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oDAAoD,CAAC,CAAC,KAAK,GAAG,EAAE;IACrJ,SAAS,EAAE,IAAI,CAAC,2CAA2C,CAAC;IAC5D,kBAAkB,EAAE;QAClB,GAAG,KAAK,CAAC,2BAA2B,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAC9D,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,CAAC,CAAC,SAAS,sBAAsB,CAAC,CAAC,KAAK,sCAAsC;KAC7H;IACD,gBAAgB,EAAE,IAAI,CAAC,2BAA2B,CAAC;IACnD,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC;IACrC,QAAQ,EAAE,IAAI,CAAC,uCAAuC,CAAC;IAEvD,gBAAgB;IAChB,kBAAkB,EAAE,IAAI,CAAC,gCAAgC,CAAC;IAC1D,gBAAgB,EAAE,IAAI,CAAC,sCAAsC,CAAC;IAC9D,sBAAsB,EAAE;QACtB,GAAG,KAAK,CAAC,4BAA4B,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAChE,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAmB,CAAC,CAAC,gBAAyC,EAAE,MAAM,IAAI,CAAC,6BAA6B,CAAC,CAAC,QAAQ,2DAA2D;KAC/L;IAED,QAAQ;IACR,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;IACzD,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,CAAC;IAC7C,eAAe,EAAE,IAAI,CAAC,0BAA0B,CAAC;IACjD,eAAe,EAAE,EAAE,GAAG,KAAK,CAAC,oBAAoB,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,uCAAuC,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,qCAAqC,EAAE;IAC7O,qBAAqB,EAAE,EAAE,GAAG,KAAK,CAAC,0BAA0B,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,8BAA8B,CAAC,CAAC,QAAQ,qBAAqB,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,mCAAmC,EAAE;IAC7P,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC;IAC9C,mBAAmB,EAAE,EAAE,GAAG,KAAK,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,YAAY,aAAa,CAAC,CAAC,QAAQ,sGAAsG,EAAE;IACvP,oBAAoB,EAAE,IAAI,CAAC,6BAA6B,CAAC;IACzD,gBAAgB,EAAE,IAAI,CAAC,0BAA0B,CAAC;IAClD,gBAAgB,EAAE,EAAE,GAAG,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,YAAY,uCAAuC,CAAC,CAAC,QAAQ,uEAAuE,EAAE;IACzO,mBAAmB,EAAE,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,YAAY,eAAe,CAAC,CAAC,QAAQ,wCAAwC,EAAE;IAC7L,aAAa,EAAE,KAAK,CAAC,yBAAyB,CAAC;IAE/C,sCAAsC;IACtC,kBAAkB,EAAE,IAAI,CAAC,4BAA4B,CAAC;IACtD,cAAc,EAAE,IAAI,CAAC,4BAA4B,CAAC;IAClD,mBAAmB,EAAE,EAAE,GAAG,KAAK,CAAC,8BAA8B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,IAAI,iCAAiC,EAAE;IAC/M,mBAAmB,EAAE,EAAE,GAAG,KAAK,CAAC,+BAA+B,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iCAAiC,CAAC,CAAC,eAAe,gCAAgC,EAAE;IAC9M,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;IACnE,eAAe,EAAE,EAAE,GAAG,KAAK,CAAC,2BAA2B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,iBAAiB,CAAC,CAAC,IAAI,8DAA8D,EAAE;IACpN,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,CAAC,CAAC,WAAW,iBAAiB,EAAE;IAC7I,0BAA0B,EAAE,KAAK,CAAC,4BAA4B,CAAC;IAC/D,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC;IAEtC,iCAAiC;IACjC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC;IACpC,4BAA4B,EAAE,IAAI,CAAC,0CAA0C,CAAC;IAC9E,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC;IAC9C,gBAAgB,EAAE,IAAI,CAAC,uBAAuB,CAAC;IAC/C,gBAAgB,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAC1C,gBAAgB,EAAE,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,qCAAqC,CAAC,CAAC,QAAQ,GAAG,EAAE;IAC9J,kBAAkB,EAAE,EAAE,GAAG,OAAO,CAAC,wBAAwB,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,sDAAsD,CAAC,CAAC,OAAO,IAAI,EAAE;IACzL,WAAW,EAAE,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,8BAA8B,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,EAAE;IAC3H,sBAAsB,EAAE,EAAE,GAAG,KAAK,CAAC,2BAA2B,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;IACxG,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC;IAEvC,UAAU;IACV,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC;IAClC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;IAC9B,aAAa,EAAE,KAAK,CAAC,eAAe,CAAC;IACrC,aAAa,EAAE,KAAK,CAAC,kCAAkC,CAAC;IACxD,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,CAAC,SAAS,GAAG,EAAE;IAC1H,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,CAAC;IAC5C,gBAAgB,EAAE,KAAK,CAAC,gCAAgC,CAAC;IACzD,kBAAkB,EAAE,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gCAAgC,CAAC,CAAC,OAAO,uCAAuC,EAAE;IAExK,sBAAsB;IACtB,WAAW,EAAE,IAAI,CAAC,0CAA0C,CAAC;IAE7D,wBAAwB;IACxB,aAAa,EAAE,IAAI,CAAC,8BAA8B,CAAC;IAEnD,kCAAkC;IAClC,aAAa,EAAE,IAAI,CAAC,wBAAwB,CAAC;IAC7C,YAAY,EAAE,IAAI,CAAC,wBAAwB,CAAC;IAC5C,aAAa,EAAE,EAAE,GAAG,KAAK,CAAC,qCAAqC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,sBAAsB,EAAE;IACrM,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,2BAA2B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,wBAAwB,EAAE;IAC1J,0BAA0B,EAAE,IAAI,CAAC,wBAAwB,CAAC;IAC1D,cAAc,EAAE,EAAE,GAAG,KAAK,CAAC,2BAA2B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,0CAA0C,CAAC,CAAC,QAAQ,yBAAyB,EAAE;IACtK,iBAAiB,EAAE,IAAI,CAAC,6BAA6B,CAAC;IACtD,eAAe,EAAE,IAAI,CAAC,8BAA8B,CAAC;IACrD,iBAAiB,EAAE,EAAE,GAAG,KAAK,CAAC,4CAA4C,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,6DAA6D,CAAE,CAAC,CAAC,OAAqB,IAAI,EAAE,CAAC,CAAC,MAAM,kCAAkC,EAAE;IACnP,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;IAChC,WAAW,EAAE,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,wGAAwG,EAAE;IAE7M,OAAO;IACP,eAAe,EAAE,KAAK,CAAC,qCAAqC,CAAC;IAE7D,cAAc;IACd,cAAc,EAAE;QACd,GAAG,KAAK,CAAC,4CAA4C,CAAC;QACtD,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,WAAW,IAAI,CAAC,qDAAqD;KACjU;IACD,iBAAiB,EAAE,IAAI,CAAC,8BAA8B,CAAC;IACvD,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC;IACtC,iBAAiB,EAAE,IAAI,CAAC,6BAA6B,CAAC;IACtD,gBAAgB,EAAE,KAAK,CAAC,wCAAwC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAC3F,oBAAoB,EAAE,EAAE,GAAG,IAAI,CAAC,4BAA4B,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;IACjF,eAAe,EAAE,IAAI,CAAC,6BAA6B,CAAC;IACpD,iBAAiB,EAAE,EAAE,GAAG,KAAK,CAAC,qCAAqC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,UAAU,kDAAkD,EAAE;IACpN,mBAAmB,EAAE,EAAE,GAAG,KAAK,CAAC,2BAA2B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,mDAAmD,CAAC,CAAC,QAAQ,yBAAyB,EAAE;IACpL,sBAAsB,EAAE,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC7E,eAAe,EAAE,IAAI,CAAC,uBAAuB,CAAC;IAC9C,gBAAgB,EAAE,IAAI,CAAC,wBAAwB,CAAC;IAChD,eAAe,EAAE,IAAI,CAAC,kCAAkC,CAAC;IACzD,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;IACzD,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;IAC9B,aAAa,EAAE,KAAK,CAAC,eAAe,CAAC;IACrC,aAAa,EAAE,KAAK,CAAC,eAAe,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAC/D,aAAa,EAAE,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,2BAA2B,CAAC,CAAC,SAAS,GAAG,EAAE;IACvH,oBAAoB,EAAE,IAAI,CAAC,sBAAsB,CAAC;IAClD,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC7D,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC;IAClC,eAAe,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACzC,eAAe,EAAE,KAAK,CAAC,iBAAiB,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IACnE,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,CAAC,CAAC,WAAW,GAAG,EAAE;IAC/H,sBAAsB,EAAE,IAAI,CAAC,wBAAwB,CAAC;IAEtD,8BAA8B;IAC9B,oBAAoB,EAAE,EAAE,GAAG,KAAK,CAAC,oCAAoC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;IACpH,kBAAkB,EAAE,EAAE,GAAG,KAAK,CAAC,8BAA8B,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;IAC5G,iBAAiB,EAAE,KAAK,CAAC,uBAAuB,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;CAC5E,CAAC"}
|
package/dist/mcp/tools.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import type { IndemnClient } from '../sdk/client.js';
|
|
3
|
-
|
|
3
|
+
import { type Registry } from './registry.js';
|
|
4
|
+
export declare function registerTools(server: McpServer, client: IndemnClient): Registry;
|
|
4
5
|
//# sourceMappingURL=tools.d.ts.map
|
package/dist/mcp/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0BrD,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AA4H9D,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,QAAQ,CAolE/E"}
|