@trusty-squire/mcp 0.7.19 → 0.8.0-rc.1

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 (57) hide show
  1. package/README.md +2 -2
  2. package/dist/api-client.js +3 -3
  3. package/dist/api-client.js.map +1 -1
  4. package/dist/bot/agent.js +2 -2
  5. package/dist/bot/agent.js.map +1 -1
  6. package/dist/bot/oauth-lock.js +1 -1
  7. package/dist/bot/oauth-lock.js.map +1 -1
  8. package/dist/bot/replay-skill.js +1 -1
  9. package/dist/bot/replay-skill.js.map +1 -1
  10. package/dist/skill-cli/cli.js +2 -2
  11. package/dist/skill-cli/cli.js.map +1 -1
  12. package/dist/skill-cli/registry-http.js +1 -1
  13. package/dist/skill-cli/registry-http.js.map +1 -1
  14. package/dist/skill-cli/signing.js +1 -1
  15. package/dist/skill-cli/signing.js.map +1 -1
  16. package/dist/skill-registry-client.d.ts +4 -2
  17. package/dist/skill-registry-client.d.ts.map +1 -1
  18. package/dist/skill-registry-client.js +5 -3
  19. package/dist/skill-registry-client.js.map +1 -1
  20. package/dist/tools/get-credential.js +1 -1
  21. package/dist/tools/index.d.ts +2 -9
  22. package/dist/tools/index.d.ts.map +1 -1
  23. package/dist/tools/index.js +9 -19
  24. package/dist/tools/index.js.map +1 -1
  25. package/dist/tools/provision-any.d.ts +2 -2
  26. package/dist/tools/provision-any.d.ts.map +1 -1
  27. package/dist/tools/provision-any.js +38 -19
  28. package/dist/tools/provision-any.js.map +1 -1
  29. package/package.json +1 -1
  30. package/dist/tools/cancel.d.ts +0 -12
  31. package/dist/tools/cancel.d.ts.map +0 -1
  32. package/dist/tools/cancel.js +0 -34
  33. package/dist/tools/cancel.js.map +0 -1
  34. package/dist/tools/get-usage.d.ts +0 -6
  35. package/dist/tools/get-usage.d.ts.map +0 -1
  36. package/dist/tools/get-usage.js +0 -24
  37. package/dist/tools/get-usage.js.map +0 -1
  38. package/dist/tools/list-services.d.ts +0 -15
  39. package/dist/tools/list-services.d.ts.map +0 -1
  40. package/dist/tools/list-services.js +0 -55
  41. package/dist/tools/list-services.js.map +0 -1
  42. package/dist/tools/list-subscriptions.d.ts +0 -6
  43. package/dist/tools/list-subscriptions.d.ts.map +0 -1
  44. package/dist/tools/list-subscriptions.js +0 -25
  45. package/dist/tools/list-subscriptions.js.map +0 -1
  46. package/dist/tools/provision.d.ts +0 -30
  47. package/dist/tools/provision.d.ts.map +0 -1
  48. package/dist/tools/provision.js +0 -112
  49. package/dist/tools/provision.js.map +0 -1
  50. package/dist/tools/rotate-credential.d.ts +0 -12
  51. package/dist/tools/rotate-credential.d.ts.map +0 -1
  52. package/dist/tools/rotate-credential.js +0 -43
  53. package/dist/tools/rotate-credential.js.map +0 -1
  54. package/dist/tools/wait-for-approval.d.ts +0 -28
  55. package/dist/tools/wait-for-approval.d.ts.map +0 -1
  56. package/dist/tools/wait-for-approval.js +0 -82
  57. package/dist/tools/wait-for-approval.js.map +0 -1
@@ -1,55 +0,0 @@
1
- import { z } from "zod";
2
- import { assertApi } from "./index.js";
3
- const inputSchema = z.object({
4
- category: z.string().min(1).max(60).optional(),
5
- query: z.string().min(1).max(120).optional(),
6
- });
7
- const DESCRIPTION = `List SaaS services that Trusty Squire knows how to provision automatically.
8
- Returns the canonical service id, display name, category, and homepage
9
- for each adapter, optionally filtered by category and/or text query.
10
-
11
- WHEN TO CALL THIS TOOL:
12
- - Before suggesting that the user "go sign up at example.com" — check if
13
- there's a Squire adapter first
14
- - When the user asks "what email service should we use?" or similar
15
- - When you need to confirm a service is supported before calling provision()
16
-
17
- BEHAVIOR:
18
- - Returns the most-recently-published version of each non-disabled adapter
19
- - Filter by category (e.g. "email", "monitoring") if you know it
20
- - Filter by query (substring match against service id and display_name)
21
- - Results are not ranked — present them to the user and let them choose`;
22
- export const listServicesTool = {
23
- name: "list_services",
24
- description: DESCRIPTION,
25
- inputSchema,
26
- jsonInputSchema: {
27
- type: "object",
28
- properties: {
29
- category: { type: "string" },
30
- query: { type: "string" },
31
- },
32
- },
33
- async handler(args, api) {
34
- assertApi(api);
35
- const directory = await api.listServices(args.category);
36
- let entries = directory.adapters;
37
- if (args.query !== undefined) {
38
- const q = args.query.toLowerCase();
39
- entries = entries.filter((a) => a.service.toLowerCase().includes(q) ||
40
- a.display_name.toLowerCase().includes(q) ||
41
- (a.description?.toLowerCase().includes(q) ?? false));
42
- }
43
- return {
44
- services: entries.map((a) => ({
45
- service: a.service,
46
- version: a.latest_version,
47
- display_name: a.display_name,
48
- category: a.category,
49
- homepage: a.homepage,
50
- description: a.description,
51
- })),
52
- };
53
- },
54
- };
55
- //# sourceMappingURL=list-services.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-services.js","sourceRoot":"","sources":["../../src/tools/list-services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAa,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG;;;;;;;;;;;;;;wEAcoD,CAAC;AAEzE,MAAM,CAAC,MAAM,gBAAgB,GAAsC;IACjE,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,WAAW;IACxB,WAAW;IACX,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC1B;KACF;IACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;QACrB,SAAS,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC;QACjC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACnC,OAAO,GAAG,OAAO,CAAC,MAAM,CACtB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACnC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxC,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CACtD,CAAC;QACJ,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,CAAC,CAAC,cAAc;gBACzB,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1,6 +0,0 @@
1
- import { z } from "zod";
2
- import { type Tool } from "./index.js";
3
- declare const inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
4
- export declare const listSubscriptionsTool: Tool<z.infer<typeof inputSchema>>;
5
- export {};
6
- //# sourceMappingURL=list-subscriptions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-subscriptions.d.ts","sourceRoot":"","sources":["../../src/tools/list-subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAElD,QAAA,MAAM,WAAW,gDAAe,CAAC;AAcjC,eAAO,MAAM,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CASnE,CAAC"}
@@ -1,25 +0,0 @@
1
- import { z } from "zod";
2
- import { assertApi } from "./index.js";
3
- const inputSchema = z.object({});
4
- const DESCRIPTION = `List the user's active subscriptions across all services. Useful
5
- when the user asks "what am I paying for?" or to find an existing
6
- subscription before provisioning a duplicate.
7
-
8
- BEHAVIOR:
9
- - Returns subscriptions in any non-cancelled state
10
- - Includes service, plan, project_name, monthly cost (if any),
11
- and the run_id that created the subscription
12
- - Idempotency means a re-provision of the same service+project_name
13
- returns the existing subscription rather than creating a new one;
14
- use this tool to check what's already in place first`;
15
- export const listSubscriptionsTool = {
16
- name: "list_subscriptions",
17
- description: DESCRIPTION,
18
- inputSchema,
19
- jsonInputSchema: { type: "object", properties: {} },
20
- async handler(_args, api) {
21
- assertApi(api);
22
- return api.listSubscriptions();
23
- },
24
- };
25
- //# sourceMappingURL=list-subscriptions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-subscriptions.js","sourceRoot":"","sources":["../../src/tools/list-subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAa,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEjC,MAAM,WAAW,GAAG;;;;;;;;;;uDAUmC,CAAC;AAExD,MAAM,CAAC,MAAM,qBAAqB,GAAsC;IACtE,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,WAAW;IACxB,WAAW;IACX,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;IACnD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,SAAS,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,GAAG,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;CACF,CAAC"}
@@ -1,30 +0,0 @@
1
- import { z } from "zod";
2
- import { type Tool } from "./index.js";
3
- declare const inputSchema: z.ZodObject<{
4
- service: z.ZodString;
5
- plan: z.ZodDefault<z.ZodString>;
6
- project_name: z.ZodString;
7
- category: z.ZodOptional<z.ZodString>;
8
- cost_cents: z.ZodDefault<z.ZodNumber>;
9
- recurrence: z.ZodDefault<z.ZodEnum<["one_time", "monthly", "yearly", "none"]>>;
10
- requirements: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
11
- }, "strip", z.ZodTypeAny, {
12
- service: string;
13
- plan: string;
14
- project_name: string;
15
- cost_cents: number;
16
- recurrence: "one_time" | "monthly" | "yearly" | "none";
17
- category?: string | undefined;
18
- requirements?: Record<string, unknown> | undefined;
19
- }, {
20
- service: string;
21
- project_name: string;
22
- plan?: string | undefined;
23
- category?: string | undefined;
24
- cost_cents?: number | undefined;
25
- recurrence?: "one_time" | "monthly" | "yearly" | "none" | undefined;
26
- requirements?: Record<string, unknown> | undefined;
27
- }>;
28
- export declare const provisionTool: Tool<z.infer<typeof inputSchema>>;
29
- export {};
30
- //# sourceMappingURL=provision.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/tools/provision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAElD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;EAaf,CAAC;AAkCH,eAAO,MAAM,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAiE3D,CAAC"}
@@ -1,112 +0,0 @@
1
- import { z } from "zod";
2
- import { assertApi } from "./index.js";
3
- const inputSchema = z.object({
4
- service: z.string().min(1),
5
- plan: z.string().min(1).default("free"),
6
- project_name: z.string().min(1).max(120),
7
- // The runtime needs category + cost for the mandate evaluator;
8
- // the MCP tool's caller may not know these. When omitted, we
9
- // request the registry directory for default category.
10
- category: z.string().optional(),
11
- cost_cents: z.number().int().nonnegative().default(0),
12
- recurrence: z
13
- .enum(["one_time", "monthly", "yearly", "none"])
14
- .default("none"),
15
- requirements: z.record(z.string(), z.unknown()).optional(),
16
- });
17
- const DESCRIPTION = `Sign up for and configure a SaaS service on the user's behalf, returning
18
- working credentials. The user has pre-authorized spending within their
19
- spending policy, so no manual signup, email verification, or card entry
20
- is needed from them.
21
-
22
- WHEN TO CALL THIS TOOL:
23
- - The user's project needs an API key for any external SaaS
24
- - You would otherwise instruct the user to "go sign up at example.com"
25
- - You need a service-specific credential the user does not yet have
26
- - The user mentions needing hosting, a database, email, monitoring,
27
- auth, AI APIs, payments, analytics, error tracking, or similar
28
-
29
- FIRST call list_credentials — if the account already has a working key
30
- for this service, reuse it via get_credential instead of provisioning a
31
- duplicate.
32
-
33
- DO NOT instruct the user to sign up manually if a Squire adapter exists.
34
- Call list_services first if you are unsure whether the service is supported.
35
-
36
- BEHAVIOR:
37
- - Free tiers are auto-approved within the user's spending policy (silent)
38
- - Paid tiers above the silent ceiling return status="pending_approval"
39
- with a one-click approval link the user can click in their terminal
40
- - Returns within 3-15 seconds for native adapters, up to 60s for browser-based
41
- - Stores credentials in the user's vault automatically
42
- - Idempotent on (user, service, project_name)
43
-
44
- AFTER PROVISIONING:
45
- - Use get_credential() to retrieve the API key for use in code
46
- - Reference credentials via env vars; do not paste secrets into source files
47
- - Tell the user what was set up and the cost, even when silent`;
48
- export const provisionTool = {
49
- name: "provision",
50
- description: DESCRIPTION,
51
- inputSchema,
52
- jsonInputSchema: {
53
- type: "object",
54
- required: ["service", "project_name"],
55
- properties: {
56
- service: { type: "string" },
57
- plan: { type: "string", default: "free" },
58
- project_name: { type: "string" },
59
- category: { type: "string" },
60
- cost_cents: { type: "integer", minimum: 0, default: 0 },
61
- recurrence: {
62
- type: "string",
63
- enum: ["one_time", "monthly", "yearly", "none"],
64
- default: "none",
65
- },
66
- requirements: { type: "object" },
67
- },
68
- },
69
- async handler(args, api) {
70
- assertApi(api);
71
- // If the caller didn't supply category, look it up in the registry.
72
- let category = args.category;
73
- if (category === undefined) {
74
- const dir = await api.listServices();
75
- const match = dir.adapters.find((a) => a.service === args.service);
76
- category = match?.category ?? "unknown";
77
- }
78
- const res = await api.createRun({
79
- service: args.service,
80
- plan: args.plan,
81
- project_name: args.project_name,
82
- category,
83
- cost_cents: args.cost_cents,
84
- recurrence: args.recurrence,
85
- });
86
- if (res.decision === "silent") {
87
- return {
88
- status: "active",
89
- run_id: res.run.id,
90
- run_state: res.run.state,
91
- message: "Sign-up enqueued silently within the user's spending policy.",
92
- };
93
- }
94
- if (res.decision === "needs_approval") {
95
- return {
96
- status: "pending_approval",
97
- run_id: res.run.id,
98
- run_state: res.run.state,
99
- approval_url: res.approval_url,
100
- reasons: res.reasons ?? [],
101
- required_confidence: res.required_confidence ?? "high",
102
- message: "Approval required. Show the user the approval_url so they can confirm.",
103
- };
104
- }
105
- return {
106
- status: "rejected",
107
- run_id: res.run.id,
108
- message: "The mandate rejected this action.",
109
- };
110
- },
111
- };
112
- //# sourceMappingURL=provision.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provision.js","sourceRoot":"","sources":["../../src/tools/provision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAa,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACxC,+DAA+D;IAC/D,6DAA6D;IAC7D,uDAAuD;IACvD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,UAAU,EAAE,CAAC;SACV,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SAC/C,OAAO,CAAC,MAAM,CAAC;IAClB,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC3D,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+DA8B2C,CAAC;AAEhE,MAAM,CAAC,MAAM,aAAa,GAAsC;IAC9D,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,WAAW;IACxB,WAAW;IACX,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC;QACrC,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;YACzC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC5B,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YACvD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;gBAC/C,OAAO,EAAE,MAAM;aAChB;YACD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACjC;KACF;IACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;QACrB,SAAS,CAAC,GAAG,CAAC,CAAC;QACf,oEAAoE;QACpE,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;YACnE,QAAQ,GAAG,KAAK,EAAE,QAAQ,IAAI,SAAS,CAAC;QAC1C,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,QAAQ;YACR,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;gBAClB,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK;gBACxB,OAAO,EAAE,8DAA8D;aACxE,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YACtC,OAAO;gBACL,MAAM,EAAE,kBAAkB;gBAC1B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;gBAClB,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK;gBACxB,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;gBAC1B,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,IAAI,MAAM;gBACtD,OAAO,EAAE,wEAAwE;aAClF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;YAClB,OAAO,EAAE,mCAAmC;SAC7C,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1,12 +0,0 @@
1
- import { z } from "zod";
2
- import type { Tool } from "./index.js";
3
- declare const inputSchema: z.ZodObject<{
4
- reference: z.ZodString;
5
- }, "strip", z.ZodTypeAny, {
6
- reference: string;
7
- }, {
8
- reference: string;
9
- }>;
10
- export declare const rotateCredentialTool: Tool<z.infer<typeof inputSchema>>;
11
- export {};
12
- //# sourceMappingURL=rotate-credential.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rotate-credential.d.ts","sourceRoot":"","sources":["../../src/tools/rotate-credential.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,QAAA,MAAM,WAAW;;;;;;EAEf,CAAC;AAoBH,eAAO,MAAM,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAqBlE,CAAC"}
@@ -1,43 +0,0 @@
1
- import { z } from "zod";
2
- const inputSchema = z.object({
3
- reference: z.string().min(1),
4
- });
5
- const DESCRIPTION = `Rotate a vault-stored credential (e.g. when the user suspects a leak).
6
- The adapter's rotate flow generates a fresh credential, stores it in
7
- the vault under the same reference, and revokes the old value at the
8
- service.
9
-
10
- WHEN TO CALL THIS TOOL:
11
- - The user explicitly asks "rotate the X key"
12
- - A credential leak has been confirmed
13
- - Compliance policy requires periodic rotation and the rotation due
14
- date has passed
15
-
16
- BEHAVIOR:
17
- - Default confidence requirement is medium (not high) — rotation is a
18
- privileged operation but doesn't authorize new spending
19
- - In v0 the rotate flow is partially wired; the rotate adapter step
20
- exists but the runtime's flow selector doesn't pick the rotate flow
21
- yet — see chunk 11+ roadmap. This tool currently returns 202.`;
22
- export const rotateCredentialTool = {
23
- name: "rotate_credential",
24
- description: DESCRIPTION,
25
- inputSchema,
26
- jsonInputSchema: {
27
- type: "object",
28
- required: ["reference"],
29
- properties: { reference: { type: "string" } },
30
- },
31
- async handler(args, _api) {
32
- // v0 stub. The endpoint doesn't exist on apps/api yet — the chunk-11
33
- // spec lists rotate as a future improvement. We return a clear
34
- // not-implemented body so the coding agent can surface this to
35
- // the user rather than acting on a false success.
36
- return {
37
- status: "not_implemented",
38
- reference: args.reference,
39
- message: "Credential rotation is a v0 stub. The cancel + rotate flow selectors arrive in a later chunk. Track progress at /v1/usage.",
40
- };
41
- },
42
- };
43
- //# sourceMappingURL=rotate-credential.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rotate-credential.js","sourceRoot":"","sources":["../../src/tools/rotate-credential.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;gEAgB4C,CAAC;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAsC;IACrE,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,WAAW;IACxB,WAAW;IACX,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;KAC9C;IACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI;QACtB,qEAAqE;QACrE,+DAA+D;QAC/D,+DAA+D;QAC/D,kDAAkD;QAClD,OAAO;YACL,MAAM,EAAE,iBAAiB;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EACL,4HAA4H;SAC/H,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1,28 +0,0 @@
1
- import { z } from "zod";
2
- import type { ApiClient } from "../api-client.js";
3
- import { type Tool } from "./index.js";
4
- declare const inputSchema: z.ZodObject<{
5
- run_id: z.ZodString;
6
- timeout_seconds: z.ZodDefault<z.ZodNumber>;
7
- poll_interval_seconds: z.ZodDefault<z.ZodNumber>;
8
- }, "strip", z.ZodTypeAny, {
9
- timeout_seconds: number;
10
- run_id: string;
11
- poll_interval_seconds: number;
12
- }, {
13
- run_id: string;
14
- timeout_seconds?: number | undefined;
15
- poll_interval_seconds?: number | undefined;
16
- }>;
17
- export declare const waitForApprovalTool: Tool<z.infer<typeof inputSchema>>;
18
- export declare function waitForApprovalImpl(args: z.infer<typeof inputSchema>, api: ApiClient, options?: {
19
- sleep?: (ms: number) => Promise<void>;
20
- now?: () => number;
21
- }): Promise<{
22
- status: string;
23
- run_state: string;
24
- run_id: string;
25
- reason?: string;
26
- }>;
27
- export {};
28
- //# sourceMappingURL=wait-for-approval.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wait-for-approval.d.ts","sourceRoot":"","sources":["../../src/tools/wait-for-approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAElD,QAAA,MAAM,WAAW;;;;;;;;;;;;EAIf,CAAC;AAcH,eAAO,MAAM,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAiBjE,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,EACjC,GAAG,EAAE,SAAS,EACd,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GAC1E,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyBjF"}
@@ -1,82 +0,0 @@
1
- import { z } from "zod";
2
- import { assertApi } from "./index.js";
3
- const inputSchema = z.object({
4
- run_id: z.string().min(1),
5
- timeout_seconds: z.number().int().positive().max(600).default(120),
6
- poll_interval_seconds: z.number().int().positive().max(30).default(2),
7
- });
8
- const DESCRIPTION = `Wait for a run that's in pending_approval to be granted or denied by the user.
9
- Returns the final status once the run leaves PENDING_APPROVAL or the timeout elapses.
10
-
11
- WHEN TO CALL THIS TOOL:
12
- - After provision() returns status="pending_approval"
13
- - When you want to block until the user clicks the approval link
14
-
15
- BEHAVIOR:
16
- - Polls the run every poll_interval_seconds (default 2s)
17
- - Returns once the run leaves PENDING_APPROVAL or timeout_seconds elapses
18
- - Does NOT auto-grant; only the user can grant via the approval URL`;
19
- export const waitForApprovalTool = {
20
- name: "wait_for_approval",
21
- description: DESCRIPTION,
22
- inputSchema,
23
- jsonInputSchema: {
24
- type: "object",
25
- required: ["run_id"],
26
- properties: {
27
- run_id: { type: "string" },
28
- timeout_seconds: { type: "integer", minimum: 1, maximum: 600, default: 120 },
29
- poll_interval_seconds: { type: "integer", minimum: 1, maximum: 30, default: 2 },
30
- },
31
- },
32
- async handler(args, api) {
33
- assertApi(api);
34
- return waitForApprovalImpl(args, api);
35
- },
36
- };
37
- export async function waitForApprovalImpl(args, api, options = {}) {
38
- const sleep = options.sleep ?? defaultSleep;
39
- const now = options.now ?? (() => Date.now());
40
- const deadline = now() + args.timeout_seconds * 1000;
41
- while (true) {
42
- const run = await api.getRun(args.run_id);
43
- if (run.state !== "PENDING_APPROVAL") {
44
- return {
45
- status: terminalDescription(run.state),
46
- run_state: run.state,
47
- run_id: run.id,
48
- ...(run.failure_reason !== null ? { reason: run.failure_reason } : {}),
49
- };
50
- }
51
- if (now() >= deadline) {
52
- return {
53
- status: "timeout",
54
- run_state: run.state,
55
- run_id: run.id,
56
- reason: "wait_for_approval_timed_out",
57
- };
58
- }
59
- await sleep(args.poll_interval_seconds * 1000);
60
- }
61
- }
62
- function defaultSleep(ms) {
63
- return new Promise((resolve) => setTimeout(resolve, ms));
64
- }
65
- function terminalDescription(state) {
66
- switch (state) {
67
- case "PROVISIONING":
68
- case "ADAPTER_EXECUTING":
69
- case "CRED_EXTRACTED":
70
- case "VAULT_WRITTEN":
71
- return "granted";
72
- case "COMPLETE":
73
- return "active";
74
- case "REJECTED":
75
- return "denied";
76
- case "FAILED":
77
- return "failed";
78
- default:
79
- return state.toLowerCase();
80
- }
81
- }
82
- //# sourceMappingURL=wait-for-approval.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wait-for-approval.js","sourceRoot":"","sources":["../../src/tools/wait-for-approval.ts"],"names":[],"mappings":"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"}