@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.
Files changed (362) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/src/account-manager.d.ts +3 -3
  3. package/dist/extensions/telegram/src/account-manager.js +8 -8
  4. package/dist/extensions/telegram/src/account-manager.js.map +1 -1
  5. package/dist/extensions/telegram/src/actions/message-actions.d.ts +4 -0
  6. package/dist/extensions/telegram/src/actions/message-actions.js +71 -0
  7. package/dist/extensions/telegram/src/actions/message-actions.js.map +1 -0
  8. package/dist/extensions/telegram/src/adapters/config-adapter.js +9 -1
  9. package/dist/extensions/telegram/src/adapters/config-adapter.js.map +1 -1
  10. package/dist/extensions/telegram/src/adapters/config-surface.js +1 -1
  11. package/dist/extensions/telegram/src/adapters/config-surface.js.map +1 -1
  12. package/dist/extensions/telegram/src/adapters/outbound-adapter.d.ts +2 -1
  13. package/dist/extensions/telegram/src/adapters/outbound-adapter.js +18 -4
  14. package/dist/extensions/telegram/src/adapters/outbound-adapter.js.map +1 -1
  15. package/dist/extensions/telegram/src/adapters/security-adapter.js +2 -1
  16. package/dist/extensions/telegram/src/adapters/security-adapter.js.map +1 -1
  17. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +90 -6
  18. package/dist/extensions/telegram/src/adapters/streaming-adapter.js.map +1 -1
  19. package/dist/extensions/telegram/src/adapters/types.d.ts +9 -1
  20. package/dist/extensions/telegram/src/api-root.d.ts +4 -0
  21. package/dist/extensions/telegram/src/api-root.js +42 -0
  22. package/dist/extensions/telegram/src/api-root.js.map +1 -0
  23. package/dist/extensions/telegram/src/approval-delivery.d.ts +9 -0
  24. package/dist/extensions/telegram/src/approval-delivery.js +36 -0
  25. package/dist/extensions/telegram/src/approval-delivery.js.map +1 -0
  26. package/dist/extensions/telegram/src/approval-store.d.ts +25 -0
  27. package/dist/extensions/telegram/src/approval-store.js +61 -0
  28. package/dist/extensions/telegram/src/approval-store.js.map +1 -0
  29. package/dist/extensions/telegram/src/config-schema.d.ts +185 -35
  30. package/dist/extensions/telegram/src/config-schema.js +67 -45
  31. package/dist/extensions/telegram/src/config-schema.js.map +1 -1
  32. package/dist/extensions/telegram/src/conversation-id.d.ts +6 -0
  33. package/dist/extensions/telegram/src/conversation-id.js +18 -0
  34. package/dist/extensions/telegram/src/conversation-id.js.map +1 -0
  35. package/dist/extensions/telegram/src/doctor.d.ts +5 -0
  36. package/dist/extensions/telegram/src/doctor.js +80 -0
  37. package/dist/extensions/telegram/src/doctor.js.map +1 -0
  38. package/dist/extensions/telegram/src/exec-approval-handler.d.ts +7 -0
  39. package/dist/extensions/telegram/src/exec-approval-handler.js +36 -0
  40. package/dist/extensions/telegram/src/exec-approval-handler.js.map +1 -0
  41. package/dist/extensions/telegram/src/exec-approvals.d.ts +8 -0
  42. package/dist/extensions/telegram/src/exec-approvals.js +20 -0
  43. package/dist/extensions/telegram/src/exec-approvals.js.map +1 -0
  44. package/dist/extensions/telegram/src/focus-handler.d.ts +12 -0
  45. package/dist/extensions/telegram/src/focus-handler.js +55 -0
  46. package/dist/extensions/telegram/src/focus-handler.js.map +1 -0
  47. package/dist/extensions/telegram/src/group-config-resolver.d.ts +12 -0
  48. package/dist/extensions/telegram/src/group-config-resolver.js +17 -0
  49. package/dist/extensions/telegram/src/group-config-resolver.js.map +1 -0
  50. package/dist/extensions/telegram/src/inbound-coalescer.d.ts +15 -0
  51. package/dist/extensions/telegram/src/inbound-coalescer.js +107 -0
  52. package/dist/extensions/telegram/src/inbound-coalescer.js.map +1 -0
  53. package/dist/extensions/telegram/src/inbound-processor.d.ts +1 -0
  54. package/dist/extensions/telegram/src/inbound-processor.js +41 -4
  55. package/dist/extensions/telegram/src/inbound-processor.js.map +1 -1
  56. package/dist/extensions/telegram/src/network-errors.d.ts +2 -0
  57. package/dist/extensions/telegram/src/network-errors.js +23 -0
  58. package/dist/extensions/telegram/src/network-errors.js.map +1 -0
  59. package/dist/extensions/telegram/src/plugin.d.ts +11 -0
  60. package/dist/extensions/telegram/src/plugin.js +191 -57
  61. package/dist/extensions/telegram/src/plugin.js.map +1 -1
  62. package/dist/extensions/telegram/src/polling-session.d.ts +17 -0
  63. package/dist/extensions/telegram/src/polling-session.js +112 -0
  64. package/dist/extensions/telegram/src/polling-session.js.map +1 -0
  65. package/dist/extensions/telegram/src/proxy-fetch.d.ts +2 -0
  66. package/dist/extensions/telegram/src/proxy-fetch.js +14 -0
  67. package/dist/extensions/telegram/src/proxy-fetch.js.map +1 -0
  68. package/dist/extensions/telegram/src/reactions.d.ts +14 -0
  69. package/dist/extensions/telegram/src/reactions.js +48 -0
  70. package/dist/extensions/telegram/src/reactions.js.map +1 -0
  71. package/dist/extensions/telegram/src/reply-params.d.ts +15 -0
  72. package/dist/extensions/telegram/src/reply-params.js +28 -0
  73. package/dist/extensions/telegram/src/reply-params.js.map +1 -0
  74. package/dist/extensions/telegram/src/startup-errors.d.ts +3 -0
  75. package/dist/extensions/telegram/src/startup-errors.js +27 -0
  76. package/dist/extensions/telegram/src/startup-errors.js.map +1 -0
  77. package/dist/extensions/telegram/src/telegram-actions.d.ts +25 -0
  78. package/dist/extensions/telegram/src/telegram-actions.js +65 -0
  79. package/dist/extensions/telegram/src/telegram-actions.js.map +1 -0
  80. package/dist/extensions/telegram/src/thread-bindings.d.ts +15 -0
  81. package/dist/extensions/telegram/src/thread-bindings.js +22 -0
  82. package/dist/extensions/telegram/src/thread-bindings.js.map +1 -0
  83. package/dist/extensions/telegram/src/token-resolver.d.ts +8 -0
  84. package/dist/extensions/telegram/src/token-resolver.js +34 -0
  85. package/dist/extensions/telegram/src/token-resolver.js.map +1 -0
  86. package/dist/extensions/telegram/src/update-offset-store.d.ts +9 -0
  87. package/dist/extensions/telegram/src/update-offset-store.js +66 -0
  88. package/dist/extensions/telegram/src/update-offset-store.js.map +1 -0
  89. package/dist/extensions/telegram/xopc.extension.json +1 -1
  90. package/dist/extensions/weixin/src/api/api.js +5 -3
  91. package/dist/extensions/weixin/src/api/api.js.map +1 -1
  92. package/dist/gateway/static/root/assets/{agents-4KTK-Ku7.js → agents-u8cmUfGQ.js} +2 -2
  93. package/dist/gateway/static/root/assets/{apps-page-DkgInY2w.js → apps-page-DF8m9cUE.js} +1 -1
  94. package/dist/gateway/static/root/assets/{attachment-preview-renderer-DBAxQXb-.js → attachment-preview-renderer-CybMSIoS.js} +2 -2
  95. package/dist/gateway/static/root/assets/{attachment-process-heavy-Csq3TrrP.js → attachment-process-heavy-RnGYy9bC.js} +2 -2
  96. package/dist/gateway/static/root/assets/channels-settings-BM3doRvi.js +1 -0
  97. package/dist/gateway/static/root/assets/channels-status-swr-ah4zWEIP.js +8 -0
  98. package/dist/gateway/static/root/assets/{cron-api-BRDli2Mm.js → cron-api-DgMuL_2b.js} +1 -1
  99. package/dist/gateway/static/root/assets/{cron-page-BzEr5Za8.js → cron-page-COfUPKfq.js} +1 -1
  100. package/dist/gateway/static/root/assets/{dist-BsHh1vX0.js → dist-Dzy3Q0ZH.js} +1 -1
  101. package/dist/gateway/static/root/assets/{docx-preview-Dxj1EkCO.js → docx-preview-CajIk2FR.js} +1 -1
  102. package/dist/gateway/static/root/assets/{extension-debug-page-TWt5q_ef.js → extension-debug-page-kyxxefKh.js} +1 -1
  103. package/dist/gateway/static/root/assets/{extension-page-C3kV8ZvZ.js → extension-page-BVbCBHoI.js} +1 -1
  104. package/dist/gateway/static/root/assets/{extension-settings-page-Csy9LNC6.js → extension-settings-page-t1lb2A7v.js} +1 -1
  105. package/dist/gateway/static/root/assets/{fetch-BLLOP2CM.js → fetch-drJUxxKP.js} +1 -1
  106. package/dist/gateway/static/root/assets/{field-primitives-MXbM8HvY.js → field-primitives-6Vo1Yga4.js} +1 -1
  107. package/dist/gateway/static/root/assets/{heartbeat-config-api-CkoyqfRx.js → heartbeat-config-api-BF3psu4O.js} +1 -1
  108. package/dist/gateway/static/root/assets/index-DjNDHzwG.css +1 -0
  109. package/dist/gateway/static/root/assets/index-WAyKAilR.js +4840 -0
  110. package/dist/gateway/static/root/assets/{logs-page-B2vY41ph.js → logs-page-BTVPXcHV.js} +1 -1
  111. package/dist/gateway/static/root/assets/{note-detail-page-B7qE5pkO.js → note-detail-page-DqSAg_5Z.js} +1 -1
  112. package/dist/gateway/static/root/assets/{note-time-NBBReVR4.js → note-time-FSOjchic.js} +1 -1
  113. package/dist/gateway/static/root/assets/{notes-page-CsWYaqYM.js → notes-page-DkRX7BE2.js} +1 -1
  114. package/dist/gateway/static/root/assets/{sessions-page-BPGY3SCT.js → sessions-page-Khdw35Zk.js} +1 -1
  115. package/dist/gateway/static/root/assets/{settings-advanced-gate-DtA451RM.js → settings-advanced-gate-DspC8oEm.js} +2 -2
  116. package/dist/gateway/static/root/assets/{settings-form-section-DYR_SPlX.js → settings-form-section-DuxvUuur.js} +1 -1
  117. package/dist/gateway/static/root/assets/{settings-page-BJUgZQzN.js → settings-page-DN8JBZ8F.js} +2 -2
  118. package/dist/gateway/static/root/assets/{share-preview-page-3u8VFmdo.js → share-preview-page-UNAcbiMb.js} +2 -2
  119. package/dist/gateway/static/root/assets/{skills-page-DuyhcH4U.js → skills-page-ByYT0fXZ.js} +1 -1
  120. package/dist/gateway/static/root/assets/{theme-store-e2q2yjs4.js → theme-store-B6KXPHgK.js} +1 -1
  121. package/dist/gateway/static/root/assets/url-q28QhI7l.js +3 -0
  122. package/dist/gateway/static/root/assets/{utils-B4Vw3fnc.js → utils-DK_1H47k.js} +1 -1
  123. package/dist/gateway/static/root/assets/{voice-api-key-field-BFY67Hhp.js → voice-api-key-field-BYN2EIMs.js} +1 -1
  124. package/dist/gateway/static/root/assets/{workflow-page.utils-yUJ5jexd.js → workflow-page.utils-Bi19YNTr.js} +1 -1
  125. package/dist/gateway/static/root/assets/{workflows-page-DIMHCpNt.js → workflows-page-DP57FEKW.js} +1 -1
  126. package/dist/gateway/static/root/index.html +5 -5
  127. package/dist/package.js +1 -1
  128. package/dist/src/agent/agent-manager.d.ts +4 -0
  129. package/dist/src/agent/agent-manager.js +84 -4
  130. package/dist/src/agent/agent-manager.js.map +1 -1
  131. package/dist/src/agent/child-agent-factory.d.ts +1 -0
  132. package/dist/src/agent/child-agent-factory.js +13 -10
  133. package/dist/src/agent/child-agent-factory.js.map +1 -1
  134. package/dist/src/agent/embedded/run-for-session.d.ts +1 -0
  135. package/dist/src/agent/embedded/run-for-session.js +2 -0
  136. package/dist/src/agent/embedded/run-for-session.js.map +1 -1
  137. package/dist/src/agent/embedded/run-turn.js +1 -17
  138. package/dist/src/agent/embedded/run-turn.js.map +1 -1
  139. package/dist/src/agent/embedded/session-runner.js +3 -1
  140. package/dist/src/agent/embedded/session-runner.js.map +1 -1
  141. package/dist/src/agent/embedded/session-tool-result-guard.d.ts +1 -0
  142. package/dist/src/agent/embedded/session-tool-result-guard.js +1 -0
  143. package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
  144. package/dist/src/agent/inbound/attachment-pipeline.d.ts +37 -0
  145. package/dist/src/agent/inbound/attachment-pipeline.js +169 -0
  146. package/dist/src/agent/inbound/attachment-pipeline.js.map +1 -0
  147. package/dist/src/agent/inbound/turn-dispatcher.d.ts +3 -5
  148. package/dist/src/agent/inbound/turn-dispatcher.js +1 -2
  149. package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
  150. package/dist/src/agent/memory/index.d.ts +2 -0
  151. package/dist/src/agent/memory/index.js +2 -1
  152. package/dist/src/agent/memory/memory-flush.d.ts +27 -0
  153. package/dist/src/agent/memory/memory-flush.js +124 -0
  154. package/dist/src/agent/memory/memory-flush.js.map +1 -0
  155. package/dist/src/agent/messaging/outbound-coordinator.js +2 -1
  156. package/dist/src/agent/messaging/outbound-coordinator.js.map +1 -1
  157. package/dist/src/agent/messaging/stream-manager.d.ts +2 -0
  158. package/dist/src/agent/messaging/stream-manager.js +3 -0
  159. package/dist/src/agent/messaging/stream-manager.js.map +1 -1
  160. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +0 -4
  161. package/dist/src/agent/orchestration/agent-orchestrator.js +40 -107
  162. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  163. package/dist/src/agent/prompt/contribution.d.ts +9 -0
  164. package/dist/src/agent/prompt/contribution.js +1 -0
  165. package/dist/src/agent/prompt/safety.js +0 -10
  166. package/dist/src/agent/prompt/safety.js.map +1 -1
  167. package/dist/src/agent/prompt/sanitize-for-prompt.d.ts +6 -0
  168. package/dist/src/agent/prompt/sanitize-for-prompt.js +13 -0
  169. package/dist/src/agent/prompt/sanitize-for-prompt.js.map +1 -0
  170. package/dist/src/agent/prompt/sections/behavior.d.ts +5 -0
  171. package/dist/src/agent/prompt/sections/behavior.js +50 -0
  172. package/dist/src/agent/prompt/sections/behavior.js.map +1 -0
  173. package/dist/src/agent/prompt/sections/memory-skills.d.ts +9 -0
  174. package/dist/src/agent/prompt/sections/memory-skills.js +59 -0
  175. package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -0
  176. package/dist/src/agent/prompt/sections/messaging-runtime.d.ts +16 -0
  177. package/dist/src/agent/prompt/sections/messaging-runtime.js +69 -0
  178. package/dist/src/agent/prompt/sections/messaging-runtime.js.map +1 -0
  179. package/dist/src/agent/prompt/sections/project-context.d.ts +16 -0
  180. package/dist/src/agent/prompt/sections/project-context.js +58 -0
  181. package/dist/src/agent/prompt/sections/project-context.js.map +1 -0
  182. package/dist/src/agent/prompt/sections/tooling.d.ts +5 -0
  183. package/dist/src/agent/prompt/sections/tooling.js +119 -0
  184. package/dist/src/agent/prompt/sections/tooling.js.map +1 -0
  185. package/dist/src/agent/prompt/sections/workspace-runtime.d.ts +11 -0
  186. package/dist/src/agent/prompt/sections/workspace-runtime.js +32 -0
  187. package/dist/src/agent/prompt/sections/workspace-runtime.js.map +1 -0
  188. package/dist/src/agent/prompt/service-prompt-builder.d.ts +13 -0
  189. package/dist/src/agent/prompt/service-prompt-builder.js +54 -13
  190. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  191. package/dist/src/agent/prompt/subagent-context.d.ts +15 -0
  192. package/dist/src/agent/prompt/subagent-context.js +68 -0
  193. package/dist/src/agent/prompt/subagent-context.js.map +1 -0
  194. package/dist/src/agent/prompt/system-prompt-params.d.ts +53 -0
  195. package/dist/src/agent/prompt/system-prompt-params.js +74 -0
  196. package/dist/src/agent/prompt/system-prompt-params.js.map +1 -0
  197. package/dist/src/agent/prompt/system-prompt.d.ts +22 -11
  198. package/dist/src/agent/prompt/system-prompt.js +79 -193
  199. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  200. package/dist/src/agent/prompt/types.d.ts +3 -0
  201. package/dist/src/agent/service/build-direct-message-content.d.ts +5 -21
  202. package/dist/src/agent/service/build-direct-message-content.js +11 -64
  203. package/dist/src/agent/service/build-direct-message-content.js.map +1 -1
  204. package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -1
  205. package/dist/src/agent/service/direct-turn-helpers.js +7 -0
  206. package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
  207. package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -3
  208. package/dist/src/agent/service/process-direct-one-shot.js +22 -17
  209. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
  210. package/dist/src/agent/service/process-direct-streaming.d.ts +6 -20
  211. package/dist/src/agent/service/process-direct-streaming.js +39 -40
  212. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  213. package/dist/src/agent/service/webchat-tts.d.ts +4 -9
  214. package/dist/src/agent/service/webchat-tts.js +9 -20
  215. package/dist/src/agent/service/webchat-tts.js.map +1 -1
  216. package/dist/src/agent/service.d.ts +8 -19
  217. package/dist/src/agent/service.js +53 -11
  218. package/dist/src/agent/service.js.map +1 -1
  219. package/dist/src/agent/tools/factory.js +2 -0
  220. package/dist/src/agent/tools/factory.js.map +1 -1
  221. package/dist/src/agent/tools/index.d.ts +1 -0
  222. package/dist/src/agent/tools/index.js +2 -1
  223. package/dist/src/agent/tools/media-read-tool.d.ts +2 -0
  224. package/dist/src/agent/tools/media-read-tool.js +89 -0
  225. package/dist/src/agent/tools/media-read-tool.js.map +1 -0
  226. package/dist/src/auth/credentials.js +0 -1
  227. package/dist/src/auth/credentials.js.map +1 -1
  228. package/dist/src/channels/attachments/attachment-classifiers.d.ts +8 -0
  229. package/dist/src/channels/attachments/attachment-classifiers.js +11 -0
  230. package/dist/src/channels/attachments/attachment-classifiers.js.map +1 -0
  231. package/dist/src/channels/attachments/inbound-persist.d.ts +13 -34
  232. package/dist/src/channels/attachments/inbound-persist.js +34 -102
  233. package/dist/src/channels/attachments/inbound-persist.js.map +1 -1
  234. package/dist/src/channels/attachments/inbound-types.d.ts +13 -0
  235. package/dist/src/channels/attachments/inbound-types.js +30 -0
  236. package/dist/src/channels/attachments/inbound-types.js.map +1 -0
  237. package/dist/src/channels/attachments/outbound-tts-persist.d.ts +3 -12
  238. package/dist/src/channels/attachments/outbound-tts-persist.js +28 -48
  239. package/dist/src/channels/attachments/outbound-tts-persist.js.map +1 -1
  240. package/dist/src/channels/attachments/voice-stt-webchat.d.ts +3 -3
  241. package/dist/src/channels/attachments/voice-stt-webchat.js +8 -14
  242. package/dist/src/channels/attachments/voice-stt-webchat.js.map +1 -1
  243. package/dist/src/channels/channel-domain.d.ts +30 -2
  244. package/dist/src/channels/exec-approval-runtime.d.ts +29 -0
  245. package/dist/src/channels/exec-approval-runtime.js +30 -0
  246. package/dist/src/channels/exec-approval-runtime.js.map +1 -0
  247. package/dist/src/channels/index.js +1 -1
  248. package/dist/src/channels/plugin-types.d.ts +1 -0
  249. package/dist/src/channels/transport-types.d.ts +2 -2
  250. package/dist/src/cli/bin.d.ts +1 -0
  251. package/dist/src/cli/bin.js +1 -0
  252. package/dist/src/cli/bin.js.map +1 -1
  253. package/dist/src/cli/commands/channels.js +1 -1
  254. package/dist/src/cli/commands/doctor/checks/database-schema.d.ts +2 -0
  255. package/dist/src/cli/commands/doctor/checks/database-schema.js +62 -0
  256. package/dist/src/cli/commands/doctor/checks/database-schema.js.map +1 -0
  257. package/dist/src/cli/commands/doctor/flow.js +2 -0
  258. package/dist/src/cli/commands/doctor/flow.js.map +1 -1
  259. package/dist/src/cli/commands/init.js +2 -57
  260. package/dist/src/cli/commands/init.js.map +1 -1
  261. package/dist/src/cli/commands/onboard/channels/registry.js +1 -1
  262. package/dist/src/cli/commands/setup.js +6 -5
  263. package/dist/src/cli/commands/setup.js.map +1 -1
  264. package/dist/src/cli/utils/init-workspace-core.js +1 -2
  265. package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
  266. package/dist/src/config/index.js +2 -2
  267. package/dist/src/config/paths.d.ts +0 -13
  268. package/dist/src/config/paths.js +1 -20
  269. package/dist/src/config/paths.js.map +1 -1
  270. package/dist/src/config/rules.js +1 -1
  271. package/dist/src/config/schema.d.ts +24 -0
  272. package/dist/src/config/schema.js +33 -2
  273. package/dist/src/config/schema.js.map +1 -1
  274. package/dist/src/cron/executor.js +2 -2
  275. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  276. package/dist/src/gateway/hono/oauth-async.js +36 -3
  277. package/dist/src/gateway/hono/oauth-async.js.map +1 -1
  278. package/dist/src/gateway/hono/routes/config-patch/channels.js +3 -3
  279. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
  280. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  281. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  282. package/dist/src/gateway/hono/routes/media.d.ts +3 -0
  283. package/dist/src/gateway/hono/routes/media.js +50 -0
  284. package/dist/src/gateway/hono/routes/media.js.map +1 -0
  285. package/dist/src/gateway/hono/routes/sessions.js +6 -0
  286. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  287. package/dist/src/gateway/hono/routes/workspace.js +1 -87
  288. package/dist/src/gateway/hono/routes/workspace.js.map +1 -1
  289. package/dist/src/gateway/service/sessions-api.js +3 -0
  290. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  291. package/dist/src/infra/http-proxy-env.d.ts +4 -0
  292. package/dist/src/infra/http-proxy-env.js +23 -0
  293. package/dist/src/infra/http-proxy-env.js.map +1 -0
  294. package/dist/src/media/index.d.ts +5 -0
  295. package/dist/src/media/index.js +5 -0
  296. package/dist/src/media/media-reference.d.ts +23 -0
  297. package/dist/src/media/media-reference.js +34 -0
  298. package/dist/src/media/media-reference.js.map +1 -0
  299. package/dist/src/media/paths.d.ts +5 -0
  300. package/dist/src/media/paths.js +20 -0
  301. package/dist/src/media/paths.js.map +1 -0
  302. package/dist/src/media/session-references.d.ts +8 -0
  303. package/dist/src/media/session-references.js +45 -0
  304. package/dist/src/media/session-references.js.map +1 -0
  305. package/dist/src/media/store.d.ts +19 -0
  306. package/dist/src/media/store.js +131 -0
  307. package/dist/src/media/store.js.map +1 -0
  308. package/dist/src/media/types.d.ts +34 -0
  309. package/dist/src/media/types.js +1 -0
  310. package/dist/src/media/uri.d.ts +15 -0
  311. package/dist/src/media/uri.js +51 -0
  312. package/dist/src/media/uri.js.map +1 -0
  313. package/dist/src/session/session-title.js +6 -3
  314. package/dist/src/session/session-title.js.map +1 -1
  315. package/dist/src/session/store.js +1 -1
  316. package/dist/src/session/store.js.map +1 -1
  317. package/dist/src/session/types.d.ts +12 -7
  318. package/dist/src/session/types.js.map +1 -1
  319. package/dist/src/storage/sqlite/index.d.ts +4 -1
  320. package/dist/src/storage/sqlite/index.js +6 -2
  321. package/dist/src/storage/sqlite/migrations/002_add_flush_columns.sql +3 -0
  322. package/dist/src/storage/sqlite/migrations/discover.d.ts +4 -0
  323. package/dist/src/storage/sqlite/migrations/discover.js +38 -0
  324. package/dist/src/storage/sqlite/migrations/discover.js.map +1 -0
  325. package/dist/src/storage/sqlite/migrations/discover.ts +52 -0
  326. package/dist/src/storage/sqlite/migrations/errors.d.ts +11 -0
  327. package/dist/src/storage/sqlite/migrations/errors.js +27 -0
  328. package/dist/src/storage/sqlite/migrations/errors.js.map +1 -0
  329. package/dist/src/storage/sqlite/migrations/errors.ts +32 -0
  330. package/dist/src/storage/sqlite/migrations/runner.d.ts +22 -0
  331. package/dist/src/storage/sqlite/migrations/runner.js +97 -0
  332. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -0
  333. package/dist/src/storage/sqlite/migrations/runner.ts +153 -0
  334. package/dist/src/storage/sqlite/migrations/types.d.ts +12 -0
  335. package/dist/src/storage/sqlite/migrations/types.js +1 -0
  336. package/dist/src/storage/sqlite/migrations/types.ts +13 -0
  337. package/dist/src/storage/sqlite/row-mappers.d.ts +4 -0
  338. package/dist/src/storage/sqlite/row-mappers.js +4 -0
  339. package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
  340. package/dist/src/storage/sqlite/schema-version.d.ts +6 -0
  341. package/dist/src/storage/sqlite/schema-version.js +29 -0
  342. package/dist/src/storage/sqlite/schema-version.js.map +1 -0
  343. package/dist/src/storage/sqlite/schema.d.ts +5 -3
  344. package/dist/src/storage/sqlite/schema.js +24 -28
  345. package/dist/src/storage/sqlite/schema.js.map +1 -1
  346. package/dist/src/storage/sqlite/schema.sql +2 -0
  347. package/dist/src/storage/sqlite/session-metadata.js +1 -0
  348. package/dist/src/storage/sqlite/session-metadata.js.map +1 -1
  349. package/dist/src/storage/sqlite/session-repository.js +7 -3
  350. package/dist/src/storage/sqlite/session-repository.js.map +1 -1
  351. package/package.json +3 -3
  352. package/dist/gateway/static/root/assets/channels-settings-BxW1Xio4.js +0 -1
  353. package/dist/gateway/static/root/assets/channels-status-swr-Cxm6AvQO.js +0 -8
  354. package/dist/gateway/static/root/assets/index-BJDmBCSl.css +0 -1
  355. package/dist/gateway/static/root/assets/index-Cbg5TS5m.js +0 -4707
  356. package/dist/gateway/static/root/assets/url-DpFBIyN9.js +0 -3
  357. package/dist/src/cli/commands/onboard/workspace.d.ts +0 -14
  358. package/dist/src/cli/commands/onboard/workspace.js +0 -33
  359. package/dist/src/cli/commands/onboard/workspace.js.map +0 -1
  360. package/dist/src/cli/utils/workspace.d.ts +0 -35
  361. package/dist/src/cli/utils/workspace.js +0 -72
  362. 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 basePrompt = buildSystemPrompt(ws, {
67
- contextFiles,
68
- heartbeatEnabled,
69
- availableTools: this.getSkillNamesForSkillsSection({
70
- skillAllowlist: options.skillAllowlist,
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
- ttsSystemHint
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
- heartbeatEnabled: this.config.gateway?.heartbeat?.includeSystemPromptSection ?? false,
119
- userTimezone: this.extractTimezone(contextFiles, profilePathRoot),
120
- externalMemoryInstructions: options?.externalMemoryInstructions
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 { PromptMode } from './types.js';
10
- export type MemoryCitationsMode = 'on' | 'off' | 'source-only';
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: SystemPromptOptions): string;
33
- /** Whether HEARTBEAT.md is injected as dynamic context (vs behavior-only section). */
34
- export declare function isHeartbeatContextFile(pathValue: string): boolean;
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
+ };