@xopcai/xopc 0.0.329 → 0.0.331
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Bs1qnnhD.js → agent-avatar-dicebear-B0BtF24E.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DgP5DEJF.js +1 -0
- package/dist/gateway/static/root/assets/agent-plugin-dialog-DbvLXQO2.js +1 -0
- package/dist/gateway/static/root/assets/agents-Bh4XNLyk.js +70 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-BrIji9B5.js → app-management-settings-panel-fwzTRJfP.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-Uts-MQ7K.js → appearance-settings-v_GGe8UZ.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-C9ZMEuuA.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-_EzRfBuI.js → archive-plugin-B6EgADeH.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CHg7_XFl.js → attachment-load-B4H_IFeX.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-CGMErk_w.js → automations-page-UlVCvg4r.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-C7VS-yb7.js +7 -0
- package/dist/gateway/static/root/assets/{binary-plugins-D3WB-tVn.js → binary-plugins-BxTSx30f.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-Cm1W-14I.js → block-editor-CVzdrpjl.js} +53 -53
- package/dist/gateway/static/root/assets/{browser-automation-inputs-VnvK-GQP.js → browser-automation-inputs-C5s1yHOu.js} +1 -1
- package/dist/gateway/static/root/assets/browser-automations-page-CBVD8k6O.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-CC43CC43.js +3 -0
- package/dist/gateway/static/root/assets/capabilities-page-BAT7Vvb8.js +2 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DPETQOfF.js +8 -0
- package/dist/gateway/static/root/assets/{capability-header-actions-C3chJDQu.js → capability-header-actions-EETjXmkG.js} +1 -1
- package/dist/gateway/static/root/assets/channels-CwA619os.js +1 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-ClbmjCL2.js → chat-terminal-dock-DCqm9j9W.js} +2 -2
- package/dist/gateway/static/root/assets/{computer-settings-page-BfZaf516.js → computer-settings-page-CxFWdovV.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-F-fYNIx8.js → connector-service-page-wxsEhmlU.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-l7goF6QS.js +2 -0
- package/dist/gateway/static/root/assets/date-picker-h_OS6uBR.js +1 -0
- package/dist/gateway/static/root/assets/{dependency-picker-B_z3zihW.js → dependency-picker-DNgSSH3z.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-C1TZzKS3.js → desktop-pet-CflvPnB-.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-CXy0X5Js.js +1 -0
- package/dist/gateway/static/root/assets/device-pairing-wizard-BDMiJcsK.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-BfxaNwMB.js → directory-picker-path-field-BqkOh13m.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-Bs8_FYCm.js → extension-debug-page-VT4s-9pK.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DH5vFbBw.js → extension-page-CBSeGhGA.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-hGKovxxC.js → extension-settings-page-DRB6uOo8.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-BYMrbKZE.js → gateway-config-swr-cR-tz7-Q.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-lF-FpnZy.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DMqYXHAn.js → gateway-startup-retry-6jLRcQsu.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-DSaXXoLm.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-D1sQGaJz.js → image-generation-api-CSSkwsyC.js} +1 -1
- package/dist/gateway/static/root/assets/imports-page-DGkOijwE.js +1 -0
- package/dist/gateway/static/root/assets/index-BEw0xrde.css +1 -0
- package/dist/gateway/static/root/assets/index-D99vN3es.js +121 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CMitbles.js → keyboard-shortcuts-settings-iU6c2zg1.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-rH33N8I9.js +1 -0
- package/dist/gateway/static/root/assets/local-apps-page-C0BWC8D2.js +1 -0
- package/dist/gateway/static/root/assets/locale-store-wNXWkWu5.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-Dpoi-r-_.js +2 -0
- package/dist/gateway/static/root/assets/management-settings-RFDLaquR.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-DXubGEic.js → markdown-view-DlT9KqwF.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DLJrmU9J.js → media-plugins-C8E_F2F_.js} +1 -1
- package/dist/gateway/static/root/assets/messages-fmf0dnr4.js +3 -0
- package/dist/gateway/static/root/assets/note-detail-panel-DI7CIjmM.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-BkqnU-Jh.js +8 -0
- package/dist/gateway/static/root/assets/{page-context-capture-button-C3JiQEKD.js → page-context-capture-button-qqWG_gs_.js} +1 -1
- package/dist/gateway/static/root/assets/page-tabs-b3lheKy4.js +1 -0
- package/dist/gateway/static/root/assets/{preview-open-alternatives-buk_gdip.js → preview-open-alternatives-0Q4rTfGX.js} +1 -1
- package/dist/gateway/static/root/assets/product-open-page-jnJZCrKQ.js +1 -0
- package/dist/gateway/static/root/assets/project-detail-page-BvvcTH2F.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-r96k_2wB.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-tx8XCHOs.js → registry-api-BIpltJ47.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-B1d8pB_y.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-De7HmmBu.js → runtime-tools-settings-panel-Do_iF13W.js} +2 -2
- package/dist/gateway/static/root/assets/scenes-page-DK316w9a.js +2 -0
- package/dist/gateway/static/root/assets/{schema-form-DPMEuj5D.js → schema-form-Cfft26Je.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-EIk8iJTK.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-DcOsdz78.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-DM0D-BQ_.js → settings-form-section-iI0MTyuU.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-CWS9yOH3.js → settings-page-C2Ka9oJm.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-nnmS_p5h.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-CcRi2yGy.js → share-preview-page-D0Knvtlp.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-BcaxGQLC.js +1 -0
- package/dist/gateway/static/root/assets/skill-api-BuZKcy9b.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-Cb_CUL-U.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-DcxWxIrR.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-CMG0ZAsd.js +1 -0
- package/dist/gateway/static/root/assets/task-detail-page-Cvr1qUTW.js +1 -0
- package/dist/gateway/static/root/assets/tunnel-api-DGYA6GyO.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-ZTHe1zCM.js → use-autosave-CDemMoSX.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-VXfz3rE7.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-C8Kpkct-.js → voice-api-key-field-CXArY4t5.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-BvzxINUk.js → voice-config-api-ujEySjyc.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-ClB6T-dm.js → work-discovery-overlay-Dk5KsKOm.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-DNpdaI-2.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-DDNDLdId.js +6 -0
- package/dist/gateway/static/root/index.html +8 -14
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +1 -0
- package/dist/src/agent/agent-manager.js +15 -0
- package/dist/src/agent/capabilities/definitions.d.ts +3 -2
- package/dist/src/agent/capabilities/definitions.js +3 -2
- package/dist/src/agent/orchestration/llm-turn-retry.js +2 -15
- package/dist/src/agent/service.d.ts +1 -0
- package/dist/src/agent/service.js +3 -0
- package/dist/src/agent/tasks/task-judge-service.js +1 -1
- package/dist/src/agent/tools/factory.js +3 -2
- package/dist/src/agent/tools/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +2 -1
- package/dist/src/agent/tools/workflow-manage-tool.d.ts +2 -0
- package/dist/src/agent/tools/workflow-manage-tool.js +225 -0
- package/dist/src/automations/draft/automation-draft-service.js +13 -4
- package/dist/src/chat-previews/service.js +1 -2
- package/dist/src/extensions/bundled-extension-activation.d.ts +3 -1
- package/dist/src/extensions/bundled-extension-activation.js +5 -8
- package/dist/src/gateway/gateway-workflow-host.types.d.ts +1 -0
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +27 -5
- package/dist/src/gateway/hono/routes/workflows.js +1 -23
- package/dist/src/gateway/service/config-coordinator.d.ts +4 -4
- package/dist/src/gateway/service/config-coordinator.js +6 -6
- package/dist/src/gateway/service/marketplace-service.js +8 -6
- package/dist/src/gateway/service.d.ts +1 -1
- package/dist/src/gateway/service.js +2 -2
- package/dist/src/home-intelligence/generator.js +7 -6
- package/dist/src/providers/model-response.d.ts +2 -0
- package/dist/src/providers/model-response.js +24 -1
- package/dist/src/tui/backends/embedded-backend.js +4 -1
- package/dist/src/tui/tui-commands.js +1 -1
- package/dist/src/tui/tui.js +2 -2
- package/dist/src/voice/platform-streams.js +15 -7
- package/dist/src/voice/realtime/agentEngine.js +19 -3
- package/dist/src/voice/realtime/pcmFrameBuffer.js +2 -1
- package/dist/src/voice/realtime/playback-echo.js +16 -1
- package/dist/src/workflows/authoring/index.d.ts +1 -0
- package/dist/src/workflows/authoring/index.js +2 -1
- package/dist/src/workflows/authoring/workflow-draft-defaults.d.ts +3 -0
- package/dist/src/workflows/authoring/workflow-draft-defaults.js +63 -0
- package/dist/src/workflows/domain/index.js +1 -1
- package/dist/src/workflows/engine/workflow-engine.js +1 -1
- package/dist/src/workflows/index.js +2 -2
- package/dist/src/workflows/service/workflow-run-service.d.ts +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +34 -11
- package/dist/src/workflows/service/workflow-session-bridge.js +2 -2
- package/package.json +6 -6
- package/skills/engineering/workflow-authoring/SKILL.md +32 -0
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DHJyAT7t.js +0 -1
- package/dist/gateway/static/root/assets/agent-plugin-dialog-DLKj_iIh.js +0 -1
- package/dist/gateway/static/root/assets/agents-SXZ5O0g4.js +0 -70
- package/dist/gateway/static/root/assets/apps-page-DcclVdxW.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-Cc4yqiF6.js +0 -7
- package/dist/gateway/static/root/assets/box-DvYoGszj.js +0 -1
- package/dist/gateway/static/root/assets/braces-Cfmtagno.js +0 -1
- package/dist/gateway/static/root/assets/browser-automations-page-CZYCvSSU.js +0 -3
- package/dist/gateway/static/root/assets/browser-settings-page-DDz9PE6m.js +0 -3
- package/dist/gateway/static/root/assets/calendar-clock-D-quYVPe.js +0 -1
- package/dist/gateway/static/root/assets/capabilities-page-DH3aDk53.js +0 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-C8jMZAJl.js +0 -8
- package/dist/gateway/static/root/assets/capability-discover-page-CgGvsf3t.js +0 -1
- package/dist/gateway/static/root/assets/channels-CuVS_KsY.js +0 -1
- package/dist/gateway/static/root/assets/chevron-left-DqFhpbvK.js +0 -1
- package/dist/gateway/static/root/assets/clock-3-DnrAnuyZ.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-B4SLpvSL.js +0 -2
- package/dist/gateway/static/root/assets/date-picker-DXQTsUJn.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-B5JGIfqn.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-DFYK_Ywf.js +0 -1
- package/dist/gateway/static/root/assets/extension-marketplace-api-DqV4YRYs.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-BIsiP-JI.js +0 -1
- package/dist/gateway/static/root/assets/gauge-C78eD2BA.js +0 -1
- package/dist/gateway/static/root/assets/git-branch-Dh9uxTot.js +0 -1
- package/dist/gateway/static/root/assets/home-page-CoBivEvx.js +0 -1
- package/dist/gateway/static/root/assets/image-Cwyalflz.js +0 -1
- package/dist/gateway/static/root/assets/imports-page-rssb4rjP.js +0 -1
- package/dist/gateway/static/root/assets/inbox-DNoSz682.js +0 -1
- package/dist/gateway/static/root/assets/index-C4QN4gCi.css +0 -1
- package/dist/gateway/static/root/assets/index-Cr4SINLG.js +0 -121
- package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +0 -1
- package/dist/gateway/static/root/assets/layout-grid-CEVZdVFU.js +0 -1
- package/dist/gateway/static/root/assets/list-BBGUdmkF.js +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-Di82Oacm.js +0 -1
- package/dist/gateway/static/root/assets/local-apps-page-CCvA9d9L.js +0 -1
- package/dist/gateway/static/root/assets/locale-store-BSkKhYkc.js +0 -1
- package/dist/gateway/static/root/assets/lock-keyhole-DEK5kH0u.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-BK8ol1q0.js +0 -2
- package/dist/gateway/static/root/assets/management-settings-CebXkEtB.js +0 -1
- package/dist/gateway/static/root/assets/message-circle-Badhj-4D.js +0 -1
- package/dist/gateway/static/root/assets/message-square-fVE7Ghj1.js +0 -1
- package/dist/gateway/static/root/assets/messages-D0G_sZvA.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-cache-B0EUPwTv.js +0 -1
- package/dist/gateway/static/root/assets/network-BUQLY1BV.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-xsKDIJdK.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-BFm7XnWH.js +0 -8
- package/dist/gateway/static/root/assets/paperclip-f1HujQY1.js +0 -1
- package/dist/gateway/static/root/assets/power-ZI-pBczI.js +0 -1
- package/dist/gateway/static/root/assets/product-open-page-DwEEO0Ak.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-CRQGCRSU.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-DcqylysA.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-Cq5MaiRW.js +0 -1
- package/dist/gateway/static/root/assets/scenes-page-GXJ-b3dO.js +0 -2
- package/dist/gateway/static/root/assets/server-BlHCBjiE.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-C6FwYIRA.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BEyQiZs0.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BhGKiTPf.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-DNmcCBfX.js +0 -1
- package/dist/gateway/static/root/assets/skill-api-BCAV_F1P.js +0 -1
- package/dist/gateway/static/root/assets/skill-card-icon-BrrpZ3Mw.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-BEV2WXGk.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-C8zOGpKw.js +0 -2
- package/dist/gateway/static/root/assets/star-BUWJqJ5c.js +0 -1
- package/dist/gateway/static/root/assets/stethoscope-DRqTAtjD.js +0 -1
- package/dist/gateway/static/root/assets/store-SzD1Jvgm.js +0 -1
- package/dist/gateway/static/root/assets/system-settings-panel-C_lajq9u.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-Dk8Bmlhw.js +0 -1
- package/dist/gateway/static/root/assets/tunnel-api-CYvKiE_f.js +0 -1
- package/dist/gateway/static/root/assets/upload-rrb46c3c.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-C_SPNZbP.js +0 -2
- package/dist/gateway/static/root/assets/user-round-C9jxPhMR.js +0 -1
- package/dist/gateway/static/root/assets/wand-sparkles-DWuJz5ya.js +0 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-X0Cyh2AR.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-BrL6dzf0.js +0 -6
- package/dist/src/workflows/draft/index.d.ts +0 -3
- package/dist/src/workflows/draft/index.js +0 -3
- package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +0 -22
- package/dist/src/workflows/draft/workflow-draft-prompt.js +0 -54
- package/dist/src/workflows/draft/workflow-draft-service.d.ts +0 -12
- package/dist/src/workflows/draft/workflow-draft-service.js +0 -125
- package/dist/src/workflows/draft/workflow-draft-validator.d.ts +0 -4
- package/dist/src/workflows/draft/workflow-draft-validator.js +0 -123
- package/dist/src/workflows/draft/workflow-draft.types.d.ts +0 -44
- package/dist/src/workflows/draft/workflow-draft.types.js +0 -1
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
//#region src/workflows/draft/workflow-draft-prompt.ts
|
|
2
|
-
function buildWorkflowDraftPrompt(params) {
|
|
3
|
-
return `${GRAPH_DESIGN_PROMPT}
|
|
4
|
-
|
|
5
|
-
Mode: ${params.mode}
|
|
6
|
-
Language for user-facing copy: ${params.language ?? "en"}
|
|
7
|
-
Constraints:
|
|
8
|
-
${JSON.stringify(params.constraints ?? {}, null, 2)}
|
|
9
|
-
|
|
10
|
-
${params.existingGraph ? `Existing graph to improve:\n${JSON.stringify(params.existingGraph, null, 2).slice(0, 16e3)}\n` : ""}
|
|
11
|
-
User request:
|
|
12
|
-
${params.prompt.slice(0, 8e3)}`;
|
|
13
|
-
}
|
|
14
|
-
function buildWorkflowDraftRepairPrompt(params) {
|
|
15
|
-
return `${GRAPH_DESIGN_PROMPT}
|
|
16
|
-
|
|
17
|
-
Repair the previous graph while preserving the user's intent. Fix every listed issue.
|
|
18
|
-
Language for user-facing copy: ${params.language ?? "en"}
|
|
19
|
-
Constraints:
|
|
20
|
-
${JSON.stringify(params.constraints ?? {}, null, 2)}
|
|
21
|
-
Issues:
|
|
22
|
-
${JSON.stringify(params.issues, null, 2)}
|
|
23
|
-
User request:
|
|
24
|
-
${params.prompt.slice(0, 8e3)}
|
|
25
|
-
Previous output:
|
|
26
|
-
${params.previousOutput.slice(0, 16e3)}`;
|
|
27
|
-
}
|
|
28
|
-
const GRAPH_DESIGN_PROMPT = `You design xopc visual workflows for non-technical users. Return ONLY one JSON object, no markdown.
|
|
29
|
-
|
|
30
|
-
Shape:
|
|
31
|
-
{
|
|
32
|
-
"name": "lowercase_snake_case",
|
|
33
|
-
"graph": { "schemaVersion": 1, "nodes": [], "edges": [] },
|
|
34
|
-
"manifest": {
|
|
35
|
-
"title": "Human title", "description": "Task in plain language", "version": "1.0.0",
|
|
36
|
-
"inputSchema": { "type": "object", "properties": {}, "required": [] },
|
|
37
|
-
"defaults": { "concurrency": 3, "timeoutSec": 1800, "maxSubagents": 8 },
|
|
38
|
-
"permissions": { "network": false, "fileSystem": "read", "approvalRequired": false },
|
|
39
|
-
"tags": ["custom"], "whenToUse": "A concrete user situation"
|
|
40
|
-
},
|
|
41
|
-
"explanation": "Short explanation", "assumptions": [], "risks": []
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
Graph rules:
|
|
45
|
-
- Exactly one input node and one output node. Every node must be reachable from input and lead toward output.
|
|
46
|
-
- Node kinds are input, agent, decision, merge, output.
|
|
47
|
-
- Every node has id, kind, title, position {x,y}, config, and optional phaseId/description.
|
|
48
|
-
- input config: {schema?}; agent config: {prompt, model?, toolset?, maxIterations?, outputSchema?}; decision config: {rule:{path,operator,value?}}; merge config: {mode:"array"|"object"}; output config: {summary?,title?}.
|
|
49
|
-
- Edge shape: {id,source,target,sourcePort?}. Decision branch ports are true and false.
|
|
50
|
-
- Agent prompts may reference {{goal}}, {{input}}, {{input.field}}, {{nodes.nodeId}}, and {{predecessors.nodeId}}.
|
|
51
|
-
- Prefer a small, understandable graph: 3-8 nodes, short titles, clear descriptions. Parallel independent work should fan out and then merge.
|
|
52
|
-
- Do not create code or script fields. Do not request permissions the user did not need.`;
|
|
53
|
-
//#endregion
|
|
54
|
-
export { buildWorkflowDraftPrompt, buildWorkflowDraftRepairPrompt };
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Config } from '../../config/schema.js';
|
|
2
|
-
import type { CreateWorkflowDraftRequest, WorkflowDraftResponse } from './workflow-draft.types.js';
|
|
3
|
-
export interface WorkflowDraftServiceOptions {
|
|
4
|
-
config: Config;
|
|
5
|
-
maxRepairAttempts?: number;
|
|
6
|
-
}
|
|
7
|
-
export declare class WorkflowDraftService {
|
|
8
|
-
private readonly options;
|
|
9
|
-
constructor(options: WorkflowDraftServiceOptions);
|
|
10
|
-
createDraft(request: CreateWorkflowDraftRequest, signal?: AbortSignal): Promise<WorkflowDraftResponse>;
|
|
11
|
-
}
|
|
12
|
-
export declare function resolveDraftModelRef(config: Config, agentId: string): string;
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { createLogger } from "../../utils/logger/index.js";
|
|
2
|
-
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
4
|
-
import { getDefaultModelSync, init_providers, resolveModel } from "../../providers/index.js";
|
|
5
|
-
import { completeWithResolvedCredentials } from "../../providers/model-call.js";
|
|
6
|
-
import { resolveModelSelector } from "../../config/agent-model-intents.js";
|
|
7
|
-
import { buildWorkflowDraftPrompt, buildWorkflowDraftRepairPrompt } from "./workflow-draft-prompt.js";
|
|
8
|
-
import { buildWorkflowDraftResponse, parseGeneratedWorkflowDraft } from "./workflow-draft-validator.js";
|
|
9
|
-
//#region src/workflows/draft/workflow-draft-service.ts
|
|
10
|
-
init_schema();
|
|
11
|
-
init_providers();
|
|
12
|
-
init_logger();
|
|
13
|
-
const log = createLogger("WorkflowDraft");
|
|
14
|
-
const DEFAULT_MAX_REPAIR_ATTEMPTS = 2;
|
|
15
|
-
var WorkflowDraftService = class {
|
|
16
|
-
constructor(options) {
|
|
17
|
-
this.options = options;
|
|
18
|
-
}
|
|
19
|
-
async createDraft(request, signal) {
|
|
20
|
-
const prompt = request.prompt.trim();
|
|
21
|
-
if (!prompt) throw new Error("prompt is required");
|
|
22
|
-
const modelRef = resolveDraftModelRef(this.options.config, request.agentId);
|
|
23
|
-
const model = resolveModel(modelRef);
|
|
24
|
-
const maxRepairAttempts = this.options.maxRepairAttempts ?? DEFAULT_MAX_REPAIR_ATTEMPTS;
|
|
25
|
-
let messageContent = buildWorkflowDraftPrompt({
|
|
26
|
-
prompt,
|
|
27
|
-
language: request.language,
|
|
28
|
-
mode: request.mode ?? (request.existingGraph ? "improve" : "create"),
|
|
29
|
-
existingGraph: request.existingGraph,
|
|
30
|
-
constraints: request.constraints
|
|
31
|
-
});
|
|
32
|
-
let lastIssues = [];
|
|
33
|
-
let lastText = "";
|
|
34
|
-
for (let attempt = 0; attempt <= maxRepairAttempts; attempt += 1) {
|
|
35
|
-
lastText = extractText(await completeWithResolvedCredentials(model, { messages: [{
|
|
36
|
-
role: "user",
|
|
37
|
-
content: messageContent,
|
|
38
|
-
timestamp: Date.now()
|
|
39
|
-
}] }, {
|
|
40
|
-
maxTokens: 4096,
|
|
41
|
-
temperature: attempt === 0 ? .25 : .1,
|
|
42
|
-
signal
|
|
43
|
-
}));
|
|
44
|
-
try {
|
|
45
|
-
const response = buildWorkflowDraftResponse(parseGeneratedWorkflowDraft(lastText), request.constraints);
|
|
46
|
-
const blockingIssues = getBlockingDraftIssues(response);
|
|
47
|
-
if (blockingIssues.length === 0) return {
|
|
48
|
-
...response,
|
|
49
|
-
repairAttempts: attempt
|
|
50
|
-
};
|
|
51
|
-
lastIssues = blockingIssues;
|
|
52
|
-
} catch (err) {
|
|
53
|
-
lastIssues = [{
|
|
54
|
-
source: "parse",
|
|
55
|
-
severity: "error",
|
|
56
|
-
code: "invalid_model_output",
|
|
57
|
-
message: err instanceof Error ? err.message : String(err)
|
|
58
|
-
}];
|
|
59
|
-
}
|
|
60
|
-
if (attempt >= maxRepairAttempts) break;
|
|
61
|
-
log.warn({
|
|
62
|
-
modelRef,
|
|
63
|
-
attempt: attempt + 1,
|
|
64
|
-
issueCount: lastIssues.length,
|
|
65
|
-
preview: lastText.slice(0, 500)
|
|
66
|
-
}, "Workflow draft validation failed; asking model to repair");
|
|
67
|
-
messageContent = buildWorkflowDraftRepairPrompt({
|
|
68
|
-
prompt,
|
|
69
|
-
language: request.language,
|
|
70
|
-
constraints: request.constraints,
|
|
71
|
-
previousOutput: lastText,
|
|
72
|
-
issues: lastIssues
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
const message = `Unable to generate a valid workflow draft after ${maxRepairAttempts + 1} attempts: ${formatRepairIssues(lastIssues)}`;
|
|
76
|
-
log.warn({
|
|
77
|
-
modelRef,
|
|
78
|
-
issues: lastIssues,
|
|
79
|
-
preview: lastText.slice(0, 500)
|
|
80
|
-
}, message);
|
|
81
|
-
throw new Error(message);
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
function resolveDraftModelRef(config, agentId) {
|
|
85
|
-
try {
|
|
86
|
-
return resolveModelSelector(config, agentId, "reasoning");
|
|
87
|
-
} catch {
|
|
88
|
-
return getAgentDefaultModelRef() ?? getDefaultModelSync(config);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
function extractText(result) {
|
|
92
|
-
const content = result.content;
|
|
93
|
-
if (typeof content === "string") return content;
|
|
94
|
-
if (Array.isArray(content)) return content.map((item) => {
|
|
95
|
-
if (item && typeof item === "object" && item.type === "text") return String(item.text ?? "");
|
|
96
|
-
return "";
|
|
97
|
-
}).join("");
|
|
98
|
-
return "";
|
|
99
|
-
}
|
|
100
|
-
function getBlockingDraftIssues(response) {
|
|
101
|
-
const validationIssues = [...response.validation.errors.map((issue) => ({
|
|
102
|
-
source: "validation",
|
|
103
|
-
severity: "error",
|
|
104
|
-
code: issue.code,
|
|
105
|
-
message: issue.message
|
|
106
|
-
})), ...response.validation.warnings.map((issue) => ({
|
|
107
|
-
source: "validation",
|
|
108
|
-
severity: "warning",
|
|
109
|
-
code: issue.code,
|
|
110
|
-
message: issue.message
|
|
111
|
-
}))];
|
|
112
|
-
const lintIssues = response.lint.filter((issue) => issue.severity === "error").map((issue) => ({
|
|
113
|
-
source: "lint",
|
|
114
|
-
severity: issue.severity,
|
|
115
|
-
code: issue.code,
|
|
116
|
-
message: issue.message
|
|
117
|
-
}));
|
|
118
|
-
return [...validationIssues, ...lintIssues];
|
|
119
|
-
}
|
|
120
|
-
function formatRepairIssues(issues) {
|
|
121
|
-
if (issues.length === 0) return "unknown validation failure";
|
|
122
|
-
return issues.slice(0, 5).map((issue) => `${issue.source}:${issue.code}: ${issue.message}`).join("; ");
|
|
123
|
-
}
|
|
124
|
-
//#endregion
|
|
125
|
-
export { WorkflowDraftService, resolveDraftModelRef };
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { GeneratedWorkflowDraft, WorkflowDraftConstraints, WorkflowDraftLintIssue, WorkflowDraftResponse } from './workflow-draft.types.js';
|
|
2
|
-
export declare function parseGeneratedWorkflowDraft(raw: string): GeneratedWorkflowDraft;
|
|
3
|
-
export declare function buildWorkflowDraftResponse(draft: GeneratedWorkflowDraft, constraints?: WorkflowDraftConstraints): WorkflowDraftResponse;
|
|
4
|
-
export declare function lintWorkflowDraft(draft: GeneratedWorkflowDraft, constraints?: WorkflowDraftConstraints): WorkflowDraftLintIssue[];
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { validateWorkflowDefinitionInput } from "../domain/validation.js";
|
|
2
|
-
import { randomUUID } from "node:crypto";
|
|
3
|
-
//#region src/workflows/draft/workflow-draft-validator.ts
|
|
4
|
-
function parseGeneratedWorkflowDraft(raw) {
|
|
5
|
-
const parsed = JSON.parse(extractJsonObject(raw));
|
|
6
|
-
return {
|
|
7
|
-
name: normalizeWorkflowName(String(parsed.name ?? "custom_workflow")),
|
|
8
|
-
graph: normalizeGraph(parsed.graph),
|
|
9
|
-
manifest: normalizeManifest(parsed.manifest),
|
|
10
|
-
explanation: String(parsed.explanation ?? ""),
|
|
11
|
-
assumptions: stringArray(parsed.assumptions),
|
|
12
|
-
risks: stringArray(parsed.risks)
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
function buildWorkflowDraftResponse(draft, constraints) {
|
|
16
|
-
const validation = validateWorkflowDefinitionInput({
|
|
17
|
-
name: draft.name,
|
|
18
|
-
graph: draft.graph
|
|
19
|
-
});
|
|
20
|
-
return {
|
|
21
|
-
draftId: randomUUID(),
|
|
22
|
-
repairAttempts: 0,
|
|
23
|
-
...draft,
|
|
24
|
-
permissionsSummary: summarizePermissions(draft.manifest),
|
|
25
|
-
validation,
|
|
26
|
-
lint: lintWorkflowDraft(draft, constraints),
|
|
27
|
-
suggestedInputs: suggestedInputsFromManifest(draft.manifest)
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
function lintWorkflowDraft(draft, constraints) {
|
|
31
|
-
const issues = [];
|
|
32
|
-
const { manifest, graph } = draft;
|
|
33
|
-
if (!manifest.inputSchema) issues.push({
|
|
34
|
-
severity: "warning",
|
|
35
|
-
code: "missing_input_schema",
|
|
36
|
-
message: "Draft does not define an input schema."
|
|
37
|
-
});
|
|
38
|
-
if (!manifest.outputSchema) issues.push({
|
|
39
|
-
severity: "warning",
|
|
40
|
-
code: "missing_output_schema",
|
|
41
|
-
message: "Draft does not define an output schema."
|
|
42
|
-
});
|
|
43
|
-
if (manifest.permissions?.network && constraints?.allowNetwork === false) issues.push({
|
|
44
|
-
severity: "error",
|
|
45
|
-
code: "unsafe_permission",
|
|
46
|
-
message: "Draft requests network access, but network is disabled."
|
|
47
|
-
});
|
|
48
|
-
if (manifest.permissions?.fileSystem === "write" && constraints?.fileSystem !== "write") issues.push({
|
|
49
|
-
severity: "warning",
|
|
50
|
-
code: "unsafe_permission",
|
|
51
|
-
message: "Draft requests filesystem write access."
|
|
52
|
-
});
|
|
53
|
-
const phases = new Set(graph.nodes.map((node) => node.phaseId).filter(Boolean));
|
|
54
|
-
if (constraints?.maxPhases && phases.size > constraints.maxPhases) issues.push({
|
|
55
|
-
severity: "warning",
|
|
56
|
-
code: "too_many_agents",
|
|
57
|
-
message: `Draft has ${phases.size} phases, above the requested maximum.`
|
|
58
|
-
});
|
|
59
|
-
const agents = graph.nodes.filter((node) => node.kind === "agent");
|
|
60
|
-
if (constraints?.maxSubagents && agents.length > constraints.maxSubagents) issues.push({
|
|
61
|
-
severity: "warning",
|
|
62
|
-
code: "too_many_agents",
|
|
63
|
-
message: `Draft has ${agents.length} agents, above the requested maximum.`
|
|
64
|
-
});
|
|
65
|
-
if (constraints?.allowedTools?.length) {
|
|
66
|
-
const unknown = agents.flatMap((node) => node.config.toolset ?? []).filter((tool) => !constraints.allowedTools.includes(tool));
|
|
67
|
-
for (const tool of [...new Set(unknown)]) issues.push({
|
|
68
|
-
severity: "warning",
|
|
69
|
-
code: "unknown_tool",
|
|
70
|
-
message: `Tool '${tool}' is outside the requested allowlist.`
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
return issues;
|
|
74
|
-
}
|
|
75
|
-
function extractJsonObject(raw) {
|
|
76
|
-
const trimmed = raw.trim();
|
|
77
|
-
if (trimmed.startsWith("{") && trimmed.endsWith("}")) return trimmed;
|
|
78
|
-
const fenced = trimmed.match(/```(?:json)?\s*([\s\S]*?)```/i)?.[1]?.trim();
|
|
79
|
-
if (fenced?.startsWith("{")) return fenced;
|
|
80
|
-
const start = trimmed.indexOf("{");
|
|
81
|
-
const end = trimmed.lastIndexOf("}");
|
|
82
|
-
if (start >= 0 && end > start) return trimmed.slice(start, end + 1);
|
|
83
|
-
throw new Error("Model did not return a JSON object.");
|
|
84
|
-
}
|
|
85
|
-
function normalizeGraph(value) {
|
|
86
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) return {
|
|
87
|
-
schemaVersion: 1,
|
|
88
|
-
nodes: [],
|
|
89
|
-
edges: []
|
|
90
|
-
};
|
|
91
|
-
return value;
|
|
92
|
-
}
|
|
93
|
-
function normalizeManifest(value) {
|
|
94
|
-
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
95
|
-
}
|
|
96
|
-
function stringArray(value) {
|
|
97
|
-
return Array.isArray(value) ? value.map(String).filter(Boolean) : [];
|
|
98
|
-
}
|
|
99
|
-
function normalizeWorkflowName(value) {
|
|
100
|
-
const normalized = value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
|
|
101
|
-
return /^[a-z]/.test(normalized) ? normalized : `workflow_${normalized || "draft"}`;
|
|
102
|
-
}
|
|
103
|
-
function summarizePermissions(manifest) {
|
|
104
|
-
const permissions = manifest.permissions;
|
|
105
|
-
if (!permissions) return ["No explicit permissions requested."];
|
|
106
|
-
const values = [];
|
|
107
|
-
if (permissions.tools?.length) values.push(`Tools: ${permissions.tools.join(", ")}`);
|
|
108
|
-
if (permissions.network != null) values.push(`Network: ${permissions.network ? "enabled" : "disabled"}`);
|
|
109
|
-
if (permissions.fileSystem) values.push(`Filesystem: ${permissions.fileSystem}`);
|
|
110
|
-
if (permissions.approvalRequired) values.push("Approval required");
|
|
111
|
-
return values.length ? values : ["No explicit permissions requested."];
|
|
112
|
-
}
|
|
113
|
-
function suggestedInputsFromManifest(manifest) {
|
|
114
|
-
const properties = manifest.inputSchema?.properties;
|
|
115
|
-
if (!properties) return void 0;
|
|
116
|
-
return Object.entries(properties).slice(0, 8).map(([key, schema]) => ({
|
|
117
|
-
key,
|
|
118
|
-
label: typeof schema.title === "string" ? schema.title : key,
|
|
119
|
-
example: typeof schema.default === "string" ? schema.default : schema.description ?? ""
|
|
120
|
-
}));
|
|
121
|
-
}
|
|
122
|
-
//#endregion
|
|
123
|
-
export { buildWorkflowDraftResponse, lintWorkflowDraft, parseGeneratedWorkflowDraft };
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { WorkflowDefinitionManifest, WorkflowGraph } from '../domain/definition.js';
|
|
2
|
-
import type { WorkflowDefinitionValidationResult } from '../domain/validation.js';
|
|
3
|
-
export type WorkflowDraftMode = 'create' | 'improve';
|
|
4
|
-
export interface WorkflowDraftConstraints {
|
|
5
|
-
allowedTools?: string[];
|
|
6
|
-
allowNetwork?: boolean;
|
|
7
|
-
fileSystem?: 'none' | 'read' | 'write';
|
|
8
|
-
maxPhases?: number;
|
|
9
|
-
maxSubagents?: number;
|
|
10
|
-
outputFormat?: 'report' | 'json' | 'actions';
|
|
11
|
-
}
|
|
12
|
-
export interface CreateWorkflowDraftRequest {
|
|
13
|
-
prompt: string;
|
|
14
|
-
agentId: string;
|
|
15
|
-
language?: 'en' | 'zh';
|
|
16
|
-
mode?: WorkflowDraftMode;
|
|
17
|
-
existingGraph?: WorkflowGraph;
|
|
18
|
-
constraints?: WorkflowDraftConstraints;
|
|
19
|
-
}
|
|
20
|
-
export interface WorkflowDraftLintIssue {
|
|
21
|
-
severity: 'error' | 'warning';
|
|
22
|
-
code: 'missing_input_schema' | 'missing_output_schema' | 'unsafe_permission' | 'too_many_agents' | 'unknown_tool' | 'weak_phase_names';
|
|
23
|
-
message: string;
|
|
24
|
-
}
|
|
25
|
-
export interface GeneratedWorkflowDraft {
|
|
26
|
-
name: string;
|
|
27
|
-
graph: WorkflowGraph;
|
|
28
|
-
manifest: WorkflowDefinitionManifest;
|
|
29
|
-
explanation: string;
|
|
30
|
-
assumptions: string[];
|
|
31
|
-
risks: string[];
|
|
32
|
-
}
|
|
33
|
-
export interface WorkflowDraftResponse extends GeneratedWorkflowDraft {
|
|
34
|
-
draftId: string;
|
|
35
|
-
repairAttempts: number;
|
|
36
|
-
permissionsSummary: string[];
|
|
37
|
-
validation: WorkflowDefinitionValidationResult;
|
|
38
|
-
lint: WorkflowDraftLintIssue[];
|
|
39
|
-
suggestedInputs?: Array<{
|
|
40
|
-
key: string;
|
|
41
|
-
label: string;
|
|
42
|
-
example: string;
|
|
43
|
-
}>;
|
|
44
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|