synthos 0.10.0 → 0.11.0
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/README.md +5 -5
- package/default-pages/elevenlabs_effects_studio/chat-history.json +1 -0
- package/default-pages/elevenlabs_effects_studio/page.html +1345 -1363
- package/default-pages/elevenlabs_effects_studio/page.json +13 -11
- package/default-pages/elevenlabs_voice_studio/chat-history.json +1 -0
- package/default-pages/elevenlabs_voice_studio/page.html +782 -801
- package/default-pages/elevenlabs_voice_studio/page.json +13 -11
- package/default-pages/json_tools/chat-history.json +1 -0
- package/default-pages/json_tools/page.html +70 -90
- package/default-pages/json_tools/page.json +12 -10
- package/default-pages/my_notes/chat-history.json +1 -0
- package/default-pages/my_notes/page.html +115 -131
- package/default-pages/my_notes/page.json +14 -12
- package/default-pages/neon_asteroids/chat-history.json +1 -0
- package/default-pages/neon_asteroids/page.html +1777 -1803
- package/default-pages/neon_asteroids/page.json +14 -12
- package/default-pages/oregon_trail/chat-history.json +1 -0
- package/default-pages/oregon_trail/page.html +290 -307
- package/default-pages/oregon_trail/page.json +14 -12
- package/default-pages/solar_explorer/chat-history.json +1 -0
- package/default-pages/solar_explorer/page.html +1929 -1951
- package/default-pages/solar_explorer/page.json +14 -12
- package/default-pages/solar_tutorial/chat-history.json +1 -0
- package/default-pages/solar_tutorial/page.html +464 -478
- package/default-pages/solar_tutorial/page.json +12 -10
- package/default-pages/us_map/chat-history.json +1 -0
- package/default-pages/us_map/page.html +170 -193
- package/default-pages/us_map/page.json +14 -12
- package/default-pages/us_map/page.light.png +0 -0
- package/default-pages/us_map_1850/chat-history.json +1 -0
- package/default-pages/us_map_1850/page.html +302 -326
- package/default-pages/us_map_1850/page.json +14 -12
- package/default-pages/western_cities_1850/chat-history.json +1 -0
- package/default-pages/western_cities_1850/page.html +503 -527
- package/default-pages/western_cities_1850/page.json +14 -12
- package/default-themes/aurora-dawn.v3.css +15 -14
- package/default-themes/aurora-dusk.v3.css +26 -26
- package/default-themes/cosmos-dawn.v3.css +15 -14
- package/default-themes/cosmos-dusk.v3.css +26 -26
- package/default-themes/elemental-dawn.v3.css +200 -0
- package/default-themes/nebula-dawn.v3.css +15 -14
- package/default-themes/nebula-dusk.v3.css +24 -24
- package/default-themes/solar-flare-dawn.v3.css +15 -14
- package/default-themes/solar-flare-dusk.v3.css +26 -26
- package/dist/builders/anthropic.d.ts +26 -2
- package/dist/builders/anthropic.d.ts.map +1 -1
- package/dist/builders/anthropic.js +132 -31
- package/dist/builders/anthropic.js.map +1 -1
- package/dist/builders/claudecode.d.ts +13 -0
- package/dist/builders/claudecode.d.ts.map +1 -0
- package/dist/builders/claudecode.js +253 -0
- package/dist/builders/claudecode.js.map +1 -0
- package/dist/builders/index.d.ts +2 -1
- package/dist/builders/index.d.ts.map +1 -1
- package/dist/builders/index.js +8 -1
- package/dist/builders/index.js.map +1 -1
- package/dist/builders/openai.js +2 -1
- package/dist/builders/openai.js.map +1 -1
- package/dist/builders/types.d.ts +31 -7
- package/dist/builders/types.d.ts.map +1 -1
- package/dist/builders/types.js +60 -28
- package/dist/builders/types.js.map +1 -1
- package/dist/connectors/types.d.ts +8 -0
- package/dist/connectors/types.d.ts.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +13 -6
- package/dist/init.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +161 -14
- package/dist/migrations.js.map +1 -1
- package/dist/models/anthropic.d.ts +1 -0
- package/dist/models/anthropic.d.ts.map +1 -1
- package/dist/models/anthropic.js +129 -29
- package/dist/models/anthropic.js.map +1 -1
- package/dist/models/chainOfThought.d.ts.map +1 -1
- package/dist/models/chainOfThought.js +32 -19
- package/dist/models/chainOfThought.js.map +1 -1
- package/dist/models/index.d.ts +2 -2
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +2 -1
- package/dist/models/index.js.map +1 -1
- package/dist/models/providers.d.ts +1 -0
- package/dist/models/providers.d.ts.map +1 -1
- package/dist/models/providers.js +12 -4
- package/dist/models/providers.js.map +1 -1
- package/dist/models/types.d.ts +15 -1
- package/dist/models/types.d.ts.map +1 -1
- package/dist/models/types.js.map +1 -1
- package/dist/pages.d.ts +57 -8
- package/dist/pages.d.ts.map +1 -1
- package/dist/pages.js +258 -45
- package/dist/pages.js.map +1 -1
- package/dist/service/createCompletePrompt.d.ts.map +1 -1
- package/dist/service/createCompletePrompt.js +5 -0
- package/dist/service/createCompletePrompt.js.map +1 -1
- package/dist/service/mediaCache.d.ts +36 -0
- package/dist/service/mediaCache.d.ts.map +1 -0
- package/dist/service/mediaCache.js +182 -0
- package/dist/service/mediaCache.js.map +1 -0
- package/dist/service/pageValidator.d.ts +25 -0
- package/dist/service/pageValidator.d.ts.map +1 -0
- package/dist/service/pageValidator.js +315 -0
- package/dist/service/pageValidator.js.map +1 -0
- package/dist/service/server.d.ts.map +1 -1
- package/dist/service/server.js +4 -0
- package/dist/service/server.js.map +1 -1
- package/dist/service/sharedTableSchema.d.ts +73 -0
- package/dist/service/sharedTableSchema.d.ts.map +1 -0
- package/dist/service/sharedTableSchema.js +206 -0
- package/dist/service/sharedTableSchema.js.map +1 -0
- package/dist/service/transformPage.d.ts +49 -11
- package/dist/service/transformPage.d.ts.map +1 -1
- package/dist/service/transformPage.js +354 -241
- package/dist/service/transformPage.js.map +1 -1
- package/dist/service/useApiRoutes.d.ts.map +1 -1
- package/dist/service/useApiRoutes.js +288 -34
- package/dist/service/useApiRoutes.js.map +1 -1
- package/dist/service/useConnectorRoutes.d.ts.map +1 -1
- package/dist/service/useConnectorRoutes.js +170 -32
- package/dist/service/useConnectorRoutes.js.map +1 -1
- package/dist/service/useDataRoutes.d.ts.map +1 -1
- package/dist/service/useDataRoutes.js +59 -2
- package/dist/service/useDataRoutes.js.map +1 -1
- package/dist/service/useExtractRoutes.d.ts +4 -0
- package/dist/service/useExtractRoutes.d.ts.map +1 -0
- package/dist/service/useExtractRoutes.js +304 -0
- package/dist/service/useExtractRoutes.js.map +1 -0
- package/dist/service/usePageRoutes.d.ts +17 -0
- package/dist/service/usePageRoutes.d.ts.map +1 -1
- package/dist/service/usePageRoutes.js +1385 -483
- package/dist/service/usePageRoutes.js.map +1 -1
- package/dist/service/useSharedDataRoutes.d.ts.map +1 -1
- package/dist/service/useSharedDataRoutes.js +54 -2
- package/dist/service/useSharedDataRoutes.js.map +1 -1
- package/dist/settings.d.ts +27 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +40 -1
- package/dist/settings.js.map +1 -1
- package/dist/themes.d.ts +0 -5
- package/dist/themes.d.ts.map +1 -1
- package/dist/themes.js +3 -95
- package/dist/themes.js.map +1 -1
- package/migration-rules/v2-to-v3.md +277 -119
- package/package.json +5 -1
- package/{default-pages/application → required-pages/_shell}/page.html +56 -42
- package/required-pages/_shell/page.json +14 -0
- package/required-pages/_starters/page.html +534 -0
- package/required-pages/_starters/page.json +12 -0
- package/required-pages/builder/page.html +353 -43
- package/required-pages/builder/page.json +12 -10
- package/required-pages/pages/page.html +697 -924
- package/required-pages/pages/page.json +12 -10
- package/required-pages/settings/page.html +1879 -1753
- package/required-pages/settings/page.json +12 -10
- package/required-pages/synthos_apis/page.html +834 -845
- package/required-pages/synthos_apis/page.json +12 -10
- package/required-pages/synthos_scripts/page.html +74 -88
- package/required-pages/synthos_scripts/page.json +12 -10
- package/scripts/append-instructions.py +90 -0
- package/scripts/audit-instructions.py +76 -0
- package/scripts/cleanup-shell-markup.mjs +112 -0
- package/service-connectors/buffer/connector.json +46 -0
- package/service-connectors/canva/connector.json +67 -0
- package/service-connectors/elevenlabs/connector.json +1 -1
- package/src/builders/anthropic.ts +155 -30
- package/src/builders/claudecode.ts +310 -0
- package/src/builders/index.ts +7 -1
- package/src/builders/openai.ts +2 -1
- package/src/builders/types.ts +93 -32
- package/src/connectors/types.ts +8 -0
- package/src/init.ts +13 -7
- package/src/migrations.ts +187 -16
- package/src/models/anthropic.ts +140 -30
- package/src/models/chainOfThought.ts +33 -18
- package/src/models/index.ts +2 -2
- package/src/models/providers.ts +12 -3
- package/src/models/types.ts +21 -1
- package/src/pages.ts +271 -35
- package/src/service/createCompletePrompt.ts +6 -0
- package/src/service/mediaCache.ts +206 -0
- package/src/service/pageValidator.ts +337 -0
- package/src/service/server.ts +4 -0
- package/src/service/sharedTableSchema.ts +236 -0
- package/src/service/transformPage.ts +370 -260
- package/src/service/useApiRoutes.ts +282 -32
- package/src/service/useConnectorRoutes.ts +189 -34
- package/src/service/useDataRoutes.ts +198 -116
- package/src/service/useExtractRoutes.ts +331 -0
- package/src/service/usePageRoutes.ts +1411 -394
- package/src/service/useSharedDataRoutes.ts +184 -109
- package/src/settings.ts +65 -0
- package/src/themes.ts +78 -180
- package/starters/blank_starter/chat-history.json +1 -0
- package/starters/blank_starter/page.dark.png +0 -0
- package/starters/blank_starter/page.html +47 -0
- package/starters/blank_starter/page.json +13 -0
- package/starters/blank_starter/page.light.png +0 -0
- package/starters/calculator_starter/chat-history.json +1 -0
- package/starters/calculator_starter/page.dark.png +0 -0
- package/starters/calculator_starter/page.html +232 -0
- package/starters/calculator_starter/page.json +13 -0
- package/starters/calculator_starter/page.light.png +0 -0
- package/starters/calendar_starter/chat-history.json +1 -0
- package/starters/calendar_starter/page.dark.png +0 -0
- package/starters/calendar_starter/page.html +495 -0
- package/starters/calendar_starter/page.json +13 -0
- package/starters/calendar_starter/page.light.png +0 -0
- package/starters/chat_starter/chat-history.json +1 -0
- package/starters/chat_starter/page.dark.png +0 -0
- package/starters/chat_starter/page.html +351 -0
- package/starters/chat_starter/page.json +13 -0
- package/starters/chat_starter/page.light.png +0 -0
- package/starters/checklist_starter/chat-history.json +1 -0
- package/starters/checklist_starter/page.dark.png +0 -0
- package/starters/checklist_starter/page.html +437 -0
- package/starters/checklist_starter/page.json +13 -0
- package/starters/checklist_starter/page.light.png +0 -0
- package/starters/dashboard_starter/chat-history.json +1 -0
- package/starters/dashboard_starter/page.dark.png +0 -0
- package/starters/dashboard_starter/page.html +195 -0
- package/starters/dashboard_starter/page.json +13 -0
- package/starters/dashboard_starter/page.light.png +0 -0
- package/starters/form_starter/chat-history.json +1 -0
- package/starters/form_starter/page.dark.png +0 -0
- package/starters/form_starter/page.html +313 -0
- package/starters/form_starter/page.json +13 -0
- package/starters/form_starter/page.light.png +0 -0
- package/starters/gallery_starter/chat-history.json +1 -0
- package/starters/gallery_starter/page.dark.png +0 -0
- package/starters/gallery_starter/page.html +418 -0
- package/starters/gallery_starter/page.json +13 -0
- package/starters/gallery_starter/page.light.png +0 -0
- package/starters/generator_starter/chat-history.json +1 -0
- package/starters/generator_starter/page.dark.png +0 -0
- package/starters/generator_starter/page.html +261 -0
- package/starters/generator_starter/page.json +13 -0
- package/starters/generator_starter/page.light.png +0 -0
- package/starters/index.html +538 -0
- package/starters/kanban_starter/chat-history.json +1 -0
- package/starters/kanban_starter/page.dark.png +0 -0
- package/starters/kanban_starter/page.html +432 -0
- package/starters/kanban_starter/page.json +13 -0
- package/starters/kanban_starter/page.light.png +0 -0
- package/starters/presentation_builder/chat-history.json +1 -0
- package/starters/presentation_builder/page.dark.png +0 -0
- package/starters/presentation_builder/page.html +970 -0
- package/starters/presentation_builder/page.json +15 -0
- package/starters/presentation_builder/page.light.png +0 -0
- package/starters/presentation_builder/presentation_voice/voice_config.json +9 -0
- package/starters/pulse_starter/chat-history.json +1 -0
- package/starters/pulse_starter/page.dark.png +0 -0
- package/starters/pulse_starter/page.html +698 -0
- package/starters/pulse_starter/page.json +13 -0
- package/starters/pulse_starter/page.light.png +0 -0
- package/starters/quiz_starter/chat-history.json +1 -0
- package/starters/quiz_starter/page.dark.png +0 -0
- package/starters/quiz_starter/page.html +292 -0
- package/starters/quiz_starter/page.json +13 -0
- package/starters/quiz_starter/page.light.png +0 -0
- package/starters/reference_starter/chat-history.json +1 -0
- package/starters/reference_starter/page.dark.png +0 -0
- package/starters/reference_starter/page.html +250 -0
- package/starters/reference_starter/page.json +13 -0
- package/starters/reference_starter/page.light.png +0 -0
- package/starters/retro_game_starter/chat-history.json +1 -0
- package/starters/retro_game_starter/page.dark.png +0 -0
- package/{default-pages → starters}/retro_game_starter/page.html +1281 -1308
- package/starters/retro_game_starter/page.json +15 -0
- package/starters/retro_game_starter/page.light.png +0 -0
- package/starters/roster_starter/chat-history.json +1 -0
- package/starters/roster_starter/page.dark.png +0 -0
- package/starters/roster_starter/page.html +600 -0
- package/starters/roster_starter/page.json +13 -0
- package/starters/roster_starter/page.light.png +0 -0
- package/starters/server.js +182 -0
- package/starters/start.cmd +1 -0
- package/starters/timeline_starter/chat-history.json +1 -0
- package/starters/timeline_starter/page.dark.png +0 -0
- package/starters/timeline_starter/page.html +446 -0
- package/starters/timeline_starter/page.json +13 -0
- package/starters/timeline_starter/page.light.png +0 -0
- package/starters/tutorial_starter/chat-history.json +1 -0
- package/starters/tutorial_starter/page.dark.png +0 -0
- package/starters/tutorial_starter/page.html +283 -0
- package/starters/tutorial_starter/page.json +13 -0
- package/starters/tutorial_starter/page.light.png +0 -0
- package/static-files/agent.v3.js +122 -0
- package/static-files/connector.v3.js +48 -0
- package/static-files/extract.v3.js +188 -0
- package/static-files/helpers.v3.js +50 -6
- package/static-files/page-bridge.js +114 -0
- package/static-files/page.v3.js +1292 -1290
- package/static-files/script.v3.js +32 -0
- package/static-files/server.v3.js +89 -0
- package/static-files/shell-bridge.v3.js +174 -0
- package/static-files/shell-modals.v3.js +521 -0
- package/static-files/{shell.css → shell.v3.css} +271 -22
- package/static-files/shell.v3.js +1865 -0
- package/static-files/storage.v3.js +176 -0
- package/tests/anthropic.spec.ts +42 -7
- package/tests/builders.spec.ts +72 -4
- package/tests/pageValidator.spec.ts +548 -0
- package/tests/profiles.spec.ts +122 -0
- package/tests/providers.spec.ts +1 -1
- package/tests/sharedTableSchema.spec.ts +242 -0
- package/tests/transformPage.spec.ts +62 -81
- package/default-pages/application/page.json +0 -10
- package/default-pages/retro_game_starter/page.json +0 -12
- package/default-pages/sidebar_page/page.html +0 -51
- package/default-pages/sidebar_page/page.json +0 -10
- package/default-pages/two-panel_page/page.html +0 -68
- package/default-pages/two-panel_page/page.json +0 -10
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createClaudeCodeBuilder = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const transformPage_1 = require("../service/transformPage");
|
|
6
|
+
const anthropic_1 = require("./anthropic");
|
|
7
|
+
const types_1 = require("./types");
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Helpers
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
/** Strip ANSI escape codes from CLI output. */
|
|
12
|
+
function stripAnsi(text) {
|
|
13
|
+
// eslint-disable-next-line no-control-regex
|
|
14
|
+
return text.replace(/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g, '');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Spawn the Claude CLI with a prompt on stdin and capture stdout.
|
|
18
|
+
* Returns the raw text output (ANSI-stripped).
|
|
19
|
+
*/
|
|
20
|
+
function runClaude(prompt, options) {
|
|
21
|
+
const cmd = options.commandPath ?? 'claude';
|
|
22
|
+
const args = ['-p', '--output-format', 'text'];
|
|
23
|
+
if (options.model) {
|
|
24
|
+
args.push('--model', options.model);
|
|
25
|
+
}
|
|
26
|
+
if (options.extraFlags) {
|
|
27
|
+
args.push(...options.extraFlags);
|
|
28
|
+
}
|
|
29
|
+
const timeout = options.timeout ?? 120_000;
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
const child = (0, child_process_1.spawn)(cmd, args, {
|
|
32
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
33
|
+
env: {
|
|
34
|
+
...process.env,
|
|
35
|
+
FORCE_COLOR: '0',
|
|
36
|
+
CLAUDECODE: undefined, // prevent recursive detection
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
let stdout = '';
|
|
40
|
+
let stderr = '';
|
|
41
|
+
child.stdout.on('data', (chunk) => { stdout += chunk.toString(); });
|
|
42
|
+
child.stderr.on('data', (chunk) => { stderr += chunk.toString(); });
|
|
43
|
+
// EOF protection — swallow EPIPE if the child closes stdin early
|
|
44
|
+
child.stdin.on('error', (err) => {
|
|
45
|
+
if (err.code !== 'EPIPE' && err.code !== 'EOF')
|
|
46
|
+
throw err;
|
|
47
|
+
});
|
|
48
|
+
// Timeout handling: SIGTERM → 5 s → SIGKILL
|
|
49
|
+
const timer = setTimeout(() => {
|
|
50
|
+
child.kill('SIGTERM');
|
|
51
|
+
setTimeout(() => {
|
|
52
|
+
if (!child.killed)
|
|
53
|
+
child.kill('SIGKILL');
|
|
54
|
+
}, 5_000);
|
|
55
|
+
}, timeout);
|
|
56
|
+
child.on('close', (code) => {
|
|
57
|
+
clearTimeout(timer);
|
|
58
|
+
resolve({
|
|
59
|
+
stdout: stripAnsi(stdout),
|
|
60
|
+
stderr: stripAnsi(stderr),
|
|
61
|
+
exitCode: code ?? 1,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
child.on('error', (err) => {
|
|
65
|
+
clearTimeout(timer);
|
|
66
|
+
reject(err);
|
|
67
|
+
});
|
|
68
|
+
// Pipe the prompt via stdin
|
|
69
|
+
child.stdin.write(prompt, () => {
|
|
70
|
+
child.stdin.end();
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// Spawn + retry wrapper
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
/**
|
|
78
|
+
* Execute the Claude CLI and return trimmed output.
|
|
79
|
+
* Retries once on empty output with a simplified prompt prefix.
|
|
80
|
+
*/
|
|
81
|
+
async function executeWithRetry(prompt, options) {
|
|
82
|
+
const attempt = async (p) => {
|
|
83
|
+
const result = await runClaude(p, options);
|
|
84
|
+
// Handle process-level failures
|
|
85
|
+
if (result.exitCode !== 0 && !result.stdout.trim()) {
|
|
86
|
+
if (result.stderr.includes('ENOENT') || result.stderr.includes('not found') || result.stderr.includes('not recognized')) {
|
|
87
|
+
throw new Error('Claude CLI not found. Install it with: npm install -g @anthropic-ai/claude-code');
|
|
88
|
+
}
|
|
89
|
+
throw new Error(result.stderr || `Claude CLI exited with code ${result.exitCode}`);
|
|
90
|
+
}
|
|
91
|
+
return result.stdout.trim();
|
|
92
|
+
};
|
|
93
|
+
// First attempt
|
|
94
|
+
const output = await attempt(prompt);
|
|
95
|
+
if (output)
|
|
96
|
+
return output;
|
|
97
|
+
// Retry once with a nudge prepended to the prompt
|
|
98
|
+
console.warn('[ClaudeCode] Empty response — retrying once');
|
|
99
|
+
const retryOutput = await attempt('IMPORTANT: You must produce output. Do not return an empty response.\n\n' + prompt);
|
|
100
|
+
if (retryOutput)
|
|
101
|
+
return retryOutput;
|
|
102
|
+
throw new Error('Claude CLI returned empty output after retry');
|
|
103
|
+
}
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// Change-op validation
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
const VALID_OPS = new Set(['update', 'replace', 'delete', 'insert', 'style-element', 'search-replace', 'search-insert']);
|
|
108
|
+
/**
|
|
109
|
+
* Validate a single change operation against the expected schema.
|
|
110
|
+
* Returns true if the op is structurally valid, false otherwise.
|
|
111
|
+
*/
|
|
112
|
+
function isValidChangeOp(op) {
|
|
113
|
+
if (!op || typeof op !== 'object')
|
|
114
|
+
return false;
|
|
115
|
+
const o = op;
|
|
116
|
+
if (typeof o.op !== 'string' || !VALID_OPS.has(o.op))
|
|
117
|
+
return false;
|
|
118
|
+
switch (o.op) {
|
|
119
|
+
case 'update':
|
|
120
|
+
case 'replace':
|
|
121
|
+
return typeof o.nodeId === 'string' && typeof o.html === 'string';
|
|
122
|
+
case 'delete':
|
|
123
|
+
return typeof o.nodeId === 'string';
|
|
124
|
+
case 'insert':
|
|
125
|
+
return typeof o.parentId === 'string'
|
|
126
|
+
&& typeof o.position === 'string'
|
|
127
|
+
&& typeof o.html === 'string';
|
|
128
|
+
case 'style-element':
|
|
129
|
+
return typeof o.nodeId === 'string' && typeof o.style === 'string';
|
|
130
|
+
case 'search-replace':
|
|
131
|
+
return typeof o.nodeId === 'string'
|
|
132
|
+
&& typeof o.search === 'string'
|
|
133
|
+
&& typeof o.replace === 'string';
|
|
134
|
+
case 'search-insert':
|
|
135
|
+
return typeof o.nodeId === 'string'
|
|
136
|
+
&& typeof o.after === 'string'
|
|
137
|
+
&& typeof o.content === 'string';
|
|
138
|
+
default:
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Filter a list of change ops, keeping only valid ones.
|
|
144
|
+
* Logs warnings for any skipped ops.
|
|
145
|
+
*/
|
|
146
|
+
function filterValidOps(ops) {
|
|
147
|
+
const valid = [];
|
|
148
|
+
for (let i = 0; i < ops.length; i++) {
|
|
149
|
+
const op = ops[i];
|
|
150
|
+
if (isValidChangeOp(op)) {
|
|
151
|
+
valid.push(op);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
console.warn(`[ClaudeCode] Skipping invalid change op at index ${i}:`, JSON.stringify(ops[i]));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return valid;
|
|
158
|
+
}
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
// Chat mode heuristic
|
|
161
|
+
// ---------------------------------------------------------------------------
|
|
162
|
+
/**
|
|
163
|
+
* Simple heuristic to detect chat/question messages.
|
|
164
|
+
* Per spec: message ends with `?` and is under 100 characters.
|
|
165
|
+
*/
|
|
166
|
+
function isChatQuestion(message) {
|
|
167
|
+
const trimmed = message.trim();
|
|
168
|
+
return trimmed.length < 100 && trimmed.endsWith('?');
|
|
169
|
+
}
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
// Builder factory
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
173
|
+
function createClaudeCodeBuilder(userInstructions, productName, options) {
|
|
174
|
+
const name = productName ?? 'SynthOS';
|
|
175
|
+
const opts = options ?? {};
|
|
176
|
+
return {
|
|
177
|
+
async run(currentPage, additionalSections, userMessage, newBuild, _attachments) {
|
|
178
|
+
try {
|
|
179
|
+
const chatMode = !newBuild && isChatQuestion(userMessage);
|
|
180
|
+
let prompt;
|
|
181
|
+
if (chatMode) {
|
|
182
|
+
// -- Chat prompt: no change-ops, no node annotations --
|
|
183
|
+
const contextParts = [
|
|
184
|
+
`<CURRENT_PAGE>\n${currentPage.content}\n</CURRENT_PAGE>`,
|
|
185
|
+
];
|
|
186
|
+
for (const section of additionalSections) {
|
|
187
|
+
if (section.content) {
|
|
188
|
+
contextParts.push(`${section.title}\n${section.content}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
prompt = `You are ${name}, a helpful assistant. Answer the user's question about their page.\n\n`
|
|
192
|
+
+ contextParts.join('\n\n')
|
|
193
|
+
+ `\n\n<USER_MESSAGE>\n${userMessage}\n</USER_MESSAGE>`;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// -- Build/change prompt (same structure as before) --
|
|
197
|
+
const systemParts = [
|
|
198
|
+
`${currentPage.title}\n${currentPage.content}`,
|
|
199
|
+
];
|
|
200
|
+
for (const section of additionalSections) {
|
|
201
|
+
if (section.content) {
|
|
202
|
+
systemParts.push(`${section.title}\n${section.content}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const systemContent = systemParts.join('\n\n');
|
|
206
|
+
const instructionParts = [];
|
|
207
|
+
if (userInstructions?.trim()) {
|
|
208
|
+
instructionParts.push(userInstructions);
|
|
209
|
+
}
|
|
210
|
+
for (const section of additionalSections) {
|
|
211
|
+
if (section.instructions?.trim()) {
|
|
212
|
+
instructionParts.push(section.instructions);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
instructionParts.push((0, transformPage_1.getTransformInstr)(name));
|
|
216
|
+
instructionParts.push(types_1.CHANGE_OPS_FORMAT_INSTRUCTION);
|
|
217
|
+
const instructions = instructionParts.filter(s => s.trim() !== '').join('\n');
|
|
218
|
+
prompt = `${systemContent}\n\n<USER_MESSAGE>\n${userMessage}\n\n<INSTRUCTIONS>\n${instructions}`;
|
|
219
|
+
}
|
|
220
|
+
// -- Spawn claude CLI (with retry on empty output) --
|
|
221
|
+
const output = await executeWithRetry(prompt, opts);
|
|
222
|
+
// Chat mode always returns a reply — skip change-ops parsing
|
|
223
|
+
if (chatMode) {
|
|
224
|
+
return { kind: 'reply', text: output };
|
|
225
|
+
}
|
|
226
|
+
// Try to parse as builder response (JSON change ops or reply)
|
|
227
|
+
const parsed = (0, anthropic_1.parseBuilderResponse)(output);
|
|
228
|
+
// Validate individual change ops — skip invalid ones
|
|
229
|
+
if (parsed.kind === 'transforms') {
|
|
230
|
+
const validated = filterValidOps(parsed.changes);
|
|
231
|
+
if (validated.length === 0) {
|
|
232
|
+
// All ops were invalid — treat the raw output as a text reply
|
|
233
|
+
return { kind: 'reply', text: output };
|
|
234
|
+
}
|
|
235
|
+
return { kind: 'transforms', changes: validated };
|
|
236
|
+
}
|
|
237
|
+
return parsed;
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
// Spawn failure (e.g. ENOENT when claude is not on PATH)
|
|
241
|
+
if (err instanceof Error && 'code' in err && err.code === 'ENOENT') {
|
|
242
|
+
return {
|
|
243
|
+
kind: 'error',
|
|
244
|
+
error: new Error('Claude CLI not found. Install it with: npm install -g @anthropic-ai/claude-code'),
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
return { kind: 'error', error: err instanceof Error ? err : new Error(String(err)) };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
exports.createClaudeCodeBuilder = createClaudeCodeBuilder;
|
|
253
|
+
//# sourceMappingURL=claudecode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudecode.js","sourceRoot":"","sources":["../../src/builders/claudecode.ts"],"names":[],"mappings":"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"}
|
package/dist/builders/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ProviderName, completePrompt } from '../models';
|
|
2
2
|
import { AnthropicBuilderOptions } from './anthropic';
|
|
3
3
|
import { Builder } from './types';
|
|
4
|
-
export { ContextSection, BuilderResult, Builder, Attachment } from './types';
|
|
4
|
+
export { ContextSection, SectionMode, BuilderResult, Builder, Attachment } from './types';
|
|
5
5
|
export { createAnthropicBuilder, AnthropicBuilderOptions } from './anthropic';
|
|
6
6
|
export { createOpenAIBuilder } from './openai';
|
|
7
7
|
export { createFireworksAIBuilder } from './fireworksai';
|
|
8
|
+
export { createClaudeCodeBuilder, ClaudeCodeBuilderOptions } from './claudecode';
|
|
8
9
|
export { parseBuilderResponse } from './anthropic';
|
|
9
10
|
/**
|
|
10
11
|
* Factory that creates a provider-specific builder.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builders/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAA0B,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builders/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAA0B,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAI9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,wBAAgB,aAAa,CACzB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,cAAc,EACxB,gBAAgB,CAAC,EAAE,MAAM,EACzB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,uBAAuB,GAClC,OAAO,CAeT"}
|
package/dist/builders/index.js
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createBuilder = exports.parseBuilderResponse = exports.createFireworksAIBuilder = exports.createOpenAIBuilder = exports.createAnthropicBuilder = void 0;
|
|
3
|
+
exports.createBuilder = exports.parseBuilderResponse = exports.createClaudeCodeBuilder = exports.createFireworksAIBuilder = exports.createOpenAIBuilder = exports.createAnthropicBuilder = void 0;
|
|
4
4
|
const anthropic_1 = require("./anthropic");
|
|
5
5
|
const openai_1 = require("./openai");
|
|
6
6
|
const fireworksai_1 = require("./fireworksai");
|
|
7
|
+
const claudecode_1 = require("./claudecode");
|
|
7
8
|
var anthropic_2 = require("./anthropic");
|
|
8
9
|
Object.defineProperty(exports, "createAnthropicBuilder", { enumerable: true, get: function () { return anthropic_2.createAnthropicBuilder; } });
|
|
9
10
|
var openai_2 = require("./openai");
|
|
10
11
|
Object.defineProperty(exports, "createOpenAIBuilder", { enumerable: true, get: function () { return openai_2.createOpenAIBuilder; } });
|
|
11
12
|
var fireworksai_2 = require("./fireworksai");
|
|
12
13
|
Object.defineProperty(exports, "createFireworksAIBuilder", { enumerable: true, get: function () { return fireworksai_2.createFireworksAIBuilder; } });
|
|
14
|
+
var claudecode_2 = require("./claudecode");
|
|
15
|
+
Object.defineProperty(exports, "createClaudeCodeBuilder", { enumerable: true, get: function () { return claudecode_2.createClaudeCodeBuilder; } });
|
|
13
16
|
var anthropic_3 = require("./anthropic");
|
|
14
17
|
Object.defineProperty(exports, "parseBuilderResponse", { enumerable: true, get: function () { return anthropic_3.parseBuilderResponse; } });
|
|
15
18
|
/**
|
|
@@ -23,6 +26,10 @@ function createBuilder(provider, complete, userInstructions, productName, option
|
|
|
23
26
|
return (0, openai_1.createOpenAIBuilder)(complete, userInstructions, productName);
|
|
24
27
|
case 'FireworksAI':
|
|
25
28
|
return (0, fireworksai_1.createFireworksAIBuilder)(complete, userInstructions, productName);
|
|
29
|
+
case 'ClaudeCode':
|
|
30
|
+
return (0, claudecode_1.createClaudeCodeBuilder)(userInstructions, productName, {
|
|
31
|
+
model: options?.model,
|
|
32
|
+
});
|
|
26
33
|
default:
|
|
27
34
|
throw new Error(`Unknown provider: ${provider}`);
|
|
28
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/builders/index.ts"],"names":[],"mappings":";;;AACA,2CAA8E;AAC9E,qCAA+C;AAC/C,+CAAyD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/builders/index.ts"],"names":[],"mappings":";;;AACA,2CAA8E;AAC9E,qCAA+C;AAC/C,+CAAyD;AACzD,6CAAuD;AAIvD,yCAA8E;AAArE,mHAAA,sBAAsB,OAAA;AAC/B,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA;AAC5B,6CAAyD;AAAhD,uHAAA,wBAAwB,OAAA;AACjC,2CAAiF;AAAxE,qHAAA,uBAAuB,OAAA;AAChC,yCAAmD;AAA1C,iHAAA,oBAAoB,OAAA;AAE7B;;GAEG;AACH,SAAgB,aAAa,CACzB,QAAsB,EACtB,QAAwB,EACxB,gBAAyB,EACzB,WAAoB,EACpB,OAAiC;IAEjC,QAAQ,QAAQ,EAAE;QACd,KAAK,WAAW;YACZ,OAAO,IAAA,kCAAsB,EAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACpF,KAAK,QAAQ;YACT,OAAO,IAAA,4BAAmB,EAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACxE,KAAK,aAAa;YACd,OAAO,IAAA,sCAAwB,EAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;QAC7E,KAAK,YAAY;YACb,OAAO,IAAA,oCAAuB,EAAC,gBAAgB,EAAE,WAAW,EAAE;gBAC1D,KAAK,EAAE,OAAO,EAAE,KAAK;aACxB,CAAC,CAAC;QACP;YACI,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;KACxD;AACL,CAAC;AArBD,sCAqBC"}
|
package/dist/builders/openai.js
CHANGED
|
@@ -76,7 +76,8 @@ function parseOpenAIResponse(raw) {
|
|
|
76
76
|
try {
|
|
77
77
|
const parsed = JSON.parse(raw);
|
|
78
78
|
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed) && Array.isArray(parsed.changes)) {
|
|
79
|
-
|
|
79
|
+
const message = typeof parsed.message === 'string' ? parsed.message : undefined;
|
|
80
|
+
return { kind: 'transforms', changes: parsed.changes, message };
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/builders/openai.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/builders/openai.ts"],"names":[],"mappings":"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"}
|
package/dist/builders/types.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { ChangeList } from '../service/transformPage';
|
|
2
|
+
import { ToolDefinition, ToolHandler } from '../models/types';
|
|
2
3
|
/**
|
|
3
4
|
* Text instruction that tells the model to return a JSON array of change operations.
|
|
4
5
|
* Append this to <INSTRUCTIONS> for builders that don't support structured outputs.
|
|
5
6
|
*/
|
|
6
|
-
export declare const CHANGE_OPS_FORMAT_INSTRUCTION = "Return a JSON array of change operations to apply to the page. Do NOT return the full HTML page.\n\nEach operation must be one of:\n{ \"op\": \"update\", \"nodeId\": \"<data-
|
|
7
|
+
export declare const CHANGE_OPS_FORMAT_INSTRUCTION = "Return a JSON object with two fields: \"message\" and \"changes\".\n\n\"message\" is a brief (1 sentence) message to the user explaining what you changed. It is shown in the chat feed as the assistant's reply \u2014 write it directly to the user, not a description of the JSON.\n\"changes\" is an array of change operations to apply to the page. Do NOT return the full HTML page.\n\nEach change operation must be one of:\n{ \"op\": \"update\", \"nodeId\": \"<data-nid>\", \"html\": \"<new innerHTML>\" }\n \u2014 replaces the innerHTML of the target element\n\n{ \"op\": \"replace\", \"nodeId\": \"<data-nid>\", \"html\": \"<new outerHTML>\" }\n \u2014 replaces the entire element (outerHTML) with new markup\n\n{ \"op\": \"delete\", \"nodeId\": \"<data-nid>\" }\n \u2014 removes the element from the page\n\n{ \"op\": \"insert\", \"parentId\": \"<data-nid>\", \"position\": \"prepend\"|\"append\"|\"before\"|\"after\", \"html\": \"<new element HTML>\" }\n \u2014 inserts new HTML relative to the parent element\n\n{ \"op\": \"style-element\", \"nodeId\": \"<data-nid>\", \"style\": \"<css style string>\" }\n \u2014 sets the style attribute of the target element (must be unlocked)\n\n{ \"op\": \"search-replace\", \"nodeId\": \"<data-nid>\", \"search\": \"<exact text to find>\", \"replace\": \"<replacement text>\" }\n \u2014 finds exact text within a script/style block and replaces it. Use empty string for replace to delete.\n\n{ \"op\": \"search-insert\", \"nodeId\": \"<data-nid>\", \"after\": \"<exact text to find>\", \"content\": \"<new lines to insert>\" }\n \u2014 inserts new content immediately after the matched text in a script/style block.\n\nFor partial edits to large scripts/styles, use search-replace or search-insert instead of\nreplacing the entire block with update.\nCopy the search/after text exactly as it appears in the source.\nWhen making multiple edits to the same block, ensure each search string targets distinct text.\nTo delete code, use search-replace with an empty replace string.\n\nReturn ONLY the JSON object. Example:\n{\n \"message\": \"Changed the heading and added a new notice.\",\n \"changes\": [\n { \"op\": \"update\", \"nodeId\": \"5\", \"html\": \"<p>Hello world</p>\" },\n { \"op\": \"insert\", \"parentId\": \"3\", \"position\": \"append\", \"html\": \"<div class=\\\"msg\\\">New message</div>\" }\n ]\n}";
|
|
7
8
|
/**
|
|
8
|
-
* JSON schema
|
|
9
|
-
*
|
|
9
|
+
* JSON schema for Anthropic structured outputs.
|
|
10
|
+
* Wraps the change-ops array in `{ message, changes }` so the model always
|
|
11
|
+
* emits a user-facing message alongside its page changes.
|
|
10
12
|
*/
|
|
11
13
|
export declare const CHANGE_OPS_SCHEMA: Record<string, unknown>;
|
|
12
14
|
/**
|
|
@@ -22,20 +24,42 @@ export declare const CHANGE_OPS_SCHEMA_NO_RANGED: Record<string, unknown>;
|
|
|
22
24
|
export declare const CHANGE_OPS_FORMAT_INSTRUCTION_NO_RANGED = "For script and style blocks, use \"update\" to replace the full innerHTML or \"replace\" to replace the full outerHTML. Do NOT use partial search-replace edits.";
|
|
23
25
|
/**
|
|
24
26
|
* OpenAI structured outputs require a root-level object.
|
|
25
|
-
*
|
|
27
|
+
* Matches the Anthropic shape: { message, changes }.
|
|
26
28
|
*/
|
|
27
29
|
export declare const OPENAI_CHANGE_OPS_SCHEMA: Record<string, unknown>;
|
|
30
|
+
export type SectionMode =
|
|
31
|
+
/** Always rendered in full. Never sketched. Used for small/universally relevant sections. */
|
|
32
|
+
'always-full'
|
|
33
|
+
/** Sketched by default; rendered in full when the classifier expands it. */
|
|
34
|
+
| 'classifier-decides'
|
|
35
|
+
/** Skipped entirely when sketch === null; otherwise sketched/expanded like classifier-decides. */
|
|
36
|
+
| 'always-omit-when-empty';
|
|
28
37
|
export interface ContextSection {
|
|
29
|
-
/** Section title, e.g. "<CURRENT_PAGE>", "<SERVER_SCRIPTS>" */
|
|
38
|
+
/** Section title, e.g. "<CURRENT_PAGE>", "<SERVER_SCRIPTS>". Used as the classifier expand-set key. */
|
|
30
39
|
title: string;
|
|
31
|
-
/**
|
|
40
|
+
/** Full render — what the model sees when this section is expanded. */
|
|
32
41
|
content: string;
|
|
42
|
+
/**
|
|
43
|
+
* Compact render — what the classifier sees, and what the model sees when this
|
|
44
|
+
* section is NOT expanded. `null` means "omit entirely from the prompt when not
|
|
45
|
+
* expanded" (used by always-omit-when-empty sections that have nothing to say,
|
|
46
|
+
* or by always-full sections where sketch is irrelevant).
|
|
47
|
+
*/
|
|
48
|
+
sketch: string | null;
|
|
49
|
+
/** Default behavior for this section. Producer-declared. */
|
|
50
|
+
mode: SectionMode;
|
|
51
|
+
/**
|
|
52
|
+
* If true, this section is always rendered in full on the initial page build,
|
|
53
|
+
* regardless of classifier output. Defaults to false.
|
|
54
|
+
*/
|
|
55
|
+
forceFullOnInitial?: boolean;
|
|
33
56
|
/** How the model should work with this section (appended to instructions) */
|
|
34
57
|
instructions: string;
|
|
35
58
|
}
|
|
36
59
|
export type BuilderResult = {
|
|
37
60
|
kind: 'transforms';
|
|
38
61
|
changes: ChangeList;
|
|
62
|
+
message?: string;
|
|
39
63
|
} | {
|
|
40
64
|
kind: 'reply';
|
|
41
65
|
text: string;
|
|
@@ -49,6 +73,6 @@ export interface Attachment {
|
|
|
49
73
|
name?: string;
|
|
50
74
|
}
|
|
51
75
|
export interface Builder {
|
|
52
|
-
run(currentPage: ContextSection, additionalSections: ContextSection[], userMessage: string, newBuild: boolean, attachments?: Attachment[]): Promise<BuilderResult>;
|
|
76
|
+
run(currentPage: ContextSection, additionalSections: ContextSection[], userMessage: string, newBuild: boolean, attachments?: Attachment[], tools?: ToolDefinition[], toolHandlers?: Record<string, ToolHandler>, onToolCall?: (names: string[]) => void): Promise<BuilderResult>;
|
|
53
77
|
}
|
|
54
78
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/builders/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/builders/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAM9D;;;GAGG;AACH,eAAO,MAAM,6BAA6B,00EAwCxC,CAAC;AAuJH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAQrD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAQ/D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uCAAuC,qKAAiK,CAAC;AAEtN;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAQ5D,CAAC;AAMF,MAAM,MAAM,WAAW;AACnB,6FAA6F;AAC3F,aAAa;AACf,4EAA4E;GAC1E,oBAAoB;AACtB,kGAAkG;GAChG,wBAAwB,CAAC;AAE/B,MAAM,WAAW,cAAc;IAC3B,uGAAuG;IACvG,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,4DAA4D;IAC5D,IAAI,EAAE,WAAW,CAAC;IAClB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;CACxB;AAMD,MAAM,MAAM,aAAa,GACnB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAMtC,MAAM,WAAW,UAAU;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,OAAO;IACpB,GAAG,CACC,WAAW,EAAE,cAAc,EAC3B,kBAAkB,EAAE,cAAc,EAAE,EACpC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,EACjB,WAAW,CAAC,EAAE,UAAU,EAAE,EAC1B,KAAK,CAAC,EAAE,cAAc,EAAE,EACxB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAC1C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,GACvC,OAAO,CAAC,aAAa,CAAC,CAAC;CAC7B"}
|
package/dist/builders/types.js
CHANGED
|
@@ -8,28 +8,31 @@ exports.OPENAI_CHANGE_OPS_SCHEMA = exports.CHANGE_OPS_FORMAT_INSTRUCTION_NO_RANG
|
|
|
8
8
|
* Text instruction that tells the model to return a JSON array of change operations.
|
|
9
9
|
* Append this to <INSTRUCTIONS> for builders that don't support structured outputs.
|
|
10
10
|
*/
|
|
11
|
-
exports.CHANGE_OPS_FORMAT_INSTRUCTION = `Return a JSON
|
|
11
|
+
exports.CHANGE_OPS_FORMAT_INSTRUCTION = `Return a JSON object with two fields: "message" and "changes".
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
"message" is a brief (1 sentence) message to the user explaining what you changed. It is shown in the chat feed as the assistant's reply — write it directly to the user, not a description of the JSON.
|
|
14
|
+
"changes" is an array of change operations to apply to the page. Do NOT return the full HTML page.
|
|
15
|
+
|
|
16
|
+
Each change operation must be one of:
|
|
17
|
+
{ "op": "update", "nodeId": "<data-nid>", "html": "<new innerHTML>" }
|
|
15
18
|
— replaces the innerHTML of the target element
|
|
16
19
|
|
|
17
|
-
{ "op": "replace", "nodeId": "<data-
|
|
20
|
+
{ "op": "replace", "nodeId": "<data-nid>", "html": "<new outerHTML>" }
|
|
18
21
|
— replaces the entire element (outerHTML) with new markup
|
|
19
22
|
|
|
20
|
-
{ "op": "delete", "nodeId": "<data-
|
|
23
|
+
{ "op": "delete", "nodeId": "<data-nid>" }
|
|
21
24
|
— removes the element from the page
|
|
22
25
|
|
|
23
|
-
{ "op": "insert", "parentId": "<data-
|
|
26
|
+
{ "op": "insert", "parentId": "<data-nid>", "position": "prepend"|"append"|"before"|"after", "html": "<new element HTML>" }
|
|
24
27
|
— inserts new HTML relative to the parent element
|
|
25
28
|
|
|
26
|
-
{ "op": "style-element", "nodeId": "<data-
|
|
29
|
+
{ "op": "style-element", "nodeId": "<data-nid>", "style": "<css style string>" }
|
|
27
30
|
— sets the style attribute of the target element (must be unlocked)
|
|
28
31
|
|
|
29
|
-
{ "op": "search-replace", "nodeId": "<data-
|
|
32
|
+
{ "op": "search-replace", "nodeId": "<data-nid>", "search": "<exact text to find>", "replace": "<replacement text>" }
|
|
30
33
|
— finds exact text within a script/style block and replaces it. Use empty string for replace to delete.
|
|
31
34
|
|
|
32
|
-
{ "op": "search-insert", "nodeId": "<data-
|
|
35
|
+
{ "op": "search-insert", "nodeId": "<data-nid>", "after": "<exact text to find>", "content": "<new lines to insert>" }
|
|
33
36
|
— inserts new content immediately after the matched text in a script/style block.
|
|
34
37
|
|
|
35
38
|
For partial edits to large scripts/styles, use search-replace or search-insert instead of
|
|
@@ -38,19 +41,23 @@ Copy the search/after text exactly as it appears in the source.
|
|
|
38
41
|
When making multiple edits to the same block, ensure each search string targets distinct text.
|
|
39
42
|
To delete code, use search-replace with an empty replace string.
|
|
40
43
|
|
|
41
|
-
Return ONLY the JSON
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
Return ONLY the JSON object. Example:
|
|
45
|
+
{
|
|
46
|
+
"message": "Changed the heading and added a new notice.",
|
|
47
|
+
"changes": [
|
|
48
|
+
{ "op": "update", "nodeId": "5", "html": "<p>Hello world</p>" },
|
|
49
|
+
{ "op": "insert", "parentId": "3", "position": "append", "html": "<div class=\\"msg\\">New message</div>" }
|
|
50
|
+
]
|
|
51
|
+
}`;
|
|
46
52
|
// ---------------------------------------------------------------------------
|
|
47
53
|
// Change operations JSON schema — for structured output (constrained decoding)
|
|
48
54
|
// ---------------------------------------------------------------------------
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
const CHANGE_OP_MESSAGE_SCHEMA = {
|
|
56
|
+
type: 'string',
|
|
57
|
+
description: 'Brief (1 sentence) message to the user explaining the change. Written directly to the user; shown in the chat feed as the assistant reply.',
|
|
58
|
+
};
|
|
59
|
+
/** Array schema for the full change-op union (ranged writes allowed). */
|
|
60
|
+
const CHANGE_OPS_ARRAY_SCHEMA = {
|
|
54
61
|
type: 'array',
|
|
55
62
|
items: {
|
|
56
63
|
anyOf: [
|
|
@@ -129,12 +136,8 @@ exports.CHANGE_OPS_SCHEMA = {
|
|
|
129
136
|
],
|
|
130
137
|
},
|
|
131
138
|
};
|
|
132
|
-
/**
|
|
133
|
-
|
|
134
|
-
* Used for medium/hard/re-write changes where the model should replace full blocks instead of
|
|
135
|
-
* attempting partial edits.
|
|
136
|
-
*/
|
|
137
|
-
exports.CHANGE_OPS_SCHEMA_NO_RANGED = {
|
|
139
|
+
/** Array schema with ranged write ops omitted. */
|
|
140
|
+
const CHANGE_OPS_ARRAY_SCHEMA_NO_RANGED = {
|
|
138
141
|
type: 'array',
|
|
139
142
|
items: {
|
|
140
143
|
anyOf: [
|
|
@@ -191,6 +194,34 @@ exports.CHANGE_OPS_SCHEMA_NO_RANGED = {
|
|
|
191
194
|
],
|
|
192
195
|
},
|
|
193
196
|
};
|
|
197
|
+
/**
|
|
198
|
+
* JSON schema for Anthropic structured outputs.
|
|
199
|
+
* Wraps the change-ops array in `{ message, changes }` so the model always
|
|
200
|
+
* emits a user-facing message alongside its page changes.
|
|
201
|
+
*/
|
|
202
|
+
exports.CHANGE_OPS_SCHEMA = {
|
|
203
|
+
type: 'object',
|
|
204
|
+
properties: {
|
|
205
|
+
message: CHANGE_OP_MESSAGE_SCHEMA,
|
|
206
|
+
changes: CHANGE_OPS_ARRAY_SCHEMA,
|
|
207
|
+
},
|
|
208
|
+
required: ['message', 'changes'],
|
|
209
|
+
additionalProperties: false,
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
* Variant of CHANGE_OPS_SCHEMA that omits ranged write operations (search-replace, search-insert).
|
|
213
|
+
* Used for medium/hard/re-write changes where the model should replace full blocks instead of
|
|
214
|
+
* attempting partial edits.
|
|
215
|
+
*/
|
|
216
|
+
exports.CHANGE_OPS_SCHEMA_NO_RANGED = {
|
|
217
|
+
type: 'object',
|
|
218
|
+
properties: {
|
|
219
|
+
message: CHANGE_OP_MESSAGE_SCHEMA,
|
|
220
|
+
changes: CHANGE_OPS_ARRAY_SCHEMA_NO_RANGED,
|
|
221
|
+
},
|
|
222
|
+
required: ['message', 'changes'],
|
|
223
|
+
additionalProperties: false,
|
|
224
|
+
};
|
|
194
225
|
/**
|
|
195
226
|
* Text instruction variant for no-ranged-writes mode.
|
|
196
227
|
* Tells the model to use `update` for full innerHTML replacement instead of partial edits.
|
|
@@ -198,14 +229,15 @@ exports.CHANGE_OPS_SCHEMA_NO_RANGED = {
|
|
|
198
229
|
exports.CHANGE_OPS_FORMAT_INSTRUCTION_NO_RANGED = `For script and style blocks, use "update" to replace the full innerHTML or "replace" to replace the full outerHTML. Do NOT use partial search-replace edits.`;
|
|
199
230
|
/**
|
|
200
231
|
* OpenAI structured outputs require a root-level object.
|
|
201
|
-
*
|
|
232
|
+
* Matches the Anthropic shape: { message, changes }.
|
|
202
233
|
*/
|
|
203
234
|
exports.OPENAI_CHANGE_OPS_SCHEMA = {
|
|
204
235
|
type: 'object',
|
|
205
236
|
properties: {
|
|
206
|
-
|
|
237
|
+
message: CHANGE_OP_MESSAGE_SCHEMA,
|
|
238
|
+
changes: CHANGE_OPS_ARRAY_SCHEMA,
|
|
207
239
|
},
|
|
208
|
-
required: ['changes'],
|
|
240
|
+
required: ['message', 'changes'],
|
|
209
241
|
additionalProperties: false,
|
|
210
242
|
};
|
|
211
243
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/builders/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/builders/types.ts"],"names":[],"mappings":"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"}
|