limen-ai 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/LICENSE +190 -0
  3. package/README.md +546 -0
  4. package/dist/api/agents/agent_api.d.ts +126 -0
  5. package/dist/api/agents/agent_api.d.ts.map +1 -0
  6. package/dist/api/agents/agent_api.js +467 -0
  7. package/dist/api/agents/agent_api.js.map +1 -0
  8. package/dist/api/agents/trust_progression.d.ts +78 -0
  9. package/dist/api/agents/trust_progression.d.ts.map +1 -0
  10. package/dist/api/agents/trust_progression.js +124 -0
  11. package/dist/api/agents/trust_progression.js.map +1 -0
  12. package/dist/api/chat/chat_pipeline.d.ts +91 -0
  13. package/dist/api/chat/chat_pipeline.d.ts.map +1 -0
  14. package/dist/api/chat/chat_pipeline.js +630 -0
  15. package/dist/api/chat/chat_pipeline.js.map +1 -0
  16. package/dist/api/chat/technique_injector.d.ts +86 -0
  17. package/dist/api/chat/technique_injector.d.ts.map +1 -0
  18. package/dist/api/chat/technique_injector.js +125 -0
  19. package/dist/api/chat/technique_injector.js.map +1 -0
  20. package/dist/api/data/data_api.d.ts +91 -0
  21. package/dist/api/data/data_api.d.ts.map +1 -0
  22. package/dist/api/data/data_api.js +306 -0
  23. package/dist/api/data/data_api.js.map +1 -0
  24. package/dist/api/enforcement/cost_tracker.d.ts +105 -0
  25. package/dist/api/enforcement/cost_tracker.d.ts.map +1 -0
  26. package/dist/api/enforcement/cost_tracker.js +227 -0
  27. package/dist/api/enforcement/cost_tracker.js.map +1 -0
  28. package/dist/api/enforcement/latency_harness.d.ts +94 -0
  29. package/dist/api/enforcement/latency_harness.d.ts.map +1 -0
  30. package/dist/api/enforcement/latency_harness.js +120 -0
  31. package/dist/api/enforcement/latency_harness.js.map +1 -0
  32. package/dist/api/enforcement/rate_guard.d.ts +52 -0
  33. package/dist/api/enforcement/rate_guard.d.ts.map +1 -0
  34. package/dist/api/enforcement/rate_guard.js +79 -0
  35. package/dist/api/enforcement/rate_guard.js.map +1 -0
  36. package/dist/api/enforcement/rbac_guard.d.ts +55 -0
  37. package/dist/api/enforcement/rbac_guard.d.ts.map +1 -0
  38. package/dist/api/enforcement/rbac_guard.js +77 -0
  39. package/dist/api/enforcement/rbac_guard.js.map +1 -0
  40. package/dist/api/errors/limen_error.d.ts +81 -0
  41. package/dist/api/errors/limen_error.d.ts.map +1 -0
  42. package/dist/api/errors/limen_error.js +324 -0
  43. package/dist/api/errors/limen_error.js.map +1 -0
  44. package/dist/api/facades/claim_facade.d.ts +47 -0
  45. package/dist/api/facades/claim_facade.d.ts.map +1 -0
  46. package/dist/api/facades/claim_facade.js +67 -0
  47. package/dist/api/facades/claim_facade.js.map +1 -0
  48. package/dist/api/facades/working_memory_facade.d.ts +47 -0
  49. package/dist/api/facades/working_memory_facade.d.ts.map +1 -0
  50. package/dist/api/facades/working_memory_facade.js +74 -0
  51. package/dist/api/facades/working_memory_facade.js.map +1 -0
  52. package/dist/api/governance/governed_orchestration.d.ts +76 -0
  53. package/dist/api/governance/governed_orchestration.d.ts.map +1 -0
  54. package/dist/api/governance/governed_orchestration.js +413 -0
  55. package/dist/api/governance/governed_orchestration.js.map +1 -0
  56. package/dist/api/index.d.ts +84 -0
  57. package/dist/api/index.d.ts.map +1 -0
  58. package/dist/api/index.js +847 -0
  59. package/dist/api/index.js.map +1 -0
  60. package/dist/api/infer/infer_pipeline.d.ts +51 -0
  61. package/dist/api/infer/infer_pipeline.d.ts.map +1 -0
  62. package/dist/api/infer/infer_pipeline.js +291 -0
  63. package/dist/api/infer/infer_pipeline.js.map +1 -0
  64. package/dist/api/interfaces/api.d.ts +940 -0
  65. package/dist/api/interfaces/api.d.ts.map +1 -0
  66. package/dist/api/interfaces/api.js +21 -0
  67. package/dist/api/interfaces/api.js.map +1 -0
  68. package/dist/api/knowledge/knowledge_api.d.ts +55 -0
  69. package/dist/api/knowledge/knowledge_api.d.ts.map +1 -0
  70. package/dist/api/knowledge/knowledge_api.js +89 -0
  71. package/dist/api/knowledge/knowledge_api.js.map +1 -0
  72. package/dist/api/migration/023_agent_persistence.d.ts +32 -0
  73. package/dist/api/migration/023_agent_persistence.d.ts.map +1 -0
  74. package/dist/api/migration/023_agent_persistence.js +158 -0
  75. package/dist/api/migration/023_agent_persistence.js.map +1 -0
  76. package/dist/api/migration/024_trust_learning.d.ts +36 -0
  77. package/dist/api/migration/024_trust_learning.d.ts.map +1 -0
  78. package/dist/api/migration/024_trust_learning.js +194 -0
  79. package/dist/api/migration/024_trust_learning.js.map +1 -0
  80. package/dist/api/migration/025_knowledge_graph.d.ts +29 -0
  81. package/dist/api/migration/025_knowledge_graph.d.ts.map +1 -0
  82. package/dist/api/migration/025_knowledge_graph.js +97 -0
  83. package/dist/api/migration/025_knowledge_graph.js.map +1 -0
  84. package/dist/api/migration/026_replay_pipeline.d.ts +30 -0
  85. package/dist/api/migration/026_replay_pipeline.d.ts.map +1 -0
  86. package/dist/api/migration/026_replay_pipeline.js +118 -0
  87. package/dist/api/migration/026_replay_pipeline.js.map +1 -0
  88. package/dist/api/missions/mission_api.d.ts +74 -0
  89. package/dist/api/missions/mission_api.d.ts.map +1 -0
  90. package/dist/api/missions/mission_api.js +408 -0
  91. package/dist/api/missions/mission_api.js.map +1 -0
  92. package/dist/api/observability/health.d.ts +36 -0
  93. package/dist/api/observability/health.d.ts.map +1 -0
  94. package/dist/api/observability/health.js +92 -0
  95. package/dist/api/observability/health.js.map +1 -0
  96. package/dist/api/observability/metrics.d.ts +95 -0
  97. package/dist/api/observability/metrics.d.ts.map +1 -0
  98. package/dist/api/observability/metrics.js +260 -0
  99. package/dist/api/observability/metrics.js.map +1 -0
  100. package/dist/api/roles/roles_api.d.ts +45 -0
  101. package/dist/api/roles/roles_api.d.ts.map +1 -0
  102. package/dist/api/roles/roles_api.js +77 -0
  103. package/dist/api/roles/roles_api.js.map +1 -0
  104. package/dist/api/sessions/session_manager.d.ts +110 -0
  105. package/dist/api/sessions/session_manager.d.ts.map +1 -0
  106. package/dist/api/sessions/session_manager.js +278 -0
  107. package/dist/api/sessions/session_manager.js.map +1 -0
  108. package/dist/budget/harness/dba_harness.d.ts +36 -0
  109. package/dist/budget/harness/dba_harness.d.ts.map +1 -0
  110. package/dist/budget/harness/dba_harness.js +58 -0
  111. package/dist/budget/harness/dba_harness.js.map +1 -0
  112. package/dist/budget/impl/dba_impl.d.ts +47 -0
  113. package/dist/budget/impl/dba_impl.d.ts.map +1 -0
  114. package/dist/budget/impl/dba_impl.js +402 -0
  115. package/dist/budget/impl/dba_impl.js.map +1 -0
  116. package/dist/budget/interfaces/dba_types.d.ts +708 -0
  117. package/dist/budget/interfaces/dba_types.d.ts.map +1 -0
  118. package/dist/budget/interfaces/dba_types.js +124 -0
  119. package/dist/budget/interfaces/dba_types.js.map +1 -0
  120. package/dist/claims/evidence/capability_scope_validator.d.ts +32 -0
  121. package/dist/claims/evidence/capability_scope_validator.d.ts.map +1 -0
  122. package/dist/claims/evidence/capability_scope_validator.js +72 -0
  123. package/dist/claims/evidence/capability_scope_validator.js.map +1 -0
  124. package/dist/claims/evidence/evidence_validator.d.ts +35 -0
  125. package/dist/claims/evidence/evidence_validator.d.ts.map +1 -0
  126. package/dist/claims/evidence/evidence_validator.js +118 -0
  127. package/dist/claims/evidence/evidence_validator.js.map +1 -0
  128. package/dist/claims/harness/claim_harness.d.ts +22 -0
  129. package/dist/claims/harness/claim_harness.d.ts.map +1 -0
  130. package/dist/claims/harness/claim_harness.js +26 -0
  131. package/dist/claims/harness/claim_harness.js.map +1 -0
  132. package/dist/claims/interfaces/claim_types.d.ts +858 -0
  133. package/dist/claims/interfaces/claim_types.d.ts.map +1 -0
  134. package/dist/claims/interfaces/claim_types.js +201 -0
  135. package/dist/claims/interfaces/claim_types.js.map +1 -0
  136. package/dist/claims/migration/019_ccp_claims.d.ts +23 -0
  137. package/dist/claims/migration/019_ccp_claims.d.ts.map +1 -0
  138. package/dist/claims/migration/019_ccp_claims.js +196 -0
  139. package/dist/claims/migration/019_ccp_claims.js.map +1 -0
  140. package/dist/claims/store/claim_stores.d.ts +27 -0
  141. package/dist/claims/store/claim_stores.d.ts.map +1 -0
  142. package/dist/claims/store/claim_stores.js +1352 -0
  143. package/dist/claims/store/claim_stores.js.map +1 -0
  144. package/dist/context/harness/cgp_harness.d.ts +32 -0
  145. package/dist/context/harness/cgp_harness.d.ts.map +1 -0
  146. package/dist/context/harness/cgp_harness.js +295 -0
  147. package/dist/context/harness/cgp_harness.js.map +1 -0
  148. package/dist/context/interfaces/cgp_types.d.ts +905 -0
  149. package/dist/context/interfaces/cgp_types.d.ts.map +1 -0
  150. package/dist/context/interfaces/cgp_types.js +112 -0
  151. package/dist/context/interfaces/cgp_types.js.map +1 -0
  152. package/dist/context/stores/cgp_stores.d.ts +42 -0
  153. package/dist/context/stores/cgp_stores.d.ts.map +1 -0
  154. package/dist/context/stores/cgp_stores.js +856 -0
  155. package/dist/context/stores/cgp_stores.js.map +1 -0
  156. package/dist/execution/harness/egp_harness.d.ts +43 -0
  157. package/dist/execution/harness/egp_harness.d.ts.map +1 -0
  158. package/dist/execution/harness/egp_harness.js +54 -0
  159. package/dist/execution/harness/egp_harness.js.map +1 -0
  160. package/dist/execution/interfaces/egp_types.d.ts +1042 -0
  161. package/dist/execution/interfaces/egp_types.d.ts.map +1 -0
  162. package/dist/execution/interfaces/egp_types.js +195 -0
  163. package/dist/execution/interfaces/egp_types.js.map +1 -0
  164. package/dist/execution/stores/egp_stores.d.ts +29 -0
  165. package/dist/execution/stores/egp_stores.d.ts.map +1 -0
  166. package/dist/execution/stores/egp_stores.js +1250 -0
  167. package/dist/execution/stores/egp_stores.js.map +1 -0
  168. package/dist/execution/wiring/execution_gate.d.ts +56 -0
  169. package/dist/execution/wiring/execution_gate.d.ts.map +1 -0
  170. package/dist/execution/wiring/execution_gate.js +77 -0
  171. package/dist/execution/wiring/execution_gate.js.map +1 -0
  172. package/dist/execution/wiring/floor_enforcer.d.ts +68 -0
  173. package/dist/execution/wiring/floor_enforcer.d.ts.map +1 -0
  174. package/dist/execution/wiring/floor_enforcer.js +96 -0
  175. package/dist/execution/wiring/floor_enforcer.js.map +1 -0
  176. package/dist/execution/wiring/invocation_gate.d.ts +58 -0
  177. package/dist/execution/wiring/invocation_gate.d.ts.map +1 -0
  178. package/dist/execution/wiring/invocation_gate.js +69 -0
  179. package/dist/execution/wiring/invocation_gate.js.map +1 -0
  180. package/dist/execution/wiring/terminal_release.d.ts +56 -0
  181. package/dist/execution/wiring/terminal_release.d.ts.map +1 -0
  182. package/dist/execution/wiring/terminal_release.js +85 -0
  183. package/dist/execution/wiring/terminal_release.js.map +1 -0
  184. package/dist/governance/harness/governance_harness.d.ts +54 -0
  185. package/dist/governance/harness/governance_harness.d.ts.map +1 -0
  186. package/dist/governance/harness/governance_harness.js +60 -0
  187. package/dist/governance/harness/governance_harness.js.map +1 -0
  188. package/dist/governance/migration/012_governance_runs_traces.d.ts +21 -0
  189. package/dist/governance/migration/012_governance_runs_traces.d.ts.map +1 -0
  190. package/dist/governance/migration/012_governance_runs_traces.js +115 -0
  191. package/dist/governance/migration/012_governance_runs_traces.js.map +1 -0
  192. package/dist/governance/migration/013_governance_contracts.d.ts +18 -0
  193. package/dist/governance/migration/013_governance_contracts.d.ts.map +1 -0
  194. package/dist/governance/migration/013_governance_contracts.js +59 -0
  195. package/dist/governance/migration/013_governance_contracts.js.map +1 -0
  196. package/dist/governance/migration/014_governance_supervisor.d.ts +16 -0
  197. package/dist/governance/migration/014_governance_supervisor.d.ts.map +1 -0
  198. package/dist/governance/migration/014_governance_supervisor.js +75 -0
  199. package/dist/governance/migration/014_governance_supervisor.js.map +1 -0
  200. package/dist/governance/migration/015_governance_eval.d.ts +18 -0
  201. package/dist/governance/migration/015_governance_eval.d.ts.map +1 -0
  202. package/dist/governance/migration/015_governance_eval.js +65 -0
  203. package/dist/governance/migration/015_governance_eval.js.map +1 -0
  204. package/dist/governance/migration/016_governance_capabilities.d.ts +16 -0
  205. package/dist/governance/migration/016_governance_capabilities.d.ts.map +1 -0
  206. package/dist/governance/migration/016_governance_capabilities.js +60 -0
  207. package/dist/governance/migration/016_governance_capabilities.js.map +1 -0
  208. package/dist/governance/migration/017_governance_handoffs_idempotency.d.ts +20 -0
  209. package/dist/governance/migration/017_governance_handoffs_idempotency.d.ts.map +1 -0
  210. package/dist/governance/migration/017_governance_handoffs_idempotency.js +103 -0
  211. package/dist/governance/migration/017_governance_handoffs_idempotency.js.map +1 -0
  212. package/dist/governance/migration/018_supervisor_decision_delete_trigger.d.ts +17 -0
  213. package/dist/governance/migration/018_supervisor_decision_delete_trigger.d.ts.map +1 -0
  214. package/dist/governance/migration/018_supervisor_decision_delete_trigger.js +37 -0
  215. package/dist/governance/migration/018_supervisor_decision_delete_trigger.js.map +1 -0
  216. package/dist/governance/stores/governance_stores.d.ts +78 -0
  217. package/dist/governance/stores/governance_stores.d.ts.map +1 -0
  218. package/dist/governance/stores/governance_stores.js +1117 -0
  219. package/dist/governance/stores/governance_stores.js.map +1 -0
  220. package/dist/kernel/audit/audit_trail.d.ts +24 -0
  221. package/dist/kernel/audit/audit_trail.d.ts.map +1 -0
  222. package/dist/kernel/audit/audit_trail.js +569 -0
  223. package/dist/kernel/audit/audit_trail.js.map +1 -0
  224. package/dist/kernel/crypto/crypto_engine.d.ts +49 -0
  225. package/dist/kernel/crypto/crypto_engine.d.ts.map +1 -0
  226. package/dist/kernel/crypto/crypto_engine.js +350 -0
  227. package/dist/kernel/crypto/crypto_engine.js.map +1 -0
  228. package/dist/kernel/database/database_lifecycle.d.ts +24 -0
  229. package/dist/kernel/database/database_lifecycle.d.ts.map +1 -0
  230. package/dist/kernel/database/database_lifecycle.js +404 -0
  231. package/dist/kernel/database/database_lifecycle.js.map +1 -0
  232. package/dist/kernel/database/migrations.d.ts +21 -0
  233. package/dist/kernel/database/migrations.d.ts.map +1 -0
  234. package/dist/kernel/database/migrations.js +407 -0
  235. package/dist/kernel/database/migrations.js.map +1 -0
  236. package/dist/kernel/events/event_bus.d.ts +25 -0
  237. package/dist/kernel/events/event_bus.d.ts.map +1 -0
  238. package/dist/kernel/events/event_bus.js +302 -0
  239. package/dist/kernel/events/event_bus.js.map +1 -0
  240. package/dist/kernel/events/webhook_delivery.d.ts +90 -0
  241. package/dist/kernel/events/webhook_delivery.d.ts.map +1 -0
  242. package/dist/kernel/events/webhook_delivery.js +324 -0
  243. package/dist/kernel/events/webhook_delivery.js.map +1 -0
  244. package/dist/kernel/index.d.ts +39 -0
  245. package/dist/kernel/index.d.ts.map +1 -0
  246. package/dist/kernel/index.js +263 -0
  247. package/dist/kernel/index.js.map +1 -0
  248. package/dist/kernel/interfaces/audit.d.ts +146 -0
  249. package/dist/kernel/interfaces/audit.d.ts.map +1 -0
  250. package/dist/kernel/interfaces/audit.js +15 -0
  251. package/dist/kernel/interfaces/audit.js.map +1 -0
  252. package/dist/kernel/interfaces/capability_manifest.d.ts +104 -0
  253. package/dist/kernel/interfaces/capability_manifest.d.ts.map +1 -0
  254. package/dist/kernel/interfaces/capability_manifest.js +44 -0
  255. package/dist/kernel/interfaces/capability_manifest.js.map +1 -0
  256. package/dist/kernel/interfaces/common.d.ts +91 -0
  257. package/dist/kernel/interfaces/common.d.ts.map +1 -0
  258. package/dist/kernel/interfaces/common.js +10 -0
  259. package/dist/kernel/interfaces/common.js.map +1 -0
  260. package/dist/kernel/interfaces/crypto.d.ts +95 -0
  261. package/dist/kernel/interfaces/crypto.d.ts.map +1 -0
  262. package/dist/kernel/interfaces/crypto.js +14 -0
  263. package/dist/kernel/interfaces/crypto.js.map +1 -0
  264. package/dist/kernel/interfaces/database.d.ts +157 -0
  265. package/dist/kernel/interfaces/database.d.ts.map +1 -0
  266. package/dist/kernel/interfaces/database.js +10 -0
  267. package/dist/kernel/interfaces/database.js.map +1 -0
  268. package/dist/kernel/interfaces/eval.d.ts +93 -0
  269. package/dist/kernel/interfaces/eval.d.ts.map +1 -0
  270. package/dist/kernel/interfaces/eval.js +17 -0
  271. package/dist/kernel/interfaces/eval.js.map +1 -0
  272. package/dist/kernel/interfaces/events.d.ts +73 -0
  273. package/dist/kernel/interfaces/events.d.ts.map +1 -0
  274. package/dist/kernel/interfaces/events.js +13 -0
  275. package/dist/kernel/interfaces/events.js.map +1 -0
  276. package/dist/kernel/interfaces/governance_ids.d.ts +93 -0
  277. package/dist/kernel/interfaces/governance_ids.d.ts.map +1 -0
  278. package/dist/kernel/interfaces/governance_ids.js +18 -0
  279. package/dist/kernel/interfaces/governance_ids.js.map +1 -0
  280. package/dist/kernel/interfaces/idempotency.d.ts +143 -0
  281. package/dist/kernel/interfaces/idempotency.d.ts.map +1 -0
  282. package/dist/kernel/interfaces/idempotency.js +22 -0
  283. package/dist/kernel/interfaces/idempotency.js.map +1 -0
  284. package/dist/kernel/interfaces/index.d.ts +29 -0
  285. package/dist/kernel/interfaces/index.d.ts.map +1 -0
  286. package/dist/kernel/interfaces/index.js +9 -0
  287. package/dist/kernel/interfaces/index.js.map +1 -0
  288. package/dist/kernel/interfaces/kernel.d.ts +79 -0
  289. package/dist/kernel/interfaces/kernel.d.ts.map +1 -0
  290. package/dist/kernel/interfaces/kernel.js +13 -0
  291. package/dist/kernel/interfaces/kernel.js.map +1 -0
  292. package/dist/kernel/interfaces/lifecycle.d.ts +115 -0
  293. package/dist/kernel/interfaces/lifecycle.d.ts.map +1 -0
  294. package/dist/kernel/interfaces/lifecycle.js +53 -0
  295. package/dist/kernel/interfaces/lifecycle.js.map +1 -0
  296. package/dist/kernel/interfaces/mission_contract.d.ts +106 -0
  297. package/dist/kernel/interfaces/mission_contract.d.ts.map +1 -0
  298. package/dist/kernel/interfaces/mission_contract.js +20 -0
  299. package/dist/kernel/interfaces/mission_contract.js.map +1 -0
  300. package/dist/kernel/interfaces/namespace.d.ts +30 -0
  301. package/dist/kernel/interfaces/namespace.d.ts.map +1 -0
  302. package/dist/kernel/interfaces/namespace.js +12 -0
  303. package/dist/kernel/interfaces/namespace.js.map +1 -0
  304. package/dist/kernel/interfaces/rate_limiter.d.ts +42 -0
  305. package/dist/kernel/interfaces/rate_limiter.d.ts.map +1 -0
  306. package/dist/kernel/interfaces/rate_limiter.js +12 -0
  307. package/dist/kernel/interfaces/rate_limiter.js.map +1 -0
  308. package/dist/kernel/interfaces/rbac.d.ts +58 -0
  309. package/dist/kernel/interfaces/rbac.d.ts.map +1 -0
  310. package/dist/kernel/interfaces/rbac.js +13 -0
  311. package/dist/kernel/interfaces/rbac.js.map +1 -0
  312. package/dist/kernel/interfaces/retention.d.ts +58 -0
  313. package/dist/kernel/interfaces/retention.d.ts.map +1 -0
  314. package/dist/kernel/interfaces/retention.js +13 -0
  315. package/dist/kernel/interfaces/retention.js.map +1 -0
  316. package/dist/kernel/interfaces/run_identity.d.ts +132 -0
  317. package/dist/kernel/interfaces/run_identity.d.ts.map +1 -0
  318. package/dist/kernel/interfaces/run_identity.js +16 -0
  319. package/dist/kernel/interfaces/run_identity.js.map +1 -0
  320. package/dist/kernel/interfaces/supervisor.d.ts +175 -0
  321. package/dist/kernel/interfaces/supervisor.d.ts.map +1 -0
  322. package/dist/kernel/interfaces/supervisor.js +25 -0
  323. package/dist/kernel/interfaces/supervisor.js.map +1 -0
  324. package/dist/kernel/interfaces/tenant.d.ts +34 -0
  325. package/dist/kernel/interfaces/tenant.d.ts.map +1 -0
  326. package/dist/kernel/interfaces/tenant.js +12 -0
  327. package/dist/kernel/interfaces/tenant.js.map +1 -0
  328. package/dist/kernel/interfaces/time.d.ts +29 -0
  329. package/dist/kernel/interfaces/time.d.ts.map +1 -0
  330. package/dist/kernel/interfaces/time.js +13 -0
  331. package/dist/kernel/interfaces/time.js.map +1 -0
  332. package/dist/kernel/interfaces/trace.d.ts +264 -0
  333. package/dist/kernel/interfaces/trace.d.ts.map +1 -0
  334. package/dist/kernel/interfaces/trace.js +17 -0
  335. package/dist/kernel/interfaces/trace.js.map +1 -0
  336. package/dist/kernel/namespace/namespace_enforcer.d.ts +20 -0
  337. package/dist/kernel/namespace/namespace_enforcer.d.ts.map +1 -0
  338. package/dist/kernel/namespace/namespace_enforcer.js +91 -0
  339. package/dist/kernel/namespace/namespace_enforcer.js.map +1 -0
  340. package/dist/kernel/rate_limiter/rate_limiter.d.ts +23 -0
  341. package/dist/kernel/rate_limiter/rate_limiter.d.ts.map +1 -0
  342. package/dist/kernel/rate_limiter/rate_limiter.js +146 -0
  343. package/dist/kernel/rate_limiter/rate_limiter.js.map +1 -0
  344. package/dist/kernel/rbac/rbac_engine.d.ts +20 -0
  345. package/dist/kernel/rbac/rbac_engine.d.ts.map +1 -0
  346. package/dist/kernel/rbac/rbac_engine.js +257 -0
  347. package/dist/kernel/rbac/rbac_engine.js.map +1 -0
  348. package/dist/kernel/retention/retention_scheduler.d.ts +41 -0
  349. package/dist/kernel/retention/retention_scheduler.d.ts.map +1 -0
  350. package/dist/kernel/retention/retention_scheduler.js +218 -0
  351. package/dist/kernel/retention/retention_scheduler.js.map +1 -0
  352. package/dist/kernel/tenant/tenant_context.d.ts +22 -0
  353. package/dist/kernel/tenant/tenant_context.d.ts.map +1 -0
  354. package/dist/kernel/tenant/tenant_context.js +107 -0
  355. package/dist/kernel/tenant/tenant_context.js.map +1 -0
  356. package/dist/kernel/tenant/tenant_scope.d.ts +81 -0
  357. package/dist/kernel/tenant/tenant_scope.d.ts.map +1 -0
  358. package/dist/kernel/tenant/tenant_scope.js +168 -0
  359. package/dist/kernel/tenant/tenant_scope.js.map +1 -0
  360. package/dist/kernel/time/time_provider.d.ts +39 -0
  361. package/dist/kernel/time/time_provider.d.ts.map +1 -0
  362. package/dist/kernel/time/time_provider.js +58 -0
  363. package/dist/kernel/time/time_provider.js.map +1 -0
  364. package/dist/learning/applicator/technique_applicator.d.ts +41 -0
  365. package/dist/learning/applicator/technique_applicator.d.ts.map +1 -0
  366. package/dist/learning/applicator/technique_applicator.js +200 -0
  367. package/dist/learning/applicator/technique_applicator.js.map +1 -0
  368. package/dist/learning/cold_start/cold_start_manager.d.ts +35 -0
  369. package/dist/learning/cold_start/cold_start_manager.d.ts.map +1 -0
  370. package/dist/learning/cold_start/cold_start_manager.js +146 -0
  371. package/dist/learning/cold_start/cold_start_manager.js.map +1 -0
  372. package/dist/learning/cycle/learning_cycle_orchestrator.d.ts +45 -0
  373. package/dist/learning/cycle/learning_cycle_orchestrator.d.ts.map +1 -0
  374. package/dist/learning/cycle/learning_cycle_orchestrator.js +165 -0
  375. package/dist/learning/cycle/learning_cycle_orchestrator.js.map +1 -0
  376. package/dist/learning/extractor/technique_extractor.d.ts +48 -0
  377. package/dist/learning/extractor/technique_extractor.d.ts.map +1 -0
  378. package/dist/learning/extractor/technique_extractor.js +357 -0
  379. package/dist/learning/extractor/technique_extractor.js.map +1 -0
  380. package/dist/learning/harness/learning_harness.d.ts +26 -0
  381. package/dist/learning/harness/learning_harness.d.ts.map +1 -0
  382. package/dist/learning/harness/learning_harness.js +58 -0
  383. package/dist/learning/harness/learning_harness.js.map +1 -0
  384. package/dist/learning/interfaces/index.d.ts +7 -0
  385. package/dist/learning/interfaces/index.d.ts.map +1 -0
  386. package/dist/learning/interfaces/index.js +10 -0
  387. package/dist/learning/interfaces/index.js.map +1 -0
  388. package/dist/learning/interfaces/learning_types.d.ts +398 -0
  389. package/dist/learning/interfaces/learning_types.d.ts.map +1 -0
  390. package/dist/learning/interfaces/learning_types.js +69 -0
  391. package/dist/learning/interfaces/learning_types.js.map +1 -0
  392. package/dist/learning/migration/007_learning_techniques.d.ts +23 -0
  393. package/dist/learning/migration/007_learning_techniques.d.ts.map +1 -0
  394. package/dist/learning/migration/007_learning_techniques.js +86 -0
  395. package/dist/learning/migration/007_learning_techniques.js.map +1 -0
  396. package/dist/learning/migration/008_learning_outcomes.d.ts +23 -0
  397. package/dist/learning/migration/008_learning_outcomes.d.ts.map +1 -0
  398. package/dist/learning/migration/008_learning_outcomes.js +79 -0
  399. package/dist/learning/migration/008_learning_outcomes.js.map +1 -0
  400. package/dist/learning/migration/009_learning_applications.d.ts +25 -0
  401. package/dist/learning/migration/009_learning_applications.d.ts.map +1 -0
  402. package/dist/learning/migration/009_learning_applications.js +82 -0
  403. package/dist/learning/migration/009_learning_applications.js.map +1 -0
  404. package/dist/learning/migration/010_learning_quarantine.d.ts +22 -0
  405. package/dist/learning/migration/010_learning_quarantine.d.ts.map +1 -0
  406. package/dist/learning/migration/010_learning_quarantine.js +78 -0
  407. package/dist/learning/migration/010_learning_quarantine.js.map +1 -0
  408. package/dist/learning/migration/011_learning_transfers.d.ts +22 -0
  409. package/dist/learning/migration/011_learning_transfers.d.ts.map +1 -0
  410. package/dist/learning/migration/011_learning_transfers.js +77 -0
  411. package/dist/learning/migration/011_learning_transfers.js.map +1 -0
  412. package/dist/learning/quarantine/quarantine_manager.d.ts +34 -0
  413. package/dist/learning/quarantine/quarantine_manager.d.ts.map +1 -0
  414. package/dist/learning/quarantine/quarantine_manager.js +200 -0
  415. package/dist/learning/quarantine/quarantine_manager.js.map +1 -0
  416. package/dist/learning/retirement/retirement_evaluator.d.ts +35 -0
  417. package/dist/learning/retirement/retirement_evaluator.d.ts.map +1 -0
  418. package/dist/learning/retirement/retirement_evaluator.js +131 -0
  419. package/dist/learning/retirement/retirement_evaluator.js.map +1 -0
  420. package/dist/learning/specialization/over_specialization_detector.d.ts +32 -0
  421. package/dist/learning/specialization/over_specialization_detector.d.ts.map +1 -0
  422. package/dist/learning/specialization/over_specialization_detector.js +105 -0
  423. package/dist/learning/specialization/over_specialization_detector.js.map +1 -0
  424. package/dist/learning/store/technique_store.d.ts +22 -0
  425. package/dist/learning/store/technique_store.d.ts.map +1 -0
  426. package/dist/learning/store/technique_store.js +369 -0
  427. package/dist/learning/store/technique_store.js.map +1 -0
  428. package/dist/learning/tracker/effectiveness_tracker.d.ts +26 -0
  429. package/dist/learning/tracker/effectiveness_tracker.d.ts.map +1 -0
  430. package/dist/learning/tracker/effectiveness_tracker.js +158 -0
  431. package/dist/learning/tracker/effectiveness_tracker.js.map +1 -0
  432. package/dist/learning/transfer/cross_agent_transfer.d.ts +35 -0
  433. package/dist/learning/transfer/cross_agent_transfer.d.ts.map +1 -0
  434. package/dist/learning/transfer/cross_agent_transfer.js +245 -0
  435. package/dist/learning/transfer/cross_agent_transfer.js.map +1 -0
  436. package/dist/orchestration/artifacts/artifact_store.d.ts +19 -0
  437. package/dist/orchestration/artifacts/artifact_store.d.ts.map +1 -0
  438. package/dist/orchestration/artifacts/artifact_store.js +213 -0
  439. package/dist/orchestration/artifacts/artifact_store.js.map +1 -0
  440. package/dist/orchestration/artifacts/cascade_walker.d.ts +39 -0
  441. package/dist/orchestration/artifacts/cascade_walker.d.ts.map +1 -0
  442. package/dist/orchestration/artifacts/cascade_walker.js +107 -0
  443. package/dist/orchestration/artifacts/cascade_walker.js.map +1 -0
  444. package/dist/orchestration/budget/budget_governance.d.ts +20 -0
  445. package/dist/orchestration/budget/budget_governance.d.ts.map +1 -0
  446. package/dist/orchestration/budget/budget_governance.js +182 -0
  447. package/dist/orchestration/budget/budget_governance.js.map +1 -0
  448. package/dist/orchestration/checkpoints/checkpoint_coordinator.d.ts +22 -0
  449. package/dist/orchestration/checkpoints/checkpoint_coordinator.d.ts.map +1 -0
  450. package/dist/orchestration/checkpoints/checkpoint_coordinator.js +252 -0
  451. package/dist/orchestration/checkpoints/checkpoint_coordinator.js.map +1 -0
  452. package/dist/orchestration/checkpoints/drift_engine.d.ts +52 -0
  453. package/dist/orchestration/checkpoints/drift_engine.d.ts.map +1 -0
  454. package/dist/orchestration/checkpoints/drift_engine.js +126 -0
  455. package/dist/orchestration/checkpoints/drift_engine.js.map +1 -0
  456. package/dist/orchestration/compaction/bounded_cognition.d.ts +22 -0
  457. package/dist/orchestration/compaction/bounded_cognition.d.ts.map +1 -0
  458. package/dist/orchestration/compaction/bounded_cognition.js +124 -0
  459. package/dist/orchestration/compaction/bounded_cognition.js.map +1 -0
  460. package/dist/orchestration/conversation/conversation_manager.d.ts +25 -0
  461. package/dist/orchestration/conversation/conversation_manager.d.ts.map +1 -0
  462. package/dist/orchestration/conversation/conversation_manager.js +260 -0
  463. package/dist/orchestration/conversation/conversation_manager.js.map +1 -0
  464. package/dist/orchestration/events/event_propagation.d.ts +20 -0
  465. package/dist/orchestration/events/event_propagation.d.ts.map +1 -0
  466. package/dist/orchestration/events/event_propagation.js +160 -0
  467. package/dist/orchestration/events/event_propagation.js.map +1 -0
  468. package/dist/orchestration/index.d.ts +28 -0
  469. package/dist/orchestration/index.d.ts.map +1 -0
  470. package/dist/orchestration/index.js +147 -0
  471. package/dist/orchestration/index.js.map +1 -0
  472. package/dist/orchestration/interfaces/orchestration.d.ts +494 -0
  473. package/dist/orchestration/interfaces/orchestration.d.ts.map +1 -0
  474. package/dist/orchestration/interfaces/orchestration.js +64 -0
  475. package/dist/orchestration/interfaces/orchestration.js.map +1 -0
  476. package/dist/orchestration/migration/003_orchestration.d.ts +27 -0
  477. package/dist/orchestration/migration/003_orchestration.d.ts.map +1 -0
  478. package/dist/orchestration/migration/003_orchestration.js +336 -0
  479. package/dist/orchestration/migration/003_orchestration.js.map +1 -0
  480. package/dist/orchestration/migration/004_tenant_isolation.d.ts +22 -0
  481. package/dist/orchestration/migration/004_tenant_isolation.d.ts.map +1 -0
  482. package/dist/orchestration/migration/004_tenant_isolation.js +179 -0
  483. package/dist/orchestration/migration/004_tenant_isolation.js.map +1 -0
  484. package/dist/orchestration/migration/005_immutability_triggers.d.ts +30 -0
  485. package/dist/orchestration/migration/005_immutability_triggers.d.ts.map +1 -0
  486. package/dist/orchestration/migration/005_immutability_triggers.js +93 -0
  487. package/dist/orchestration/migration/005_immutability_triggers.js.map +1 -0
  488. package/dist/orchestration/migration/006_audit_tombstone.d.ts +26 -0
  489. package/dist/orchestration/migration/006_audit_tombstone.d.ts.map +1 -0
  490. package/dist/orchestration/migration/006_audit_tombstone.js +71 -0
  491. package/dist/orchestration/migration/006_audit_tombstone.js.map +1 -0
  492. package/dist/orchestration/missions/mission_recovery.d.ts +60 -0
  493. package/dist/orchestration/missions/mission_recovery.d.ts.map +1 -0
  494. package/dist/orchestration/missions/mission_recovery.js +251 -0
  495. package/dist/orchestration/missions/mission_recovery.js.map +1 -0
  496. package/dist/orchestration/missions/mission_store.d.ts +16 -0
  497. package/dist/orchestration/missions/mission_store.d.ts.map +1 -0
  498. package/dist/orchestration/missions/mission_store.js +280 -0
  499. package/dist/orchestration/missions/mission_store.js.map +1 -0
  500. package/dist/orchestration/syscalls/create_artifact.d.ts +13 -0
  501. package/dist/orchestration/syscalls/create_artifact.d.ts.map +1 -0
  502. package/dist/orchestration/syscalls/create_artifact.js +23 -0
  503. package/dist/orchestration/syscalls/create_artifact.js.map +1 -0
  504. package/dist/orchestration/syscalls/emit_event.d.ts +13 -0
  505. package/dist/orchestration/syscalls/emit_event.d.ts.map +1 -0
  506. package/dist/orchestration/syscalls/emit_event.js +13 -0
  507. package/dist/orchestration/syscalls/emit_event.js.map +1 -0
  508. package/dist/orchestration/syscalls/propose_mission.d.ts +14 -0
  509. package/dist/orchestration/syscalls/propose_mission.d.ts.map +1 -0
  510. package/dist/orchestration/syscalls/propose_mission.js +27 -0
  511. package/dist/orchestration/syscalls/propose_mission.js.map +1 -0
  512. package/dist/orchestration/syscalls/propose_task_execution.d.ts +13 -0
  513. package/dist/orchestration/syscalls/propose_task_execution.d.ts.map +1 -0
  514. package/dist/orchestration/syscalls/propose_task_execution.js +84 -0
  515. package/dist/orchestration/syscalls/propose_task_execution.js.map +1 -0
  516. package/dist/orchestration/syscalls/propose_task_graph.d.ts +13 -0
  517. package/dist/orchestration/syscalls/propose_task_graph.d.ts.map +1 -0
  518. package/dist/orchestration/syscalls/propose_task_graph.js +22 -0
  519. package/dist/orchestration/syscalls/propose_task_graph.js.map +1 -0
  520. package/dist/orchestration/syscalls/read_artifact.d.ts +14 -0
  521. package/dist/orchestration/syscalls/read_artifact.d.ts.map +1 -0
  522. package/dist/orchestration/syscalls/read_artifact.js +31 -0
  523. package/dist/orchestration/syscalls/read_artifact.js.map +1 -0
  524. package/dist/orchestration/syscalls/request_budget.d.ts +14 -0
  525. package/dist/orchestration/syscalls/request_budget.d.ts.map +1 -0
  526. package/dist/orchestration/syscalls/request_budget.js +46 -0
  527. package/dist/orchestration/syscalls/request_budget.js.map +1 -0
  528. package/dist/orchestration/syscalls/request_capability.d.ts +13 -0
  529. package/dist/orchestration/syscalls/request_capability.d.ts.map +1 -0
  530. package/dist/orchestration/syscalls/request_capability.js +136 -0
  531. package/dist/orchestration/syscalls/request_capability.js.map +1 -0
  532. package/dist/orchestration/syscalls/respond_checkpoint.d.ts +12 -0
  533. package/dist/orchestration/syscalls/respond_checkpoint.d.ts.map +1 -0
  534. package/dist/orchestration/syscalls/respond_checkpoint.js +12 -0
  535. package/dist/orchestration/syscalls/respond_checkpoint.js.map +1 -0
  536. package/dist/orchestration/syscalls/submit_result.d.ts +15 -0
  537. package/dist/orchestration/syscalls/submit_result.d.ts.map +1 -0
  538. package/dist/orchestration/syscalls/submit_result.js +97 -0
  539. package/dist/orchestration/syscalls/submit_result.js.map +1 -0
  540. package/dist/orchestration/tasks/task_graph.d.ts +26 -0
  541. package/dist/orchestration/tasks/task_graph.d.ts.map +1 -0
  542. package/dist/orchestration/tasks/task_graph.js +204 -0
  543. package/dist/orchestration/tasks/task_graph.js.map +1 -0
  544. package/dist/orchestration/tasks/task_store.d.ts +18 -0
  545. package/dist/orchestration/tasks/task_store.d.ts.map +1 -0
  546. package/dist/orchestration/tasks/task_store.js +99 -0
  547. package/dist/orchestration/tasks/task_store.js.map +1 -0
  548. package/dist/reference-agent/artifact_manager.d.ts +119 -0
  549. package/dist/reference-agent/artifact_manager.d.ts.map +1 -0
  550. package/dist/reference-agent/artifact_manager.js +149 -0
  551. package/dist/reference-agent/artifact_manager.js.map +1 -0
  552. package/dist/reference-agent/checkpoint_handler.d.ts +186 -0
  553. package/dist/reference-agent/checkpoint_handler.d.ts.map +1 -0
  554. package/dist/reference-agent/checkpoint_handler.js +423 -0
  555. package/dist/reference-agent/checkpoint_handler.js.map +1 -0
  556. package/dist/reference-agent/index.d.ts +43 -0
  557. package/dist/reference-agent/index.d.ts.map +1 -0
  558. package/dist/reference-agent/index.js +53 -0
  559. package/dist/reference-agent/index.js.map +1 -0
  560. package/dist/reference-agent/mission_planner.d.ts +163 -0
  561. package/dist/reference-agent/mission_planner.d.ts.map +1 -0
  562. package/dist/reference-agent/mission_planner.js +375 -0
  563. package/dist/reference-agent/mission_planner.js.map +1 -0
  564. package/dist/reference-agent/reference_agent.d.ts +130 -0
  565. package/dist/reference-agent/reference_agent.d.ts.map +1 -0
  566. package/dist/reference-agent/reference_agent.js +360 -0
  567. package/dist/reference-agent/reference_agent.js.map +1 -0
  568. package/dist/reference-agent/reference_agent.types.d.ts +199 -0
  569. package/dist/reference-agent/reference_agent.types.d.ts.map +1 -0
  570. package/dist/reference-agent/reference_agent.types.js +59 -0
  571. package/dist/reference-agent/reference_agent.types.js.map +1 -0
  572. package/dist/reference-agent/result_aggregator.d.ts +107 -0
  573. package/dist/reference-agent/result_aggregator.d.ts.map +1 -0
  574. package/dist/reference-agent/result_aggregator.js +219 -0
  575. package/dist/reference-agent/result_aggregator.js.map +1 -0
  576. package/dist/reference-agent/system_call_client.d.ts +106 -0
  577. package/dist/reference-agent/system_call_client.d.ts.map +1 -0
  578. package/dist/reference-agent/system_call_client.js +231 -0
  579. package/dist/reference-agent/system_call_client.js.map +1 -0
  580. package/dist/reference-agent/task_executor.d.ts +108 -0
  581. package/dist/reference-agent/task_executor.d.ts.map +1 -0
  582. package/dist/reference-agent/task_executor.js +249 -0
  583. package/dist/reference-agent/task_executor.js.map +1 -0
  584. package/dist/substrate/accounting/resource_accounting.d.ts +52 -0
  585. package/dist/substrate/accounting/resource_accounting.d.ts.map +1 -0
  586. package/dist/substrate/accounting/resource_accounting.js +200 -0
  587. package/dist/substrate/accounting/resource_accounting.js.map +1 -0
  588. package/dist/substrate/adapters/capability_registry.d.ts +28 -0
  589. package/dist/substrate/adapters/capability_registry.d.ts.map +1 -0
  590. package/dist/substrate/adapters/capability_registry.js +196 -0
  591. package/dist/substrate/adapters/capability_registry.js.map +1 -0
  592. package/dist/substrate/gateway/llm_gateway.d.ts +68 -0
  593. package/dist/substrate/gateway/llm_gateway.d.ts.map +1 -0
  594. package/dist/substrate/gateway/llm_gateway.js +442 -0
  595. package/dist/substrate/gateway/llm_gateway.js.map +1 -0
  596. package/dist/substrate/heartbeat/heartbeat_monitor.d.ts +40 -0
  597. package/dist/substrate/heartbeat/heartbeat_monitor.d.ts.map +1 -0
  598. package/dist/substrate/heartbeat/heartbeat_monitor.js +170 -0
  599. package/dist/substrate/heartbeat/heartbeat_monitor.js.map +1 -0
  600. package/dist/substrate/index.d.ts +59 -0
  601. package/dist/substrate/index.d.ts.map +1 -0
  602. package/dist/substrate/index.js +143 -0
  603. package/dist/substrate/index.js.map +1 -0
  604. package/dist/substrate/interfaces/substrate.d.ts +486 -0
  605. package/dist/substrate/interfaces/substrate.d.ts.map +1 -0
  606. package/dist/substrate/interfaces/substrate.js +14 -0
  607. package/dist/substrate/interfaces/substrate.js.map +1 -0
  608. package/dist/substrate/migration/002_substrate.d.ts +24 -0
  609. package/dist/substrate/migration/002_substrate.d.ts.map +1 -0
  610. package/dist/substrate/migration/002_substrate.js +188 -0
  611. package/dist/substrate/migration/002_substrate.js.map +1 -0
  612. package/dist/substrate/migration/022_transport_deliberation.d.ts +31 -0
  613. package/dist/substrate/migration/022_transport_deliberation.d.ts.map +1 -0
  614. package/dist/substrate/migration/022_transport_deliberation.js +77 -0
  615. package/dist/substrate/migration/022_transport_deliberation.js.map +1 -0
  616. package/dist/substrate/replay/replay_engine.d.ts +65 -0
  617. package/dist/substrate/replay/replay_engine.d.ts.map +1 -0
  618. package/dist/substrate/replay/replay_engine.js +316 -0
  619. package/dist/substrate/replay/replay_engine.js.map +1 -0
  620. package/dist/substrate/scheduler/task_scheduler.d.ts +38 -0
  621. package/dist/substrate/scheduler/task_scheduler.d.ts.map +1 -0
  622. package/dist/substrate/scheduler/task_scheduler.js +486 -0
  623. package/dist/substrate/scheduler/task_scheduler.js.map +1 -0
  624. package/dist/substrate/transport/adapters/anthropic_adapter.d.ts +57 -0
  625. package/dist/substrate/transport/adapters/anthropic_adapter.d.ts.map +1 -0
  626. package/dist/substrate/transport/adapters/anthropic_adapter.js +455 -0
  627. package/dist/substrate/transport/adapters/anthropic_adapter.js.map +1 -0
  628. package/dist/substrate/transport/adapters/gemini_adapter.d.ts +86 -0
  629. package/dist/substrate/transport/adapters/gemini_adapter.d.ts.map +1 -0
  630. package/dist/substrate/transport/adapters/gemini_adapter.js +456 -0
  631. package/dist/substrate/transport/adapters/gemini_adapter.js.map +1 -0
  632. package/dist/substrate/transport/adapters/groq_adapter.d.ts +50 -0
  633. package/dist/substrate/transport/adapters/groq_adapter.d.ts.map +1 -0
  634. package/dist/substrate/transport/adapters/groq_adapter.js +179 -0
  635. package/dist/substrate/transport/adapters/groq_adapter.js.map +1 -0
  636. package/dist/substrate/transport/adapters/mistral_adapter.d.ts +50 -0
  637. package/dist/substrate/transport/adapters/mistral_adapter.d.ts.map +1 -0
  638. package/dist/substrate/transport/adapters/mistral_adapter.js +179 -0
  639. package/dist/substrate/transport/adapters/mistral_adapter.js.map +1 -0
  640. package/dist/substrate/transport/adapters/ollama_adapter.d.ts +66 -0
  641. package/dist/substrate/transport/adapters/ollama_adapter.d.ts.map +1 -0
  642. package/dist/substrate/transport/adapters/ollama_adapter.js +347 -0
  643. package/dist/substrate/transport/adapters/ollama_adapter.js.map +1 -0
  644. package/dist/substrate/transport/adapters/openai_adapter.d.ts +68 -0
  645. package/dist/substrate/transport/adapters/openai_adapter.d.ts.map +1 -0
  646. package/dist/substrate/transport/adapters/openai_adapter.js +439 -0
  647. package/dist/substrate/transport/adapters/openai_adapter.js.map +1 -0
  648. package/dist/substrate/transport/adapters/openai_compat.d.ts +64 -0
  649. package/dist/substrate/transport/adapters/openai_compat.d.ts.map +1 -0
  650. package/dist/substrate/transport/adapters/openai_compat.js +326 -0
  651. package/dist/substrate/transport/adapters/openai_compat.js.map +1 -0
  652. package/dist/substrate/transport/index.d.ts +17 -0
  653. package/dist/substrate/transport/index.d.ts.map +1 -0
  654. package/dist/substrate/transport/index.js +25 -0
  655. package/dist/substrate/transport/index.js.map +1 -0
  656. package/dist/substrate/transport/stream_parser.d.ts +69 -0
  657. package/dist/substrate/transport/stream_parser.d.ts.map +1 -0
  658. package/dist/substrate/transport/stream_parser.js +280 -0
  659. package/dist/substrate/transport/stream_parser.js.map +1 -0
  660. package/dist/substrate/transport/transport_engine.d.ts +53 -0
  661. package/dist/substrate/transport/transport_engine.d.ts.map +1 -0
  662. package/dist/substrate/transport/transport_engine.js +444 -0
  663. package/dist/substrate/transport/transport_engine.js.map +1 -0
  664. package/dist/substrate/transport/transport_types.d.ts +207 -0
  665. package/dist/substrate/transport/transport_types.d.ts.map +1 -0
  666. package/dist/substrate/transport/transport_types.js +13 -0
  667. package/dist/substrate/transport/transport_types.js.map +1 -0
  668. package/dist/substrate/workers/worker_runtime.d.ts +40 -0
  669. package/dist/substrate/workers/worker_runtime.d.ts.map +1 -0
  670. package/dist/substrate/workers/worker_runtime.js +294 -0
  671. package/dist/substrate/workers/worker_runtime.js.map +1 -0
  672. package/dist/techniques/harness/tgp_harness.d.ts +39 -0
  673. package/dist/techniques/harness/tgp_harness.d.ts.map +1 -0
  674. package/dist/techniques/harness/tgp_harness.js +49 -0
  675. package/dist/techniques/harness/tgp_harness.js.map +1 -0
  676. package/dist/techniques/interfaces/tgp_types.d.ts +646 -0
  677. package/dist/techniques/interfaces/tgp_types.d.ts.map +1 -0
  678. package/dist/techniques/interfaces/tgp_types.js +160 -0
  679. package/dist/techniques/interfaces/tgp_types.js.map +1 -0
  680. package/dist/techniques/migration/020_tgp_governance.d.ts +36 -0
  681. package/dist/techniques/migration/020_tgp_governance.d.ts.map +1 -0
  682. package/dist/techniques/migration/020_tgp_governance.js +249 -0
  683. package/dist/techniques/migration/020_tgp_governance.js.map +1 -0
  684. package/dist/techniques/store/tgp_stores.d.ts +36 -0
  685. package/dist/techniques/store/tgp_stores.d.ts.map +1 -0
  686. package/dist/techniques/store/tgp_stores.js +854 -0
  687. package/dist/techniques/store/tgp_stores.js.map +1 -0
  688. package/dist/working-memory/harness/wmp_harness.d.ts +43 -0
  689. package/dist/working-memory/harness/wmp_harness.d.ts.map +1 -0
  690. package/dist/working-memory/harness/wmp_harness.js +81 -0
  691. package/dist/working-memory/harness/wmp_harness.js.map +1 -0
  692. package/dist/working-memory/interfaces/wmp_types.d.ts +635 -0
  693. package/dist/working-memory/interfaces/wmp_types.d.ts.map +1 -0
  694. package/dist/working-memory/interfaces/wmp_types.js +144 -0
  695. package/dist/working-memory/interfaces/wmp_types.js.map +1 -0
  696. package/dist/working-memory/migration/021_wmp.d.ts +21 -0
  697. package/dist/working-memory/migration/021_wmp.d.ts.map +1 -0
  698. package/dist/working-memory/migration/021_wmp.js +139 -0
  699. package/dist/working-memory/migration/021_wmp.js.map +1 -0
  700. package/dist/working-memory/stores/wmp_stores.d.ts +28 -0
  701. package/dist/working-memory/stores/wmp_stores.d.ts.map +1 -0
  702. package/dist/working-memory/stores/wmp_stores.js +754 -0
  703. package/dist/working-memory/stores/wmp_stores.js.map +1 -0
  704. package/package.json +84 -0
@@ -0,0 +1,1250 @@
1
+ /**
2
+ * EGP (Execution Governance Protocol) implementation — all 13 subsystems.
3
+ * Spec ref: EGP v1.0 Design Source (FINAL), Architecture Freeze CF-06/CF-11
4
+ *
5
+ * Phase: v3.3.0 — Execution Governance Implementation (Control 3, Phase 5)
6
+ * Status: IMPLEMENTATION — replaces NotImplementedError harness.
7
+ *
8
+ * Architecture: In-memory stateful implementation within governor factory closure.
9
+ * State lives in Maps (reservations, mission budgets, starvation counters).
10
+ * DatabaseConnection accepted for interface compliance; state is not SQL-backed.
11
+ * StarvationTracker explicitly in-memory per AMB-06.
12
+ *
13
+ * Invariants enforced:
14
+ * EGP-I1 Reservation Isolation (overage doesn't leak across tasks)
15
+ * EGP-I3 Atomic Reclaim on Final Terminal per dimension
16
+ * EGP-I4 Dual-Dimension Enforcement (token + deliberation independently)
17
+ * EGP-I5 Starvation Bound (N+1 cycles → priority promotion)
18
+ * EGP-I6 Branch Failure Policies (isolate, fail-fast, quorum)
19
+ * EGP-I7 Capability Mutability Classification per operation
20
+ * EGP-I8 Retry Consumes Same Reservation (cumulative consumption)
21
+ * EGP-I9 Scheduling Determinism (same inputs → same output)
22
+ * EGP-I10 Running Tasks Not Preemptible
23
+ * EGP-I12 Overage Normalization (clamp to zero, debt to mission)
24
+ * EGP-I13 Conservation Law per dimension
25
+ * EGP-I14 v3.3 task requires reservation for execution (DC-EGP-064)
26
+ */
27
+ import { RESERVATION_STATUS_TRANSITIONS, DEFAULT_CAPABILITY_MUTABILITY, EGP_EVENTS, RESERVATION_ERROR_CODES, WAVE_ERROR_CODES, BRANCH_FAILURE_ERROR_CODES, SCHEDULER_ERROR_CODES, ENFORCEMENT_ERROR_CODES, } from '../interfaces/egp_types.js';
28
+ // ============================================================================
29
+ // Result Helpers
30
+ // ============================================================================
31
+ function ok(value) {
32
+ return { ok: true, value };
33
+ }
34
+ function err(code, message, spec = '') {
35
+ return { ok: false, error: { code, message, spec } };
36
+ }
37
+ // ============================================================================
38
+ // Freeze Helpers
39
+ // ============================================================================
40
+ function freezeReservation(r) {
41
+ return Object.freeze({
42
+ reservationId: r.reservationId,
43
+ taskId: r.taskId,
44
+ missionId: r.missionId,
45
+ reservedTokens: r.reservedTokens,
46
+ consumedTokens: r.consumedTokens,
47
+ reservedDeliberation: r.reservedDeliberation,
48
+ consumedDeliberation: r.consumedDeliberation,
49
+ status: r.status,
50
+ allocationMethod: r.allocationMethod,
51
+ createdAt: r.createdAt,
52
+ releasedAt: r.releasedAt,
53
+ });
54
+ }
55
+ function freezeDimension(d) {
56
+ return Object.freeze({
57
+ allocated: d.allocated,
58
+ totalConsumed: d.totalConsumed,
59
+ totalReserved: d.totalReserved,
60
+ unreservedRemaining: d.unreservedRemaining,
61
+ missionDebt: d.missionDebt,
62
+ });
63
+ }
64
+ function freezeBudgetState(b) {
65
+ return Object.freeze({
66
+ missionId: b.missionId,
67
+ token: freezeDimension(b.token),
68
+ deliberation: freezeDimension(b.deliberation),
69
+ overBudgetFaultActive: b.token.missionDebt > 0 || b.deliberation.missionDebt > 0,
70
+ });
71
+ }
72
+ // ============================================================================
73
+ // Event Emission Helpers
74
+ // ============================================================================
75
+ function emitEvent(deps, type, scope, payload) {
76
+ deps.events.emit({ type, scope, propagation: 'up', payload });
77
+ }
78
+ function emitTrace(deps, conn, ctx, type, payload) {
79
+ if (!deps.traceEmitter)
80
+ return;
81
+ const egpCtx = ctx;
82
+ if (!egpCtx.correlationId)
83
+ return;
84
+ deps.traceEmitter.emit(conn, ctx, {
85
+ correlationId: egpCtx.correlationId,
86
+ type,
87
+ payload,
88
+ });
89
+ }
90
+ // ============================================================================
91
+ // Factory: createExecutionGovernorImpl
92
+ // ============================================================================
93
+ export function createExecutionGovernorImpl(deps) {
94
+ // ── Internal State ──
95
+ const reservationMap = new Map();
96
+ const taskIndex = new Map(); // taskId → reservationId
97
+ let reservationCounter = 0;
98
+ let waveCounter = 0;
99
+ // BRK-EGP-B08: Released reservation retention period (ms).
100
+ // Released reservations are cleaned up after this period on next access.
101
+ const RELEASED_RETENTION_MS = 5 * 60 * 1000; // 5 minutes
102
+ const missionBudgets = new Map();
103
+ const starvationCounters = new Map();
104
+ // ── Internal Helpers ──
105
+ function getOrCreateBudget(missionId) {
106
+ const existing = missionBudgets.get(missionId);
107
+ if (existing)
108
+ return existing;
109
+ const budget = {
110
+ missionId,
111
+ token: { allocated: 0, totalConsumed: 0, totalReserved: 0, unreservedRemaining: 0, missionDebt: 0 },
112
+ deliberation: { allocated: 0, totalConsumed: 0, totalReserved: 0, unreservedRemaining: 0, missionDebt: 0 },
113
+ };
114
+ missionBudgets.set(missionId, budget);
115
+ return budget;
116
+ }
117
+ function findReservationByTask(taskId) {
118
+ const resId = taskIndex.get(taskId);
119
+ if (!resId)
120
+ return null;
121
+ const res = reservationMap.get(resId);
122
+ if (!res || res.status === 'released')
123
+ return null;
124
+ return res;
125
+ }
126
+ function validateTransition(current, target) {
127
+ const allowed = RESERVATION_STATUS_TRANSITIONS[current];
128
+ return allowed.includes(target);
129
+ }
130
+ function generateReservationId() {
131
+ return `egp-res-${++reservationCounter}`;
132
+ }
133
+ function generateWaveId() {
134
+ return `egp-wave-${++waveCounter}`;
135
+ }
136
+ // ── 1. BudgetReservationStore ──
137
+ const reservations = Object.freeze({
138
+ create(conn, ctx, input) {
139
+ // Check for existing non-released reservation
140
+ const existing = findReservationByTask(input.taskId);
141
+ if (existing) {
142
+ return err(RESERVATION_ERROR_CODES.ALREADY_EXISTS, `Task ${input.taskId} already has a non-released reservation`, '§5.1');
143
+ }
144
+ const resId = generateReservationId();
145
+ const now = deps.time.nowISO();
146
+ const mutable = {
147
+ reservationId: resId,
148
+ taskId: input.taskId,
149
+ missionId: input.missionId,
150
+ reservedTokens: input.reservedTokens,
151
+ consumedTokens: 0,
152
+ reservedDeliberation: input.reservedDeliberation,
153
+ consumedDeliberation: 0,
154
+ status: 'reserved',
155
+ allocationMethod: input.allocationMethod,
156
+ createdAt: now,
157
+ releasedAt: null,
158
+ };
159
+ reservationMap.set(resId, mutable);
160
+ taskIndex.set(input.taskId, resId);
161
+ // Emit events
162
+ emitEvent(deps, EGP_EVENTS.RESERVATION_CREATED, 'task', {
163
+ reservationId: resId,
164
+ taskId: input.taskId,
165
+ missionId: input.missionId,
166
+ reservedTokens: input.reservedTokens,
167
+ reservedDeliberation: input.reservedDeliberation,
168
+ });
169
+ // Trace emission (Phase 0A)
170
+ emitTrace(deps, conn, ctx, 'egp.reservation.created', {
171
+ reservationId: resId,
172
+ taskId: input.taskId,
173
+ missionId: input.missionId,
174
+ });
175
+ return ok(freezeReservation(mutable));
176
+ },
177
+ createBatch(conn, ctx, inputs) {
178
+ return conn.transaction(() => {
179
+ const results = [];
180
+ for (const input of inputs) {
181
+ const result = reservations.create(conn, ctx, input);
182
+ if (!result.ok)
183
+ return result;
184
+ results.push(result.value);
185
+ }
186
+ return ok(Object.freeze(results));
187
+ });
188
+ },
189
+ getByTaskId(_conn, taskId) {
190
+ const resId = taskIndex.get(taskId);
191
+ if (!resId)
192
+ return ok(null);
193
+ const res = reservationMap.get(resId);
194
+ if (!res)
195
+ return ok(null);
196
+ return ok(freezeReservation(res));
197
+ },
198
+ getById(_conn, reservationId) {
199
+ const res = reservationMap.get(reservationId);
200
+ if (!res) {
201
+ return err(RESERVATION_ERROR_CODES.NOT_FOUND, `Reservation ${reservationId} not found`, '§5.1');
202
+ }
203
+ return ok(freezeReservation(res));
204
+ },
205
+ activate(_conn, reservationId) {
206
+ const res = reservationMap.get(reservationId);
207
+ if (!res) {
208
+ return err(RESERVATION_ERROR_CODES.NOT_FOUND, `Reservation ${reservationId} not found`, '§5.1');
209
+ }
210
+ if (!validateTransition(res.status, 'active')) {
211
+ return err(RESERVATION_ERROR_CODES.INVALID_TRANSITION, `Cannot transition from ${res.status} to active`, '§5.1');
212
+ }
213
+ res.status = 'active';
214
+ emitEvent(deps, EGP_EVENTS.RESERVATION_ACTIVATED, 'task', {
215
+ reservationId, taskId: res.taskId,
216
+ });
217
+ return ok(undefined);
218
+ },
219
+ retain(_conn, reservationId) {
220
+ const res = reservationMap.get(reservationId);
221
+ if (!res) {
222
+ return err(RESERVATION_ERROR_CODES.NOT_FOUND, `Reservation ${reservationId} not found`, '§5.1');
223
+ }
224
+ if (!validateTransition(res.status, 'retained')) {
225
+ return err(RESERVATION_ERROR_CODES.INVALID_TRANSITION, `Cannot transition from ${res.status} to retained`, '§5.1');
226
+ }
227
+ res.status = 'retained';
228
+ emitEvent(deps, EGP_EVENTS.RESERVATION_RETAINED, 'task', {
229
+ reservationId, taskId: res.taskId,
230
+ });
231
+ return ok(undefined);
232
+ },
233
+ reactivate(_conn, reservationId) {
234
+ const res = reservationMap.get(reservationId);
235
+ if (!res) {
236
+ return err(RESERVATION_ERROR_CODES.NOT_FOUND, `Reservation ${reservationId} not found`, '§5.1');
237
+ }
238
+ if (!validateTransition(res.status, 'active')) {
239
+ return err(RESERVATION_ERROR_CODES.INVALID_TRANSITION, `Cannot transition from ${res.status} to active`, '§5.1');
240
+ }
241
+ res.status = 'active';
242
+ emitEvent(deps, EGP_EVENTS.RESERVATION_ACTIVATED, 'task', {
243
+ reservationId, taskId: res.taskId,
244
+ });
245
+ return ok(undefined);
246
+ },
247
+ updateConsumed(_conn, reservationId, tokensConsumed, deliberationConsumed) {
248
+ // DC-EGP-002: Non-negative consumption validation
249
+ if (tokensConsumed < 0 || deliberationConsumed < 0) {
250
+ return err(ENFORCEMENT_ERROR_CODES.INVALID_CONSUMPTION, 'Consumption values must be non-negative', 'DC-EGP-002');
251
+ }
252
+ const res = reservationMap.get(reservationId);
253
+ if (!res) {
254
+ return err(RESERVATION_ERROR_CODES.NOT_FOUND, `Reservation ${reservationId} not found`, '§5.1');
255
+ }
256
+ // EGP-I8: Cumulative consumption across retry attempts
257
+ res.consumedTokens += tokensConsumed;
258
+ res.consumedDeliberation += deliberationConsumed;
259
+ return ok(undefined);
260
+ },
261
+ release(_conn, _ctx, reservationId, reason) {
262
+ const res = reservationMap.get(reservationId);
263
+ if (!res) {
264
+ return err(RESERVATION_ERROR_CODES.NOT_FOUND, `Reservation ${reservationId} not found`, '§5.1');
265
+ }
266
+ if (!validateTransition(res.status, 'released')) {
267
+ return err(RESERVATION_ERROR_CODES.INVALID_TRANSITION, `Cannot transition from ${res.status} to released`, '§5.1');
268
+ }
269
+ // EGP-I3: Atomic reclaim per dimension
270
+ const overageTokens = Math.max(0, res.consumedTokens - res.reservedTokens);
271
+ const overageDeliberation = Math.max(0, res.consumedDeliberation - res.reservedDeliberation);
272
+ const reclaimedTokens = Math.max(0, res.reservedTokens - res.consumedTokens);
273
+ const reclaimedDeliberation = Math.max(0, res.reservedDeliberation - res.consumedDeliberation);
274
+ res.status = 'released';
275
+ res.releasedAt = deps.time.nowISO();
276
+ // Remove from task index (released reservations not found by task lookup)
277
+ taskIndex.delete(res.taskId);
278
+ emitEvent(deps, EGP_EVENTS.RESERVATION_RELEASED, 'task', {
279
+ reservationId, taskId: res.taskId, reason,
280
+ reclaimedTokens, reclaimedDeliberation,
281
+ overageTokens, overageDeliberation,
282
+ });
283
+ return ok(Object.freeze({ reclaimedTokens, reclaimedDeliberation, overageTokens, overageDeliberation }));
284
+ },
285
+ getActiveByMission(_conn, missionId) {
286
+ const active = [];
287
+ const now = deps.time.nowMs();
288
+ // BRK-EGP-B08: Opportunistic cleanup of released reservations
289
+ // older than retention period for this mission.
290
+ const toRemove = [];
291
+ for (const [resId, res] of reservationMap.entries()) {
292
+ if (res.missionId === missionId) {
293
+ if (res.status === 'released' && res.releasedAt) {
294
+ const ageMs = now - new Date(res.releasedAt).getTime();
295
+ if (ageMs > RELEASED_RETENTION_MS) {
296
+ toRemove.push(resId);
297
+ }
298
+ }
299
+ else if (res.status !== 'released') {
300
+ active.push(freezeReservation(res));
301
+ }
302
+ }
303
+ }
304
+ for (const resId of toRemove) {
305
+ reservationMap.delete(resId);
306
+ }
307
+ return ok(Object.freeze(active));
308
+ },
309
+ });
310
+ // ── 2. MissionBudgetLedger ──
311
+ const ledger = Object.freeze({
312
+ getState(_conn, missionId) {
313
+ const budget = getOrCreateBudget(missionId);
314
+ return ok(freezeBudgetState(budget));
315
+ },
316
+ reserveFromPool(_conn, missionId, tokenAmount, deliberationAmount) {
317
+ const budget = getOrCreateBudget(missionId);
318
+ budget.token.unreservedRemaining -= tokenAmount;
319
+ budget.token.totalReserved += tokenAmount;
320
+ budget.deliberation.unreservedRemaining -= deliberationAmount;
321
+ budget.deliberation.totalReserved += deliberationAmount;
322
+ return ok(undefined);
323
+ },
324
+ returnToPool(_conn, missionId, tokenAmount, deliberationAmount) {
325
+ const budget = getOrCreateBudget(missionId);
326
+ budget.token.unreservedRemaining += tokenAmount;
327
+ budget.token.totalReserved -= tokenAmount;
328
+ budget.deliberation.unreservedRemaining += deliberationAmount;
329
+ budget.deliberation.totalReserved -= deliberationAmount;
330
+ return ok(undefined);
331
+ },
332
+ recordConsumption(_conn, missionId, tokenAmount, deliberationAmount) {
333
+ const budget = getOrCreateBudget(missionId);
334
+ budget.token.totalConsumed += tokenAmount;
335
+ budget.deliberation.totalConsumed += deliberationAmount;
336
+ return ok(undefined);
337
+ },
338
+ recordOverage(_conn, _ctx, missionId, tokenOverage, deliberationOverage) {
339
+ const budget = getOrCreateBudget(missionId);
340
+ const triggeringDimensions = [];
341
+ // Token dimension
342
+ if (tokenOverage > 0) {
343
+ if (tokenOverage > budget.token.unreservedRemaining) {
344
+ const excess = tokenOverage - budget.token.unreservedRemaining;
345
+ budget.token.unreservedRemaining = 0;
346
+ budget.token.missionDebt += excess;
347
+ triggeringDimensions.push('token');
348
+ }
349
+ else {
350
+ budget.token.unreservedRemaining -= tokenOverage;
351
+ }
352
+ }
353
+ // Deliberation dimension
354
+ if (deliberationOverage > 0) {
355
+ if (deliberationOverage > budget.deliberation.unreservedRemaining) {
356
+ const excess = deliberationOverage - budget.deliberation.unreservedRemaining;
357
+ budget.deliberation.unreservedRemaining = 0;
358
+ budget.deliberation.missionDebt += excess;
359
+ triggeringDimensions.push('deliberation');
360
+ }
361
+ else {
362
+ budget.deliberation.unreservedRemaining -= deliberationOverage;
363
+ }
364
+ }
365
+ // EGP-I12: Over-budget fault state
366
+ if (budget.token.missionDebt > 0 || budget.deliberation.missionDebt > 0) {
367
+ const fault = Object.freeze({
368
+ missionId,
369
+ active: true,
370
+ triggeringDimensions: Object.freeze(triggeringDimensions),
371
+ tokenDebt: budget.token.missionDebt,
372
+ deliberationDebt: budget.deliberation.missionDebt,
373
+ admissionBlocked: true,
374
+ schedulingBlocked: true,
375
+ });
376
+ emitEvent(deps, EGP_EVENTS.MISSION_BUDGET_EXCEEDED, 'mission', {
377
+ missionId,
378
+ tokenDebt: budget.token.missionDebt,
379
+ deliberationDebt: budget.deliberation.missionDebt,
380
+ });
381
+ return ok(fault);
382
+ }
383
+ return ok(null);
384
+ },
385
+ checkConservation(conn, missionId) {
386
+ const budget = getOrCreateBudget(missionId);
387
+ // EGP-I13: allocated + missionDebt = totalConsumed + totalReserved + unreservedRemaining
388
+ const tokenLeft = budget.token.allocated + budget.token.missionDebt;
389
+ const tokenRight = budget.token.totalConsumed + budget.token.totalReserved + budget.token.unreservedRemaining;
390
+ const tokenDelta = tokenLeft - tokenRight;
391
+ const delibLeft = budget.deliberation.allocated + budget.deliberation.missionDebt;
392
+ const delibRight = budget.deliberation.totalConsumed + budget.deliberation.totalReserved + budget.deliberation.unreservedRemaining;
393
+ const delibDelta = delibLeft - delibRight;
394
+ const result = Object.freeze({
395
+ holds: tokenDelta === 0 && delibDelta === 0,
396
+ token: Object.freeze({ leftSide: tokenLeft, rightSide: tokenRight, delta: tokenDelta }),
397
+ deliberation: Object.freeze({ leftSide: delibLeft, rightSide: delibRight, delta: delibDelta }),
398
+ });
399
+ // DC-EGP-051: Audit entry for conservation check
400
+ deps.audit.append(conn, {
401
+ tenantId: null,
402
+ actorType: 'system',
403
+ actorId: 'egp',
404
+ action: 'conservation_check',
405
+ resourceType: 'mission',
406
+ resourceId: missionId,
407
+ detail: {
408
+ holds: result.holds,
409
+ tokenDelta,
410
+ delibDelta,
411
+ tokenLeft,
412
+ tokenRight,
413
+ delibLeft,
414
+ delibRight,
415
+ },
416
+ });
417
+ return ok(result);
418
+ },
419
+ initializeBudget(_conn, missionId, tokenAllocation, deliberationAllocation) {
420
+ const budget = getOrCreateBudget(missionId);
421
+ budget.token.allocated = tokenAllocation;
422
+ budget.token.unreservedRemaining = tokenAllocation;
423
+ budget.deliberation.allocated = deliberationAllocation;
424
+ budget.deliberation.unreservedRemaining = deliberationAllocation;
425
+ return ok(undefined);
426
+ },
427
+ finalizeReservation(_conn, missionId, consumedTokens, consumedDeliberation, reclaimedTokens, reclaimedDeliberation) {
428
+ const budget = getOrCreateBudget(missionId);
429
+ // EGP-I3 + EGP-I13: Atomic reservation finalization
430
+ // reserved -= (consumed + reclaimed) — full reservation removed
431
+ budget.token.totalReserved -= (consumedTokens + reclaimedTokens);
432
+ budget.deliberation.totalReserved -= (consumedDeliberation + reclaimedDeliberation);
433
+ // unreserved += reclaimed — unconsumed returned to pool
434
+ budget.token.unreservedRemaining += reclaimedTokens;
435
+ budget.deliberation.unreservedRemaining += reclaimedDeliberation;
436
+ // consumed += consumed — consumption recorded at mission level
437
+ budget.token.totalConsumed += consumedTokens;
438
+ budget.deliberation.totalConsumed += consumedDeliberation;
439
+ return ok(undefined);
440
+ },
441
+ });
442
+ // ── 3. WaveComposer ──
443
+ const waveComposer = Object.freeze({
444
+ compose(_conn, _ctx, input) {
445
+ // Validate inputs (DC-EGP-068)
446
+ if (input.eligibleTasks.length === 0) {
447
+ return err(WAVE_ERROR_CODES.NO_ELIGIBLE_TASKS, 'No eligible tasks for wave composition', 'PSD-3');
448
+ }
449
+ if (input.tokenPool < 0 || input.deliberationPool < 0) {
450
+ return err(WAVE_ERROR_CODES.INVALID_POOL, 'Pool values must be non-negative', 'DC-EGP-068');
451
+ }
452
+ // Check for duplicate taskIds
453
+ const taskIdSet = new Set();
454
+ for (const task of input.eligibleTasks) {
455
+ if (taskIdSet.has(task.taskId)) {
456
+ return err(WAVE_ERROR_CODES.DUPLICATE_TASK, `Duplicate taskId: ${task.taskId}`, 'DC-EGP-068');
457
+ }
458
+ taskIdSet.add(task.taskId);
459
+ }
460
+ // Check for invalid estimates
461
+ for (const task of input.eligibleTasks) {
462
+ if (task.estimatedTokens < 0 || isNaN(task.estimatedTokens) ||
463
+ task.estimatedDeliberationTokens < 0 || isNaN(task.estimatedDeliberationTokens)) {
464
+ return err(WAVE_ERROR_CODES.INVALID_TASK_ESTIMATE, `Invalid estimate for task ${task.taskId}`, 'DC-EGP-068');
465
+ }
466
+ }
467
+ // EGP-I9: Snapshot pool (immutable during composition)
468
+ const tokenPoolSnapshot = input.tokenPool;
469
+ const deliberationPoolSnapshot = input.deliberationPool;
470
+ const theWaveId = generateWaveId();
471
+ // Sort by priority for determinism (EGP-I9)
472
+ const sortedTasks = [...input.eligibleTasks].sort((a, b) => a.priority - b.priority);
473
+ // Iterative allocation: allocate, exclude below-minimum, re-allocate with remaining tasks
474
+ // This ensures that when equal allocation produces sub-minimum shares, we remove tasks
475
+ // and give the remaining tasks larger shares until all scheduled tasks meet minimums.
476
+ let candidateTasks = [...sortedTasks];
477
+ const excluded = [];
478
+ let stable = false;
479
+ // BRK-EGP-B07: Math.floor in allocation produces budget "dust" — the total
480
+ // allocated tokens may be less than the pool by up to (N-1) tokens where N is
481
+ // the number of scheduled tasks. This is accepted behavior: floor guarantees no
482
+ // individual task receives more than its share (prevents over-allocation), and the
483
+ // dust (≤ N-1 tokens) returns to the unreserved pool implicitly. The dust amount
484
+ // is bounded and does not accumulate across waves. Conservation law still holds
485
+ // because allocated - sum(reservations) = dust ≥ 0, which is accounted for in
486
+ // the unreservedRemaining term.
487
+ while (!stable) {
488
+ stable = true;
489
+ const allocations = new Map();
490
+ const candDelibTasks = candidateTasks.filter(t => t.requiresDeliberation);
491
+ if (input.allocationMethod === 'proportional') {
492
+ const totalEstTokens = candidateTasks.reduce((s, t) => s + t.estimatedTokens, 0);
493
+ const totalEstDelib = candDelibTasks.reduce((s, t) => s + t.estimatedDeliberationTokens, 0);
494
+ for (const task of candidateTasks) {
495
+ const tokenShare = totalEstTokens > 0
496
+ ? (task.estimatedTokens / totalEstTokens) * tokenPoolSnapshot
497
+ : tokenPoolSnapshot / candidateTasks.length;
498
+ let delibShare = 0;
499
+ if (task.requiresDeliberation && totalEstDelib > 0) {
500
+ delibShare = (task.estimatedDeliberationTokens / totalEstDelib) * deliberationPoolSnapshot;
501
+ }
502
+ allocations.set(task.taskId, {
503
+ tokens: Math.floor(tokenShare),
504
+ deliberation: Math.floor(delibShare),
505
+ });
506
+ }
507
+ }
508
+ else if (input.allocationMethod === 'equal') {
509
+ const tokenPerTask = candidateTasks.length > 0
510
+ ? Math.floor(tokenPoolSnapshot / candidateTasks.length)
511
+ : 0;
512
+ const delibPerTask = candDelibTasks.length > 0
513
+ ? Math.floor(deliberationPoolSnapshot / candDelibTasks.length)
514
+ : 0;
515
+ for (const task of candidateTasks) {
516
+ allocations.set(task.taskId, {
517
+ tokens: tokenPerTask,
518
+ deliberation: task.requiresDeliberation ? delibPerTask : 0,
519
+ });
520
+ }
521
+ }
522
+ else if (input.allocationMethod === 'explicit') {
523
+ for (const task of candidateTasks) {
524
+ allocations.set(task.taskId, {
525
+ tokens: task.estimatedTokens,
526
+ deliberation: task.requiresDeliberation ? task.estimatedDeliberationTokens : 0,
527
+ });
528
+ }
529
+ }
530
+ // Check if any candidate is below minimum viable — if so, exclude ONE (lowest priority)
531
+ // and re-iterate. Excluding only one at a time ensures remaining tasks get larger shares
532
+ // on the next pass, preventing the case where all tasks are excluded simultaneously
533
+ // when re-allocation with fewer tasks would produce viable shares.
534
+ let excludedOne = false;
535
+ // Iterate in reverse (lowest priority first) to exclude the least important task
536
+ for (let i = candidateTasks.length - 1; i >= 0; i--) {
537
+ const task = candidateTasks[i];
538
+ const alloc = allocations.get(task.taskId);
539
+ if (alloc.tokens < input.minimumViableTokens) {
540
+ excluded.push({ taskId: task.taskId, reason: `Token allocation ${alloc.tokens} below minimum ${input.minimumViableTokens}` });
541
+ candidateTasks.splice(i, 1);
542
+ stable = false;
543
+ excludedOne = true;
544
+ break; // Exclude only one per iteration, then re-allocate
545
+ }
546
+ if (task.requiresDeliberation && alloc.deliberation < input.minimumViableDeliberation) {
547
+ excluded.push({ taskId: task.taskId, reason: `Deliberation allocation ${alloc.deliberation} below minimum ${input.minimumViableDeliberation}` });
548
+ candidateTasks.splice(i, 1);
549
+ stable = false;
550
+ excludedOne = true;
551
+ break; // Exclude only one per iteration, then re-allocate
552
+ }
553
+ }
554
+ if (!excludedOne) {
555
+ // All candidates meet minimums — stable
556
+ stable = true;
557
+ }
558
+ if (candidateTasks.length === 0)
559
+ break;
560
+ }
561
+ const scheduled = candidateTasks;
562
+ // Compute final allocations for scheduled tasks
563
+ const finalAllocations = new Map();
564
+ const finalDelibTasks = scheduled.filter(t => t.requiresDeliberation);
565
+ if (input.allocationMethod === 'proportional') {
566
+ const totalEstTokens = scheduled.reduce((s, t) => s + t.estimatedTokens, 0);
567
+ const totalEstDelib = finalDelibTasks.reduce((s, t) => s + t.estimatedDeliberationTokens, 0);
568
+ for (const task of scheduled) {
569
+ const tokenShare = totalEstTokens > 0
570
+ ? (task.estimatedTokens / totalEstTokens) * tokenPoolSnapshot
571
+ : tokenPoolSnapshot / scheduled.length;
572
+ let delibShare = 0;
573
+ if (task.requiresDeliberation && totalEstDelib > 0) {
574
+ delibShare = (task.estimatedDeliberationTokens / totalEstDelib) * deliberationPoolSnapshot;
575
+ }
576
+ finalAllocations.set(task.taskId, {
577
+ tokens: Math.floor(tokenShare),
578
+ deliberation: Math.floor(delibShare),
579
+ });
580
+ }
581
+ }
582
+ else if (input.allocationMethod === 'equal') {
583
+ const tokenPerTask = scheduled.length > 0
584
+ ? Math.floor(tokenPoolSnapshot / scheduled.length)
585
+ : 0;
586
+ const delibPerTask = finalDelibTasks.length > 0
587
+ ? Math.floor(deliberationPoolSnapshot / finalDelibTasks.length)
588
+ : 0;
589
+ for (const task of scheduled) {
590
+ finalAllocations.set(task.taskId, {
591
+ tokens: tokenPerTask,
592
+ deliberation: task.requiresDeliberation ? delibPerTask : 0,
593
+ });
594
+ }
595
+ }
596
+ else if (input.allocationMethod === 'explicit') {
597
+ for (const task of scheduled) {
598
+ finalAllocations.set(task.taskId, {
599
+ tokens: task.estimatedTokens,
600
+ deliberation: task.requiresDeliberation ? task.estimatedDeliberationTokens : 0,
601
+ });
602
+ }
603
+ }
604
+ // BRK-EGP-B06: Build reservations through formal createBatch path,
605
+ // not direct map insertion. This ensures conservation checks apply,
606
+ // duplicate-reservation guards fire, and lifecycle events emit.
607
+ const batchInputs = scheduled.map(task => {
608
+ const alloc = finalAllocations.get(task.taskId);
609
+ return {
610
+ taskId: task.taskId,
611
+ missionId: input.missionId,
612
+ reservedTokens: alloc.tokens,
613
+ reservedDeliberation: alloc.deliberation,
614
+ allocationMethod: input.allocationMethod,
615
+ };
616
+ });
617
+ const batchResult = reservations.createBatch(_conn, _ctx, batchInputs);
618
+ if (!batchResult.ok) {
619
+ return batchResult;
620
+ }
621
+ const waveReservations = batchResult.value;
622
+ // Emit WAVE_COMPOSED event
623
+ if (scheduled.length > 0) {
624
+ emitEvent(deps, EGP_EVENTS.WAVE_COMPOSED, 'mission', {
625
+ waveId: theWaveId,
626
+ missionId: input.missionId,
627
+ scheduledCount: scheduled.length,
628
+ excludedCount: excluded.length,
629
+ });
630
+ }
631
+ return ok(Object.freeze({
632
+ waveId: theWaveId,
633
+ missionId: input.missionId,
634
+ scheduledTaskIds: Object.freeze(scheduled.map(t => t.taskId)),
635
+ reservations: Object.freeze(waveReservations),
636
+ excludedTasks: Object.freeze(excluded),
637
+ allocationMethod: input.allocationMethod,
638
+ tokenPoolSnapshot,
639
+ deliberationPoolSnapshot,
640
+ }));
641
+ },
642
+ });
643
+ // ── 4. BranchFailureHandler ──
644
+ const branchFailure = Object.freeze({
645
+ handleFailure(conn, _ctx, input) {
646
+ const cancelledTaskIds = [];
647
+ const releasedReservationIds = [];
648
+ const affectedFanIns = [];
649
+ if (input.policy === 'isolate') {
650
+ // EGP-I6: Siblings unaffected under isolate
651
+ // No cancellations
652
+ }
653
+ else if (input.policy === 'fail-fast') {
654
+ // Cancel PENDING/SCHEDULED siblings (NOT RUNNING — EGP-I10)
655
+ for (const sibling of input.siblingStates) {
656
+ if (sibling.state === 'PENDING' || sibling.state === 'SCHEDULED') {
657
+ cancelledTaskIds.push(sibling.taskId);
658
+ // Release reservation if exists
659
+ const res = findReservationByTask(sibling.taskId);
660
+ if (res) {
661
+ releasedReservationIds.push(res.reservationId);
662
+ }
663
+ }
664
+ }
665
+ }
666
+ else if (input.policy === 'quorum') {
667
+ // Quorum: evaluate fan-in dependents for impossibility
668
+ // No sibling cancellation under quorum
669
+ }
670
+ // Evaluate fan-in dependents
671
+ for (const fanIn of input.fanInDependents) {
672
+ const allStates = fanIn.allPredecessorIds.map(predId => {
673
+ // Find state from sibling states or the failed task
674
+ if (predId === input.failedTaskId) {
675
+ return { taskId: predId, state: 'FAILED' };
676
+ }
677
+ const sibState = input.siblingStates.find(s => s.taskId === predId);
678
+ if (sibState)
679
+ return sibState;
680
+ // If cancelled by fail-fast
681
+ if (cancelledTaskIds.includes(predId)) {
682
+ return { taskId: predId, state: 'CANCELLED' };
683
+ }
684
+ return { taskId: predId, state: 'PENDING' };
685
+ });
686
+ const fanInResult = branchFailure.evaluateFanIn(conn, fanIn.taskId, input.policy, allStates, fanIn.quorumThreshold);
687
+ if (fanInResult.ok) {
688
+ affectedFanIns.push(fanInResult.value);
689
+ }
690
+ }
691
+ emitEvent(deps, EGP_EVENTS.BRANCH_FAILURE_EVALUATED, 'mission', {
692
+ failedTaskId: input.failedTaskId,
693
+ missionId: input.missionId,
694
+ policy: input.policy,
695
+ cancelledCount: cancelledTaskIds.length,
696
+ });
697
+ return ok(Object.freeze({
698
+ failedTaskId: input.failedTaskId,
699
+ missionId: input.missionId,
700
+ policy: input.policy,
701
+ cancelledTaskIds: Object.freeze(cancelledTaskIds),
702
+ releasedReservationIds: Object.freeze(releasedReservationIds),
703
+ affectedFanIns: Object.freeze(affectedFanIns),
704
+ }));
705
+ },
706
+ evaluateFanIn(_conn, taskId, policy, predecessors, quorumThreshold) {
707
+ const completed = predecessors.filter(p => p.state === 'COMPLETED');
708
+ const failed = predecessors.filter(p => p.state === 'FAILED');
709
+ const cancelled = predecessors.filter(p => p.state === 'CANCELLED');
710
+ const terminal = new Set(['COMPLETED', 'FAILED', 'CANCELLED']);
711
+ const active = predecessors.filter(p => !terminal.has(p.state));
712
+ if (policy === 'quorum') {
713
+ // Validate threshold
714
+ if (quorumThreshold !== undefined && (quorumThreshold < 0 || quorumThreshold > 1.0)) {
715
+ return err(BRANCH_FAILURE_ERROR_CODES.QUORUM_THRESHOLD_INVALID, `Quorum threshold ${quorumThreshold} out of range [0.0, 1.0]`, 'EGP-I6');
716
+ }
717
+ const threshold = quorumThreshold ?? 1.0;
718
+ const total = predecessors.length;
719
+ const requiredSuccesses = Math.ceil(threshold * total);
720
+ const completedSuccessCount = completed.length;
721
+ const remainingActiveCount = active.length;
722
+ const met = completedSuccessCount >= requiredSuccesses;
723
+ const impossible = completedSuccessCount + remainingActiveCount < requiredSuccesses;
724
+ let reason;
725
+ let eligible;
726
+ if (met) {
727
+ reason = 'quorum_met';
728
+ eligible = true;
729
+ }
730
+ else if (impossible) {
731
+ reason = 'quorum_impossible';
732
+ eligible = false;
733
+ }
734
+ else {
735
+ reason = 'waiting';
736
+ eligible = false;
737
+ }
738
+ return ok(Object.freeze({
739
+ taskId,
740
+ eligible,
741
+ reason,
742
+ completedPredecessors: Object.freeze(completed.map(p => p.taskId)),
743
+ failedPredecessors: Object.freeze(failed.map(p => p.taskId)),
744
+ cancelledPredecessors: Object.freeze(cancelled.map(p => p.taskId)),
745
+ activePredecessors: Object.freeze(active.map(p => p.taskId)),
746
+ quorumState: Object.freeze({
747
+ threshold,
748
+ requiredSuccesses,
749
+ completedSuccessCount,
750
+ remainingActiveCount,
751
+ met,
752
+ impossible,
753
+ }),
754
+ }));
755
+ }
756
+ if (policy === 'isolate') {
757
+ // Eligible when ALL predecessors terminally resolved
758
+ const allResolved = predecessors.every(p => terminal.has(p.state));
759
+ return ok(Object.freeze({
760
+ taskId,
761
+ eligible: allResolved,
762
+ reason: allResolved ? 'all_resolved' : 'waiting',
763
+ completedPredecessors: Object.freeze(completed.map(p => p.taskId)),
764
+ failedPredecessors: Object.freeze(failed.map(p => p.taskId)),
765
+ cancelledPredecessors: Object.freeze(cancelled.map(p => p.taskId)),
766
+ activePredecessors: Object.freeze(active.map(p => p.taskId)),
767
+ }));
768
+ }
769
+ // fail-fast: eligible when ALL predecessors COMPLETED
770
+ const allCompleted = predecessors.every(p => p.state === 'COMPLETED');
771
+ // If any cancelled or failed under fail-fast, fan-in is cancelled
772
+ const hasFailed = failed.length > 0 || cancelled.length > 0;
773
+ return ok(Object.freeze({
774
+ taskId,
775
+ eligible: allCompleted,
776
+ reason: allCompleted ? 'all_completed'
777
+ : hasFailed ? 'cancelled'
778
+ : 'waiting',
779
+ completedPredecessors: Object.freeze(completed.map(p => p.taskId)),
780
+ failedPredecessors: Object.freeze(failed.map(p => p.taskId)),
781
+ cancelledPredecessors: Object.freeze(cancelled.map(p => p.taskId)),
782
+ activePredecessors: Object.freeze(active.map(p => p.taskId)),
783
+ }));
784
+ },
785
+ });
786
+ // ── 5. CapabilityRetryPolicy ──
787
+ const retryPolicy = Object.freeze({
788
+ evaluate(capabilityType, operationId, mutabilityClass, sandboxResetAvailable) {
789
+ let retryPermitted;
790
+ let requiresSandboxReset = false;
791
+ switch (mutabilityClass) {
792
+ case 'read-only':
793
+ retryPermitted = true;
794
+ break;
795
+ case 'side-effecting':
796
+ requiresSandboxReset = true;
797
+ retryPermitted = sandboxResetAvailable;
798
+ break;
799
+ case 'mutating':
800
+ retryPermitted = true;
801
+ break;
802
+ case 'mutating-external':
803
+ retryPermitted = false;
804
+ break;
805
+ default:
806
+ retryPermitted = false;
807
+ }
808
+ let reason;
809
+ if (retryPermitted && requiresSandboxReset) {
810
+ reason = `${mutabilityClass} operation retry permitted with sandbox reset`;
811
+ }
812
+ else if (retryPermitted) {
813
+ reason = `${mutabilityClass} operation safe to retry`;
814
+ }
815
+ else if (requiresSandboxReset && !sandboxResetAvailable) {
816
+ reason = `${mutabilityClass} operation requires sandbox reset (unavailable)`;
817
+ }
818
+ else {
819
+ reason = `${mutabilityClass} operation not safe for auto-retry`;
820
+ }
821
+ const decision = {
822
+ capabilityType,
823
+ ...(operationId !== undefined ? { operationId } : {}),
824
+ mutabilityClass,
825
+ retryPermitted,
826
+ requiresSandboxReset,
827
+ reason,
828
+ };
829
+ return ok(Object.freeze(decision));
830
+ },
831
+ getDefaultClass(capabilityType) {
832
+ const defaultClass = DEFAULT_CAPABILITY_MUTABILITY[capabilityType];
833
+ // Unclassified defaults to mutating-external (safest)
834
+ return ok(defaultClass ?? 'mutating-external');
835
+ },
836
+ });
837
+ // ── 6. SchedulerEngine ──
838
+ const scheduler = Object.freeze({
839
+ executeCycle(conn, ctx, input) {
840
+ // DC-EGP-060: Zero workers → error
841
+ if (input.availableWorkers <= 0) {
842
+ return err(SCHEDULER_ERROR_CODES.NO_WORKERS_AVAILABLE, 'No workers available for scheduling', 'EGP-I10');
843
+ }
844
+ const waves = [];
845
+ const starvationUpdates = [];
846
+ const unscheduledMissions = [];
847
+ let workersRemaining = input.availableWorkers;
848
+ // Sort missions: starvation-promoted first, then natural order
849
+ const sortedMissions = [...input.eligibleMissions].sort((a, b) => {
850
+ const aPromoted = a.starvationCounter > input.starvationBound;
851
+ const bPromoted = b.starvationCounter > input.starvationBound;
852
+ if (aPromoted && !bPromoted)
853
+ return -1;
854
+ if (!aPromoted && bPromoted)
855
+ return 1;
856
+ return 0;
857
+ });
858
+ const scheduledMissionIds = new Set();
859
+ for (const mission of sortedMissions) {
860
+ if (workersRemaining <= 0) {
861
+ unscheduledMissions.push({ missionId: mission.missionId, reason: 'No workers available' });
862
+ continue;
863
+ }
864
+ const promoted = mission.starvationCounter > input.starvationBound;
865
+ // Compose wave for this mission
866
+ const waveInput = {
867
+ missionId: mission.missionId,
868
+ eligibleTasks: mission.eligibleTasks,
869
+ tokenPool: mission.tokenPool,
870
+ deliberationPool: mission.deliberationPool,
871
+ allocationMethod: input.allocationMethod,
872
+ minimumViableTokens: input.minimumViableTokens,
873
+ minimumViableDeliberation: input.minimumViableDeliberation,
874
+ };
875
+ const waveResult = waveComposer.compose(conn, ctx, waveInput);
876
+ if (waveResult.ok && waveResult.value.scheduledTaskIds.length > 0) {
877
+ waves.push(waveResult.value);
878
+ workersRemaining -= waveResult.value.scheduledTaskIds.length;
879
+ scheduledMissionIds.add(mission.missionId);
880
+ if (promoted) {
881
+ emitEvent(deps, EGP_EVENTS.STARVATION_BOUND_TRIGGERED, 'mission', {
882
+ missionId: mission.missionId,
883
+ starvationCounter: mission.starvationCounter,
884
+ starvationBound: input.starvationBound,
885
+ });
886
+ }
887
+ }
888
+ else {
889
+ unscheduledMissions.push({
890
+ missionId: mission.missionId,
891
+ reason: waveResult.ok ? 'No tasks met minimum viable' : 'Wave composition failed',
892
+ });
893
+ }
894
+ }
895
+ // Starvation updates: reset scheduled, increment unscheduled
896
+ // Only increment if at least one mission was scheduled (not pure saturation)
897
+ const anyScheduled = scheduledMissionIds.size > 0;
898
+ for (const mission of input.eligibleMissions) {
899
+ if (scheduledMissionIds.has(mission.missionId)) {
900
+ starvation.reset(mission.missionId);
901
+ starvationUpdates.push({
902
+ missionId: mission.missionId,
903
+ newCounter: 0,
904
+ promoted: mission.starvationCounter > input.starvationBound,
905
+ });
906
+ }
907
+ else if (anyScheduled) {
908
+ // EGP-I5: Only increment during non-pure saturation
909
+ starvation.increment(mission.missionId);
910
+ starvationUpdates.push({
911
+ missionId: mission.missionId,
912
+ newCounter: starvation.getCounter(mission.missionId),
913
+ promoted: false,
914
+ });
915
+ }
916
+ }
917
+ // Build replay record
918
+ const firstWave = waves[0];
919
+ const replayRecord = Object.freeze({
920
+ waveId: firstWave ? firstWave.waveId : generateWaveId(),
921
+ missionId: sortedMissions[0]?.missionId ?? '',
922
+ eligibleTaskIds: Object.freeze(input.eligibleMissions.flatMap(m => m.eligibleTasks.map(t => t.taskId))),
923
+ taskPriorities: Object.freeze(input.eligibleMissions.flatMap(m => m.eligibleTasks.map(t => Object.freeze({ taskId: t.taskId, priority: t.priority })))),
924
+ taskDimensions: Object.freeze(input.eligibleMissions.flatMap(m => m.eligibleTasks.map(t => Object.freeze({
925
+ taskId: t.taskId,
926
+ requiresDeliberation: t.requiresDeliberation,
927
+ estimatedTokens: t.estimatedTokens,
928
+ estimatedDeliberationTokens: t.estimatedDeliberationTokens,
929
+ })))),
930
+ tokenPoolSnapshot: input.eligibleMissions[0]?.tokenPool ?? 0,
931
+ deliberationPoolSnapshot: input.eligibleMissions[0]?.deliberationPool ?? 0,
932
+ workerAvailability: input.availableWorkers,
933
+ computedReservations: Object.freeze(waves.flatMap(w => w.reservations.map(r => Object.freeze({
934
+ taskId: r.taskId,
935
+ reservedTokens: r.reservedTokens,
936
+ reservedDeliberation: r.reservedDeliberation,
937
+ })))),
938
+ allocationMethod: input.allocationMethod,
939
+ selectedTaskIds: Object.freeze(waves.flatMap(w => [...w.scheduledTaskIds])),
940
+ starvationCounters: Object.freeze(starvationUpdates.map(u => Object.freeze({
941
+ missionId: u.missionId,
942
+ counter: u.newCounter,
943
+ }))),
944
+ timestamp: deps.time.nowISO(),
945
+ });
946
+ return ok(Object.freeze({
947
+ waves: Object.freeze(waves),
948
+ starvationUpdates: Object.freeze(starvationUpdates.map(u => Object.freeze(u))),
949
+ unscheduledMissions: Object.freeze(unscheduledMissions.map(u => Object.freeze(u))),
950
+ workerAvailabilitySnapshot: input.availableWorkers,
951
+ replayRecord,
952
+ }));
953
+ },
954
+ });
955
+ // ── 7. ReservationEnforcer ──
956
+ const enforcer = Object.freeze({
957
+ checkHeadroom(conn, taskId, additionalTokens, additionalDeliberation) {
958
+ const res = findReservationByTask(taskId);
959
+ if (!res) {
960
+ // No reservation found — return zero headroom
961
+ return ok(Object.freeze({
962
+ allowed: false,
963
+ tokenHeadroom: 0,
964
+ deliberationHeadroom: 0,
965
+ tokenExhausted: true,
966
+ deliberationExhausted: false,
967
+ wouldCauseTokenOverage: additionalTokens > 0,
968
+ wouldCauseDeliberationOverage: additionalDeliberation > 0,
969
+ projectedTokenOverage: additionalTokens,
970
+ projectedDeliberationOverage: additionalDeliberation,
971
+ }));
972
+ }
973
+ // Check suspension (DC-EGP-062)
974
+ if (deps.suspensionQuery) {
975
+ const suspResult = deps.suspensionQuery.getActiveForTarget(conn, 'task', taskId);
976
+ if (suspResult.ok && suspResult.value !== null) {
977
+ return ok(Object.freeze({
978
+ allowed: false,
979
+ tokenHeadroom: res.reservedTokens - res.consumedTokens,
980
+ deliberationHeadroom: res.reservedDeliberation - res.consumedDeliberation,
981
+ tokenExhausted: false,
982
+ deliberationExhausted: false,
983
+ wouldCauseTokenOverage: false,
984
+ wouldCauseDeliberationOverage: false,
985
+ projectedTokenOverage: 0,
986
+ projectedDeliberationOverage: 0,
987
+ }));
988
+ }
989
+ }
990
+ const tokenHeadroom = res.reservedTokens - res.consumedTokens;
991
+ const deliberationHeadroom = res.reservedDeliberation - res.consumedDeliberation;
992
+ const tokenExhausted = tokenHeadroom <= 0;
993
+ // Only consider deliberation exhausted if there's a deliberation reservation
994
+ const deliberationExhausted = res.reservedDeliberation > 0 && deliberationHeadroom <= 0;
995
+ const projectedTokenTotal = res.consumedTokens + additionalTokens;
996
+ const projectedDelibTotal = res.consumedDeliberation + additionalDeliberation;
997
+ const wouldCauseTokenOverage = projectedTokenTotal > res.reservedTokens;
998
+ const wouldCauseDeliberationOverage = res.reservedDeliberation > 0 && projectedDelibTotal > res.reservedDeliberation;
999
+ const projectedTokenOverage = Math.max(0, projectedTokenTotal - res.reservedTokens);
1000
+ const projectedDeliberationOverage = res.reservedDeliberation > 0
1001
+ ? Math.max(0, projectedDelibTotal - res.reservedDeliberation)
1002
+ : 0;
1003
+ const allowed = !tokenExhausted && !deliberationExhausted;
1004
+ // Emit event if exhausted
1005
+ if (tokenExhausted || deliberationExhausted) {
1006
+ emitEvent(deps, EGP_EVENTS.TASK_BUDGET_EXCEEDED, 'task', {
1007
+ taskId,
1008
+ tokenExhausted,
1009
+ deliberationExhausted,
1010
+ tokenHeadroom,
1011
+ deliberationHeadroom,
1012
+ });
1013
+ }
1014
+ return ok(Object.freeze({
1015
+ allowed,
1016
+ tokenHeadroom,
1017
+ deliberationHeadroom,
1018
+ tokenExhausted,
1019
+ deliberationExhausted,
1020
+ wouldCauseTokenOverage,
1021
+ wouldCauseDeliberationOverage,
1022
+ projectedTokenOverage,
1023
+ projectedDeliberationOverage,
1024
+ }));
1025
+ },
1026
+ handleOverage(conn, ctx, taskId, tokenOverage, deliberationOverage) {
1027
+ const res = findReservationByTask(taskId);
1028
+ if (!res) {
1029
+ // Debt 2: Missing reservation during overage means budget enforcement is impossible — do not silently skip
1030
+ return err('RESERVATION_NOT_FOUND', `No active reservation found for task ${taskId} — cannot record overage`, 'EGP-I14');
1031
+ }
1032
+ return ledger.recordOverage(conn, ctx, res.missionId, tokenOverage, deliberationOverage);
1033
+ },
1034
+ });
1035
+ // ── 8. ReplanCalculator ──
1036
+ const replanCalculator = Object.freeze({
1037
+ calculateReplanBudget(_conn, _ctx, input) {
1038
+ const cancelledTasks = [];
1039
+ const runningTasksExcluded = [];
1040
+ let replanBudgetTokens = 0;
1041
+ let replanBudgetDeliberation = 0;
1042
+ for (const task of input.currentGraphTasks) {
1043
+ if (task.state === 'RUNNING') {
1044
+ // EGP-I10: Running tasks not preemptible
1045
+ const res = findReservationByTask(task.taskId);
1046
+ runningTasksExcluded.push({
1047
+ taskId: task.taskId,
1048
+ committedTokens: res ? res.reservedTokens : 0,
1049
+ committedDeliberation: res ? res.reservedDeliberation : 0,
1050
+ });
1051
+ }
1052
+ else {
1053
+ // SCHEDULED, PENDING, FAILED — cancel and release
1054
+ const res = findReservationByTask(task.taskId);
1055
+ let releasedTokens = 0;
1056
+ let releasedDeliberation = 0;
1057
+ if (res) {
1058
+ releasedTokens = Math.max(0, res.reservedTokens - res.consumedTokens);
1059
+ releasedDeliberation = Math.max(0, res.reservedDeliberation - res.consumedDeliberation);
1060
+ // Release the reservation
1061
+ res.status = 'released';
1062
+ res.releasedAt = deps.time.nowISO();
1063
+ taskIndex.delete(res.taskId);
1064
+ }
1065
+ replanBudgetTokens += releasedTokens;
1066
+ replanBudgetDeliberation += releasedDeliberation;
1067
+ cancelledTasks.push({
1068
+ taskId: task.taskId,
1069
+ previousState: task.state,
1070
+ releasedTokens,
1071
+ releasedDeliberation,
1072
+ });
1073
+ }
1074
+ }
1075
+ return ok(Object.freeze({
1076
+ replanBudgetTokens,
1077
+ replanBudgetDeliberation,
1078
+ cancelledTasks: Object.freeze(cancelledTasks.map(t => Object.freeze(t))),
1079
+ runningTasksExcluded: Object.freeze(runningTasksExcluded.map(t => Object.freeze(t))),
1080
+ }));
1081
+ },
1082
+ });
1083
+ // ── 9. StarvationTracker (AMB-06: in-memory only) ──
1084
+ const starvation = Object.freeze({
1085
+ increment(missionId) {
1086
+ const current = starvationCounters.get(missionId) ?? 0;
1087
+ starvationCounters.set(missionId, current + 1);
1088
+ },
1089
+ reset(missionId) {
1090
+ starvationCounters.set(missionId, 0);
1091
+ },
1092
+ getCounter(missionId) {
1093
+ return starvationCounters.get(missionId) ?? 0;
1094
+ },
1095
+ isAboveBound(missionId, bound) {
1096
+ const counter = starvationCounters.get(missionId) ?? 0;
1097
+ return counter > bound;
1098
+ },
1099
+ getAllCounters() {
1100
+ return new Map(starvationCounters);
1101
+ },
1102
+ });
1103
+ // ── 10. EGPTerminalOperationHandler ──
1104
+ const terminalOp = Object.freeze({
1105
+ execute(conn, ctx, taskId, terminalState, hasRetriesRemaining) {
1106
+ const res = findReservationByTask(taskId);
1107
+ // v3.2 compatibility: no reservation → no-op
1108
+ if (!res) {
1109
+ return ok(Object.freeze({
1110
+ action: 'none',
1111
+ reclaimedTokens: 0,
1112
+ reclaimedDeliberation: 0,
1113
+ overageTokens: 0,
1114
+ overageDeliberation: 0,
1115
+ reservationId: null,
1116
+ }));
1117
+ }
1118
+ // FAILED with retries remaining → retain (EGP-I8)
1119
+ if (terminalState === 'FAILED' && hasRetriesRemaining) {
1120
+ const retainResult = reservations.retain(conn, res.reservationId);
1121
+ if (!retainResult.ok)
1122
+ return retainResult;
1123
+ return ok(Object.freeze({
1124
+ action: 'retained',
1125
+ reclaimedTokens: 0,
1126
+ reclaimedDeliberation: 0,
1127
+ overageTokens: 0,
1128
+ overageDeliberation: 0,
1129
+ reservationId: res.reservationId,
1130
+ }));
1131
+ }
1132
+ // Final terminal: release and reclaim (EGP-I3)
1133
+ const releaseResult = reservations.release(conn, ctx, res.reservationId, terminalState);
1134
+ if (!releaseResult.ok)
1135
+ return releaseResult;
1136
+ return ok(Object.freeze({
1137
+ action: 'released',
1138
+ reclaimedTokens: releaseResult.value.reclaimedTokens,
1139
+ reclaimedDeliberation: releaseResult.value.reclaimedDeliberation,
1140
+ overageTokens: releaseResult.value.overageTokens,
1141
+ overageDeliberation: releaseResult.value.overageDeliberation,
1142
+ reservationId: res.reservationId,
1143
+ }));
1144
+ },
1145
+ });
1146
+ // ── 11. ReservationAdmissionGate (DC-EGP-064) ──
1147
+ const admissionGate = Object.freeze({
1148
+ checkAdmission(conn, _ctx, taskId, taskVersion) {
1149
+ // v3.2 backward compatibility (PSD-5)
1150
+ if (taskVersion === '3.2') {
1151
+ return ok(Object.freeze({
1152
+ admitted: true,
1153
+ reason: 'v3.2 task exempt from reservation requirement',
1154
+ reservationId: null,
1155
+ }));
1156
+ }
1157
+ // v3.3: EGP-I14 — must have non-released reservation
1158
+ const res = findReservationByTask(taskId);
1159
+ if (!res) {
1160
+ return ok(Object.freeze({
1161
+ admitted: false,
1162
+ reason: 'No non-released reservation found for v3.3 task',
1163
+ reservationId: null,
1164
+ }));
1165
+ }
1166
+ // Check suspension (DC-EGP-062)
1167
+ if (deps.suspensionQuery) {
1168
+ const taskSusp = deps.suspensionQuery.getActiveForTarget(conn, 'task', taskId);
1169
+ if (taskSusp.ok && taskSusp.value !== null) {
1170
+ return ok(Object.freeze({
1171
+ admitted: false,
1172
+ reason: 'Task is suspended',
1173
+ reservationId: res.reservationId,
1174
+ }));
1175
+ }
1176
+ const missionSusp = deps.suspensionQuery.getActiveForTarget(conn, 'mission', res.missionId);
1177
+ if (missionSusp.ok && missionSusp.value !== null) {
1178
+ return ok(Object.freeze({
1179
+ admitted: false,
1180
+ reason: 'Mission is suspended',
1181
+ reservationId: res.reservationId,
1182
+ }));
1183
+ }
1184
+ }
1185
+ return ok(Object.freeze({
1186
+ admitted: true,
1187
+ reason: 'Reservation confirmed',
1188
+ reservationId: res.reservationId,
1189
+ }));
1190
+ },
1191
+ });
1192
+ // ── 12. ReservationAgeMonitor ──
1193
+ const ageMonitor = Object.freeze({
1194
+ getOrphanedReservations(_conn, maxAgeMs) {
1195
+ const now = deps.time.nowMs();
1196
+ const orphans = [];
1197
+ for (const res of reservationMap.values()) {
1198
+ if (res.status === 'reserved') {
1199
+ const ageMs = now - new Date(res.createdAt).getTime();
1200
+ if (ageMs > maxAgeMs) {
1201
+ orphans.push(Object.freeze({
1202
+ reservationId: res.reservationId,
1203
+ taskId: res.taskId,
1204
+ missionId: res.missionId,
1205
+ ageMs,
1206
+ status: res.status,
1207
+ }));
1208
+ }
1209
+ }
1210
+ }
1211
+ return ok(Object.freeze(orphans));
1212
+ },
1213
+ });
1214
+ // ── 13. SuspendedReservationQuery ──
1215
+ const suspendedQuery = Object.freeze({
1216
+ isTaskSuspended(conn, taskId) {
1217
+ if (!deps.suspensionQuery)
1218
+ return ok(false);
1219
+ const result = deps.suspensionQuery.getActiveForTarget(conn, 'task', taskId);
1220
+ if (!result.ok)
1221
+ return result;
1222
+ return ok(result.value !== null);
1223
+ },
1224
+ isMissionSuspended(conn, missionId) {
1225
+ if (!deps.suspensionQuery)
1226
+ return ok(false);
1227
+ const result = deps.suspensionQuery.getActiveForTarget(conn, 'mission', missionId);
1228
+ if (!result.ok)
1229
+ return result;
1230
+ return ok(result.value !== null);
1231
+ },
1232
+ });
1233
+ // ── Facade ──
1234
+ return Object.freeze({
1235
+ reservations,
1236
+ ledger,
1237
+ waveComposer,
1238
+ branchFailure,
1239
+ retryPolicy,
1240
+ scheduler,
1241
+ enforcer,
1242
+ replanCalculator,
1243
+ starvation,
1244
+ terminalOp,
1245
+ admissionGate,
1246
+ ageMonitor,
1247
+ suspendedQuery,
1248
+ });
1249
+ }
1250
+ //# sourceMappingURL=egp_stores.js.map