sensorium-mcp 3.0.102 → 3.1.0-refactor.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (564) hide show
  1. package/README.md +25 -0
  2. package/dist/config/agent-settings.d.ts +69 -0
  3. package/dist/config/agent-settings.d.ts.map +1 -0
  4. package/dist/config/agent-settings.js +225 -0
  5. package/dist/config/agent-settings.js.map +1 -0
  6. package/dist/config/agent-templates.d.ts +39 -0
  7. package/dist/config/agent-templates.d.ts.map +1 -0
  8. package/dist/config/agent-templates.js +105 -0
  9. package/dist/config/agent-templates.js.map +1 -0
  10. package/dist/config/index.d.ts +16 -0
  11. package/dist/config/index.d.ts.map +1 -0
  12. package/dist/config/index.js +58 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/config/keep-alive-settings.d.ts +29 -0
  15. package/dist/config/keep-alive-settings.d.ts.map +1 -0
  16. package/dist/config/keep-alive-settings.js +100 -0
  17. package/dist/config/keep-alive-settings.js.map +1 -0
  18. package/dist/config/mcp-settings.d.ts +59 -0
  19. package/dist/config/mcp-settings.d.ts.map +1 -0
  20. package/dist/config/mcp-settings.js +196 -0
  21. package/dist/config/mcp-settings.js.map +1 -0
  22. package/dist/config/misc-settings.d.ts +46 -0
  23. package/dist/config/misc-settings.d.ts.map +1 -0
  24. package/dist/config/misc-settings.js +146 -0
  25. package/dist/config/misc-settings.js.map +1 -0
  26. package/dist/config/settings-store.d.ts +10 -0
  27. package/dist/config/settings-store.d.ts.map +1 -0
  28. package/dist/config/settings-store.js +65 -0
  29. package/dist/config/settings-store.js.map +1 -0
  30. package/dist/dashboard/log-parser.d.ts.map +1 -1
  31. package/dist/dashboard/log-parser.js +12 -2
  32. package/dist/dashboard/log-parser.js.map +1 -1
  33. package/dist/dashboard/presets.d.ts +1 -1
  34. package/dist/dashboard/presets.d.ts.map +1 -1
  35. package/dist/dashboard/presets.js +1 -1
  36. package/dist/dashboard/presets.js.map +1 -1
  37. package/dist/dashboard/routes/agent-templates.d.ts.map +1 -1
  38. package/dist/dashboard/routes/agent-templates.js +13 -8
  39. package/dist/dashboard/routes/agent-templates.js.map +1 -1
  40. package/dist/dashboard/routes/claude.d.ts.map +1 -1
  41. package/dist/dashboard/routes/claude.js +6 -3
  42. package/dist/dashboard/routes/claude.js.map +1 -1
  43. package/dist/dashboard/routes/copilot.d.ts.map +1 -1
  44. package/dist/dashboard/routes/copilot.js +16 -7
  45. package/dist/dashboard/routes/copilot.js.map +1 -1
  46. package/dist/dashboard/routes/data.d.ts.map +1 -1
  47. package/dist/dashboard/routes/data.js +43 -15
  48. package/dist/dashboard/routes/data.js.map +1 -1
  49. package/dist/dashboard/routes/env-vars.d.ts.map +1 -1
  50. package/dist/dashboard/routes/env-vars.js.map +1 -1
  51. package/dist/dashboard/routes/mcp-servers.d.ts.map +1 -1
  52. package/dist/dashboard/routes/mcp-servers.js +11 -5
  53. package/dist/dashboard/routes/mcp-servers.js.map +1 -1
  54. package/dist/dashboard/routes/prompts.d.ts.map +1 -1
  55. package/dist/dashboard/routes/prompts.js +2 -2
  56. package/dist/dashboard/routes/prompts.js.map +1 -1
  57. package/dist/dashboard/routes/settings.d.ts.map +1 -1
  58. package/dist/dashboard/routes/settings.js +5 -3
  59. package/dist/dashboard/routes/settings.js.map +1 -1
  60. package/dist/dashboard/routes/skills.d.ts.map +1 -1
  61. package/dist/dashboard/routes/skills.js +4 -4
  62. package/dist/dashboard/routes/skills.js.map +1 -1
  63. package/dist/dashboard/routes/snapshots.d.ts.map +1 -1
  64. package/dist/dashboard/routes/snapshots.js +18 -11
  65. package/dist/dashboard/routes/snapshots.js.map +1 -1
  66. package/dist/dashboard/routes/templates.d.ts.map +1 -1
  67. package/dist/dashboard/routes/templates.js +6 -3
  68. package/dist/dashboard/routes/templates.js.map +1 -1
  69. package/dist/dashboard/routes/threads-create.d.ts +22 -0
  70. package/dist/dashboard/routes/threads-create.d.ts.map +1 -0
  71. package/dist/dashboard/routes/threads-create.js +225 -0
  72. package/dist/dashboard/routes/threads-create.js.map +1 -0
  73. package/dist/dashboard/routes/threads-helpers.d.ts +28 -0
  74. package/dist/dashboard/routes/threads-helpers.d.ts.map +1 -0
  75. package/dist/dashboard/routes/threads-helpers.js +138 -0
  76. package/dist/dashboard/routes/threads-helpers.js.map +1 -0
  77. package/dist/dashboard/routes/threads-read.d.ts +26 -0
  78. package/dist/dashboard/routes/threads-read.d.ts.map +1 -0
  79. package/dist/dashboard/routes/threads-read.js +118 -0
  80. package/dist/dashboard/routes/threads-read.js.map +1 -0
  81. package/dist/dashboard/routes/threads.d.ts +5 -44
  82. package/dist/dashboard/routes/threads.d.ts.map +1 -1
  83. package/dist/dashboard/routes/threads.js +40 -496
  84. package/dist/dashboard/routes/threads.js.map +1 -1
  85. package/dist/dashboard/routes/types.d.ts.map +1 -1
  86. package/dist/dashboard/routes/types.js.map +1 -1
  87. package/dist/dashboard/routes.d.ts.map +1 -1
  88. package/dist/dashboard/routes.js +30 -5
  89. package/dist/dashboard/routes.js.map +1 -1
  90. package/dist/data/daily-marker.d.ts.map +1 -1
  91. package/dist/data/daily-marker.js +1 -1
  92. package/dist/data/daily-marker.js.map +1 -1
  93. package/dist/data/file-storage.d.ts.map +1 -1
  94. package/dist/data/file-storage.js +40 -16
  95. package/dist/data/file-storage.js.map +1 -1
  96. package/dist/data/interfaces.d.ts +23 -2
  97. package/dist/data/interfaces.d.ts.map +1 -1
  98. package/dist/data/memory/bootstrap.d.ts +1 -1
  99. package/dist/data/memory/bootstrap.d.ts.map +1 -1
  100. package/dist/data/memory/bootstrap.js +32 -13
  101. package/dist/data/memory/bootstrap.js.map +1 -1
  102. package/dist/data/memory/consolidation.d.ts.map +1 -1
  103. package/dist/data/memory/consolidation.js +17 -8
  104. package/dist/data/memory/consolidation.js.map +1 -1
  105. package/dist/data/memory/db-types.d.ts +4 -0
  106. package/dist/data/memory/db-types.d.ts.map +1 -0
  107. package/dist/data/memory/db-types.js +2 -0
  108. package/dist/data/memory/db-types.js.map +1 -0
  109. package/dist/data/memory/episodes.d.ts.map +1 -1
  110. package/dist/data/memory/episodes.js +3 -5
  111. package/dist/data/memory/episodes.js.map +1 -1
  112. package/dist/data/memory/index.d.ts +28 -14
  113. package/dist/data/memory/index.d.ts.map +1 -1
  114. package/dist/data/memory/index.js +28 -14
  115. package/dist/data/memory/index.js.map +1 -1
  116. package/dist/data/memory/migration-runner.d.ts +1 -1
  117. package/dist/data/memory/migration-runner.d.ts.map +1 -1
  118. package/dist/data/memory/migration-runner.js +23 -15
  119. package/dist/data/memory/migration-runner.js.map +1 -1
  120. package/dist/data/memory/narrative-lint.d.ts +12 -0
  121. package/dist/data/memory/narrative-lint.d.ts.map +1 -0
  122. package/dist/data/memory/narrative-lint.js +117 -0
  123. package/dist/data/memory/narrative-lint.js.map +1 -0
  124. package/dist/data/memory/narrative-resolutions.d.ts +26 -0
  125. package/dist/data/memory/narrative-resolutions.d.ts.map +1 -0
  126. package/dist/data/memory/narrative-resolutions.js +81 -0
  127. package/dist/data/memory/narrative-resolutions.js.map +1 -0
  128. package/dist/data/memory/narrative-sources.d.ts +19 -0
  129. package/dist/data/memory/narrative-sources.d.ts.map +1 -0
  130. package/dist/data/memory/narrative-sources.js +150 -0
  131. package/dist/data/memory/narrative-sources.js.map +1 -0
  132. package/dist/data/memory/narrative-store.d.ts +11 -0
  133. package/dist/data/memory/narrative-store.d.ts.map +1 -0
  134. package/dist/data/memory/narrative-store.js +80 -0
  135. package/dist/data/memory/narrative-store.js.map +1 -0
  136. package/dist/data/memory/narrative-types.d.ts +15 -0
  137. package/dist/data/memory/narrative-types.d.ts.map +1 -0
  138. package/dist/data/memory/narrative-types.js +3 -0
  139. package/dist/data/memory/narrative-types.js.map +1 -0
  140. package/dist/data/memory/narrative.d.ts +5 -2
  141. package/dist/data/memory/narrative.d.ts.map +1 -1
  142. package/dist/data/memory/narrative.js +31 -521
  143. package/dist/data/memory/narrative.js.map +1 -1
  144. package/dist/data/memory/note-archival.d.ts +17 -0
  145. package/dist/data/memory/note-archival.d.ts.map +1 -0
  146. package/dist/data/memory/note-archival.js +48 -0
  147. package/dist/data/memory/note-archival.js.map +1 -0
  148. package/dist/data/memory/note-embeddings.d.ts +27 -0
  149. package/dist/data/memory/note-embeddings.d.ts.map +1 -0
  150. package/dist/data/memory/note-embeddings.js +98 -0
  151. package/dist/data/memory/note-embeddings.js.map +1 -0
  152. package/dist/data/memory/reflection-dedup.d.ts +17 -0
  153. package/dist/data/memory/reflection-dedup.d.ts.map +1 -0
  154. package/dist/data/memory/reflection-dedup.js +55 -0
  155. package/dist/data/memory/reflection-dedup.js.map +1 -0
  156. package/dist/data/memory/reflection-gates.d.ts +40 -0
  157. package/dist/data/memory/reflection-gates.d.ts.map +1 -0
  158. package/dist/data/memory/reflection-gates.js +220 -0
  159. package/dist/data/memory/reflection-gates.js.map +1 -0
  160. package/dist/data/memory/reflection-sources.d.ts +13 -0
  161. package/dist/data/memory/reflection-sources.d.ts.map +1 -0
  162. package/dist/data/memory/reflection-sources.js +115 -0
  163. package/dist/data/memory/reflection-sources.js.map +1 -0
  164. package/dist/data/memory/reflection.d.ts +5 -35
  165. package/dist/data/memory/reflection.d.ts.map +1 -1
  166. package/dist/data/memory/reflection.js +25 -329
  167. package/dist/data/memory/reflection.js.map +1 -1
  168. package/dist/data/memory/schema-ddl.d.ts +1 -1
  169. package/dist/data/memory/schema-ddl.d.ts.map +1 -1
  170. package/dist/data/memory/schema-ddl.js +5 -3
  171. package/dist/data/memory/schema-ddl.js.map +1 -1
  172. package/dist/data/memory/schema-guard.d.ts +1 -1
  173. package/dist/data/memory/schema-guard.d.ts.map +1 -1
  174. package/dist/data/memory/schema-guard.js +5 -4
  175. package/dist/data/memory/schema-guard.js.map +1 -1
  176. package/dist/data/memory/schema.d.ts +2 -2
  177. package/dist/data/memory/schema.d.ts.map +1 -1
  178. package/dist/data/memory/schema.js +4 -2
  179. package/dist/data/memory/schema.js.map +1 -1
  180. package/dist/data/memory/{semantic.d.ts → semantic-notes.d.ts} +6 -72
  181. package/dist/data/memory/semantic-notes.d.ts.map +1 -0
  182. package/dist/data/memory/semantic-notes.js +249 -0
  183. package/dist/data/memory/semantic-notes.js.map +1 -0
  184. package/dist/data/memory/semantic-search.d.ts +29 -0
  185. package/dist/data/memory/semantic-search.d.ts.map +1 -0
  186. package/dist/data/memory/semantic-search.js +156 -0
  187. package/dist/data/memory/semantic-search.js.map +1 -0
  188. package/dist/data/memory/synthesis.d.ts.map +1 -1
  189. package/dist/data/memory/synthesis.js +15 -7
  190. package/dist/data/memory/synthesis.js.map +1 -1
  191. package/dist/data/memory/thread-registry.d.ts +2 -2
  192. package/dist/data/memory/thread-registry.d.ts.map +1 -1
  193. package/dist/data/memory/thread-registry.js +74 -36
  194. package/dist/data/memory/thread-registry.js.map +1 -1
  195. package/dist/data/memory/topic-index.d.ts +20 -0
  196. package/dist/data/memory/topic-index.d.ts.map +1 -0
  197. package/dist/data/memory/topic-index.js +91 -0
  198. package/dist/data/memory/topic-index.js.map +1 -0
  199. package/dist/data/memory/topic-shift.js +1 -1
  200. package/dist/data/memory/topic-shift.js.map +1 -1
  201. package/dist/data/memory/utils.d.ts +0 -5
  202. package/dist/data/memory/utils.d.ts.map +1 -1
  203. package/dist/data/memory/utils.js +0 -94
  204. package/dist/data/memory/utils.js.map +1 -1
  205. package/dist/data/sent-message.repository.js +2 -2
  206. package/dist/data/sent-message.repository.js.map +1 -1
  207. package/dist/data/templates.js +2 -2
  208. package/dist/data/templates.js.map +1 -1
  209. package/dist/index.js +21 -19
  210. package/dist/index.js.map +1 -1
  211. package/dist/integrations/openai/chat.d.ts.map +1 -1
  212. package/dist/integrations/openai/chat.js +5 -5
  213. package/dist/integrations/openai/chat.js.map +1 -1
  214. package/dist/integrations/openai/speech.d.ts +1 -1
  215. package/dist/integrations/openai/speech.d.ts.map +1 -1
  216. package/dist/integrations/openai/speech.js +1 -3
  217. package/dist/integrations/openai/speech.js.map +1 -1
  218. package/dist/integrations/openai/video.d.ts.map +1 -1
  219. package/dist/integrations/openai/video.js +21 -10
  220. package/dist/integrations/openai/video.js.map +1 -1
  221. package/dist/integrations/openai/vision.d.ts.map +1 -1
  222. package/dist/integrations/openai/vision.js.map +1 -1
  223. package/dist/integrations/openai/voice-emotion.d.ts.map +1 -1
  224. package/dist/integrations/openai/voice-emotion.js +2 -2
  225. package/dist/integrations/openai/voice-emotion.js.map +1 -1
  226. package/dist/lib/logger.d.ts.map +1 -0
  227. package/dist/{logger.js → lib/logger.js} +77 -50
  228. package/dist/lib/logger.js.map +1 -0
  229. package/dist/lib/markdown.d.ts.map +1 -0
  230. package/dist/{markdown.js → lib/markdown.js} +13 -5
  231. package/dist/lib/markdown.js.map +1 -0
  232. package/dist/{types.d.ts → lib/types.d.ts} +0 -1
  233. package/dist/lib/types.d.ts.map +1 -0
  234. package/dist/lib/types.js.map +1 -0
  235. package/dist/lib/utils.d.ts.map +1 -0
  236. package/dist/{utils.js → lib/utils.js} +29 -9
  237. package/dist/lib/utils.js.map +1 -0
  238. package/dist/llm/json.d.ts +14 -0
  239. package/dist/llm/json.d.ts.map +1 -0
  240. package/dist/llm/json.js +112 -0
  241. package/dist/llm/json.js.map +1 -0
  242. package/dist/llm/prompts/narrative.d.ts +7 -0
  243. package/dist/llm/prompts/narrative.d.ts.map +1 -0
  244. package/dist/llm/prompts/narrative.js +124 -0
  245. package/dist/llm/prompts/narrative.js.map +1 -0
  246. package/dist/llm/prompts/reflection.d.ts +6 -0
  247. package/dist/llm/prompts/reflection.d.ts.map +1 -0
  248. package/dist/llm/prompts/reflection.js +77 -0
  249. package/dist/llm/prompts/reflection.js.map +1 -0
  250. package/dist/server/factory.d.ts +2 -2
  251. package/dist/server/factory.d.ts.map +1 -1
  252. package/dist/server/factory.js +152 -73
  253. package/dist/server/factory.js.map +1 -1
  254. package/dist/{http-server.d.ts → server/http-server.d.ts} +2 -2
  255. package/dist/server/http-server.d.ts.map +1 -0
  256. package/dist/{http-server.js → server/http-server.js} +38 -17
  257. package/dist/server/http-server.js.map +1 -0
  258. package/dist/{stdio-server.d.ts → server/stdio-server.d.ts} +1 -1
  259. package/dist/server/stdio-server.d.ts.map +1 -0
  260. package/dist/{stdio-server.js → server/stdio-server.js} +25 -11
  261. package/dist/server/stdio-server.js.map +1 -0
  262. package/dist/services/agent-spawn.service.d.ts +1 -1
  263. package/dist/services/agent-spawn.service.d.ts.map +1 -1
  264. package/dist/services/agent-spawn.service.js +17 -7
  265. package/dist/services/agent-spawn.service.js.map +1 -1
  266. package/dist/services/background-runner.d.ts +2 -2
  267. package/dist/services/background-runner.d.ts.map +1 -1
  268. package/dist/services/background-runner.js +8 -3
  269. package/dist/services/background-runner.js.map +1 -1
  270. package/dist/services/claude-spawn.service.d.ts.map +1 -1
  271. package/dist/services/claude-spawn.service.js +61 -52
  272. package/dist/services/claude-spawn.service.js.map +1 -1
  273. package/dist/services/codex-spawn.service.d.ts.map +1 -1
  274. package/dist/services/codex-spawn.service.js +52 -40
  275. package/dist/services/codex-spawn.service.js.map +1 -1
  276. package/dist/services/consolidation-prompts.d.ts +26 -0
  277. package/dist/services/consolidation-prompts.d.ts.map +1 -0
  278. package/dist/services/consolidation-prompts.js +144 -0
  279. package/dist/services/consolidation-prompts.js.map +1 -0
  280. package/dist/services/consolidation.service.d.ts +1 -5
  281. package/dist/services/consolidation.service.d.ts.map +1 -1
  282. package/dist/services/consolidation.service.js +53 -322
  283. package/dist/services/consolidation.service.js.map +1 -1
  284. package/dist/services/copilot-spawn.service.d.ts.map +1 -1
  285. package/dist/services/copilot-spawn.service.js +47 -57
  286. package/dist/services/copilot-spawn.service.js.map +1 -1
  287. package/dist/{daily-session.d.ts → services/daily-session.d.ts} +1 -1
  288. package/dist/services/daily-session.d.ts.map +1 -0
  289. package/dist/{daily-session.js → services/daily-session.js} +15 -14
  290. package/dist/services/daily-session.js.map +1 -0
  291. package/dist/services/dispatcher/broker.d.ts +0 -6
  292. package/dist/services/dispatcher/broker.d.ts.map +1 -1
  293. package/dist/services/dispatcher/broker.js +46 -38
  294. package/dist/services/dispatcher/broker.js.map +1 -1
  295. package/dist/services/dispatcher/index.d.ts +1 -1
  296. package/dist/services/dispatcher/index.d.ts.map +1 -1
  297. package/dist/services/dispatcher/index.js +1 -1
  298. package/dist/services/dispatcher/index.js.map +1 -1
  299. package/dist/services/dispatcher/lock.d.ts.map +1 -1
  300. package/dist/services/dispatcher/lock.js +24 -9
  301. package/dist/services/dispatcher/lock.js.map +1 -1
  302. package/dist/services/dispatcher/poller.d.ts +1 -1
  303. package/dist/services/dispatcher/poller.d.ts.map +1 -1
  304. package/dist/services/dispatcher/poller.js +74 -49
  305. package/dist/services/dispatcher/poller.js.map +1 -1
  306. package/dist/services/drive.d.ts.map +1 -0
  307. package/dist/{drive.js → services/drive.js} +1 -1
  308. package/dist/services/drive.js.map +1 -0
  309. package/dist/services/intent.d.ts.map +1 -0
  310. package/dist/{intent.js → services/intent.js} +78 -23
  311. package/dist/services/intent.js.map +1 -0
  312. package/dist/services/keep-alive-sync.service.d.ts +11 -0
  313. package/dist/services/keep-alive-sync.service.d.ts.map +1 -0
  314. package/dist/services/keep-alive-sync.service.js +47 -0
  315. package/dist/services/keep-alive-sync.service.js.map +1 -0
  316. package/dist/services/keeper.service.d.ts +1 -1
  317. package/dist/services/keeper.service.d.ts.map +1 -1
  318. package/dist/services/keeper.service.js +31 -18
  319. package/dist/services/keeper.service.js.map +1 -1
  320. package/dist/services/maintenance-signal.js +1 -1
  321. package/dist/services/maintenance-signal.js.map +1 -1
  322. package/dist/services/mcp-config.service.d.ts.map +1 -1
  323. package/dist/services/mcp-config.service.js +19 -6
  324. package/dist/services/mcp-config.service.js.map +1 -1
  325. package/dist/services/memory-briefing.service.d.ts.map +1 -1
  326. package/dist/services/memory-briefing.service.js +13 -7
  327. package/dist/services/memory-briefing.service.js.map +1 -1
  328. package/dist/services/memory-pruning.service.d.ts +12 -0
  329. package/dist/services/memory-pruning.service.d.ts.map +1 -0
  330. package/dist/services/memory-pruning.service.js +177 -0
  331. package/dist/services/memory-pruning.service.js.map +1 -0
  332. package/dist/services/process.service.d.ts +7 -2
  333. package/dist/services/process.service.d.ts.map +1 -1
  334. package/dist/services/process.service.js +233 -103
  335. package/dist/services/process.service.js.map +1 -1
  336. package/dist/services/reconnect-snapshot.service.d.ts.map +1 -1
  337. package/dist/services/reconnect-snapshot.service.js +3 -3
  338. package/dist/services/reconnect-snapshot.service.js.map +1 -1
  339. package/dist/{scheduler.d.ts → services/scheduler.d.ts} +1 -23
  340. package/dist/services/scheduler.d.ts.map +1 -0
  341. package/dist/{scheduler.js → services/scheduler.js} +6 -8
  342. package/dist/services/scheduler.js.map +1 -0
  343. package/dist/services/self-update.service.d.ts +15 -5
  344. package/dist/services/self-update.service.d.ts.map +1 -1
  345. package/dist/services/self-update.service.js +85 -41
  346. package/dist/services/self-update.service.js.map +1 -1
  347. package/dist/services/spawn-common.d.ts +40 -16
  348. package/dist/services/spawn-common.d.ts.map +1 -1
  349. package/dist/services/spawn-common.js +163 -36
  350. package/dist/services/spawn-common.js.map +1 -1
  351. package/dist/{telegram.d.ts → services/telegram.d.ts} +3 -3
  352. package/dist/services/telegram.d.ts.map +1 -0
  353. package/dist/{telegram.js → services/telegram.js} +16 -8
  354. package/dist/services/telegram.js.map +1 -0
  355. package/dist/services/thread-config.service.d.ts +25 -0
  356. package/dist/services/thread-config.service.d.ts.map +1 -0
  357. package/dist/services/thread-config.service.js +73 -0
  358. package/dist/services/thread-config.service.js.map +1 -0
  359. package/dist/services/thread-health.service.d.ts.map +1 -1
  360. package/dist/services/thread-health.service.js +23 -9
  361. package/dist/services/thread-health.service.js.map +1 -1
  362. package/dist/services/thread-lifecycle.service.d.ts.map +1 -1
  363. package/dist/services/thread-lifecycle.service.js +21 -7
  364. package/dist/services/thread-lifecycle.service.js.map +1 -1
  365. package/dist/services/topic.service.d.ts.map +1 -1
  366. package/dist/services/topic.service.js +17 -6
  367. package/dist/services/topic.service.js.map +1 -1
  368. package/dist/services/worker-cleanup.service.d.ts +3 -2
  369. package/dist/services/worker-cleanup.service.d.ts.map +1 -1
  370. package/dist/services/worker-cleanup.service.js +31 -19
  371. package/dist/services/worker-cleanup.service.js.map +1 -1
  372. package/dist/sessions/dashboard-registry.d.ts +38 -0
  373. package/dist/sessions/dashboard-registry.d.ts.map +1 -0
  374. package/dist/sessions/dashboard-registry.js +84 -0
  375. package/dist/sessions/dashboard-registry.js.map +1 -0
  376. package/dist/{sessions.d.ts → sessions/mcp-registry.d.ts} +3 -60
  377. package/dist/sessions/mcp-registry.d.ts.map +1 -0
  378. package/dist/{sessions.js → sessions/mcp-registry.js} +5 -214
  379. package/dist/sessions/mcp-registry.js.map +1 -0
  380. package/dist/sessions/session-store.d.ts +17 -0
  381. package/dist/sessions/session-store.d.ts.map +1 -0
  382. package/dist/sessions/session-store.js +69 -0
  383. package/dist/sessions/session-store.js.map +1 -0
  384. package/dist/sessions/topic-registry.d.ts +14 -0
  385. package/dist/sessions/topic-registry.d.ts.map +1 -0
  386. package/dist/sessions/topic-registry.js +67 -0
  387. package/dist/sessions/topic-registry.js.map +1 -0
  388. package/dist/tools/definitions.d.ts +1 -9
  389. package/dist/tools/definitions.d.ts.map +1 -1
  390. package/dist/tools/definitions.js.map +1 -1
  391. package/dist/tools/defs/memory-defs.d.ts +1 -1
  392. package/dist/tools/defs/memory-defs.d.ts.map +1 -1
  393. package/dist/tools/defs/memory-defs.js +1 -1
  394. package/dist/tools/defs/memory-defs.js.map +1 -1
  395. package/dist/tools/defs/session-defs.d.ts +1 -1
  396. package/dist/tools/defs/session-defs.d.ts.map +1 -1
  397. package/dist/tools/defs/session-defs.js +3 -14
  398. package/dist/tools/defs/session-defs.js.map +1 -1
  399. package/dist/tools/defs/skill-defs.d.ts +1 -1
  400. package/dist/tools/defs/skill-defs.d.ts.map +1 -1
  401. package/dist/tools/defs/types.d.ts +11 -0
  402. package/dist/tools/defs/types.d.ts.map +1 -0
  403. package/dist/{chat-ui/src → tools/defs}/types.js.map +1 -1
  404. package/dist/tools/defs/utility-defs.d.ts +1 -1
  405. package/dist/tools/defs/utility-defs.d.ts.map +1 -1
  406. package/dist/tools/defs/utility-defs.js.map +1 -1
  407. package/dist/tools/defs/wait-defs.d.ts +1 -1
  408. package/dist/tools/defs/wait-defs.d.ts.map +1 -1
  409. package/dist/tools/delegate-tool.d.ts +2 -2
  410. package/dist/tools/delegate-tool.d.ts.map +1 -1
  411. package/dist/tools/delegate-tool.js +57 -37
  412. package/dist/tools/delegate-tool.js.map +1 -1
  413. package/dist/tools/memory-tools.d.ts +2 -2
  414. package/dist/tools/memory-tools.d.ts.map +1 -1
  415. package/dist/tools/memory-tools.js +108 -37
  416. package/dist/tools/memory-tools.js.map +1 -1
  417. package/dist/{response-builders.d.ts → tools/response-builders.d.ts} +2 -2
  418. package/dist/tools/response-builders.d.ts.map +1 -0
  419. package/dist/{response-builders.js → tools/response-builders.js} +152 -31
  420. package/dist/tools/response-builders.js.map +1 -0
  421. package/dist/tools/session-tools.d.ts +5 -14
  422. package/dist/tools/session-tools.d.ts.map +1 -1
  423. package/dist/tools/session-tools.js +17 -12
  424. package/dist/tools/session-tools.js.map +1 -1
  425. package/dist/tools/shared-agent-utils.d.ts +1 -1
  426. package/dist/tools/shared-agent-utils.d.ts.map +1 -1
  427. package/dist/tools/shared-agent-utils.js +2 -4
  428. package/dist/tools/shared-agent-utils.js.map +1 -1
  429. package/dist/tools/skill-tools.d.ts +1 -1
  430. package/dist/tools/skill-tools.d.ts.map +1 -1
  431. package/dist/tools/skill-tools.js +12 -7
  432. package/dist/tools/skill-tools.js.map +1 -1
  433. package/dist/tools/start-session-tool.d.ts +3 -3
  434. package/dist/tools/start-session-tool.d.ts.map +1 -1
  435. package/dist/tools/start-session-tool.js +35 -25
  436. package/dist/tools/start-session-tool.js.map +1 -1
  437. package/dist/tools/utility-tools.d.ts +3 -3
  438. package/dist/tools/utility-tools.d.ts.map +1 -1
  439. package/dist/tools/utility-tools.js +46 -28
  440. package/dist/tools/utility-tools.js.map +1 -1
  441. package/dist/tools/wait/auto-forward.d.ts +1 -1
  442. package/dist/tools/wait/auto-forward.d.ts.map +1 -1
  443. package/dist/tools/wait/auto-forward.js +6 -4
  444. package/dist/tools/wait/auto-forward.js.map +1 -1
  445. package/dist/tools/wait/context.d.ts +45 -0
  446. package/dist/tools/wait/context.d.ts.map +1 -0
  447. package/dist/tools/wait/context.js +5 -0
  448. package/dist/tools/wait/context.js.map +1 -0
  449. package/dist/tools/wait/drive-handler.d.ts +2 -2
  450. package/dist/tools/wait/drive-handler.d.ts.map +1 -1
  451. package/dist/tools/wait/drive-handler.js +24 -12
  452. package/dist/tools/wait/drive-handler.js.map +1 -1
  453. package/dist/tools/wait/index.d.ts +2 -1
  454. package/dist/tools/wait/index.d.ts.map +1 -1
  455. package/dist/tools/wait/index.js.map +1 -1
  456. package/dist/tools/wait/media-processor.d.ts +4 -4
  457. package/dist/tools/wait/media-processor.d.ts.map +1 -1
  458. package/dist/tools/wait/media-processor.js +17 -8
  459. package/dist/tools/wait/media-processor.js.map +1 -1
  460. package/dist/tools/wait/message-delivery.d.ts +5 -5
  461. package/dist/tools/wait/message-delivery.d.ts.map +1 -1
  462. package/dist/tools/wait/message-delivery.js +78 -37
  463. package/dist/tools/wait/message-delivery.js.map +1 -1
  464. package/dist/tools/wait/message-processing.d.ts +2 -2
  465. package/dist/tools/wait/message-processing.d.ts.map +1 -1
  466. package/dist/tools/wait/message-processing.js +95 -37
  467. package/dist/tools/wait/message-processing.js.map +1 -1
  468. package/dist/tools/wait/poll-loop.d.ts +2 -41
  469. package/dist/tools/wait/poll-loop.d.ts.map +1 -1
  470. package/dist/tools/wait/poll-loop.js +75 -23
  471. package/dist/tools/wait/poll-loop.js.map +1 -1
  472. package/dist/tools/wait/reaction-handler.d.ts +3 -3
  473. package/dist/tools/wait/reaction-handler.d.ts.map +1 -1
  474. package/dist/tools/wait/reaction-handler.js +6 -6
  475. package/dist/tools/wait/reaction-handler.js.map +1 -1
  476. package/dist/tools/wait/task-handler.d.ts +1 -1
  477. package/dist/tools/wait/task-handler.d.ts.map +1 -1
  478. package/dist/tools/wait/task-handler.js +5 -4
  479. package/dist/tools/wait/task-handler.js.map +1 -1
  480. package/package.json +11 -2
  481. package/templates/code-review.default.md +1 -1
  482. package/templates/fire-and-forget.default.md +1 -1
  483. package/templates/handoff.default.md +1 -1
  484. package/templates/playwright.default.md +6 -6
  485. package/templates/sensorium-repair.default.md +4 -1
  486. package/templates/sleep.default.md +1 -1
  487. package/dist/chat-ui/src/main.d.ts +0 -2
  488. package/dist/chat-ui/src/main.d.ts.map +0 -1
  489. package/dist/chat-ui/src/main.js +0 -4
  490. package/dist/chat-ui/src/main.js.map +0 -1
  491. package/dist/chat-ui/src/markdown.d.ts +0 -2
  492. package/dist/chat-ui/src/markdown.d.ts.map +0 -1
  493. package/dist/chat-ui/src/markdown.js +0 -39
  494. package/dist/chat-ui/src/markdown.js.map +0 -1
  495. package/dist/chat-ui/src/mock-data.d.ts +0 -4
  496. package/dist/chat-ui/src/mock-data.d.ts.map +0 -1
  497. package/dist/chat-ui/src/mock-data.js +0 -230
  498. package/dist/chat-ui/src/mock-data.js.map +0 -1
  499. package/dist/chat-ui/src/types.d.ts +0 -47
  500. package/dist/chat-ui/src/types.d.ts.map +0 -1
  501. package/dist/chat-ui/vite.config.d.ts +0 -3
  502. package/dist/chat-ui/vite.config.d.ts.map +0 -1
  503. package/dist/chat-ui/vite.config.js +0 -14
  504. package/dist/chat-ui/vite.config.js.map +0 -1
  505. package/dist/config.d.ts +0 -228
  506. package/dist/config.d.ts.map +0 -1
  507. package/dist/config.js +0 -841
  508. package/dist/config.js.map +0 -1
  509. package/dist/daily-session.d.ts.map +0 -1
  510. package/dist/daily-session.js.map +0 -1
  511. package/dist/dashboard.d.ts +0 -10
  512. package/dist/dashboard.d.ts.map +0 -1
  513. package/dist/dashboard.js +0 -10
  514. package/dist/dashboard.js.map +0 -1
  515. package/dist/data/memory/semantic.d.ts.map +0 -1
  516. package/dist/data/memory/semantic.js +0 -588
  517. package/dist/data/memory/semantic.js.map +0 -1
  518. package/dist/dispatcher.d.ts +0 -9
  519. package/dist/dispatcher.d.ts.map +0 -1
  520. package/dist/dispatcher.js +0 -9
  521. package/dist/dispatcher.js.map +0 -1
  522. package/dist/drive.d.ts.map +0 -1
  523. package/dist/drive.js.map +0 -1
  524. package/dist/http-server.d.ts.map +0 -1
  525. package/dist/http-server.js.map +0 -1
  526. package/dist/intent.d.ts.map +0 -1
  527. package/dist/intent.js.map +0 -1
  528. package/dist/logger.d.ts.map +0 -1
  529. package/dist/logger.js.map +0 -1
  530. package/dist/markdown.d.ts.map +0 -1
  531. package/dist/markdown.js.map +0 -1
  532. package/dist/memory.d.ts +0 -9
  533. package/dist/memory.d.ts.map +0 -1
  534. package/dist/memory.js +0 -9
  535. package/dist/memory.js.map +0 -1
  536. package/dist/openai.d.ts +0 -13
  537. package/dist/openai.d.ts.map +0 -1
  538. package/dist/openai.js +0 -17
  539. package/dist/openai.js.map +0 -1
  540. package/dist/response-builders.d.ts.map +0 -1
  541. package/dist/response-builders.js.map +0 -1
  542. package/dist/scheduler.d.ts.map +0 -1
  543. package/dist/scheduler.js.map +0 -1
  544. package/dist/sessions.d.ts.map +0 -1
  545. package/dist/sessions.js.map +0 -1
  546. package/dist/stdio-server.d.ts.map +0 -1
  547. package/dist/stdio-server.js.map +0 -1
  548. package/dist/telegram.d.ts.map +0 -1
  549. package/dist/telegram.js.map +0 -1
  550. package/dist/tool-definitions.d.ts +0 -2
  551. package/dist/tool-definitions.d.ts.map +0 -1
  552. package/dist/tool-definitions.js +0 -2
  553. package/dist/tool-definitions.js.map +0 -1
  554. package/dist/types.d.ts.map +0 -1
  555. package/dist/types.js.map +0 -1
  556. package/dist/utils.d.ts.map +0 -1
  557. package/dist/utils.js.map +0 -1
  558. /package/dist/{logger.d.ts → lib/logger.d.ts} +0 -0
  559. /package/dist/{markdown.d.ts → lib/markdown.d.ts} +0 -0
  560. /package/dist/{types.js → lib/types.js} +0 -0
  561. /package/dist/{utils.d.ts → lib/utils.d.ts} +0 -0
  562. /package/dist/{drive.d.ts → services/drive.d.ts} +0 -0
  563. /package/dist/{intent.d.ts → services/intent.d.ts} +0 -0
  564. /package/dist/{chat-ui/src → tools/defs}/types.js +0 -0
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Keep-alive settings — global keeper toggle/target/retry policy, keeper
3
+ * client type, and per-thread keep-alive overrides.
4
+ */
5
+ import { readSettings, updateSettings } from "./settings-store.js";
6
+ // ─── Keep-alive settings ─────────────────────────────────────────────────────
7
+ const DEFAULT_KEEP_ALIVE_MAX_RETRIES = 5;
8
+ const DEFAULT_KEEP_ALIVE_COOLDOWN_MS = 300_000;
9
+ export function getKeepAliveEnabled() {
10
+ const v = readSettings().keepAliveEnabled;
11
+ if (typeof v === "boolean")
12
+ return v;
13
+ return false; // default: disabled
14
+ }
15
+ export function setKeepAliveEnabled(enabled) {
16
+ updateSettings((s) => {
17
+ s.keepAliveEnabled = enabled;
18
+ });
19
+ }
20
+ export function getKeepAliveThreadId() {
21
+ const v = readSettings().keepAliveThreadId;
22
+ if (typeof v === "number" && Number.isFinite(v) && v > 0)
23
+ return v;
24
+ return 0;
25
+ }
26
+ export function setKeepAliveThreadId(threadId) {
27
+ updateSettings((s) => {
28
+ s.keepAliveThreadId = threadId;
29
+ });
30
+ }
31
+ export function getKeepAliveMaxRetries() {
32
+ const v = readSettings().keepAliveMaxRetries;
33
+ if (typeof v === "number" && Number.isFinite(v) && v > 0)
34
+ return v;
35
+ return DEFAULT_KEEP_ALIVE_MAX_RETRIES;
36
+ }
37
+ export function setKeepAliveMaxRetries(retries) {
38
+ updateSettings((s) => {
39
+ s.keepAliveMaxRetries = retries;
40
+ });
41
+ }
42
+ export function getKeepAliveCooldownMs() {
43
+ const v = readSettings().keepAliveCooldownMs;
44
+ if (typeof v === "number" && Number.isFinite(v) && v > 0)
45
+ return v;
46
+ return DEFAULT_KEEP_ALIVE_COOLDOWN_MS;
47
+ }
48
+ export function setKeepAliveCooldownMs(ms) {
49
+ updateSettings((s) => {
50
+ s.keepAliveCooldownMs = ms;
51
+ });
52
+ }
53
+ export function isValidKeeperClient(v) {
54
+ return v === "claude" || v === "copilot";
55
+ }
56
+ export function getKeepAliveClient() {
57
+ const v = readSettings().keepAliveClient;
58
+ return isValidKeeperClient(v) ? v : "claude";
59
+ }
60
+ export function setKeepAliveClient(client) {
61
+ updateSettings((s) => {
62
+ s.keepAliveClient = client;
63
+ });
64
+ }
65
+ /** Sets keep-alive settings for a specific thread. */
66
+ export function setThreadKeepAlive(threadId, settings) {
67
+ updateSettings((s) => {
68
+ const map = (s.threadKeepAlive ?? {});
69
+ map[String(threadId)] = settings;
70
+ s.threadKeepAlive = map;
71
+ });
72
+ }
73
+ /** Removes per-thread keep-alive settings. */
74
+ export function removeThreadKeepAlive(threadId) {
75
+ updateSettings((s) => {
76
+ const map = (s.threadKeepAlive ?? {});
77
+ delete map[String(threadId)];
78
+ s.threadKeepAlive = map;
79
+ });
80
+ }
81
+ /** Returns all per-thread keep-alive overrides. */
82
+ export function getAllThreadKeepAlive() {
83
+ const map = readSettings().threadKeepAlive;
84
+ if (!map || typeof map !== "object")
85
+ return {};
86
+ const result = {};
87
+ for (const [k, v] of Object.entries(map)) {
88
+ if (v && typeof v === "object") {
89
+ const e = v;
90
+ result[k] = {
91
+ enabled: typeof e.enabled === "boolean" ? e.enabled : false,
92
+ client: isValidKeeperClient(e.client) ? e.client : undefined,
93
+ cooldownMs: typeof e.cooldownMs === "number" && e.cooldownMs >= 1000 ? e.cooldownMs : undefined,
94
+ maxRetries: typeof e.maxRetries === "number" && e.maxRetries > 0 ? e.maxRetries : undefined,
95
+ };
96
+ }
97
+ }
98
+ return result;
99
+ }
100
+ //# sourceMappingURL=keep-alive-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keep-alive-settings.js","sourceRoot":"","sources":["../../src/config/keep-alive-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * MCP server settings — the global user-configured server map plus the
3
+ * security-hardened per-thread server entries (http-only, reserved-name and
4
+ * header-name invariants) and dashboard masking helpers.
5
+ */
6
+ export type McpServerConfig = {
7
+ type: "stdio";
8
+ command: string;
9
+ args?: string[];
10
+ env?: Record<string, string>;
11
+ } | {
12
+ type: "http";
13
+ url: string;
14
+ headers?: Record<string, string>;
15
+ env?: Record<string, string>;
16
+ };
17
+ /** Returns all user-configured MCP servers (excludes auto-injected sensorium). */
18
+ export declare function getMcpServers(): Record<string, McpServerConfig>;
19
+ /** Overwrites the entire MCP servers map. */
20
+ export declare function setMcpServers(servers: Record<string, McpServerConfig>): void;
21
+ /** Add or update a single MCP server by name. */
22
+ export declare function addMcpServer(name: string, config: McpServerConfig): void;
23
+ /** Remove an MCP server by name. Returns true if it existed. */
24
+ export declare function removeMcpServer(name: string): boolean;
25
+ /** MCP server names a per-thread entry may never use. */
26
+ export declare const RESERVED_MCP_NAMES: readonly string[];
27
+ /** A per-thread MCP server entry — HTTP transport only (no stdio, by design). */
28
+ export type ThreadMcpServer = {
29
+ type: "http";
30
+ url: string;
31
+ headers?: Record<string, string>;
32
+ };
33
+ /** Parse a per-thread server map, dropping reserved names and non-http/invalid entries. */
34
+ export declare function parseThreadMcpServers(raw: unknown): Record<string, ThreadMcpServer>;
35
+ /** Returns a thread's custom MCP servers (http-only, reserved names excluded). */
36
+ export declare function getThreadMcpServers(threadId: number): Record<string, ThreadMcpServer>;
37
+ /**
38
+ * Validate a caller-supplied server map against the per-thread invariants
39
+ * (http-only, non-reserved name, safe header names). Throws on any violation so
40
+ * the dashboard can surface a 400. Shared by per-thread MCP writes and agent
41
+ * templates (which carry the same kind of map).
42
+ */
43
+ export declare function sanitizeThreadMcpServers(servers: Record<string, ThreadMcpServer> | null | undefined): Record<string, ThreadMcpServer>;
44
+ /** Header value the dashboard shows in place of a stored secret; must never be persisted back. */
45
+ export declare const MASK_SENTINEL = "\u2022\u2022\u2022\u2022";
46
+ type MaskedThreadMcpServer = {
47
+ type: "http";
48
+ url: string;
49
+ headers?: Record<string, string>;
50
+ };
51
+ /** Mask header values so the dashboard shows which headers exist without leaking the secret. */
52
+ export declare function maskThreadMcpServers(servers: Record<string, ThreadMcpServer>): Record<string, MaskedThreadMcpServer>;
53
+ export declare function setThreadMcpServers(threadId: number, servers: Record<string, ThreadMcpServer> | null): void;
54
+ /** Remove a thread's custom MCP servers entirely (called on hard-delete). */
55
+ export declare function deleteThreadMcpServers(threadId: number): void;
56
+ /** All per-thread MCP servers (for dashboard enrichment), reserved/invalid excluded. */
57
+ export declare function getAllThreadMcpServers(): Record<string, Record<string, ThreadMcpServer>>;
58
+ export {};
59
+ //# sourceMappingURL=mcp-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-settings.d.ts","sourceRoot":"","sources":["../../src/config/mcp-settings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACjF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AAQlG,kFAAkF;AAClF,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAE/D;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,IAAI,CAI5E;AAED,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAUxE;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWrD;AAmBD,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAA6B,CAAC;AAE9E,iFAAiF;AACjF,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AA2B9F,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CASnF;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAGrF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,IAAI,GAAG,SAAS,GAC1D,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CA4BjC;AAED,kGAAkG;AAClG,eAAO,MAAM,aAAa,6BAAS,CAAC;AAEpC,KAAK,qBAAqB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AAE7F,gGAAgG;AAChG,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GACvC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAWvC;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,IAAI,GAC9C,IAAI,CAQN;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ7D;AAED,wFAAwF;AACxF,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CASxF"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * MCP server settings — the global user-configured server map plus the
3
+ * security-hardened per-thread server entries (http-only, reserved-name and
4
+ * header-name invariants) and dashboard masking helpers.
5
+ */
6
+ import { readSettings, updateSettings } from "./settings-store.js";
7
+ function parseMcpServers(raw) {
8
+ return raw && typeof raw === "object" && !Array.isArray(raw)
9
+ ? raw
10
+ : {};
11
+ }
12
+ /** Returns all user-configured MCP servers (excludes auto-injected sensorium). */
13
+ export function getMcpServers() {
14
+ return parseMcpServers(readSettings().mcpServers);
15
+ }
16
+ /** Overwrites the entire MCP servers map. */
17
+ export function setMcpServers(servers) {
18
+ updateSettings((s) => {
19
+ s.mcpServers = servers;
20
+ });
21
+ }
22
+ /** Add or update a single MCP server by name. */
23
+ export function addMcpServer(name, config) {
24
+ if (!name || name === "sensorium-mcp")
25
+ throw new Error(`Invalid MCP server name: "${name}"`);
26
+ if (config.type === "stdio" && !config.command)
27
+ throw new Error("Stdio MCP server requires a command");
28
+ if (config.type === "http" && !config.url)
29
+ throw new Error("HTTP MCP server requires a url");
30
+ updateSettings((s) => {
31
+ const existing = parseMcpServers(s.mcpServers);
32
+ existing[name] = config;
33
+ s.mcpServers = existing;
34
+ });
35
+ }
36
+ /** Remove an MCP server by name. Returns true if it existed. */
37
+ export function removeMcpServer(name) {
38
+ let existed = false;
39
+ updateSettings((s) => {
40
+ const servers = parseMcpServers(s.mcpServers);
41
+ if (name in servers) {
42
+ delete servers[name];
43
+ existed = true;
44
+ }
45
+ s.mcpServers = servers;
46
+ });
47
+ return existed;
48
+ }
49
+ // ─── Per-thread custom MCP servers (universal, agent-agnostic) ──────────────
50
+ //
51
+ // The operator can attach arbitrary MCP servers to a single thread via the
52
+ // dashboard. Stored in settings.json keyed by threadId (same pattern as
53
+ // threadConversationModes / threadKeepAlive — no DB schema change), then merged
54
+ // on top of the global mcpServers map at spawn. Sensorium knows nothing about
55
+ // what any server does (RAG, search, whatever) — it's just an { type: "http",
56
+ // url, headers } entry, e.g. an Authorization: Bearer <token> that selects a
57
+ // corpus on some external host.
58
+ //
59
+ // HARD INVARIANTS (security):
60
+ // • HTTP-ONLY. A per-thread `stdio` entry would spawn an operator-supplied
61
+ // binary at agent-spawn time = arbitrary code execution, so stdio is
62
+ // rejected on write and never parsed back out.
63
+ // • RESERVED names can't be overridden — `sensorium-mcp` is the agent's own
64
+ // control channel (clobbering it severs the orchestrator link).
65
+ /** MCP server names a per-thread entry may never use. */
66
+ export const RESERVED_MCP_NAMES = ["sensorium-mcp", "rag"];
67
+ /**
68
+ * Header names must be plain HTTP tokens. This is a hard security boundary, not
69
+ * cosmetics: Codex renders headers as dotted TOML `-c mcp_servers.X.http_headers.<key>`
70
+ * overrides, so a key containing `.`, `"`, `=`, `[` or whitespace could break out
71
+ * of the header path and inject arbitrary config (e.g. re-point sensorium-mcp or
72
+ * add an stdio server), defeating the reserved-name and http-only invariants.
73
+ */
74
+ const SAFE_HEADER_NAME = /^[A-Za-z0-9-]+$/;
75
+ /** Parse one raw entry into a validated http-only ThreadMcpServer, or null if invalid. */
76
+ function parseThreadMcpServer(raw) {
77
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
78
+ return null;
79
+ const o = raw;
80
+ if (o.type !== "http" || typeof o.url !== "string" || o.url.length === 0)
81
+ return null;
82
+ const entry = { type: "http", url: o.url };
83
+ if (o.headers && typeof o.headers === "object" && !Array.isArray(o.headers)) {
84
+ const headers = {};
85
+ for (const [k, v] of Object.entries(o.headers)) {
86
+ if (typeof v === "string" && SAFE_HEADER_NAME.test(k))
87
+ headers[k] = v;
88
+ }
89
+ if (Object.keys(headers).length > 0)
90
+ entry.headers = headers;
91
+ }
92
+ return entry;
93
+ }
94
+ /** Parse a per-thread server map, dropping reserved names and non-http/invalid entries. */
95
+ export function parseThreadMcpServers(raw) {
96
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
97
+ return {};
98
+ const result = {};
99
+ for (const [name, val] of Object.entries(raw)) {
100
+ if (!name || RESERVED_MCP_NAMES.includes(name))
101
+ continue;
102
+ const parsed = parseThreadMcpServer(val);
103
+ if (parsed)
104
+ result[name] = parsed;
105
+ }
106
+ return result;
107
+ }
108
+ /** Returns a thread's custom MCP servers (http-only, reserved names excluded). */
109
+ export function getThreadMcpServers(threadId) {
110
+ const map = readSettings().threadMcpServers;
111
+ return parseThreadMcpServers(map?.[String(threadId)]);
112
+ }
113
+ /**
114
+ * Validate a caller-supplied server map against the per-thread invariants
115
+ * (http-only, non-reserved name, safe header names). Throws on any violation so
116
+ * the dashboard can surface a 400. Shared by per-thread MCP writes and agent
117
+ * templates (which carry the same kind of map).
118
+ */
119
+ export function sanitizeThreadMcpServers(servers) {
120
+ const clean = {};
121
+ if (servers) {
122
+ for (const [name, cfg] of Object.entries(servers)) {
123
+ if (!name)
124
+ throw new Error("MCP server name is required");
125
+ if (RESERVED_MCP_NAMES.includes(name))
126
+ throw new Error(`MCP server name "${name}" is reserved`);
127
+ if (!cfg || cfg.type !== "http")
128
+ throw new Error(`MCP server "${name}" must be http (stdio is not allowed per-thread)`);
129
+ if (!cfg.url)
130
+ throw new Error(`MCP server "${name}" requires a url`);
131
+ const entry = { type: "http", url: cfg.url };
132
+ if (cfg.headers && Object.keys(cfg.headers).length > 0) {
133
+ for (const [k, v] of Object.entries(cfg.headers)) {
134
+ if (!SAFE_HEADER_NAME.test(k))
135
+ throw new Error(`MCP server "${name}" header name "${k}" is invalid (letters, digits, hyphen only)`);
136
+ if (typeof v === "string" && v.includes(MASK_SENTINEL))
137
+ throw new Error(`MCP server "${name}" header "${k}" is still masked — re-enter the value`);
138
+ }
139
+ entry.headers = cfg.headers;
140
+ }
141
+ clean[name] = entry;
142
+ }
143
+ }
144
+ return clean;
145
+ }
146
+ /** Header value the dashboard shows in place of a stored secret; must never be persisted back. */
147
+ export const MASK_SENTINEL = "••••";
148
+ /** Mask header values so the dashboard shows which headers exist without leaking the secret. */
149
+ export function maskThreadMcpServers(servers) {
150
+ const out = {};
151
+ for (const [name, cfg] of Object.entries(servers)) {
152
+ const masked = { type: "http", url: cfg.url };
153
+ if (cfg.headers && Object.keys(cfg.headers).length > 0) {
154
+ masked.headers = {};
155
+ for (const k of Object.keys(cfg.headers))
156
+ masked.headers[k] = MASK_SENTINEL;
157
+ }
158
+ out[name] = masked;
159
+ }
160
+ return out;
161
+ }
162
+ export function setThreadMcpServers(threadId, servers) {
163
+ const clean = sanitizeThreadMcpServers(servers);
164
+ updateSettings((s) => {
165
+ const map = (s.threadMcpServers ?? {});
166
+ if (Object.keys(clean).length > 0)
167
+ map[String(threadId)] = clean;
168
+ else
169
+ delete map[String(threadId)];
170
+ s.threadMcpServers = map;
171
+ });
172
+ }
173
+ /** Remove a thread's custom MCP servers entirely (called on hard-delete). */
174
+ export function deleteThreadMcpServers(threadId) {
175
+ updateSettings((s) => {
176
+ const map = (s.threadMcpServers ?? {});
177
+ if (String(threadId) in map) {
178
+ delete map[String(threadId)];
179
+ s.threadMcpServers = map;
180
+ }
181
+ });
182
+ }
183
+ /** All per-thread MCP servers (for dashboard enrichment), reserved/invalid excluded. */
184
+ export function getAllThreadMcpServers() {
185
+ const map = readSettings().threadMcpServers;
186
+ if (!map || typeof map !== "object")
187
+ return {};
188
+ const result = {};
189
+ for (const [tid, val] of Object.entries(map)) {
190
+ const parsed = parseThreadMcpServers(val);
191
+ if (Object.keys(parsed).length > 0)
192
+ result[tid] = parsed;
193
+ }
194
+ return result;
195
+ }
196
+ //# sourceMappingURL=mcp-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-settings.js","sourceRoot":"","sources":["../../src/config/mcp-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Miscellaneous settings — imported external skills, per-thread conversation
3
+ * mode, bootstrap message count, wait timeout, predefined prompts, guardrails
4
+ * toggle, and the child-thread memory source env var.
5
+ */
6
+ export declare const SKILL_TYPES: readonly ["sensorium", "claude", "copilot"];
7
+ export type SkillType = (typeof SKILL_TYPES)[number];
8
+ export interface ImportedSkill {
9
+ path: string;
10
+ type: SkillType;
11
+ }
12
+ export declare function isValidSkillType(v: unknown): v is SkillType;
13
+ /** All registered external skills. Malformed entries are dropped. */
14
+ export declare function getImportedSkills(): ImportedSkill[];
15
+ /** Register an external skill by path+type. Idempotent on path (updates type). */
16
+ export declare function addImportedSkill(skill: ImportedSkill): void;
17
+ /** Unregister an external skill by path. */
18
+ export declare function removeImportedSkill(path: string): void;
19
+ export type ConversationMode = "concise" | "voice";
20
+ /** Returns the conversation mode for a thread, defaulting to "concise". */
21
+ export declare function getThreadConversationMode(threadId: number): ConversationMode;
22
+ /** Persists a per-thread conversation mode. */
23
+ export declare function setThreadConversationMode(threadId: number, mode: ConversationMode): void;
24
+ /** Number of recent episodes injected into the bootstrap as "Recent Conversation". */
25
+ export declare function getBootstrapMessageCount(): number;
26
+ export declare function setBootstrapMessageCount(count: number): void;
27
+ export declare function getWaitTimeoutMinutes(): number;
28
+ export declare function setWaitTimeoutMinutes(minutes: number): void;
29
+ export interface PredefinedPrompt {
30
+ label: string;
31
+ text: string;
32
+ }
33
+ /** Coerce untrusted input into a clean list of {label, text} prompts. */
34
+ export declare function normalizePredefinedPrompts(raw: unknown): PredefinedPrompt[];
35
+ export declare function getPredefinedPrompts(): PredefinedPrompt[];
36
+ export declare function setPredefinedPrompts(list: PredefinedPrompt[]): void;
37
+ /** Whether guardrail (Active Decisions) notes are injected into memory briefings. */
38
+ export declare function getGuardrailsEnabled(): boolean;
39
+ export declare function setGuardrailsEnabled(enabled: boolean): void;
40
+ /**
41
+ * Read the MEMORY_SOURCE_THREAD_ID env var set by the parent process
42
+ * when spawning a child thread (worker/branch). Returns the parent
43
+ * thread ID for memory briefing, or undefined if not a child thread.
44
+ */
45
+ export declare function getMemorySourceThreadId(): number | undefined;
46
+ //# sourceMappingURL=misc-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc-settings.d.ts","sourceRoot":"","sources":["../../src/config/misc-settings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,eAAO,MAAM,WAAW,6CAA8C,CAAC;AACvE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAE3D;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB,IAAI,aAAa,EAAE,CASnD;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAM3D;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAItD;AAID,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnD,2EAA2E;AAC3E,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAO5E;AAED,+CAA+C;AAC/C,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAMxF;AAOD,sFAAsF;AACtF,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAM5D;AAQD,wBAAgB,qBAAqB,IAAI,MAAM,CAI9C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM3D;AAQD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,yEAAyE;AACzE,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAY3E;AAED,wBAAgB,oBAAoB,IAAI,gBAAgB,EAAE,CAEzD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAInE;AAID,qFAAqF;AACrF,wBAAgB,oBAAoB,IAAI,OAAO,CAI9C;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAI3D;AAID;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,SAAS,CAK5D"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Miscellaneous settings — imported external skills, per-thread conversation
3
+ * mode, bootstrap message count, wait timeout, predefined prompts, guardrails
4
+ * toggle, and the child-thread memory source env var.
5
+ */
6
+ import { readSettings, updateSettings } from "./settings-store.js";
7
+ // ─── Imported (external) skills ─────────────────────────────────────────────
8
+ // Skills that live OUTSIDE Sensorium (e.g. a separate git repo of sensitive
9
+ // skills) are registered here by absolute path + format, never copied. The
10
+ // skill loader reads them in place, so a `git pull` in the source repo updates
11
+ // them with no re-import.
12
+ export const SKILL_TYPES = ["sensorium", "claude", "copilot"];
13
+ export function isValidSkillType(v) {
14
+ return typeof v === "string" && SKILL_TYPES.includes(v);
15
+ }
16
+ /** All registered external skills. Malformed entries are dropped. */
17
+ export function getImportedSkills() {
18
+ const raw = readSettings().importedSkills;
19
+ if (!Array.isArray(raw))
20
+ return [];
21
+ return raw.filter((e) => !!e &&
22
+ typeof e.path === "string" &&
23
+ isValidSkillType(e.type));
24
+ }
25
+ /** Register an external skill by path+type. Idempotent on path (updates type). */
26
+ export function addImportedSkill(skill) {
27
+ updateSettings((s) => {
28
+ const list = getImportedSkills().filter((e) => e.path !== skill.path);
29
+ list.push(skill);
30
+ s.importedSkills = list;
31
+ });
32
+ }
33
+ /** Unregister an external skill by path. */
34
+ export function removeImportedSkill(path) {
35
+ updateSettings((s) => {
36
+ s.importedSkills = getImportedSkills().filter((e) => e.path !== path);
37
+ });
38
+ }
39
+ /** Returns the conversation mode for a thread, defaulting to "concise". */
40
+ export function getThreadConversationMode(threadId) {
41
+ const map = readSettings().threadConversationModes;
42
+ if (map) {
43
+ const m = map[String(threadId)];
44
+ if (m === "concise" || m === "voice")
45
+ return m;
46
+ }
47
+ return "concise"; // concise is the default
48
+ }
49
+ /** Persists a per-thread conversation mode. */
50
+ export function setThreadConversationMode(threadId, mode) {
51
+ updateSettings((s) => {
52
+ const map = (s.threadConversationModes ?? {});
53
+ map[String(threadId)] = mode;
54
+ s.threadConversationModes = map;
55
+ });
56
+ }
57
+ // ─── Bootstrap message count setting ────────────────────────────────────────
58
+ /** Default number of episodes for the bootstrap "Recent Conversation" section. */
59
+ const DEFAULT_BOOTSTRAP_MESSAGE_COUNT = 50;
60
+ /** Number of recent episodes injected into the bootstrap as "Recent Conversation". */
61
+ export function getBootstrapMessageCount() {
62
+ const v = readSettings().bootstrapMessageCount;
63
+ if (typeof v === "number" && Number.isFinite(v) && v >= 0)
64
+ return v;
65
+ return DEFAULT_BOOTSTRAP_MESSAGE_COUNT;
66
+ }
67
+ export function setBootstrapMessageCount(count) {
68
+ const clamped = Math.max(0, Math.round(count));
69
+ if (!Number.isFinite(clamped))
70
+ return;
71
+ updateSettings((s) => {
72
+ s.bootstrapMessageCount = clamped;
73
+ });
74
+ }
75
+ // ——— Wait timeout setting ———————————————————————————————————————————
76
+ const DEFAULT_WAIT_TIMEOUT_MINUTES = 1440;
77
+ const envWaitTimeoutMinutes = parseInt(process.env.WAIT_TIMEOUT_MINUTES ?? "", 10);
78
+ const ENV_WAIT_TIMEOUT = Number.isFinite(envWaitTimeoutMinutes) ? envWaitTimeoutMinutes : undefined;
79
+ export function getWaitTimeoutMinutes() {
80
+ const v = readSettings().waitTimeoutMinutes;
81
+ if (typeof v === "number" && Number.isFinite(v) && v >= 1)
82
+ return v;
83
+ return ENV_WAIT_TIMEOUT ?? DEFAULT_WAIT_TIMEOUT_MINUTES;
84
+ }
85
+ export function setWaitTimeoutMinutes(minutes) {
86
+ const clamped = Math.max(1, Math.round(minutes));
87
+ if (!Number.isFinite(clamped))
88
+ return;
89
+ updateSettings((s) => {
90
+ s.waitTimeoutMinutes = clamped;
91
+ });
92
+ }
93
+ const PROMPT_LABEL_MAX = 64;
94
+ const PROMPT_TEXT_MAX = 4000;
95
+ /** Coerce untrusted input into a clean list of {label, text} prompts. */
96
+ export function normalizePredefinedPrompts(raw) {
97
+ if (!Array.isArray(raw))
98
+ return [];
99
+ const out = [];
100
+ for (const item of raw) {
101
+ if (!item || typeof item !== "object")
102
+ continue;
103
+ const rec = item;
104
+ const label = typeof rec.label === "string" ? rec.label.trim() : "";
105
+ const text = typeof rec.text === "string" ? rec.text.trim() : "";
106
+ if (!label || !text)
107
+ continue;
108
+ out.push({ label: label.slice(0, PROMPT_LABEL_MAX), text: text.slice(0, PROMPT_TEXT_MAX) });
109
+ }
110
+ return out;
111
+ }
112
+ export function getPredefinedPrompts() {
113
+ return normalizePredefinedPrompts(readSettings().predefinedPrompts);
114
+ }
115
+ export function setPredefinedPrompts(list) {
116
+ updateSettings((s) => {
117
+ s.predefinedPrompts = normalizePredefinedPrompts(list);
118
+ });
119
+ }
120
+ // ─── Guardrails setting ─────────────────────────────────────────────────────
121
+ /** Whether guardrail (Active Decisions) notes are injected into memory briefings. */
122
+ export function getGuardrailsEnabled() {
123
+ const v = readSettings().guardrailsEnabled;
124
+ if (typeof v === "boolean")
125
+ return v;
126
+ return true; // default: enabled
127
+ }
128
+ export function setGuardrailsEnabled(enabled) {
129
+ updateSettings((s) => {
130
+ s.guardrailsEnabled = enabled;
131
+ });
132
+ }
133
+ // ─── Child thread memory source ───────────────────────────────────────────
134
+ /**
135
+ * Read the MEMORY_SOURCE_THREAD_ID env var set by the parent process
136
+ * when spawning a child thread (worker/branch). Returns the parent
137
+ * thread ID for memory briefing, or undefined if not a child thread.
138
+ */
139
+ export function getMemorySourceThreadId() {
140
+ const val = process.env.MEMORY_SOURCE_THREAD_ID;
141
+ if (!val)
142
+ return undefined;
143
+ const n = Number(val);
144
+ return Number.isFinite(n) ? n : undefined;
145
+ }
146
+ //# sourceMappingURL=misc-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc-settings.js","sourceRoot":"","sources":["../../src/config/misc-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Settings persistence core — atomic read/modify/write of settings.json
3
+ * under the user's home directory. All config domain modules go through
4
+ * readSettings/updateSettings; nothing else touches the file directly.
5
+ */
6
+ /** Read and parse the settings file, returning an empty object on any failure. */
7
+ export declare function readSettings(): Record<string, unknown>;
8
+ /** Read settings, apply a mutator, and atomically persist the result. */
9
+ export declare function updateSettings(mutator: (s: Record<string, unknown>) => void): void;
10
+ //# sourceMappingURL=settings-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-store.d.ts","sourceRoot":"","sources":["../../src/config/settings-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4CH,kFAAkF;AAClF,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQtD;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,CAIlF"}