@superdoc-dev/sdk 1.6.0-next.4 → 1.6.0-next.41
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/dist/generated/client.d.ts +302 -12
- package/dist/generated/client.d.ts.map +1 -1
- package/dist/generated/contract.cjs +2032 -494
- package/dist/generated/contract.d.ts.map +1 -1
- package/dist/generated/contract.js +2032 -494
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/tools.cjs +53 -5
- package/dist/tools.d.ts +12 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +52 -5
- package/package.json +6 -6
- package/tools/__pycache__/__init__.cpython-312.pyc +0 -0
- package/tools/__pycache__/intent_dispatch_generated.cpython-312.pyc +0 -0
- package/tools/catalog.json +432 -74
- package/tools/prompt-templates/system-prompt-core.md +276 -0
- package/tools/prompt-templates/system-prompt-mcp-header.md +50 -0
- package/tools/prompt-templates/system-prompt-sdk-header.md +5 -0
- package/tools/system-prompt-mcp.md +325 -0
- package/tools/system-prompt.md +101 -15
- package/tools/tools-policy.json +1 -1
- package/tools/tools.anthropic.json +432 -74
- package/tools/tools.generic.json +432 -74
- package/tools/tools.openai.json +432 -74
- package/tools/tools.vercel.json +432 -74
package/dist/index.cjs
CHANGED
|
@@ -159,6 +159,7 @@ exports.installSkill = skills.installSkill;
|
|
|
159
159
|
exports.listSkills = skills.listSkills;
|
|
160
160
|
exports.chooseTools = tools.chooseTools;
|
|
161
161
|
exports.dispatchSuperDocTool = tools.dispatchSuperDocTool;
|
|
162
|
+
exports.getMcpPrompt = tools.getMcpPrompt;
|
|
162
163
|
exports.getSystemPrompt = tools.getSystemPrompt;
|
|
163
164
|
exports.getToolCatalog = tools.getToolCatalog;
|
|
164
165
|
exports.listTools = tools.listTools;
|
package/dist/index.d.ts
CHANGED
|
@@ -77,7 +77,7 @@ export declare class SuperDocClient {
|
|
|
77
77
|
}
|
|
78
78
|
export declare function createSuperDocClient(options?: SuperDocClientOptions): SuperDocClient;
|
|
79
79
|
export { getSkill, installSkill, listSkills } from './skills.js';
|
|
80
|
-
export { chooseTools, dispatchSuperDocTool, getSystemPrompt, getToolCatalog, listTools } from './tools.js';
|
|
80
|
+
export { chooseTools, dispatchSuperDocTool, getMcpPrompt, getSystemPrompt, getToolCatalog, listTools, } from './tools.js';
|
|
81
81
|
export { dispatchIntentTool } from './generated/intent-dispatch.generated.js';
|
|
82
82
|
export { SuperDocCliError } from './runtime/errors.js';
|
|
83
83
|
export type { InvokeOptions, OperationSpec, OperationParamSpec, RuntimeInvoker, SuperDocClientOptions, } from './runtime/process.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,aAAa,IAAI,sBAAsB,EAC5C,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAO9B;;;;;GAKG;AACH,cAAM,YAAa,YAAW,cAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM;IAKjD,MAAM,CAAC,KAAK,GAAG,OAAO,EAC1B,SAAS,EAAE,aAAa,EACxB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,KAAK,CAAC;IAUjB,UAAU,IAAI,IAAI;CAGnB;AAMD;;;;GAIG;AACH,cAAM,oBAAoB;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IAExC,gBAAgB;gBACJ,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc;IAQ5G,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,oEAAoE;IACpE,IAAI,UAAU,IAAI,aAAa,CAE9B;IAEK,IAAI,CAAC,MAAM,GAAE,kBAAuB,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAQ1F,KAAK,CAAC,MAAM,GAAE,mBAAwB,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAWnG,gBAAgB;IAChB,UAAU,IAAI,IAAI;CAGnB;AAED,KAAK,wBAAwB,GAAG,oBAAoB,GAAG,WAAW,CAAC;AAOnE,eAAO,MAAM,gBAAgB,EAAE,KAC7B,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,EACzB,MAAM,EAAE,cAAc,KACnB,wBAKwB,CAAC;AAE9B,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAMxD,MAAM,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAEnD,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;gBAEnD,OAAO,GAAE,qBAA0B;IAKzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;;;OAMG;IACG,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkB/E,QAAQ,CAAC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzF,eAAe,CAAC,MAAM,EAAE,wBAAwB,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5F,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,gBAAgB;IAChB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGtC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAExF;AAED,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,aAAa,IAAI,sBAAsB,EAC5C,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAO9B;;;;;GAKG;AACH,cAAM,YAAa,YAAW,cAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM;IAKjD,MAAM,CAAC,KAAK,GAAG,OAAO,EAC1B,SAAS,EAAE,aAAa,EACxB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,KAAK,CAAC;IAUjB,UAAU,IAAI,IAAI;CAGnB;AAMD;;;;GAIG;AACH,cAAM,oBAAoB;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IAExC,gBAAgB;gBACJ,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc;IAQ5G,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,oEAAoE;IACpE,IAAI,UAAU,IAAI,aAAa,CAE9B;IAEK,IAAI,CAAC,MAAM,GAAE,kBAAuB,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAQ1F,KAAK,CAAC,MAAM,GAAE,mBAAwB,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAWnG,gBAAgB;IAChB,UAAU,IAAI,IAAI;CAGnB;AAED,KAAK,wBAAwB,GAAG,oBAAoB,GAAG,WAAW,CAAC;AAOnE,eAAO,MAAM,gBAAgB,EAAE,KAC7B,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,EACzB,MAAM,EAAE,cAAc,KACnB,wBAKwB,CAAC;AAE9B,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAMxD,MAAM,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAEnD,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;gBAEnD,OAAO,GAAE,qBAA0B;IAKzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;;;OAMG;IACG,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkB/E,QAAQ,CAAC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzF,eAAe,CAAC,MAAM,EAAE,wBAAwB,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5F,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,gBAAgB;IAChB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGtC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAExF;AAED,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EACV,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -147,6 +147,6 @@ export function createSuperDocClient(options = {}) {
|
|
|
147
147
|
return new SuperDocClient(options);
|
|
148
148
|
}
|
|
149
149
|
export { getSkill, installSkill, listSkills } from './skills.js';
|
|
150
|
-
export { chooseTools, dispatchSuperDocTool, getSystemPrompt, getToolCatalog, listTools } from './tools.js';
|
|
150
|
+
export { chooseTools, dispatchSuperDocTool, getMcpPrompt, getSystemPrompt, getToolCatalog, listTools, } from './tools.js';
|
|
151
151
|
export { dispatchIntentTool } from './generated/intent-dispatch.generated.js';
|
|
152
152
|
export { SuperDocCliError } from './runtime/errors.js';
|
package/dist/tools.cjs
CHANGED
|
@@ -15,9 +15,28 @@ const providerFileByName = {
|
|
|
15
15
|
vercel: 'tools.vercel.json',
|
|
16
16
|
generic: 'tools.generic.json',
|
|
17
17
|
};
|
|
18
|
+
const STRIP_EMPTY_OPTIONAL_ARGS = new Set(['parentId', 'parentCommentId', 'id', 'status']);
|
|
18
19
|
function isRecord(value) {
|
|
19
20
|
return typeof value === 'object' && value != null && !Array.isArray(value);
|
|
20
21
|
}
|
|
22
|
+
function isObviouslyCorruptedToolArgKey(key) {
|
|
23
|
+
const trimmed = key.trim();
|
|
24
|
+
return trimmed.length === 0 || !/[\p{L}\p{N}]/u.test(trimmed);
|
|
25
|
+
}
|
|
26
|
+
function stripCorruptedToolArgKeys(value) {
|
|
27
|
+
if (Array.isArray(value)) {
|
|
28
|
+
return value.map((item) => stripCorruptedToolArgKeys(item));
|
|
29
|
+
}
|
|
30
|
+
if (!isRecord(value))
|
|
31
|
+
return value;
|
|
32
|
+
const clean = {};
|
|
33
|
+
for (const [key, entryValue] of Object.entries(value)) {
|
|
34
|
+
if (isObviouslyCorruptedToolArgKey(key))
|
|
35
|
+
continue;
|
|
36
|
+
clean[key] = stripCorruptedToolArgKeys(entryValue);
|
|
37
|
+
}
|
|
38
|
+
return clean;
|
|
39
|
+
}
|
|
21
40
|
async function readJson(fileName) {
|
|
22
41
|
const filePath = path.join(toolsDir, fileName);
|
|
23
42
|
let raw = '';
|
|
@@ -202,6 +221,13 @@ async function dispatchSuperDocTool(documentHandle, toolName, args = {}, invokeO
|
|
|
202
221
|
details: { toolName },
|
|
203
222
|
});
|
|
204
223
|
}
|
|
224
|
+
const sanitizedArgs = stripCorruptedToolArgKeys(args);
|
|
225
|
+
if (!isRecord(sanitizedArgs)) {
|
|
226
|
+
throw new errors.SuperDocCliError(`Tool arguments for ${toolName} must be an object.`, {
|
|
227
|
+
code: 'INVALID_ARGUMENT',
|
|
228
|
+
details: { toolName },
|
|
229
|
+
});
|
|
230
|
+
}
|
|
205
231
|
// Validate against the tool schema before dispatch.
|
|
206
232
|
const catalog = await getCachedCatalog();
|
|
207
233
|
const tool = catalog.tools.find((t) => t.toolName === toolName);
|
|
@@ -211,13 +237,12 @@ async function dispatchSuperDocTool(documentHandle, toolName, args = {}, invokeO
|
|
|
211
237
|
details: { toolName },
|
|
212
238
|
});
|
|
213
239
|
}
|
|
214
|
-
validateToolArgs(toolName,
|
|
240
|
+
validateToolArgs(toolName, sanitizedArgs, tool);
|
|
215
241
|
// Strip empty strings for known optional ID/enum params that LLMs fill with ""
|
|
216
242
|
// instead of omitting. Only target params where "" is never a valid value.
|
|
217
|
-
const STRIP_EMPTY = new Set(['parentId', 'parentCommentId', 'id', 'status']);
|
|
218
243
|
const cleanArgs = {};
|
|
219
|
-
for (const [key, value] of Object.entries(
|
|
220
|
-
if (value === '' &&
|
|
244
|
+
for (const [key, value] of Object.entries(sanitizedArgs)) {
|
|
245
|
+
if (value === '' && STRIP_EMPTY_OPTIONAL_ARGS.has(key))
|
|
221
246
|
continue;
|
|
222
247
|
cleanArgs[key] = value;
|
|
223
248
|
}
|
|
@@ -227,7 +252,11 @@ async function dispatchSuperDocTool(documentHandle, toolName, args = {}, invokeO
|
|
|
227
252
|
});
|
|
228
253
|
}
|
|
229
254
|
/**
|
|
230
|
-
* Read the bundled system prompt for intent tools.
|
|
255
|
+
* Read the bundled SDK system prompt for intent tools.
|
|
256
|
+
*
|
|
257
|
+
* This prompt includes a persona preamble ("You are a document editing assistant…")
|
|
258
|
+
* suitable for embedded LLM usage (OpenAI, Anthropic, Vercel APIs).
|
|
259
|
+
* For MCP server instructions, use {@link getMcpPrompt} instead.
|
|
231
260
|
*/
|
|
232
261
|
async function getSystemPrompt() {
|
|
233
262
|
const promptPath = path.join(toolsDir, 'system-prompt.md');
|
|
@@ -241,9 +270,28 @@ async function getSystemPrompt() {
|
|
|
241
270
|
});
|
|
242
271
|
}
|
|
243
272
|
}
|
|
273
|
+
/**
|
|
274
|
+
* Read the bundled MCP system prompt for intent tools.
|
|
275
|
+
*
|
|
276
|
+
* This prompt omits the persona preamble and includes session lifecycle
|
|
277
|
+
* instructions (open/save/close) suitable for MCP server `instructions`.
|
|
278
|
+
*/
|
|
279
|
+
async function getMcpPrompt() {
|
|
280
|
+
const promptPath = path.join(toolsDir, 'system-prompt-mcp.md');
|
|
281
|
+
try {
|
|
282
|
+
return await promises.readFile(promptPath, 'utf8');
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
throw new errors.SuperDocCliError('MCP system prompt not found.', {
|
|
286
|
+
code: 'TOOLS_ASSET_NOT_FOUND',
|
|
287
|
+
details: { filePath: promptPath },
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
244
291
|
|
|
245
292
|
exports.chooseTools = chooseTools;
|
|
246
293
|
exports.dispatchSuperDocTool = dispatchSuperDocTool;
|
|
294
|
+
exports.getMcpPrompt = getMcpPrompt;
|
|
247
295
|
exports.getSystemPrompt = getSystemPrompt;
|
|
248
296
|
exports.getToolCatalog = getToolCatalog;
|
|
249
297
|
exports.listTools = listTools;
|
package/dist/tools.d.ts
CHANGED
|
@@ -50,8 +50,19 @@ export declare function chooseTools(input: ToolChooserInput): Promise<{
|
|
|
50
50
|
*/
|
|
51
51
|
export declare function dispatchSuperDocTool(documentHandle: BoundDocApi, toolName: string, args?: Record<string, unknown>, invokeOptions?: InvokeOptions): Promise<unknown>;
|
|
52
52
|
/**
|
|
53
|
-
* Read the bundled system prompt for intent tools.
|
|
53
|
+
* Read the bundled SDK system prompt for intent tools.
|
|
54
|
+
*
|
|
55
|
+
* This prompt includes a persona preamble ("You are a document editing assistant…")
|
|
56
|
+
* suitable for embedded LLM usage (OpenAI, Anthropic, Vercel APIs).
|
|
57
|
+
* For MCP server instructions, use {@link getMcpPrompt} instead.
|
|
54
58
|
*/
|
|
55
59
|
export declare function getSystemPrompt(): Promise<string>;
|
|
60
|
+
/**
|
|
61
|
+
* Read the bundled MCP system prompt for intent tools.
|
|
62
|
+
*
|
|
63
|
+
* This prompt omits the persona preamble and includes session lifecycle
|
|
64
|
+
* instructions (open/save/close) suitable for MCP server `instructions`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function getMcpPrompt(): Promise<string>;
|
|
56
67
|
export {};
|
|
57
68
|
//# sourceMappingURL=tools.d.ts.map
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAWzE,MAAM,MAAM,WAAW,GAAG;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CAC5B,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAWzE,MAAM,MAAM,WAAW,GAAG;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CAC5B,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAmEF,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAE3D;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAU1E;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAClE,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,IAAI,EAAE;QACJ,QAAQ,EAAE,YAAY,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC,CAWD;AAiID;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,WAAW,EAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,OAAO,CAAC,CAuClB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAUvD;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAUpD"}
|
package/dist/tools.js
CHANGED
|
@@ -11,9 +11,28 @@ const providerFileByName = {
|
|
|
11
11
|
vercel: 'tools.vercel.json',
|
|
12
12
|
generic: 'tools.generic.json',
|
|
13
13
|
};
|
|
14
|
+
const STRIP_EMPTY_OPTIONAL_ARGS = new Set(['parentId', 'parentCommentId', 'id', 'status']);
|
|
14
15
|
function isRecord(value) {
|
|
15
16
|
return typeof value === 'object' && value != null && !Array.isArray(value);
|
|
16
17
|
}
|
|
18
|
+
function isObviouslyCorruptedToolArgKey(key) {
|
|
19
|
+
const trimmed = key.trim();
|
|
20
|
+
return trimmed.length === 0 || !/[\p{L}\p{N}]/u.test(trimmed);
|
|
21
|
+
}
|
|
22
|
+
function stripCorruptedToolArgKeys(value) {
|
|
23
|
+
if (Array.isArray(value)) {
|
|
24
|
+
return value.map((item) => stripCorruptedToolArgKeys(item));
|
|
25
|
+
}
|
|
26
|
+
if (!isRecord(value))
|
|
27
|
+
return value;
|
|
28
|
+
const clean = {};
|
|
29
|
+
for (const [key, entryValue] of Object.entries(value)) {
|
|
30
|
+
if (isObviouslyCorruptedToolArgKey(key))
|
|
31
|
+
continue;
|
|
32
|
+
clean[key] = stripCorruptedToolArgKeys(entryValue);
|
|
33
|
+
}
|
|
34
|
+
return clean;
|
|
35
|
+
}
|
|
17
36
|
async function readJson(fileName) {
|
|
18
37
|
const filePath = path.join(toolsDir, fileName);
|
|
19
38
|
let raw = '';
|
|
@@ -198,6 +217,13 @@ export async function dispatchSuperDocTool(documentHandle, toolName, args = {},
|
|
|
198
217
|
details: { toolName },
|
|
199
218
|
});
|
|
200
219
|
}
|
|
220
|
+
const sanitizedArgs = stripCorruptedToolArgKeys(args);
|
|
221
|
+
if (!isRecord(sanitizedArgs)) {
|
|
222
|
+
throw new SuperDocCliError(`Tool arguments for ${toolName} must be an object.`, {
|
|
223
|
+
code: 'INVALID_ARGUMENT',
|
|
224
|
+
details: { toolName },
|
|
225
|
+
});
|
|
226
|
+
}
|
|
201
227
|
// Validate against the tool schema before dispatch.
|
|
202
228
|
const catalog = await getCachedCatalog();
|
|
203
229
|
const tool = catalog.tools.find((t) => t.toolName === toolName);
|
|
@@ -207,13 +233,12 @@ export async function dispatchSuperDocTool(documentHandle, toolName, args = {},
|
|
|
207
233
|
details: { toolName },
|
|
208
234
|
});
|
|
209
235
|
}
|
|
210
|
-
validateToolArgs(toolName,
|
|
236
|
+
validateToolArgs(toolName, sanitizedArgs, tool);
|
|
211
237
|
// Strip empty strings for known optional ID/enum params that LLMs fill with ""
|
|
212
238
|
// instead of omitting. Only target params where "" is never a valid value.
|
|
213
|
-
const STRIP_EMPTY = new Set(['parentId', 'parentCommentId', 'id', 'status']);
|
|
214
239
|
const cleanArgs = {};
|
|
215
|
-
for (const [key, value] of Object.entries(
|
|
216
|
-
if (value === '' &&
|
|
240
|
+
for (const [key, value] of Object.entries(sanitizedArgs)) {
|
|
241
|
+
if (value === '' && STRIP_EMPTY_OPTIONAL_ARGS.has(key))
|
|
217
242
|
continue;
|
|
218
243
|
cleanArgs[key] = value;
|
|
219
244
|
}
|
|
@@ -223,7 +248,11 @@ export async function dispatchSuperDocTool(documentHandle, toolName, args = {},
|
|
|
223
248
|
});
|
|
224
249
|
}
|
|
225
250
|
/**
|
|
226
|
-
* Read the bundled system prompt for intent tools.
|
|
251
|
+
* Read the bundled SDK system prompt for intent tools.
|
|
252
|
+
*
|
|
253
|
+
* This prompt includes a persona preamble ("You are a document editing assistant…")
|
|
254
|
+
* suitable for embedded LLM usage (OpenAI, Anthropic, Vercel APIs).
|
|
255
|
+
* For MCP server instructions, use {@link getMcpPrompt} instead.
|
|
227
256
|
*/
|
|
228
257
|
export async function getSystemPrompt() {
|
|
229
258
|
const promptPath = path.join(toolsDir, 'system-prompt.md');
|
|
@@ -237,3 +266,21 @@ export async function getSystemPrompt() {
|
|
|
237
266
|
});
|
|
238
267
|
}
|
|
239
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Read the bundled MCP system prompt for intent tools.
|
|
271
|
+
*
|
|
272
|
+
* This prompt omits the persona preamble and includes session lifecycle
|
|
273
|
+
* instructions (open/save/close) suitable for MCP server `instructions`.
|
|
274
|
+
*/
|
|
275
|
+
export async function getMcpPrompt() {
|
|
276
|
+
const promptPath = path.join(toolsDir, 'system-prompt-mcp.md');
|
|
277
|
+
try {
|
|
278
|
+
return await readFile(promptPath, 'utf8');
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
throw new SuperDocCliError('MCP system prompt not found.', {
|
|
282
|
+
code: 'TOOLS_ASSET_NOT_FOUND',
|
|
283
|
+
details: { filePath: promptPath },
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@superdoc-dev/sdk",
|
|
3
|
-
"version": "1.6.0-next.
|
|
3
|
+
"version": "1.6.0-next.41",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
"typescript": "^5.9.2"
|
|
27
27
|
},
|
|
28
28
|
"optionalDependencies": {
|
|
29
|
-
"@superdoc-dev/sdk-darwin-
|
|
30
|
-
"@superdoc-dev/sdk-
|
|
31
|
-
"@superdoc-dev/sdk-linux-
|
|
32
|
-
"@superdoc-dev/sdk-
|
|
33
|
-
"@superdoc-dev/sdk-
|
|
29
|
+
"@superdoc-dev/sdk-darwin-x64": "1.6.0-next.41",
|
|
30
|
+
"@superdoc-dev/sdk-linux-x64": "1.6.0-next.41",
|
|
31
|
+
"@superdoc-dev/sdk-linux-arm64": "1.6.0-next.41",
|
|
32
|
+
"@superdoc-dev/sdk-windows-x64": "1.6.0-next.41",
|
|
33
|
+
"@superdoc-dev/sdk-darwin-arm64": "1.6.0-next.41"
|
|
34
34
|
},
|
|
35
35
|
"publishConfig": {
|
|
36
36
|
"access": "public"
|
|
Binary file
|
|
Binary file
|