deepclause-sdk 0.0.58 → 0.0.60

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 (90) hide show
  1. package/README.md +71 -19
  2. package/dist/cli/compile.d.ts +9 -0
  3. package/dist/cli/compile.d.ts.map +1 -1
  4. package/dist/cli/compile.js +106 -138
  5. package/dist/cli/compile.js.map +1 -1
  6. package/dist/cli/config.d.ts +73 -23
  7. package/dist/cli/config.d.ts.map +1 -1
  8. package/dist/cli/config.js +151 -58
  9. package/dist/cli/config.js.map +1 -1
  10. package/dist/cli/index.js +64 -14
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/cli/interactive.d.ts +2 -0
  13. package/dist/cli/interactive.d.ts.map +1 -0
  14. package/dist/cli/interactive.js +20 -0
  15. package/dist/cli/interactive.js.map +1 -0
  16. package/dist/cli/prompt.d.ts +1 -19
  17. package/dist/cli/prompt.d.ts.map +1 -1
  18. package/dist/cli/prompt.js +1 -869
  19. package/dist/cli/prompt.js.map +1 -1
  20. package/dist/cli/run.d.ts +6 -1
  21. package/dist/cli/run.d.ts.map +1 -1
  22. package/dist/cli/run.js +65 -279
  23. package/dist/cli/run.js.map +1 -1
  24. package/dist/cli/search.d.ts +1 -0
  25. package/dist/cli/search.d.ts.map +1 -1
  26. package/dist/cli/search.js +10 -4
  27. package/dist/cli/search.js.map +1 -1
  28. package/dist/cli/tools.d.ts +2 -2
  29. package/dist/cli/tools.d.ts.map +1 -1
  30. package/dist/cli/tools.js +30 -5
  31. package/dist/cli/tools.js.map +1 -1
  32. package/dist/cli/tui.d.ts +58 -0
  33. package/dist/cli/tui.d.ts.map +1 -0
  34. package/dist/cli/tui.js +1742 -0
  35. package/dist/cli/tui.js.map +1 -0
  36. package/dist/compiler_prompt.d.ts +1 -1
  37. package/dist/compiler_prompt.d.ts.map +1 -1
  38. package/dist/compiler_prompt.js +8 -10
  39. package/dist/compiler_prompt.js.map +1 -1
  40. package/dist/prolog-src/deepclause_mi.pl +25 -4
  41. package/dist/prolog-src/deepclause_strings.pl +22 -2
  42. package/dist/system/assets/docs/CONDUCTOR_PROMPT.md +46 -0
  43. package/dist/system/assets/docs/DML_COMPILER_PROMPT.md +654 -0
  44. package/dist/system/assets/index.d.ts +9 -0
  45. package/dist/system/assets/index.d.ts.map +1 -0
  46. package/dist/system/assets/index.js +47 -0
  47. package/dist/system/assets/index.js.map +1 -0
  48. package/dist/system/assets/skills/conductor.dml +70 -0
  49. package/dist/system/assets/skills/skill-creator.dml +182 -0
  50. package/dist/system/config/model-slots.d.ts +34 -0
  51. package/dist/system/config/model-slots.d.ts.map +1 -0
  52. package/dist/system/config/model-slots.js +121 -0
  53. package/dist/system/config/model-slots.js.map +1 -0
  54. package/dist/system/runtime/agentvm-manager.d.ts +18 -0
  55. package/dist/system/runtime/agentvm-manager.d.ts.map +1 -0
  56. package/dist/system/runtime/agentvm-manager.js +98 -0
  57. package/dist/system/runtime/agentvm-manager.js.map +1 -0
  58. package/dist/system/runtime/conductor.d.ts +54 -0
  59. package/dist/system/runtime/conductor.d.ts.map +1 -0
  60. package/dist/system/runtime/conductor.js +457 -0
  61. package/dist/system/runtime/conductor.js.map +1 -0
  62. package/dist/system/runtime/console-capture.d.ts +9 -0
  63. package/dist/system/runtime/console-capture.d.ts.map +1 -0
  64. package/dist/system/runtime/console-capture.js +67 -0
  65. package/dist/system/runtime/console-capture.js.map +1 -0
  66. package/dist/system/runtime/dml-executor.d.ts +41 -0
  67. package/dist/system/runtime/dml-executor.d.ts.map +1 -0
  68. package/dist/system/runtime/dml-executor.js +137 -0
  69. package/dist/system/runtime/dml-executor.js.map +1 -0
  70. package/dist/system/runtime/runtime-tools.d.ts +16 -0
  71. package/dist/system/runtime/runtime-tools.d.ts.map +1 -0
  72. package/dist/system/runtime/runtime-tools.js +146 -0
  73. package/dist/system/runtime/runtime-tools.js.map +1 -0
  74. package/dist/system/runtime/shell-manager.d.ts +20 -0
  75. package/dist/system/runtime/shell-manager.d.ts.map +1 -0
  76. package/dist/system/runtime/shell-manager.js +133 -0
  77. package/dist/system/runtime/shell-manager.js.map +1 -0
  78. package/dist/system/runtime/skill-creator.d.ts +33 -0
  79. package/dist/system/runtime/skill-creator.d.ts.map +1 -0
  80. package/dist/system/runtime/skill-creator.js +583 -0
  81. package/dist/system/runtime/skill-creator.js.map +1 -0
  82. package/dist/system/runtime/token-usage.d.ts +16 -0
  83. package/dist/system/runtime/token-usage.d.ts.map +1 -0
  84. package/dist/system/runtime/token-usage.js +45 -0
  85. package/dist/system/runtime/token-usage.js.map +1 -0
  86. package/dist/tools.js +1 -1
  87. package/dist/tools.js.map +1 -1
  88. package/package.json +4 -3
  89. package/src/prolog-src/deepclause_mi.pl +25 -4
  90. package/src/prolog-src/deepclause_strings.pl +22 -2
@@ -0,0 +1,583 @@
1
+ import * as crypto from 'crypto';
2
+ import * as fs from 'fs/promises';
3
+ import * as path from 'path';
4
+ import { createDeepClause } from '../../sdk.js';
5
+ import { analyzeDML, extractDescription, extractParameters, validateWithProlog } from '../../compiler.js';
6
+ import { newsSearch, webSearch } from '../../cli/search.js';
7
+ import { readSystemPromptAsset, readSystemSkillAsset } from '../assets/index.js';
8
+ import { withCapturedConsole } from './console-capture.js';
9
+ import { createShellManager } from './shell-manager.js';
10
+ import { recordTokenUsage } from './token-usage.js';
11
+ const CREATOR_TOOL_CATALOG = [
12
+ { name: 'web_search', description: 'Search the web for information.' },
13
+ { name: 'news_search', description: 'Search recent news articles.' },
14
+ { name: 'url_fetch', description: 'Fetch a URL and return its content.' },
15
+ { name: 'bash', description: 'Run shell commands in the active workspace shell.' },
16
+ { name: 'write_file', description: 'Write files inside the workspace.' },
17
+ { name: 'validate_dml', description: 'Validate DML code from a file path.' },
18
+ { name: 'test_dml', description: 'Execute a DML file with test arguments.' },
19
+ { name: 'deploy_skill', description: 'Publish the generated skill into the local CLI catalog.' },
20
+ { name: 'ask_user', description: 'Ask the user for clarification when needed.' },
21
+ ];
22
+ export async function compileWithSkillCreator(markdown, options) {
23
+ if (options.onEvent) {
24
+ return withCapturedConsole((entry) => options.onEvent?.({
25
+ type: 'log',
26
+ content: `[${entry.level}] ${entry.text}`,
27
+ }), () => compileWithSkillCreatorInternal(markdown, options));
28
+ }
29
+ return compileWithSkillCreatorInternal(markdown, options);
30
+ }
31
+ async function compileWithSkillCreatorInternal(markdown, options) {
32
+ const workspacePath = path.resolve(options.workspacePath);
33
+ await fs.mkdir(workspacePath, { recursive: true });
34
+ const outputDir = path.resolve(options.outputDir);
35
+ const shell = createShellManager({
36
+ workspacePath,
37
+ sandbox: options.sandbox,
38
+ network: options.config.agentvm?.network ?? false,
39
+ });
40
+ const sdk = await createDeepClause({
41
+ model: options.compileSelection.model,
42
+ provider: options.compileSelection.provider,
43
+ apiKey: options.compileSelection.apiKey,
44
+ baseUrl: options.compileSelection.baseUrl,
45
+ temperature: options.compileSelection.temperature,
46
+ debug: options.verbose,
47
+ trace: options.verbose,
48
+ streaming: false,
49
+ maxTokens: 65536,
50
+ });
51
+ let published;
52
+ let finalAnswer = '';
53
+ let runtimeError;
54
+ const usageByModel = {};
55
+ try {
56
+ registerSkillCreatorTools(sdk, {
57
+ markdown,
58
+ outputDir,
59
+ baseName: options.baseName,
60
+ workspacePath,
61
+ shell,
62
+ compileSelection: options.compileSelection,
63
+ runSelection: options.runSelection,
64
+ validateOnly: options.validateOnly ?? false,
65
+ onPublish: (result) => {
66
+ published = result;
67
+ },
68
+ signal: options.signal,
69
+ });
70
+ const skillCreatorDml = await readSystemSkillAsset('skill-creator', {
71
+ workspaceRoot: options.workspaceRoot,
72
+ });
73
+ const systemPrompt = await buildSkillCreatorSystemPrompt(options.config, options.compileSelection, options.maxAttempts, options.sandbox ?? false);
74
+ const localMetadata = buildLocalMetadata(markdown, options.baseName);
75
+ for await (const event of sdk.runDML(skillCreatorDml, {
76
+ args: [markdown],
77
+ params: {
78
+ system_prompt: systemPrompt,
79
+ auto_deploy: true,
80
+ deployment_metadata_json: JSON.stringify(localMetadata),
81
+ },
82
+ workspacePath,
83
+ gasLimit: Math.max(240, (options.maxAttempts ?? 3) * 160),
84
+ onUserInput: options.onUserInput,
85
+ signal: options.signal,
86
+ })) {
87
+ options.onEvent?.(event);
88
+ if (event.type === 'output' && options.verbose && !options.onEvent && event.content) {
89
+ console.log(event.content);
90
+ }
91
+ if (event.type === 'tool_call' && options.verbose && !options.onEvent && event.toolName) {
92
+ console.log(` 🔧 ${event.toolName}`);
93
+ }
94
+ if (event.type === 'usage') {
95
+ recordTokenUsage(usageByModel, options.compileSelection.id, event.usage);
96
+ }
97
+ if (event.type === 'answer' && event.content) {
98
+ finalAnswer = event.content;
99
+ }
100
+ if (event.type === 'error') {
101
+ runtimeError = event.content ?? 'Unknown skill creator error';
102
+ }
103
+ }
104
+ if (runtimeError) {
105
+ throw new Error(runtimeError);
106
+ }
107
+ const publishResult = published;
108
+ if (!publishResult) {
109
+ throw new Error(finalAnswer || 'Skill creator finished without producing a published artifact');
110
+ }
111
+ const analysis = await analyzeDML(publishResult.dml);
112
+ return {
113
+ dml: publishResult.dml,
114
+ meta: publishResult.meta,
115
+ tools: publishResult.meta.tools,
116
+ outputPath: publishResult.outputPath,
117
+ explanation: finalAnswer || 'Skill creator runtime compiled and published the skill.',
118
+ analysis,
119
+ usageByModel,
120
+ };
121
+ }
122
+ finally {
123
+ await sdk.dispose();
124
+ await shell.dispose();
125
+ }
126
+ }
127
+ function registerSkillCreatorTools(sdk, context) {
128
+ sdk.registerTool('web_search', {
129
+ description: 'Search the web for information.',
130
+ parameters: {
131
+ type: 'object',
132
+ properties: {
133
+ query: { type: 'string', description: 'Search query.' },
134
+ count: { type: 'number', description: 'Maximum result count.' },
135
+ },
136
+ required: ['query'],
137
+ },
138
+ execute: async (args) => webSearch({
139
+ query: String(args.query ?? ''),
140
+ count: typeof args.count === 'number' ? args.count : 10,
141
+ signal: context.signal,
142
+ }),
143
+ });
144
+ sdk.registerTool('news_search', {
145
+ description: 'Search recent news.',
146
+ parameters: {
147
+ type: 'object',
148
+ properties: {
149
+ query: { type: 'string', description: 'Search query.' },
150
+ count: { type: 'number', description: 'Maximum result count.' },
151
+ },
152
+ required: ['query'],
153
+ },
154
+ execute: async (args) => newsSearch({
155
+ query: String(args.query ?? ''),
156
+ count: typeof args.count === 'number' ? args.count : 10,
157
+ signal: context.signal,
158
+ }),
159
+ });
160
+ sdk.registerTool('url_fetch', {
161
+ description: 'Fetch a URL or save it to a workspace file.',
162
+ parameters: {
163
+ type: 'object',
164
+ properties: {
165
+ url: { type: 'string', description: 'Absolute URL to fetch.' },
166
+ save_to: { type: 'string', description: 'Optional file path inside the workspace.' },
167
+ },
168
+ required: ['url'],
169
+ },
170
+ execute: async (args) => urlFetch(context.workspacePath, args, context.signal),
171
+ });
172
+ sdk.registerTool('bash', {
173
+ description: 'Run a shell command in the active workspace shell.',
174
+ parameters: {
175
+ type: 'object',
176
+ properties: {
177
+ command: { type: 'string', description: 'Shell command to execute.' },
178
+ },
179
+ required: ['command'],
180
+ },
181
+ execute: async (args) => context.shell.exec(String(args.command ?? ''), context.signal),
182
+ });
183
+ sdk.registerTool('write_file', {
184
+ description: 'Write or overwrite a file inside the workspace.',
185
+ parameters: {
186
+ type: 'object',
187
+ properties: {
188
+ path: { type: 'string', description: 'Workspace-relative file path.' },
189
+ content: { type: 'string', description: 'Full file content.' },
190
+ },
191
+ required: ['path', 'content'],
192
+ },
193
+ execute: async (args) => writeWorkspaceFile(context.workspacePath, args),
194
+ });
195
+ sdk.registerTool('validate_dml', {
196
+ description: 'Validate DML code from a file path.',
197
+ parameters: {
198
+ type: 'object',
199
+ properties: {
200
+ dml_file: { type: 'string', description: 'Path to a .dml file inside the workspace.' },
201
+ },
202
+ required: ['dml_file'],
203
+ },
204
+ execute: async (args) => validateWorkspaceDml(context.workspacePath, args),
205
+ });
206
+ sdk.registerTool('test_dml', {
207
+ description: 'Run a DML file with test arguments.',
208
+ parameters: {
209
+ type: 'object',
210
+ properties: {
211
+ dml_file: { type: 'string', description: 'Path to the DML file to test.' },
212
+ test_input: { type: 'string', description: 'Single test input string.' },
213
+ test_args: { type: 'string', description: 'JSON array of string arguments.' },
214
+ },
215
+ required: ['dml_file'],
216
+ },
217
+ execute: async (args) => runLocalTestDml(context, args),
218
+ });
219
+ sdk.registerTool('deploy_skill', {
220
+ description: 'Publish the generated DML into the local CLI skill catalog.',
221
+ parameters: {
222
+ type: 'object',
223
+ properties: {
224
+ dml_file: { type: 'string', description: 'Path to the DML file to publish.' },
225
+ spec_markdown: { type: 'string', description: 'Original specification markdown.' },
226
+ metadata_json: { type: 'string', description: 'JSON metadata with slug, name, description, trigger_phrases.' },
227
+ slug_override: { type: 'string', description: 'Optional slug override.' },
228
+ },
229
+ required: ['dml_file', 'spec_markdown', 'metadata_json'],
230
+ },
231
+ execute: async (args) => {
232
+ const published = await publishSkill(context, args);
233
+ context.onPublish(published);
234
+ return {
235
+ ok: true,
236
+ slug: context.baseName,
237
+ version: published.meta.history.length,
238
+ };
239
+ },
240
+ });
241
+ }
242
+ async function buildSkillCreatorSystemPrompt(config, compileSelection, maxAttempts, sandbox = false) {
243
+ const promptTemplate = await readSystemPromptAsset('skill-creator');
244
+ const toolsTable = [
245
+ '| Tool | Description |',
246
+ '|------|-------------|',
247
+ ...CREATOR_TOOL_CATALOG.map((tool) => `| \`${tool.name}\` | ${tool.description} |`),
248
+ ].join('\n');
249
+ const llmAccessSection = [
250
+ '## LLM Access from Scripts',
251
+ '',
252
+ 'The local CLI runtime does not provide an extra proxy-only script API.',
253
+ 'Use DML task()/prompt() for LLM work unless you explicitly configure provider SDK access in your shell environment.',
254
+ `The compile slot currently resolves to \`${compileSelection.id}\`.`,
255
+ ].join('\n');
256
+ const runtimeSection = sandbox
257
+ ? [
258
+ '## Runtime Shell',
259
+ '- Shell commands run inside AgentVM because `--sandbox` is enabled.',
260
+ `- AgentVM network access is ${config.agentvm?.network ? 'enabled' : 'disabled'}.`,
261
+ '- Package installation and outbound network behavior follow that sandbox setting.',
262
+ '- Web research still goes through web_search, news_search, and url_fetch.',
263
+ ].join('\n')
264
+ : [
265
+ '## Runtime Shell',
266
+ '- Shell commands run in the local workspace shell by default.',
267
+ '- Package installation uses the local machine environment and permissions.',
268
+ '- Web research still goes through web_search, news_search, and url_fetch.',
269
+ ].join('\n');
270
+ const attemptSection = maxAttempts
271
+ ? `\n\n## Iteration Budget\nKeep validation and testing loops within roughly ${maxAttempts} repair attempts before failing clearly.`
272
+ : '';
273
+ return `${promptTemplate
274
+ .replace('{TOOLS_TABLE}', toolsTable)
275
+ .replace('{LLM_ACCESS_SECTION}', llmAccessSection)}
276
+
277
+ ## Your Workflow
278
+ 1. **Understand**: Read the specification carefully. If anything is unclear, use ask_user to ask for clarification.
279
+ 2. **Research**: If the skill needs external APIs or domain knowledge, use search.
280
+ 3. **Plan**: Create a step-by-step plan for the DML program.
281
+ 4. **Prepare environment**: Use bash to install ALL packages the skill will need (pip install, apt-get install, npm install). Do this BEFORE writing any DML code. The skill itself must NOT install packages.
282
+ 5. **Write**: Use write_file(path='my-skill.dml', content='...') to create or overwrite the DML file.
283
+ 6. **Validate**: Use validate_dml(dml_file='my-skill.dml') and fix errors by rewriting the file.
284
+ 7. **Test**: Use test_dml(dml_file='my-skill.dml', test_input='...') with a realistic test input and iterate until it works.
285
+ 8. **Publish**: Use deploy_skill(dml_file='my-skill.dml', ...) exactly once when the DML is ready.
286
+
287
+ ## File-Based DML Only
288
+ validate_dml, test_dml, and deploy_skill only accept file paths. Write the DML to disk first.
289
+
290
+ ${runtimeSection}${attemptSection}`;
291
+ }
292
+ function buildLocalMetadata(markdown, baseName) {
293
+ const name = baseName
294
+ .split(/[-_\s]+/)
295
+ .filter(Boolean)
296
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
297
+ .join(' ');
298
+ const description = extractDescription(markdown);
299
+ const triggerPhrases = Array.from(new Set([
300
+ baseName.replace(/[-_]+/g, ' '),
301
+ `run ${baseName.replace(/[-_]+/g, ' ')}`,
302
+ `use ${baseName.replace(/[-_]+/g, ' ')}`,
303
+ ])).slice(0, 3);
304
+ return {
305
+ slug: baseName,
306
+ name: name || baseName,
307
+ description,
308
+ trigger_phrases: triggerPhrases,
309
+ };
310
+ }
311
+ async function writeWorkspaceFile(workspacePath, args) {
312
+ const relPath = String(args.path ?? '');
313
+ const content = String(args.content ?? '');
314
+ if (!relPath) {
315
+ return { success: false, error: 'path is required' };
316
+ }
317
+ const filePath = resolveWorkspacePath(workspacePath, relPath);
318
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
319
+ await fs.writeFile(filePath, content, 'utf8');
320
+ return { success: true, path: relPath, bytes: content.length };
321
+ }
322
+ async function validateWorkspaceDml(workspacePath, args) {
323
+ const dmlPath = resolveWorkspacePath(workspacePath, String(args.dml_file ?? ''));
324
+ const dml = await fs.readFile(dmlPath, 'utf8');
325
+ const result = await validateWithProlog(dml);
326
+ return {
327
+ valid: result.valid,
328
+ errors: result.errors,
329
+ warnings: result.warnings ?? [],
330
+ };
331
+ }
332
+ async function runLocalTestDml(context, args) {
333
+ const dmlPath = resolveWorkspacePath(context.workspacePath, String(args.dml_file ?? ''));
334
+ const dmlCode = await fs.readFile(dmlPath, 'utf8');
335
+ let testArgs;
336
+ if (typeof args.test_args === 'string' && args.test_args.trim()) {
337
+ try {
338
+ const parsed = JSON.parse(args.test_args);
339
+ testArgs = Array.isArray(parsed) ? parsed.map(String) : [String(parsed)];
340
+ }
341
+ catch {
342
+ testArgs = [String(args.test_args)];
343
+ }
344
+ }
345
+ else {
346
+ testArgs = [String(args.test_input ?? 'test')];
347
+ }
348
+ const sdk = await createDeepClause({
349
+ model: context.runSelection.model,
350
+ provider: context.runSelection.provider,
351
+ apiKey: context.runSelection.apiKey,
352
+ baseUrl: context.runSelection.baseUrl,
353
+ temperature: context.runSelection.temperature,
354
+ debug: false,
355
+ trace: true,
356
+ streaming: false,
357
+ maxTokens: 65536,
358
+ });
359
+ try {
360
+ registerGeneralRuntimeTools(sdk, context.workspacePath, context.shell);
361
+ const outputs = [];
362
+ const errors = [];
363
+ const trace = [];
364
+ const toolCalls = [];
365
+ let answer = '';
366
+ for await (const event of sdk.runDML(dmlCode, {
367
+ args: testArgs,
368
+ workspacePath: context.workspacePath,
369
+ gasLimit: 120,
370
+ onUserInput: async () => '(simulated test input - no interactive user during test_dml)',
371
+ })) {
372
+ if (event.type === 'output' && event.content) {
373
+ outputs.push(event.content);
374
+ }
375
+ if (event.type === 'error' && event.content) {
376
+ errors.push(event.content);
377
+ }
378
+ if (event.type === 'answer' && event.content) {
379
+ answer = event.content;
380
+ }
381
+ if (event.type === 'tool_call') {
382
+ toolCalls.push({ tool: event.toolName ?? '?', args: event.toolArgs });
383
+ }
384
+ if (event.type === 'finished' && event.trace) {
385
+ trace.push(...event.trace);
386
+ }
387
+ }
388
+ return {
389
+ success: errors.length === 0 && answer.length > 0,
390
+ status: errors.length > 0 ? 'error' : (answer ? 'ok' : 'completed_no_answer'),
391
+ answer: answer || undefined,
392
+ outputs: outputs.length > 0 ? outputs : undefined,
393
+ errors: errors.length > 0 ? errors : undefined,
394
+ trace: trace.length > 0 ? trace : undefined,
395
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
396
+ };
397
+ }
398
+ finally {
399
+ await sdk.dispose();
400
+ }
401
+ }
402
+ function registerGeneralRuntimeTools(sdk, workspacePath, shell, signal) {
403
+ sdk.registerTool('web_search', {
404
+ description: 'Search the web for information.',
405
+ parameters: {
406
+ type: 'object',
407
+ properties: {
408
+ query: { type: 'string', description: 'Search query.' },
409
+ count: { type: 'number', description: 'Maximum result count.' },
410
+ },
411
+ required: ['query'],
412
+ },
413
+ execute: async (args) => webSearch({
414
+ query: String(args.query ?? ''),
415
+ count: typeof args.count === 'number' ? args.count : 10,
416
+ signal,
417
+ }),
418
+ });
419
+ sdk.registerTool('news_search', {
420
+ description: 'Search recent news.',
421
+ parameters: {
422
+ type: 'object',
423
+ properties: {
424
+ query: { type: 'string', description: 'Search query.' },
425
+ },
426
+ required: ['query'],
427
+ },
428
+ execute: async (args) => newsSearch({ query: String(args.query ?? ''), count: 10, signal }),
429
+ });
430
+ sdk.registerTool('url_fetch', {
431
+ description: 'Fetch a URL or save it to a workspace file.',
432
+ parameters: {
433
+ type: 'object',
434
+ properties: {
435
+ url: { type: 'string', description: 'Absolute URL to fetch.' },
436
+ save_to: { type: 'string', description: 'Optional file path inside the workspace.' },
437
+ },
438
+ required: ['url'],
439
+ },
440
+ execute: async (args) => urlFetch(workspacePath, args, signal),
441
+ });
442
+ sdk.registerTool('bash', {
443
+ description: 'Run a shell command in the active workspace shell.',
444
+ parameters: {
445
+ type: 'object',
446
+ properties: {
447
+ command: { type: 'string', description: 'Shell command to execute.' },
448
+ },
449
+ required: ['command'],
450
+ },
451
+ execute: async (args) => shell.exec(String(args.command ?? ''), signal),
452
+ });
453
+ }
454
+ async function publishSkill(context, args) {
455
+ const dmlPath = resolveWorkspacePath(context.workspacePath, String(args.dml_file ?? ''));
456
+ const dml = await fs.readFile(dmlPath, 'utf8');
457
+ const normalized = normalizeDeployInputs(String(args.spec_markdown ?? context.markdown), String(args.metadata_json ?? ''));
458
+ const metadata = parseMetadataJson(normalized.metadataJson, buildLocalMetadata(context.markdown, context.baseName));
459
+ const publishName = context.baseName || String(args.slug_override ?? metadata.slug ?? 'skill');
460
+ const meta = await buildMetaFile({
461
+ dml,
462
+ markdown: normalized.specMarkdown,
463
+ outputDir: context.outputDir,
464
+ publishName,
465
+ model: context.compileSelection.model,
466
+ provider: context.compileSelection.provider,
467
+ description: typeof metadata.description === 'string' ? metadata.description : extractDescription(normalized.specMarkdown),
468
+ });
469
+ const outputPath = path.join(context.outputDir, `${publishName}.dml`);
470
+ if (!context.validateOnly) {
471
+ await fs.mkdir(context.outputDir, { recursive: true });
472
+ await fs.writeFile(outputPath, dml, 'utf8');
473
+ await fs.writeFile(path.join(context.outputDir, `${publishName}.meta.json`), JSON.stringify(meta, null, 2) + '\n');
474
+ }
475
+ return {
476
+ dml,
477
+ meta,
478
+ outputPath,
479
+ };
480
+ }
481
+ async function buildMetaFile(input) {
482
+ const metaPath = path.join(input.outputDir, `${input.publishName}.meta.json`);
483
+ const existing = await loadExistingMeta(metaPath);
484
+ const sourceHash = computeHash(input.markdown);
485
+ const history = existing?.history ?? [];
486
+ const analysis = await analyzeDML(input.dml);
487
+ const tools = extractToolNames(analysis);
488
+ return {
489
+ version: '1.0.0',
490
+ source: input.publishName,
491
+ sourceHash,
492
+ compiledAt: new Date().toISOString(),
493
+ model: input.model,
494
+ provider: input.provider,
495
+ description: input.description,
496
+ parameters: extractParameters(input.dml),
497
+ tools,
498
+ history: [
499
+ ...history,
500
+ {
501
+ version: history.length + 1,
502
+ timestamp: new Date().toISOString(),
503
+ sourceHash,
504
+ model: input.model,
505
+ provider: input.provider,
506
+ },
507
+ ],
508
+ };
509
+ }
510
+ function extractToolNames(analysis) {
511
+ return Array.from(new Set(analysis.capabilities
512
+ .filter((capability) => capability.startsWith('tool_use(') && capability.endsWith(')'))
513
+ .map((capability) => capability.slice('tool_use('.length, -1)))).sort();
514
+ }
515
+ async function urlFetch(workspacePath, args, signal) {
516
+ const url = String(args.url ?? '');
517
+ if (!url) {
518
+ throw new Error('url is required');
519
+ }
520
+ const response = await fetch(url, { signal });
521
+ const headers = Object.fromEntries(response.headers.entries());
522
+ if (typeof args.save_to === 'string' && args.save_to.trim()) {
523
+ const targetPath = resolveWorkspacePath(workspacePath, args.save_to);
524
+ await fs.mkdir(path.dirname(targetPath), { recursive: true });
525
+ const buffer = Buffer.from(await response.arrayBuffer());
526
+ await fs.writeFile(targetPath, buffer);
527
+ return {
528
+ file_path: targetPath,
529
+ size: buffer.byteLength,
530
+ status: response.status,
531
+ headers,
532
+ };
533
+ }
534
+ return {
535
+ body: await response.text(),
536
+ status: response.status,
537
+ headers,
538
+ };
539
+ }
540
+ function resolveWorkspacePath(workspacePath, filePath) {
541
+ if (!filePath) {
542
+ throw new Error('Path is required');
543
+ }
544
+ const resolved = path.resolve(workspacePath, filePath);
545
+ if (!resolved.startsWith(path.resolve(workspacePath))) {
546
+ throw new Error(`Path must stay inside workspace: ${filePath}`);
547
+ }
548
+ return resolved;
549
+ }
550
+ function normalizeDeployInputs(specMarkdown, metadataJson) {
551
+ if (looksLikeJsonObject(specMarkdown) && !looksLikeJsonObject(metadataJson)) {
552
+ return {
553
+ specMarkdown: metadataJson,
554
+ metadataJson: specMarkdown,
555
+ };
556
+ }
557
+ return { specMarkdown, metadataJson };
558
+ }
559
+ function looksLikeJsonObject(value) {
560
+ const trimmed = value.trim();
561
+ return trimmed.startsWith('{') && trimmed.endsWith('}');
562
+ }
563
+ function parseMetadataJson(metadataJson, fallback) {
564
+ try {
565
+ return JSON.parse(metadataJson);
566
+ }
567
+ catch {
568
+ return fallback;
569
+ }
570
+ }
571
+ function computeHash(content) {
572
+ return 'sha256:' + crypto.createHash('sha256').update(content).digest('hex').substring(0, 16);
573
+ }
574
+ async function loadExistingMeta(metaPath) {
575
+ try {
576
+ const content = await fs.readFile(metaPath, 'utf8');
577
+ return JSON.parse(content);
578
+ }
579
+ catch {
580
+ return null;
581
+ }
582
+ }
583
+ //# sourceMappingURL=skill-creator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-creator.js","sourceRoot":"","sources":["../../../src/system/runtime/skill-creator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { LLMUsage } from '../../types.js';
2
+ export interface TokenUsageTotals {
3
+ calls: number;
4
+ inputTokens: number;
5
+ outputTokens: number;
6
+ totalTokens: number;
7
+ cacheReadTokens: number;
8
+ cacheWriteTokens: number;
9
+ reasoningTokens: number;
10
+ }
11
+ export type TokenUsageByModel = Record<string, TokenUsageTotals>;
12
+ export declare function createTokenUsageTotals(): TokenUsageTotals;
13
+ export declare function isTokenUsageEmpty(usageByModel: TokenUsageByModel): boolean;
14
+ export declare function recordTokenUsage(usageByModel: TokenUsageByModel, modelId: string | undefined, usage: LLMUsage | undefined): void;
15
+ export declare function mergeTokenUsageMaps(base: TokenUsageByModel, delta: TokenUsageByModel): TokenUsageByModel;
16
+ //# sourceMappingURL=token-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-usage.d.ts","sourceRoot":"","sources":["../../../src/system/runtime/token-usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAEjE,wBAAgB,sBAAsB,IAAI,gBAAgB,CAUzD;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO,CAE1E;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,iBAAiB,EAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,QAAQ,GAAG,SAAS,GAC1B,IAAI,CAaN;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,CAmBxG"}