sensorium-mcp 2.17.28 → 3.0.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 (208) hide show
  1. package/Install-Sensorium.ps1 +327 -0
  2. package/README.md +14 -0
  3. package/dist/config.d.ts +16 -1
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +39 -2
  6. package/dist/config.js.map +1 -1
  7. package/dist/daily-session.d.ts +2 -1
  8. package/dist/daily-session.d.ts.map +1 -1
  9. package/dist/daily-session.js +23 -26
  10. package/dist/daily-session.js.map +1 -1
  11. package/dist/dashboard/routes/settings.d.ts +4 -0
  12. package/dist/dashboard/routes/settings.d.ts.map +1 -1
  13. package/dist/dashboard/routes/settings.js +57 -1
  14. package/dist/dashboard/routes/settings.js.map +1 -1
  15. package/dist/dashboard/routes/threads.d.ts +1 -0
  16. package/dist/dashboard/routes/threads.d.ts.map +1 -1
  17. package/dist/dashboard/routes/threads.js +23 -25
  18. package/dist/dashboard/routes/threads.js.map +1 -1
  19. package/dist/dashboard/routes.d.ts.map +1 -1
  20. package/dist/dashboard/routes.js +7 -2
  21. package/dist/dashboard/routes.js.map +1 -1
  22. package/dist/dashboard/spa.html +11 -11
  23. package/dist/data/interfaces.d.ts +36 -0
  24. package/dist/data/interfaces.d.ts.map +1 -0
  25. package/dist/data/interfaces.js +2 -0
  26. package/dist/data/interfaces.js.map +1 -0
  27. package/dist/data/memory/bootstrap.d.ts +36 -16
  28. package/dist/data/memory/bootstrap.d.ts.map +1 -1
  29. package/dist/data/memory/bootstrap.js +71 -217
  30. package/dist/data/memory/bootstrap.js.map +1 -1
  31. package/dist/data/memory/consolidation.d.ts +35 -34
  32. package/dist/data/memory/consolidation.d.ts.map +1 -1
  33. package/dist/data/memory/consolidation.js +43 -554
  34. package/dist/data/memory/consolidation.js.map +1 -1
  35. package/dist/data/memory/migration-runner.d.ts +5 -0
  36. package/dist/data/memory/migration-runner.d.ts.map +1 -0
  37. package/dist/data/memory/migration-runner.js +403 -0
  38. package/dist/data/memory/migration-runner.js.map +1 -0
  39. package/dist/data/memory/reflection.js +1 -1
  40. package/dist/data/memory/schema-ddl.d.ts +4 -0
  41. package/dist/data/memory/schema-ddl.d.ts.map +1 -0
  42. package/dist/data/memory/schema-ddl.js +194 -0
  43. package/dist/data/memory/schema-ddl.js.map +1 -0
  44. package/dist/data/memory/schema-guard.d.ts +3 -0
  45. package/dist/data/memory/schema-guard.d.ts.map +1 -0
  46. package/dist/data/memory/schema-guard.js +184 -0
  47. package/dist/data/memory/schema-guard.js.map +1 -0
  48. package/dist/data/memory/schema.d.ts +2 -5
  49. package/dist/data/memory/schema.d.ts.map +1 -1
  50. package/dist/data/memory/schema.js +6 -834
  51. package/dist/data/memory/schema.js.map +1 -1
  52. package/dist/data/memory/synthesis.js +2 -2
  53. package/dist/data/memory/synthesis.js.map +1 -1
  54. package/dist/data/memory/thread-registry.d.ts +18 -4
  55. package/dist/data/memory/thread-registry.d.ts.map +1 -1
  56. package/dist/data/memory/thread-registry.js +25 -0
  57. package/dist/data/memory/thread-registry.js.map +1 -1
  58. package/dist/data/sent-message.repository.d.ts +12 -0
  59. package/dist/data/sent-message.repository.d.ts.map +1 -0
  60. package/dist/data/sent-message.repository.js +31 -0
  61. package/dist/data/sent-message.repository.js.map +1 -0
  62. package/dist/http-server.d.ts.map +1 -1
  63. package/dist/http-server.js +23 -2
  64. package/dist/http-server.js.map +1 -1
  65. package/dist/index.js +27 -48
  66. package/dist/index.js.map +1 -1
  67. package/dist/logger.d.ts +7 -2
  68. package/dist/logger.d.ts.map +1 -1
  69. package/dist/logger.js +89 -12
  70. package/dist/logger.js.map +1 -1
  71. package/dist/scheduler.d.ts +8 -0
  72. package/dist/scheduler.d.ts.map +1 -1
  73. package/dist/scheduler.js +15 -0
  74. package/dist/scheduler.js.map +1 -1
  75. package/dist/server/factory.d.ts +2 -1
  76. package/dist/server/factory.d.ts.map +1 -1
  77. package/dist/server/factory.js +11 -4
  78. package/dist/server/factory.js.map +1 -1
  79. package/dist/services/agent-spawn.service.d.ts +39 -0
  80. package/dist/services/agent-spawn.service.d.ts.map +1 -0
  81. package/dist/services/agent-spawn.service.js +348 -0
  82. package/dist/services/agent-spawn.service.js.map +1 -0
  83. package/dist/services/background-runner.d.ts +26 -0
  84. package/dist/services/background-runner.d.ts.map +1 -0
  85. package/dist/services/background-runner.js +71 -0
  86. package/dist/services/background-runner.js.map +1 -0
  87. package/dist/services/consolidation.service.d.ts +16 -0
  88. package/dist/services/consolidation.service.d.ts.map +1 -0
  89. package/dist/services/consolidation.service.js +508 -0
  90. package/dist/services/consolidation.service.js.map +1 -0
  91. package/dist/services/dispatcher/broker.d.ts +2 -0
  92. package/dist/services/dispatcher/broker.d.ts.map +1 -1
  93. package/dist/services/dispatcher/broker.js +5 -10
  94. package/dist/services/dispatcher/broker.js.map +1 -1
  95. package/dist/services/dispatcher/index.d.ts +1 -1
  96. package/dist/services/dispatcher/index.d.ts.map +1 -1
  97. package/dist/services/dispatcher/index.js +1 -1
  98. package/dist/services/dispatcher/index.js.map +1 -1
  99. package/dist/services/dispatcher/lock.d.ts.map +1 -1
  100. package/dist/services/dispatcher/lock.js +7 -11
  101. package/dist/services/dispatcher/lock.js.map +1 -1
  102. package/dist/services/maintenance-signal.d.ts +18 -0
  103. package/dist/services/maintenance-signal.d.ts.map +1 -0
  104. package/dist/services/maintenance-signal.js +48 -0
  105. package/dist/services/maintenance-signal.js.map +1 -0
  106. package/dist/services/memory-briefing.service.d.ts +4 -0
  107. package/dist/services/memory-briefing.service.d.ts.map +1 -0
  108. package/dist/services/memory-briefing.service.js +143 -0
  109. package/dist/services/memory-briefing.service.js.map +1 -0
  110. package/dist/services/process.service.d.ts +31 -0
  111. package/dist/services/process.service.d.ts.map +1 -0
  112. package/dist/services/process.service.js +100 -0
  113. package/dist/services/process.service.js.map +1 -0
  114. package/dist/services/thread-health.service.d.ts +18 -0
  115. package/dist/services/thread-health.service.d.ts.map +1 -0
  116. package/dist/services/thread-health.service.js +118 -0
  117. package/dist/services/thread-health.service.js.map +1 -0
  118. package/dist/services/thread-lifecycle.service.d.ts +52 -0
  119. package/dist/services/thread-lifecycle.service.d.ts.map +1 -0
  120. package/dist/services/thread-lifecycle.service.js +174 -0
  121. package/dist/services/thread-lifecycle.service.js.map +1 -0
  122. package/dist/services/topic.service.d.ts +25 -0
  123. package/dist/services/topic.service.d.ts.map +1 -0
  124. package/dist/services/topic.service.js +65 -0
  125. package/dist/services/topic.service.js.map +1 -0
  126. package/dist/services/worker-cleanup.service.d.ts +8 -0
  127. package/dist/services/worker-cleanup.service.d.ts.map +1 -0
  128. package/dist/services/worker-cleanup.service.js +82 -0
  129. package/dist/services/worker-cleanup.service.js.map +1 -0
  130. package/dist/sessions.d.ts +14 -0
  131. package/dist/sessions.d.ts.map +1 -1
  132. package/dist/sessions.js +55 -0
  133. package/dist/sessions.js.map +1 -1
  134. package/dist/telegram.d.ts +13 -6
  135. package/dist/telegram.d.ts.map +1 -1
  136. package/dist/telegram.js +43 -14
  137. package/dist/telegram.js.map +1 -1
  138. package/dist/tools/delegate-tool.d.ts +4 -0
  139. package/dist/tools/delegate-tool.d.ts.map +1 -1
  140. package/dist/tools/delegate-tool.js +48 -109
  141. package/dist/tools/delegate-tool.js.map +1 -1
  142. package/dist/tools/memory-tools.d.ts.map +1 -1
  143. package/dist/tools/memory-tools.js +1 -1
  144. package/dist/tools/memory-tools.js.map +1 -1
  145. package/dist/tools/shared-agent-utils.d.ts +9 -1
  146. package/dist/tools/shared-agent-utils.d.ts.map +1 -1
  147. package/dist/tools/shared-agent-utils.js +21 -38
  148. package/dist/tools/shared-agent-utils.js.map +1 -1
  149. package/dist/tools/start-session-tool.d.ts +2 -0
  150. package/dist/tools/start-session-tool.d.ts.map +1 -1
  151. package/dist/tools/start-session-tool.js +66 -106
  152. package/dist/tools/start-session-tool.js.map +1 -1
  153. package/dist/tools/thread-lifecycle.d.ts +5 -127
  154. package/dist/tools/thread-lifecycle.d.ts.map +1 -1
  155. package/dist/tools/thread-lifecycle.js +5 -1167
  156. package/dist/tools/thread-lifecycle.js.map +1 -1
  157. package/dist/tools/utility-tools.js +5 -2
  158. package/dist/tools/utility-tools.js.map +1 -1
  159. package/dist/tools/wait/drive-handler.d.ts +0 -1
  160. package/dist/tools/wait/drive-handler.d.ts.map +1 -1
  161. package/dist/tools/wait/drive-handler.js +5 -22
  162. package/dist/tools/wait/drive-handler.js.map +1 -1
  163. package/dist/tools/wait/message-delivery.js +1 -1
  164. package/dist/tools/wait/message-delivery.js.map +1 -1
  165. package/dist/tools/wait/message-processing.d.ts.map +1 -1
  166. package/dist/tools/wait/message-processing.js +9 -8
  167. package/dist/tools/wait/message-processing.js.map +1 -1
  168. package/dist/tools/wait/poll-loop.d.ts +2 -0
  169. package/dist/tools/wait/poll-loop.d.ts.map +1 -1
  170. package/dist/tools/wait/poll-loop.js +27 -29
  171. package/dist/tools/wait/poll-loop.js.map +1 -1
  172. package/dist/tools/wait/task-handler.d.ts +0 -3
  173. package/dist/tools/wait/task-handler.d.ts.map +1 -1
  174. package/dist/tools/wait/task-handler.js +3 -2
  175. package/dist/tools/wait/task-handler.js.map +1 -1
  176. package/dist/types.d.ts +0 -1
  177. package/dist/types.d.ts.map +1 -1
  178. package/package.json +4 -8
  179. package/supervisor/config.go +182 -69
  180. package/supervisor/config_test.go +78 -0
  181. package/supervisor/go.mod +12 -0
  182. package/supervisor/go.sum +20 -0
  183. package/supervisor/health.go +56 -6
  184. package/supervisor/health_test.go +29 -0
  185. package/supervisor/keeper.go +15 -10
  186. package/supervisor/log.go +109 -28
  187. package/supervisor/log_test.go +86 -6
  188. package/supervisor/main.go +150 -19
  189. package/supervisor/main_test.go +130 -0
  190. package/supervisor/process.go +47 -4
  191. package/supervisor/process_test.go +14 -0
  192. package/supervisor/secrets.go +95 -0
  193. package/supervisor/secrets_securevault_test.go +98 -0
  194. package/supervisor/secrets_test.go +119 -0
  195. package/supervisor/self_update.go +282 -0
  196. package/supervisor/self_update_test.go +177 -0
  197. package/supervisor/service_restart_stub.go +9 -0
  198. package/supervisor/service_restart_windows.go +63 -0
  199. package/supervisor/service_stub.go +15 -0
  200. package/supervisor/service_windows.go +216 -0
  201. package/supervisor/update_state.go +264 -0
  202. package/supervisor/update_state_test.go +306 -0
  203. package/supervisor/updater.go +311 -10
  204. package/supervisor/updater_test.go +64 -0
  205. package/scripts/install-supervisor.ps1 +0 -67
  206. package/scripts/install-supervisor.sh +0 -43
  207. package/scripts/start-supervisor.ps1 +0 -46
  208. package/scripts/start-supervisor.sh +0 -20
@@ -1 +1 @@
1
- {"version":3,"file":"poll-loop.js","sourceRoot":"","sources":["../../../src/tools/wait/poll-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"poll-loop.js","sourceRoot":"","sources":["../../../src/tools/wait/poll-loop.ts"],"names":[],"mappings":"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"}
@@ -11,9 +11,6 @@ interface TaskContext {
11
11
  sessionStartedAt: number;
12
12
  };
13
13
  generateDmnReflection: (threadId: number) => string;
14
- config: {
15
- AUTONOMOUS_MODE: boolean;
16
- };
17
14
  }
18
15
  /**
19
16
  * Check whether any scheduled task is due for the given thread.
@@ -1 +1 @@
1
- {"version":3,"file":"task-handler.d.ts","sourceRoot":"","sources":["../../../src/tools/wait/task-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAMjD,UAAU,WAAW;IACnB,KAAK,EAAE;QACL,qBAAqB,EAAE,MAAM,CAAC;QAC9B,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACpD,MAAM,EAAE;QACN,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;CACH;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,WAAW,EAChB,iBAAiB,EAAE,MAAM,GACxB,UAAU,GAAG,IAAI,CAqBnB"}
1
+ {"version":3,"file":"task-handler.d.ts","sourceRoot":"","sources":["../../../src/tools/wait/task-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAMjD,UAAU,WAAW;IACnB,KAAK,EAAE;QACL,qBAAqB,EAAE,MAAM,CAAC;QAC9B,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CACrD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,WAAW,EAChB,iBAAiB,EAAE,MAAM,GACxB,UAAU,GAAG,IAAI,CAqBnB"}
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { checkDueTasks } from "../../scheduler.js";
8
8
  import { getReminders } from "../../response-builders.js";
9
+ import { getEffectiveAutonomousMode } from "../../config.js";
9
10
  // ---------------------------------------------------------------------------
10
11
  // Handler
11
12
  // ---------------------------------------------------------------------------
@@ -19,7 +20,7 @@ import { getReminders } from "../../response-builders.js";
19
20
  * check (after the loop exits).
20
21
  */
21
22
  export function checkForDueTasks(ctx, effectiveThreadId) {
22
- const { state, config } = ctx;
23
+ const { state } = ctx;
23
24
  const dueTask = checkDueTasks(effectiveThreadId, state.lastOperatorMessageAt, false);
24
25
  if (!dueTask)
25
26
  return null;
@@ -33,7 +34,7 @@ export function checkForDueTasks(ctx, effectiveThreadId) {
33
34
  content: [
34
35
  {
35
36
  type: "text",
36
- text: taskPrompt + getReminders(effectiveThreadId, state.sessionStartedAt, config.AUTONOMOUS_MODE),
37
+ text: taskPrompt + getReminders(effectiveThreadId, state.sessionStartedAt, getEffectiveAutonomousMode(effectiveThreadId)),
37
38
  },
38
39
  ],
39
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"task-handler.js","sourceRoot":"","sources":["../../../src/tools/wait/task-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAkB1D,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAgB,EAChB,iBAAyB;IAEzB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAE9B,MAAM,OAAO,GAAG,aAAa,CAAC,iBAAiB,EAAE,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IACrF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,yDAAyD;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS;QAC7C,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,iBAAiB,CAAC;QAC9C,CAAC,CAAC,8BAA8B,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS;YACzD,oKAAoK;YACpK,gBAAgB,OAAO,CAAC,MAAM,EAAE,CAAC;IAErC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,eAAe,CAAC;aACnG;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"task-handler.js","sourceRoot":"","sources":["../../../src/tools/wait/task-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAe7D,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAgB,EAChB,iBAAyB;IAEzB,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAEtB,MAAM,OAAO,GAAG,aAAa,CAAC,iBAAiB,EAAE,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IACrF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,yDAAyD;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS;QAC7C,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,iBAAiB,CAAC;QAC9C,CAAC,CAAC,8BAA8B,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS;YACzD,oKAAoK;YACpK,gBAAgB,OAAO,CAAC,MAAM,EAAE,CAAC;IAErC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;aAC1H;SACF;KACF,CAAC;AACJ,CAAC"}
package/dist/types.d.ts CHANGED
@@ -15,7 +15,6 @@ export interface AppConfig {
15
15
  DMN_ACTIVATION_HOURS: number;
16
16
  FILES_DIR: string;
17
17
  PKG_VERSION: string;
18
- AUTONOMOUS_MODE: boolean;
19
18
  }
20
19
  export type CreateMcpServerFn = (getMcpSessionId?: () => string | undefined, closeTransport?: () => void) => Server;
21
20
  export type TextBlock = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAIxE,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID,MAAM,MAAM,iBAAiB,GAAG,CAC9B,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,EAC1C,cAAc,CAAC,EAAE,MAAM,IAAI,KACxB,MAAM,CAAC;AAIZ,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACvD,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAIxE,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,MAAM,iBAAiB,GAAG,CAC9B,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,EAC1C,cAAc,CAAC,EAAE,MAAM,IAAI,KACxB,MAAM,CAAC;AAIZ,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACvD,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sensorium-mcp",
3
- "version": "2.17.28",
3
+ "version": "3.0.0",
4
4
  "description": "MCP server for remote control of AI assistants via Telegram",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -10,18 +10,14 @@
10
10
  "dist",
11
11
  "templates",
12
12
  "supervisor",
13
- "scripts/install-supervisor.ps1",
14
- "scripts/install-supervisor.sh",
15
- "scripts/start-supervisor.ps1",
16
- "scripts/start-supervisor.sh"
13
+ "Install-Sensorium.ps1"
17
14
  ],
18
15
  "scripts": {
19
16
  "build": "cd src/dashboard/vue && npx vite build && cd ../../.. && node -e \"const fs=require('fs');if(fs.existsSync('dist/dashboard/index.html'))fs.renameSync('dist/dashboard/index.html','dist/dashboard/spa.html')\" && tsc",
20
17
  "start": "node dist/index.js",
21
18
  "dev": "tsx src/index.ts",
22
- "supervisor:install": "pwsh scripts/install-supervisor.ps1",
23
- "supervisor:start": "pwsh scripts/start-supervisor.ps1",
24
- "supervisor:dev": "pwsh scripts/start-supervisor.ps1 -Mode development",
19
+ "supervisor:install": "pwsh Install-Sensorium.ps1",
20
+ "supervisor:start": "node dist/index.js --supervisor",
25
21
  "prepublishOnly": "npm run build",
26
22
  "test": "echo \"No tests defined\" && exit 0"
27
23
  },
@@ -1,43 +1,53 @@
1
1
  package main
2
2
 
3
3
  import (
4
+ "errors"
4
5
  "fmt"
5
6
  "os"
6
7
  "path/filepath"
8
+ "regexp"
7
9
  "strconv"
10
+ "strings"
8
11
  "time"
12
+
13
+ sv "github.com/andriyshevchenko/SecureVault/securevault-go"
9
14
  )
10
15
 
11
16
  // Config holds all supervisor configuration, sourced from environment variables
12
17
  // with sensible defaults matching the TypeScript watcher-service.ts CONFIG object.
13
18
  type Config struct {
14
19
  // Watcher
15
- Mode string
16
- PollAtHour int
17
- PollInterval time.Duration
18
- GracePeriod time.Duration
19
- MinUptime time.Duration
20
- MCPStartCommand string
21
- DataDir string
22
- MCPHttpPort int
23
- MCPHttpSecret string
24
- TelegramToken string
25
- TelegramChatID string
26
- HealthFailThresh int
20
+ Mode string
21
+ PollAtHour int
22
+ PollInterval time.Duration
23
+ GracePeriod time.Duration
24
+ MinUptime time.Duration
25
+ MCPStartCommand string
26
+ HostMode string
27
+ DataDir string
28
+ KeyringService string
29
+ SecureVaultProfile string
30
+ SecureVaultBaseDir string
31
+ MCPHttpPort int
32
+ MCPHttpSecret string
33
+ TelegramToken string
34
+ TelegramChatID string
35
+ HealthFailThresh int
36
+ ResolvedProfileEnv map[string]string
27
37
 
28
38
  // Keeper defaults
29
- KeeperBaseBackoff time.Duration
30
- KeeperMaxBackoff time.Duration
39
+ KeeperBaseBackoff time.Duration
40
+ KeeperMaxBackoff time.Duration
31
41
  KeeperHealthCheckInterval time.Duration
32
- KeeperMaxRetries int
33
- KeeperCooldown time.Duration
34
- KeeperReadyPollInterval time.Duration
35
- KeeperReadyTimeout time.Duration
36
- FastExitThreshold time.Duration
37
- FastExitMaxCount int
38
- FastExitBaseCooldown time.Duration
39
- FastExitMaxCooldown time.Duration
40
- StuckThreshold time.Duration
42
+ KeeperMaxRetries int
43
+ KeeperCooldown time.Duration
44
+ KeeperReadyPollInterval time.Duration
45
+ KeeperReadyTimeout time.Duration
46
+ FastExitThreshold time.Duration
47
+ FastExitMaxCount int
48
+ FastExitBaseCooldown time.Duration
49
+ FastExitMaxCooldown time.Duration
50
+ StuckThreshold time.Duration
41
51
 
42
52
  // Derived paths
43
53
  Paths Paths
@@ -45,64 +55,94 @@ type Config struct {
45
55
 
46
56
  // Paths holds all filesystem paths derived from DataDir.
47
57
  type Paths struct {
48
- MaintenanceFlag string
49
- VersionFile string
50
- LastActivity string
51
- ServerPID string
52
- WatcherLock string
53
- WatcherLog string
54
- PIDsDir string
55
- HeartbeatsDir string
58
+ BinaryDir string
59
+ MaintenanceFlag string
60
+ VersionFile string
61
+ SupervisorVersion string
62
+ UpdateState string
63
+ UpdateApplyLock string
64
+ PendingBinary string
65
+ PendingVersion string
66
+ LastActivity string
67
+ MCPStderrLog string
68
+ ServerPID string
69
+ WatcherLock string
70
+ WatcherLog string
71
+ PIDsDir string
72
+ HeartbeatsDir string
56
73
  }
57
74
 
58
- func LoadConfig() Config {
75
+ func LoadConfig(runningAsService bool) Config {
59
76
  dataDir := filepath.Join(homeDir(), ".remote-copilot-mcp")
60
77
 
61
78
  mode := envOr("WATCHER_MODE", "development")
62
- graceDef := "300"
79
+ graceDef := 300
63
80
  if mode == "development" {
64
- graceDef = "10"
81
+ graceDef = 10
65
82
  }
66
83
 
67
84
  c := Config{
68
- Mode: mode,
69
- PollAtHour: envInt("WATCHER_POLL_HOUR", 4),
70
- PollInterval: time.Duration(envInt("WATCHER_POLL_INTERVAL", 60)) * time.Second,
71
- GracePeriod: time.Duration(envInt("WATCHER_GRACE_PERIOD", safeAtoi(graceDef))) * time.Second,
72
- MinUptime: 600 * time.Second,
73
- MCPStartCommand: envOr("MCP_START_COMMAND", "npx -y sensorium-mcp@latest"),
74
- DataDir: dataDir,
75
- MCPHttpPort: envInt("MCP_HTTP_PORT", 0),
76
- MCPHttpSecret: os.Getenv("MCP_HTTP_SECRET"),
77
- TelegramToken: os.Getenv("TELEGRAM_TOKEN"),
78
- TelegramChatID: os.Getenv("TELEGRAM_CHAT_ID"),
79
- HealthFailThresh: 3,
80
-
81
- KeeperBaseBackoff: 5 * time.Second,
82
- KeeperMaxBackoff: 5 * time.Minute,
85
+ Mode: mode,
86
+ PollAtHour: envInt("WATCHER_POLL_HOUR", 4),
87
+ PollInterval: time.Duration(envInt("WATCHER_POLL_INTERVAL", 60)) * time.Second,
88
+ GracePeriod: time.Duration(envInt("WATCHER_GRACE_PERIOD", graceDef)) * time.Second,
89
+ MinUptime: 600 * time.Second,
90
+ MCPStartCommand: envOr("MCP_START_COMMAND", "npx -y sensorium-mcp@latest"),
91
+ HostMode: parseHostMode(os.Getenv("HOST_MODE"), runningAsService),
92
+ DataDir: dataDir,
93
+ KeyringService: envOr("SUPERVISOR_KEYRING_SERVICE", defaultKeyringService),
94
+ SecureVaultProfile: os.Getenv("SUPERVISOR_SECUREVAULT_PROFILE"),
95
+ SecureVaultBaseDir: os.Getenv("SUPERVISOR_SECUREVAULT_BASEDIR"),
96
+ HealthFailThresh: 3,
97
+
98
+ KeeperBaseBackoff: 5 * time.Second,
99
+ KeeperMaxBackoff: 5 * time.Minute,
83
100
  KeeperHealthCheckInterval: 2 * time.Minute,
84
- KeeperMaxRetries: 5,
85
- KeeperCooldown: 5 * time.Minute,
86
- KeeperReadyPollInterval: 3 * time.Second,
87
- KeeperReadyTimeout: 2 * time.Minute,
88
- FastExitThreshold: 60 * time.Second,
89
- FastExitMaxCount: 3,
90
- FastExitBaseCooldown: 10 * time.Minute,
91
- FastExitMaxCooldown: 4 * time.Hour,
92
- StuckThreshold: 10 * time.Minute,
101
+ KeeperMaxRetries: 5,
102
+ KeeperCooldown: 5 * time.Minute,
103
+ KeeperReadyPollInterval: 3 * time.Second,
104
+ KeeperReadyTimeout: 2 * time.Minute,
105
+ FastExitThreshold: 60 * time.Second,
106
+ FastExitMaxCount: 3,
107
+ FastExitBaseCooldown: 10 * time.Minute,
108
+ FastExitMaxCooldown: 4 * time.Hour,
109
+ StuckThreshold: 10 * time.Minute,
93
110
 
94
111
  Paths: Paths{
95
- MaintenanceFlag: filepath.Join(dataDir, "maintenance.flag"),
96
- VersionFile: filepath.Join(dataDir, "current-version.txt"),
97
- LastActivity: filepath.Join(dataDir, "last-activity.txt"),
98
- ServerPID: filepath.Join(dataDir, "server.pid"),
99
- WatcherLock: filepath.Join(dataDir, "watcher.lock"),
100
- WatcherLog: filepath.Join(dataDir, "watcher.log"),
101
- PIDsDir: filepath.Join(dataDir, "pids"),
102
- HeartbeatsDir: filepath.Join(dataDir, "heartbeats"),
112
+ BinaryDir: filepath.Join(dataDir, "bin"),
113
+ MaintenanceFlag: filepath.Join(dataDir, "maintenance.flag"),
114
+ VersionFile: filepath.Join(dataDir, "current-version.txt"),
115
+ SupervisorVersion: filepath.Join(dataDir, "supervisor-version.txt"),
116
+ UpdateState: filepath.Join(dataDir, "update-state.json"),
117
+ UpdateApplyLock: filepath.Join(dataDir, "update-apply.lock"),
118
+ PendingBinary: filepath.Join(dataDir, "bin", "sensorium-supervisor.new.exe"),
119
+ PendingVersion: filepath.Join(dataDir, "bin", "sensorium-supervisor.new.exe.version"),
120
+ LastActivity: filepath.Join(dataDir, "last-activity.txt"),
121
+ MCPStderrLog: filepath.Join(dataDir, "mcp-stderr.log"),
122
+ ServerPID: filepath.Join(dataDir, "server.pid"),
123
+ WatcherLock: filepath.Join(dataDir, "watcher.lock"),
124
+ WatcherLog: filepath.Join(dataDir, "watcher.log"),
125
+ PIDsDir: filepath.Join(dataDir, "pids"),
126
+ HeartbeatsDir: filepath.Join(dataDir, "heartbeats"),
103
127
  },
104
128
  }
105
129
 
130
+ // Use the full chain (env → SecureVault → keyring) when a profile is configured;
131
+ // otherwise fall back to the plain env → keyring path.
132
+ if c.SecureVaultProfile != "" {
133
+ c.ResolvedProfileEnv = resolveProfileEnv(c.SecureVaultProfile, c.SecureVaultBaseDir)
134
+ c.MCPHttpPort = resolveIntChain("MCP_HTTP_PORT", c.SecureVaultProfile, c.SecureVaultBaseDir, c.KeyringService, 0)
135
+ c.MCPHttpSecret = resolveStringChain("MCP_HTTP_SECRET", c.SecureVaultProfile, c.SecureVaultBaseDir, c.KeyringService)
136
+ c.TelegramToken = resolveStringChain("TELEGRAM_TOKEN", c.SecureVaultProfile, c.SecureVaultBaseDir, c.KeyringService)
137
+ c.TelegramChatID = resolveStringChain("TELEGRAM_CHAT_ID", c.SecureVaultProfile, c.SecureVaultBaseDir, c.KeyringService)
138
+ } else {
139
+ c.ResolvedProfileEnv = map[string]string{}
140
+ c.MCPHttpPort = resolveIntWithKeyring("MCP_HTTP_PORT", c.KeyringService, 0)
141
+ c.MCPHttpSecret = resolveSecretWithKeyring("MCP_HTTP_SECRET", c.KeyringService)
142
+ c.TelegramToken = resolveSecretWithKeyring("TELEGRAM_TOKEN", c.KeyringService)
143
+ c.TelegramChatID = resolveSecretWithKeyring("TELEGRAM_CHAT_ID", c.KeyringService)
144
+ }
145
+
106
146
  return c
107
147
  }
108
148
 
@@ -134,7 +174,80 @@ func envInt(key string, fallback int) int {
134
174
  return v
135
175
  }
136
176
 
137
- func safeAtoi(s string) int {
138
- v, _ := strconv.Atoi(s)
139
- return v
177
+ func parseHostMode(value string, runningAsService bool) string {
178
+ normalized := strings.ToLower(strings.TrimSpace(value))
179
+ if runningAsService {
180
+ if normalized == "" || normalized == "service" {
181
+ return "service"
182
+ }
183
+ if normalized == "task" {
184
+ fmt.Fprintf(os.Stderr, "WARN: HOST_MODE=%q ignored because process is running as a Windows service; forcing \"service\"\n", value)
185
+ } else {
186
+ fmt.Fprintf(os.Stderr, "WARN: invalid HOST_MODE=%q ignored because process is running as a Windows service; forcing \"service\" (allowed: task|service)\n", value)
187
+ }
188
+ return "service"
189
+ }
190
+
191
+ if normalized == "" {
192
+ return "task"
193
+ }
194
+
195
+ switch normalized {
196
+ case "task", "service":
197
+ return normalized
198
+ default:
199
+ fmt.Fprintf(os.Stderr, "WARN: invalid HOST_MODE=%q (allowed: task|service); using default \"task\"\n", value)
200
+ return "task"
201
+ }
202
+ }
203
+
204
+ func resolveProfileEnv(profileName, baseDir string) map[string]string {
205
+ resolved := map[string]string{}
206
+ if strings.TrimSpace(profileName) == "" {
207
+ return resolved
208
+ }
209
+
210
+ store := sv.NewStore(baseDir)
211
+ vals, err := store.ResolveProfile(profileName)
212
+ if err != nil {
213
+ if errors.Is(err, sv.ErrNotFound) || errors.Is(err, sv.ErrUnsupportedPlatform) {
214
+ return resolved
215
+ }
216
+ fmt.Fprintf(os.Stderr, "WARN: failed to resolve SecureVault profile %q: %v\n", profileName, err)
217
+ return resolved
218
+ }
219
+
220
+ for k, v := range vals {
221
+ if !isAllowedProfileEnvKey(k) {
222
+ fmt.Fprintf(os.Stderr, "WARN: skipping unsafe profile env key %q\n", k)
223
+ continue
224
+ }
225
+ if envVal := os.Getenv(k); envVal != "" {
226
+ resolved[k] = envVal
227
+ continue
228
+ }
229
+ resolved[k] = v
230
+ }
231
+
232
+ return resolved
233
+ }
234
+
235
+ var profileEnvKeyPattern = regexp.MustCompile(`^[A-Z_][A-Z0-9_]*$`)
236
+
237
+ var deniedProfileEnvKeys = map[string]struct{}{
238
+ "PATH": {},
239
+ "PATHEXT": {},
240
+ "COMSPEC": {},
241
+ "SYSTEMROOT": {},
242
+ "WINDIR": {},
243
+ "NODE_OPTIONS": {},
244
+ }
245
+
246
+ func isAllowedProfileEnvKey(key string) bool {
247
+ trimmed := strings.TrimSpace(key)
248
+ if !profileEnvKeyPattern.MatchString(trimmed) {
249
+ return false
250
+ }
251
+ _, denied := deniedProfileEnvKeys[trimmed]
252
+ return !denied
140
253
  }
@@ -0,0 +1,78 @@
1
+ package main
2
+
3
+ import "testing"
4
+
5
+ func TestParseHostMode_DefaultsAndValidation(t *testing.T) {
6
+ tests := []struct {
7
+ name string
8
+ value string
9
+ runningAsService bool
10
+ want string
11
+ }{
12
+ {
13
+ name: "empty defaults to service when running as service",
14
+ value: "",
15
+ runningAsService: true,
16
+ want: "service",
17
+ },
18
+ {
19
+ name: "empty defaults to task when not running as service",
20
+ value: "",
21
+ runningAsService: false,
22
+ want: "task",
23
+ },
24
+ {
25
+ name: "invalid falls back to service default for service mode",
26
+ value: "invalid",
27
+ runningAsService: true,
28
+ want: "service",
29
+ },
30
+ {
31
+ name: "invalid falls back to task default for task mode",
32
+ value: "invalid",
33
+ runningAsService: false,
34
+ want: "task",
35
+ },
36
+ {
37
+ name: "valid task accepted",
38
+ value: "task",
39
+ runningAsService: true,
40
+ want: "service",
41
+ },
42
+ {
43
+ name: "valid service accepted",
44
+ value: "service",
45
+ runningAsService: false,
46
+ want: "service",
47
+ },
48
+ }
49
+
50
+ for _, tc := range tests {
51
+ t.Run(tc.name, func(t *testing.T) {
52
+ got := parseHostMode(tc.value, tc.runningAsService)
53
+ if got != tc.want {
54
+ t.Fatalf("parseHostMode(%q, runningAsService=%v) = %q, want %q", tc.value, tc.runningAsService, got, tc.want)
55
+ }
56
+ })
57
+ }
58
+ }
59
+
60
+ func TestIsAllowedProfileEnvKey(t *testing.T) {
61
+ tests := []struct {
62
+ key string
63
+ want bool
64
+ }{
65
+ {key: "TELEGRAM_TOKEN", want: true},
66
+ {key: "MCP_HTTP_PORT", want: true},
67
+ {key: "PATH", want: false},
68
+ {key: "NODE_OPTIONS", want: false},
69
+ {key: "bad-key", want: false},
70
+ {key: "1BAD", want: false},
71
+ }
72
+
73
+ for _, tc := range tests {
74
+ if got := isAllowedProfileEnvKey(tc.key); got != tc.want {
75
+ t.Fatalf("isAllowedProfileEnvKey(%q) = %v, want %v", tc.key, got, tc.want)
76
+ }
77
+ }
78
+ }
package/supervisor/go.mod CHANGED
@@ -1,3 +1,15 @@
1
1
  module github.com/andriyshevchenko/sensorium-supervisor
2
2
 
3
3
  go 1.22
4
+
5
+ require (
6
+ github.com/zalando/go-keyring v0.2.8
7
+ golang.org/x/sys v0.30.0
8
+ )
9
+
10
+ require github.com/andriyshevchenko/SecureVault/securevault-go v0.1.2
11
+
12
+ require (
13
+ github.com/danieljoos/wincred v1.2.3 // indirect
14
+ github.com/godbus/dbus/v5 v5.2.2 // indirect
15
+ )
@@ -0,0 +1,20 @@
1
+ github.com/andriyshevchenko/SecureVault/securevault-go v0.1.2 h1:4PyakSOgHmBnN0Oqapoh3/Ik92fvmR8R2ksE5qCXXOE=
2
+ github.com/andriyshevchenko/SecureVault/securevault-go v0.1.2/go.mod h1:oEb5uTPCvex+efofFySxxbe55z13LbAO3JSaxcjVq2Q=
3
+ github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ=
4
+ github.com/danieljoos/wincred v1.2.3/go.mod h1:6qqX0WNrS4RzPZ1tnroDzq9kY3fu1KwE7MRLQK4X0bs=
5
+ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
6
+ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
7
+ github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ=
8
+ github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c=
9
+ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
10
+ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
11
+ github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
12
+ github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
13
+ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
14
+ github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
15
+ github.com/zalando/go-keyring v0.2.8 h1:6sD/Ucpl7jNq10rM2pgqTs0sZ9V3qMrqfIIy5YPccHs=
16
+ github.com/zalando/go-keyring v0.2.8/go.mod h1:tsMo+VpRq5NGyKfxoBVjCuMrG47yj8cmakZDO5QGii0=
17
+ golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
18
+ golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
19
+ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
20
+ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
@@ -98,15 +98,57 @@ func (m *MCPClient) WaitForReady(ctx context.Context, pollInterval, timeout time
98
98
 
99
99
  // GetRootThreads fetches the list of root threads from the server.
100
100
  func (m *MCPClient) GetRootThreads(ctx context.Context) ([]map[string]any, error) {
101
+ return m.fetchThreadList(ctx, "/api/threads/roots")
102
+ }
103
+
104
+ // GetKeepAliveThreads fetches all threads with keepAlive=true (excluding worker threads).
105
+ func (m *MCPClient) GetKeepAliveThreads(ctx context.Context) ([]map[string]any, error) {
106
+ threads, err := m.fetchThreadList(ctx, "/api/threads/keepalive")
107
+ if err == nil {
108
+ return threads, nil
109
+ }
110
+
111
+ // Backward compatibility: older MCP builds may not expose /api/threads/keepalive.
112
+ if strings.Contains(err.Error(), "GET /api/threads/keepalive: 404") {
113
+ if m.Log != nil {
114
+ m.Log.Warn("/api/threads/keepalive unavailable (404); falling back to /api/threads with client-side filtering")
115
+ }
116
+ allThreads, err2 := m.fetchThreadList(ctx, "/api/threads")
117
+ if err2 != nil {
118
+ return nil, err2
119
+ }
120
+ return filterKeepAliveThreads(allThreads), nil
121
+ }
122
+
123
+ return nil, err
124
+ }
125
+
126
+ func filterKeepAliveThreads(threads []map[string]any) []map[string]any {
127
+ result := make([]map[string]any, 0, len(threads))
128
+ for _, t := range threads {
129
+ keepAlive, _ := t["keepAlive"].(bool)
130
+ if !keepAlive {
131
+ continue
132
+ }
133
+ if typ, _ := t["type"].(string); typ == "worker" {
134
+ continue
135
+ }
136
+ result = append(result, t)
137
+ }
138
+ return result
139
+ }
140
+
141
+ // fetchThreadList is a shared helper for thread-list endpoints.
142
+ func (m *MCPClient) fetchThreadList(ctx context.Context, path string) ([]map[string]any, error) {
101
143
  ctx2, cancel := context.WithTimeout(ctx, 5*time.Second)
102
144
  defer cancel()
103
- resp, err := m.doReq(ctx2, "GET", "/api/threads/roots", nil)
145
+ resp, err := m.doReq(ctx2, "GET", path, nil)
104
146
  if err != nil {
105
147
  return nil, err
106
148
  }
107
149
  defer resp.Body.Close()
108
150
  if resp.StatusCode != 200 {
109
- return nil, fmt.Errorf("GET /api/threads/roots: %d", resp.StatusCode)
151
+ return nil, fmt.Errorf("GET %s: %d", path, resp.StatusCode)
110
152
  }
111
153
  body, err := io.ReadAll(resp.Body)
112
154
  if err != nil {
@@ -122,7 +164,7 @@ func (m *MCPClient) GetRootThreads(ctx context.Context) ([]map[string]any, error
122
164
  Threads []map[string]any `json:"threads"`
123
165
  }
124
166
  if err := json.Unmarshal(body, &wrapped); err != nil {
125
- return nil, fmt.Errorf("cannot parse /api/threads/roots response: %w", err)
167
+ return nil, fmt.Errorf("cannot parse %s response: %w", path, err)
126
168
  }
127
169
  return wrapped.Threads, nil
128
170
  }
@@ -145,7 +187,9 @@ func (m *MCPClient) IsThreadRunning(ctx context.Context, threadID int) bool {
145
187
  }
146
188
  return false
147
189
  }
148
- var result struct{ Running bool `json:"running"` }
190
+ var result struct {
191
+ Running bool `json:"running"`
192
+ }
149
193
  if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
150
194
  if m.Log != nil {
151
195
  m.Log.Debug("IsThreadRunning(%d): decode error: %v", threadID, err)
@@ -272,7 +316,10 @@ func (m *MCPClient) OpenMCPSession(ctx context.Context) (string, error) {
272
316
  "jsonrpc": "2.0",
273
317
  "method": "notifications/initialized",
274
318
  }
275
- notifReq, _ := http.NewRequestWithContext(ctx2, "POST", m.BaseURL+"/mcp", nil)
319
+ notifReq, err := http.NewRequestWithContext(ctx2, "POST", m.BaseURL+"/mcp", nil)
320
+ if err != nil {
321
+ return sessionID, nil // session created, notification failed — non-fatal
322
+ }
276
323
  data, err := json.Marshal(notifPayload)
277
324
  if err != nil {
278
325
  return sessionID, nil // session created, notification failed — non-fatal
@@ -297,7 +344,10 @@ func (m *MCPClient) CloseMCPSession(ctx context.Context, sessionID string) {
297
344
  }
298
345
  ctx2, cancel := context.WithTimeout(ctx, 5*time.Second)
299
346
  defer cancel()
300
- req, _ := http.NewRequestWithContext(ctx2, "DELETE", m.BaseURL+"/mcp", nil)
347
+ req, err := http.NewRequestWithContext(ctx2, "DELETE", m.BaseURL+"/mcp", nil)
348
+ if err != nil {
349
+ return
350
+ }
301
351
  for k, v := range m.authHeaders() {
302
352
  req.Header.Set(k, v)
303
353
  }