@jungjaehoon/mama-os 0.28.6 → 0.29.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 (448) hide show
  1. package/dist/agent/agent-loop.d.ts +0 -4
  2. package/dist/agent/agent-loop.d.ts.map +1 -1
  3. package/dist/agent/agent-loop.js +33 -10
  4. package/dist/agent/agent-loop.js.map +1 -1
  5. package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
  6. package/dist/agent/code-act/host-bridge.js +53 -3
  7. package/dist/agent/code-act/host-bridge.js.map +1 -1
  8. package/dist/agent/code-act/tool-policy.d.ts.map +1 -1
  9. package/dist/agent/code-act/tool-policy.js +5 -0
  10. package/dist/agent/code-act/tool-policy.js.map +1 -1
  11. package/dist/agent/codex-auth.d.ts +0 -1
  12. package/dist/agent/codex-auth.d.ts.map +1 -1
  13. package/dist/agent/codex-auth.js +0 -4
  14. package/dist/agent/codex-auth.js.map +1 -1
  15. package/dist/agent/codex-home.d.ts +0 -2
  16. package/dist/agent/codex-home.d.ts.map +1 -1
  17. package/dist/agent/codex-home.js +0 -66
  18. package/dist/agent/codex-home.js.map +1 -1
  19. package/dist/agent/context-compile-service.d.ts +9 -0
  20. package/dist/agent/context-compile-service.d.ts.map +1 -1
  21. package/dist/agent/context-compile-service.js +6 -0
  22. package/dist/agent/context-compile-service.js.map +1 -1
  23. package/dist/agent/context-prompt-builder.d.ts +0 -6
  24. package/dist/agent/context-prompt-builder.d.ts.map +1 -1
  25. package/dist/agent/context-prompt-builder.js +0 -131
  26. package/dist/agent/context-prompt-builder.js.map +1 -1
  27. package/dist/agent/contract-extractor.d.ts +0 -4
  28. package/dist/agent/contract-extractor.d.ts.map +1 -1
  29. package/dist/agent/contract-extractor.js +0 -68
  30. package/dist/agent/contract-extractor.js.map +1 -1
  31. package/dist/agent/gateway-tool-executor.d.ts +20 -15
  32. package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
  33. package/dist/agent/gateway-tool-executor.js +236 -90
  34. package/dist/agent/gateway-tool-executor.js.map +1 -1
  35. package/dist/agent/gateway-tools.md +7 -4
  36. package/dist/agent/skill-loader.d.ts +0 -7
  37. package/dist/agent/skill-loader.d.ts.map +1 -1
  38. package/dist/agent/skill-loader.js +0 -86
  39. package/dist/agent/skill-loader.js.map +1 -1
  40. package/dist/agent/token-estimator.d.ts +0 -8
  41. package/dist/agent/token-estimator.d.ts.map +1 -1
  42. package/dist/agent/token-estimator.js +0 -14
  43. package/dist/agent/token-estimator.js.map +1 -1
  44. package/dist/agent/tool-registry.d.ts.map +1 -1
  45. package/dist/agent/tool-registry.js +23 -5
  46. package/dist/agent/tool-registry.js.map +1 -1
  47. package/dist/agent/types.d.ts +27 -1
  48. package/dist/agent/types.d.ts.map +1 -1
  49. package/dist/agent/types.js.map +1 -1
  50. package/dist/api/agent-graph-handler.d.ts +9 -0
  51. package/dist/api/agent-graph-handler.d.ts.map +1 -1
  52. package/dist/api/agent-graph-handler.js +27 -1
  53. package/dist/api/agent-graph-handler.js.map +1 -1
  54. package/dist/api/entity-audit-handler.d.ts +1 -2
  55. package/dist/api/entity-audit-handler.d.ts.map +1 -1
  56. package/dist/api/entity-audit-handler.js +0 -5
  57. package/dist/api/entity-audit-handler.js.map +1 -1
  58. package/dist/api/index.d.ts +1 -9
  59. package/dist/api/index.d.ts.map +1 -1
  60. package/dist/api/index.js +4 -17
  61. package/dist/api/index.js.map +1 -1
  62. package/dist/api/intelligence-handler.d.ts +0 -5
  63. package/dist/api/intelligence-handler.d.ts.map +1 -1
  64. package/dist/api/intelligence-handler.js +0 -15
  65. package/dist/api/intelligence-handler.js.map +1 -1
  66. package/dist/api/types.d.ts +1 -5
  67. package/dist/api/types.d.ts.map +1 -1
  68. package/dist/api/types.js +0 -14
  69. package/dist/api/types.js.map +1 -1
  70. package/dist/cli/commands/start.d.ts +117 -3
  71. package/dist/cli/commands/start.d.ts.map +1 -1
  72. package/dist/cli/commands/start.js +223 -62
  73. package/dist/cli/commands/start.js.map +1 -1
  74. package/dist/cli/config/config-manager.d.ts +0 -5
  75. package/dist/cli/config/config-manager.d.ts.map +1 -1
  76. package/dist/cli/config/config-manager.js +0 -29
  77. package/dist/cli/config/config-manager.js.map +1 -1
  78. package/dist/cli/config/types.d.ts.map +1 -1
  79. package/dist/cli/config/types.js +3 -0
  80. package/dist/cli/config/types.js.map +1 -1
  81. package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
  82. package/dist/cli/runtime/api-routes-init.js +32 -5
  83. package/dist/cli/runtime/api-routes-init.js.map +1 -1
  84. package/dist/cli/runtime/api-server-init.d.ts.map +1 -1
  85. package/dist/cli/runtime/api-server-init.js +2 -0
  86. package/dist/cli/runtime/api-server-init.js.map +1 -1
  87. package/dist/cli/runtime/gateway-init.d.ts +1 -1
  88. package/dist/cli/runtime/gateway-init.d.ts.map +1 -1
  89. package/dist/cli/runtime/gateway-init.js +11 -38
  90. package/dist/cli/runtime/gateway-init.js.map +1 -1
  91. package/dist/cli/runtime/gateway-wiring.d.ts.map +1 -1
  92. package/dist/cli/runtime/gateway-wiring.js +6 -120
  93. package/dist/cli/runtime/gateway-wiring.js.map +1 -1
  94. package/dist/cli/utils/pid-manager.d.ts +0 -10
  95. package/dist/cli/utils/pid-manager.d.ts.map +1 -1
  96. package/dist/cli/utils/pid-manager.js +0 -26
  97. package/dist/cli/utils/pid-manager.js.map +1 -1
  98. package/dist/connectors/framework/polling-scheduler.d.ts +33 -1
  99. package/dist/connectors/framework/polling-scheduler.d.ts.map +1 -1
  100. package/dist/connectors/framework/polling-scheduler.js +46 -40
  101. package/dist/connectors/framework/polling-scheduler.js.map +1 -1
  102. package/dist/connectors/trello/query-tools.d.ts +32 -5
  103. package/dist/connectors/trello/query-tools.d.ts.map +1 -1
  104. package/dist/connectors/trello/query-tools.js +56 -17
  105. package/dist/connectors/trello/query-tools.js.map +1 -1
  106. package/dist/db/agent-store.d.ts +0 -4
  107. package/dist/db/agent-store.d.ts.map +1 -1
  108. package/dist/db/agent-store.js +0 -65
  109. package/dist/db/agent-store.js.map +1 -1
  110. package/dist/envelope/enforcer.d.ts.map +1 -1
  111. package/dist/envelope/enforcer.js +10 -1
  112. package/dist/envelope/enforcer.js.map +1 -1
  113. package/dist/envelope/index.d.ts +0 -1
  114. package/dist/envelope/index.d.ts.map +1 -1
  115. package/dist/envelope/index.js +0 -1
  116. package/dist/envelope/index.js.map +1 -1
  117. package/dist/envelope/signature.d.ts +0 -1
  118. package/dist/envelope/signature.d.ts.map +1 -1
  119. package/dist/envelope/signature.js +0 -7
  120. package/dist/envelope/signature.js.map +1 -1
  121. package/dist/envelope/tool-connector-scope.d.ts +35 -0
  122. package/dist/envelope/tool-connector-scope.d.ts.map +1 -0
  123. package/dist/envelope/tool-connector-scope.js +57 -0
  124. package/dist/envelope/tool-connector-scope.js.map +1 -0
  125. package/dist/evidence/effects.d.ts +107 -0
  126. package/dist/evidence/effects.d.ts.map +1 -0
  127. package/dist/evidence/effects.js +281 -0
  128. package/dist/evidence/effects.js.map +1 -0
  129. package/dist/evidence/read.d.ts +75 -0
  130. package/dist/evidence/read.d.ts.map +1 -0
  131. package/dist/evidence/read.js +105 -0
  132. package/dist/evidence/read.js.map +1 -0
  133. package/dist/gateways/base-gateway.d.ts +23 -3
  134. package/dist/gateways/base-gateway.d.ts.map +1 -1
  135. package/dist/gateways/base-gateway.js +15 -2
  136. package/dist/gateways/base-gateway.js.map +1 -1
  137. package/dist/gateways/discord.d.ts +4 -16
  138. package/dist/gateways/discord.d.ts.map +1 -1
  139. package/dist/gateways/discord.js +22 -189
  140. package/dist/gateways/discord.js.map +1 -1
  141. package/dist/gateways/index.d.ts +2 -1
  142. package/dist/gateways/index.d.ts.map +1 -1
  143. package/dist/gateways/message-router.d.ts +13 -20
  144. package/dist/gateways/message-router.d.ts.map +1 -1
  145. package/dist/gateways/message-router.js +32 -3
  146. package/dist/gateways/message-router.js.map +1 -1
  147. package/dist/gateways/slack.d.ts +2 -12
  148. package/dist/gateways/slack.d.ts.map +1 -1
  149. package/dist/gateways/slack.js +6 -220
  150. package/dist/gateways/slack.js.map +1 -1
  151. package/dist/gateways/telegram.d.ts +2 -2
  152. package/dist/gateways/telegram.d.ts.map +1 -1
  153. package/dist/gateways/telegram.js +3 -2
  154. package/dist/gateways/telegram.js.map +1 -1
  155. package/dist/gateways/turn-contract.d.ts +104 -0
  156. package/dist/gateways/turn-contract.d.ts.map +1 -0
  157. package/dist/{memory/consult-contract.js → gateways/turn-contract.js} +1 -1
  158. package/dist/gateways/turn-contract.js.map +1 -0
  159. package/dist/memory/provenance-live.d.ts +111 -0
  160. package/dist/memory/provenance-live.d.ts.map +1 -0
  161. package/dist/memory/provenance-live.js +381 -0
  162. package/dist/memory/provenance-live.js.map +1 -0
  163. package/dist/memory/provenance-resolver.d.ts +184 -0
  164. package/dist/memory/provenance-resolver.d.ts.map +1 -0
  165. package/dist/memory/provenance-resolver.js +152 -0
  166. package/dist/memory/provenance-resolver.js.map +1 -0
  167. package/dist/multi-agent/agent-event-bus.d.ts +1 -0
  168. package/dist/multi-agent/agent-event-bus.d.ts.map +1 -1
  169. package/dist/multi-agent/bmad-templates.d.ts +0 -18
  170. package/dist/multi-agent/bmad-templates.d.ts.map +1 -1
  171. package/dist/multi-agent/bmad-templates.js +0 -127
  172. package/dist/multi-agent/bmad-templates.js.map +1 -1
  173. package/dist/multi-agent/dashboard-agent-persona.js +3 -3
  174. package/dist/operator/board-reconcile.d.ts +2 -3
  175. package/dist/operator/board-reconcile.d.ts.map +1 -1
  176. package/dist/operator/board-reconcile.js +18 -32
  177. package/dist/operator/board-reconcile.js.map +1 -1
  178. package/dist/operator/changes-projection.d.ts +70 -0
  179. package/dist/operator/changes-projection.d.ts.map +1 -0
  180. package/dist/operator/changes-projection.js +109 -0
  181. package/dist/operator/changes-projection.js.map +1 -0
  182. package/dist/operator/external-correlation.d.ts +94 -0
  183. package/dist/operator/external-correlation.d.ts.map +1 -0
  184. package/dist/operator/external-correlation.js +177 -0
  185. package/dist/operator/external-correlation.js.map +1 -0
  186. package/dist/operator/operator-trigger-loop.d.ts +9 -1
  187. package/dist/operator/operator-trigger-loop.d.ts.map +1 -1
  188. package/dist/operator/operator-trigger-loop.js +8 -4
  189. package/dist/operator/operator-trigger-loop.js.map +1 -1
  190. package/dist/operator/provenance-lookup.d.ts +18 -0
  191. package/dist/operator/provenance-lookup.d.ts.map +1 -0
  192. package/dist/operator/provenance-lookup.js +54 -0
  193. package/dist/operator/provenance-lookup.js.map +1 -0
  194. package/dist/operator/report-carry.d.ts +18 -1
  195. package/dist/operator/report-carry.d.ts.map +1 -1
  196. package/dist/operator/report-carry.js +22 -3
  197. package/dist/operator/report-carry.js.map +1 -1
  198. package/dist/operator/report-run.d.ts +31 -0
  199. package/dist/operator/report-run.d.ts.map +1 -1
  200. package/dist/operator/report-run.js +140 -22
  201. package/dist/operator/report-run.js.map +1 -1
  202. package/dist/operator/task-ledger.d.ts +84 -2
  203. package/dist/operator/task-ledger.d.ts.map +1 -1
  204. package/dist/operator/task-ledger.js +274 -31
  205. package/dist/operator/task-ledger.js.map +1 -1
  206. package/dist/operator/worker-run.js +1 -1
  207. package/dist/operator/worker-run.js.map +1 -1
  208. package/dist/operator/workorder-hooks.d.ts +79 -4
  209. package/dist/operator/workorder-hooks.d.ts.map +1 -1
  210. package/dist/operator/workorder-hooks.js +152 -20
  211. package/dist/operator/workorder-hooks.js.map +1 -1
  212. package/dist/operator/workorder-publishers.d.ts +2 -0
  213. package/dist/operator/workorder-publishers.d.ts.map +1 -1
  214. package/dist/operator/workorder-publishers.js +8 -1
  215. package/dist/operator/workorder-publishers.js.map +1 -1
  216. package/dist/utils/untrusted-content.d.ts +11 -0
  217. package/dist/utils/untrusted-content.d.ts.map +1 -1
  218. package/dist/utils/untrusted-content.js +20 -0
  219. package/dist/utils/untrusted-content.js.map +1 -1
  220. package/package.json +4 -3
  221. package/scripts/backfill-channel-keys.ts +451 -0
  222. package/dist/agent/auto-recall.d.ts +0 -48
  223. package/dist/agent/auto-recall.d.ts.map +0 -1
  224. package/dist/agent/auto-recall.js +0 -192
  225. package/dist/agent/auto-recall.js.map +0 -1
  226. package/dist/agent/claude-client.d.ts +0 -50
  227. package/dist/agent/claude-client.d.ts.map +0 -1
  228. package/dist/agent/claude-client.js +0 -219
  229. package/dist/agent/claude-client.js.map +0 -1
  230. package/dist/agent/delegation-executor.d.ts +0 -49
  231. package/dist/agent/delegation-executor.d.ts.map +0 -1
  232. package/dist/agent/delegation-executor.js +0 -692
  233. package/dist/agent/delegation-executor.js.map +0 -1
  234. package/dist/agent/mcp-executor.d.ts +0 -60
  235. package/dist/agent/mcp-executor.d.ts.map +0 -1
  236. package/dist/agent/mcp-executor.js +0 -190
  237. package/dist/agent/mcp-executor.js.map +0 -1
  238. package/dist/agent/process-tree.d.ts +0 -6
  239. package/dist/agent/process-tree.d.ts.map +0 -1
  240. package/dist/agent/process-tree.js +0 -21
  241. package/dist/agent/process-tree.js.map +0 -1
  242. package/dist/agent/streaming-callback-manager.d.ts +0 -85
  243. package/dist/agent/streaming-callback-manager.d.ts.map +0 -1
  244. package/dist/agent/streaming-callback-manager.js +0 -103
  245. package/dist/agent/streaming-callback-manager.js.map +0 -1
  246. package/dist/agent/token-budget.d.ts +0 -49
  247. package/dist/agent/token-budget.d.ts.map +0 -1
  248. package/dist/agent/token-budget.js +0 -92
  249. package/dist/agent/token-budget.js.map +0 -1
  250. package/dist/connectors/kagemusha/history-compiler.d.ts +0 -18
  251. package/dist/connectors/kagemusha/history-compiler.d.ts.map +0 -1
  252. package/dist/connectors/kagemusha/history-compiler.js +0 -35
  253. package/dist/connectors/kagemusha/history-compiler.js.map +0 -1
  254. package/dist/db/migrations/wiki-artifacts.d.ts +0 -3
  255. package/dist/db/migrations/wiki-artifacts.d.ts.map +0 -1
  256. package/dist/db/migrations/wiki-artifacts.js +0 -24
  257. package/dist/db/migrations/wiki-artifacts.js.map +0 -1
  258. package/dist/envelope/subset.d.ts +0 -9
  259. package/dist/envelope/subset.d.ts.map +0 -1
  260. package/dist/envelope/subset.js +0 -67
  261. package/dist/envelope/subset.js.map +0 -1
  262. package/dist/memory/consult-contract.d.ts +0 -8
  263. package/dist/memory/consult-contract.d.ts.map +0 -1
  264. package/dist/memory/consult-contract.js.map +0 -1
  265. package/dist/multi-agent/agent-message-queue.d.ts +0 -104
  266. package/dist/multi-agent/agent-message-queue.d.ts.map +0 -1
  267. package/dist/multi-agent/agent-message-queue.js +0 -227
  268. package/dist/multi-agent/agent-message-queue.js.map +0 -1
  269. package/dist/multi-agent/background-task-manager.d.ts +0 -248
  270. package/dist/multi-agent/background-task-manager.d.ts.map +0 -1
  271. package/dist/multi-agent/background-task-manager.js +0 -415
  272. package/dist/multi-agent/background-task-manager.js.map +0 -1
  273. package/dist/multi-agent/category-router.d.ts +0 -56
  274. package/dist/multi-agent/category-router.d.ts.map +0 -1
  275. package/dist/multi-agent/category-router.js +0 -99
  276. package/dist/multi-agent/category-router.js.map +0 -1
  277. package/dist/multi-agent/council-engine.d.ts +0 -60
  278. package/dist/multi-agent/council-engine.d.ts.map +0 -1
  279. package/dist/multi-agent/council-engine.js +0 -284
  280. package/dist/multi-agent/council-engine.js.map +0 -1
  281. package/dist/multi-agent/delegation-format-validator.d.ts +0 -22
  282. package/dist/multi-agent/delegation-format-validator.d.ts.map +0 -1
  283. package/dist/multi-agent/delegation-format-validator.js +0 -31
  284. package/dist/multi-agent/delegation-format-validator.js.map +0 -1
  285. package/dist/multi-agent/delegation-manager.d.ts +0 -128
  286. package/dist/multi-agent/delegation-manager.d.ts.map +0 -1
  287. package/dist/multi-agent/delegation-manager.js +0 -276
  288. package/dist/multi-agent/delegation-manager.js.map +0 -1
  289. package/dist/multi-agent/i18n-messages.d.ts +0 -35
  290. package/dist/multi-agent/i18n-messages.d.ts.map +0 -1
  291. package/dist/multi-agent/i18n-messages.js +0 -54
  292. package/dist/multi-agent/i18n-messages.js.map +0 -1
  293. package/dist/multi-agent/index.d.ts +0 -31
  294. package/dist/multi-agent/index.d.ts.map +0 -1
  295. package/dist/multi-agent/index.js +0 -46
  296. package/dist/multi-agent/index.js.map +0 -1
  297. package/dist/multi-agent/multi-agent-base.d.ts +0 -223
  298. package/dist/multi-agent/multi-agent-base.d.ts.map +0 -1
  299. package/dist/multi-agent/multi-agent-base.js +0 -592
  300. package/dist/multi-agent/multi-agent-base.js.map +0 -1
  301. package/dist/multi-agent/multi-agent-discord.d.ts +0 -142
  302. package/dist/multi-agent/multi-agent-discord.d.ts.map +0 -1
  303. package/dist/multi-agent/multi-agent-discord.js +0 -1235
  304. package/dist/multi-agent/multi-agent-discord.js.map +0 -1
  305. package/dist/multi-agent/multi-agent-slack.d.ts +0 -146
  306. package/dist/multi-agent/multi-agent-slack.d.ts.map +0 -1
  307. package/dist/multi-agent/multi-agent-slack.js +0 -953
  308. package/dist/multi-agent/multi-agent-slack.js.map +0 -1
  309. package/dist/multi-agent/multi-bot-manager.d.ts +0 -119
  310. package/dist/multi-agent/multi-bot-manager.d.ts.map +0 -1
  311. package/dist/multi-agent/multi-bot-manager.js +0 -449
  312. package/dist/multi-agent/multi-bot-manager.js.map +0 -1
  313. package/dist/multi-agent/orchestrator.d.ts +0 -110
  314. package/dist/multi-agent/orchestrator.d.ts.map +0 -1
  315. package/dist/multi-agent/orchestrator.js +0 -436
  316. package/dist/multi-agent/orchestrator.js.map +0 -1
  317. package/dist/multi-agent/rate-limiter.d.ts +0 -76
  318. package/dist/multi-agent/rate-limiter.d.ts.map +0 -1
  319. package/dist/multi-agent/rate-limiter.js +0 -128
  320. package/dist/multi-agent/rate-limiter.js.map +0 -1
  321. package/dist/multi-agent/shared-context.d.ts +0 -127
  322. package/dist/multi-agent/shared-context.d.ts.map +0 -1
  323. package/dist/multi-agent/shared-context.js +0 -239
  324. package/dist/multi-agent/shared-context.js.map +0 -1
  325. package/dist/multi-agent/slack-config-validator.d.ts +0 -42
  326. package/dist/multi-agent/slack-config-validator.d.ts.map +0 -1
  327. package/dist/multi-agent/slack-config-validator.js +0 -194
  328. package/dist/multi-agent/slack-config-validator.js.map +0 -1
  329. package/dist/multi-agent/slack-multi-bot-manager.d.ts +0 -143
  330. package/dist/multi-agent/slack-multi-bot-manager.d.ts.map +0 -1
  331. package/dist/multi-agent/slack-multi-bot-manager.js +0 -413
  332. package/dist/multi-agent/slack-multi-bot-manager.js.map +0 -1
  333. package/dist/multi-agent/swarm/swarm-anti-pattern-detector.d.ts +0 -98
  334. package/dist/multi-agent/swarm/swarm-anti-pattern-detector.d.ts.map +0 -1
  335. package/dist/multi-agent/swarm/swarm-anti-pattern-detector.js +0 -225
  336. package/dist/multi-agent/swarm/swarm-anti-pattern-detector.js.map +0 -1
  337. package/dist/multi-agent/swarm/swarm-db.d.ts +0 -175
  338. package/dist/multi-agent/swarm/swarm-db.d.ts.map +0 -1
  339. package/dist/multi-agent/swarm/swarm-db.js +0 -313
  340. package/dist/multi-agent/swarm/swarm-db.js.map +0 -1
  341. package/dist/multi-agent/swarm/swarm-event-reporter.d.ts +0 -116
  342. package/dist/multi-agent/swarm/swarm-event-reporter.d.ts.map +0 -1
  343. package/dist/multi-agent/swarm/swarm-event-reporter.js +0 -243
  344. package/dist/multi-agent/swarm/swarm-event-reporter.js.map +0 -1
  345. package/dist/multi-agent/swarm/swarm-mama-adapter.d.ts +0 -57
  346. package/dist/multi-agent/swarm/swarm-mama-adapter.d.ts.map +0 -1
  347. package/dist/multi-agent/swarm/swarm-mama-adapter.js +0 -87
  348. package/dist/multi-agent/swarm/swarm-mama-adapter.js.map +0 -1
  349. package/dist/multi-agent/swarm/swarm-manager.d.ts +0 -122
  350. package/dist/multi-agent/swarm/swarm-manager.d.ts.map +0 -1
  351. package/dist/multi-agent/swarm/swarm-manager.js +0 -199
  352. package/dist/multi-agent/swarm/swarm-manager.js.map +0 -1
  353. package/dist/multi-agent/swarm/swarm-task-learner.d.ts +0 -104
  354. package/dist/multi-agent/swarm/swarm-task-learner.d.ts.map +0 -1
  355. package/dist/multi-agent/swarm/swarm-task-learner.js +0 -211
  356. package/dist/multi-agent/swarm/swarm-task-learner.js.map +0 -1
  357. package/dist/multi-agent/swarm/swarm-task-runner.d.ts +0 -155
  358. package/dist/multi-agent/swarm/swarm-task-runner.d.ts.map +0 -1
  359. package/dist/multi-agent/swarm/swarm-task-runner.js +0 -615
  360. package/dist/multi-agent/swarm/swarm-task-runner.js.map +0 -1
  361. package/dist/multi-agent/swarm/wave-engine.d.ts +0 -96
  362. package/dist/multi-agent/swarm/wave-engine.d.ts.map +0 -1
  363. package/dist/multi-agent/swarm/wave-engine.js +0 -123
  364. package/dist/multi-agent/swarm/wave-engine.js.map +0 -1
  365. package/dist/multi-agent/system-reminder.d.ts +0 -206
  366. package/dist/multi-agent/system-reminder.d.ts.map +0 -1
  367. package/dist/multi-agent/system-reminder.js +0 -455
  368. package/dist/multi-agent/system-reminder.js.map +0 -1
  369. package/dist/multi-agent/task-continuation.d.ts +0 -74
  370. package/dist/multi-agent/task-continuation.d.ts.map +0 -1
  371. package/dist/multi-agent/task-continuation.js +0 -172
  372. package/dist/multi-agent/task-continuation.js.map +0 -1
  373. package/dist/multi-agent/ultrawork-state.d.ts +0 -57
  374. package/dist/multi-agent/ultrawork-state.d.ts.map +0 -1
  375. package/dist/multi-agent/ultrawork-state.js +0 -191
  376. package/dist/multi-agent/ultrawork-state.js.map +0 -1
  377. package/dist/multi-agent/ultrawork.d.ts +0 -152
  378. package/dist/multi-agent/ultrawork.d.ts.map +0 -1
  379. package/dist/multi-agent/ultrawork.js +0 -879
  380. package/dist/multi-agent/ultrawork.js.map +0 -1
  381. package/dist/multi-agent/work-tracker.d.ts +0 -22
  382. package/dist/multi-agent/work-tracker.d.ts.map +0 -1
  383. package/dist/multi-agent/work-tracker.js +0 -45
  384. package/dist/multi-agent/work-tracker.js.map +0 -1
  385. package/dist/multi-agent/workflow-engine.d.ts +0 -87
  386. package/dist/multi-agent/workflow-engine.d.ts.map +0 -1
  387. package/dist/multi-agent/workflow-engine.js +0 -604
  388. package/dist/multi-agent/workflow-engine.js.map +0 -1
  389. package/dist/onboarding/all-tools.d.ts +0 -18
  390. package/dist/onboarding/all-tools.d.ts.map +0 -1
  391. package/dist/onboarding/all-tools.js +0 -149
  392. package/dist/onboarding/all-tools.js.map +0 -1
  393. package/dist/onboarding/autonomous-discovery-tools.d.ts +0 -23
  394. package/dist/onboarding/autonomous-discovery-tools.d.ts.map +0 -1
  395. package/dist/onboarding/autonomous-discovery-tools.js +0 -268
  396. package/dist/onboarding/autonomous-discovery-tools.js.map +0 -1
  397. package/dist/onboarding/onboarding-state.d.ts +0 -70
  398. package/dist/onboarding/onboarding-state.d.ts.map +0 -1
  399. package/dist/onboarding/onboarding-state.js +0 -183
  400. package/dist/onboarding/onboarding-state.js.map +0 -1
  401. package/dist/onboarding/personality-quiz.d.ts +0 -35
  402. package/dist/onboarding/personality-quiz.d.ts.map +0 -1
  403. package/dist/onboarding/personality-quiz.js +0 -219
  404. package/dist/onboarding/personality-quiz.js.map +0 -1
  405. package/dist/onboarding/phase-5-summary.d.ts +0 -26
  406. package/dist/onboarding/phase-5-summary.d.ts.map +0 -1
  407. package/dist/onboarding/phase-5-summary.js +0 -153
  408. package/dist/onboarding/phase-5-summary.js.map +0 -1
  409. package/dist/onboarding/phase-6-security.d.ts +0 -33
  410. package/dist/onboarding/phase-6-security.d.ts.map +0 -1
  411. package/dist/onboarding/phase-6-security.js +0 -473
  412. package/dist/onboarding/phase-6-security.js.map +0 -1
  413. package/dist/onboarding/phase-7-integrations.d.ts +0 -91
  414. package/dist/onboarding/phase-7-integrations.d.ts.map +0 -1
  415. package/dist/onboarding/phase-7-integrations.js +0 -725
  416. package/dist/onboarding/phase-7-integrations.js.map +0 -1
  417. package/dist/onboarding/phase-8-demo.d.ts +0 -43
  418. package/dist/onboarding/phase-8-demo.d.ts.map +0 -1
  419. package/dist/onboarding/phase-8-demo.js +0 -346
  420. package/dist/onboarding/phase-8-demo.js.map +0 -1
  421. package/dist/onboarding/phase-9-finalization.d.ts +0 -27
  422. package/dist/onboarding/phase-9-finalization.d.ts.map +0 -1
  423. package/dist/onboarding/phase-9-finalization.js +0 -417
  424. package/dist/onboarding/phase-9-finalization.js.map +0 -1
  425. package/dist/onboarding/ritual-prompt.d.ts +0 -2
  426. package/dist/onboarding/ritual-prompt.d.ts.map +0 -1
  427. package/dist/onboarding/ritual-prompt.js +0 -285
  428. package/dist/onboarding/ritual-prompt.js.map +0 -1
  429. package/dist/onboarding/ritual-tools.d.ts +0 -17
  430. package/dist/onboarding/ritual-tools.d.ts.map +0 -1
  431. package/dist/onboarding/ritual-tools.js +0 -93
  432. package/dist/onboarding/ritual-tools.js.map +0 -1
  433. package/dist/setup/setup-tools.d.ts +0 -13
  434. package/dist/setup/setup-tools.d.ts.map +0 -1
  435. package/dist/setup/setup-tools.js +0 -106
  436. package/dist/setup/setup-tools.js.map +0 -1
  437. package/dist/utils/slack-input-validator.d.ts +0 -74
  438. package/dist/utils/slack-input-validator.d.ts.map +0 -1
  439. package/dist/utils/slack-input-validator.js +0 -275
  440. package/dist/utils/slack-input-validator.js.map +0 -1
  441. package/dist/utils/slack-rate-limiter.d.ts +0 -139
  442. package/dist/utils/slack-rate-limiter.d.ts.map +0 -1
  443. package/dist/utils/slack-rate-limiter.js +0 -324
  444. package/dist/utils/slack-rate-limiter.js.map +0 -1
  445. package/dist/wiki/wiki-compiler.d.ts +0 -13
  446. package/dist/wiki/wiki-compiler.d.ts.map +0 -1
  447. package/dist/wiki/wiki-compiler.js +0 -82
  448. package/dist/wiki/wiki-compiler.js.map +0 -1
@@ -16,37 +16,10 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.ReconcileScheduler = exports.RECONCILE_RUN_TOKEN = void 0;
19
- exports.buildReconcilePrompt = buildReconcilePrompt;
20
19
  /** The prompt MUST begin with this token so the persona's RECONCILE RUN mode engages. */
21
20
  exports.RECONCILE_RUN_TOKEN = 'RECONCILE RUN';
22
- function buildReconcilePrompt(input) {
23
- const label = input.channelLabel ?? input.channelKey;
24
- const scope = `reconcile:${input.channelKey}`;
25
- return [
26
- `${exports.RECONCILE_RUN_TOKEN} for channel ${label} (${input.channelKey}). Today is ${input.todayIso}.`,
27
- 'New messages arrived in this channel. Reconcile the operator board and the task ledger',
28
- 'against them. Plan (execute in order):',
29
- '1. Read the delta lines below.',
30
- `2. task_list() for existing work items${input.kagemushaContext ? ' and kagemusha_tasks() as extra CONTEXT (the native ledger stays the projection source)' : ''}.`,
31
- '3. Judge which slots are affected (briefing / action_required / decisions / pipeline).',
32
- '4. You MUST call at least ONE of: report_publish with ONLY the affected slots,',
33
- ' task_create, or task_update -- when the delta concerns work that ALREADY has a',
34
- ' task row (match by title or source in step 2), task_update that row instead of',
35
- ' creating a near-duplicate, and pass source_channel plus source_event_id from the',
36
- ' delta header so retries upsert. If NOTHING on the board or ledger is affected,',
37
- ` you MUST call contract_no_update({reason, scope: "${scope}"}) instead.`,
38
- '5. Finish with exactly one line: RECONCILED <comma-separated slots or none>.',
39
- '',
40
- 'Constraints: do not rewrite unaffected slots; no mama_save; no follow-up questions.',
41
- '- Set due_at only from trusted, unambiguous time and time zone evidence; otherwise retain date-only precision.',
42
- '- Never infer completion from calendar disappearance.',
43
- '- Never copy Trello or Kagemusha lifecycle status into the native ledger.',
44
- '',
45
- `<latest-delta channel="${input.channelKey}">`,
46
- ...input.deltaLines,
47
- '</latest-delta>',
48
- ].join('\n');
49
- }
21
+ /** Generous: live batches run 1-30. A cap that truncates is logged, never silent. */
22
+ const MAX_PENDING_EVENT_IDS = 500;
50
23
  class ReconcileScheduler {
51
24
  debounceMs;
52
25
  maxWaitMs;
@@ -68,15 +41,23 @@ class ReconcileScheduler {
68
41
  this.log = opts.log;
69
42
  this.now = opts.now ?? Date.now;
70
43
  }
71
- enqueue(channelKey, lines) {
44
+ enqueue(channelKey, lines, eventIds = []) {
72
45
  if (this.stopped)
73
46
  return;
74
47
  const state = this.channels.get(channelKey) ?? {
75
48
  pendingLines: [],
49
+ pendingEventIds: [],
76
50
  debounceTimer: null,
77
51
  firstEnqueuedAt: null,
78
52
  };
79
53
  state.pendingLines = [...state.pendingLines, ...lines].slice(-this.maxPendingLines);
54
+ const mergedIds = [...new Set([...state.pendingEventIds, ...eventIds])];
55
+ if (mergedIds.length > MAX_PENDING_EVENT_IDS) {
56
+ // Loud, because a truncated cause set understates what the run rested on and would
57
+ // otherwise look exactly like a smaller batch.
58
+ this.log(`[reconcile] ${channelKey}: cause set exceeded ${MAX_PENDING_EVENT_IDS}; dropping the oldest ${mergedIds.length - MAX_PENDING_EVENT_IDS}`);
59
+ }
60
+ state.pendingEventIds = mergedIds.slice(-MAX_PENDING_EVENT_IDS);
80
61
  if (state.firstEnqueuedAt === null)
81
62
  state.firstEnqueuedAt = this.now();
82
63
  this.channels.set(channelKey, state);
@@ -143,15 +124,20 @@ class ReconcileScheduler {
143
124
  return;
144
125
  }
145
126
  const lines = state.pendingLines;
127
+ const eventIds = state.pendingEventIds;
146
128
  state.pendingLines = [];
129
+ state.pendingEventIds = [];
147
130
  state.firstEnqueuedAt = null;
148
131
  this.runTimestamps.push(this.now());
149
132
  try {
150
- await this.run(channelKey, lines);
133
+ await this.run(channelKey, lines, eventIds);
151
134
  }
152
135
  catch (err) {
153
- // Run failure keeps the channel dirty for retry; the scheduler survives.
136
+ // Run failure keeps the channel dirty for retry; the scheduler survives. The cause
137
+ // set is restored with the lines - a retry that kept the prompt but lost the batch
138
+ // would run on evidence it could no longer name.
154
139
  state.pendingLines = [...lines, ...state.pendingLines].slice(-this.maxPendingLines);
140
+ state.pendingEventIds = [...new Set([...eventIds, ...state.pendingEventIds])].slice(-MAX_PENDING_EVENT_IDS);
155
141
  if (state.firstEnqueuedAt === null)
156
142
  state.firstEnqueuedAt = this.now();
157
143
  this.log(`[reconcile] run failed for ${channelKey}: ${err instanceof Error ? err.message : String(err)}; kept dirty for retry`);
@@ -1 +1 @@
1
- {"version":3,"file":"board-reconcile.js","sourceRoot":"","sources":["../../src/operator/board-reconcile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"board-reconcile.js","sourceRoot":"","sources":["../../src/operator/board-reconcile.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAYH,yFAAyF;AAC5E,QAAA,mBAAmB,GAAG,eAAe,CAAC;AAEnD,qFAAqF;AACrF,MAAM,qBAAqB,GAAG,GAAG,CAAC;AA+BlC,MAAa,kBAAkB;IACZ,UAAU,CAAS;IACnB,SAAS,CAAS;IAClB,gBAAgB,CAAS;IACzB,eAAe,CAAS;IACxB,GAAG,CAAmC;IACtC,GAAG,CAAmC;IACtC,GAAG,CAAe;IAE3B,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC3C,aAAa,GAAa,EAAE,CAAC;IAC7B,UAAU,GAAyC,IAAI,CAAC;IACxD,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,IAA+B;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,UAAkB,EAAE,KAAe,EAAE,WAA8B,EAAE;QAC3E,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI;YAC7C,YAAY,EAAE,EAAE;YAChB,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE,IAAI;SACtB,CAAC;QACF,KAAK,CAAC,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpF,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,SAAS,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;YAC7C,mFAAmF;YACnF,+CAA+C;YAC/C,IAAI,CAAC,GAAG,CACN,eAAe,UAAU,wBAAwB,qBAAqB,yBAAyB,SAAS,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAC1I,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,CAAC;QAChE,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI;YAAE,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAErC,IAAI,KAAK,CAAC,aAAa;YAAE,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC3D,qEAAqE;QACrE,mEAAmE;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;YAC3B,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,4EAA4E;IAC5E,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;aAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;aAC5C,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,aAAa;gBAAE,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC3D,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,UAAU;YAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAEO,eAAe;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAC3D,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa;oBAAE,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,UAAkB;QACnC,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEtD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,4EAA4E;YAC5E,IAAI,CAAC,GAAG,CACN,wCAAwC,IAAI,CAAC,gBAAgB,kBAAkB,UAAU,KAAK,KAAK,CAAC,YAAY,CAAC,MAAM,cAAc,CACtI,CAAC;YACF,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;QACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC;QACvC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;QACxB,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;QAC3B,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAEpC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mFAAmF;YACnF,mFAAmF;YACnF,iDAAiD;YACjD,KAAK,CAAC,YAAY,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpF,KAAK,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CACjF,CAAC,qBAAqB,CACvB,CAAC;YACF,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI;gBAAE,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvE,IAAI,CAAC,GAAG,CACN,8BAA8B,UAAU,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,CACtH,CAAC;YACF,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;CACF;AArID,gDAqIC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * The read side of the effect ledger: what this system changed, and on what evidence.
3
+ *
4
+ * Lives here rather than inside the gateway executor's switch so it can be tested against
5
+ * a real ledger without standing up an agent. The first cut was written inline and its
6
+ * tests drove everything EXCEPT the tool path, which is how a projection that could state
7
+ * a falsehood passed seven green tests.
8
+ *
9
+ * The falsehood it could state: rows are capped, coverage is not. With 40 attributed and
10
+ * 80 unattributed changes in a window, a default call returned 50 rows - all unattributed,
11
+ * because the newest changes skew that way while `task_update` has no cause field - beside
12
+ * a coverage count saying 40 were explainable, and nothing anywhere saying 120 matched. A
13
+ * model reading its own output could truthfully report "nothing I did is explainable".
14
+ *
15
+ * So: the counts and the rows must describe the same population, the cap must be visible,
16
+ * and a filter the caller misspells must fail loudly rather than return zero rows - "no
17
+ * rows" and "nothing changed" are the same sentence to a reader, and only one of them is
18
+ * ever true.
19
+ */
20
+ import type { EffectQuery, EffectRecord, EffectTarget } from '../evidence/effects.js';
21
+ export interface ChangesLedger {
22
+ listChanges(query: EffectQuery): EffectRecord[];
23
+ changeCoverage(sinceMs?: number, targetType?: EffectTarget): {
24
+ attributed: number;
25
+ unattributed: number;
26
+ };
27
+ }
28
+ export interface ChangesReadInput {
29
+ since?: unknown;
30
+ target_type?: unknown;
31
+ cause_state?: unknown;
32
+ limit?: unknown;
33
+ }
34
+ export interface ChangesReadFailure {
35
+ success: false;
36
+ code: 'invalid_argument';
37
+ error: string;
38
+ }
39
+ export interface ChangesReadResult {
40
+ success: true;
41
+ coverage: {
42
+ attributed: number;
43
+ unattributed: number;
44
+ };
45
+ since: string;
46
+ /** Changes matching the filter in the window - not the number returned. */
47
+ total: number;
48
+ returned: number;
49
+ changes: Array<{
50
+ kind: string;
51
+ target_type: string;
52
+ target_id: string;
53
+ cause_state: string;
54
+ source_event_ids: string[];
55
+ channel: string | null;
56
+ run_id: string | null;
57
+ at: string;
58
+ }>;
59
+ }
60
+ /**
61
+ * The window a read covers.
62
+ *
63
+ * Unparseable input falls back to the default and the resolved window is returned to the
64
+ * caller, so whatever was asked for, what was actually read is stated. Non-string input is
65
+ * not a window at all - a model emitting epoch milliseconds used to crash the tool on
66
+ * `.trim()`.
67
+ */
68
+ export declare function parseChangesSince(since: unknown, nowMs: number): number;
69
+ export declare function readChanges(ledger: ChangesLedger, input: ChangesReadInput, nowMs: number): ChangesReadResult | ChangesReadFailure;
70
+ //# sourceMappingURL=changes-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changes-projection.d.ts","sourceRoot":"","sources":["../../src/operator/changes-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAc,MAAM,wBAAwB,CAAC;AAWlG,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,EAAE,CAAC;IAChD,cAAc,CACZ,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,YAAY,GACxB;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBvE;AAyCD,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,MAAM,GACZ,iBAAiB,GAAG,kBAAkB,CAwCxC"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseChangesSince = parseChangesSince;
4
+ exports.readChanges = readChanges;
5
+ const DEFAULT_WINDOW_MS = 24 * 60 * 60 * 1000;
6
+ const DEFAULT_LIMIT = 50;
7
+ const MAX_LIMIT = 200;
8
+ /** Below this a window is not a window; it is a corrupted number reaching toISOString. */
9
+ const MIN_SINCE_MS = 0;
10
+ const TARGET_TYPES = ['task', 'report_slot', 'memory', 'wiki_page'];
11
+ const CAUSE_STATES = ['attributed', 'unattributed'];
12
+ /**
13
+ * The window a read covers.
14
+ *
15
+ * Unparseable input falls back to the default and the resolved window is returned to the
16
+ * caller, so whatever was asked for, what was actually read is stated. Non-string input is
17
+ * not a window at all - a model emitting epoch milliseconds used to crash the tool on
18
+ * `.trim()`.
19
+ */
20
+ function parseChangesSince(since, nowMs) {
21
+ const raw = typeof since === 'string' ? since.trim() : '';
22
+ if (raw === '')
23
+ return nowMs - DEFAULT_WINDOW_MS;
24
+ // Minutes are here because a caller writing "30m" is entirely ordinary, and without
25
+ // the unit it fell through to the 24-hour default - a window 48x wider than asked for.
26
+ const relative = /^(\d+)\s*([dhm])$/i.exec(raw);
27
+ if (relative) {
28
+ const unit = relative[2].toLowerCase();
29
+ const unitMs = unit === 'd' ? 24 * 60 * 60 * 1000 : unit === 'h' ? 60 * 60 * 1000 : 60 * 1000;
30
+ // Clamped: a window of 99999999999 days is not a request, and an unclamped one
31
+ // produces a timestamp that throws on the way back out.
32
+ return clampSince(nowMs - Number(relative[1]) * unitMs, nowMs);
33
+ }
34
+ const parsed = Date.parse(raw);
35
+ if (Number.isNaN(parsed))
36
+ return nowMs - DEFAULT_WINDOW_MS;
37
+ return clampSince(parsed, nowMs);
38
+ }
39
+ /** A future window returns nothing, and nothing reads as "nothing changed". */
40
+ function clampSince(sinceMs, nowMs) {
41
+ return Math.min(Math.max(sinceMs, MIN_SINCE_MS), nowMs);
42
+ }
43
+ function parseLimit(limit) {
44
+ if (limit === undefined || limit === null)
45
+ return DEFAULT_LIMIT;
46
+ const value = typeof limit === 'string' ? Number(limit.trim()) : limit;
47
+ if (typeof value !== 'number' || !Number.isInteger(value) || value < 1) {
48
+ return invalid(`limit must be a positive whole number, got: ${String(limit)}`);
49
+ }
50
+ return Math.min(value, MAX_LIMIT);
51
+ }
52
+ function parseEnum(value, allowed, field) {
53
+ if (value === undefined || value === null || value === '')
54
+ return undefined;
55
+ if (typeof value === 'string' && allowed.includes(value))
56
+ return value;
57
+ // Silently returning zero rows for a misspelt filter is the worst answer available:
58
+ // it is indistinguishable from "nothing changed".
59
+ return invalid(`${field} must be one of ${allowed.join(', ')}, got: ${String(value)}`);
60
+ }
61
+ function invalid(error) {
62
+ return { success: false, code: 'invalid_argument', error };
63
+ }
64
+ function isFailure(value) {
65
+ return (typeof value === 'object' &&
66
+ value !== null &&
67
+ value.success === false);
68
+ }
69
+ function readChanges(ledger, input, nowMs) {
70
+ const limit = parseLimit(input.limit);
71
+ if (isFailure(limit))
72
+ return limit;
73
+ const targetType = parseEnum(input.target_type, TARGET_TYPES, 'target_type');
74
+ if (isFailure(targetType))
75
+ return targetType;
76
+ const causeState = parseEnum(input.cause_state, CAUSE_STATES, 'cause_state');
77
+ if (isFailure(causeState))
78
+ return causeState;
79
+ const sinceMs = parseChangesSince(input.since, nowMs);
80
+ // Coverage is the cause_state breakdown, so it answers within the SAME target scope the
81
+ // rows were drawn from. It deliberately ignores cause_state: filtering the breakdown by
82
+ // one of its own terms would report a zero that only means "I asked for the other one".
83
+ const coverage = ledger.changeCoverage(sinceMs, targetType);
84
+ const matching = coverage.attributed + coverage.unattributed;
85
+ const total = causeState === undefined
86
+ ? matching
87
+ : causeState === 'attributed'
88
+ ? coverage.attributed
89
+ : coverage.unattributed;
90
+ const changes = ledger.listChanges({ sinceMs, targetType, causeState, limit });
91
+ return {
92
+ success: true,
93
+ coverage,
94
+ since: new Date(sinceMs).toISOString(),
95
+ total,
96
+ returned: changes.length,
97
+ changes: changes.map((change) => ({
98
+ kind: change.kind,
99
+ target_type: change.targetType,
100
+ target_id: change.targetId,
101
+ cause_state: change.causeState,
102
+ source_event_ids: change.sourceEventIds,
103
+ channel: change.channelId,
104
+ run_id: change.runId,
105
+ at: new Date(change.atMs).toISOString(),
106
+ })),
107
+ };
108
+ }
109
+ //# sourceMappingURL=changes-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changes-projection.js","sourceRoot":"","sources":["../../src/operator/changes-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Correlate native ledger rows with live external items - the join that has to exist
3
+ * before any cross-store claim.
4
+ *
5
+ * The native ledger and the external board are separate stores with no shared key:
6
+ * a row carries `source_channel` and `source_event_id`, never an external item id.
7
+ * Left to itself a model joins on titles, which produces false, missed and ambiguous
8
+ * matches and then reports them as fact. This module resolves the join the only way
9
+ * that is deterministic - through recorded provenance - and labels everything it
10
+ * cannot resolve so the caller can refuse to make a claim about it.
11
+ *
12
+ * `source_event_id` is NOT a foreign key. It is optional free-form text that a model
13
+ * supplies on task_create, so every step validates rather than assumes: exact index
14
+ * lookup, connector must match, external identifiers come from STRUCTURED metadata
15
+ * (composite-id parsing only as a legacy fallback), and a disagreement between the
16
+ * two is ambiguity, not a tie to break.
17
+ *
18
+ * H0b, the rule that costs the most when forgotten: an item missing from the live
19
+ * snapshot proves NOTHING. The poller reads only open items and emits no tombstone,
20
+ * so disappearance is archive, deletion, permission loss, a board move, or a partial
21
+ * read - never evidence of completion. Absence resolves to `historical_only`, and no
22
+ * outcome in this module ever means "done".
23
+ */
24
+ export type CorrelationOutcome = 'matched' | 'unmatched' | 'ambiguous' | 'historical_only' | 'not_applicable';
25
+ export type CorrelationReason =
26
+ /** not_applicable */
27
+ 'no_source' | 'other_connector'
28
+ /** unmatched */
29
+ | 'no_provenance' | 'provenance_not_indexed' | 'provenance_connector_mismatch' | 'external_ref_unresolvable'
30
+ /** ambiguous */
31
+ | 'provenance_conflict' | 'multiple_rows_one_item'
32
+ /** historical_only */
33
+ | 'absent_from_live_snapshot' | 'live_snapshot_incomplete'
34
+ /** matched */
35
+ | 'live_item';
36
+ export interface CorrelationLedgerRow {
37
+ id: number;
38
+ sourceChannel: string | null;
39
+ sourceEventId: string | null;
40
+ }
41
+ /** A connector_event_index row, reduced to what correlation needs. */
42
+ export interface ProvenanceRecord {
43
+ sourceConnector: string;
44
+ /** Connector-written composite identity, e.g. `<boardId>:<itemId>:<observedMs>`. */
45
+ sourceId: string;
46
+ metadata: Record<string, unknown> | null;
47
+ }
48
+ export interface LiveExternalItem {
49
+ itemId: string;
50
+ board: string;
51
+ list: string;
52
+ }
53
+ export interface ExternalRef {
54
+ boardId: string;
55
+ itemId: string;
56
+ }
57
+ export interface CorrelationInput {
58
+ /** Connector whose items are being correlated, e.g. 'trello'. */
59
+ connector: string;
60
+ rows: readonly CorrelationLedgerRow[];
61
+ lookupProvenance: (eventIndexId: string) => ProvenanceRecord | null;
62
+ liveItems: readonly LiveExternalItem[];
63
+ /**
64
+ * Whether the live snapshot covered everything it claims to.
65
+ * When false, absence cannot even be called historical: a partial read is
66
+ * indistinguishable from a vanished item, so nothing resolves to matched-by-absence.
67
+ */
68
+ liveSnapshotComplete: boolean;
69
+ }
70
+ export interface TaskCorrelation {
71
+ taskId: number;
72
+ outcome: CorrelationOutcome;
73
+ reason: CorrelationReason;
74
+ externalRef: ExternalRef | null;
75
+ /** Present only for `matched`: the item's CURRENT position on the live board. */
76
+ live: {
77
+ board: string;
78
+ list: string;
79
+ } | null;
80
+ }
81
+ export type CorrelationCoverage = Record<CorrelationOutcome, number> & {
82
+ total: number;
83
+ };
84
+ export interface CorrelationResult {
85
+ correlations: TaskCorrelation[];
86
+ coverage: CorrelationCoverage;
87
+ }
88
+ /**
89
+ * Resolve every row, then demote collisions: when several rows resolve to ONE external
90
+ * item, no row among them can carry a factual claim about it, because which row the
91
+ * item's state belongs to is exactly what is unknown.
92
+ */
93
+ export declare function correlateTasksWithExternalItems(input: CorrelationInput): CorrelationResult;
94
+ //# sourceMappingURL=external-correlation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-correlation.d.ts","sourceRoot":"","sources":["../../src/operator/external-correlation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,WAAW,GACX,WAAW,GACX,iBAAiB,GACjB,gBAAgB,CAAC;AAErB,MAAM,MAAM,iBAAiB;AAC3B,qBAAqB;AACnB,WAAW,GACX,iBAAiB;AACnB,gBAAgB;GACd,eAAe,GACf,wBAAwB,GACxB,+BAA+B,GAC/B,2BAA2B;AAC7B,gBAAgB;GACd,qBAAqB,GACrB,wBAAwB;AAC1B,sBAAsB;GACpB,2BAA2B,GAC3B,0BAA0B;AAC5B,cAAc;GACZ,WAAW,CAAC;AAEhB,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACtC,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,gBAAgB,GAAG,IAAI,CAAC;IACpE,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACvC;;;;OAIG;IACH,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,iFAAiF;IACjF,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AA8HD;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAyC1F"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ /**
3
+ * Correlate native ledger rows with live external items - the join that has to exist
4
+ * before any cross-store claim.
5
+ *
6
+ * The native ledger and the external board are separate stores with no shared key:
7
+ * a row carries `source_channel` and `source_event_id`, never an external item id.
8
+ * Left to itself a model joins on titles, which produces false, missed and ambiguous
9
+ * matches and then reports them as fact. This module resolves the join the only way
10
+ * that is deterministic - through recorded provenance - and labels everything it
11
+ * cannot resolve so the caller can refuse to make a claim about it.
12
+ *
13
+ * `source_event_id` is NOT a foreign key. It is optional free-form text that a model
14
+ * supplies on task_create, so every step validates rather than assumes: exact index
15
+ * lookup, connector must match, external identifiers come from STRUCTURED metadata
16
+ * (composite-id parsing only as a legacy fallback), and a disagreement between the
17
+ * two is ambiguity, not a tie to break.
18
+ *
19
+ * H0b, the rule that costs the most when forgotten: an item missing from the live
20
+ * snapshot proves NOTHING. The poller reads only open items and emits no tombstone,
21
+ * so disappearance is archive, deletion, permission loss, a board move, or a partial
22
+ * read - never evidence of completion. Absence resolves to `historical_only`, and no
23
+ * outcome in this module ever means "done".
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.correlateTasksWithExternalItems = correlateTasksWithExternalItems;
27
+ function readString(source, key) {
28
+ const value = source?.[key];
29
+ return typeof value === 'string' && value.trim().length > 0 ? value : null;
30
+ }
31
+ /** Legacy fallback only: `<boardId>:<itemId>:<observedMs>`. Structured metadata wins. */
32
+ function parseCompositeSourceId(sourceId) {
33
+ const parts = sourceId.split(':');
34
+ if (parts.length !== 3) {
35
+ return null;
36
+ }
37
+ const [boardId, itemId] = parts;
38
+ return boardId && itemId ? { boardId, itemId } : null;
39
+ }
40
+ function resolveExternalRef(record) {
41
+ const composite = parseCompositeSourceId(record.sourceId);
42
+ const boardId = readString(record.metadata, 'boardId');
43
+ const itemId = readString(record.metadata, 'cardId') ?? readString(record.metadata, 'itemId');
44
+ if (boardId && itemId) {
45
+ const conflict = composite !== null && (composite.boardId !== boardId || composite.itemId !== itemId);
46
+ return { ref: { boardId, itemId }, conflict };
47
+ }
48
+ return { ref: composite, conflict: false };
49
+ }
50
+ function classify(row, input, liveById) {
51
+ const prefix = `${input.connector}:`;
52
+ if (!row.sourceChannel) {
53
+ return {
54
+ taskId: row.id,
55
+ outcome: 'not_applicable',
56
+ reason: 'no_source',
57
+ externalRef: null,
58
+ live: null,
59
+ };
60
+ }
61
+ if (!row.sourceChannel.startsWith(prefix)) {
62
+ return {
63
+ taskId: row.id,
64
+ outcome: 'not_applicable',
65
+ reason: 'other_connector',
66
+ externalRef: null,
67
+ live: null,
68
+ };
69
+ }
70
+ if (!row.sourceEventId) {
71
+ return {
72
+ taskId: row.id,
73
+ outcome: 'unmatched',
74
+ reason: 'no_provenance',
75
+ externalRef: null,
76
+ live: null,
77
+ };
78
+ }
79
+ const record = input.lookupProvenance(row.sourceEventId);
80
+ if (!record) {
81
+ return {
82
+ taskId: row.id,
83
+ outcome: 'unmatched',
84
+ reason: 'provenance_not_indexed',
85
+ externalRef: null,
86
+ live: null,
87
+ };
88
+ }
89
+ if (record.sourceConnector !== input.connector) {
90
+ return {
91
+ taskId: row.id,
92
+ outcome: 'unmatched',
93
+ reason: 'provenance_connector_mismatch',
94
+ externalRef: null,
95
+ live: null,
96
+ };
97
+ }
98
+ const { ref, conflict } = resolveExternalRef(record);
99
+ if (!ref) {
100
+ return {
101
+ taskId: row.id,
102
+ outcome: 'unmatched',
103
+ reason: 'external_ref_unresolvable',
104
+ externalRef: null,
105
+ live: null,
106
+ };
107
+ }
108
+ if (conflict) {
109
+ return {
110
+ taskId: row.id,
111
+ outcome: 'ambiguous',
112
+ reason: 'provenance_conflict',
113
+ externalRef: ref,
114
+ live: null,
115
+ };
116
+ }
117
+ const live = liveById.get(ref.itemId);
118
+ if (live) {
119
+ return {
120
+ taskId: row.id,
121
+ outcome: 'matched',
122
+ reason: 'live_item',
123
+ externalRef: ref,
124
+ live: { board: live.board, list: live.list },
125
+ };
126
+ }
127
+ return {
128
+ taskId: row.id,
129
+ outcome: 'historical_only',
130
+ // A partial snapshot cannot even establish that the item is gone from the open set.
131
+ reason: input.liveSnapshotComplete ? 'absent_from_live_snapshot' : 'live_snapshot_incomplete',
132
+ externalRef: ref,
133
+ live: null,
134
+ };
135
+ }
136
+ /**
137
+ * Resolve every row, then demote collisions: when several rows resolve to ONE external
138
+ * item, no row among them can carry a factual claim about it, because which row the
139
+ * item's state belongs to is exactly what is unknown.
140
+ */
141
+ function correlateTasksWithExternalItems(input) {
142
+ const liveById = new Map(input.liveItems.map((item) => [item.itemId, item]));
143
+ const resolved = input.rows.map((row) => classify(row, input, liveById));
144
+ const rowsByItem = new Map();
145
+ for (const correlation of resolved) {
146
+ if (correlation.externalRef && correlation.outcome !== 'ambiguous') {
147
+ const key = correlation.externalRef.itemId;
148
+ rowsByItem.set(key, (rowsByItem.get(key) ?? 0) + 1);
149
+ }
150
+ }
151
+ const correlations = resolved.map((correlation) => {
152
+ if (correlation.externalRef &&
153
+ correlation.outcome !== 'ambiguous' &&
154
+ (rowsByItem.get(correlation.externalRef.itemId) ?? 0) > 1) {
155
+ return {
156
+ ...correlation,
157
+ outcome: 'ambiguous',
158
+ reason: 'multiple_rows_one_item',
159
+ live: null,
160
+ };
161
+ }
162
+ return correlation;
163
+ });
164
+ const coverage = {
165
+ total: correlations.length,
166
+ matched: 0,
167
+ unmatched: 0,
168
+ ambiguous: 0,
169
+ historical_only: 0,
170
+ not_applicable: 0,
171
+ };
172
+ for (const correlation of correlations) {
173
+ coverage[correlation.outcome] += 1;
174
+ }
175
+ return { correlations, coverage };
176
+ }
177
+ //# sourceMappingURL=external-correlation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-correlation.js","sourceRoot":"","sources":["../../src/operator/external-correlation.ts"],"names":[],"mappings":"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"}
@@ -82,7 +82,15 @@ export interface TriggerLoopDeps {
82
82
  * (each carrying the event id so reconcile task writes can pass
83
83
  * source_event_id). Absent -> no reconcile leg.
84
84
  */
85
- onChannelDelta?: (channelKey: string, lines: string[]) => void;
85
+ /**
86
+ * `eventIds` is the batch itself, carried alongside the human-readable lines.
87
+ *
88
+ * The ids were already inside the lines as `[id:evt_...]` headers and were only ever
89
+ * read back by parsing prose - which meant the SYSTEM knew the batch, flattened it to
90
+ * text, and then asked the AGENT to restate it. Every change a bounded run makes rests
91
+ * on this batch; carrying it is the difference between a fact and a claim.
92
+ */
93
+ onChannelDelta?: (channelKey: string, lines: string[], eventIds: string[]) => void;
86
94
  /** Kagemusha dual output: FULL report also publishes the operator board slots. */
87
95
  fullReportBoardLines?: string[];
88
96
  /** Context carry (plan v6 S1-T4): persist the delivered FULL report text. */
@@ -1 +1 @@
1
- {"version":3,"file":"operator-trigger-loop.d.ts","sourceRoot":"","sources":["../../src/operator/operator-trigger-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operator-trigger-loop.d.ts","sourceRoot":"","sources":["../../src/operator/operator-trigger-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,EACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AAGnC,iEAAiE;AACjE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAAC;IAChD,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,4FAA4F;IAC5F,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,eAAe,CAAC;IAC1B,sGAAsG;IACtG,QAAQ,EAAE,QAAQ,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,4DAA4D;IAC5D,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACrF,uFAAuF;IACvF,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAClC,0FAA0F;IAC1F,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE;QAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,MAAM,EAAE,CAAC,CAAC;IACzF;;;;;OAKG;IACH;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACnF,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,6EAA6E;IAC7E,qBAAqB,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvE,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,cAAc,CAAmC;gBAE7C,IAAI,EAAE,eAAe;IA6CjC,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;YAOP,oBAAoB;YA0BpB,uBAAuB;YA6BvB,qBAAqB;YA4BrB,wBAAwB;IAUhC,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IA4LjC;;;;;;;;;;;OAWG;IACH;;;;;;;;;;OAUG;IACH,eAAe,IAAI;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE;IAqDzE,KAAK,IAAI,IAAI;IA6Bb;;;;OAIG;IACH,KAAK,IAAI,MAAM,IAAI;CA2CpB"}
@@ -248,11 +248,15 @@ class OperatorTriggerLoop {
248
248
  byChannel.set(key, bucket);
249
249
  }
250
250
  for (const [channelKey, channelEvents] of byChannel) {
251
- const lines = channelEvents
252
- .slice(-10)
253
- .map((e) => `- [id:${e.eventIndexId ?? e.id}] ${e.userId}: ${e.content.trim().slice(0, 200)}`);
251
+ // The prompt shows the last 10; the CAUSE is the whole batch. Truncating both
252
+ // would silently drop events the run acted on from the record of why it acted.
253
+ const shown = channelEvents.slice(-10);
254
+ const lines = shown.map((e) => `- [id:${e.eventIndexId ?? e.id}] ${e.userId}: ${e.content.trim().slice(0, 200)}`);
255
+ const eventIds = channelEvents
256
+ .map((e) => e.eventIndexId)
257
+ .filter((id) => typeof id === 'string' && id.length > 0);
254
258
  try {
255
- this.deps.onChannelDelta(channelKey, lines);
259
+ this.deps.onChannelDelta(channelKey, lines, eventIds);
256
260
  }
257
261
  catch (err) {
258
262
  log(`[trigger-loop] onChannelDelta failed for ${channelKey}: ${err instanceof Error ? err.message : String(err)}`);