@jungjaehoon/mama-os 0.32.0 → 0.32.2

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 (327) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +15 -13
  3. package/dist/agent/agent-loop.d.ts +10 -1
  4. package/dist/agent/agent-loop.d.ts.map +1 -1
  5. package/dist/agent/agent-loop.js +221 -103
  6. package/dist/agent/agent-loop.js.map +1 -1
  7. package/dist/agent/backend-model-policy.d.ts +9 -0
  8. package/dist/agent/backend-model-policy.d.ts.map +1 -0
  9. package/dist/agent/backend-model-policy.js +21 -0
  10. package/dist/agent/backend-model-policy.js.map +1 -0
  11. package/dist/agent/backend-model-runner-factory.d.ts +27 -0
  12. package/dist/agent/backend-model-runner-factory.d.ts.map +1 -0
  13. package/dist/agent/backend-model-runner-factory.js +85 -0
  14. package/dist/agent/backend-model-runner-factory.js.map +1 -0
  15. package/dist/agent/cline-cli-adapter.d.ts +124 -0
  16. package/dist/agent/cline-cli-adapter.d.ts.map +1 -0
  17. package/dist/agent/cline-cli-adapter.js +1040 -0
  18. package/dist/agent/cline-cli-adapter.js.map +1 -0
  19. package/dist/agent/cline-native-tool-policy.d.ts +3 -0
  20. package/dist/agent/cline-native-tool-policy.d.ts.map +1 -0
  21. package/dist/agent/cline-native-tool-policy.js +50 -0
  22. package/dist/agent/cline-native-tool-policy.js.map +1 -0
  23. package/dist/agent/code-act/constants.d.ts +1 -1
  24. package/dist/agent/code-act/constants.d.ts.map +1 -1
  25. package/dist/agent/code-act/constants.js +13 -1
  26. package/dist/agent/code-act/constants.js.map +1 -1
  27. package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
  28. package/dist/agent/code-act/host-bridge.js +35 -74
  29. package/dist/agent/code-act/host-bridge.js.map +1 -1
  30. package/dist/agent/codex-app-server-process.d.ts +5 -0
  31. package/dist/agent/codex-app-server-process.d.ts.map +1 -1
  32. package/dist/agent/codex-app-server-process.js +30 -0
  33. package/dist/agent/codex-app-server-process.js.map +1 -1
  34. package/dist/agent/codex-auxiliary-tools.d.ts +17 -0
  35. package/dist/agent/codex-auxiliary-tools.d.ts.map +1 -0
  36. package/dist/agent/codex-auxiliary-tools.js +267 -0
  37. package/dist/agent/codex-auxiliary-tools.js.map +1 -0
  38. package/dist/agent/codex-home.d.ts.map +1 -1
  39. package/dist/agent/codex-home.js +1 -0
  40. package/dist/agent/codex-home.js.map +1 -1
  41. package/dist/agent/gateway-tool-catalog.d.ts +14 -0
  42. package/dist/agent/gateway-tool-catalog.d.ts.map +1 -0
  43. package/dist/agent/gateway-tool-catalog.js +41 -0
  44. package/dist/agent/gateway-tool-catalog.js.map +1 -0
  45. package/dist/agent/gateway-tool-executor.d.ts +12 -1
  46. package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
  47. package/dist/agent/gateway-tool-executor.js +149 -15
  48. package/dist/agent/gateway-tool-executor.js.map +1 -1
  49. package/dist/agent/gateway-tools.md +5 -7
  50. package/dist/agent/managed-agent-runtime-sync.d.ts.map +1 -1
  51. package/dist/agent/managed-agent-runtime-sync.js +17 -3
  52. package/dist/agent/managed-agent-runtime-sync.js.map +1 -1
  53. package/dist/agent/managed-agent-validation.js +1 -1
  54. package/dist/agent/managed-agent-validation.js.map +1 -1
  55. package/dist/agent/model-runner.d.ts +11 -1
  56. package/dist/agent/model-runner.d.ts.map +1 -1
  57. package/dist/agent/model-runner.js +12 -1
  58. package/dist/agent/model-runner.js.map +1 -1
  59. package/dist/agent/session-pool.d.ts +10 -9
  60. package/dist/agent/session-pool.d.ts.map +1 -1
  61. package/dist/agent/session-pool.js +12 -47
  62. package/dist/agent/session-pool.js.map +1 -1
  63. package/dist/agent/tool-registry.d.ts +6 -4
  64. package/dist/agent/tool-registry.d.ts.map +1 -1
  65. package/dist/agent/tool-registry.js +62 -30
  66. package/dist/agent/tool-registry.js.map +1 -1
  67. package/dist/agent/types.d.ts +36 -4
  68. package/dist/agent/types.d.ts.map +1 -1
  69. package/dist/agent/types.js.map +1 -1
  70. package/dist/api/graph-api.d.ts.map +1 -1
  71. package/dist/api/graph-api.js +15 -5
  72. package/dist/api/graph-api.js.map +1 -1
  73. package/dist/api/index.d.ts +10 -0
  74. package/dist/api/index.d.ts.map +1 -1
  75. package/dist/api/index.js +7 -16
  76. package/dist/api/index.js.map +1 -1
  77. package/dist/cli/commands/connector.d.ts +6 -1
  78. package/dist/cli/commands/connector.d.ts.map +1 -1
  79. package/dist/cli/commands/connector.js +61 -45
  80. package/dist/cli/commands/connector.js.map +1 -1
  81. package/dist/cli/commands/init.d.ts +1 -1
  82. package/dist/cli/commands/init.d.ts.map +1 -1
  83. package/dist/cli/commands/init.js +43 -10
  84. package/dist/cli/commands/init.js.map +1 -1
  85. package/dist/cli/commands/run.d.ts.map +1 -1
  86. package/dist/cli/commands/run.js +12 -0
  87. package/dist/cli/commands/run.js.map +1 -1
  88. package/dist/cli/commands/setup.d.ts +22 -0
  89. package/dist/cli/commands/setup.d.ts.map +1 -1
  90. package/dist/cli/commands/setup.js +79 -28
  91. package/dist/cli/commands/setup.js.map +1 -1
  92. package/dist/cli/commands/start.d.ts +13 -9
  93. package/dist/cli/commands/start.d.ts.map +1 -1
  94. package/dist/cli/commands/start.js +190 -97
  95. package/dist/cli/commands/start.js.map +1 -1
  96. package/dist/cli/commands/status.d.ts.map +1 -1
  97. package/dist/cli/commands/status.js +4 -0
  98. package/dist/cli/commands/status.js.map +1 -1
  99. package/dist/cli/config/config-manager.d.ts.map +1 -1
  100. package/dist/cli/config/config-manager.js +63 -14
  101. package/dist/cli/config/config-manager.js.map +1 -1
  102. package/dist/cli/config/types.d.ts +12 -5
  103. package/dist/cli/config/types.d.ts.map +1 -1
  104. package/dist/cli/config/types.js +3 -4
  105. package/dist/cli/config/types.js.map +1 -1
  106. package/dist/cli/index.js +6 -4
  107. package/dist/cli/index.js.map +1 -1
  108. package/dist/cli/runtime/agent-loop-init.d.ts +1 -1
  109. package/dist/cli/runtime/agent-loop-init.d.ts.map +1 -1
  110. package/dist/cli/runtime/agent-loop-init.js +8 -3
  111. package/dist/cli/runtime/agent-loop-init.js.map +1 -1
  112. package/dist/cli/runtime/api-routes-init.d.ts +38 -1
  113. package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
  114. package/dist/cli/runtime/api-routes-init.js +150 -30
  115. package/dist/cli/runtime/api-routes-init.js.map +1 -1
  116. package/dist/cli/runtime/api-server-init.d.ts +4 -0
  117. package/dist/cli/runtime/api-server-init.d.ts.map +1 -1
  118. package/dist/cli/runtime/api-server-init.js +3 -1
  119. package/dist/cli/runtime/api-server-init.js.map +1 -1
  120. package/dist/cli/runtime/connector-bootstrap.d.ts +8 -0
  121. package/dist/cli/runtime/connector-bootstrap.d.ts.map +1 -0
  122. package/dist/cli/runtime/connector-bootstrap.js +14 -0
  123. package/dist/cli/runtime/connector-bootstrap.js.map +1 -0
  124. package/dist/cli/runtime/connector-init.d.ts +4 -1
  125. package/dist/cli/runtime/connector-init.d.ts.map +1 -1
  126. package/dist/cli/runtime/connector-init.js +2 -8
  127. package/dist/cli/runtime/connector-init.js.map +1 -1
  128. package/dist/cli/runtime/envelope-bootstrap.d.ts +2 -1
  129. package/dist/cli/runtime/envelope-bootstrap.d.ts.map +1 -1
  130. package/dist/cli/runtime/envelope-bootstrap.js +7 -15
  131. package/dist/cli/runtime/envelope-bootstrap.js.map +1 -1
  132. package/dist/cli/runtime/gateway-init.d.ts +1 -1
  133. package/dist/cli/runtime/gateway-init.d.ts.map +1 -1
  134. package/dist/cli/runtime/gateway-init.js.map +1 -1
  135. package/dist/cli/runtime/mama-core-init.d.ts +10 -2
  136. package/dist/cli/runtime/mama-core-init.d.ts.map +1 -1
  137. package/dist/cli/runtime/mama-core-init.js +52 -68
  138. package/dist/cli/runtime/mama-core-init.js.map +1 -1
  139. package/dist/cli/runtime/memory-agent-init.d.ts.map +1 -1
  140. package/dist/cli/runtime/memory-agent-init.js +18 -5
  141. package/dist/cli/runtime/memory-agent-init.js.map +1 -1
  142. package/dist/cli/runtime/scheduler-init.d.ts +4 -0
  143. package/dist/cli/runtime/scheduler-init.d.ts.map +1 -1
  144. package/dist/cli/runtime/scheduler-init.js +24 -3
  145. package/dist/cli/runtime/scheduler-init.js.map +1 -1
  146. package/dist/cli/runtime/shutdown.d.ts +4 -0
  147. package/dist/cli/runtime/shutdown.d.ts.map +1 -1
  148. package/dist/cli/runtime/shutdown.js +30 -6
  149. package/dist/cli/runtime/shutdown.js.map +1 -1
  150. package/dist/cli/runtime/utilities.d.ts +2 -0
  151. package/dist/cli/runtime/utilities.d.ts.map +1 -1
  152. package/dist/cli/runtime/utilities.js +33 -0
  153. package/dist/cli/runtime/utilities.js.map +1 -1
  154. package/dist/connectors/index.d.ts +4 -1
  155. package/dist/connectors/index.d.ts.map +1 -1
  156. package/dist/connectors/index.js +3 -2
  157. package/dist/connectors/index.js.map +1 -1
  158. package/dist/connectors/private-connector-policy.d.ts +150 -0
  159. package/dist/connectors/private-connector-policy.d.ts.map +1 -0
  160. package/dist/connectors/private-connector-policy.js +289 -0
  161. package/dist/connectors/private-connector-policy.js.map +1 -0
  162. package/dist/connectors/private-prompt-overlay.d.ts +17 -0
  163. package/dist/connectors/private-prompt-overlay.d.ts.map +1 -0
  164. package/dist/connectors/private-prompt-overlay.js +156 -0
  165. package/dist/connectors/private-prompt-overlay.js.map +1 -0
  166. package/dist/db/migrations/operator-task-external-lifecycle.d.ts +8 -0
  167. package/dist/db/migrations/operator-task-external-lifecycle.d.ts.map +1 -0
  168. package/dist/db/migrations/operator-task-external-lifecycle.js +169 -0
  169. package/dist/db/migrations/operator-task-external-lifecycle.js.map +1 -0
  170. package/dist/envelope/enforcer.js +8 -7
  171. package/dist/envelope/enforcer.js.map +1 -1
  172. package/dist/envelope/reactive-config.d.ts.map +1 -1
  173. package/dist/envelope/reactive-config.js +2 -1
  174. package/dist/envelope/reactive-config.js.map +1 -1
  175. package/dist/envelope/tool-connector-scope.d.ts.map +1 -1
  176. package/dist/envelope/tool-connector-scope.js +4 -0
  177. package/dist/envelope/tool-connector-scope.js.map +1 -1
  178. package/dist/gateways/discord.d.ts.map +1 -1
  179. package/dist/gateways/discord.js +11 -6
  180. package/dist/gateways/discord.js.map +1 -1
  181. package/dist/gateways/image-analyzer.d.ts +5 -0
  182. package/dist/gateways/image-analyzer.d.ts.map +1 -1
  183. package/dist/gateways/image-analyzer.js +8 -0
  184. package/dist/gateways/image-analyzer.js.map +1 -1
  185. package/dist/gateways/message-router.d.ts +11 -1
  186. package/dist/gateways/message-router.d.ts.map +1 -1
  187. package/dist/gateways/message-router.js +146 -52
  188. package/dist/gateways/message-router.js.map +1 -1
  189. package/dist/gateways/slack.d.ts.map +1 -1
  190. package/dist/gateways/slack.js +6 -2
  191. package/dist/gateways/slack.js.map +1 -1
  192. package/dist/gateways/telegram-message-ledger.d.ts +8 -1
  193. package/dist/gateways/telegram-message-ledger.d.ts.map +1 -1
  194. package/dist/gateways/telegram-message-ledger.js +141 -24
  195. package/dist/gateways/telegram-message-ledger.js.map +1 -1
  196. package/dist/gateways/telegram.d.ts +2 -0
  197. package/dist/gateways/telegram.d.ts.map +1 -1
  198. package/dist/gateways/telegram.js +19 -12
  199. package/dist/gateways/telegram.js.map +1 -1
  200. package/dist/gateways/types.d.ts +1 -1
  201. package/dist/gateways/types.d.ts.map +1 -1
  202. package/dist/index.d.ts +1 -1
  203. package/dist/index.js +1 -1
  204. package/dist/multi-agent/agent-process-manager.d.ts +14 -4
  205. package/dist/multi-agent/agent-process-manager.d.ts.map +1 -1
  206. package/dist/multi-agent/agent-process-manager.js +144 -47
  207. package/dist/multi-agent/agent-process-manager.js.map +1 -1
  208. package/dist/multi-agent/dashboard-agent-persona.d.ts +3 -3
  209. package/dist/multi-agent/dashboard-agent-persona.d.ts.map +1 -1
  210. package/dist/multi-agent/dashboard-agent-persona.js +10 -13
  211. package/dist/multi-agent/dashboard-agent-persona.js.map +1 -1
  212. package/dist/multi-agent/memory-agent-persona.d.ts +1 -1
  213. package/dist/multi-agent/memory-agent-persona.d.ts.map +1 -1
  214. package/dist/multi-agent/memory-agent-persona.js +1 -1
  215. package/dist/multi-agent/runtime-process.d.ts +3 -0
  216. package/dist/multi-agent/runtime-process.d.ts.map +1 -1
  217. package/dist/multi-agent/runtime-process.js +10 -2
  218. package/dist/multi-agent/runtime-process.js.map +1 -1
  219. package/dist/multi-agent/types.d.ts +12 -2
  220. package/dist/multi-agent/types.d.ts.map +1 -1
  221. package/dist/multi-agent/types.js.map +1 -1
  222. package/dist/multi-agent/wiki-agent-persona.d.ts +2 -2
  223. package/dist/multi-agent/wiki-agent-persona.js +2 -2
  224. package/dist/multi-agent/workflow-types.d.ts +1 -1
  225. package/dist/multi-agent/workflow-types.d.ts.map +1 -1
  226. package/dist/onboarding/complete-autonomous-prompt.d.ts +1 -1
  227. package/dist/onboarding/complete-autonomous-prompt.d.ts.map +1 -1
  228. package/dist/onboarding/complete-autonomous-prompt.js +9 -9
  229. package/dist/operator/board-slot-instructions.d.ts +1 -1
  230. package/dist/operator/board-slot-instructions.js +2 -2
  231. package/dist/operator/board-slot-instructions.js.map +1 -1
  232. package/dist/operator/briefs.d.ts +3 -0
  233. package/dist/operator/briefs.d.ts.map +1 -1
  234. package/dist/operator/briefs.js +64 -3
  235. package/dist/operator/briefs.js.map +1 -1
  236. package/dist/operator/console-brief.d.ts +6 -3
  237. package/dist/operator/console-brief.d.ts.map +1 -1
  238. package/dist/operator/console-brief.js +39 -9
  239. package/dist/operator/console-brief.js.map +1 -1
  240. package/dist/operator/external-lifecycle-candidates.d.ts +56 -0
  241. package/dist/operator/external-lifecycle-candidates.d.ts.map +1 -0
  242. package/dist/operator/external-lifecycle-candidates.js +415 -0
  243. package/dist/operator/external-lifecycle-candidates.js.map +1 -0
  244. package/dist/operator/external-lifecycle.d.ts +82 -0
  245. package/dist/operator/external-lifecycle.d.ts.map +1 -0
  246. package/dist/operator/external-lifecycle.js +27 -0
  247. package/dist/operator/external-lifecycle.js.map +1 -0
  248. package/dist/operator/file-coordination.d.ts +7 -0
  249. package/dist/operator/file-coordination.d.ts.map +1 -0
  250. package/dist/operator/file-coordination.js +84 -0
  251. package/dist/operator/file-coordination.js.map +1 -0
  252. package/dist/operator/operator-trigger-loop.d.ts +19 -4
  253. package/dist/operator/operator-trigger-loop.d.ts.map +1 -1
  254. package/dist/operator/operator-trigger-loop.js +151 -23
  255. package/dist/operator/operator-trigger-loop.js.map +1 -1
  256. package/dist/operator/pending-report-store.d.ts +62 -3
  257. package/dist/operator/pending-report-store.d.ts.map +1 -1
  258. package/dist/operator/pending-report-store.js +297 -40
  259. package/dist/operator/pending-report-store.js.map +1 -1
  260. package/dist/operator/report-carry-delivery.d.ts +35 -0
  261. package/dist/operator/report-carry-delivery.d.ts.map +1 -0
  262. package/dist/operator/report-carry-delivery.js +55 -0
  263. package/dist/operator/report-carry-delivery.js.map +1 -0
  264. package/dist/operator/report-carry.d.ts +50 -30
  265. package/dist/operator/report-carry.d.ts.map +1 -1
  266. package/dist/operator/report-carry.js +323 -71
  267. package/dist/operator/report-carry.js.map +1 -1
  268. package/dist/operator/situation-report.d.ts +30 -11
  269. package/dist/operator/situation-report.d.ts.map +1 -1
  270. package/dist/operator/situation-report.js +79 -35
  271. package/dist/operator/situation-report.js.map +1 -1
  272. package/dist/operator/task-ledger.d.ts +101 -0
  273. package/dist/operator/task-ledger.d.ts.map +1 -1
  274. package/dist/operator/task-ledger.js +599 -124
  275. package/dist/operator/task-ledger.js.map +1 -1
  276. package/dist/operator/temporal-runtime.d.ts.map +1 -1
  277. package/dist/operator/temporal-runtime.js +3 -1
  278. package/dist/operator/temporal-runtime.js.map +1 -1
  279. package/dist/operator/temporal-worker.js +1 -1
  280. package/dist/operator/trigger-author.d.ts +13 -1
  281. package/dist/operator/trigger-author.d.ts.map +1 -1
  282. package/dist/operator/trigger-author.js +35 -0
  283. package/dist/operator/trigger-author.js.map +1 -1
  284. package/dist/operator/worker-run.d.ts +1 -1
  285. package/dist/operator/worker-run.d.ts.map +1 -1
  286. package/dist/operator/worker-run.js +27 -9
  287. package/dist/operator/worker-run.js.map +1 -1
  288. package/dist/operator/workorder-consumer.d.ts +12 -1
  289. package/dist/operator/workorder-consumer.d.ts.map +1 -1
  290. package/dist/operator/workorder-consumer.js +125 -6
  291. package/dist/operator/workorder-consumer.js.map +1 -1
  292. package/dist/operator/workorder-hooks.d.ts +7 -2
  293. package/dist/operator/workorder-hooks.d.ts.map +1 -1
  294. package/dist/operator/workorder-hooks.js +22 -0
  295. package/dist/operator/workorder-hooks.js.map +1 -1
  296. package/dist/operator/workorder-publishers.d.ts +9 -2
  297. package/dist/operator/workorder-publishers.d.ts.map +1 -1
  298. package/dist/operator/workorder-publishers.js +167 -5
  299. package/dist/operator/workorder-publishers.js.map +1 -1
  300. package/dist/scheduler/cron-worker.d.ts +8 -4
  301. package/dist/scheduler/cron-worker.d.ts.map +1 -1
  302. package/dist/scheduler/cron-worker.js +56 -39
  303. package/dist/scheduler/cron-worker.js.map +1 -1
  304. package/dist/setup/setup-actions.d.ts +26 -0
  305. package/dist/setup/setup-actions.d.ts.map +1 -0
  306. package/dist/setup/setup-actions.js +371 -0
  307. package/dist/setup/setup-actions.js.map +1 -0
  308. package/dist/setup/setup-prompt.d.ts +1 -1
  309. package/dist/setup/setup-prompt.d.ts.map +1 -1
  310. package/dist/setup/setup-prompt.js +28 -33
  311. package/dist/setup/setup-prompt.js.map +1 -1
  312. package/dist/setup/setup-server.d.ts +6 -1
  313. package/dist/setup/setup-server.d.ts.map +1 -1
  314. package/dist/setup/setup-server.js +55 -9
  315. package/dist/setup/setup-server.js.map +1 -1
  316. package/dist/setup/setup-websocket.d.ts +14 -2
  317. package/dist/setup/setup-websocket.d.ts.map +1 -1
  318. package/dist/setup/setup-websocket.js +121 -37
  319. package/dist/setup/setup-websocket.js.map +1 -1
  320. package/package.json +2 -2
  321. package/public/setup.html +9 -6
  322. package/public/viewer/js/modules/agents.js +5 -4
  323. package/public/viewer/js/modules/settings.js +34 -10
  324. package/public/viewer/src/modules/agents.ts +5 -4
  325. package/public/viewer/src/modules/settings.ts +49 -11
  326. package/public/viewer/src/utils/api.ts +3 -2
  327. package/scripts/generate-gateway-tools.ts +13 -3
@@ -47,6 +47,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
47
47
  Object.defineProperty(exports, "__esModule", { value: true });
48
48
  exports.CONDUCTOR_TOOL_POLICY = exports.OPERATOR_REPORT_TOOL_POLICY = exports.WORKORDER_TOOL_POLICIES = void 0;
49
49
  exports.requireRuntimeBackend = requireRuntimeBackend;
50
+ exports.assertConductorBackendSupported = assertConductorBackendSupported;
50
51
  exports.serializeCodeActExecutionResult = serializeCodeActExecutionResult;
51
52
  exports.deriveCodeActToolPolicy = deriveCodeActToolPolicy;
52
53
  exports.resolveCodeActAgentPolicy = resolveCodeActAgentPolicy;
@@ -73,6 +74,7 @@ const gateway_tool_executor_js_1 = require("../../agent/gateway-tool-executor.js
73
74
  const context_compile_service_js_1 = require("../../agent/context-compile-service.js");
74
75
  const read_js_1 = require("../../evidence/read.js");
75
76
  const tool_registry_js_1 = require("../../agent/tool-registry.js");
77
+ const gateway_tool_catalog_js_1 = require("../../agent/gateway-tool-catalog.js");
76
78
  const tool_policy_js_1 = require("../../agent/code-act/tool-policy.js");
77
79
  const run_context_registry_js_1 = require("../../agent/code-act/run-context-registry.js");
78
80
  const index_js_2 = require("../../gateways/index.js");
@@ -100,6 +102,9 @@ const api_routes_init_js_1 = require("../runtime/api-routes-init.js");
100
102
  const server_start_js_1 = require("../runtime/server-start.js");
101
103
  const shutdown_js_1 = require("../runtime/shutdown.js");
102
104
  const envelope_bootstrap_js_1 = require("../runtime/envelope-bootstrap.js");
105
+ const config_loader_js_1 = require("../../connectors/config-loader.js");
106
+ const connector_bootstrap_js_1 = require("../runtime/connector-bootstrap.js");
107
+ const private_connector_policy_js_1 = require("../../connectors/private-connector-policy.js");
103
108
  const message_router_config_js_1 = require("../runtime/message-router-config.js");
104
109
  const reactive_config_js_1 = require("../../envelope/reactive-config.js");
105
110
  const scope_context_js_1 = require("../../memory/scope-context.js");
@@ -109,6 +114,7 @@ const node_crypto_1 = require("node:crypto");
109
114
  const debugLogger = __importStar(require("@jungjaehoon/mama-core/debug-logger"));
110
115
  const mama_core_1 = require("@jungjaehoon/mama-core");
111
116
  const report_run_js_1 = require("../../operator/report-run.js");
117
+ const report_carry_js_1 = require("../../operator/report-carry.js");
112
118
  const console_brief_js_1 = require("../../operator/console-brief.js");
113
119
  const task_ledger_js_1 = require("../../operator/task-ledger.js");
114
120
  const conductor_inbox_js_1 = require("../../operator/conductor-inbox.js");
@@ -125,12 +131,22 @@ const workorder_consumer_js_1 = require("../../operator/workorder-consumer.js");
125
131
  const { DebugLogger } = debugLogger;
126
132
  const codeActLogger = new DebugLogger('CodeAct');
127
133
  const temporalLogger = new DebugLogger('TemporalReconcile');
134
+ const DISABLED_PRIVATE_CONNECTOR_POLICY = (0, private_connector_policy_js_1.resolvePrivateConnectorPolicy)({
135
+ ok: true,
136
+ config: {},
137
+ enabledNames: [],
138
+ });
128
139
  function requireRuntimeBackend(value) {
129
- if (value === 'claude' || value === 'codex') {
140
+ if (value === 'claude' || value === 'codex' || value === 'cline') {
130
141
  return value;
131
142
  }
132
143
  throw new Error(`Unsupported agent backend: ${String(value)}`);
133
144
  }
145
+ function assertConductorBackendSupported(enabled, backend) {
146
+ if (enabled && backend === 'codex') {
147
+ throw new Error('conductor.enabled requires the claude or cline backend - codex session lifecycle lands in S2');
148
+ }
149
+ }
134
150
  function serializeCodeActExecutionResult(result, toolCalls, hostToolExecutions = []) {
135
151
  const hostToolsInvoked = [
136
152
  ...new Set(hostToolExecutions.filter((execution) => execution.success).map((execution) => execution.name)),
@@ -343,15 +359,19 @@ function causeEventIdsFromPayload(payload) {
343
359
  }
344
360
  function workOrderEnvelopeScope(input) {
345
361
  const isTemporal = input.workKind === 'temporal';
362
+ const surface = (0, private_connector_policy_js_1.resolveWorkOrderPrivateSurface)(input.workKind);
363
+ const candidateConnectors = isTemporal
364
+ ? input.temporalBinding
365
+ ? [input.temporalBinding.connector]
366
+ : []
367
+ : input.laneConnectors;
346
368
  return {
347
369
  project_refs: [{ kind: 'project', id: input.projectId }],
348
370
  // A temporal run reads its task's connector or nothing. Every other lane keeps the
349
371
  // connectors it was configured with.
350
- raw_connectors: isTemporal
351
- ? input.temporalBinding
352
- ? [input.temporalBinding.connector]
353
- : []
354
- : input.laneConnectors,
372
+ raw_connectors: [
373
+ ...input.privateConnectorPolicy.projectRawConnectors(surface, candidateConnectors),
374
+ ],
355
375
  memory_scopes: [
356
376
  ...(0, scope_context_js_1.deriveMemoryScopes)({
357
377
  source: 'operator',
@@ -410,13 +430,11 @@ exports.WORKORDER_TOOL_POLICIES = {
410
430
  'changes_read',
411
431
  'context_compile',
412
432
  'contract_no_update',
413
- 'kagemusha_entities',
414
- 'kagemusha_messages',
415
- 'kagemusha_overview',
416
- 'kagemusha_tasks',
417
433
  'mama_search',
418
434
  'report_publish',
419
435
  'task_create',
436
+ 'task_external_bind',
437
+ 'task_lifecycle_reconcile',
420
438
  'task_list',
421
439
  'task_update',
422
440
  'trello_card',
@@ -430,23 +448,13 @@ exports.WORKORDER_TOOL_POLICIES = {
430
448
  },
431
449
  'memory-curation': {
432
450
  roleName: 'workorder-memory-curation',
433
- allowedTools: [
434
- 'agent_notices',
435
- 'kagemusha_entities',
436
- 'kagemusha_messages',
437
- 'mama_save',
438
- 'mama_search',
439
- ],
451
+ allowedTools: ['agent_notices', 'mama_save', 'mama_search'],
440
452
  },
441
453
  temporal: {
442
454
  roleName: 'workorder-temporal',
443
455
  allowedTools: [
444
456
  'agent_notices',
445
457
  'context_compile',
446
- 'kagemusha_entities',
447
- 'kagemusha_messages',
448
- 'kagemusha_overview',
449
- 'kagemusha_tasks',
450
458
  'schedule_upcoming',
451
459
  'task_list',
452
460
  'task_temporal_reconcile',
@@ -484,10 +492,6 @@ exports.OPERATOR_REPORT_TOOL_POLICY = {
484
492
  // answer that was to re-read current state and infer the delta, which is how a
485
493
  // report ends up restating the board instead of naming the change.
486
494
  'changes_read',
487
- 'kagemusha_entities',
488
- 'kagemusha_messages',
489
- 'kagemusha_overview',
490
- 'kagemusha_tasks',
491
495
  'mama_provenance',
492
496
  'mama_recall',
493
497
  'mama_save',
@@ -499,6 +503,28 @@ exports.OPERATOR_REPORT_TOOL_POLICY = {
499
503
  'trello_kanban',
500
504
  ],
501
505
  };
506
+ function requirePrivateConnectorPolicy(privateConnectorPolicy) {
507
+ if (!privateConnectorPolicy) {
508
+ throw new Error('privateConnectorPolicy is required');
509
+ }
510
+ return privateConnectorPolicy;
511
+ }
512
+ function buildProjectedLaneRole(surface, allowedTools, privateConnectorPolicy) {
513
+ return privateConnectorPolicy.projectRole(surface, {
514
+ allowedTools: [...allowedTools],
515
+ blockedTools: [],
516
+ allowedPaths: [],
517
+ systemControl: false,
518
+ sensitiveAccess: false,
519
+ });
520
+ }
521
+ function buildProjectedLanePrompt(innerTools, surface, privateConnectorPolicy) {
522
+ return (0, gateway_tool_catalog_js_1.buildGatewayToolCatalog)({
523
+ surface,
524
+ allowedTools: innerTools,
525
+ privateConnectorPolicy,
526
+ }).prompt;
527
+ }
502
528
  /**
503
529
  * The conductor's grant (S1). Reads and judgment surfaces plus the ONE write
504
530
  * family the spec's center names: committing work orders and board cards. No
@@ -520,7 +546,7 @@ exports.CONDUCTOR_TOOL_POLICY = {
520
546
  ],
521
547
  };
522
548
  /** Mirrors buildOperatorReportAgentPolicy - same shape, conductor grant. */
523
- function buildConductorAgentPolicy(model, backend) {
549
+ function buildConductorAgentPolicy(model, backend, privateConnectorPolicy) {
524
550
  const blockedTools = [];
525
551
  const innerTools = uniqueToolList(exports.CONDUCTOR_TOOL_POLICY.allowedTools);
526
552
  const allowedTools = uniqueToolList([...innerTools]);
@@ -547,7 +573,15 @@ function buildConductorAgentPolicy(model, backend) {
547
573
  tier: 2,
548
574
  backend,
549
575
  };
550
- return { agentContext, gatewayToolsPrompt: tool_registry_js_1.ToolRegistry.generatePrompt(innerTools) };
576
+ return {
577
+ agentContext,
578
+ gatewayToolsPrompt: (0, gateway_tool_catalog_js_1.buildGatewayToolCatalog)({
579
+ surface: 'multi-agent-generic',
580
+ allowedTools: innerTools,
581
+ privateConnectorPolicy,
582
+ }).prompt,
583
+ briefProjectionPolicy: DISABLED_PRIVATE_CONNECTOR_POLICY,
584
+ };
551
585
  }
552
586
  /**
553
587
  * Merge + validate the conductor config at boot. No-fallback: a malformed
@@ -581,22 +615,18 @@ function resolveConductorConfig(config) {
581
615
  * logs "executed NO gateway gather tools" while still being delivered. Mirrors
582
616
  * buildWorkOrderAgentPolicy so both operator job families get their permissions the same way.
583
617
  */
584
- function buildOperatorReportAgentPolicy(model, backend) {
585
- const blockedTools = [];
586
- const innerTools = uniqueToolList(exports.OPERATOR_REPORT_TOOL_POLICY.allowedTools);
618
+ function buildOperatorReportAgentPolicy(model, backend, privateConnectorPolicy) {
619
+ const requiredPrivatePolicy = requirePrivateConnectorPolicy(privateConnectorPolicy);
620
+ const surface = 'operator-report';
621
+ const projectedRole = buildProjectedLaneRole(surface, exports.OPERATOR_REPORT_TOOL_POLICY.allowedTools, requiredPrivatePolicy);
622
+ const blockedTools = [...(projectedRole.blockedTools ?? [])];
623
+ const innerTools = uniqueToolList(projectedRole.allowedTools);
587
624
  const allowedTools = uniqueToolList(['code_act', ...innerTools]);
588
625
  const agentContext = {
589
626
  source: 'operator',
590
627
  platform: 'cli',
591
628
  roleName: exports.OPERATOR_REPORT_TOOL_POLICY.roleName,
592
- role: {
593
- allowedTools,
594
- blockedTools,
595
- allowedPaths: [],
596
- systemControl: false,
597
- sensitiveAccess: false,
598
- model,
599
- },
629
+ role: { ...projectedRole, allowedTools, blockedTools, model },
600
630
  session: {
601
631
  sessionId: report_run_js_1.OPERATOR_REPORT_SESSION_KEY,
602
632
  channelId: 'report',
@@ -609,28 +639,34 @@ function buildOperatorReportAgentPolicy(model, backend) {
609
639
  tier: 2,
610
640
  backend,
611
641
  };
612
- return { agentContext, gatewayToolsPrompt: tool_registry_js_1.ToolRegistry.generatePrompt(innerTools) };
642
+ return {
643
+ agentContext,
644
+ gatewayToolsPrompt: buildProjectedLanePrompt(innerTools, surface, requiredPrivatePolicy),
645
+ briefProjectionPolicy: requiredPrivatePolicy,
646
+ };
613
647
  }
614
- function buildWorkOrderAgentPolicy(kind, model, backend) {
648
+ function buildWorkOrderAgentPolicy(kind, model, backend, privateConnectorPolicy, rawConnectorScope) {
649
+ const requiredPrivatePolicy = requirePrivateConnectorPolicy(privateConnectorPolicy);
650
+ if (!rawConnectorScope) {
651
+ throw new Error('rawConnectorScope is required');
652
+ }
615
653
  const policy = exports.WORKORDER_TOOL_POLICIES[kind];
616
654
  if (!policy) {
617
655
  throw new Error(`Missing built-in workorder tool policy for '${kind}'`);
618
656
  }
619
- const blockedTools = [];
620
- const innerTools = uniqueToolList(policy.allowedTools);
657
+ const surface = (0, private_connector_policy_js_1.resolveWorkOrderPrivateSurface)(kind);
658
+ const scopedSurface = requiredPrivatePolicy.enabledPrivateConnectors.some((name) => rawConnectorScope.includes(name))
659
+ ? surface
660
+ : 'multi-agent-generic';
661
+ const projectedRole = buildProjectedLaneRole(scopedSurface, policy.allowedTools, requiredPrivatePolicy);
662
+ const blockedTools = [...(projectedRole.blockedTools ?? [])];
663
+ const innerTools = uniqueToolList(projectedRole.allowedTools);
621
664
  const allowedTools = uniqueToolList(['code_act', ...innerTools]);
622
665
  const agentContext = {
623
666
  source: 'operator',
624
667
  platform: 'cli',
625
668
  roleName: policy.roleName,
626
- role: {
627
- allowedTools,
628
- blockedTools,
629
- allowedPaths: [],
630
- systemControl: false,
631
- sensitiveAccess: false,
632
- model,
633
- },
669
+ role: { ...projectedRole, allowedTools, blockedTools, model },
634
670
  session: {
635
671
  sessionId: `operator:worker:${kind}`,
636
672
  channelId: `worker:${kind}`,
@@ -643,7 +679,10 @@ function buildWorkOrderAgentPolicy(kind, model, backend) {
643
679
  };
644
680
  return {
645
681
  agentContext,
646
- gatewayToolsPrompt: tool_registry_js_1.ToolRegistry.generatePrompt(innerTools),
682
+ gatewayToolsPrompt: buildProjectedLanePrompt(innerTools, scopedSurface, requiredPrivatePolicy),
683
+ briefProjectionPolicy: scopedSurface === 'multi-agent-generic'
684
+ ? DISABLED_PRIVATE_CONNECTOR_POLICY
685
+ : requiredPrivatePolicy,
647
686
  };
648
687
  }
649
688
  function bindCodeActParentModelRun(adapter, executionContext, options) {
@@ -735,6 +774,9 @@ async function startCommand(options = {}) {
735
774
  if (backend === 'codex') {
736
775
  console.log('✓ Codex app-server backend (authentication handled by Codex login)');
737
776
  }
777
+ else if (backend === 'cline') {
778
+ console.log('✓ Cline CLI backend (authentication handled by Cline)');
779
+ }
738
780
  else {
739
781
  console.log('✓ Claude CLI mode (OAuth token not needed)');
740
782
  }
@@ -821,8 +863,9 @@ async function runAgentLoop(config, options = {}) {
821
863
  // (workorders are the only run path since v0.28.0).
822
864
  const temporalStartup = (0, temporal_runtime_js_1.preflightTemporalStartup)(process.env);
823
865
  const runtimeBackend = requireRuntimeBackend(config.agent.backend);
866
+ const { connectorConfigLoadResult, privateConnectorPolicy } = (0, connector_bootstrap_js_1.resolveRuntimeConnectorBootstrap)((0, config_loader_js_1.loadConnectorConfig)());
824
867
  const temporalPolicy = temporalStartup.temporalFlag === 'on'
825
- ? buildWorkOrderAgentPolicy('temporal', config.agent.model, runtimeBackend)
868
+ ? buildWorkOrderAgentPolicy('temporal', config.agent.model, runtimeBackend, privateConnectorPolicy, [])
826
869
  : null;
827
870
  const temporalEffectiveTools = temporalPolicy
828
871
  ? (0, tool_policy_js_1.projectCodeActToolPolicy)({
@@ -843,8 +886,15 @@ async function runAgentLoop(config, options = {}) {
843
886
  process.env.MAMA_CODEX_COMMAND = codexCommand;
844
887
  console.log(`✓ Codex CLI backend (command: ${codexCommand})`);
845
888
  }
846
- // Claude CLI is always used (Pi Agent removed for ToS compliance)
847
- console.log('✓ Claude CLI mode (ToS compliance)');
889
+ const usesClineBackend = startupBackend === 'cline' || (0, utilities_js_1.hasClineBackendConfigured)(config);
890
+ if (usesClineBackend) {
891
+ const clineCommand = (0, utilities_js_1.resolveClineCommandForStartup)(config.agent.cline_command);
892
+ process.env.MAMA_CLINE_COMMAND = clineCommand;
893
+ console.log(`✓ Cline CLI backend (command: ${clineCommand})`);
894
+ }
895
+ if (startupBackend === 'claude') {
896
+ console.log('✓ Claude CLI mode (ToS compliance)');
897
+ }
848
898
  // Provision default persona templates and multi-agent config on first start
849
899
  try {
850
900
  await (0, config_manager_js_1.provisionDefaults)();
@@ -867,7 +917,7 @@ async function runAgentLoop(config, options = {}) {
867
917
  process.env.MAMA_WORKSPACE = workspaceRoot;
868
918
  // Initialize channel history with SQLite persistence (Sprint 3 F5)
869
919
  (0, index_js_2.initChannelHistory)(db);
870
- const envelopeBootstrap = (0, envelope_bootstrap_js_1.buildRuntimeEnvelopeBootstrap)(db, config, process.env);
920
+ const envelopeBootstrap = (0, envelope_bootstrap_js_1.buildRuntimeEnvelopeBootstrap)(db, config, process.env, connectorConfigLoadResult);
871
921
  const mamaDbPath = (0, config_manager_js_1.expandPath)(config.database.path);
872
922
  const toolExecutor = new gateway_tool_executor_js_1.GatewayToolExecutor({
873
923
  mamaDbPath: mamaDbPath,
@@ -875,6 +925,7 @@ async function runAgentLoop(config, options = {}) {
875
925
  rolesConfig: config.roles, // Pass roles from config.yaml
876
926
  envelopeIssuanceMode: envelopeBootstrap.metadata.issuance,
877
927
  metricsStore,
928
+ privateConnectorPolicy,
878
929
  });
879
930
  process.env.MAMA_BACKEND = runtimeBackend;
880
931
  const agentLoopBackend = runtimeBackend;
@@ -884,7 +935,7 @@ async function runAgentLoop(config, options = {}) {
884
935
  envelopeIssuanceMode: envelopeBootstrap.metadata.issuance,
885
936
  });
886
937
  // ── Phase 3: MAMA Core API ────────────────────────────────────────────────
887
- const { mamaApi, mamaApiClient, connectorExtractionFn } = await (0, mama_core_init_js_1.initMamaCore)(config);
938
+ const { mamaApi, mamaApiClient, connectorExtractionFn, stopExtraction } = await (0, mama_core_init_js_1.initMamaCore)(config);
888
939
  // Wire the boot MAMA API onto the shared executor so it never lazily builds a
889
940
  // SECOND API/adapter stack against the same DB (initializeMAMAApi). This also
890
941
  // lets the memory agent fold into the shared executor (Task 7) instead of
@@ -903,7 +954,7 @@ async function runAgentLoop(config, options = {}) {
903
954
  toolExecutor.setContextCompileService(contextCompileService);
904
955
  agentLoop.setContextCompileService(contextCompileService);
905
956
  // ── Phase 4: Memory Agent + MessageRouter ─────────────────────────────────
906
- const messageRouter = new index_js_2.MessageRouter(sessionStore, agentLoopClient, mamaApiClient, (0, message_router_config_js_1.resolveMessageRouterConfig)(config, runtimeBackend), envelopeBootstrap.envelopeConfig, envelopeBootstrap.envelopeAuthority);
957
+ const messageRouter = new index_js_2.MessageRouter(sessionStore, agentLoopClient, mamaApiClient, (0, message_router_config_js_1.resolveMessageRouterConfig)(config, runtimeBackend), envelopeBootstrap.envelopeConfig, envelopeBootstrap.envelopeAuthority, { privateConnectorPolicy, reportCarry: new report_carry_js_1.FileReportCarryStore() });
907
958
  messageRouter.setSessionsDb(db);
908
959
  // validationService wired after creation (Phase 5 below)
909
960
  const { memoryAgentLoop } = await (0, memory_agent_init_js_1.initMemoryAgent)(oauthManager, config, mamaApi, mamaApiClient, messageRouter, agentLoopBackend, toolExecutor);
@@ -918,7 +969,7 @@ async function runAgentLoop(config, options = {}) {
918
969
  sessionsDb: db,
919
970
  uiCommandQueue,
920
971
  };
921
- let codeActRawConnectors = [];
972
+ const codeActRawConnectors = resolveCodeActRawConnectors(connectorConfigLoadResult.enabledNames);
922
973
  // Wire uiCommandQueue into messageRouter for page context awareness
923
974
  messageRouter.setUICommandQueue(uiCommandQueue);
924
975
  // Wire sessionsDb into gateway tool executor
@@ -929,13 +980,16 @@ async function runAgentLoop(config, options = {}) {
929
980
  const executeLegacyCodeAct = async (code, codeActContext) => {
930
981
  const { CodeActSandbox, HostBridge } = await import('../../agent/code-act/index.js');
931
982
  const sandbox = new CodeActSandbox();
932
- const resolvedCodeActPolicy = resolveCodeActAgentPolicy(codeActContext, config.multi_agent?.agents, config.multi_agent?.default_agent || 'conductor');
983
+ const legacyRequestContext = codeActContext
984
+ ? { ...codeActContext, agentId: undefined }
985
+ : undefined;
986
+ const resolvedCodeActPolicy = resolveCodeActAgentPolicy(legacyRequestContext, config.multi_agent?.agents, config.multi_agent?.default_agent || 'conductor');
933
987
  if (resolvedCodeActPolicy.error) {
934
988
  return { success: false, error: resolvedCodeActPolicy.error };
935
989
  }
936
990
  const codeActAgentId = resolvedCodeActPolicy.agentId;
937
991
  const codeActPolicy = resolvedCodeActPolicy.policy ?? {};
938
- const codeActRole = buildCodeActRole(codeActPolicy);
992
+ const codeActRole = privateConnectorPolicy.projectRole('legacy-unbound', buildCodeActRole(codeActPolicy));
939
993
  const codeActReadOnly = isTruthyEnvValue(process.env.MAMA_CODE_ACT_READ_ONLY);
940
994
  const codeActTier = codeActReadOnly ? 3 : 2;
941
995
  const instanceId = (0, node_crypto_1.randomUUID)();
@@ -958,7 +1012,9 @@ async function runAgentLoop(config, options = {}) {
958
1012
  trigger_context: { user_text: '<api-code-act invocation>' },
959
1013
  scope: {
960
1014
  project_refs: [projectRef],
961
- raw_connectors: codeActRawConnectors,
1015
+ raw_connectors: [
1016
+ ...privateConnectorPolicy.projectRawConnectors('legacy-unbound', codeActRawConnectors),
1017
+ ],
962
1018
  memory_scopes: memoryScopes,
963
1019
  allowed_destinations: [],
964
1020
  },
@@ -1172,6 +1228,11 @@ async function runAgentLoop(config, options = {}) {
1172
1228
  const pm = new AgentProcessManager(fallbackMultiAgentConfig, buildSystemAgentProcessDefaults(config), {
1173
1229
  backend: runtimeBackend,
1174
1230
  model: config.agent.model,
1231
+ clineCwd: workspaceRoot,
1232
+ clineCommand: process.env.MAMA_CLINE_COMMAND ?? config.agent.cline_command,
1233
+ clineProvider: config.agent.cline_provider,
1234
+ clineDataDir: config.agent.cline_data_dir,
1235
+ privateConnectorPolicy,
1175
1236
  });
1176
1237
  toolExecutor.setAgentProcessManager(pm);
1177
1238
  agentLoop.setAgentProcessManager(pm);
@@ -1257,11 +1318,12 @@ async function runAgentLoop(config, options = {}) {
1257
1318
  }
1258
1319
  }, 60_000);
1259
1320
  const conductorConfig = resolveConductorConfig(config);
1260
- if (conductorConfig.enabled && runtimeBackend !== 'claude') {
1261
- // S1 pins the claude backend: codex sessions do not reset on token usage
1262
- // (session-pool.ts), so the lifecycle contract cannot hold there yet.
1321
+ try {
1322
+ assertConductorBackendSupported(conductorConfig.enabled, runtimeBackend);
1323
+ }
1324
+ catch (error) {
1263
1325
  operatorDb.close();
1264
- throw new Error('conductor.enabled requires the claude backend in S1 - codex session lifecycle lands in S2');
1326
+ throw error;
1265
1327
  }
1266
1328
  // ── Stage-2 workorder consumer (plan S2-T3): the only system run path.
1267
1329
  // Constructed before production runtime assembly registers per-kind
@@ -1332,15 +1394,35 @@ async function runAgentLoop(config, options = {}) {
1332
1394
  noticeOwner: (summary) => messageRouter.enqueueOperatorNotice(summary),
1333
1395
  opsAlarm,
1334
1396
  runOptionsFor: async (wo) => {
1397
+ // Resolve the run's raw binding before constructing either backend's
1398
+ // role/catalog. The catalog and execution envelope must use the same
1399
+ // projection so an unbound or non-private run never advertises private
1400
+ // connector tools it cannot execute.
1401
+ const workOrderBatch = causeEventIdsFromPayload(wo.payload);
1402
+ let temporalContext;
1403
+ let temporalBinding = null;
1404
+ if (wo.workKind === 'temporal') {
1405
+ temporalContext = (0, temporal_worker_js_1.buildTemporalWorkerContext)(taskLedger, wo);
1406
+ temporalBinding = temporalTaskBinding(taskLedger, temporalContext.taskId);
1407
+ }
1408
+ const projectId = (0, reactive_config_js_1.resolveReactiveProjectRoot)(config, process.env);
1409
+ const workOrderScope = workOrderEnvelopeScope({
1410
+ workKind: wo.workKind,
1411
+ projectId,
1412
+ laneConnectors: codeActRawConnectors,
1413
+ temporalBinding,
1414
+ privateConnectorPolicy,
1415
+ });
1335
1416
  // Worker prompt selects the provider's supported tool path: Claude's
1336
1417
  // text gateway or Codex's injected native host tools. Both avoid the
1337
1418
  // spawn-default code-act path, where per-run envelope/capture overrides
1338
1419
  // cannot reach (shadow-gate §8.2).
1339
1420
  const { buildWorkerSystemPrompt } = await import('../../operator/worker-run.js');
1340
- const workOrderPolicy = buildWorkOrderAgentPolicy(wo.workKind, config.agent.model, runtimeBackend);
1421
+ const workOrderPolicy = buildWorkOrderAgentPolicy(wo.workKind, config.agent.model, runtimeBackend, privateConnectorPolicy, workOrderScope.raw_connectors);
1341
1422
  const runOptions = attachWorkOrderAttemptContext({
1342
1423
  systemPrompt: buildWorkerSystemPrompt(workOrderPolicy.gatewayToolsPrompt, runtimeBackend, wo.workKind),
1343
1424
  agentContext: workOrderPolicy.agentContext,
1425
+ workOrderBriefProjectionPolicy: workOrderPolicy.briefProjectionPolicy,
1344
1426
  }, wo.id);
1345
1427
  // A temporal run is bound to ONE task on ONE channel, and the packet check
1346
1428
  // (temporalPacketRawSourcesWithinBoundSource) enforces exactly that: every raw ref
@@ -1359,15 +1441,11 @@ async function runAgentLoop(config, options = {}) {
1359
1441
  // durable change the run produces rest on it WITHOUT the agent restating anything -
1360
1442
  // the system knew the batch before the run began. This is the whole difference
1361
1443
  // between a bounded run and an unbounded one.
1362
- const workOrderBatch = causeEventIdsFromPayload(wo.payload);
1363
1444
  if (workOrderBatch.length > 0) {
1364
1445
  runOptions.causeEventIds = workOrderBatch;
1365
1446
  }
1366
- let temporalBinding = null;
1367
- if (wo.workKind === 'temporal') {
1368
- const temporalContext = (0, temporal_worker_js_1.buildTemporalWorkerContext)(taskLedger, wo);
1447
+ if (temporalContext) {
1369
1448
  runOptions.temporalWorkContext = temporalContext;
1370
- temporalBinding = temporalTaskBinding(taskLedger, temporalContext.taskId);
1371
1449
  }
1372
1450
  // Per-run scoped envelope (live-gate finding, 2026-07-18): gateway
1373
1451
  // 'model_tool' executions are envelope-gated, and workerRun is a new
@@ -1376,7 +1454,6 @@ async function runAgentLoop(config, options = {}) {
1376
1454
  // lane's issuance (createPersonaReportAsk wiring below); issuance
1377
1455
  // failure rejects -> failWorkOrder (no envelope-less fallback run).
1378
1456
  if (envelopeBootstrap.envelopeAuthority && envelopeBootstrap.metadata.issuance !== 'off') {
1379
- const projectId = (0, reactive_config_js_1.resolveReactiveProjectRoot)(config, process.env);
1380
1457
  const wallSeconds = Math.min(Math.max(Number(process.env.MAMA_REPORT_WALL_SECONDS) || 900, 60), 1800);
1381
1458
  runOptions.envelope = await envelopeBootstrap.envelopeAuthority.buildAndPersist({
1382
1459
  agent_id: `workorder-${wo.workKind}`,
@@ -1386,16 +1463,8 @@ async function runAgentLoop(config, options = {}) {
1386
1463
  source: 'watch',
1387
1464
  channel_id: `worker:${wo.workKind}`,
1388
1465
  trigger_context: { user_text: `<stage2 workorder ${wo.workKind}#${wo.id}>` },
1389
- scope: (() => {
1390
- const scope = workOrderEnvelopeScope({
1391
- workKind: wo.workKind,
1392
- projectId,
1393
- laneConnectors: codeActRawConnectors,
1394
- temporalBinding,
1395
- });
1396
- // Identity scopes only - the read mirror is enforcement-layer.
1397
- return scope;
1398
- })(),
1466
+ // Identity scopes only - the read mirror is enforcement-layer.
1467
+ scope: workOrderScope,
1399
1468
  tier: 2,
1400
1469
  budget: { wall_seconds: wallSeconds },
1401
1470
  expires_at: new Date(Date.now() + wallSeconds * 1000 + 30_000).toISOString(),
@@ -1490,8 +1559,10 @@ async function runAgentLoop(config, options = {}) {
1490
1559
  log: (line) => temporalLogger.info(line),
1491
1560
  });
1492
1561
  temporalRuntime = temporalAssembly.runtime;
1493
- const { rawStoreForApi, enabledConnectorNames, connectorSchedulerStop } = await (0, connector_init_js_1.initConnectors)(connectorExtractionFn, { nudge: () => triggerLoopNudge.current?.() });
1494
- codeActRawConnectors = resolveCodeActRawConnectors(enabledConnectorNames);
1562
+ const { rawStoreForApi, enabledConnectorNames, connectorSchedulerStop } = await (0, connector_init_js_1.initConnectors)(connectorExtractionFn, {
1563
+ connectorConfigLoadResult,
1564
+ nudge: () => triggerLoopNudge.current?.(),
1565
+ });
1495
1566
  // Inject rawStore into tool executor for agent_test connector data access
1496
1567
  if (rawStoreForApi) {
1497
1568
  toolExecutor.setRawStore(rawStoreForApi);
@@ -1525,7 +1596,7 @@ async function runAgentLoop(config, options = {}) {
1525
1596
  const { createTriggerAgentRuntime } = await import('../../operator/trigger-author.js');
1526
1597
  const { reviewTriggerCLI } = await import('../../operator/trigger-review.js');
1527
1598
  const { ReportScheduler, FileReportScheduleStore, parseReportHours } = await import('../../operator/report-scheduler.js');
1528
- const { persistLastFullReport } = await import('../../operator/report-carry.js');
1599
+ const { createTelegramReportCarryDelivery, createTelegramReportOutput } = await import('../../operator/report-carry-delivery.js');
1529
1600
  // Set when a report is composed, read when that same report is delivered. Safe
1530
1601
  // because ALL operator work serializes on the operator lane (SOURCE_GLOBAL_LANES),
1531
1602
  // so compose and deliver cannot interleave with another report - stated here
@@ -1542,10 +1613,14 @@ async function runAgentLoop(config, options = {}) {
1542
1613
  // Owner-report leg (M1.5): destination chat comes from env (~/.mama/start.sh),
1543
1614
  // never source. No chat configured or no telegram gateway -> loop stays read-only.
1544
1615
  const reportChatId = resolveOperatorReportChatId(process.env, config.telegram?.allowed_chats);
1616
+ const persistReportCarry = reportChatId
1617
+ ? createTelegramReportCarryDelivery({
1618
+ reportChatId,
1619
+ carryStore: new report_carry_js_1.FileReportCarryStore(),
1620
+ })
1621
+ : undefined;
1545
1622
  const reportOutput = reportChatId && telegramGateway
1546
- ? {
1547
- send: (text, deliveryId) => telegramGateway.sendMessage(reportChatId, text, deliveryId ?? `operator-report:legacy:${(0, node_crypto_1.randomUUID)()}`),
1548
- }
1623
+ ? createTelegramReportOutput({ reportChatId, telegramSender: telegramGateway })
1549
1624
  : undefined;
1550
1625
  // Scheduled full-report leg (M2): local hours from env (~/.mama/start.sh), never source.
1551
1626
  // Empty/absent -> [] -> leg off. Requires the same telegram sink as the digest leg.
@@ -1560,7 +1635,11 @@ async function runAgentLoop(config, options = {}) {
1560
1635
  const triggerAgentRuntime = createTriggerAgentRuntime(runtimeBackend, {
1561
1636
  model: config.agent.model,
1562
1637
  cwd: workspaceRoot,
1563
- command: process.env.MAMA_CODEX_COMMAND,
1638
+ command: runtimeBackend === 'cline'
1639
+ ? (process.env.MAMA_CLINE_COMMAND ?? config.agent.cline_command)
1640
+ : process.env.MAMA_CODEX_COMMAND,
1641
+ provider: config.agent.cline_provider,
1642
+ dataDir: config.agent.cline_data_dir,
1564
1643
  });
1565
1644
  stopTriggerAgentRuntime = () => triggerAgentRuntime.stop();
1566
1645
  const triggerLoop = new OperatorTriggerLoop({
@@ -1610,7 +1689,9 @@ async function runAgentLoop(config, options = {}) {
1610
1689
  // read authority is bounded per tool by envelope/tool-connector-scope.ts
1611
1690
  // against the connectors granted here.
1612
1691
  project_refs: [{ kind: 'project', id: projectId }],
1613
- raw_connectors: codeActRawConnectors,
1692
+ raw_connectors: [
1693
+ ...privateConnectorPolicy.projectRawConnectors('operator-report', codeActRawConnectors),
1694
+ ],
1614
1695
  memory_scopes: uniqueMemoryScopes((0, scope_context_js_1.deriveMemoryScopes)({ source: 'operator', channelId: 'report', projectId })),
1615
1696
  allowed_destinations: [],
1616
1697
  },
@@ -1621,6 +1702,7 @@ async function runAgentLoop(config, options = {}) {
1621
1702
  }
1622
1703
  : undefined,
1623
1704
  run: async (prompt, envelope) => {
1705
+ const reportAgentPolicy = buildOperatorReportAgentPolicy(config.agent.model, runtimeBackend, privateConnectorPolicy);
1624
1706
  const result = await agentLoop.runWithContent([{ type: 'text', text: prompt }], {
1625
1707
  sessionKey: report_run_js_1.OPERATOR_REPORT_SESSION_KEY,
1626
1708
  source: 'operator',
@@ -1630,8 +1712,8 @@ async function runAgentLoop(config, options = {}) {
1630
1712
  // gather no matter what the prompt instructs (roleAllowsOuterCodeAct
1631
1713
  // fails closed on an absent role - agent-loop.ts). Same built-in
1632
1714
  // least-privilege treatment the Stage-2 workers get.
1633
- agentContext: buildOperatorReportAgentPolicy(config.agent.model, runtimeBackend)
1634
- .agentContext,
1715
+ agentContext: reportAgentPolicy.agentContext,
1716
+ gatewayToolsPrompt: reportAgentPolicy.gatewayToolsPrompt,
1635
1717
  // Stateless report lane: each run starts on a fresh session so the
1636
1718
  // continuous session no longer accumulates every run's gather dumps
1637
1719
  // (measured 146s -> 521s growth over 3 days). Continuity comes from
@@ -1667,11 +1749,15 @@ async function runAgentLoop(config, options = {}) {
1667
1749
  // Kagemusha dual output: the same scheduled run updates the /ui operator board
1668
1750
  // slots via report_publish, then writes the plain-text owner report.
1669
1751
  fullReportBoardLines: buildBoardPublishLines(),
1670
- // S1-T4 context carry: the delivered FULL report persists so the owner
1671
- // console references it per turn instead of fabricating status.
1672
- persistLastFullReport: (iso, text) => {
1752
+ // TG-06: composition supplies provenance immediately to the prepared
1753
+ // delivery; this callback receives that durable artifact only after send success.
1754
+ fullReportProvenance: () => lastReportProvenance,
1755
+ persistLastFullReport: (report) => {
1673
1756
  (0, leg_cadence_js_1.getLegCadence)()?.beat('full-report');
1674
- return persistLastFullReport(iso, text, lastReportProvenance);
1757
+ if (!persistReportCarry) {
1758
+ throw new Error('Cannot persist full report carry without a Telegram report chat');
1759
+ }
1760
+ persistReportCarry(report);
1675
1761
  },
1676
1762
  pendingReportStore: new FilePendingReportStore((0, config_manager_js_1.expandPath)('~/.mama/operator/pending-owner-reports.json'), (line) => console.error(line)),
1677
1763
  config: {
@@ -1725,7 +1811,7 @@ async function runAgentLoop(config, options = {}) {
1725
1811
  maxTurns: conductorConfig.maxTurns,
1726
1812
  maxTokens: conductorConfig.maxTokens,
1727
1813
  });
1728
- const conductorPolicy = buildConductorAgentPolicy(config.agent.model, runtimeBackend);
1814
+ const conductorPolicy = buildConductorAgentPolicy(config.agent.model, runtimeBackend, privateConnectorPolicy);
1729
1815
  // Per-run envelope, mirroring the report lane: without it every
1730
1816
  // model_tool call dies 'envelope_missing' while the run resolves and
1731
1817
  // acks the batch - zero work, green ledger (review F2).
@@ -1819,6 +1905,8 @@ async function runAgentLoop(config, options = {}) {
1819
1905
  envelopeMetadata: envelopeBootstrap.metadata,
1820
1906
  envelopeAuthority: envelopeBootstrap.envelopeAuthority,
1821
1907
  contextCompileService,
1908
+ connectorConfigLoadResult,
1909
+ privateConnectorPolicy,
1822
1910
  });
1823
1911
  channelDeltaSink.current = (channelKey, lines, eventIds) => eventBus.emit({ type: 'operator:channel-delta', channelKey, lines, eventIds });
1824
1912
  await (0, api_routes_init_js_1.registerApiRoutes)({
@@ -1834,6 +1922,10 @@ async function runAgentLoop(config, options = {}) {
1834
1922
  slackGateway,
1835
1923
  graphHandler,
1836
1924
  getAdapter,
1925
+ privateConnectorPolicy,
1926
+ rawConnectorScope: [
1927
+ ...privateConnectorPolicy.projectRawConnectors('workorder-board', codeActRawConnectors),
1928
+ ],
1837
1929
  sessionsDb: db,
1838
1930
  workOrderConsumer: workOrderConsumer ?? undefined,
1839
1931
  });
@@ -1859,6 +1951,7 @@ async function runAgentLoop(config, options = {}) {
1859
1951
  pluginLoader,
1860
1952
  agentLoop,
1861
1953
  memoryAgentLoop,
1954
+ stopExtraction,
1862
1955
  sessionStore,
1863
1956
  db,
1864
1957
  metricsStore,