@xopcai/xopc 0.0.99 → 0.0.101
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/src/account-manager.d.ts +3 -3
- package/dist/extensions/telegram/src/account-manager.js +8 -8
- package/dist/extensions/telegram/src/account-manager.js.map +1 -1
- package/dist/extensions/telegram/src/actions/message-actions.d.ts +4 -0
- package/dist/extensions/telegram/src/actions/message-actions.js +71 -0
- package/dist/extensions/telegram/src/actions/message-actions.js.map +1 -0
- package/dist/extensions/telegram/src/adapters/config-adapter.js +9 -1
- package/dist/extensions/telegram/src/adapters/config-adapter.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/config-surface.js +1 -1
- package/dist/extensions/telegram/src/adapters/config-surface.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/outbound-adapter.d.ts +2 -1
- package/dist/extensions/telegram/src/adapters/outbound-adapter.js +18 -4
- package/dist/extensions/telegram/src/adapters/outbound-adapter.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/security-adapter.js +2 -1
- package/dist/extensions/telegram/src/adapters/security-adapter.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +90 -6
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/types.d.ts +9 -1
- package/dist/extensions/telegram/src/api-root.d.ts +4 -0
- package/dist/extensions/telegram/src/api-root.js +42 -0
- package/dist/extensions/telegram/src/api-root.js.map +1 -0
- package/dist/extensions/telegram/src/approval-delivery.d.ts +9 -0
- package/dist/extensions/telegram/src/approval-delivery.js +36 -0
- package/dist/extensions/telegram/src/approval-delivery.js.map +1 -0
- package/dist/extensions/telegram/src/approval-store.d.ts +25 -0
- package/dist/extensions/telegram/src/approval-store.js +61 -0
- package/dist/extensions/telegram/src/approval-store.js.map +1 -0
- package/dist/extensions/telegram/src/config-schema.d.ts +185 -35
- package/dist/extensions/telegram/src/config-schema.js +67 -45
- package/dist/extensions/telegram/src/config-schema.js.map +1 -1
- package/dist/extensions/telegram/src/conversation-id.d.ts +6 -0
- package/dist/extensions/telegram/src/conversation-id.js +18 -0
- package/dist/extensions/telegram/src/conversation-id.js.map +1 -0
- package/dist/extensions/telegram/src/doctor.d.ts +5 -0
- package/dist/extensions/telegram/src/doctor.js +80 -0
- package/dist/extensions/telegram/src/doctor.js.map +1 -0
- package/dist/extensions/telegram/src/exec-approval-handler.d.ts +7 -0
- package/dist/extensions/telegram/src/exec-approval-handler.js +36 -0
- package/dist/extensions/telegram/src/exec-approval-handler.js.map +1 -0
- package/dist/extensions/telegram/src/exec-approvals.d.ts +8 -0
- package/dist/extensions/telegram/src/exec-approvals.js +20 -0
- package/dist/extensions/telegram/src/exec-approvals.js.map +1 -0
- package/dist/extensions/telegram/src/focus-handler.d.ts +12 -0
- package/dist/extensions/telegram/src/focus-handler.js +55 -0
- package/dist/extensions/telegram/src/focus-handler.js.map +1 -0
- package/dist/extensions/telegram/src/group-config-resolver.d.ts +12 -0
- package/dist/extensions/telegram/src/group-config-resolver.js +17 -0
- package/dist/extensions/telegram/src/group-config-resolver.js.map +1 -0
- package/dist/extensions/telegram/src/inbound-coalescer.d.ts +15 -0
- package/dist/extensions/telegram/src/inbound-coalescer.js +107 -0
- package/dist/extensions/telegram/src/inbound-coalescer.js.map +1 -0
- package/dist/extensions/telegram/src/inbound-processor.d.ts +1 -0
- package/dist/extensions/telegram/src/inbound-processor.js +41 -4
- package/dist/extensions/telegram/src/inbound-processor.js.map +1 -1
- package/dist/extensions/telegram/src/network-errors.d.ts +2 -0
- package/dist/extensions/telegram/src/network-errors.js +23 -0
- package/dist/extensions/telegram/src/network-errors.js.map +1 -0
- package/dist/extensions/telegram/src/plugin.d.ts +11 -0
- package/dist/extensions/telegram/src/plugin.js +191 -57
- package/dist/extensions/telegram/src/plugin.js.map +1 -1
- package/dist/extensions/telegram/src/polling-session.d.ts +17 -0
- package/dist/extensions/telegram/src/polling-session.js +112 -0
- package/dist/extensions/telegram/src/polling-session.js.map +1 -0
- package/dist/extensions/telegram/src/proxy-fetch.d.ts +2 -0
- package/dist/extensions/telegram/src/proxy-fetch.js +14 -0
- package/dist/extensions/telegram/src/proxy-fetch.js.map +1 -0
- package/dist/extensions/telegram/src/reactions.d.ts +14 -0
- package/dist/extensions/telegram/src/reactions.js +48 -0
- package/dist/extensions/telegram/src/reactions.js.map +1 -0
- package/dist/extensions/telegram/src/reply-params.d.ts +15 -0
- package/dist/extensions/telegram/src/reply-params.js +28 -0
- package/dist/extensions/telegram/src/reply-params.js.map +1 -0
- package/dist/extensions/telegram/src/startup-errors.d.ts +3 -0
- package/dist/extensions/telegram/src/startup-errors.js +27 -0
- package/dist/extensions/telegram/src/startup-errors.js.map +1 -0
- package/dist/extensions/telegram/src/telegram-actions.d.ts +25 -0
- package/dist/extensions/telegram/src/telegram-actions.js +65 -0
- package/dist/extensions/telegram/src/telegram-actions.js.map +1 -0
- package/dist/extensions/telegram/src/thread-bindings.d.ts +15 -0
- package/dist/extensions/telegram/src/thread-bindings.js +22 -0
- package/dist/extensions/telegram/src/thread-bindings.js.map +1 -0
- package/dist/extensions/telegram/src/token-resolver.d.ts +8 -0
- package/dist/extensions/telegram/src/token-resolver.js +34 -0
- package/dist/extensions/telegram/src/token-resolver.js.map +1 -0
- package/dist/extensions/telegram/src/update-offset-store.d.ts +9 -0
- package/dist/extensions/telegram/src/update-offset-store.js +66 -0
- package/dist/extensions/telegram/src/update-offset-store.js.map +1 -0
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +5 -3
- package/dist/extensions/weixin/src/api/api.js.map +1 -1
- package/dist/gateway/static/root/assets/{agents-4KTK-Ku7.js → agents-u8cmUfGQ.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-DkgInY2w.js → apps-page-DF8m9cUE.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-preview-renderer-DBAxQXb-.js → attachment-preview-renderer-CybMSIoS.js} +2 -2
- package/dist/gateway/static/root/assets/{attachment-process-heavy-Csq3TrrP.js → attachment-process-heavy-RnGYy9bC.js} +2 -2
- package/dist/gateway/static/root/assets/channels-settings-BM3doRvi.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-ah4zWEIP.js +8 -0
- package/dist/gateway/static/root/assets/{cron-api-BRDli2Mm.js → cron-api-DgMuL_2b.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-BzEr5Za8.js → cron-page-COfUPKfq.js} +1 -1
- package/dist/gateway/static/root/assets/{dist-BsHh1vX0.js → dist-Dzy3Q0ZH.js} +1 -1
- package/dist/gateway/static/root/assets/{docx-preview-Dxj1EkCO.js → docx-preview-CajIk2FR.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-TWt5q_ef.js → extension-debug-page-kyxxefKh.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-C3kV8ZvZ.js → extension-page-BVbCBHoI.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-Csy9LNC6.js → extension-settings-page-t1lb2A7v.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-BLLOP2CM.js → fetch-drJUxxKP.js} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives-MXbM8HvY.js → field-primitives-6Vo1Yga4.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-CkoyqfRx.js → heartbeat-config-api-BF3psu4O.js} +1 -1
- package/dist/gateway/static/root/assets/index-DjNDHzwG.css +1 -0
- package/dist/gateway/static/root/assets/index-WAyKAilR.js +4840 -0
- package/dist/gateway/static/root/assets/{logs-page-B2vY41ph.js → logs-page-BTVPXcHV.js} +1 -1
- package/dist/gateway/static/root/assets/{note-detail-page-B7qE5pkO.js → note-detail-page-DqSAg_5Z.js} +1 -1
- package/dist/gateway/static/root/assets/{note-time-NBBReVR4.js → note-time-FSOjchic.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-CsWYaqYM.js → notes-page-DkRX7BE2.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-BPGY3SCT.js → sessions-page-Khdw35Zk.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-advanced-gate-DtA451RM.js → settings-advanced-gate-DspC8oEm.js} +2 -2
- package/dist/gateway/static/root/assets/{settings-form-section-DYR_SPlX.js → settings-form-section-DuxvUuur.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-BJUgZQzN.js → settings-page-DN8JBZ8F.js} +2 -2
- package/dist/gateway/static/root/assets/{share-preview-page-3u8VFmdo.js → share-preview-page-UNAcbiMb.js} +2 -2
- package/dist/gateway/static/root/assets/{skills-page-DuyhcH4U.js → skills-page-ByYT0fXZ.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-e2q2yjs4.js → theme-store-B6KXPHgK.js} +1 -1
- package/dist/gateway/static/root/assets/url-q28QhI7l.js +3 -0
- package/dist/gateway/static/root/assets/{utils-B4Vw3fnc.js → utils-DK_1H47k.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-BFY67Hhp.js → voice-api-key-field-BYN2EIMs.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-page.utils-yUJ5jexd.js → workflow-page.utils-Bi19YNTr.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-DIMHCpNt.js → workflows-page-DP57FEKW.js} +1 -1
- package/dist/gateway/static/root/index.html +5 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +4 -0
- package/dist/src/agent/agent-manager.js +84 -4
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/child-agent-factory.d.ts +1 -0
- package/dist/src/agent/child-agent-factory.js +13 -10
- package/dist/src/agent/child-agent-factory.js.map +1 -1
- package/dist/src/agent/embedded/run-for-session.d.ts +1 -0
- package/dist/src/agent/embedded/run-for-session.js +2 -0
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/embedded/run-turn.js +1 -17
- package/dist/src/agent/embedded/run-turn.js.map +1 -1
- package/dist/src/agent/embedded/session-runner.js +3 -1
- package/dist/src/agent/embedded/session-runner.js.map +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.d.ts +1 -0
- package/dist/src/agent/embedded/session-tool-result-guard.js +1 -0
- package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
- package/dist/src/agent/inbound/attachment-pipeline.d.ts +37 -0
- package/dist/src/agent/inbound/attachment-pipeline.js +169 -0
- package/dist/src/agent/inbound/attachment-pipeline.js.map +1 -0
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +3 -5
- package/dist/src/agent/inbound/turn-dispatcher.js +1 -2
- package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
- package/dist/src/agent/memory/index.d.ts +2 -0
- package/dist/src/agent/memory/index.js +2 -1
- package/dist/src/agent/memory/memory-flush.d.ts +27 -0
- package/dist/src/agent/memory/memory-flush.js +124 -0
- package/dist/src/agent/memory/memory-flush.js.map +1 -0
- package/dist/src/agent/messaging/outbound-coordinator.js +2 -1
- package/dist/src/agent/messaging/outbound-coordinator.js.map +1 -1
- package/dist/src/agent/messaging/stream-manager.d.ts +2 -0
- package/dist/src/agent/messaging/stream-manager.js +3 -0
- package/dist/src/agent/messaging/stream-manager.js.map +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.d.ts +0 -4
- package/dist/src/agent/orchestration/agent-orchestrator.js +40 -107
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
- package/dist/src/agent/prompt/contribution.d.ts +9 -0
- package/dist/src/agent/prompt/contribution.js +1 -0
- package/dist/src/agent/prompt/safety.js +0 -10
- package/dist/src/agent/prompt/safety.js.map +1 -1
- package/dist/src/agent/prompt/sanitize-for-prompt.d.ts +6 -0
- package/dist/src/agent/prompt/sanitize-for-prompt.js +13 -0
- package/dist/src/agent/prompt/sanitize-for-prompt.js.map +1 -0
- package/dist/src/agent/prompt/sections/behavior.d.ts +5 -0
- package/dist/src/agent/prompt/sections/behavior.js +50 -0
- package/dist/src/agent/prompt/sections/behavior.js.map +1 -0
- package/dist/src/agent/prompt/sections/memory-skills.d.ts +9 -0
- package/dist/src/agent/prompt/sections/memory-skills.js +59 -0
- package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -0
- package/dist/src/agent/prompt/sections/messaging-runtime.d.ts +16 -0
- package/dist/src/agent/prompt/sections/messaging-runtime.js +69 -0
- package/dist/src/agent/prompt/sections/messaging-runtime.js.map +1 -0
- package/dist/src/agent/prompt/sections/project-context.d.ts +16 -0
- package/dist/src/agent/prompt/sections/project-context.js +58 -0
- package/dist/src/agent/prompt/sections/project-context.js.map +1 -0
- package/dist/src/agent/prompt/sections/tooling.d.ts +5 -0
- package/dist/src/agent/prompt/sections/tooling.js +119 -0
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -0
- package/dist/src/agent/prompt/sections/workspace-runtime.d.ts +11 -0
- package/dist/src/agent/prompt/sections/workspace-runtime.js +32 -0
- package/dist/src/agent/prompt/sections/workspace-runtime.js.map +1 -0
- package/dist/src/agent/prompt/service-prompt-builder.d.ts +13 -0
- package/dist/src/agent/prompt/service-prompt-builder.js +54 -13
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/prompt/subagent-context.d.ts +15 -0
- package/dist/src/agent/prompt/subagent-context.js +68 -0
- package/dist/src/agent/prompt/subagent-context.js.map +1 -0
- package/dist/src/agent/prompt/system-prompt-params.d.ts +53 -0
- package/dist/src/agent/prompt/system-prompt-params.js +74 -0
- package/dist/src/agent/prompt/system-prompt-params.js.map +1 -0
- package/dist/src/agent/prompt/system-prompt.d.ts +22 -11
- package/dist/src/agent/prompt/system-prompt.js +79 -193
- package/dist/src/agent/prompt/system-prompt.js.map +1 -1
- package/dist/src/agent/prompt/types.d.ts +3 -0
- package/dist/src/agent/service/build-direct-message-content.d.ts +5 -21
- package/dist/src/agent/service/build-direct-message-content.js +11 -64
- package/dist/src/agent/service/build-direct-message-content.js.map +1 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js +7 -0
- package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
- package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -3
- package/dist/src/agent/service/process-direct-one-shot.js +22 -17
- package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.d.ts +6 -20
- package/dist/src/agent/service/process-direct-streaming.js +39 -40
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service/webchat-tts.d.ts +4 -9
- package/dist/src/agent/service/webchat-tts.js +9 -20
- package/dist/src/agent/service/webchat-tts.js.map +1 -1
- package/dist/src/agent/service.d.ts +8 -19
- package/dist/src/agent/service.js +53 -11
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/tools/factory.js +2 -0
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +2 -1
- package/dist/src/agent/tools/media-read-tool.d.ts +2 -0
- package/dist/src/agent/tools/media-read-tool.js +89 -0
- package/dist/src/agent/tools/media-read-tool.js.map +1 -0
- package/dist/src/auth/credentials.js +0 -1
- package/dist/src/auth/credentials.js.map +1 -1
- package/dist/src/channels/attachments/attachment-classifiers.d.ts +8 -0
- package/dist/src/channels/attachments/attachment-classifiers.js +11 -0
- package/dist/src/channels/attachments/attachment-classifiers.js.map +1 -0
- package/dist/src/channels/attachments/inbound-persist.d.ts +13 -34
- package/dist/src/channels/attachments/inbound-persist.js +34 -102
- package/dist/src/channels/attachments/inbound-persist.js.map +1 -1
- package/dist/src/channels/attachments/inbound-types.d.ts +13 -0
- package/dist/src/channels/attachments/inbound-types.js +30 -0
- package/dist/src/channels/attachments/inbound-types.js.map +1 -0
- package/dist/src/channels/attachments/outbound-tts-persist.d.ts +3 -12
- package/dist/src/channels/attachments/outbound-tts-persist.js +28 -48
- package/dist/src/channels/attachments/outbound-tts-persist.js.map +1 -1
- package/dist/src/channels/attachments/voice-stt-webchat.d.ts +3 -3
- package/dist/src/channels/attachments/voice-stt-webchat.js +8 -14
- package/dist/src/channels/attachments/voice-stt-webchat.js.map +1 -1
- package/dist/src/channels/channel-domain.d.ts +30 -2
- package/dist/src/channels/exec-approval-runtime.d.ts +29 -0
- package/dist/src/channels/exec-approval-runtime.js +30 -0
- package/dist/src/channels/exec-approval-runtime.js.map +1 -0
- package/dist/src/channels/index.js +1 -1
- package/dist/src/channels/plugin-types.d.ts +1 -0
- package/dist/src/channels/transport-types.d.ts +2 -2
- package/dist/src/cli/bin.d.ts +1 -0
- package/dist/src/cli/bin.js +1 -0
- package/dist/src/cli/bin.js.map +1 -1
- package/dist/src/cli/commands/channels.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/database-schema.js +62 -0
- package/dist/src/cli/commands/doctor/checks/database-schema.js.map +1 -0
- package/dist/src/cli/commands/doctor/flow.js +2 -0
- package/dist/src/cli/commands/doctor/flow.js.map +1 -1
- package/dist/src/cli/commands/init.js +2 -57
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/onboard/channels/registry.js +1 -1
- package/dist/src/cli/commands/setup.js +6 -5
- package/dist/src/cli/commands/setup.js.map +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +1 -2
- package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/paths.d.ts +0 -13
- package/dist/src/config/paths.js +1 -20
- package/dist/src/config/paths.js.map +1 -1
- package/dist/src/config/rules.js +1 -1
- package/dist/src/config/schema.d.ts +24 -0
- package/dist/src/config/schema.js +33 -2
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/cron/executor.js +2 -2
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/oauth-async.js +36 -3
- package/dist/src/gateway/hono/oauth-async.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/channels.js +3 -3
- package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/media.d.ts +3 -0
- package/dist/src/gateway/hono/routes/media.js +50 -0
- package/dist/src/gateway/hono/routes/media.js.map +1 -0
- package/dist/src/gateway/hono/routes/sessions.js +6 -0
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +1 -87
- package/dist/src/gateway/hono/routes/workspace.js.map +1 -1
- package/dist/src/gateway/service/sessions-api.js +3 -0
- package/dist/src/gateway/service/sessions-api.js.map +1 -1
- package/dist/src/infra/http-proxy-env.d.ts +4 -0
- package/dist/src/infra/http-proxy-env.js +23 -0
- package/dist/src/infra/http-proxy-env.js.map +1 -0
- package/dist/src/media/index.d.ts +5 -0
- package/dist/src/media/index.js +5 -0
- package/dist/src/media/media-reference.d.ts +23 -0
- package/dist/src/media/media-reference.js +34 -0
- package/dist/src/media/media-reference.js.map +1 -0
- package/dist/src/media/paths.d.ts +5 -0
- package/dist/src/media/paths.js +20 -0
- package/dist/src/media/paths.js.map +1 -0
- package/dist/src/media/session-references.d.ts +8 -0
- package/dist/src/media/session-references.js +45 -0
- package/dist/src/media/session-references.js.map +1 -0
- package/dist/src/media/store.d.ts +19 -0
- package/dist/src/media/store.js +131 -0
- package/dist/src/media/store.js.map +1 -0
- package/dist/src/media/types.d.ts +34 -0
- package/dist/src/media/types.js +1 -0
- package/dist/src/media/uri.d.ts +15 -0
- package/dist/src/media/uri.js +51 -0
- package/dist/src/media/uri.js.map +1 -0
- package/dist/src/session/session-title.js +6 -3
- package/dist/src/session/session-title.js.map +1 -1
- package/dist/src/session/store.js +1 -1
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/types.d.ts +12 -7
- package/dist/src/session/types.js.map +1 -1
- package/dist/src/storage/sqlite/index.d.ts +4 -1
- package/dist/src/storage/sqlite/index.js +6 -2
- package/dist/src/storage/sqlite/migrations/002_add_flush_columns.sql +3 -0
- package/dist/src/storage/sqlite/migrations/discover.d.ts +4 -0
- package/dist/src/storage/sqlite/migrations/discover.js +38 -0
- package/dist/src/storage/sqlite/migrations/discover.js.map +1 -0
- package/dist/src/storage/sqlite/migrations/discover.ts +52 -0
- package/dist/src/storage/sqlite/migrations/errors.d.ts +11 -0
- package/dist/src/storage/sqlite/migrations/errors.js +27 -0
- package/dist/src/storage/sqlite/migrations/errors.js.map +1 -0
- package/dist/src/storage/sqlite/migrations/errors.ts +32 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +22 -0
- package/dist/src/storage/sqlite/migrations/runner.js +97 -0
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -0
- package/dist/src/storage/sqlite/migrations/runner.ts +153 -0
- package/dist/src/storage/sqlite/migrations/types.d.ts +12 -0
- package/dist/src/storage/sqlite/migrations/types.js +1 -0
- package/dist/src/storage/sqlite/migrations/types.ts +13 -0
- package/dist/src/storage/sqlite/row-mappers.d.ts +4 -0
- package/dist/src/storage/sqlite/row-mappers.js +4 -0
- package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
- package/dist/src/storage/sqlite/schema-version.d.ts +6 -0
- package/dist/src/storage/sqlite/schema-version.js +29 -0
- package/dist/src/storage/sqlite/schema-version.js.map +1 -0
- package/dist/src/storage/sqlite/schema.d.ts +5 -3
- package/dist/src/storage/sqlite/schema.js +24 -28
- package/dist/src/storage/sqlite/schema.js.map +1 -1
- package/dist/src/storage/sqlite/schema.sql +2 -0
- package/dist/src/storage/sqlite/session-metadata.js +1 -0
- package/dist/src/storage/sqlite/session-metadata.js.map +1 -1
- package/dist/src/storage/sqlite/session-repository.js +7 -3
- package/dist/src/storage/sqlite/session-repository.js.map +1 -1
- package/package.json +3 -3
- package/dist/gateway/static/root/assets/channels-settings-BxW1Xio4.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-Cxm6AvQO.js +0 -8
- package/dist/gateway/static/root/assets/index-BJDmBCSl.css +0 -1
- package/dist/gateway/static/root/assets/index-Cbg5TS5m.js +0 -4707
- package/dist/gateway/static/root/assets/url-DpFBIyN9.js +0 -3
- package/dist/src/cli/commands/onboard/workspace.d.ts +0 -14
- package/dist/src/cli/commands/onboard/workspace.js +0 -33
- package/dist/src/cli/commands/onboard/workspace.js.map +0 -1
- package/dist/src/cli/utils/workspace.d.ts +0 -35
- package/dist/src/cli/utils/workspace.js +0 -72
- package/dist/src/cli/utils/workspace.js.map +0 -1
|
@@ -3,11 +3,12 @@ import { createLogger } from "../../utils/logger/index.js";
|
|
|
3
3
|
import { init_logger } from "../../utils/logger.js";
|
|
4
4
|
import { init_paths } from "../../config/paths.js";
|
|
5
5
|
import { DEFAULT_USER_FILENAME } from "../context/workspace.js";
|
|
6
|
+
import { resolveSystemPromptBuildParams } from "./system-prompt-params.js";
|
|
7
|
+
import { buildSystemPrompt } from "./system-prompt.js";
|
|
6
8
|
import { createSkillConfigManager } from "../skills/config.js";
|
|
7
9
|
import { buildTtsSystemPromptHint } from "../../voice/tts/directives.js";
|
|
8
10
|
import { mergeTtsConfigFromAppConfig } from "../../voice/tts/merge-config.js";
|
|
9
11
|
import { selectSkillsVisibleInPrompt } from "../skills/format-skills-prompt.js";
|
|
10
|
-
import { buildSystemPrompt } from "./system-prompt.js";
|
|
11
12
|
import { join } from "node:path";
|
|
12
13
|
import { existsSync, readFileSync } from "node:fs";
|
|
13
14
|
//#region src/agent/prompt/service-prompt-builder.ts
|
|
@@ -63,16 +64,42 @@ var SystemPromptBuilder = class {
|
|
|
63
64
|
modelOverrides: ttsMerged.modelOverrides,
|
|
64
65
|
textToSpeechTool: ttsMerged.enabled && reg.includes("text_to_speech")
|
|
65
66
|
});
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
registeredToolNames: options.registeredToolNames
|
|
72
|
-
}),
|
|
67
|
+
const resolved = resolveSystemPromptBuildParams(this.config, {
|
|
68
|
+
workspaceDir: ws,
|
|
69
|
+
sessionKey: options.sessionKey,
|
|
70
|
+
toolNames: options.registeredToolNames,
|
|
71
|
+
toolSummaries: options.toolSummaries,
|
|
73
72
|
userTimezone,
|
|
74
73
|
externalMemoryInstructions: options.externalMemoryInstructions,
|
|
75
|
-
|
|
74
|
+
heartbeatEnabled,
|
|
75
|
+
ttsSystemHint,
|
|
76
|
+
extraSystemPrompt: options.extraSystemPrompt,
|
|
77
|
+
modelRef: options.modelRef,
|
|
78
|
+
agentId: options.agentId,
|
|
79
|
+
thinkingLevel: options.thinkingLevel,
|
|
80
|
+
promptMode: options.promptMode,
|
|
81
|
+
silentReplyPromptMode: options.silentReplyPromptMode,
|
|
82
|
+
promptContribution: options.promptContribution
|
|
83
|
+
});
|
|
84
|
+
const basePrompt = buildSystemPrompt(ws, {
|
|
85
|
+
contextFiles,
|
|
86
|
+
promptMode: resolved.promptMode,
|
|
87
|
+
heartbeatEnabled: resolved.heartbeatEnabled,
|
|
88
|
+
heartbeatPrompt: resolved.heartbeatPrompt,
|
|
89
|
+
toolNames: resolved.toolNames,
|
|
90
|
+
toolSummaries: resolved.toolSummaries,
|
|
91
|
+
memoryCitationsMode: resolved.memoryCitationsMode,
|
|
92
|
+
includeMemorySection: resolved.includeMemorySection,
|
|
93
|
+
userTimezone: resolved.userTimezone,
|
|
94
|
+
runtime: resolved.runtimeInfo,
|
|
95
|
+
channels: resolved.channels,
|
|
96
|
+
externalMemoryInstructions: resolved.externalMemoryInstructions,
|
|
97
|
+
ttsSystemHint: resolved.ttsSystemHint,
|
|
98
|
+
extraSystemPrompt: resolved.extraSystemPrompt,
|
|
99
|
+
silentReplyPromptMode: resolved.silentReplyPromptMode,
|
|
100
|
+
promptContribution: resolved.promptContribution,
|
|
101
|
+
includeProblemSolving: resolved.includeProblemSolving,
|
|
102
|
+
includeToneSection: resolved.includeToneSection
|
|
76
103
|
});
|
|
77
104
|
const skillPrompt = options.skillPromptText !== void 0 ? options.skillPromptText : this.skillManager.getPromptForSkillAllowlist(options.skillAllowlist, options.registeredToolNames);
|
|
78
105
|
const fullPrompt = skillPrompt ? `${basePrompt}\n\n${skillPrompt}` : basePrompt;
|
|
@@ -80,7 +107,9 @@ var SystemPromptBuilder = class {
|
|
|
80
107
|
baseLength: basePrompt.length,
|
|
81
108
|
skillLength: skillPrompt?.length || 0,
|
|
82
109
|
totalLength: fullPrompt.length,
|
|
83
|
-
contextFileCount: contextFiles.length
|
|
110
|
+
contextFileCount: contextFiles.length,
|
|
111
|
+
promptMode: resolved.promptMode,
|
|
112
|
+
toolCount: resolved.toolNames?.length ?? 0
|
|
84
113
|
}, "System prompt built");
|
|
85
114
|
return fullPrompt;
|
|
86
115
|
}
|
|
@@ -113,11 +142,23 @@ var SystemPromptBuilder = class {
|
|
|
113
142
|
getBasePrompt(contextFiles, options) {
|
|
114
143
|
const ws = options?.workspaceOverride ?? this.workspace;
|
|
115
144
|
const profilePathRoot = options?.profileMarkdownPathRoot ?? ws;
|
|
145
|
+
const resolved = resolveSystemPromptBuildParams(this.config, {
|
|
146
|
+
workspaceDir: ws,
|
|
147
|
+
sessionKey: options?.sessionKey,
|
|
148
|
+
toolNames: options?.registeredToolNames,
|
|
149
|
+
userTimezone: this.extractTimezone(contextFiles, profilePathRoot),
|
|
150
|
+
externalMemoryInstructions: options?.externalMemoryInstructions,
|
|
151
|
+
heartbeatEnabled: this.config.gateway?.heartbeat?.includeSystemPromptSection ?? false
|
|
152
|
+
});
|
|
116
153
|
return buildSystemPrompt(ws, {
|
|
117
154
|
contextFiles,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
155
|
+
promptMode: resolved.promptMode,
|
|
156
|
+
heartbeatEnabled: resolved.heartbeatEnabled,
|
|
157
|
+
toolNames: resolved.toolNames,
|
|
158
|
+
userTimezone: resolved.userTimezone,
|
|
159
|
+
runtime: resolved.runtimeInfo,
|
|
160
|
+
channels: resolved.channels,
|
|
161
|
+
externalMemoryInstructions: resolved.externalMemoryInstructions
|
|
121
162
|
});
|
|
122
163
|
}
|
|
123
164
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-prompt-builder.js","names":["buildBaseSystemPrompt"],"sources":["../../../../src/agent/prompt/service-prompt-builder.ts"],"sourcesContent":["/**\n * System Prompt Builder - Builds the complete system prompt\n *\n * Combines base system prompt with skill prompts and bootstrap Project Context.\n */\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport type { Config } from '../../config/schema.js';\nimport type { EmbeddedContextFile } from '../bootstrap/types.js';\nimport { DEFAULT_USER_FILENAME } from '../context/workspace.js';\nimport type { SkillManager } from '../skills/skill-manager.js';\nimport { createSkillConfigManager } from '../skills/config.js';\nimport { selectSkillsVisibleInPrompt } from '../skills/format-skills-prompt.js';\nimport { resolveStateDir } from '../../config/paths.js';\nimport { buildSystemPrompt as buildBaseSystemPrompt } from './system-prompt.js';\nimport { mergeTtsConfigFromAppConfig } from '../../voice/tts/merge-config.js';\nimport { buildTtsSystemPromptHint } from '../../voice/tts/directives.js';\nimport { createLogger } from '../../utils/logger.js';\n\nconst log = createLogger('SystemPromptBuilder');\n\nexport interface SystemPromptBuildOptions {\n externalMemoryInstructions?: string;\n workspaceOverride?: string;\n profileMarkdownPathRoot?: string;\n systemPromptOverride?: string;\n skillPromptText?: string;\n skillAllowlist?: string[];\n registeredToolNames?: string[];\n}\n\nexport interface SystemPromptBuilderConfig {\n workspace: string;\n config: Config;\n skillManager: SkillManager;\n}\n\nexport class SystemPromptBuilder {\n private workspace: string;\n private config: Config;\n private skillManager: SkillManager;\n\n constructor(config: SystemPromptBuilderConfig) {\n this.workspace = config.workspace;\n this.config = config.config;\n this.skillManager = config.skillManager;\n }\n\n build(contextFiles: EmbeddedContextFile[], options: SystemPromptBuildOptions): string {\n const ws = options.workspaceOverride ?? this.workspace;\n const profilePathRoot = options.profileMarkdownPathRoot ?? ws;\n\n if (options.systemPromptOverride?.trim()) {\n const skillPrompt =\n options.skillPromptText !== undefined\n ? options.skillPromptText\n : this.skillManager.getPromptForSkillAllowlist(\n options.skillAllowlist,\n options.registeredToolNames,\n );\n const trimmed = options.systemPromptOverride.trim();\n let fullPrompt = skillPrompt.trim() ? `${trimmed}\\n\\n${skillPrompt}` : trimmed;\n const ttsMerged = mergeTtsConfigFromAppConfig(this.config.messages?.tts);\n const reg = options.registeredToolNames ?? [];\n const ttsHint = buildTtsSystemPromptHint({\n enabled: ttsMerged.enabled,\n trigger: ttsMerged.trigger,\n maxTextLength: ttsMerged.maxTextLength,\n modelOverrides: ttsMerged.modelOverrides,\n textToSpeechTool: ttsMerged.enabled && reg.includes('text_to_speech'),\n });\n if (ttsHint?.trim()) {\n fullPrompt = `${fullPrompt}\\n\\n## Voice (TTS)\\n\\n${ttsHint.trim()}`;\n }\n log.debug({ baseLength: trimmed.length, skillLength: skillPrompt.length, totalLength: fullPrompt.length }, 'System prompt built (override)');\n return fullPrompt;\n }\n\n const heartbeatEnabled = this.config.gateway?.heartbeat?.includeSystemPromptSection ?? false;\n const userTimezone = this.extractTimezone(contextFiles, profilePathRoot);\n\n const ttsMerged = mergeTtsConfigFromAppConfig(this.config.messages?.tts);\n const reg = options.registeredToolNames ?? [];\n const ttsSystemHint = buildTtsSystemPromptHint({\n enabled: ttsMerged.enabled,\n trigger: ttsMerged.trigger,\n maxTextLength: ttsMerged.maxTextLength,\n modelOverrides: ttsMerged.modelOverrides,\n textToSpeechTool: ttsMerged.enabled && reg.includes('text_to_speech'),\n });\n\n const basePrompt = buildBaseSystemPrompt(ws, {\n contextFiles,\n heartbeatEnabled,\n availableTools: this.getSkillNamesForSkillsSection({\n skillAllowlist: options.skillAllowlist,\n registeredToolNames: options.registeredToolNames,\n }),\n userTimezone,\n externalMemoryInstructions: options.externalMemoryInstructions,\n ttsSystemHint,\n });\n\n const skillPrompt =\n options.skillPromptText !== undefined\n ? options.skillPromptText\n : this.skillManager.getPromptForSkillAllowlist(\n options.skillAllowlist,\n options.registeredToolNames,\n );\n\n const fullPrompt = skillPrompt ? `${basePrompt}\\n\\n${skillPrompt}` : basePrompt;\n\n log.debug(\n {\n baseLength: basePrompt.length,\n skillLength: skillPrompt?.length || 0,\n totalLength: fullPrompt.length,\n contextFileCount: contextFiles.length,\n },\n 'System prompt built',\n );\n\n return fullPrompt;\n }\n\n rebuild(contextFiles: EmbeddedContextFile[], options: SystemPromptBuildOptions): string {\n this.skillManager.reload();\n return this.build(contextFiles, options);\n }\n\n private extractTimezone(contextFiles: EmbeddedContextFile[], profilePathRoot: string): string | undefined {\n const userContext = contextFiles.find((file) =>\n file.path.replace(/\\\\/g, '/').toLowerCase().endsWith('/user.md'),\n );\n if (userContext?.content) {\n const match = userContext.content.match(/Timezone:\\s*(.+)/i);\n if (match) {\n return match[1].trim();\n }\n }\n\n const primaryPath = join(profilePathRoot, DEFAULT_USER_FILENAME);\n if (existsSync(primaryPath)) {\n try {\n const raw = readFileSync(primaryPath, 'utf-8');\n const match = raw.match(/Timezone:\\s*(.+)/i);\n if (match) {\n return match[1].trim();\n }\n } catch {\n /* ignore */\n }\n }\n\n return undefined;\n }\n\n private getSkillNamesForSkillsSection(options?: {\n skillAllowlist?: string[];\n registeredToolNames?: string[];\n }): string[] {\n const skillsConfig = createSkillConfigManager(resolveStateDir()).load();\n return selectSkillsVisibleInPrompt(this.skillManager.getSkills(), skillsConfig, {\n skillAllowlist: options?.skillAllowlist,\n registeredToolNames: options?.registeredToolNames,\n }).map((s) => s.name);\n }\n\n getSkillPrompt(): string {\n return this.skillManager.getPrompt();\n }\n\n getBasePrompt(\n contextFiles: EmbeddedContextFile[],\n options?: {\n externalMemoryInstructions?: string;\n workspaceOverride?: string;\n profileMarkdownPathRoot?: string;\n },\n ): string {\n const ws = options?.workspaceOverride ?? this.workspace;\n const profilePathRoot = options?.profileMarkdownPathRoot ?? ws;\n return buildBaseSystemPrompt(ws, {\n contextFiles,\n heartbeatEnabled: this.config.gateway?.heartbeat?.includeSystemPromptSection ?? false,\n userTimezone: this.extractTimezone(contextFiles, profilePathRoot),\n externalMemoryInstructions: options?.externalMemoryInstructions,\n });\n }\n}\n\nexport function createSystemPromptBuilder(config: SystemPromptBuilderConfig): SystemPromptBuilder {\n return new SystemPromptBuilder(config);\n}\n\nexport type { SystemPromptBuilderConfig as SystemPromptConfig };\nexport type { SystemPromptBuilderConfig as SystemPromptBuilderOptions };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service-prompt-builder.js","names":["buildBaseSystemPrompt"],"sources":["../../../../src/agent/prompt/service-prompt-builder.ts"],"sourcesContent":["/**\n * System Prompt Builder - Builds the complete system prompt\n *\n * Combines base system prompt with skill prompts and bootstrap Project Context.\n */\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport type { Config } from '../../config/schema.js';\nimport type { EmbeddedContextFile } from '../bootstrap/types.js';\nimport { DEFAULT_USER_FILENAME } from '../context/workspace.js';\nimport type { SkillManager } from '../skills/skill-manager.js';\nimport { createSkillConfigManager } from '../skills/config.js';\nimport { selectSkillsVisibleInPrompt } from '../skills/format-skills-prompt.js';\nimport { resolveStateDir } from '../../config/paths.js';\nimport { buildSystemPrompt as buildBaseSystemPrompt } from './system-prompt.js';\nimport { resolveSystemPromptBuildParams } from './system-prompt-params.js';\nimport type { PromptMode, SilentReplyPromptMode } from './types.js';\nimport type { ProviderSystemPromptContribution } from './contribution.js';\nimport { mergeTtsConfigFromAppConfig } from '../../voice/tts/merge-config.js';\nimport { buildTtsSystemPromptHint } from '../../voice/tts/directives.js';\nimport { createLogger } from '../../utils/logger.js';\n\nconst log = createLogger('SystemPromptBuilder');\n\nexport interface SystemPromptBuildOptions {\n externalMemoryInstructions?: string;\n workspaceOverride?: string;\n profileMarkdownPathRoot?: string;\n systemPromptOverride?: string;\n skillPromptText?: string;\n skillAllowlist?: string[];\n registeredToolNames?: string[];\n toolSummaries?: Record<string, string>;\n sessionKey?: string;\n promptMode?: PromptMode;\n modelRef?: string;\n agentId?: string;\n thinkingLevel?: string;\n extraSystemPrompt?: string;\n silentReplyPromptMode?: SilentReplyPromptMode;\n promptContribution?: ProviderSystemPromptContribution;\n}\n\nexport interface SystemPromptBuilderConfig {\n workspace: string;\n config: Config;\n skillManager: SkillManager;\n}\n\nexport class SystemPromptBuilder {\n private workspace: string;\n private config: Config;\n private skillManager: SkillManager;\n\n constructor(config: SystemPromptBuilderConfig) {\n this.workspace = config.workspace;\n this.config = config.config;\n this.skillManager = config.skillManager;\n }\n\n build(contextFiles: EmbeddedContextFile[], options: SystemPromptBuildOptions): string {\n const ws = options.workspaceOverride ?? this.workspace;\n const profilePathRoot = options.profileMarkdownPathRoot ?? ws;\n\n if (options.systemPromptOverride?.trim()) {\n const skillPrompt =\n options.skillPromptText !== undefined\n ? options.skillPromptText\n : this.skillManager.getPromptForSkillAllowlist(\n options.skillAllowlist,\n options.registeredToolNames,\n );\n const trimmed = options.systemPromptOverride.trim();\n let fullPrompt = skillPrompt.trim() ? `${trimmed}\\n\\n${skillPrompt}` : trimmed;\n const ttsMerged = mergeTtsConfigFromAppConfig(this.config.messages?.tts);\n const reg = options.registeredToolNames ?? [];\n const ttsHint = buildTtsSystemPromptHint({\n enabled: ttsMerged.enabled,\n trigger: ttsMerged.trigger,\n maxTextLength: ttsMerged.maxTextLength,\n modelOverrides: ttsMerged.modelOverrides,\n textToSpeechTool: ttsMerged.enabled && reg.includes('text_to_speech'),\n });\n if (ttsHint?.trim()) {\n fullPrompt = `${fullPrompt}\\n\\n## Voice (TTS)\\n\\n${ttsHint.trim()}`;\n }\n log.debug({ baseLength: trimmed.length, skillLength: skillPrompt.length, totalLength: fullPrompt.length }, 'System prompt built (override)');\n return fullPrompt;\n }\n\n const heartbeatEnabled = this.config.gateway?.heartbeat?.includeSystemPromptSection ?? false;\n const userTimezone = this.extractTimezone(contextFiles, profilePathRoot);\n\n const ttsMerged = mergeTtsConfigFromAppConfig(this.config.messages?.tts);\n const reg = options.registeredToolNames ?? [];\n const ttsSystemHint = buildTtsSystemPromptHint({\n enabled: ttsMerged.enabled,\n trigger: ttsMerged.trigger,\n maxTextLength: ttsMerged.maxTextLength,\n modelOverrides: ttsMerged.modelOverrides,\n textToSpeechTool: ttsMerged.enabled && reg.includes('text_to_speech'),\n });\n\n const resolved = resolveSystemPromptBuildParams(this.config, {\n workspaceDir: ws,\n sessionKey: options.sessionKey,\n toolNames: options.registeredToolNames,\n toolSummaries: options.toolSummaries,\n userTimezone,\n externalMemoryInstructions: options.externalMemoryInstructions,\n heartbeatEnabled,\n ttsSystemHint,\n extraSystemPrompt: options.extraSystemPrompt,\n modelRef: options.modelRef,\n agentId: options.agentId,\n thinkingLevel: options.thinkingLevel,\n promptMode: options.promptMode,\n silentReplyPromptMode: options.silentReplyPromptMode,\n promptContribution: options.promptContribution,\n });\n\n const basePrompt = buildBaseSystemPrompt(ws, {\n contextFiles,\n promptMode: resolved.promptMode,\n heartbeatEnabled: resolved.heartbeatEnabled,\n heartbeatPrompt: resolved.heartbeatPrompt,\n toolNames: resolved.toolNames,\n toolSummaries: resolved.toolSummaries,\n memoryCitationsMode: resolved.memoryCitationsMode,\n includeMemorySection: resolved.includeMemorySection,\n userTimezone: resolved.userTimezone,\n runtime: resolved.runtimeInfo,\n channels: resolved.channels,\n externalMemoryInstructions: resolved.externalMemoryInstructions,\n ttsSystemHint: resolved.ttsSystemHint,\n extraSystemPrompt: resolved.extraSystemPrompt,\n silentReplyPromptMode: resolved.silentReplyPromptMode,\n promptContribution: resolved.promptContribution,\n includeProblemSolving: resolved.includeProblemSolving,\n includeToneSection: resolved.includeToneSection,\n });\n\n const skillPrompt =\n options.skillPromptText !== undefined\n ? options.skillPromptText\n : this.skillManager.getPromptForSkillAllowlist(\n options.skillAllowlist,\n options.registeredToolNames,\n );\n\n const fullPrompt = skillPrompt ? `${basePrompt}\\n\\n${skillPrompt}` : basePrompt;\n\n log.debug(\n {\n baseLength: basePrompt.length,\n skillLength: skillPrompt?.length || 0,\n totalLength: fullPrompt.length,\n contextFileCount: contextFiles.length,\n promptMode: resolved.promptMode,\n toolCount: resolved.toolNames?.length ?? 0,\n },\n 'System prompt built',\n );\n\n return fullPrompt;\n }\n\n rebuild(contextFiles: EmbeddedContextFile[], options: SystemPromptBuildOptions): string {\n this.skillManager.reload();\n return this.build(contextFiles, options);\n }\n\n private extractTimezone(contextFiles: EmbeddedContextFile[], profilePathRoot: string): string | undefined {\n const userContext = contextFiles.find((file) =>\n file.path.replace(/\\\\/g, '/').toLowerCase().endsWith('/user.md'),\n );\n if (userContext?.content) {\n const match = userContext.content.match(/Timezone:\\s*(.+)/i);\n if (match) {\n return match[1].trim();\n }\n }\n\n const primaryPath = join(profilePathRoot, DEFAULT_USER_FILENAME);\n if (existsSync(primaryPath)) {\n try {\n const raw = readFileSync(primaryPath, 'utf-8');\n const match = raw.match(/Timezone:\\s*(.+)/i);\n if (match) {\n return match[1].trim();\n }\n } catch {\n /* ignore */\n }\n }\n\n return undefined;\n }\n\n private getSkillNamesForSkillsSection(options?: {\n skillAllowlist?: string[];\n registeredToolNames?: string[];\n }): string[] {\n const skillsConfig = createSkillConfigManager(resolveStateDir()).load();\n return selectSkillsVisibleInPrompt(this.skillManager.getSkills(), skillsConfig, {\n skillAllowlist: options?.skillAllowlist,\n registeredToolNames: options?.registeredToolNames,\n }).map((s) => s.name);\n }\n\n getSkillPrompt(): string {\n return this.skillManager.getPrompt();\n }\n\n getBasePrompt(\n contextFiles: EmbeddedContextFile[],\n options?: {\n externalMemoryInstructions?: string;\n workspaceOverride?: string;\n profileMarkdownPathRoot?: string;\n registeredToolNames?: string[];\n sessionKey?: string;\n },\n ): string {\n const ws = options?.workspaceOverride ?? this.workspace;\n const profilePathRoot = options?.profileMarkdownPathRoot ?? ws;\n const resolved = resolveSystemPromptBuildParams(this.config, {\n workspaceDir: ws,\n sessionKey: options?.sessionKey,\n toolNames: options?.registeredToolNames,\n userTimezone: this.extractTimezone(contextFiles, profilePathRoot),\n externalMemoryInstructions: options?.externalMemoryInstructions,\n heartbeatEnabled: this.config.gateway?.heartbeat?.includeSystemPromptSection ?? false,\n });\n return buildBaseSystemPrompt(ws, {\n contextFiles,\n promptMode: resolved.promptMode,\n heartbeatEnabled: resolved.heartbeatEnabled,\n toolNames: resolved.toolNames,\n userTimezone: resolved.userTimezone,\n runtime: resolved.runtimeInfo,\n channels: resolved.channels,\n externalMemoryInstructions: resolved.externalMemoryInstructions,\n });\n }\n}\n\nexport function createSystemPromptBuilder(config: SystemPromptBuilderConfig): SystemPromptBuilder {\n return new SystemPromptBuilder(config);\n}\n\nexport type { SystemPromptBuilderConfig as SystemPromptConfig };\nexport type { SystemPromptBuilderConfig as SystemPromptBuilderOptions };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function buildSubagentContextSection(params: {
|
|
2
|
+
goal: string;
|
|
3
|
+
context?: string;
|
|
4
|
+
workspace?: string;
|
|
5
|
+
requesterSessionKey?: string;
|
|
6
|
+
childSessionKey?: string;
|
|
7
|
+
}): string;
|
|
8
|
+
export declare function buildSubagentSystemPrompt(params: {
|
|
9
|
+
goal: string;
|
|
10
|
+
context?: string;
|
|
11
|
+
workspace?: string;
|
|
12
|
+
requesterSessionKey?: string;
|
|
13
|
+
childSessionKey?: string;
|
|
14
|
+
toolNames?: string[];
|
|
15
|
+
}): string;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { NO_REPLY } from "../../heartbeat/tokens.js";
|
|
2
|
+
import { buildSystemPrompt } from "./system-prompt.js";
|
|
3
|
+
//#region src/agent/prompt/subagent-context.ts
|
|
4
|
+
function buildSubagentContextSection(params) {
|
|
5
|
+
const taskBody = params.goal.trim();
|
|
6
|
+
const lines = [
|
|
7
|
+
"# Subagent Context",
|
|
8
|
+
"",
|
|
9
|
+
"You are a **sub-agent** spawned by the parent agent for a specific task.",
|
|
10
|
+
"",
|
|
11
|
+
...taskBody.includes("\n") ? [
|
|
12
|
+
"## Your Role",
|
|
13
|
+
"- You were created to handle the following task (verbatim; line breaks preserved):",
|
|
14
|
+
"",
|
|
15
|
+
"```",
|
|
16
|
+
taskBody,
|
|
17
|
+
"```",
|
|
18
|
+
"- Complete this task. That's your entire purpose.",
|
|
19
|
+
"- You are NOT the parent agent. Don't try to be."
|
|
20
|
+
] : [
|
|
21
|
+
"## Your Role",
|
|
22
|
+
`- You were created to handle: ${taskBody}`,
|
|
23
|
+
"- Complete this task. That's your entire purpose.",
|
|
24
|
+
"- You are NOT the parent agent. Don't try to be."
|
|
25
|
+
],
|
|
26
|
+
"",
|
|
27
|
+
"## Rules",
|
|
28
|
+
"1. **Stay focused** - Do your assigned task, nothing else",
|
|
29
|
+
"2. **Complete the task** - Your final message will be automatically reported to the parent agent",
|
|
30
|
+
"3. **Don't initiate** - No heartbeats, no proactive actions, no side quests",
|
|
31
|
+
"4. **Be ephemeral** - You may be terminated after task completion",
|
|
32
|
+
"5. **Trust push-based completion** - Do not busy-poll for parent status",
|
|
33
|
+
"6. **Recover from truncated tool output** - Re-read only what you need using smaller chunks",
|
|
34
|
+
"",
|
|
35
|
+
"## Output Format",
|
|
36
|
+
"When complete, your final response should include:",
|
|
37
|
+
"- What you accomplished or found",
|
|
38
|
+
"- Any relevant details the parent agent should know",
|
|
39
|
+
"- Keep it concise but informative",
|
|
40
|
+
"",
|
|
41
|
+
"## What You DON'T Do",
|
|
42
|
+
"- NO user conversations (that is the parent agent's job)",
|
|
43
|
+
"- NO external messages unless explicitly tasked with a specific recipient/channel",
|
|
44
|
+
"- NO cron jobs or persistent state",
|
|
45
|
+
"- Only use `send_message` when explicitly instructed to contact a specific external recipient",
|
|
46
|
+
"",
|
|
47
|
+
"## Sub-Agent Spawning",
|
|
48
|
+
"You are a leaf worker for this delegation. Do NOT spawn further sub-agents unless `delegate_task` is explicitly available and the parent task requires it.",
|
|
49
|
+
""
|
|
50
|
+
];
|
|
51
|
+
if (params.context?.trim()) lines.push("## Context", params.context.trim(), "");
|
|
52
|
+
if (params.workspace?.trim()) lines.push(`Workspace: ${params.workspace.trim()}`, "");
|
|
53
|
+
if (params.requesterSessionKey || params.childSessionKey) lines.push("## Session Context", ...params.requesterSessionKey ? [`- Requester session: ${params.requesterSessionKey}`] : [], ...params.childSessionKey ? [`- Your session: ${params.childSessionKey}`] : [], "");
|
|
54
|
+
lines.push(`If a completion event arrives AFTER you already sent your final answer, reply ONLY with ${NO_REPLY}.`);
|
|
55
|
+
return lines.filter(Boolean).join("\n");
|
|
56
|
+
}
|
|
57
|
+
function buildSubagentSystemPrompt(params) {
|
|
58
|
+
const extra = buildSubagentContextSection(params);
|
|
59
|
+
return buildSystemPrompt(params.workspace ?? ".", {
|
|
60
|
+
promptMode: "minimal",
|
|
61
|
+
toolNames: params.toolNames,
|
|
62
|
+
extraSystemPrompt: extra
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//#endregion
|
|
66
|
+
export { buildSubagentContextSection, buildSubagentSystemPrompt };
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=subagent-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-context.js","names":[],"sources":["../../../../src/agent/prompt/subagent-context.ts"],"sourcesContent":["import { NO_REPLY } from '../../heartbeat/tokens.js';\nimport { buildSystemPrompt } from './system-prompt.js';\n\nexport function buildSubagentContextSection(params: {\n goal: string;\n context?: string;\n workspace?: string;\n requesterSessionKey?: string;\n childSessionKey?: string;\n}): string {\n const taskBody = params.goal.trim();\n const roleLines =\n taskBody.includes('\\n')\n ? [\n '## Your Role',\n '- You were created to handle the following task (verbatim; line breaks preserved):',\n '',\n '```',\n taskBody,\n '```',\n \"- Complete this task. That's your entire purpose.\",\n '- You are NOT the parent agent. Don\\'t try to be.',\n ]\n : [\n '## Your Role',\n `- You were created to handle: ${taskBody}`,\n \"- Complete this task. That's your entire purpose.\",\n '- You are NOT the parent agent. Don\\'t try to be.',\n ];\n\n const lines = [\n '# Subagent Context',\n '',\n 'You are a **sub-agent** spawned by the parent agent for a specific task.',\n '',\n ...roleLines,\n '',\n '## Rules',\n '1. **Stay focused** - Do your assigned task, nothing else',\n '2. **Complete the task** - Your final message will be automatically reported to the parent agent',\n '3. **Don\\'t initiate** - No heartbeats, no proactive actions, no side quests',\n '4. **Be ephemeral** - You may be terminated after task completion',\n '5. **Trust push-based completion** - Do not busy-poll for parent status',\n '6. **Recover from truncated tool output** - Re-read only what you need using smaller chunks',\n '',\n '## Output Format',\n 'When complete, your final response should include:',\n '- What you accomplished or found',\n '- Any relevant details the parent agent should know',\n '- Keep it concise but informative',\n '',\n '## What You DON\\'T Do',\n '- NO user conversations (that is the parent agent\\'s job)',\n '- NO external messages unless explicitly tasked with a specific recipient/channel',\n '- NO cron jobs or persistent state',\n '- Only use `send_message` when explicitly instructed to contact a specific external recipient',\n '',\n '## Sub-Agent Spawning',\n 'You are a leaf worker for this delegation. Do NOT spawn further sub-agents unless `delegate_task` is explicitly available and the parent task requires it.',\n '',\n ];\n\n if (params.context?.trim()) {\n lines.push('## Context', params.context.trim(), '');\n }\n if (params.workspace?.trim()) {\n lines.push(`Workspace: ${params.workspace.trim()}`, '');\n }\n if (params.requesterSessionKey || params.childSessionKey) {\n lines.push(\n '## Session Context',\n ...(params.requesterSessionKey\n ? [`- Requester session: ${params.requesterSessionKey}`]\n : []),\n ...(params.childSessionKey ? [`- Your session: ${params.childSessionKey}`] : []),\n '',\n );\n }\n\n lines.push(\n `If a completion event arrives AFTER you already sent your final answer, reply ONLY with ${NO_REPLY}.`,\n );\n\n return lines.filter(Boolean).join('\\n');\n}\n\nexport function buildSubagentSystemPrompt(params: {\n goal: string;\n context?: string;\n workspace?: string;\n requesterSessionKey?: string;\n childSessionKey?: string;\n toolNames?: string[];\n}): string {\n const extra = buildSubagentContextSection(params);\n return buildSystemPrompt(params.workspace ?? '.', {\n promptMode: 'minimal',\n toolNames: params.toolNames,\n extraSystemPrompt: extra,\n });\n}\n"],"mappings":";;;AAGA,SAAgB,4BAA4B,QAMjC;CACT,MAAM,WAAW,OAAO,KAAK,MAAM;CAoBnC,MAAM,QAAQ;EACZ;EACA;EACA;EACA;EACA,GAvBA,SAAS,SAAS,KAAK,GACnB;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,GACD;GACE;GACA,iCAAiC;GACjC;GACA;GACD;EAQL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;AAED,KAAI,OAAO,SAAS,MAAM,CACxB,OAAM,KAAK,cAAc,OAAO,QAAQ,MAAM,EAAE,GAAG;AAErD,KAAI,OAAO,WAAW,MAAM,CAC1B,OAAM,KAAK,cAAc,OAAO,UAAU,MAAM,IAAI,GAAG;AAEzD,KAAI,OAAO,uBAAuB,OAAO,gBACvC,OAAM,KACJ,sBACA,GAAI,OAAO,sBACP,CAAC,wBAAwB,OAAO,sBAAsB,GACtD,EAAE,EACN,GAAI,OAAO,kBAAkB,CAAC,mBAAmB,OAAO,kBAAkB,GAAG,EAAE,EAC/E,GACD;AAGH,OAAM,KACJ,2FAA2F,SAAS,GACrG;AAED,QAAO,MAAM,OAAO,QAAQ,CAAC,KAAK,KAAK;;AAGzC,SAAgB,0BAA0B,QAO/B;CACT,MAAM,QAAQ,4BAA4B,OAAO;AACjD,QAAO,kBAAkB,OAAO,aAAa,KAAK;EAChD,YAAY;EACZ,WAAW,OAAO;EAClB,mBAAmB;EACpB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Config } from '../../config/schema.js';
|
|
2
|
+
import type { ProviderSystemPromptContribution } from './contribution.js';
|
|
3
|
+
import type { MemoryCitationsMode, PromptMode, SilentReplyPromptMode } from './types.js';
|
|
4
|
+
export type { RuntimeInfoInput } from './sections/workspace-runtime.js';
|
|
5
|
+
export declare function resolvePromptMode(sessionKey?: string): PromptMode;
|
|
6
|
+
export declare function resolveRuntimeChannel(sessionKey?: string): string | undefined;
|
|
7
|
+
export declare function resolveDeliverableChannels(config: Config): string[];
|
|
8
|
+
export declare function normalizeProviderPromptBlock(value?: string): string | undefined;
|
|
9
|
+
export declare function buildOverridablePromptSection(params: {
|
|
10
|
+
override?: string;
|
|
11
|
+
fallback: string;
|
|
12
|
+
}): string;
|
|
13
|
+
export interface SystemPromptBuildParams {
|
|
14
|
+
workspaceDir: string;
|
|
15
|
+
sessionKey?: string;
|
|
16
|
+
promptMode?: PromptMode;
|
|
17
|
+
toolNames?: string[];
|
|
18
|
+
toolSummaries?: Record<string, string>;
|
|
19
|
+
runtimeInfo?: import('./sections/workspace-runtime.js').RuntimeInfoInput;
|
|
20
|
+
userTimezone?: string;
|
|
21
|
+
channels?: string[];
|
|
22
|
+
memoryCitationsMode?: MemoryCitationsMode;
|
|
23
|
+
includeMemorySection?: boolean;
|
|
24
|
+
heartbeatEnabled?: boolean;
|
|
25
|
+
heartbeatPrompt?: string;
|
|
26
|
+
externalMemoryInstructions?: string;
|
|
27
|
+
ttsSystemHint?: string;
|
|
28
|
+
extraSystemPrompt?: string;
|
|
29
|
+
silentReplyPromptMode?: SilentReplyPromptMode;
|
|
30
|
+
promptContribution?: ProviderSystemPromptContribution;
|
|
31
|
+
includeProblemSolving?: boolean;
|
|
32
|
+
includeToneSection?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare function resolveSystemPromptBuildParams(config: Config, params: {
|
|
35
|
+
workspaceDir: string;
|
|
36
|
+
sessionKey?: string;
|
|
37
|
+
toolNames?: string[];
|
|
38
|
+
toolSummaries?: Record<string, string>;
|
|
39
|
+
userTimezone?: string;
|
|
40
|
+
externalMemoryInstructions?: string;
|
|
41
|
+
heartbeatEnabled?: boolean;
|
|
42
|
+
heartbeatPrompt?: string;
|
|
43
|
+
ttsSystemHint?: string;
|
|
44
|
+
extraSystemPrompt?: string;
|
|
45
|
+
modelRef?: string;
|
|
46
|
+
agentId?: string;
|
|
47
|
+
thinkingLevel?: string;
|
|
48
|
+
promptMode?: PromptMode;
|
|
49
|
+
silentReplyPromptMode?: SilentReplyPromptMode;
|
|
50
|
+
promptContribution?: ProviderSystemPromptContribution;
|
|
51
|
+
memoryCitationsMode?: MemoryCitationsMode;
|
|
52
|
+
includeMemorySection?: boolean;
|
|
53
|
+
}): SystemPromptBuildParams;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { PACKAGE_VERSION, init_package_version } from "../../package-version.js";
|
|
2
|
+
import { isCronSessionKey, isSubagentSessionKey } from "../../routing/session-key-utils.js";
|
|
3
|
+
import { init_session_key, parseSessionKey } from "../../routing/session-key.js";
|
|
4
|
+
import { normalizePromptSection } from "./cache-boundary.js";
|
|
5
|
+
import { listChannelPlugins } from "../../channels/plugins/registry.js";
|
|
6
|
+
//#region src/agent/prompt/system-prompt-params.ts
|
|
7
|
+
init_package_version();
|
|
8
|
+
init_session_key();
|
|
9
|
+
function resolvePromptMode(sessionKey) {
|
|
10
|
+
if (!sessionKey) return "full";
|
|
11
|
+
if (isSubagentSessionKey(sessionKey) || isCronSessionKey(sessionKey)) return "minimal";
|
|
12
|
+
return "full";
|
|
13
|
+
}
|
|
14
|
+
function resolveRuntimeChannel(sessionKey) {
|
|
15
|
+
if (!sessionKey) return;
|
|
16
|
+
return parseSessionKey(sessionKey)?.source;
|
|
17
|
+
}
|
|
18
|
+
function resolveDeliverableChannels(config) {
|
|
19
|
+
const channels = new Set(["webchat", "cli"]);
|
|
20
|
+
const configured = config.channels;
|
|
21
|
+
if (configured) {
|
|
22
|
+
for (const [id, section] of Object.entries(configured)) if (section?.enabled !== false) channels.add(id);
|
|
23
|
+
}
|
|
24
|
+
for (const plugin of listChannelPlugins()) {
|
|
25
|
+
const id = plugin.id;
|
|
26
|
+
const section = configured?.[id];
|
|
27
|
+
if (section?.enabled !== false && section !== void 0) channels.add(id);
|
|
28
|
+
}
|
|
29
|
+
return [...channels].sort();
|
|
30
|
+
}
|
|
31
|
+
function normalizeProviderPromptBlock(value) {
|
|
32
|
+
if (typeof value !== "string") return;
|
|
33
|
+
return normalizePromptSection(value) || void 0;
|
|
34
|
+
}
|
|
35
|
+
function buildOverridablePromptSection(params) {
|
|
36
|
+
const override = normalizeProviderPromptBlock(params.override);
|
|
37
|
+
if (override) return override;
|
|
38
|
+
return params.fallback;
|
|
39
|
+
}
|
|
40
|
+
function resolveSystemPromptBuildParams(config, params) {
|
|
41
|
+
const sessionKey = params.sessionKey;
|
|
42
|
+
const channel = resolveRuntimeChannel(sessionKey);
|
|
43
|
+
return {
|
|
44
|
+
workspaceDir: params.workspaceDir,
|
|
45
|
+
sessionKey,
|
|
46
|
+
promptMode: params.promptMode ?? resolvePromptMode(sessionKey),
|
|
47
|
+
toolNames: params.toolNames,
|
|
48
|
+
toolSummaries: params.toolSummaries,
|
|
49
|
+
runtimeInfo: {
|
|
50
|
+
version: PACKAGE_VERSION,
|
|
51
|
+
model: params.modelRef,
|
|
52
|
+
channel,
|
|
53
|
+
agentId: params.agentId,
|
|
54
|
+
thinkingLevel: params.thinkingLevel
|
|
55
|
+
},
|
|
56
|
+
userTimezone: params.userTimezone,
|
|
57
|
+
channels: resolveDeliverableChannels(config),
|
|
58
|
+
memoryCitationsMode: params.memoryCitationsMode,
|
|
59
|
+
includeMemorySection: params.includeMemorySection,
|
|
60
|
+
heartbeatEnabled: params.heartbeatEnabled,
|
|
61
|
+
heartbeatPrompt: params.heartbeatPrompt,
|
|
62
|
+
externalMemoryInstructions: params.externalMemoryInstructions,
|
|
63
|
+
ttsSystemHint: params.ttsSystemHint,
|
|
64
|
+
extraSystemPrompt: params.extraSystemPrompt,
|
|
65
|
+
silentReplyPromptMode: params.silentReplyPromptMode,
|
|
66
|
+
promptContribution: params.promptContribution,
|
|
67
|
+
includeProblemSolving: true,
|
|
68
|
+
includeToneSection: true
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
export { buildOverridablePromptSection, normalizeProviderPromptBlock, resolveDeliverableChannels, resolvePromptMode, resolveRuntimeChannel, resolveSystemPromptBuildParams };
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=system-prompt-params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt-params.js","names":[],"sources":["../../../../src/agent/prompt/system-prompt-params.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\nimport { listChannelPlugins } from '../../channels/plugins/registry.js';\nimport { PACKAGE_VERSION } from '../../package-version.js';\nimport { isCronSessionKey, isSubagentSessionKey, parseSessionKey } from '../../routing/session-key.js';\nimport type { ProviderSystemPromptContribution } from './contribution.js';\nimport { normalizePromptSection } from './cache-boundary.js';\nimport type { MemoryCitationsMode, PromptMode, SilentReplyPromptMode } from './types.js';\n\nexport type { RuntimeInfoInput } from './sections/workspace-runtime.js';\n\nexport function resolvePromptMode(sessionKey?: string): PromptMode {\n if (!sessionKey) {\n return 'full';\n }\n if (isSubagentSessionKey(sessionKey) || isCronSessionKey(sessionKey)) {\n return 'minimal';\n }\n return 'full';\n}\n\nexport function resolveRuntimeChannel(sessionKey?: string): string | undefined {\n if (!sessionKey) {\n return undefined;\n }\n const parsed = parseSessionKey(sessionKey);\n return parsed?.source;\n}\n\nexport function resolveDeliverableChannels(config: Config): string[] {\n const channels = new Set<string>(['webchat', 'cli']);\n const configured = config.channels as Record<string, { enabled?: boolean }> | undefined;\n if (configured) {\n for (const [id, section] of Object.entries(configured)) {\n if (section?.enabled !== false) {\n channels.add(id);\n }\n }\n }\n for (const plugin of listChannelPlugins()) {\n const id = plugin.id;\n const section = configured?.[id];\n if (section?.enabled !== false && section !== undefined) {\n channels.add(id);\n }\n }\n return [...channels].sort();\n}\n\nexport function normalizeProviderPromptBlock(value?: string): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const normalized = normalizePromptSection(value);\n return normalized || undefined;\n}\n\nexport function buildOverridablePromptSection(params: {\n override?: string;\n fallback: string;\n}): string {\n const override = normalizeProviderPromptBlock(params.override);\n if (override) {\n return override;\n }\n return params.fallback;\n}\n\nexport interface SystemPromptBuildParams {\n workspaceDir: string;\n sessionKey?: string;\n promptMode?: PromptMode;\n toolNames?: string[];\n toolSummaries?: Record<string, string>;\n runtimeInfo?: import('./sections/workspace-runtime.js').RuntimeInfoInput;\n userTimezone?: string;\n channels?: string[];\n memoryCitationsMode?: MemoryCitationsMode;\n includeMemorySection?: boolean;\n heartbeatEnabled?: boolean;\n heartbeatPrompt?: string;\n externalMemoryInstructions?: string;\n ttsSystemHint?: string;\n extraSystemPrompt?: string;\n silentReplyPromptMode?: SilentReplyPromptMode;\n promptContribution?: ProviderSystemPromptContribution;\n includeProblemSolving?: boolean;\n includeToneSection?: boolean;\n}\n\nexport function resolveSystemPromptBuildParams(\n config: Config,\n params: {\n workspaceDir: string;\n sessionKey?: string;\n toolNames?: string[];\n toolSummaries?: Record<string, string>;\n userTimezone?: string;\n externalMemoryInstructions?: string;\n heartbeatEnabled?: boolean;\n heartbeatPrompt?: string;\n ttsSystemHint?: string;\n extraSystemPrompt?: string;\n modelRef?: string;\n agentId?: string;\n thinkingLevel?: string;\n promptMode?: PromptMode;\n silentReplyPromptMode?: SilentReplyPromptMode;\n promptContribution?: ProviderSystemPromptContribution;\n memoryCitationsMode?: MemoryCitationsMode;\n includeMemorySection?: boolean;\n },\n): SystemPromptBuildParams {\n const sessionKey = params.sessionKey;\n const channel = resolveRuntimeChannel(sessionKey);\n return {\n workspaceDir: params.workspaceDir,\n sessionKey,\n promptMode: params.promptMode ?? resolvePromptMode(sessionKey),\n toolNames: params.toolNames,\n toolSummaries: params.toolSummaries,\n runtimeInfo: {\n version: PACKAGE_VERSION,\n model: params.modelRef,\n channel,\n agentId: params.agentId,\n thinkingLevel: params.thinkingLevel,\n },\n userTimezone: params.userTimezone,\n channels: resolveDeliverableChannels(config),\n memoryCitationsMode: params.memoryCitationsMode,\n includeMemorySection: params.includeMemorySection,\n heartbeatEnabled: params.heartbeatEnabled,\n heartbeatPrompt: params.heartbeatPrompt,\n externalMemoryInstructions: params.externalMemoryInstructions,\n ttsSystemHint: params.ttsSystemHint,\n extraSystemPrompt: params.extraSystemPrompt,\n silentReplyPromptMode: params.silentReplyPromptMode,\n promptContribution: params.promptContribution,\n includeProblemSolving: true,\n includeToneSection: true,\n };\n}\n"],"mappings":";;;;;;sBAE2D;kBAC4C;AAOvG,SAAgB,kBAAkB,YAAiC;AACjE,KAAI,CAAC,WACH,QAAO;AAET,KAAI,qBAAqB,WAAW,IAAI,iBAAiB,WAAW,CAClE,QAAO;AAET,QAAO;;AAGT,SAAgB,sBAAsB,YAAyC;AAC7E,KAAI,CAAC,WACH;AAGF,QADe,gBAAgB,WAClB,EAAE;;AAGjB,SAAgB,2BAA2B,QAA0B;CACnE,MAAM,WAAW,IAAI,IAAY,CAAC,WAAW,MAAM,CAAC;CACpD,MAAM,aAAa,OAAO;AAC1B,KAAI;OACG,MAAM,CAAC,IAAI,YAAY,OAAO,QAAQ,WAAW,CACpD,KAAI,SAAS,YAAY,MACvB,UAAS,IAAI,GAAG;;AAItB,MAAK,MAAM,UAAU,oBAAoB,EAAE;EACzC,MAAM,KAAK,OAAO;EAClB,MAAM,UAAU,aAAa;AAC7B,MAAI,SAAS,YAAY,SAAS,YAAY,KAAA,EAC5C,UAAS,IAAI,GAAG;;AAGpB,QAAO,CAAC,GAAG,SAAS,CAAC,MAAM;;AAG7B,SAAgB,6BAA6B,OAAoC;AAC/E,KAAI,OAAO,UAAU,SACnB;AAGF,QADmB,uBAAuB,MACzB,IAAI,KAAA;;AAGvB,SAAgB,8BAA8B,QAGnC;CACT,MAAM,WAAW,6BAA6B,OAAO,SAAS;AAC9D,KAAI,SACF,QAAO;AAET,QAAO,OAAO;;AAyBhB,SAAgB,+BACd,QACA,QAoByB;CACzB,MAAM,aAAa,OAAO;CAC1B,MAAM,UAAU,sBAAsB,WAAW;AACjD,QAAO;EACL,cAAc,OAAO;EACrB;EACA,YAAY,OAAO,cAAc,kBAAkB,WAAW;EAC9D,WAAW,OAAO;EAClB,eAAe,OAAO;EACtB,aAAa;GACX,SAAS;GACT,OAAO,OAAO;GACd;GACA,SAAS,OAAO;GAChB,eAAe,OAAO;GACvB;EACD,cAAc,OAAO;EACrB,UAAU,2BAA2B,OAAO;EAC5C,qBAAqB,OAAO;EAC5B,sBAAsB,OAAO;EAC7B,kBAAkB,OAAO;EACzB,iBAAiB,OAAO;EACxB,4BAA4B,OAAO;EACnC,eAAe,OAAO;EACtB,mBAAmB,OAAO;EAC1B,uBAAuB,OAAO;EAC9B,oBAAoB,OAAO;EAC3B,uBAAuB;EACvB,oBAAoB;EACrB"}
|
|
@@ -6,29 +6,40 @@
|
|
|
6
6
|
* not to manually reread startup files.
|
|
7
7
|
*/
|
|
8
8
|
import type { EmbeddedContextFile } from '../bootstrap/types.js';
|
|
9
|
-
import type {
|
|
10
|
-
|
|
9
|
+
import type { ProviderSystemPromptContribution } from './contribution.js';
|
|
10
|
+
import { type RuntimeInfoInput } from './sections/workspace-runtime.js';
|
|
11
|
+
import type { MemoryCitationsMode, PromptMode, SilentReplyPromptMode } from './types.js';
|
|
12
|
+
export type { MemoryCitationsMode } from './types.js';
|
|
13
|
+
export { getContextFileBasename, isDynamicContextFile, sortContextFilesForPrompt, } from './sections/project-context.js';
|
|
11
14
|
export interface SystemPromptOptions {
|
|
12
|
-
/** Bootstrap context files from profile Markdown (Project Context). */
|
|
13
15
|
contextFiles?: EmbeddedContextFile[];
|
|
14
16
|
promptMode?: PromptMode;
|
|
15
17
|
heartbeatEnabled?: boolean;
|
|
16
18
|
heartbeatPrompt?: string;
|
|
19
|
+
/** Registered tool names for Tooling section and memory/skills gating. */
|
|
20
|
+
toolNames?: string[];
|
|
21
|
+
toolSummaries?: Record<string, string>;
|
|
22
|
+
/** @deprecated Prefer toolNames — kept for skill-section gating compatibility. */
|
|
17
23
|
availableTools?: string[];
|
|
18
24
|
memoryCitationsMode?: MemoryCitationsMode;
|
|
25
|
+
includeMemorySection?: boolean;
|
|
19
26
|
userTimezone?: string;
|
|
20
|
-
runtime?:
|
|
21
|
-
version?: string;
|
|
22
|
-
model?: string;
|
|
23
|
-
channel?: string;
|
|
24
|
-
};
|
|
27
|
+
runtime?: RuntimeInfoInput;
|
|
25
28
|
channels?: string[];
|
|
26
29
|
externalMemoryInstructions?: string;
|
|
27
30
|
ttsSystemHint?: string;
|
|
31
|
+
extraSystemPrompt?: string;
|
|
32
|
+
silentReplyPromptMode?: SilentReplyPromptMode;
|
|
33
|
+
promptContribution?: ProviderSystemPromptContribution;
|
|
34
|
+
includeProblemSolving?: boolean;
|
|
35
|
+
includeToneSection?: boolean;
|
|
28
36
|
}
|
|
29
37
|
/**
|
|
30
38
|
* Build system prompt with bootstrap Project Context integration.
|
|
31
39
|
*/
|
|
32
|
-
export declare function buildSystemPrompt(workspaceDir: string, options
|
|
33
|
-
/**
|
|
34
|
-
export declare function
|
|
40
|
+
export declare function buildSystemPrompt(workspaceDir: string, options?: SystemPromptOptions): string;
|
|
41
|
+
/** Split a built prompt at the cache boundary (for tests and provider adapters). */
|
|
42
|
+
export declare function splitBuiltSystemPrompt(text: string): {
|
|
43
|
+
stablePrefix: string;
|
|
44
|
+
dynamicSuffix: string;
|
|
45
|
+
};
|