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 @@
|
|
|
1
|
+
{"version":3,"file":"sharedTableSchema.d.ts","sourceRoot":"","sources":["../../src/service/sharedTableSchema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAID,yDAAyD;AACzD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,oEAAoE;AACpE,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAazH;AAED,iCAAiC;AACjC,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5H;AAED,4DAA4D;AAC5D,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtG;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,IAAI,EAAE,SAAS,GAChB;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,EAAE,aAAa,EAAE,CAAA;CAAE,CAyCjE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE7E;AA2BD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAShH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,GACnB,aAAa,CAUf;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC5B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,WAAW,CAAC,MAAM,CAAa,GAC1C,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA8B3E"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.listTables = exports.updateSchemaWrapper = exports.newSchemaWrapper = exports.isValidSchemaPayload = exports.mergeSchema = exports.deleteSchema = exports.saveSchema = exports.loadSchema = exports.schemaFile = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const SCHEMA_VERSION = 1;
|
|
9
|
+
/** Sidecar file path: `<parent>/<table>.schema.json`. */
|
|
10
|
+
function schemaFile(parent, table) {
|
|
11
|
+
return path_1.default.join(parent, `${table}.schema.json`);
|
|
12
|
+
}
|
|
13
|
+
exports.schemaFile = schemaFile;
|
|
14
|
+
/** Load the wrapper. Returns undefined if missing or unparsable. */
|
|
15
|
+
async function loadSchema(config, parent, table) {
|
|
16
|
+
const sp = config.storageProvider;
|
|
17
|
+
const file = schemaFile(parent, table);
|
|
18
|
+
if (!await sp.checkIfExists(file))
|
|
19
|
+
return undefined;
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(await sp.loadFile(file));
|
|
22
|
+
if (parsed && typeof parsed === 'object' && parsed.schema && typeof parsed.schema === 'object') {
|
|
23
|
+
return parsed;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// fall through
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
exports.loadSchema = loadSchema;
|
|
32
|
+
/** Persist a wrapper to disk. */
|
|
33
|
+
async function saveSchema(config, parent, table, wrapper) {
|
|
34
|
+
const sp = config.storageProvider;
|
|
35
|
+
await sp.ensureFolderExists(parent);
|
|
36
|
+
await sp.saveFile(schemaFile(parent, table), JSON.stringify(wrapper, null, 4));
|
|
37
|
+
}
|
|
38
|
+
exports.saveSchema = saveSchema;
|
|
39
|
+
/** Delete the schema sidecar. No-op if it doesn't exist. */
|
|
40
|
+
async function deleteSchema(config, parent, table) {
|
|
41
|
+
const sp = config.storageProvider;
|
|
42
|
+
const file = schemaFile(parent, table);
|
|
43
|
+
if (await sp.checkIfExists(file)) {
|
|
44
|
+
await sp.deleteFile(file);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.deleteSchema = deleteSchema;
|
|
48
|
+
/**
|
|
49
|
+
* Apply `incoming` against `existing` per `mode`:
|
|
50
|
+
* - 'replace' → drop existing entirely; incoming wins.
|
|
51
|
+
* - 'additive' → union of `properties` (existing wins on overlap if types match;
|
|
52
|
+
* conflicting types reported via `conflicts`); union of `required`.
|
|
53
|
+
*
|
|
54
|
+
* Returns the merged schema and any conflicts. On conflict, callers should
|
|
55
|
+
* surface them as a 409 and NOT persist the result.
|
|
56
|
+
*/
|
|
57
|
+
function mergeSchema(existing, incoming, mode) {
|
|
58
|
+
if (mode === 'replace' || !existing) {
|
|
59
|
+
return { merged: incoming, conflicts: [] };
|
|
60
|
+
}
|
|
61
|
+
const conflicts = [];
|
|
62
|
+
const existingProps = isPlainObject(existing.properties) ? existing.properties : {};
|
|
63
|
+
const incomingProps = isPlainObject(incoming.properties) ? incoming.properties : {};
|
|
64
|
+
const mergedProps = { ...existingProps };
|
|
65
|
+
for (const [field, def] of Object.entries(incomingProps)) {
|
|
66
|
+
if (!(field in existingProps)) {
|
|
67
|
+
mergedProps[field] = def;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const existingDef = existingProps[field];
|
|
71
|
+
if (typesAreCompatible(existingDef, def)) {
|
|
72
|
+
// Existing wins on overlap (preserves enum/required/format choices).
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
conflicts.push({ field, existing: existingDef, incoming: def });
|
|
76
|
+
}
|
|
77
|
+
if (conflicts.length > 0) {
|
|
78
|
+
return { merged: existing, conflicts };
|
|
79
|
+
}
|
|
80
|
+
const existingRequired = Array.isArray(existing.required) ? existing.required : [];
|
|
81
|
+
const incomingRequired = Array.isArray(incoming.required) ? incoming.required : [];
|
|
82
|
+
const mergedRequired = Array.from(new Set([...existingRequired, ...incomingRequired]
|
|
83
|
+
.filter(r => typeof r === 'string')));
|
|
84
|
+
const merged = {
|
|
85
|
+
...existing,
|
|
86
|
+
properties: mergedProps,
|
|
87
|
+
};
|
|
88
|
+
if (mergedRequired.length > 0) {
|
|
89
|
+
merged.required = mergedRequired;
|
|
90
|
+
}
|
|
91
|
+
return { merged, conflicts: [] };
|
|
92
|
+
}
|
|
93
|
+
exports.mergeSchema = mergeSchema;
|
|
94
|
+
/**
|
|
95
|
+
* Validate the structural shape of an incoming JSON Schema. Strict-mode
|
|
96
|
+
* validation against the meta-schema is out of scope; we only check that the
|
|
97
|
+
* payload is a plain object so we don't persist garbage.
|
|
98
|
+
*/
|
|
99
|
+
function isValidSchemaPayload(s) {
|
|
100
|
+
return isPlainObject(s);
|
|
101
|
+
}
|
|
102
|
+
exports.isValidSchemaPayload = isValidSchemaPayload;
|
|
103
|
+
function isPlainObject(v) {
|
|
104
|
+
return !!v && typeof v === 'object' && !Array.isArray(v);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Type-compatibility check used by additive merge. Two definitions are
|
|
108
|
+
* compatible when their `type` fields match (or both are absent). We
|
|
109
|
+
* intentionally tolerate other field differences (description, enum widening,
|
|
110
|
+
* format changes) — incoming-vs-existing field-level diffs aren't surfaced
|
|
111
|
+
* as conflicts in v1; only top-level type mismatches block the merge.
|
|
112
|
+
*/
|
|
113
|
+
function typesAreCompatible(existing, incoming) {
|
|
114
|
+
if (!isPlainObject(existing) || !isPlainObject(incoming))
|
|
115
|
+
return existing === incoming;
|
|
116
|
+
const et = existing.type;
|
|
117
|
+
const it = incoming.type;
|
|
118
|
+
if (et === undefined && it === undefined)
|
|
119
|
+
return true;
|
|
120
|
+
if (et === undefined || it === undefined)
|
|
121
|
+
return true;
|
|
122
|
+
if (Array.isArray(et) || Array.isArray(it)) {
|
|
123
|
+
const ea = Array.isArray(et) ? et : [et];
|
|
124
|
+
const ia = Array.isArray(it) ? it : [it];
|
|
125
|
+
return ea.some(x => ia.includes(x));
|
|
126
|
+
}
|
|
127
|
+
return et === it;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Build a SchemaWrapper from a plain JSON Schema, using `now` for both
|
|
131
|
+
* timestamps when no existing wrapper is being preserved.
|
|
132
|
+
*/
|
|
133
|
+
function newSchemaWrapper(schema, now, definedBy) {
|
|
134
|
+
const wrapper = {
|
|
135
|
+
version: SCHEMA_VERSION,
|
|
136
|
+
schema,
|
|
137
|
+
createdAt: now,
|
|
138
|
+
updatedAt: now,
|
|
139
|
+
};
|
|
140
|
+
if (definedBy)
|
|
141
|
+
wrapper.definedBy = definedBy;
|
|
142
|
+
return wrapper;
|
|
143
|
+
}
|
|
144
|
+
exports.newSchemaWrapper = newSchemaWrapper;
|
|
145
|
+
/**
|
|
146
|
+
* Update an existing wrapper, preserving createdAt and bumping updatedAt.
|
|
147
|
+
*/
|
|
148
|
+
function updateSchemaWrapper(existing, schema, now, definedBy) {
|
|
149
|
+
const wrapper = {
|
|
150
|
+
version: existing.version || SCHEMA_VERSION,
|
|
151
|
+
schema,
|
|
152
|
+
createdAt: existing.createdAt,
|
|
153
|
+
updatedAt: now,
|
|
154
|
+
};
|
|
155
|
+
if (definedBy)
|
|
156
|
+
wrapper.definedBy = definedBy;
|
|
157
|
+
else if (existing.definedBy)
|
|
158
|
+
wrapper.definedBy = existing.definedBy;
|
|
159
|
+
return wrapper;
|
|
160
|
+
}
|
|
161
|
+
exports.updateSchemaWrapper = updateSchemaWrapper;
|
|
162
|
+
/**
|
|
163
|
+
* Enumerate tables in a namespace folder. A "table" is either:
|
|
164
|
+
* - a subfolder containing record files, OR
|
|
165
|
+
* - a `<name>.schema.json` sidecar (table may be schemaless until first save).
|
|
166
|
+
*
|
|
167
|
+
* Returns one entry per unique table name, with hasSchema + recordCount.
|
|
168
|
+
*
|
|
169
|
+
* `reserved` filters out names that occupy the namespace for non-table use
|
|
170
|
+
* (e.g. `files`, the per-page uploads folder).
|
|
171
|
+
*/
|
|
172
|
+
async function listTables(config, parent, reserved = new Set()) {
|
|
173
|
+
const sp = config.storageProvider;
|
|
174
|
+
if (!await sp.checkIfExists(parent))
|
|
175
|
+
return [];
|
|
176
|
+
const folders = await sp.listFolders(parent);
|
|
177
|
+
const files = await sp.listFiles(parent);
|
|
178
|
+
const known = new Map();
|
|
179
|
+
for (const folder of folders) {
|
|
180
|
+
if (reserved.has(folder))
|
|
181
|
+
continue;
|
|
182
|
+
const recs = (await sp.listFiles(path_1.default.join(parent, folder)))
|
|
183
|
+
.filter(f => f.endsWith('.json')).length;
|
|
184
|
+
known.set(folder, { hasSchema: false, recordCount: recs });
|
|
185
|
+
}
|
|
186
|
+
for (const file of files) {
|
|
187
|
+
const m = file.match(/^(.+)\.schema\.json$/);
|
|
188
|
+
if (!m)
|
|
189
|
+
continue;
|
|
190
|
+
const name = m[1];
|
|
191
|
+
if (reserved.has(name))
|
|
192
|
+
continue;
|
|
193
|
+
const existing = known.get(name);
|
|
194
|
+
if (existing) {
|
|
195
|
+
existing.hasSchema = true;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
known.set(name, { hasSchema: true, recordCount: 0 });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return Array.from(known.entries())
|
|
202
|
+
.map(([name, info]) => ({ name, ...info }))
|
|
203
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
204
|
+
}
|
|
205
|
+
exports.listTables = listTables;
|
|
206
|
+
//# sourceMappingURL=sharedTableSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharedTableSchema.js","sourceRoot":"","sources":["../../src/service/sharedTableSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { AgentCompletion } from "../models";
|
|
2
|
+
import { ToolDefinition, ToolHandler } from "../models/types";
|
|
2
3
|
import { Customizer } from "../customizer";
|
|
3
4
|
import { Attachment, Builder, ContextSection } from "../builders/types";
|
|
5
|
+
import { PageValidationResult } from "./pageValidator";
|
|
4
6
|
export interface TransformPageArgs {
|
|
5
7
|
pageState: string;
|
|
6
8
|
message: string;
|
|
@@ -13,6 +15,17 @@ export interface TransformPageArgs {
|
|
|
13
15
|
productName?: string;
|
|
14
16
|
/** Optional image attachments sent alongside the user message. */
|
|
15
17
|
attachments?: Attachment[];
|
|
18
|
+
/** Chat history from the shell — used for newBuild detection instead of counting DOM elements. */
|
|
19
|
+
history?: {
|
|
20
|
+
role: string;
|
|
21
|
+
content: string;
|
|
22
|
+
}[];
|
|
23
|
+
/** Optional tool definitions exposed to the builder (on-demand context loading). */
|
|
24
|
+
tools?: ToolDefinition[];
|
|
25
|
+
/** Executors keyed by tool name. Required when `tools` is provided. */
|
|
26
|
+
toolHandlers?: Record<string, ToolHandler>;
|
|
27
|
+
/** Fired once per tool-use iteration with the names of tools about to execute. */
|
|
28
|
+
onToolCall?: (names: string[]) => void;
|
|
16
29
|
}
|
|
17
30
|
export type ChangeOp = {
|
|
18
31
|
op: "update";
|
|
@@ -49,22 +62,33 @@ export type ChangeList = ChangeOp[];
|
|
|
49
62
|
export interface TransformPageResult {
|
|
50
63
|
html: string;
|
|
51
64
|
changeCount: number;
|
|
65
|
+
/** For 'reply' results — the assistant's text response (shell displays it). */
|
|
66
|
+
replyText?: string;
|
|
67
|
+
/** For 'error' results — the error message (shell displays it). */
|
|
68
|
+
errorText?: string;
|
|
69
|
+
/** Page validation results (undefined if validation was skipped). */
|
|
70
|
+
validation?: PageValidationResult;
|
|
71
|
+
/** Number of change ops that were silently skipped (missing target, locked, etc.). */
|
|
72
|
+
skippedOps?: number;
|
|
73
|
+
/** Short human-readable reasons for each skipped op, in order. */
|
|
74
|
+
skipReasons?: string[];
|
|
75
|
+
}
|
|
76
|
+
export interface ApplyChangeListReport {
|
|
77
|
+
html: string;
|
|
78
|
+
skippedOps: number;
|
|
79
|
+
skipReasons: string[];
|
|
52
80
|
}
|
|
53
81
|
export declare function transformPage(args: TransformPageArgs): Promise<AgentCompletion<TransformPageResult>>;
|
|
54
82
|
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*/
|
|
58
|
-
export declare function simpleMarkdown(text: string): string;
|
|
59
|
-
/**
|
|
60
|
-
* Assign sequential `data-node-id` to every element in the HTML.
|
|
83
|
+
* Assign sequential `data-nid` to every element in the HTML.
|
|
84
|
+
* Skips trivial elements (br, wbr, col, source) that the LLM never targets.
|
|
61
85
|
*/
|
|
62
86
|
export declare function assignNodeIds(html: string): {
|
|
63
87
|
html: string;
|
|
64
88
|
nodeCount: number;
|
|
65
89
|
};
|
|
66
90
|
/**
|
|
67
|
-
* Remove all `data-
|
|
91
|
+
* Remove all `data-nid` attributes from the HTML.
|
|
68
92
|
*/
|
|
69
93
|
export declare function stripNodeIds(html: string): string;
|
|
70
94
|
/**
|
|
@@ -98,22 +122,36 @@ export declare function deduplicateInlineScripts(html: string): string;
|
|
|
98
122
|
*/
|
|
99
123
|
export declare function ensureScriptsBeforeBodyClose(html: string): string;
|
|
100
124
|
/**
|
|
101
|
-
* Apply a list of CRUD operations to annotated HTML (elements must have `data-
|
|
125
|
+
* Apply a list of CRUD operations to annotated HTML (elements must have `data-nid`).
|
|
126
|
+
* Returns just the resulting HTML string. For diagnostic info about skipped ops,
|
|
127
|
+
* use `applyChangeListWithReport` instead.
|
|
102
128
|
*/
|
|
103
129
|
export declare function applyChangeList(html: string, changes: ChangeList): string;
|
|
130
|
+
/**
|
|
131
|
+
* Apply a list of CRUD operations and return the resulting HTML plus a report
|
|
132
|
+
* of any ops that were silently skipped (missing target node, locked element,
|
|
133
|
+
* search text not found, etc.). Callers can surface the skip report to the
|
|
134
|
+
* user so that partial/broken builds do not fail silently.
|
|
135
|
+
*/
|
|
136
|
+
export declare function applyChangeListWithReport(html: string, changes: ChangeList): ApplyChangeListReport;
|
|
137
|
+
/**
|
|
138
|
+
* Validate and filter a raw parsed array into a well-formed ChangeList.
|
|
139
|
+
* Invalid ops are logged as warnings and dropped rather than crashing.
|
|
140
|
+
*/
|
|
141
|
+
export declare function validateChangeOps(raw: unknown[]): ChangeList;
|
|
104
142
|
/**
|
|
105
143
|
* Parse a JSON change list from the model's raw response text.
|
|
106
144
|
* Handles responses that may include markdown fences or extra text around the JSON.
|
|
145
|
+
* Invalid ops are logged as warnings and filtered out.
|
|
107
146
|
*/
|
|
108
147
|
export declare function parseChangeList(response: string): ChangeList;
|
|
109
|
-
export declare function getMessageFormat(productName: string): string;
|
|
110
148
|
export declare function getTransformInstr(productName: string): string;
|
|
111
|
-
export declare const AGENT_API_REFERENCE = "## Agent API\n\nCheck availability first (required):\n const agents = await synthos.
|
|
149
|
+
export declare const AGENT_API_REFERENCE = "## Agent API\n\nCheck availability first (required):\n const agents = await synthos.agent.list({ enabled: true });\n\nSend a message (returns full response):\n const result = await synthos.agent.send(agentId, message);\n // result: { kind: 'message', text: 'response text', raw: {...} }\n\nSend with file/image attachments:\n const result = await synthos.agent.send(agentId, message, [\n { fileName: 'photo.jpg', mimeType: 'image/jpeg', content: '<base64-string>' }\n ]);\n\nStream a response (token-by-token deltas):\n const handle = synthos.agent.sendStream(agentId, message, function(event) {\n switch (event.kind) {\n case 'text': // event.data = text delta string \u2014 append to output\n case 'status': // event.data = status info object\n case 'done': // stream complete \u2014 stop processing\n case 'error': // event.data = error message string\n }\n });\n handle.close(); // call to abort the stream early\n\nStream with attachments:\n synthos.agent.sendStream(agentId, message, onEvent, [\n { fileName: 'doc.pdf', mimeType: 'application/pdf', content: '<base64>' }\n ]);\n\nIMPORTANT: Always check synthos.agent.list({ enabled: true }) before calling an agent.\nIf no agents are configured, show the user a link to Settings > Agents (/settings?tab=agents).";
|
|
112
150
|
export declare const DEFAULT_ROUTE_HINTS: Map<string, string>;
|
|
113
151
|
/**
|
|
114
152
|
* Assemble the <SERVER_APIS> prompt block, including only hints for enabled
|
|
115
153
|
* feature groups and any custom route hints from the Customizer.
|
|
116
154
|
*/
|
|
117
155
|
export declare function buildRouteHints(customizer: Customizer): string;
|
|
118
|
-
export declare const serverAPIs = "<SERVER_APIS>\nGET /api/data/:page/:table\ndescription: Retrieve all rows from a page-scoped table (tables are stored per-page). Supports pagination via query params.\nquery params: limit (number, optional) \u2014 max rows to return; offset (number, optional, default 0) \u2014 rows to skip\nresponse (without limit): Array of JSON rows [{ id: string, ... }]\nresponse (with limit): { items: [{ id: string, ... }], total: number, offset: number, limit: number, hasMore: boolean }\n\nGET /api/data/:page/:table/:id\ndescription: Retrieve a single row from a page-scoped table\nresponse: JSON row { id: string, ... }\n\nPOST /api/data/:page/:table\ndescription: Replaces or adds a single row to a page-scoped table and returns the row\nrequest: JSON row { id?: string, ... }\nresponse: { id: string, ... }\n\nDELETE /api/data/:page/:table/:id\ndescription: Delete a single row from a page-scoped table\nresponse: { success: true }\n\nPOST /api/generate/image\ndescription: Generate an image based on a prompt\nrequest: { prompt: string, shape: 'square' | 'portrait' | 'landscape', style: 'vivid' | 'natural' }\nresponse: { url: string }\n\nPOST /api/generate/completion\ndescription: Generates a
|
|
156
|
+
export declare const serverAPIs = "<SERVER_APIS>\nGET /api/data/:page/:table\ndescription: Retrieve all rows from a page-scoped table (tables are stored per-page). Supports pagination via query params.\nquery params: limit (number, optional) \u2014 max rows to return; offset (number, optional, default 0) \u2014 rows to skip\nresponse (without limit): Array of JSON rows [{ id: string, ... }]\nresponse (with limit): { items: [{ id: string, ... }], total: number, offset: number, limit: number, hasMore: boolean }\n\nGET /api/data/:page/:table/:id\ndescription: Retrieve a single row from a page-scoped table\nresponse: JSON row { id: string, ... }\n\nPOST /api/data/:page/:table\ndescription: Replaces or adds a single row to a page-scoped table and returns the row\nrequest: JSON row { id?: string, ... }\nresponse: { id: string, ... }\n\nDELETE /api/data/:page/:table/:id\ndescription: Delete a single row from a page-scoped table\nresponse: { success: true }\n\nPOST /api/generate/image\ndescription: Generate an image based on a prompt\nrequest: { prompt: string, shape: 'square' | 'portrait' | 'landscape', style: 'vivid' | 'natural' }\nresponse: { url: string }\n\nPOST /api/generate/completion\ndescription: Generates a completion based on a prompt. When `schema` is provided, the model is constrained to emit JSON conforming to it and the parsed object is returned directly.\nrequest: { prompt: string, temperature?: number, schema?: object (JSON schema) }\nresponse (no schema): { answer: string }\nresponse (with schema): the parsed JSON object matching `schema`. Top-level must be `type: 'object'`; every nested object MUST set `additionalProperties: false`.\n\nGET /api/pages\ndescription: Retrieve a list of all pages with metadata\nresponse: Array of { name: string, title: string, categories: string[], pinned: boolean, createdDate: string, lastModified: string, pageVersion: number, mode: 'unlocked' | 'locked' }\n\nGET /api/pages/:name\ndescription: Retrieve metadata for a single page\nresponse: { title: string, categories: string[], pinned: boolean, createdDate: string, lastModified: string, pageVersion: number, mode: 'unlocked' | 'locked' }\n\nPOST /api/pages/:name\ndescription: Update page metadata (merge semantics \u2014 send only fields to change; lastModified is auto-set)\nrequest: { title?: string, categories?: string[], pinned?: boolean, mode?: 'unlocked' | 'locked' }\nresponse: Full metadata object\n\nDELETE /api/pages/:name\ndescription: Delete a user page (cannot delete required/system pages)\nresponse: { deleted: true }\n\nPOST /api/pages/:name/ask\ndescription: Ask a question about a page with full HTML context\nrequest: { question: string }\nresponse: { answer: string }\n\nPOST /api/scripts/:id\ndescription: Execute a script with the passed in variables\nrequest: { [key: string]: string }\nresponse: string\n\nPOST /api/search/web\ndescription: Search the web using Brave Search (must be enabled in Settings > Connectors)\nrequest: { query: string, count?: number, country?: string, freshness?: string }\nresponse: { results: [{ title: string, url: string, description: string }] }\n\nGET /api/agents\ndescription: List configured agents (A2A and OpenClaw). Supports ?enabled=true and ?provider=a2a|openclaw filters.\nresponse: [{ id: string, name: string, description: string, url: string, enabled: boolean, provider: 'a2a'|'openclaw', capabilities?: object }]\n\nPOST /api/agents/:id/send\ndescription: Send a text message to an agent (works for both A2A and OpenClaw protocols) and receive a normalized response\nrequest: { message: string, attachments?: [{ fileName: string, mimeType: string, content: string }] }\nresponse: { kind: 'message'|'task', text?: string, raw: object }\n\nPOST /api/agents/:id/stream\ndescription: Send a message and receive a streaming SSE response (text/event-stream). Each event is JSON: { kind: 'text'|'status'|'artifact'|'done'|'error', data: any }\nrequest: { message: string, attachments?: [{ fileName: string, mimeType: string, content: string }] }\nresponse: SSE stream\n\nGET /api/connectors\ndescription: List available connectors (REST API proxies). Supports ?category=X and ?id=X filters.\nresponse: [{ id: string, name: string, category: string, configured: boolean }]\n\nGET /api/connectors/:id\ndescription: Get full detail for a connector including its definition and configuration status\nresponse: { id, name, category, description, baseUrl, authStrategy, authKey, fields, configured, enabled, hasKey }\n\nPOST /api/connectors (proxy call)\ndescription: Proxy a request through a configured connector. The connector attaches auth automatically.\nrequest: { connector: string, method: string, path: string, headers?: object, body?: any, query?: object }\nresponse: Upstream API response (JSON or text)\n\nPAGE HELPERS (available globally as window.synthos):\n synthos.data.list(table, opts?) \u2014 GET /api/data/:page/:table (auto-scoped to current page; opts: { limit?, offset? } \u2014 when limit is set, returns { items, total, offset, limit, hasMore })\n synthos.data.get(table, id) \u2014 GET /api/data/:page/:table/:id (auto-scoped to current page)\n synthos.data.save(table, row) \u2014 POST /api/data/:page/:table (auto-scoped to current page)\n synthos.data.remove(table, id) \u2014 DELETE /api/data/:page/:table/:id (auto-scoped to current page)\n synthos.generate.image({ prompt, shape, style }) \u2014 POST /api/generate/image\n synthos.generate.completion({ prompt, temperature?, schema? }) \u2014 POST /api/generate/completion (schema: optional JSON schema for structured output; returns parsed object)\n synthos.script.run(id, variables) \u2014 POST /api/scripts/:id\n synthos.page.list() \u2014 GET /api/pages\n synthos.page.get(name) \u2014 GET /api/pages/:name\n synthos.page.update(name, metadata) \u2014 POST /api/pages/:name\n synthos.page.remove(name) \u2014 DELETE /api/pages/:name\n synthos.page.ask(name, question) \u2014 POST /api/pages/:name/ask\n synthos.search.web(query, opts?) \u2014 POST /api/search/web (opts: { count?, country?, freshness? })\n synthos.connector.call(connector, method, path, opts?) \u2014 POST /api/connectors (proxy call; opts: { headers?, body?, query? })\n synthos.connector.list(opts?) \u2014 GET /api/connectors (opts: { category?, id? })\n synthos.agent.list(opts?) \u2014 GET /api/agents (returns configured agents; opts: { enabled?, provider? }; returns [{ id, name, description, url, enabled, provider, capabilities }])\n synthos.agent.send(agentId, message, attachments?) \u2014 POST /api/agents/:id/send (sends a text message to any agent, returns normalized { kind, text, raw }; attachments: [{ fileName, mimeType, content }])\n synthos.agent.sendStream(agentId, message, onEvent, attachments?) \u2014 POST /api/agents/:id/stream (SSE streaming; onEvent receives { kind, data }; returns { close() } handle; attachments: [{ fileName, mimeType, content }])\n synthos.agent.isEnabled(agentId) \u2014 checks if an agent is enabled (returns Promise<boolean>)\n synthos.agent.getCapabilities(agentId) \u2014 returns agent capabilities object (streaming, skills, etc.)\nAll methods return Promises. Prefer these helpers over raw fetch().";
|
|
119
157
|
//# sourceMappingURL=transformPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformPage.d.ts","sourceRoot":"","sources":["../../src/service/transformPage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"transformPage.d.ts","sourceRoot":"","sources":["../../src/service/transformPage.ts"],"names":[],"mappings":"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"}
|