@troykelly/openclaw-projects 0.0.30 → 0.0.31

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 (51) hide show
  1. package/dist/register-openclaw.d.ts.map +1 -1
  2. package/dist/register-openclaw.js +224 -3
  3. package/dist/register-openclaw.js.map +1 -1
  4. package/dist/services/api-source-service.d.ts +181 -0
  5. package/dist/services/api-source-service.d.ts.map +1 -0
  6. package/dist/services/api-source-service.js +120 -0
  7. package/dist/services/api-source-service.js.map +1 -0
  8. package/dist/tools/api-credential-manage.d.ts +83 -0
  9. package/dist/tools/api-credential-manage.d.ts.map +1 -0
  10. package/dist/tools/api-credential-manage.js +71 -0
  11. package/dist/tools/api-credential-manage.js.map +1 -0
  12. package/dist/tools/api-get.d.ts +47 -0
  13. package/dist/tools/api-get.d.ts.map +1 -0
  14. package/dist/tools/api-get.js +41 -0
  15. package/dist/tools/api-get.js.map +1 -0
  16. package/dist/tools/api-list.d.ts +54 -0
  17. package/dist/tools/api-list.d.ts.map +1 -0
  18. package/dist/tools/api-list.js +46 -0
  19. package/dist/tools/api-list.js.map +1 -0
  20. package/dist/tools/api-onboard.d.ts +134 -0
  21. package/dist/tools/api-onboard.d.ts.map +1 -0
  22. package/dist/tools/api-onboard.js +109 -0
  23. package/dist/tools/api-onboard.js.map +1 -0
  24. package/dist/tools/api-recall.d.ts +69 -0
  25. package/dist/tools/api-recall.d.ts.map +1 -0
  26. package/dist/tools/api-recall.js +101 -0
  27. package/dist/tools/api-recall.js.map +1 -0
  28. package/dist/tools/api-refresh.d.ts +50 -0
  29. package/dist/tools/api-refresh.d.ts.map +1 -0
  30. package/dist/tools/api-refresh.js +55 -0
  31. package/dist/tools/api-refresh.js.map +1 -0
  32. package/dist/tools/api-remove.d.ts +46 -0
  33. package/dist/tools/api-remove.d.ts.map +1 -0
  34. package/dist/tools/api-remove.js +45 -0
  35. package/dist/tools/api-remove.js.map +1 -0
  36. package/dist/tools/api-restore.d.ts +45 -0
  37. package/dist/tools/api-restore.d.ts.map +1 -0
  38. package/dist/tools/api-restore.js +41 -0
  39. package/dist/tools/api-restore.js.map +1 -0
  40. package/dist/tools/api-update.d.ts +57 -0
  41. package/dist/tools/api-update.d.ts.map +1 -0
  42. package/dist/tools/api-update.js +46 -0
  43. package/dist/tools/api-update.js.map +1 -0
  44. package/dist/tools/index.d.ts +9 -0
  45. package/dist/tools/index.d.ts.map +1 -1
  46. package/dist/tools/index.js +10 -0
  47. package/dist/tools/index.js.map +1 -1
  48. package/dist/types/openclaw-api.d.ts +1 -0
  49. package/dist/types/openclaw-api.d.ts.map +1 -1
  50. package/openclaw.plugin.json +1 -1
  51. package/package.json +1 -1
@@ -0,0 +1,46 @@
1
+ /**
2
+ * api_list tool implementation.
3
+ * List all onboarded API sources.
4
+ * Part of API Onboarding feature (#1785).
5
+ */
6
+ import { z } from 'zod';
7
+ import { ApiSourceService } from '../services/api-source-service.js';
8
+ import { sanitizeErrorMessage } from '../utils/sanitize.js';
9
+ /** Parameters for api_list tool */
10
+ export const ApiListParamsSchema = z.object({
11
+ limit: z.number().int().min(1).max(100).optional(),
12
+ offset: z.number().int().min(0).optional(),
13
+ status: z.enum(['active', 'error', 'disabled']).optional(),
14
+ });
15
+ export function createApiListTool(options) {
16
+ const { client, logger, user_id } = options;
17
+ const service = new ApiSourceService(client);
18
+ return {
19
+ name: 'api_list',
20
+ description: 'List all onboarded API sources. Optionally filter by status (active, error, disabled).',
21
+ parameters: ApiListParamsSchema,
22
+ async execute(params) {
23
+ const parseResult = ApiListParamsSchema.safeParse(params);
24
+ if (!parseResult.success) {
25
+ return { success: false, error: parseResult.error.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ') };
26
+ }
27
+ try {
28
+ const response = await service.list(parseResult.data, { user_id });
29
+ if (!response.success) {
30
+ return { success: false, error: response.error.message || 'Failed to list API sources' };
31
+ }
32
+ const sources = response.data.data;
33
+ const lines = sources.length > 0
34
+ ? sources.map((s) => `- ${s.name} (${s.status}) [${s.id}]`)
35
+ : ['No API sources found.'];
36
+ const content = `${sources.length} API source(s):\n${lines.join('\n')}`;
37
+ return { success: true, data: { content, details: { count: sources.length, sources } } };
38
+ }
39
+ catch (error) {
40
+ logger.error('api_list failed', { user_id, error: error instanceof Error ? error.message : String(error) });
41
+ return { success: false, error: sanitizeErrorMessage(error) };
42
+ }
43
+ },
44
+ };
45
+ }
46
+ //# sourceMappingURL=api-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-list.js","sourceRoot":"","sources":["../../src/tools/api-list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * api_onboard tool implementation.
3
+ * Onboards a new API by providing its OpenAPI spec URL or inline content.
4
+ * Part of API Onboarding feature (#1784).
5
+ */
6
+ import { z } from 'zod';
7
+ import type { ApiClient } from '../api-client.js';
8
+ import type { Logger } from '../logger.js';
9
+ import type { PluginConfig } from '../config.js';
10
+ /** Parameters for api_onboard tool */
11
+ export declare const ApiOnboardParamsSchema: z.ZodEffects<z.ZodObject<{
12
+ spec_url: z.ZodOptional<z.ZodString>;
13
+ spec_content: z.ZodOptional<z.ZodString>;
14
+ name: z.ZodOptional<z.ZodString>;
15
+ description: z.ZodOptional<z.ZodString>;
16
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
17
+ credentials: z.ZodOptional<z.ZodArray<z.ZodObject<{
18
+ header_name: z.ZodString;
19
+ header_prefix: z.ZodOptional<z.ZodString>;
20
+ resolve_strategy: z.ZodEnum<["literal", "env", "file", "command"]>;
21
+ resolve_reference: z.ZodString;
22
+ purpose: z.ZodOptional<z.ZodEnum<["api_call", "spec_fetch"]>>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ header_name: string;
25
+ resolve_strategy: "file" | "command" | "literal" | "env";
26
+ resolve_reference: string;
27
+ purpose?: "api_call" | "spec_fetch" | undefined;
28
+ header_prefix?: string | undefined;
29
+ }, {
30
+ header_name: string;
31
+ resolve_strategy: "file" | "command" | "literal" | "env";
32
+ resolve_reference: string;
33
+ purpose?: "api_call" | "spec_fetch" | undefined;
34
+ header_prefix?: string | undefined;
35
+ }>, "many">>;
36
+ spec_auth_headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ credentials?: {
39
+ header_name: string;
40
+ resolve_strategy: "file" | "command" | "literal" | "env";
41
+ resolve_reference: string;
42
+ purpose?: "api_call" | "spec_fetch" | undefined;
43
+ header_prefix?: string | undefined;
44
+ }[] | undefined;
45
+ description?: string | undefined;
46
+ name?: string | undefined;
47
+ tags?: string[] | undefined;
48
+ spec_url?: string | undefined;
49
+ spec_content?: string | undefined;
50
+ spec_auth_headers?: Record<string, string> | undefined;
51
+ }, {
52
+ credentials?: {
53
+ header_name: string;
54
+ resolve_strategy: "file" | "command" | "literal" | "env";
55
+ resolve_reference: string;
56
+ purpose?: "api_call" | "spec_fetch" | undefined;
57
+ header_prefix?: string | undefined;
58
+ }[] | undefined;
59
+ description?: string | undefined;
60
+ name?: string | undefined;
61
+ tags?: string[] | undefined;
62
+ spec_url?: string | undefined;
63
+ spec_content?: string | undefined;
64
+ spec_auth_headers?: Record<string, string> | undefined;
65
+ }>, {
66
+ credentials?: {
67
+ header_name: string;
68
+ resolve_strategy: "file" | "command" | "literal" | "env";
69
+ resolve_reference: string;
70
+ purpose?: "api_call" | "spec_fetch" | undefined;
71
+ header_prefix?: string | undefined;
72
+ }[] | undefined;
73
+ description?: string | undefined;
74
+ name?: string | undefined;
75
+ tags?: string[] | undefined;
76
+ spec_url?: string | undefined;
77
+ spec_content?: string | undefined;
78
+ spec_auth_headers?: Record<string, string> | undefined;
79
+ }, {
80
+ credentials?: {
81
+ header_name: string;
82
+ resolve_strategy: "file" | "command" | "literal" | "env";
83
+ resolve_reference: string;
84
+ purpose?: "api_call" | "spec_fetch" | undefined;
85
+ header_prefix?: string | undefined;
86
+ }[] | undefined;
87
+ description?: string | undefined;
88
+ name?: string | undefined;
89
+ tags?: string[] | undefined;
90
+ spec_url?: string | undefined;
91
+ spec_content?: string | undefined;
92
+ spec_auth_headers?: Record<string, string> | undefined;
93
+ }>;
94
+ export type ApiOnboardParams = z.infer<typeof ApiOnboardParamsSchema>;
95
+ /** Successful tool result */
96
+ export interface ApiOnboardSuccess {
97
+ success: true;
98
+ data: {
99
+ content: string;
100
+ details: {
101
+ api_source_id: string;
102
+ name: string;
103
+ memories_created: number;
104
+ memories_updated: number;
105
+ memories_deleted: number;
106
+ };
107
+ };
108
+ }
109
+ /** Failed tool result */
110
+ export interface ApiOnboardFailure {
111
+ success: false;
112
+ error: string;
113
+ }
114
+ /** Tool result type */
115
+ export type ApiOnboardResult = ApiOnboardSuccess | ApiOnboardFailure;
116
+ /** Tool configuration */
117
+ export interface ApiOnboardToolOptions {
118
+ client: ApiClient;
119
+ logger: Logger;
120
+ config: PluginConfig;
121
+ user_id: string;
122
+ }
123
+ /** Tool definition */
124
+ export interface ApiOnboardTool {
125
+ name: string;
126
+ description: string;
127
+ parameters: typeof ApiOnboardParamsSchema;
128
+ execute: (params: ApiOnboardParams) => Promise<ApiOnboardResult>;
129
+ }
130
+ /**
131
+ * Creates the api_onboard tool.
132
+ */
133
+ export declare function createApiOnboardTool(options: ApiOnboardToolOptions): ApiOnboardTool;
134
+ //# sourceMappingURL=api-onboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-onboard.d.ts","sourceRoot":"","sources":["../../src/tools/api-onboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,sCAAsC;AACtC,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,6BAA6B;AAC7B,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE;YACP,aAAa,EAAE,MAAM,CAAC;YACtB,IAAI,EAAE,MAAM,CAAC;YACb,gBAAgB,EAAE,MAAM,CAAC;YACzB,gBAAgB,EAAE,MAAM,CAAC;YACzB,gBAAgB,EAAE,MAAM,CAAC;SAC1B,CAAC;KACH,CAAC;CACH;AAED,yBAAyB;AACzB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uBAAuB;AACvB,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AAErE,yBAAyB;AACzB,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sBAAsB;AACtB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,sBAAsB,CAAC;IAC1C,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CA4FnF"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * api_onboard tool implementation.
3
+ * Onboards a new API by providing its OpenAPI spec URL or inline content.
4
+ * Part of API Onboarding feature (#1784).
5
+ */
6
+ import { z } from 'zod';
7
+ import { ApiSourceService } from '../services/api-source-service.js';
8
+ import { sanitizeErrorMessage } from '../utils/sanitize.js';
9
+ /** Parameters for api_onboard tool */
10
+ export const ApiOnboardParamsSchema = z.object({
11
+ spec_url: z.string().url('spec_url must be a valid URL').optional(),
12
+ spec_content: z.string().min(1, 'spec_content cannot be empty').optional(),
13
+ name: z.string().min(1).max(200).optional(),
14
+ description: z.string().max(2000).optional(),
15
+ tags: z.array(z.string().min(1).max(100)).max(20).optional(),
16
+ credentials: z.array(z.object({
17
+ header_name: z.string().min(1),
18
+ header_prefix: z.string().optional(),
19
+ resolve_strategy: z.enum(['literal', 'env', 'file', 'command']),
20
+ resolve_reference: z.string().min(1),
21
+ purpose: z.enum(['api_call', 'spec_fetch']).optional(),
22
+ })).optional(),
23
+ spec_auth_headers: z.record(z.string()).optional(),
24
+ }).refine((data) => data.spec_url || data.spec_content, {
25
+ message: 'Either spec_url or spec_content is required',
26
+ });
27
+ /**
28
+ * Creates the api_onboard tool.
29
+ */
30
+ export function createApiOnboardTool(options) {
31
+ const { client, logger, user_id } = options;
32
+ const service = new ApiSourceService(client);
33
+ return {
34
+ name: 'api_onboard',
35
+ description: 'Onboard a new API by providing its OpenAPI specification URL or inline spec content. ' +
36
+ 'Parses the spec, decomposes it into searchable memories, and optionally stores credentials. ' +
37
+ 'Use this when you need to teach the system about a new API.',
38
+ parameters: ApiOnboardParamsSchema,
39
+ async execute(params) {
40
+ const parseResult = ApiOnboardParamsSchema.safeParse(params);
41
+ if (!parseResult.success) {
42
+ const errorMessage = parseResult.error.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');
43
+ return { success: false, error: errorMessage };
44
+ }
45
+ logger.info('api_onboard invoked', {
46
+ user_id,
47
+ spec_url: parseResult.data.spec_url,
48
+ has_spec_content: !!parseResult.data.spec_content,
49
+ credential_count: parseResult.data.credentials?.length ?? 0,
50
+ });
51
+ try {
52
+ const response = await service.onboard({
53
+ spec_url: parseResult.data.spec_url,
54
+ spec_content: parseResult.data.spec_content,
55
+ name: parseResult.data.name,
56
+ description: parseResult.data.description,
57
+ tags: parseResult.data.tags,
58
+ credentials: parseResult.data.credentials,
59
+ spec_auth_headers: parseResult.data.spec_auth_headers,
60
+ }, { user_id });
61
+ if (!response.success) {
62
+ logger.error('api_onboard API error', {
63
+ user_id,
64
+ status: response.error.status,
65
+ code: response.error.code,
66
+ });
67
+ return {
68
+ success: false,
69
+ error: response.error.message || 'Failed to onboard API',
70
+ };
71
+ }
72
+ const result = response.data.data;
73
+ const content = `Onboarded API "${result.api_source.name}" — ` +
74
+ `${result.memories_created} memories created, ` +
75
+ `${result.memories_updated} updated, ` +
76
+ `${result.memories_deleted} deleted.`;
77
+ logger.debug('api_onboard completed', {
78
+ user_id,
79
+ api_source_id: result.api_source.id,
80
+ memories_created: result.memories_created,
81
+ });
82
+ return {
83
+ success: true,
84
+ data: {
85
+ content,
86
+ details: {
87
+ api_source_id: result.api_source.id,
88
+ name: result.api_source.name,
89
+ memories_created: result.memories_created,
90
+ memories_updated: result.memories_updated,
91
+ memories_deleted: result.memories_deleted,
92
+ },
93
+ },
94
+ };
95
+ }
96
+ catch (error) {
97
+ logger.error('api_onboard failed', {
98
+ user_id,
99
+ error: error instanceof Error ? error.message : String(error),
100
+ });
101
+ return {
102
+ success: false,
103
+ error: sanitizeErrorMessage(error),
104
+ };
105
+ }
106
+ },
107
+ };
108
+ }
109
+ //# sourceMappingURL=api-onboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-onboard.js","sourceRoot":"","sources":["../../src/tools/api-onboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,gBAAgB,EAA8B,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,sCAAsC;AACtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,QAAQ,EAAE;IACnE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,8BAA8B,CAAC,CAAC,QAAQ,EAAE;IAC1E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAC5C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5D,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC/D,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;KACvD,CAAC,CAAC,CAAC,QAAQ,EAAE;IACd,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;IACtD,OAAO,EAAE,6CAA6C;CACvD,CAAC,CAAC;AA2CH;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IACjE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE7C,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,uFAAuF;YACvF,8FAA8F;YAC9F,6DAA6D;QAC/D,UAAU,EAAE,sBAAsB;QAElC,KAAK,CAAC,OAAO,CAAC,MAAwB;YACpC,MAAM,WAAW,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC7D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YACjD,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBACjC,OAAO;gBACP,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ;gBACnC,gBAAgB,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY;gBACjD,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;aAC5D,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CACpC;oBACE,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ;oBACnC,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,YAAY;oBAC3C,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI;oBAC3B,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,WAAW;oBACzC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI;oBAC3B,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,WAAW;oBACzC,iBAAiB,EAAE,WAAW,CAAC,IAAI,CAAC,iBAAiB;iBACtD,EACD,EAAE,OAAO,EAAE,CACZ,CAAC;gBAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACtB,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;wBACpC,OAAO;wBACP,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;wBAC7B,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI;qBAC1B,CAAC,CAAC;oBACH,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,uBAAuB;qBACzD,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAA0B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBAEzD,MAAM,OAAO,GACX,kBAAkB,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM;oBAC9C,GAAG,MAAM,CAAC,gBAAgB,qBAAqB;oBAC/C,GAAG,MAAM,CAAC,gBAAgB,YAAY;oBACtC,GAAG,MAAM,CAAC,gBAAgB,WAAW,CAAC;gBAExC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;oBACpC,OAAO;oBACP,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE;oBACnC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;iBAC1C,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE;wBACJ,OAAO;wBACP,OAAO,EAAE;4BACP,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE;4BACnC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI;4BAC5B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;4BACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;4BACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;yBAC1C;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;oBACjC,OAAO;oBACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC;iBACnC,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * api_recall tool implementation.
3
+ * Search onboarded API memories to find endpoints, operations, and capabilities.
4
+ * Part of API Onboarding feature (#1784).
5
+ */
6
+ import { z } from 'zod';
7
+ import type { ApiClient } from '../api-client.js';
8
+ import type { Logger } from '../logger.js';
9
+ import type { PluginConfig } from '../config.js';
10
+ import { type ApiMemorySearchResultResponse } from '../services/api-source-service.js';
11
+ /** Parameters for api_recall tool */
12
+ export declare const ApiRecallParamsSchema: z.ZodObject<{
13
+ query: z.ZodString;
14
+ limit: z.ZodOptional<z.ZodNumber>;
15
+ memory_kind: z.ZodOptional<z.ZodEnum<["overview", "tag_group", "operation"]>>;
16
+ api_source_id: z.ZodOptional<z.ZodString>;
17
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ query: string;
20
+ limit?: number | undefined;
21
+ tags?: string[] | undefined;
22
+ api_source_id?: string | undefined;
23
+ memory_kind?: "operation" | "overview" | "tag_group" | undefined;
24
+ }, {
25
+ query: string;
26
+ limit?: number | undefined;
27
+ tags?: string[] | undefined;
28
+ api_source_id?: string | undefined;
29
+ memory_kind?: "operation" | "overview" | "tag_group" | undefined;
30
+ }>;
31
+ export type ApiRecallParams = z.infer<typeof ApiRecallParamsSchema>;
32
+ /** Successful tool result */
33
+ export interface ApiRecallSuccess {
34
+ success: true;
35
+ data: {
36
+ content: string;
37
+ details: {
38
+ count: number;
39
+ results: ApiMemorySearchResultResponse[];
40
+ user_id: string;
41
+ };
42
+ };
43
+ }
44
+ /** Failed tool result */
45
+ export interface ApiRecallFailure {
46
+ success: false;
47
+ error: string;
48
+ }
49
+ /** Tool result type */
50
+ export type ApiRecallResult = ApiRecallSuccess | ApiRecallFailure;
51
+ /** Tool configuration */
52
+ export interface ApiRecallToolOptions {
53
+ client: ApiClient;
54
+ logger: Logger;
55
+ config: PluginConfig;
56
+ user_id: string;
57
+ }
58
+ /** Tool definition */
59
+ export interface ApiRecallTool {
60
+ name: string;
61
+ description: string;
62
+ parameters: typeof ApiRecallParamsSchema;
63
+ execute: (params: ApiRecallParams) => Promise<ApiRecallResult>;
64
+ }
65
+ /**
66
+ * Creates the api_recall tool.
67
+ */
68
+ export declare function createApiRecallTool(options: ApiRecallToolOptions): ApiRecallTool;
69
+ //# sourceMappingURL=api-recall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-recall.d.ts","sourceRoot":"","sources":["../../src/tools/api-recall.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAoB,KAAK,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAGzG,qCAAqC;AACrC,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;EAMhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,6BAA6B;AAC7B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,6BAA6B,EAAE,CAAC;YACzC,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;CACH;AAED,yBAAyB;AACzB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uBAAuB;AACvB,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAElE,yBAAyB;AACzB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sBAAsB;AACtB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,qBAAqB,CAAC;IACzC,OAAO,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAChE;AAoBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA+EhF"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * api_recall tool implementation.
3
+ * Search onboarded API memories to find endpoints, operations, and capabilities.
4
+ * Part of API Onboarding feature (#1784).
5
+ */
6
+ import { z } from 'zod';
7
+ import { ApiSourceService } from '../services/api-source-service.js';
8
+ import { sanitizeErrorMessage } from '../utils/sanitize.js';
9
+ /** Parameters for api_recall tool */
10
+ export const ApiRecallParamsSchema = z.object({
11
+ query: z.string().min(1, 'Query cannot be empty').max(1000, 'Query must be 1000 characters or less'),
12
+ limit: z.number().int().min(1).max(50).optional(),
13
+ memory_kind: z.enum(['overview', 'tag_group', 'operation']).optional(),
14
+ api_source_id: z.string().uuid('api_source_id must be a valid UUID').optional(),
15
+ tags: z.array(z.string().min(1).max(100)).max(20).optional(),
16
+ });
17
+ /**
18
+ * Format search results into a human-readable summary.
19
+ */
20
+ function formatResults(results) {
21
+ if (results.length === 0) {
22
+ return 'No matching API operations found.';
23
+ }
24
+ const lines = [`Found ${results.length} matching API operation(s):`];
25
+ for (const r of results) {
26
+ const tags = r.tags.length > 0 ? ` [${r.tags.join(', ')}]` : '';
27
+ lines.push(`- ${r.title}${tags} (score: ${r.score.toFixed(2)})`);
28
+ }
29
+ return lines.join('\n');
30
+ }
31
+ /**
32
+ * Creates the api_recall tool.
33
+ */
34
+ export function createApiRecallTool(options) {
35
+ const { client, logger, user_id } = options;
36
+ const service = new ApiSourceService(client);
37
+ return {
38
+ name: 'api_recall',
39
+ description: 'Search through onboarded API memories to find endpoints, operations, and capabilities. ' +
40
+ 'Returns operation details including method, path, parameters, and credentials. ' +
41
+ 'Use this when you need to find how to call an API.',
42
+ parameters: ApiRecallParamsSchema,
43
+ async execute(params) {
44
+ const parseResult = ApiRecallParamsSchema.safeParse(params);
45
+ if (!parseResult.success) {
46
+ const errorMessage = parseResult.error.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');
47
+ return { success: false, error: errorMessage };
48
+ }
49
+ const { query, limit = 10, memory_kind, api_source_id, tags } = parseResult.data;
50
+ logger.info('api_recall invoked', {
51
+ user_id,
52
+ query,
53
+ limit,
54
+ memory_kind,
55
+ api_source_id,
56
+ });
57
+ try {
58
+ const response = await service.search({ q: query, limit, memory_kind, api_source_id, tags }, { user_id });
59
+ if (!response.success) {
60
+ logger.error('api_recall API error', {
61
+ user_id,
62
+ status: response.error.status,
63
+ code: response.error.code,
64
+ });
65
+ return {
66
+ success: false,
67
+ error: response.error.message || 'Failed to search API memories',
68
+ };
69
+ }
70
+ const results = response.data.data;
71
+ const content = formatResults(results);
72
+ logger.debug('api_recall completed', {
73
+ user_id,
74
+ resultCount: results.length,
75
+ });
76
+ return {
77
+ success: true,
78
+ data: {
79
+ content,
80
+ details: {
81
+ count: results.length,
82
+ results,
83
+ user_id,
84
+ },
85
+ },
86
+ };
87
+ }
88
+ catch (error) {
89
+ logger.error('api_recall failed', {
90
+ user_id,
91
+ error: error instanceof Error ? error.message : String(error),
92
+ });
93
+ return {
94
+ success: false,
95
+ error: sanitizeErrorMessage(error),
96
+ };
97
+ }
98
+ },
99
+ };
100
+ }
101
+ //# sourceMappingURL=api-recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-recall.js","sourceRoot":"","sources":["../../src/tools/api-recall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * api_refresh tool implementation.
3
+ * Refresh an API source by re-fetching and re-parsing its OpenAPI spec.
4
+ * Part of API Onboarding feature (#1785).
5
+ */
6
+ import { z } from 'zod';
7
+ import type { ApiClient } from '../api-client.js';
8
+ import type { Logger } from '../logger.js';
9
+ import type { PluginConfig } from '../config.js';
10
+ /** Parameters for api_refresh tool */
11
+ export declare const ApiRefreshParamsSchema: z.ZodObject<{
12
+ id: z.ZodString;
13
+ }, "strip", z.ZodTypeAny, {
14
+ id: string;
15
+ }, {
16
+ id: string;
17
+ }>;
18
+ export type ApiRefreshParams = z.infer<typeof ApiRefreshParamsSchema>;
19
+ export interface ApiRefreshSuccess {
20
+ success: true;
21
+ data: {
22
+ content: string;
23
+ details: {
24
+ api_source_id: string;
25
+ spec_changed: boolean;
26
+ memories_created: number;
27
+ memories_updated: number;
28
+ memories_deleted: number;
29
+ };
30
+ };
31
+ }
32
+ export interface ApiRefreshFailure {
33
+ success: false;
34
+ error: string;
35
+ }
36
+ export type ApiRefreshResult = ApiRefreshSuccess | ApiRefreshFailure;
37
+ export interface ApiRefreshToolOptions {
38
+ client: ApiClient;
39
+ logger: Logger;
40
+ config: PluginConfig;
41
+ user_id: string;
42
+ }
43
+ export interface ApiRefreshTool {
44
+ name: string;
45
+ description: string;
46
+ parameters: typeof ApiRefreshParamsSchema;
47
+ execute: (params: ApiRefreshParams) => Promise<ApiRefreshResult>;
48
+ }
49
+ export declare function createApiRefreshTool(options: ApiRefreshToolOptions): ApiRefreshTool;
50
+ //# sourceMappingURL=api-refresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-refresh.d.ts","sourceRoot":"","sources":["../../src/tools/api-refresh.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,sCAAsC;AACtC,eAAO,MAAM,sBAAsB;;;;;;EAEjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE;YACP,aAAa,EAAE,MAAM,CAAC;YACtB,YAAY,EAAE,OAAO,CAAC;YACtB,gBAAgB,EAAE,MAAM,CAAC;YACzB,gBAAgB,EAAE,MAAM,CAAC;YACzB,gBAAgB,EAAE,MAAM,CAAC;SAC1B,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,sBAAsB,CAAC;IAC1C,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAClE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CA8CnF"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * api_refresh tool implementation.
3
+ * Refresh an API source by re-fetching and re-parsing its OpenAPI spec.
4
+ * Part of API Onboarding feature (#1785).
5
+ */
6
+ import { z } from 'zod';
7
+ import { ApiSourceService } from '../services/api-source-service.js';
8
+ import { sanitizeErrorMessage } from '../utils/sanitize.js';
9
+ /** Parameters for api_refresh tool */
10
+ export const ApiRefreshParamsSchema = z.object({
11
+ id: z.string().uuid('id must be a valid UUID'),
12
+ });
13
+ export function createApiRefreshTool(options) {
14
+ const { client, logger, user_id } = options;
15
+ const service = new ApiSourceService(client);
16
+ return {
17
+ name: 'api_refresh',
18
+ description: 'Refresh an API source by re-fetching its OpenAPI spec and updating memories. Returns a diff summary.',
19
+ parameters: ApiRefreshParamsSchema,
20
+ async execute(params) {
21
+ const parseResult = ApiRefreshParamsSchema.safeParse(params);
22
+ if (!parseResult.success) {
23
+ return { success: false, error: parseResult.error.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ') };
24
+ }
25
+ try {
26
+ const response = await service.refresh(parseResult.data.id, { user_id });
27
+ if (!response.success) {
28
+ return { success: false, error: response.error.message || 'Failed to refresh API source' };
29
+ }
30
+ const result = response.data.data;
31
+ const content = result.spec_changed
32
+ ? `Refreshed "${result.api_source.name}" — spec changed: ${result.memories_created} added, ${result.memories_updated} updated, ${result.memories_deleted} removed.`
33
+ : `Refreshed "${result.api_source.name}" — spec unchanged, no updates needed.`;
34
+ return {
35
+ success: true,
36
+ data: {
37
+ content,
38
+ details: {
39
+ api_source_id: result.api_source.id,
40
+ spec_changed: result.spec_changed,
41
+ memories_created: result.memories_created,
42
+ memories_updated: result.memories_updated,
43
+ memories_deleted: result.memories_deleted,
44
+ },
45
+ },
46
+ };
47
+ }
48
+ catch (error) {
49
+ logger.error('api_refresh failed', { user_id, error: error instanceof Error ? error.message : String(error) });
50
+ return { success: false, error: sanitizeErrorMessage(error) };
51
+ }
52
+ },
53
+ };
54
+ }
55
+ //# sourceMappingURL=api-refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-refresh.js","sourceRoot":"","sources":["../../src/tools/api-refresh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * api_remove tool implementation.
3
+ * Soft-delete an onboarded API source.
4
+ * Part of API Onboarding feature (#1785).
5
+ */
6
+ import { z } from 'zod';
7
+ import type { ApiClient } from '../api-client.js';
8
+ import type { Logger } from '../logger.js';
9
+ import type { PluginConfig } from '../config.js';
10
+ /** Parameters for api_remove tool */
11
+ export declare const ApiRemoveParamsSchema: z.ZodObject<{
12
+ id: z.ZodString;
13
+ }, "strip", z.ZodTypeAny, {
14
+ id: string;
15
+ }, {
16
+ id: string;
17
+ }>;
18
+ export type ApiRemoveParams = z.infer<typeof ApiRemoveParamsSchema>;
19
+ export interface ApiRemoveSuccess {
20
+ success: true;
21
+ data: {
22
+ content: string;
23
+ details: {
24
+ id: string;
25
+ };
26
+ };
27
+ }
28
+ export interface ApiRemoveFailure {
29
+ success: false;
30
+ error: string;
31
+ }
32
+ export type ApiRemoveResult = ApiRemoveSuccess | ApiRemoveFailure;
33
+ export interface ApiRemoveToolOptions {
34
+ client: ApiClient;
35
+ logger: Logger;
36
+ config: PluginConfig;
37
+ user_id: string;
38
+ }
39
+ export interface ApiRemoveTool {
40
+ name: string;
41
+ description: string;
42
+ parameters: typeof ApiRemoveParamsSchema;
43
+ execute: (params: ApiRemoveParams) => Promise<ApiRemoveResult>;
44
+ }
45
+ export declare function createApiRemoveTool(options: ApiRemoveToolOptions): ApiRemoveTool;
46
+ //# sourceMappingURL=api-remove.d.ts.map