@kodax-ai/kodax 0.7.95 → 0.7.96-alpha.2
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/CHANGELOG.md +178 -1
- package/LICENSE +158 -158
- package/README.md +149 -24
- package/README_CN.md +117 -24
- package/config-templates/config.example.jsonc +2 -1
- package/config-templates/integrations/a2a.example.jsonc +91 -91
- package/config-templates/integrations/extensions.example.jsonc +7 -7
- package/config-templates/integrations/mcp.example.jsonc +16 -16
- package/dist/builtin/code-review/SKILL.md +82 -82
- package/dist/builtin/git-workflow/SKILL.md +84 -84
- package/dist/builtin/skill-creator/SKILL.md +127 -127
- package/dist/builtin/skill-creator/agents/analyzer.md +12 -12
- package/dist/builtin/skill-creator/agents/comparator.md +13 -13
- package/dist/builtin/skill-creator/agents/grader.md +13 -13
- package/dist/builtin/skill-creator/references/schemas.md +227 -227
- package/dist/builtin/skill-creator/scripts/aggregate-benchmark.d.ts +46 -46
- package/dist/builtin/skill-creator/scripts/aggregate-benchmark.js +208 -208
- package/dist/builtin/skill-creator/scripts/analyze-benchmark.d.ts +46 -46
- package/dist/builtin/skill-creator/scripts/analyze-benchmark.js +286 -286
- package/dist/builtin/skill-creator/scripts/compare-runs.d.ts +62 -62
- package/dist/builtin/skill-creator/scripts/compare-runs.js +330 -330
- package/dist/builtin/skill-creator/scripts/generate-review.d.ts +33 -33
- package/dist/builtin/skill-creator/scripts/generate-review.js +414 -414
- package/dist/builtin/skill-creator/scripts/grade-evals.d.ts +73 -73
- package/dist/builtin/skill-creator/scripts/grade-evals.js +402 -402
- package/dist/builtin/skill-creator/scripts/improve-description.d.ts +23 -23
- package/dist/builtin/skill-creator/scripts/improve-description.js +160 -160
- package/dist/builtin/skill-creator/scripts/init-skill.d.ts +14 -14
- package/dist/builtin/skill-creator/scripts/init-skill.js +155 -155
- package/dist/builtin/skill-creator/scripts/install-skill.d.ts +29 -29
- package/dist/builtin/skill-creator/scripts/install-skill.js +173 -173
- package/dist/builtin/skill-creator/scripts/package-skill.d.ts +38 -38
- package/dist/builtin/skill-creator/scripts/package-skill.js +121 -121
- package/dist/builtin/skill-creator/scripts/quick-validate.d.ts +8 -8
- package/dist/builtin/skill-creator/scripts/quick-validate.js +163 -163
- package/dist/builtin/skill-creator/scripts/run-eval.d.ts +66 -66
- package/dist/builtin/skill-creator/scripts/run-eval.js +353 -353
- package/dist/builtin/skill-creator/scripts/run-loop.d.ts +49 -49
- package/dist/builtin/skill-creator/scripts/run-loop.js +242 -242
- package/dist/builtin/skill-creator/scripts/run-trigger-eval.d.ts +58 -58
- package/dist/builtin/skill-creator/scripts/run-trigger-eval.js +224 -224
- package/dist/builtin/tdd/SKILL.md +56 -56
- package/dist/chunks/agent-4FABF6WK.js +2 -0
- package/dist/chunks/argument-completer-72VHB2VL.js +2 -0
- package/dist/chunks/{chunk-7JXA3533.js → chunk-4OIQZWA5.js} +223 -226
- package/dist/chunks/{chunk-BNVSKIAB.js → chunk-6BVF3HZ7.js} +136 -136
- package/dist/chunks/chunk-7JZZIFZH.js +501 -0
- package/dist/chunks/chunk-AC7Z2OIY.js +2 -0
- package/dist/chunks/{chunk-JS452J2F.js → chunk-C4KYZAFU.js} +2 -2
- package/dist/chunks/chunk-CHUPIWIF.js +251 -0
- package/dist/chunks/{chunk-C4DTUKTR.js → chunk-GYUU7XLH.js} +5 -4
- package/dist/chunks/{chunk-OK4AXDC5.js → chunk-HAX55GOQ.js} +1 -1
- package/dist/chunks/chunk-JKTJCGO2.js +418 -0
- package/dist/chunks/{chunk-O743AJ5V.js → chunk-LQYETRFK.js} +171 -175
- package/dist/chunks/{chunk-2PEDBGKN.js → chunk-LTUZTQ6W.js} +1 -1
- package/dist/chunks/chunk-LYWDUSKO.js +2 -0
- package/dist/chunks/chunk-NGH6T4FD.js +92 -0
- package/dist/chunks/{chunk-SRIJX5ZP.js → chunk-NVRWCSA5.js} +1 -1
- package/dist/chunks/chunk-O4DS7RIQ.js +384 -0
- package/dist/chunks/chunk-ORXU6OWZ.js +2 -0
- package/dist/chunks/chunk-POTW3O65.js +124 -0
- package/dist/chunks/{chunk-2TM3W3GK.js → chunk-RIQSS56Y.js} +1 -1
- package/dist/chunks/chunk-U27XKEN5.js +407 -0
- package/dist/chunks/{chunk-6ABQJUK6.js → chunk-XUX6OUCA.js} +2 -2
- package/dist/chunks/{client-JDOS3YJR.js → client-4C456K4O.js} +1 -1
- package/dist/chunks/compaction-config-3VQRDFF4.js +2 -0
- package/dist/chunks/{construction-bootstrap-YCWHHUYO.js → construction-bootstrap-AHN7EDGG.js} +1 -1
- package/dist/chunks/dist-BCBQXAGI.js +2 -0
- package/dist/chunks/dist-QK2YDWU6.js +2 -0
- package/dist/chunks/host-VIHV7ADG.js +2 -0
- package/dist/chunks/run-manager-NBVMU3KV.js +2 -0
- package/dist/chunks/utils-MEJZ2IGI.js +2 -0
- package/dist/index.d.ts +22 -21
- package/dist/index.js +7 -7
- package/dist/kodax_bootstrap.js +26 -26
- package/dist/kodax_cli.js +1905 -1882
- package/dist/native/darwin-arm64/LICENSE-APACHE.txt +13 -0
- package/dist/native/darwin-arm64/kodax-text-transaction.node +0 -0
- package/dist/native/darwin-arm64/manifest.json +16 -0
- package/dist/native/darwin-x64/LICENSE-APACHE.txt +13 -0
- package/dist/native/darwin-x64/kodax-text-transaction.node +0 -0
- package/dist/native/darwin-x64/manifest.json +16 -0
- package/dist/native/linux-arm64/LICENSE-APACHE.txt +13 -0
- package/dist/native/linux-arm64/kodax-text-transaction.node +0 -0
- package/dist/native/linux-arm64/manifest.json +16 -0
- package/dist/native/linux-x64/LICENSE-APACHE.txt +13 -0
- package/dist/native/linux-x64/kodax-text-transaction.node +0 -0
- package/dist/native/linux-x64/manifest.json +16 -0
- package/dist/native/win32-x64/LICENSE-APACHE.txt +13 -0
- package/dist/native/win32-x64/NOTICE-windows-sandbox.txt +8 -0
- package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
- package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
- package/dist/native/win32-x64/manifest.json +30 -0
- package/dist/provider-capabilities.json +108 -2
- package/dist/runtime-worker.js +1745 -1727
- package/dist/sandbox-network-broker.js +1715 -0
- package/dist/sdk-a2a.d.ts +13 -12
- package/dist/sdk-a2a.js +1 -1
- package/dist/sdk-agent.d.ts +27 -18
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +107 -58
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +4 -4
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +9 -10
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +1 -1
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +25 -17
- package/dist/sdk-repl.js +1 -1
- package/dist/sdk-runtime.d.ts +41 -17
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-sandbox.d.ts +17 -3
- package/dist/sdk-sandbox.js +1 -1
- package/dist/sdk-session.d.ts +8 -7
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +61 -61
- package/dist/types-chunks/{base.d-vopO1rml.d.ts → base.d-COo8E2dk.d.ts} +18 -27
- package/dist/types-chunks/{bash-prefix-extractor.d-B2rxNI4L.d.ts → bash-prefix-extractor.d-DQOlA8cy.d.ts} +72 -52
- package/dist/types-chunks/{capability-learning.d-CE1tm29C.d.ts → capability-learning.d-lRPgA3Or.d.ts} +1 -1
- package/dist/types-chunks/{capsule.d-Y7QRS4J2.d.ts → capsule.d-0zxsgXg_.d.ts} +3 -3
- package/dist/types-chunks/{controller.d-BR-UVeUR.d.ts → controller.d-BTtyIIC1.d.ts} +1 -1
- package/dist/types-chunks/{controller.d-C5noq5-w.d.ts → controller.d-C7tXUcXo.d.ts} +2 -2
- package/dist/types-chunks/{guardrail.d-DqHD-61O.d.ts → guardrail.d-DKTyEHJa.d.ts} +5 -5
- package/dist/types-chunks/{history-retrieval.d-CKU8zmt_.d.ts → history-retrieval.d-CHnL99S7.d.ts} +2 -2
- package/dist/types-chunks/{public-api.d-D7fXaWW8.d.ts → public-api.d-Dx3L3W4Z.d.ts} +7 -4
- package/dist/types-chunks/{repl.d-BYDb14s6.d.ts → repl.d-mO01olIa.d.ts} +5 -5
- package/dist/types-chunks/{resolver.d-CwHUwbdE.d.ts → resolver.d-DlXPjeyx.d.ts} +38 -6
- package/dist/types-chunks/{review-inbox.d-BSgFewyj.d.ts → review-inbox.d-WDSe1nze.d.ts} +1 -1
- package/dist/types-chunks/{run-manager.d-BVJSntpS.d.ts → run-manager.d-DENbbzgR.d.ts} +1 -1
- package/dist/types-chunks/{sdk-session-CqEG84oP.d.ts → sdk-session-DYHGXXH4.d.ts} +3 -3
- package/dist/types-chunks/{shell-command-sets.d-DqaaBwhU.d.ts → shell-command-sets.d-CjFqS4dp.d.ts} +1 -1
- package/dist/types-chunks/{side-query.d-iH0P9ASy.d.ts → side-query.d-j8A3sFv_.d.ts} +2 -2
- package/dist/types-chunks/{types.d-rUOjXych.d.ts → types.d-BbZjR0Wr.d.ts} +1 -1
- package/dist/types-chunks/{types.d-CaTXAW_Q.d.ts → types.d-BkTIKdH6.d.ts} +2 -2
- package/dist/types-chunks/{types.d-C5xQEFcj.d.ts → types.d-DncLrpu_.d.ts} +4 -4
- package/dist/types-chunks/{types.d-CK9A9rpP.d.ts → types.d-Xy0f3x4i.d.ts} +9 -0
- package/dist/types-chunks/{utils.d-CWUyLiXo.d.ts → utils.d-CnxefMos.d.ts} +6 -6
- package/package.json +10 -3
- package/public_docs/README.md +130 -0
- package/public_docs/configuration/sandbox.md +289 -0
- package/public_docs/sdk/embedder-guide.md +6674 -0
- package/scripts/kodax-bin.cjs +28 -28
- package/scripts/production-env.cjs +25 -25
- package/dist/chunks/agent-XXZMXKKA.js +0 -2
- package/dist/chunks/argument-completer-KCYDGTQW.js +0 -2
- package/dist/chunks/chunk-77PNP27P.js +0 -92
- package/dist/chunks/chunk-7QBWHCIZ.js +0 -2
- package/dist/chunks/chunk-BHE66SP3.js +0 -123
- package/dist/chunks/chunk-BR2OSB2I.js +0 -722
- package/dist/chunks/chunk-DSMONSVB.js +0 -407
- package/dist/chunks/chunk-Q5VRWSKG.js +0 -418
- package/dist/chunks/chunk-XWRPOGJN.js +0 -4
- package/dist/chunks/chunk-Y5VIQBT6.js +0 -383
- package/dist/chunks/compaction-config-EGS4577X.js +0 -2
- package/dist/chunks/dist-ITTXQHRJ.js +0 -2
- package/dist/chunks/dist-KFYN3OKD.js +0 -2
- package/dist/chunks/host-VAYADIPW.js +0 -2
- package/dist/chunks/run-manager-52IJZMZJ.js +0 -2
- package/dist/chunks/utils-P7PBSL3R.js +0 -2
- package/dist/sandbox-workspace-session.js +0 -1705
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
export interface ImproveDescriptionOptions {
|
|
2
|
-
skillPath: string;
|
|
3
|
-
evalResultsPath: string;
|
|
4
|
-
provider?: string;
|
|
5
|
-
model?: string;
|
|
6
|
-
output?: string;
|
|
7
|
-
write?: boolean;
|
|
8
|
-
historyPath?: string;
|
|
9
|
-
maxIter?: number;
|
|
10
|
-
reasoningMode?: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface ImproveDescriptionResult {
|
|
14
|
-
description: string;
|
|
15
|
-
rawResponse: string;
|
|
16
|
-
prompt: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function extractDescriptionCandidate(text: string): string;
|
|
20
|
-
export function improveDescription(
|
|
21
|
-
options: ImproveDescriptionOptions,
|
|
22
|
-
generator?: (prompt: string, options: ImproveDescriptionOptions) => Promise<string>
|
|
23
|
-
): Promise<ImproveDescriptionResult>;
|
|
1
|
+
export interface ImproveDescriptionOptions {
|
|
2
|
+
skillPath: string;
|
|
3
|
+
evalResultsPath: string;
|
|
4
|
+
provider?: string;
|
|
5
|
+
model?: string;
|
|
6
|
+
output?: string;
|
|
7
|
+
write?: boolean;
|
|
8
|
+
historyPath?: string;
|
|
9
|
+
maxIter?: number;
|
|
10
|
+
reasoningMode?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface ImproveDescriptionResult {
|
|
14
|
+
description: string;
|
|
15
|
+
rawResponse: string;
|
|
16
|
+
prompt: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function extractDescriptionCandidate(text: string): string;
|
|
20
|
+
export function improveDescription(
|
|
21
|
+
options: ImproveDescriptionOptions,
|
|
22
|
+
generator?: (prompt: string, options: ImproveDescriptionOptions) => Promise<string>
|
|
23
|
+
): Promise<ImproveDescriptionResult>;
|
|
@@ -1,162 +1,162 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { readFile, writeFile } from 'node:fs/promises';
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
import { fileURLToPath } from 'node:url';
|
|
6
|
-
import {
|
|
7
|
-
extractTaggedText,
|
|
8
|
-
loadKodaXSDK,
|
|
9
|
-
loadSkill,
|
|
10
|
-
pathExists,
|
|
11
|
-
writeSkill,
|
|
12
|
-
} from './utils.js';
|
|
13
|
-
|
|
14
|
-
function buildImprovePrompt({ skillName, body, currentDescription, evalResults, history }) {
|
|
15
|
-
const failed = evalResults.results.filter((item) => !item.pass);
|
|
16
|
-
const historyText = history.length === 0
|
|
17
|
-
? 'None.'
|
|
18
|
-
: history.map((item, index) => `${index + 1}. ${item.description} (${item.score})`).join('\n');
|
|
19
|
-
|
|
20
|
-
return [
|
|
21
|
-
`You are improving the trigger description for a KodaX skill named "${skillName}".`,
|
|
22
|
-
'Write a better description that stays under 1024 characters and focuses on user intent.',
|
|
23
|
-
'Respond with only the new description inside <new_description> tags.',
|
|
24
|
-
'',
|
|
25
|
-
`Current description: ${currentDescription}`,
|
|
26
|
-
'',
|
|
27
|
-
'Skill body for context:',
|
|
28
|
-
body,
|
|
29
|
-
'',
|
|
30
|
-
'Failed eval cases:',
|
|
31
|
-
failed.length === 0 ? 'None.' : JSON.stringify(failed, null, 2),
|
|
32
|
-
'',
|
|
33
|
-
'Previous attempts:',
|
|
34
|
-
historyText,
|
|
35
|
-
].join('\n');
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function extractDescriptionCandidate(text) {
|
|
39
|
-
const tagged = extractTaggedText(text, 'new_description');
|
|
40
|
-
return (tagged ?? text).trim().replace(/^"|"$/g, '');
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async function defaultGenerate(prompt, options) {
|
|
44
|
-
const { runKodaX } = await loadKodaXSDK();
|
|
45
|
-
const result = await runKodaX(
|
|
46
|
-
{
|
|
47
|
-
provider: options.provider,
|
|
48
|
-
model: options.model,
|
|
49
|
-
maxIter: options.maxIter ?? 18,
|
|
50
|
-
reasoningMode: options.reasoningMode ?? 'off',
|
|
51
|
-
thinking: options.reasoningMode ? options.reasoningMode !== 'off' : false,
|
|
52
|
-
},
|
|
53
|
-
prompt
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
return result.lastText;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export async function improveDescription(options, generator = defaultGenerate) {
|
|
60
|
-
const skill = await loadSkill(options.skillPath);
|
|
61
|
-
const evalResults = JSON.parse(await readFile(options.evalResultsPath, 'utf8'));
|
|
62
|
-
const history = options.historyPath && await pathExists(options.historyPath)
|
|
63
|
-
? JSON.parse(await readFile(options.historyPath, 'utf8')).history ?? []
|
|
64
|
-
: [];
|
|
65
|
-
|
|
66
|
-
const prompt = buildImprovePrompt({
|
|
67
|
-
skillName: skill.frontmatter.name,
|
|
68
|
-
body: skill.body,
|
|
69
|
-
currentDescription: String(evalResults.description ?? skill.frontmatter.description ?? ''),
|
|
70
|
-
evalResults,
|
|
71
|
-
history,
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
const rawResponse = await generator(prompt, options);
|
|
75
|
-
const description = extractDescriptionCandidate(rawResponse);
|
|
76
|
-
if (!description) {
|
|
77
|
-
throw new Error('No description candidate was produced.');
|
|
78
|
-
}
|
|
79
|
-
if (description.length > 1024) {
|
|
80
|
-
throw new Error(`Generated description is too long (${description.length}/1024).`);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return {
|
|
84
|
-
description,
|
|
85
|
-
rawResponse,
|
|
86
|
-
prompt,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function parseArgs(argv) {
|
|
91
|
-
const args = {
|
|
92
|
-
skillPath: '',
|
|
93
|
-
evalResultsPath: '',
|
|
94
|
-
provider: 'anthropic',
|
|
95
|
-
model: undefined,
|
|
96
|
-
output: undefined,
|
|
97
|
-
write: false,
|
|
98
|
-
historyPath: undefined,
|
|
99
|
-
maxIter: 18,
|
|
100
|
-
reasoningMode: 'off',
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
for (let index = 2; index < argv.length; index += 1) {
|
|
104
|
-
const token = argv[index];
|
|
105
|
-
if (token === '--skill-path' && argv[index + 1]) {
|
|
106
|
-
args.skillPath = argv[++index];
|
|
107
|
-
} else if (token === '--eval-results' && argv[index + 1]) {
|
|
108
|
-
args.evalResultsPath = argv[++index];
|
|
109
|
-
} else if (token === '--provider' && argv[index + 1]) {
|
|
110
|
-
args.provider = argv[++index];
|
|
111
|
-
} else if (token === '--model' && argv[index + 1]) {
|
|
112
|
-
args.model = argv[++index];
|
|
113
|
-
} else if (token === '--output' && argv[index + 1]) {
|
|
114
|
-
args.output = argv[++index];
|
|
115
|
-
} else if (token === '--write') {
|
|
116
|
-
args.write = true;
|
|
117
|
-
} else if (token === '--history' && argv[index + 1]) {
|
|
118
|
-
args.historyPath = argv[++index];
|
|
119
|
-
} else if (token === '--max-iter' && argv[index + 1]) {
|
|
120
|
-
args.maxIter = Number(argv[++index]);
|
|
121
|
-
} else if (token === '--reasoning' && argv[index + 1]) {
|
|
122
|
-
args.reasoningMode = argv[++index];
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
return args;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
async function main() {
|
|
130
|
-
const args = parseArgs(process.argv);
|
|
131
|
-
if (!args.skillPath || !args.evalResultsPath) {
|
|
132
|
-
console.error('Usage: node scripts/improve-description.js --skill-path <dir> --eval-results <results.json> [--write] [--output result.json]');
|
|
133
|
-
process.exit(1);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const result = await improveDescription(args);
|
|
137
|
-
const output = `${JSON.stringify(result, null, 2)}\n`;
|
|
138
|
-
|
|
139
|
-
if (args.write) {
|
|
140
|
-
const skill = await loadSkill(args.skillPath);
|
|
141
|
-
skill.frontmatter.description = result.description;
|
|
142
|
-
await writeSkill(args.skillPath, skill.frontmatter, skill.body);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
if (args.output) {
|
|
146
|
-
await writeFile(args.output, output, 'utf8');
|
|
147
|
-
console.log(`Wrote ${path.resolve(args.output)}`);
|
|
148
|
-
} else {
|
|
149
|
-
process.stdout.write(output);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import {
|
|
7
|
+
extractTaggedText,
|
|
8
|
+
loadKodaXSDK,
|
|
9
|
+
loadSkill,
|
|
10
|
+
pathExists,
|
|
11
|
+
writeSkill,
|
|
12
|
+
} from './utils.js';
|
|
13
|
+
|
|
14
|
+
function buildImprovePrompt({ skillName, body, currentDescription, evalResults, history }) {
|
|
15
|
+
const failed = evalResults.results.filter((item) => !item.pass);
|
|
16
|
+
const historyText = history.length === 0
|
|
17
|
+
? 'None.'
|
|
18
|
+
: history.map((item, index) => `${index + 1}. ${item.description} (${item.score})`).join('\n');
|
|
19
|
+
|
|
20
|
+
return [
|
|
21
|
+
`You are improving the trigger description for a KodaX skill named "${skillName}".`,
|
|
22
|
+
'Write a better description that stays under 1024 characters and focuses on user intent.',
|
|
23
|
+
'Respond with only the new description inside <new_description> tags.',
|
|
24
|
+
'',
|
|
25
|
+
`Current description: ${currentDescription}`,
|
|
26
|
+
'',
|
|
27
|
+
'Skill body for context:',
|
|
28
|
+
body,
|
|
29
|
+
'',
|
|
30
|
+
'Failed eval cases:',
|
|
31
|
+
failed.length === 0 ? 'None.' : JSON.stringify(failed, null, 2),
|
|
32
|
+
'',
|
|
33
|
+
'Previous attempts:',
|
|
34
|
+
historyText,
|
|
35
|
+
].join('\n');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function extractDescriptionCandidate(text) {
|
|
39
|
+
const tagged = extractTaggedText(text, 'new_description');
|
|
40
|
+
return (tagged ?? text).trim().replace(/^"|"$/g, '');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async function defaultGenerate(prompt, options) {
|
|
44
|
+
const { runKodaX } = await loadKodaXSDK();
|
|
45
|
+
const result = await runKodaX(
|
|
46
|
+
{
|
|
47
|
+
provider: options.provider,
|
|
48
|
+
model: options.model,
|
|
49
|
+
maxIter: options.maxIter ?? 18,
|
|
50
|
+
reasoningMode: options.reasoningMode ?? 'off',
|
|
51
|
+
thinking: options.reasoningMode ? options.reasoningMode !== 'off' : false,
|
|
52
|
+
},
|
|
53
|
+
prompt
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
return result.lastText;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export async function improveDescription(options, generator = defaultGenerate) {
|
|
60
|
+
const skill = await loadSkill(options.skillPath);
|
|
61
|
+
const evalResults = JSON.parse(await readFile(options.evalResultsPath, 'utf8'));
|
|
62
|
+
const history = options.historyPath && await pathExists(options.historyPath)
|
|
63
|
+
? JSON.parse(await readFile(options.historyPath, 'utf8')).history ?? []
|
|
64
|
+
: [];
|
|
65
|
+
|
|
66
|
+
const prompt = buildImprovePrompt({
|
|
67
|
+
skillName: skill.frontmatter.name,
|
|
68
|
+
body: skill.body,
|
|
69
|
+
currentDescription: String(evalResults.description ?? skill.frontmatter.description ?? ''),
|
|
70
|
+
evalResults,
|
|
71
|
+
history,
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const rawResponse = await generator(prompt, options);
|
|
75
|
+
const description = extractDescriptionCandidate(rawResponse);
|
|
76
|
+
if (!description) {
|
|
77
|
+
throw new Error('No description candidate was produced.');
|
|
78
|
+
}
|
|
79
|
+
if (description.length > 1024) {
|
|
80
|
+
throw new Error(`Generated description is too long (${description.length}/1024).`);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
description,
|
|
85
|
+
rawResponse,
|
|
86
|
+
prompt,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function parseArgs(argv) {
|
|
91
|
+
const args = {
|
|
92
|
+
skillPath: '',
|
|
93
|
+
evalResultsPath: '',
|
|
94
|
+
provider: 'anthropic',
|
|
95
|
+
model: undefined,
|
|
96
|
+
output: undefined,
|
|
97
|
+
write: false,
|
|
98
|
+
historyPath: undefined,
|
|
99
|
+
maxIter: 18,
|
|
100
|
+
reasoningMode: 'off',
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
for (let index = 2; index < argv.length; index += 1) {
|
|
104
|
+
const token = argv[index];
|
|
105
|
+
if (token === '--skill-path' && argv[index + 1]) {
|
|
106
|
+
args.skillPath = argv[++index];
|
|
107
|
+
} else if (token === '--eval-results' && argv[index + 1]) {
|
|
108
|
+
args.evalResultsPath = argv[++index];
|
|
109
|
+
} else if (token === '--provider' && argv[index + 1]) {
|
|
110
|
+
args.provider = argv[++index];
|
|
111
|
+
} else if (token === '--model' && argv[index + 1]) {
|
|
112
|
+
args.model = argv[++index];
|
|
113
|
+
} else if (token === '--output' && argv[index + 1]) {
|
|
114
|
+
args.output = argv[++index];
|
|
115
|
+
} else if (token === '--write') {
|
|
116
|
+
args.write = true;
|
|
117
|
+
} else if (token === '--history' && argv[index + 1]) {
|
|
118
|
+
args.historyPath = argv[++index];
|
|
119
|
+
} else if (token === '--max-iter' && argv[index + 1]) {
|
|
120
|
+
args.maxIter = Number(argv[++index]);
|
|
121
|
+
} else if (token === '--reasoning' && argv[index + 1]) {
|
|
122
|
+
args.reasoningMode = argv[++index];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return args;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
async function main() {
|
|
130
|
+
const args = parseArgs(process.argv);
|
|
131
|
+
if (!args.skillPath || !args.evalResultsPath) {
|
|
132
|
+
console.error('Usage: node scripts/improve-description.js --skill-path <dir> --eval-results <results.json> [--write] [--output result.json]');
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const result = await improveDescription(args);
|
|
137
|
+
const output = `${JSON.stringify(result, null, 2)}\n`;
|
|
138
|
+
|
|
139
|
+
if (args.write) {
|
|
140
|
+
const skill = await loadSkill(args.skillPath);
|
|
141
|
+
skill.frontmatter.description = result.description;
|
|
142
|
+
await writeSkill(args.skillPath, skill.frontmatter, skill.body);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (args.output) {
|
|
146
|
+
await writeFile(args.output, output, 'utf8');
|
|
147
|
+
console.log(`Wrote ${path.resolve(args.output)}`);
|
|
148
|
+
} else {
|
|
149
|
+
process.stdout.write(output);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
153
|
const isDirectRun = process.env.KODAX_MODULE_BUNDLE !== 'true'
|
|
154
154
|
&& process.argv[1]
|
|
155
|
-
&& fileURLToPath(import.meta.url) === path.resolve(process.argv[1]);
|
|
156
|
-
|
|
157
|
-
if (isDirectRun) {
|
|
158
|
-
main().catch((error) => {
|
|
159
|
-
console.error(error instanceof Error ? error.message : String(error));
|
|
160
|
-
process.exit(1);
|
|
161
|
-
});
|
|
162
|
-
}
|
|
155
|
+
&& fileURLToPath(import.meta.url) === path.resolve(process.argv[1]);
|
|
156
|
+
|
|
157
|
+
if (isDirectRun) {
|
|
158
|
+
main().catch((error) => {
|
|
159
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
160
|
+
process.exit(1);
|
|
161
|
+
});
|
|
162
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export interface InitSkillOptions {
|
|
2
|
-
name: string;
|
|
3
|
-
baseDir?: string;
|
|
4
|
-
description?: string;
|
|
5
|
-
force?: boolean;
|
|
6
|
-
includeEvals?: boolean;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function renderSkillTemplate(name: string, description: string): string;
|
|
10
|
-
export function renderEvalTemplate(name: string): string;
|
|
11
|
-
export function initSkill(options: InitSkillOptions): Promise<{
|
|
12
|
-
skillDir: string;
|
|
13
|
-
created: string[];
|
|
14
|
-
}>;
|
|
1
|
+
export interface InitSkillOptions {
|
|
2
|
+
name: string;
|
|
3
|
+
baseDir?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
force?: boolean;
|
|
6
|
+
includeEvals?: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function renderSkillTemplate(name: string, description: string): string;
|
|
10
|
+
export function renderEvalTemplate(name: string): string;
|
|
11
|
+
export function initSkill(options: InitSkillOptions): Promise<{
|
|
12
|
+
skillDir: string;
|
|
13
|
+
created: string[];
|
|
14
|
+
}>;
|
|
15
15
|
export declare function main(argv?: string[]): Promise<void>;
|