@compozy/extension-sdk 0.3.0-beta.3

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 (142) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/base-types.js +3 -0
  3. package/dist/cjs/base-types.js.map +1 -0
  4. package/dist/cjs/capabilities.js +27 -0
  5. package/dist/cjs/capabilities.js.map +1 -0
  6. package/dist/cjs/errors.js +123 -0
  7. package/dist/cjs/errors.js.map +1 -0
  8. package/dist/cjs/extension-context.js +28 -0
  9. package/dist/cjs/extension-context.js.map +1 -0
  10. package/dist/cjs/extension-contract.js +8 -0
  11. package/dist/cjs/extension-contract.js.map +1 -0
  12. package/dist/cjs/extension-describe.js +72 -0
  13. package/dist/cjs/extension-describe.js.map +1 -0
  14. package/dist/cjs/extension-initialize.js +67 -0
  15. package/dist/cjs/extension-initialize.js.map +1 -0
  16. package/dist/cjs/extension-runtime.js +227 -0
  17. package/dist/cjs/extension-runtime.js.map +1 -0
  18. package/dist/cjs/extension-tool-context.js +29 -0
  19. package/dist/cjs/extension-tool-context.js.map +1 -0
  20. package/dist/cjs/extension-tool-registration.js +42 -0
  21. package/dist/cjs/extension-tool-registration.js.map +1 -0
  22. package/dist/cjs/extension.js +329 -0
  23. package/dist/cjs/extension.js.map +1 -0
  24. package/dist/cjs/generated/contracts.js +20 -0
  25. package/dist/cjs/generated/contracts.js.map +1 -0
  26. package/dist/cjs/host-api.js +187 -0
  27. package/dist/cjs/host-api.js.map +1 -0
  28. package/dist/cjs/index.js +31 -0
  29. package/dist/cjs/index.js.map +1 -0
  30. package/dist/cjs/json.js +13 -0
  31. package/dist/cjs/json.js.map +1 -0
  32. package/dist/cjs/package.json +3 -0
  33. package/dist/cjs/schema-digest.js +45 -0
  34. package/dist/cjs/schema-digest.js.map +1 -0
  35. package/dist/cjs/testing/conformance.js +23 -0
  36. package/dist/cjs/testing/conformance.js.map +1 -0
  37. package/dist/cjs/testing/harness.js +158 -0
  38. package/dist/cjs/testing/harness.js.map +1 -0
  39. package/dist/cjs/testing/index.js +12 -0
  40. package/dist/cjs/testing/index.js.map +1 -0
  41. package/dist/cjs/testing/mock-transport.js +74 -0
  42. package/dist/cjs/testing/mock-transport.js.map +1 -0
  43. package/dist/cjs/transport.js +240 -0
  44. package/dist/cjs/transport.js.map +1 -0
  45. package/dist/cjs/types.js +19 -0
  46. package/dist/cjs/types.js.map +1 -0
  47. package/dist/cjs/watch-source.js +129 -0
  48. package/dist/cjs/watch-source.js.map +1 -0
  49. package/dist/esm/base-types.js +2 -0
  50. package/dist/esm/base-types.js.map +1 -0
  51. package/dist/esm/capabilities.js +22 -0
  52. package/dist/esm/capabilities.js.map +1 -0
  53. package/dist/esm/errors.js +106 -0
  54. package/dist/esm/errors.js.map +1 -0
  55. package/dist/esm/extension-context.js +24 -0
  56. package/dist/esm/extension-context.js.map +1 -0
  57. package/dist/esm/extension-contract.js +6 -0
  58. package/dist/esm/extension-contract.js.map +1 -0
  59. package/dist/esm/extension-describe.js +66 -0
  60. package/dist/esm/extension-describe.js.map +1 -0
  61. package/dist/esm/extension-initialize.js +63 -0
  62. package/dist/esm/extension-initialize.js.map +1 -0
  63. package/dist/esm/extension-runtime.js +214 -0
  64. package/dist/esm/extension-runtime.js.map +1 -0
  65. package/dist/esm/extension-tool-context.js +26 -0
  66. package/dist/esm/extension-tool-context.js.map +1 -0
  67. package/dist/esm/extension-tool-registration.js +39 -0
  68. package/dist/esm/extension-tool-registration.js.map +1 -0
  69. package/dist/esm/extension.js +325 -0
  70. package/dist/esm/extension.js.map +1 -0
  71. package/dist/esm/generated/contracts.js +17 -0
  72. package/dist/esm/generated/contracts.js.map +1 -0
  73. package/dist/esm/host-api.js +183 -0
  74. package/dist/esm/host-api.js.map +1 -0
  75. package/dist/esm/index.js +6 -0
  76. package/dist/esm/index.js.map +1 -0
  77. package/dist/esm/json.js +10 -0
  78. package/dist/esm/json.js.map +1 -0
  79. package/dist/esm/package.json +3 -0
  80. package/dist/esm/schema-digest.js +41 -0
  81. package/dist/esm/schema-digest.js.map +1 -0
  82. package/dist/esm/testing/conformance.js +19 -0
  83. package/dist/esm/testing/conformance.js.map +1 -0
  84. package/dist/esm/testing/harness.js +151 -0
  85. package/dist/esm/testing/harness.js.map +1 -0
  86. package/dist/esm/testing/index.js +4 -0
  87. package/dist/esm/testing/index.js.map +1 -0
  88. package/dist/esm/testing/mock-transport.js +69 -0
  89. package/dist/esm/testing/mock-transport.js.map +1 -0
  90. package/dist/esm/transport.js +235 -0
  91. package/dist/esm/transport.js.map +1 -0
  92. package/dist/esm/types.js +3 -0
  93. package/dist/esm/types.js.map +1 -0
  94. package/dist/esm/watch-source.js +122 -0
  95. package/dist/esm/watch-source.js.map +1 -0
  96. package/dist/types/base-types.d.ts +25 -0
  97. package/dist/types/base-types.d.ts.map +1 -0
  98. package/dist/types/capabilities.d.ts +6 -0
  99. package/dist/types/capabilities.d.ts.map +1 -0
  100. package/dist/types/errors.d.ts +66 -0
  101. package/dist/types/errors.d.ts.map +1 -0
  102. package/dist/types/extension-context.d.ts +6 -0
  103. package/dist/types/extension-context.d.ts.map +1 -0
  104. package/dist/types/extension-contract.d.ts +65 -0
  105. package/dist/types/extension-contract.d.ts.map +1 -0
  106. package/dist/types/extension-describe.d.ts +16 -0
  107. package/dist/types/extension-describe.d.ts.map +1 -0
  108. package/dist/types/extension-initialize.d.ts +4 -0
  109. package/dist/types/extension-initialize.d.ts.map +1 -0
  110. package/dist/types/extension-runtime.d.ts +14 -0
  111. package/dist/types/extension-runtime.d.ts.map +1 -0
  112. package/dist/types/extension-tool-context.d.ts +4 -0
  113. package/dist/types/extension-tool-context.d.ts.map +1 -0
  114. package/dist/types/extension-tool-registration.d.ts +3 -0
  115. package/dist/types/extension-tool-registration.d.ts.map +1 -0
  116. package/dist/types/extension.d.ts +55 -0
  117. package/dist/types/extension.d.ts.map +1 -0
  118. package/dist/types/generated/contracts.d.ts +6173 -0
  119. package/dist/types/generated/contracts.d.ts.map +1 -0
  120. package/dist/types/host-api.d.ts +90 -0
  121. package/dist/types/host-api.d.ts.map +1 -0
  122. package/dist/types/index.d.ts +12 -0
  123. package/dist/types/index.d.ts.map +1 -0
  124. package/dist/types/json.d.ts +3 -0
  125. package/dist/types/json.d.ts.map +1 -0
  126. package/dist/types/schema-digest.d.ts +4 -0
  127. package/dist/types/schema-digest.d.ts.map +1 -0
  128. package/dist/types/testing/conformance.d.ts +7 -0
  129. package/dist/types/testing/conformance.d.ts.map +1 -0
  130. package/dist/types/testing/harness.d.ts +51 -0
  131. package/dist/types/testing/harness.d.ts.map +1 -0
  132. package/dist/types/testing/index.d.ts +4 -0
  133. package/dist/types/testing/index.d.ts.map +1 -0
  134. package/dist/types/testing/mock-transport.d.ts +28 -0
  135. package/dist/types/testing/mock-transport.d.ts.map +1 -0
  136. package/dist/types/transport.d.ts +55 -0
  137. package/dist/types/transport.d.ts.map +1 -0
  138. package/dist/types/types.d.ts +114 -0
  139. package/dist/types/types.d.ts.map +1 -0
  140. package/dist/types/watch-source.d.ts +57 -0
  141. package/dist/types/watch-source.d.ts.map +1 -0
  142. package/package.json +49 -0
@@ -0,0 +1,66 @@
1
+ import { SDK_MIN_COMPOZY_VERSION, SDK_NAME, } from "./extension-contract.js";
2
+ import { normalizeHostMethodList, normalizeStringList } from "./extension-runtime.js";
3
+ export function defaultExtensionDescribeProcess() {
4
+ return {
5
+ argv: process.argv,
6
+ stdout: process.stdout,
7
+ setExitCode: code => {
8
+ process.exitCode = code;
9
+ },
10
+ };
11
+ }
12
+ export function runExtensionDescribeMode(describeProcess, describe) {
13
+ if (describeProcess.argv.at(-1)?.trim() !== "__describe") {
14
+ return false;
15
+ }
16
+ describeProcess.stdout.write(`${JSON.stringify(describe())}\n`);
17
+ describeProcess.setExitCode(0);
18
+ return true;
19
+ }
20
+ export function cloneExtensionToolDescriptors(tools) {
21
+ return [...tools].map(tool => ({
22
+ ...tool.descriptor,
23
+ ...(tool.descriptor.input_schema === undefined
24
+ ? {}
25
+ : { input_schema: structuredClone(tool.descriptor.input_schema) }),
26
+ ...(tool.descriptor.output_schema === undefined
27
+ ? {}
28
+ : { output_schema: structuredClone(tool.descriptor.output_schema) }),
29
+ capabilities: [...(tool.descriptor.capabilities ?? [])],
30
+ ...(tool.descriptor.command === undefined
31
+ ? {}
32
+ : { command: structuredClone(tool.descriptor.command) }),
33
+ }));
34
+ }
35
+ export function buildExtensionDescribePayload(input) {
36
+ const command = input.definition.subprocess?.command.trim() ?? "";
37
+ if (!command) {
38
+ throw new Error("subprocess command is required");
39
+ }
40
+ return {
41
+ name: input.definition.name.trim(),
42
+ version: input.definition.version.trim(),
43
+ ...(input.definition.description?.trim()
44
+ ? { description: input.definition.description.trim() }
45
+ : {}),
46
+ provides: normalizeStringList(input.definition.capabilities?.provides),
47
+ permissions: normalizeHostMethodList(input.definition.permissions?.requires),
48
+ requires_env: normalizeStringList(input.definition.requires_env),
49
+ subprocess: {
50
+ command,
51
+ args: [...(input.definition.subprocess?.args ?? [])],
52
+ env: { ...input.definition.subprocess?.env },
53
+ },
54
+ tools: [...input.tools].sort((left, right) => left.handler.localeCompare(right.handler)),
55
+ command_groups: input.commandGroups.map(group => ({ ...group })),
56
+ hook_events: normalizeStringList(input.definition.supported_hook_events),
57
+ watch_source_kinds: input.watchSourceKinds,
58
+ sdk: {
59
+ name: SDK_NAME,
60
+ version: input.sdkVersion,
61
+ protocol_version: "1",
62
+ min_compozy_version: SDK_MIN_COMPOZY_VERSION,
63
+ },
64
+ };
65
+ }
66
+ //# sourceMappingURL=extension-describe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-describe.js","sourceRoot":"","sources":["../../src/extension-describe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { InvalidParamsError } from "./errors.js";
2
+ import { SUPPORTED_PROTOCOL_VERSIONS } from "./extension-contract.js";
3
+ export function parseInitializeRequest(params) {
4
+ if (typeof params !== "object" || params === null) {
5
+ throw new InvalidParamsError("initialize params must be an object");
6
+ }
7
+ const request = params;
8
+ if (!request.protocol_version) {
9
+ throw new InvalidParamsError("protocol_version is required");
10
+ }
11
+ if (typeof request.session_nonce !== "string" || request.session_nonce.trim() === "") {
12
+ throw new InvalidParamsError("session_nonce is required");
13
+ }
14
+ if (!Array.isArray(request.supported_protocol_versions) ||
15
+ request.supported_protocol_versions.length === 0) {
16
+ throw new InvalidParamsError("supported_protocol_versions is required");
17
+ }
18
+ if (!request.extension?.name || !request.extension?.version) {
19
+ throw new InvalidParamsError("extension identity is required");
20
+ }
21
+ if (!request.capabilities || typeof request.capabilities !== "object") {
22
+ throw new InvalidParamsError("capabilities are required");
23
+ }
24
+ if (!Array.isArray(request.capabilities.provides)) {
25
+ throw new InvalidParamsError("capabilities.provides must be an array");
26
+ }
27
+ if (!Array.isArray(request.capabilities.granted_permissions)) {
28
+ throw new InvalidParamsError("capabilities.granted_permissions must be an array");
29
+ }
30
+ if (!Array.isArray(request.capabilities.granted_resource_kinds)) {
31
+ throw new InvalidParamsError("capabilities.granted_resource_kinds must be an array");
32
+ }
33
+ if (!Array.isArray(request.capabilities.granted_resource_scopes)) {
34
+ throw new InvalidParamsError("capabilities.granted_resource_scopes must be an array");
35
+ }
36
+ if (!request.runtime) {
37
+ throw new InvalidParamsError("runtime is required");
38
+ }
39
+ for (const field of [
40
+ "health_check_interval_ms",
41
+ "health_check_timeout_ms",
42
+ "shutdown_timeout_ms",
43
+ "default_hook_timeout_ms",
44
+ ]) {
45
+ if (!Number.isFinite(request.runtime[field]) || request.runtime[field] <= 0) {
46
+ throw new InvalidParamsError(`${field} must be greater than zero`);
47
+ }
48
+ }
49
+ return request;
50
+ }
51
+ export function validateProtocolVersion(request) {
52
+ if (!SUPPORTED_PROTOCOL_VERSIONS.includes(request.protocol_version)) {
53
+ throw new InvalidParamsError("unsupported protocol version", {
54
+ reason: "unsupported_protocol_version",
55
+ protocol_version: request.protocol_version,
56
+ supported_protocol_versions: SUPPORTED_PROTOCOL_VERSIONS,
57
+ });
58
+ }
59
+ if (!request.supported_protocol_versions.includes("1")) {
60
+ throw new InvalidParamsError("supported protocol versions must include 1");
61
+ }
62
+ }
63
+ //# sourceMappingURL=extension-initialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-initialize.js","sourceRoot":"","sources":["../../src/extension-initialize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,214 @@
1
+ import { CapabilityDeniedError, InvalidParamsError, ToolExecutionError } from "./errors.js";
2
+ import { cloneJSON } from "./json.js";
3
+ import { PROVIDE_TOOLS_METHOD, TOOLS_CALL_METHOD } from "./capabilities.js";
4
+ export function normalizeStringList(values) {
5
+ return Array.from(new Set((values ?? []).map(value => value.trim()).filter(Boolean))).sort();
6
+ }
7
+ export function normalizeHostMethodList(values) {
8
+ return normalizeStringList(values);
9
+ }
10
+ export function implementedExtensionMethods(userMethods, hasTools, watchMethods) {
11
+ const methods = new Set(["health_check", "shutdown", ...userMethods, ...watchMethods]);
12
+ if (hasTools) {
13
+ methods.add(PROVIDE_TOOLS_METHOD);
14
+ methods.add(TOOLS_CALL_METHOD);
15
+ }
16
+ return [...methods].sort();
17
+ }
18
+ export function transportMethods(userMethods, hasTools) {
19
+ const methods = new Set(["initialize", "health_check", "shutdown", ...userMethods]);
20
+ if (hasTools) {
21
+ methods.add(PROVIDE_TOOLS_METHOD);
22
+ methods.add(TOOLS_CALL_METHOD);
23
+ }
24
+ return [...methods];
25
+ }
26
+ export function ensureSubset(label, requested, granted) {
27
+ const grantedSet = new Set(granted.map(value => value.trim()));
28
+ const missing = requested.filter(value => !grantedSet.has(value));
29
+ if (missing.length > 0) {
30
+ throw new CapabilityDeniedError({
31
+ field: label,
32
+ required: missing,
33
+ granted: [...grantedSet],
34
+ });
35
+ }
36
+ }
37
+ export function parseShutdownRequest(params) {
38
+ if (typeof params !== "object" || params === null) {
39
+ throw new InvalidParamsError("shutdown params must be an object");
40
+ }
41
+ const request = params;
42
+ if (!Number.isFinite(request.deadline_ms) || request.deadline_ms <= 0) {
43
+ throw new InvalidParamsError("deadline_ms must be greater than zero");
44
+ }
45
+ return {
46
+ reason: request.reason ?? "shutdown",
47
+ deadline_ms: request.deadline_ms,
48
+ };
49
+ }
50
+ export function parseToolCallRequest(params) {
51
+ if (typeof params !== "object" || params === null) {
52
+ throw new InvalidParamsError("tools/call params must be an object");
53
+ }
54
+ const request = params;
55
+ if (typeof request.tool_id !== "string" || request.tool_id.trim() === "") {
56
+ throw new InvalidParamsError("tool_id is required");
57
+ }
58
+ if (typeof request.handler !== "string" || request.handler.trim() === "") {
59
+ throw new InvalidParamsError("handler is required");
60
+ }
61
+ return {
62
+ tool_id: request.tool_id.trim(),
63
+ handler: request.handler.trim(),
64
+ ...(request.session_id ? { session_id: request.session_id } : {}),
65
+ ...(request.invocation_id !== undefined ? { invocation_id: request.invocation_id } : {}),
66
+ ...(request.trusted_workspace !== undefined
67
+ ? { trusted_workspace: request.trusted_workspace }
68
+ : {}),
69
+ input: (request.input ?? {}),
70
+ };
71
+ }
72
+ export function normalizeToolResult(value) {
73
+ if (value === undefined) {
74
+ return emptyToolResult();
75
+ }
76
+ if (isToolResult(value)) {
77
+ return { ...emptyToolResult(), ...value };
78
+ }
79
+ if (typeof value === "string") {
80
+ return {
81
+ ...emptyToolResult(),
82
+ content: [{ type: "text", text: value }],
83
+ preview: value,
84
+ };
85
+ }
86
+ return {
87
+ ...emptyToolResult(),
88
+ structured: value,
89
+ };
90
+ }
91
+ function emptyToolResult() {
92
+ return {
93
+ truncated: false,
94
+ bytes: 0,
95
+ duration_ms: 0,
96
+ };
97
+ }
98
+ function isToolResult(value) {
99
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
100
+ return false;
101
+ }
102
+ return [
103
+ "content",
104
+ "structured",
105
+ "preview",
106
+ "artifacts",
107
+ "metadata",
108
+ "redactions",
109
+ "truncated",
110
+ "bytes",
111
+ "duration_ms",
112
+ ].some(key => Object.prototype.hasOwnProperty.call(value, key));
113
+ }
114
+ export function toolExecutionError(error, call, sensitiveInputFields) {
115
+ const errorMessage = redactSensitiveText(error instanceof Error ? error.message : String(error), call.input, sensitiveInputFields);
116
+ return new ToolExecutionError({
117
+ tool_id: call.tool_id,
118
+ handler: call.handler,
119
+ error: errorMessage,
120
+ ...(sensitiveInputFields.length > 0
121
+ ? {
122
+ input: redactSensitiveInput(call.input, sensitiveInputFields),
123
+ sensitive_input_fields: sensitiveInputFields,
124
+ }
125
+ : {}),
126
+ });
127
+ }
128
+ function redactSensitiveInput(value, sensitiveInputFields) {
129
+ const cloned = cloneJSON(value);
130
+ for (const field of sensitiveInputFields) {
131
+ redactPath(cloned, field
132
+ .split(".")
133
+ .map(part => part.trim())
134
+ .filter(Boolean));
135
+ }
136
+ return cloned;
137
+ }
138
+ function redactPath(value, path) {
139
+ if (path.length === 0 || typeof value !== "object" || value === null || Array.isArray(value)) {
140
+ return;
141
+ }
142
+ const [head, ...rest] = path;
143
+ if (head === undefined) {
144
+ return;
145
+ }
146
+ if (!(head in value)) {
147
+ return;
148
+ }
149
+ if (rest.length === 0) {
150
+ value[head] = "[REDACTED]";
151
+ return;
152
+ }
153
+ redactPath(value[head], rest);
154
+ }
155
+ function redactSensitiveText(text, input, sensitiveInputFields) {
156
+ let redacted = text;
157
+ for (const field of sensitiveInputFields) {
158
+ const value = readPath(input, field
159
+ .split(".")
160
+ .map(part => part.trim())
161
+ .filter(Boolean));
162
+ if (typeof value === "string" && value !== "") {
163
+ redacted = redacted.replaceAll(value, "[REDACTED]");
164
+ }
165
+ }
166
+ return redacted;
167
+ }
168
+ function readPath(value, path) {
169
+ if (path.length === 0) {
170
+ return value;
171
+ }
172
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
173
+ return undefined;
174
+ }
175
+ const [head, ...rest] = path;
176
+ if (head === undefined) {
177
+ return undefined;
178
+ }
179
+ if (!(head in value)) {
180
+ return undefined;
181
+ }
182
+ return readPath(value[head], rest);
183
+ }
184
+ export function normalizeSchema(value, field) {
185
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
186
+ throw new Error(`${field} must be a JSON object`);
187
+ }
188
+ return cloneJSON(value);
189
+ }
190
+ export function canonicalExtensionToolID(extensionName, handler) {
191
+ return `ext__${canonicalIDSegment(extensionName)}__${canonicalIDSegment(handler)}`;
192
+ }
193
+ function canonicalIDSegment(raw) {
194
+ const normalized = raw.trim().toLowerCase();
195
+ let output = "";
196
+ let lastUnderscore = false;
197
+ for (const char of normalized) {
198
+ if ((char >= "a" && char <= "z") || (char >= "0" && char <= "9")) {
199
+ output += char;
200
+ lastUnderscore = false;
201
+ continue;
202
+ }
203
+ if (output.length > 0 && !lastUnderscore) {
204
+ output += "_";
205
+ lastUnderscore = true;
206
+ }
207
+ }
208
+ const segment = output.replaceAll(/^_+|_+$/g, "");
209
+ if (!/^[a-z][a-z0-9_]*$/.test(segment) || segment.includes("__")) {
210
+ throw new Error(`invalid tool id segment: ${raw}`);
211
+ }
212
+ return segment;
213
+ }
214
+ //# sourceMappingURL=extension-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-runtime.js","sourceRoot":"","sources":["../../src/extension-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { InvalidParamsError } from "./errors.js";
2
+ export function makeExtensionToolContext(call, context) {
3
+ const invocationId = call.invocation_id;
4
+ return {
5
+ input: call.input,
6
+ context,
7
+ host: context.host,
8
+ session: context.session,
9
+ toolID: call.tool_id,
10
+ handler: call.handler,
11
+ ...(call.trusted_workspace !== undefined ? { trustedWorkspace: call.trusted_workspace } : {}),
12
+ ...(invocationId !== undefined ? { invocationId } : {}),
13
+ askClarification: async (question) => {
14
+ if (invocationId === undefined || invocationId.trim() === "") {
15
+ throw new InvalidParamsError("tool invocation context is required");
16
+ }
17
+ const params = {
18
+ invocation_id: invocationId,
19
+ question: question.question,
20
+ ...(question.choices === undefined ? {} : { choices: [...question.choices] }),
21
+ };
22
+ return await context.host.request("clarify/ask", params);
23
+ },
24
+ };
25
+ }
26
+ //# sourceMappingURL=extension-tool-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-tool-context.js","sourceRoot":"","sources":["../../src/extension-tool-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAIjD,MAAM,UAAU,wBAAwB,CACtC,IAA8B,EAC9B,OAAwC;IAExC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;IACxC,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAe;QAC3B,OAAO;QACP,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,IAAI,CAAC,OAAO;QACpB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,gBAAgB,EAAE,KAAK,EAAC,QAAQ,EAAC,EAAE;YACjC,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC7D,MAAM,IAAI,kBAAkB,CAAC,qCAAqC,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,MAAM,GAAqB;gBAC/B,aAAa,EAAE,YAAY;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;aAC9E,CAAC;YACF,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { canonicalExtensionToolID, normalizeSchema, normalizeStringList, } from "./extension-runtime.js";
2
+ import { schemaDigest } from "./schema-digest.js";
3
+ export function buildRegisteredTool(extensionName, handler, options, toolHandler) {
4
+ const inputSchema = normalizeSchema(options.inputSchema, "inputSchema");
5
+ const outputSchema = options.outputSchema === undefined
6
+ ? undefined
7
+ : normalizeSchema(options.outputSchema, "outputSchema");
8
+ const descriptor = {
9
+ id: options.id ?? canonicalExtensionToolID(extensionName, handler),
10
+ handler,
11
+ ...(options.description?.trim() ? { description: options.description.trim() } : {}),
12
+ ...(options.friendlyVerb?.trim() ? { friendly_verb: options.friendlyVerb.trim() } : {}),
13
+ ...(options.preview?.trim() ? { preview: options.preview.trim() } : {}),
14
+ input_schema: inputSchema,
15
+ ...(outputSchema ? { output_schema: outputSchema } : {}),
16
+ input_schema_digest: schemaDigest(inputSchema),
17
+ ...(outputSchema ? { output_schema_digest: schemaDigest(outputSchema) } : {}),
18
+ read_only: Boolean(options.readOnly),
19
+ risk: options.risk ?? (options.readOnly ? "read" : "mutating"),
20
+ requires_interaction: Boolean(options.requiresInteraction),
21
+ capabilities: normalizeStringList(options.capabilities),
22
+ ...(options.command
23
+ ? {
24
+ command: {
25
+ verb: options.command.verb.trim(),
26
+ summary: options.command.summary.trim(),
27
+ ...(options.command.example?.trim() ? { example: options.command.example.trim() } : {}),
28
+ flags: { ...options.command.flags },
29
+ },
30
+ }
31
+ : {}),
32
+ };
33
+ return {
34
+ descriptor,
35
+ handler: toolHandler,
36
+ sensitiveInputFields: normalizeStringList(options.sensitiveInputFields),
37
+ };
38
+ }
39
+ //# sourceMappingURL=extension-tool-registration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-tool-registration.js","sourceRoot":"","sources":["../../src/extension-tool-registration.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,UAAU,mBAAmB,CACjC,aAAqB,EACrB,OAAe,EACf,OAA6B,EAC7B,WAAyC;IAEzC,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACxE,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY,KAAK,SAAS;QAChC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAmC;QACjD,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,wBAAwB,CAAC,aAAa,EAAE,OAAO,CAAC;QAClE,OAAO;QACP,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,YAAY,EAAE,WAAW;QACzB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,mBAAmB,EAAE,YAAY,CAAC,WAAW,CAAC;QAC9C,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;QAC9D,oBAAoB,EAAE,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAC1D,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC;QACvD,GAAG,CAAC,OAAO,CAAC,OAAO;YACjB,CAAC,CAAC;gBACE,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;oBACjC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;oBACvC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvF,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;iBACpC;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,OAAO;QACL,UAAU;QACV,OAAO,EAAE,WAAmC;QAC5C,oBAAoB,EAAE,mBAAmB,CAAC,OAAO,CAAC,oBAAoB,CAAC;KACxE,CAAC;AACJ,CAAC"}