open-multi-agent-kit 0.99.0 → 1.2.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 (464) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/README.md +3 -3
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js +1 -0
  5. package/dist/bun/cli.js.map +1 -1
  6. package/dist/bun/register-bundled-coding-agent.d.ts +10 -0
  7. package/dist/bun/register-bundled-coding-agent.d.ts.map +1 -0
  8. package/dist/bun/register-bundled-coding-agent.js +12 -0
  9. package/dist/bun/register-bundled-coding-agent.js.map +1 -0
  10. package/dist/cli/args.d.ts +1 -1
  11. package/dist/cli/args.d.ts.map +1 -1
  12. package/dist/cli/args.js +1 -1
  13. package/dist/cli/args.js.map +1 -1
  14. package/dist/cli/help.d.ts.map +1 -1
  15. package/dist/cli/help.js +2 -1
  16. package/dist/cli/help.js.map +1 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +14 -2
  19. package/dist/cli.js.map +1 -1
  20. package/dist/commands/neo-cli.d.ts +9 -0
  21. package/dist/commands/neo-cli.d.ts.map +1 -0
  22. package/dist/commands/neo-cli.js +61 -0
  23. package/dist/commands/neo-cli.js.map +1 -0
  24. package/dist/coordination/awareness.d.ts +32 -0
  25. package/dist/coordination/awareness.d.ts.map +1 -0
  26. package/dist/coordination/awareness.js +55 -0
  27. package/dist/coordination/awareness.js.map +1 -0
  28. package/dist/coordination/broker.d.ts +79 -0
  29. package/dist/coordination/broker.d.ts.map +1 -0
  30. package/dist/coordination/broker.js +195 -0
  31. package/dist/coordination/broker.js.map +1 -0
  32. package/dist/coordination/index.d.ts +16 -0
  33. package/dist/coordination/index.d.ts.map +1 -0
  34. package/dist/coordination/index.js +16 -0
  35. package/dist/coordination/index.js.map +1 -0
  36. package/dist/coordination/integration.d.ts +59 -0
  37. package/dist/coordination/integration.d.ts.map +1 -0
  38. package/dist/coordination/integration.js +126 -0
  39. package/dist/coordination/integration.js.map +1 -0
  40. package/dist/coordination/operation.d.ts +106 -0
  41. package/dist/coordination/operation.d.ts.map +1 -0
  42. package/dist/coordination/operation.js +179 -0
  43. package/dist/coordination/operation.js.map +1 -0
  44. package/dist/coordination/resource.d.ts +33 -0
  45. package/dist/coordination/resource.d.ts.map +1 -0
  46. package/dist/coordination/resource.js +89 -0
  47. package/dist/coordination/resource.js.map +1 -0
  48. package/dist/coordination/session.d.ts +74 -0
  49. package/dist/coordination/session.d.ts.map +1 -0
  50. package/dist/coordination/session.js +143 -0
  51. package/dist/coordination/session.js.map +1 -0
  52. package/dist/coordination/types.d.ts +68 -0
  53. package/dist/coordination/types.d.ts.map +1 -0
  54. package/dist/coordination/types.js +26 -0
  55. package/dist/coordination/types.js.map +1 -0
  56. package/dist/core/agent-session.d.ts +29 -2
  57. package/dist/core/agent-session.d.ts.map +1 -1
  58. package/dist/core/agent-session.js +135 -37
  59. package/dist/core/agent-session.js.map +1 -1
  60. package/dist/core/bundled-skills.d.ts +4 -0
  61. package/dist/core/bundled-skills.d.ts.map +1 -0
  62. package/dist/core/bundled-skills.js +32 -0
  63. package/dist/core/bundled-skills.js.map +1 -0
  64. package/dist/core/cli-diagnostics.d.ts +6 -0
  65. package/dist/core/cli-diagnostics.d.ts.map +1 -0
  66. package/dist/core/cli-diagnostics.js +20 -0
  67. package/dist/core/cli-diagnostics.js.map +1 -0
  68. package/dist/core/compaction/control-state.d.ts +41 -0
  69. package/dist/core/compaction/control-state.d.ts.map +1 -0
  70. package/dist/core/compaction/control-state.js +85 -0
  71. package/dist/core/compaction/control-state.js.map +1 -0
  72. package/dist/core/compaction/fallback.d.ts +60 -0
  73. package/dist/core/compaction/fallback.d.ts.map +1 -0
  74. package/dist/core/compaction/fallback.js +117 -0
  75. package/dist/core/compaction/fallback.js.map +1 -0
  76. package/dist/core/compaction/index.d.ts +2 -0
  77. package/dist/core/compaction/index.d.ts.map +1 -1
  78. package/dist/core/compaction/index.js +2 -0
  79. package/dist/core/compaction/index.js.map +1 -1
  80. package/dist/core/context-budget-headroom-candidates.d.ts +16 -1
  81. package/dist/core/context-budget-headroom-candidates.d.ts.map +1 -1
  82. package/dist/core/context-budget-headroom-candidates.js +31 -13
  83. package/dist/core/context-budget-headroom-candidates.js.map +1 -1
  84. package/dist/core/context-budget-headroom-types.d.ts +7 -1
  85. package/dist/core/context-budget-headroom-types.d.ts.map +1 -1
  86. package/dist/core/context-budget-headroom-types.js +0 -1
  87. package/dist/core/context-budget-headroom-types.js.map +1 -1
  88. package/dist/core/context-budget-headroom.d.ts +22 -0
  89. package/dist/core/context-budget-headroom.d.ts.map +1 -1
  90. package/dist/core/context-budget-headroom.js +46 -2
  91. package/dist/core/context-budget-headroom.js.map +1 -1
  92. package/dist/core/context-budget-v2-global-pass.d.ts +21 -0
  93. package/dist/core/context-budget-v2-global-pass.d.ts.map +1 -0
  94. package/dist/core/context-budget-v2-global-pass.js +203 -0
  95. package/dist/core/context-budget-v2-global-pass.js.map +1 -0
  96. package/dist/core/context-budget-v2-input-validation.d.ts +4 -0
  97. package/dist/core/context-budget-v2-input-validation.d.ts.map +1 -0
  98. package/dist/core/context-budget-v2-input-validation.js +79 -0
  99. package/dist/core/context-budget-v2-input-validation.js.map +1 -0
  100. package/dist/core/context-budget-v2-observability.d.ts +15 -0
  101. package/dist/core/context-budget-v2-observability.d.ts.map +1 -0
  102. package/dist/core/context-budget-v2-observability.js +35 -0
  103. package/dist/core/context-budget-v2-observability.js.map +1 -0
  104. package/dist/core/context-budget-v2-planned-items.d.ts +17 -0
  105. package/dist/core/context-budget-v2-planned-items.d.ts.map +1 -0
  106. package/dist/core/context-budget-v2-planned-items.js +59 -0
  107. package/dist/core/context-budget-v2-planned-items.js.map +1 -0
  108. package/dist/core/context-budget-v2-planner.d.ts.map +1 -1
  109. package/dist/core/context-budget-v2-planner.js +69 -51
  110. package/dist/core/context-budget-v2-planner.js.map +1 -1
  111. package/dist/core/context-budget-v2-scoring.d.ts +7 -1
  112. package/dist/core/context-budget-v2-scoring.d.ts.map +1 -1
  113. package/dist/core/context-budget-v2-scoring.js.map +1 -1
  114. package/dist/core/context-budget-v2-selection.d.ts +22 -3
  115. package/dist/core/context-budget-v2-selection.d.ts.map +1 -1
  116. package/dist/core/context-budget-v2-selection.js +41 -59
  117. package/dist/core/context-budget-v2-selection.js.map +1 -1
  118. package/dist/core/context-budget-v2-tiers.d.ts.map +1 -1
  119. package/dist/core/context-budget-v2-tiers.js +9 -42
  120. package/dist/core/context-budget-v2-tiers.js.map +1 -1
  121. package/dist/core/context-budget-v2-types.d.ts +14 -2
  122. package/dist/core/context-budget-v2-types.d.ts.map +1 -1
  123. package/dist/core/context-budget-v2-types.js +6 -1
  124. package/dist/core/context-budget-v2-types.js.map +1 -1
  125. package/dist/core/extensions/bundled-virtual-modules.d.ts +15 -0
  126. package/dist/core/extensions/bundled-virtual-modules.d.ts.map +1 -0
  127. package/dist/core/extensions/bundled-virtual-modules.js +63 -0
  128. package/dist/core/extensions/bundled-virtual-modules.js.map +1 -0
  129. package/dist/core/extensions/loader.d.ts.map +1 -1
  130. package/dist/core/extensions/loader.js +2 -42
  131. package/dist/core/extensions/loader.js.map +1 -1
  132. package/dist/core/extensions/runner.d.ts +1 -0
  133. package/dist/core/extensions/runner.d.ts.map +1 -1
  134. package/dist/core/extensions/runner.js +6 -0
  135. package/dist/core/extensions/runner.js.map +1 -1
  136. package/dist/core/extensions/types.d.ts +10 -0
  137. package/dist/core/extensions/types.d.ts.map +1 -1
  138. package/dist/core/extensions/types.js.map +1 -1
  139. package/dist/core/index.d.ts +2 -1
  140. package/dist/core/index.d.ts.map +1 -1
  141. package/dist/core/index.js +2 -1
  142. package/dist/core/index.js.map +1 -1
  143. package/dist/core/loadout-runtime.d.ts +2 -8
  144. package/dist/core/loadout-runtime.d.ts.map +1 -1
  145. package/dist/core/loadout-runtime.js.map +1 -1
  146. package/dist/core/mcp/client.d.ts +27 -6
  147. package/dist/core/mcp/client.d.ts.map +1 -1
  148. package/dist/core/mcp/client.js +80 -20
  149. package/dist/core/mcp/client.js.map +1 -1
  150. package/dist/core/mcp/manager.d.ts +10 -1
  151. package/dist/core/mcp/manager.d.ts.map +1 -1
  152. package/dist/core/mcp/manager.js +68 -9
  153. package/dist/core/mcp/manager.js.map +1 -1
  154. package/dist/core/mcp/protocol.d.ts +9 -3
  155. package/dist/core/mcp/protocol.d.ts.map +1 -1
  156. package/dist/core/mcp/protocol.js +61 -15
  157. package/dist/core/mcp/protocol.js.map +1 -1
  158. package/dist/core/mcp/stdio-transport.d.ts +12 -1
  159. package/dist/core/mcp/stdio-transport.d.ts.map +1 -1
  160. package/dist/core/mcp/stdio-transport.js +30 -2
  161. package/dist/core/mcp/stdio-transport.js.map +1 -1
  162. package/dist/core/mcp-descriptor-injection.d.ts +26 -0
  163. package/dist/core/mcp-descriptor-injection.d.ts.map +1 -0
  164. package/dist/core/mcp-descriptor-injection.js +25 -0
  165. package/dist/core/mcp-descriptor-injection.js.map +1 -0
  166. package/dist/core/mcp-public-presets.d.ts +1 -3
  167. package/dist/core/mcp-public-presets.d.ts.map +1 -1
  168. package/dist/core/mcp-public-presets.js +3 -15
  169. package/dist/core/mcp-public-presets.js.map +1 -1
  170. package/dist/core/model-registry.d.ts.map +1 -1
  171. package/dist/core/model-registry.js +24 -3
  172. package/dist/core/model-registry.js.map +1 -1
  173. package/dist/core/neo/catalog.d.ts +20 -0
  174. package/dist/core/neo/catalog.d.ts.map +1 -0
  175. package/dist/core/neo/catalog.js +50 -0
  176. package/dist/core/neo/catalog.js.map +1 -0
  177. package/dist/core/neo/setup.d.ts +3 -0
  178. package/dist/core/neo/setup.d.ts.map +1 -0
  179. package/dist/core/neo/setup.js +47 -0
  180. package/dist/core/neo/setup.js.map +1 -0
  181. package/dist/core/provider-default-models.d.ts +2 -0
  182. package/dist/core/provider-default-models.d.ts.map +1 -1
  183. package/dist/core/provider-default-models.js +2 -0
  184. package/dist/core/provider-default-models.js.map +1 -1
  185. package/dist/core/provider-display-names.d.ts.map +1 -1
  186. package/dist/core/provider-display-names.js +2 -0
  187. package/dist/core/provider-display-names.js.map +1 -1
  188. package/dist/core/provider-error-classification.d.ts +57 -0
  189. package/dist/core/provider-error-classification.d.ts.map +1 -0
  190. package/dist/core/provider-error-classification.js +103 -0
  191. package/dist/core/provider-error-classification.js.map +1 -0
  192. package/dist/core/provider-resilience.d.ts +10 -0
  193. package/dist/core/provider-resilience.d.ts.map +1 -1
  194. package/dist/core/provider-resilience.js +36 -3
  195. package/dist/core/provider-resilience.js.map +1 -1
  196. package/dist/core/provider-usage-commandcode.d.ts +9 -0
  197. package/dist/core/provider-usage-commandcode.d.ts.map +1 -0
  198. package/dist/core/provider-usage-commandcode.js +198 -0
  199. package/dist/core/provider-usage-commandcode.js.map +1 -0
  200. package/dist/core/provider-usage-devin.d.ts +5 -3
  201. package/dist/core/provider-usage-devin.d.ts.map +1 -1
  202. package/dist/core/provider-usage-devin.js +15 -5
  203. package/dist/core/provider-usage-devin.js.map +1 -1
  204. package/dist/core/provider-usage-types.d.ts +1 -1
  205. package/dist/core/provider-usage-types.d.ts.map +1 -1
  206. package/dist/core/provider-usage-types.js.map +1 -1
  207. package/dist/core/provider-usage.d.ts.map +1 -1
  208. package/dist/core/provider-usage.js +6 -0
  209. package/dist/core/provider-usage.js.map +1 -1
  210. package/dist/core/reasoning-router-resolver.d.ts +7 -0
  211. package/dist/core/reasoning-router-resolver.d.ts.map +1 -1
  212. package/dist/core/reasoning-router-resolver.js +21 -3
  213. package/dist/core/reasoning-router-resolver.js.map +1 -1
  214. package/dist/core/reasoning-router-v4.d.ts +8 -5
  215. package/dist/core/reasoning-router-v4.d.ts.map +1 -1
  216. package/dist/core/reasoning-router-v4.js +8 -5
  217. package/dist/core/reasoning-router-v4.js.map +1 -1
  218. package/dist/core/resource-admission.d.ts +36 -0
  219. package/dist/core/resource-admission.d.ts.map +1 -1
  220. package/dist/core/resource-admission.js +59 -0
  221. package/dist/core/resource-admission.js.map +1 -1
  222. package/dist/core/resource-loader.d.ts.map +1 -1
  223. package/dist/core/resource-loader.js +2 -2
  224. package/dist/core/resource-loader.js.map +1 -1
  225. package/dist/core/run-usage-ledger.d.ts +47 -0
  226. package/dist/core/run-usage-ledger.d.ts.map +1 -0
  227. package/dist/core/run-usage-ledger.js +162 -0
  228. package/dist/core/run-usage-ledger.js.map +1 -0
  229. package/dist/core/run-usage-operation.d.ts +8 -0
  230. package/dist/core/run-usage-operation.d.ts.map +1 -0
  231. package/dist/core/run-usage-operation.js +12 -0
  232. package/dist/core/run-usage-operation.js.map +1 -0
  233. package/dist/core/sdk.d.ts.map +1 -1
  234. package/dist/core/sdk.js +5 -6
  235. package/dist/core/sdk.js.map +1 -1
  236. package/dist/core/session-compaction-service.d.ts +15 -0
  237. package/dist/core/session-compaction-service.d.ts.map +1 -1
  238. package/dist/core/session-compaction-service.js +17 -4
  239. package/dist/core/session-compaction-service.js.map +1 -1
  240. package/dist/core/session-failure-cause.d.ts.map +1 -1
  241. package/dist/core/session-failure-cause.js +14 -5
  242. package/dist/core/session-failure-cause.js.map +1 -1
  243. package/dist/core/session-prompt-lifecycle.d.ts +6 -0
  244. package/dist/core/session-prompt-lifecycle.d.ts.map +1 -1
  245. package/dist/core/session-prompt-lifecycle.js +47 -2
  246. package/dist/core/session-prompt-lifecycle.js.map +1 -1
  247. package/dist/core/session-termination.d.ts.map +1 -1
  248. package/dist/core/session-termination.js +4 -2
  249. package/dist/core/session-termination.js.map +1 -1
  250. package/dist/core/subagent-lane-authority.d.ts +28 -0
  251. package/dist/core/subagent-lane-authority.d.ts.map +1 -0
  252. package/dist/core/subagent-lane-authority.js +119 -0
  253. package/dist/core/subagent-lane-authority.js.map +1 -0
  254. package/dist/core/subagent-lane-contract.d.ts +114 -0
  255. package/dist/core/subagent-lane-contract.d.ts.map +1 -0
  256. package/dist/core/subagent-lane-contract.js +18 -0
  257. package/dist/core/subagent-lane-contract.js.map +1 -0
  258. package/dist/core/subagent-lane-launcher.d.ts +3 -6
  259. package/dist/core/subagent-lane-launcher.d.ts.map +1 -1
  260. package/dist/core/subagent-lane-launcher.js +53 -12
  261. package/dist/core/subagent-lane-launcher.js.map +1 -1
  262. package/dist/core/subagent-orchestration.d.ts +4 -17
  263. package/dist/core/subagent-orchestration.d.ts.map +1 -1
  264. package/dist/core/subagent-orchestration.js.map +1 -1
  265. package/dist/core/todo-runtime-state.d.ts +12 -0
  266. package/dist/core/todo-runtime-state.d.ts.map +1 -1
  267. package/dist/core/todo-runtime-state.js +23 -0
  268. package/dist/core/todo-runtime-state.js.map +1 -1
  269. package/dist/core/verified-run/broker.d.ts.map +1 -1
  270. package/dist/core/verified-run/broker.js +4 -1
  271. package/dist/core/verified-run/broker.js.map +1 -1
  272. package/dist/core/workload-permit-pool.d.ts +1 -1
  273. package/dist/core/workload-permit-pool.d.ts.map +1 -1
  274. package/dist/core/workload-permit-pool.js +3 -0
  275. package/dist/core/workload-permit-pool.js.map +1 -1
  276. package/dist/guardrails/strict-evidence-approval-adapter.d.ts +34 -0
  277. package/dist/guardrails/strict-evidence-approval-adapter.d.ts.map +1 -0
  278. package/dist/guardrails/strict-evidence-approval-adapter.js +70 -0
  279. package/dist/guardrails/strict-evidence-approval-adapter.js.map +1 -0
  280. package/dist/index.d.ts +5 -0
  281. package/dist/index.d.ts.map +1 -1
  282. package/dist/index.js +3 -0
  283. package/dist/index.js.map +1 -1
  284. package/dist/main.d.ts.map +1 -1
  285. package/dist/main.js +11 -18
  286. package/dist/main.js.map +1 -1
  287. package/dist/metacognition/calibration-selective.d.ts +78 -0
  288. package/dist/metacognition/calibration-selective.d.ts.map +1 -0
  289. package/dist/metacognition/calibration-selective.js +161 -0
  290. package/dist/metacognition/calibration-selective.js.map +1 -0
  291. package/dist/metacognition/calibration.d.ts +62 -0
  292. package/dist/metacognition/calibration.d.ts.map +1 -0
  293. package/dist/metacognition/calibration.js +122 -0
  294. package/dist/metacognition/calibration.js.map +1 -0
  295. package/dist/metacognition/checkpoint.d.ts +60 -0
  296. package/dist/metacognition/checkpoint.d.ts.map +1 -0
  297. package/dist/metacognition/checkpoint.js +57 -0
  298. package/dist/metacognition/checkpoint.js.map +1 -0
  299. package/dist/metacognition/context7.d.ts +48 -0
  300. package/dist/metacognition/context7.d.ts.map +1 -0
  301. package/dist/metacognition/context7.js +154 -0
  302. package/dist/metacognition/context7.js.map +1 -0
  303. package/dist/metacognition/decision.d.ts +44 -0
  304. package/dist/metacognition/decision.d.ts.map +1 -0
  305. package/dist/metacognition/decision.js +111 -0
  306. package/dist/metacognition/decision.js.map +1 -0
  307. package/dist/metacognition/evaluation.d.ts +73 -0
  308. package/dist/metacognition/evaluation.d.ts.map +1 -0
  309. package/dist/metacognition/evaluation.js +97 -0
  310. package/dist/metacognition/evaluation.js.map +1 -0
  311. package/dist/metacognition/index.d.ts +31 -0
  312. package/dist/metacognition/index.d.ts.map +1 -0
  313. package/dist/metacognition/index.js +31 -0
  314. package/dist/metacognition/index.js.map +1 -0
  315. package/dist/metacognition/knowledge-action.d.ts +43 -0
  316. package/dist/metacognition/knowledge-action.d.ts.map +1 -0
  317. package/dist/metacognition/knowledge-action.js +60 -0
  318. package/dist/metacognition/knowledge-action.js.map +1 -0
  319. package/dist/metacognition/knowledge.d.ts +84 -0
  320. package/dist/metacognition/knowledge.d.ts.map +1 -0
  321. package/dist/metacognition/knowledge.js +165 -0
  322. package/dist/metacognition/knowledge.js.map +1 -0
  323. package/dist/metacognition/obligations.d.ts +82 -0
  324. package/dist/metacognition/obligations.d.ts.map +1 -0
  325. package/dist/metacognition/obligations.js +139 -0
  326. package/dist/metacognition/obligations.js.map +1 -0
  327. package/dist/metacognition/observation-validity.d.ts +83 -0
  328. package/dist/metacognition/observation-validity.d.ts.map +1 -0
  329. package/dist/metacognition/observation-validity.js +118 -0
  330. package/dist/metacognition/observation-validity.js.map +1 -0
  331. package/dist/metacognition/observe.d.ts +45 -0
  332. package/dist/metacognition/observe.d.ts.map +1 -0
  333. package/dist/metacognition/observe.js +59 -0
  334. package/dist/metacognition/observe.js.map +1 -0
  335. package/dist/metacognition/policy.d.ts +53 -0
  336. package/dist/metacognition/policy.d.ts.map +1 -0
  337. package/dist/metacognition/policy.js +155 -0
  338. package/dist/metacognition/policy.js.map +1 -0
  339. package/dist/metacognition/predictions.d.ts +78 -0
  340. package/dist/metacognition/predictions.d.ts.map +1 -0
  341. package/dist/metacognition/predictions.js +181 -0
  342. package/dist/metacognition/predictions.js.map +1 -0
  343. package/dist/metacognition/retrieval.d.ts +53 -0
  344. package/dist/metacognition/retrieval.d.ts.map +1 -0
  345. package/dist/metacognition/retrieval.js +170 -0
  346. package/dist/metacognition/retrieval.js.map +1 -0
  347. package/dist/metacognition/risk.d.ts +48 -0
  348. package/dist/metacognition/risk.d.ts.map +1 -0
  349. package/dist/metacognition/risk.js +165 -0
  350. package/dist/metacognition/risk.js.map +1 -0
  351. package/dist/metacognition/route-economics.d.ts +95 -0
  352. package/dist/metacognition/route-economics.d.ts.map +1 -0
  353. package/dist/metacognition/route-economics.js +110 -0
  354. package/dist/metacognition/route-economics.js.map +1 -0
  355. package/dist/metacognition/runtime-bridge.d.ts +54 -0
  356. package/dist/metacognition/runtime-bridge.d.ts.map +1 -0
  357. package/dist/metacognition/runtime-bridge.js +140 -0
  358. package/dist/metacognition/runtime-bridge.js.map +1 -0
  359. package/dist/metacognition/skills.d.ts +42 -0
  360. package/dist/metacognition/skills.d.ts.map +1 -0
  361. package/dist/metacognition/skills.js +220 -0
  362. package/dist/metacognition/skills.js.map +1 -0
  363. package/dist/metacognition/state.d.ts +110 -0
  364. package/dist/metacognition/state.d.ts.map +1 -0
  365. package/dist/metacognition/state.js +52 -0
  366. package/dist/metacognition/state.js.map +1 -0
  367. package/dist/metacognition/validation.d.ts +19 -0
  368. package/dist/metacognition/validation.d.ts.map +1 -0
  369. package/dist/metacognition/validation.js +58 -0
  370. package/dist/metacognition/validation.js.map +1 -0
  371. package/dist/metacognition/verification.d.ts +93 -0
  372. package/dist/metacognition/verification.d.ts.map +1 -0
  373. package/dist/metacognition/verification.js +132 -0
  374. package/dist/metacognition/verification.js.map +1 -0
  375. package/dist/metacognition/verifier.d.ts +49 -0
  376. package/dist/metacognition/verifier.d.ts.map +1 -0
  377. package/dist/metacognition/verifier.js +88 -0
  378. package/dist/metacognition/verifier.js.map +1 -0
  379. package/dist/modes/acp/acp-agent.d.ts +24 -0
  380. package/dist/modes/acp/acp-agent.d.ts.map +1 -0
  381. package/dist/modes/acp/acp-agent.js +133 -0
  382. package/dist/modes/acp/acp-agent.js.map +1 -0
  383. package/dist/modes/acp/acp-mode.d.ts +4 -0
  384. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  385. package/dist/modes/acp/acp-mode.js +34 -0
  386. package/dist/modes/acp/acp-mode.js.map +1 -0
  387. package/dist/modes/acp/acp-session.d.ts +4 -0
  388. package/dist/modes/acp/acp-session.d.ts.map +1 -0
  389. package/dist/modes/acp/acp-session.js +76 -0
  390. package/dist/modes/acp/acp-session.js.map +1 -0
  391. package/dist/modes/acp/acp-transport.d.ts +5 -0
  392. package/dist/modes/acp/acp-transport.d.ts.map +1 -0
  393. package/dist/modes/acp/acp-transport.js +90 -0
  394. package/dist/modes/acp/acp-transport.js.map +1 -0
  395. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  396. package/dist/modes/interactive/interactive-mode.js +1 -0
  397. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  398. package/dist/observation/identity.d.ts +14 -0
  399. package/dist/observation/identity.d.ts.map +1 -0
  400. package/dist/observation/identity.js +29 -0
  401. package/dist/observation/identity.js.map +1 -0
  402. package/dist/observation/index.d.ts +13 -0
  403. package/dist/observation/index.d.ts.map +1 -0
  404. package/dist/observation/index.js +13 -0
  405. package/dist/observation/index.js.map +1 -0
  406. package/dist/observation/observe-mode.d.ts +46 -0
  407. package/dist/observation/observe-mode.d.ts.map +1 -0
  408. package/dist/observation/observe-mode.js +83 -0
  409. package/dist/observation/observe-mode.js.map +1 -0
  410. package/dist/observation/store.d.ts +53 -0
  411. package/dist/observation/store.d.ts.map +1 -0
  412. package/dist/observation/store.js +126 -0
  413. package/dist/observation/store.js.map +1 -0
  414. package/dist/observation/types.d.ts +72 -0
  415. package/dist/observation/types.d.ts.map +1 -0
  416. package/dist/observation/types.js +9 -0
  417. package/dist/observation/types.js.map +1 -0
  418. package/dist/observation/view.d.ts +39 -0
  419. package/dist/observation/view.d.ts.map +1 -0
  420. package/dist/observation/view.js +173 -0
  421. package/dist/observation/view.js.map +1 -0
  422. package/docs/audit-revalidation-2026-09-17.md +77 -0
  423. package/docs/devin-harness.md +33 -4
  424. package/docs/ecraf-normalization.md +83 -0
  425. package/docs/metacognition.md +51 -0
  426. package/docs/model-catalog-refresh.md +110 -1
  427. package/docs/models.md +1 -1
  428. package/docs/neo.md +134 -0
  429. package/docs/providers.md +125 -6
  430. package/docs/run-usage-ledger.md +56 -0
  431. package/docs/runtime-algorithms.md +151 -3
  432. package/docs/skills.md +1 -1
  433. package/docs/usage.md +2 -1
  434. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  435. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  436. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  437. package/examples/extensions/gondolin/package-lock.json +2 -2
  438. package/examples/extensions/gondolin/package.json +1 -1
  439. package/examples/extensions/sandbox/package-lock.json +2 -2
  440. package/examples/extensions/sandbox/package.json +1 -1
  441. package/examples/extensions/subagent/adaptive-agent-runtime.ts +14 -1
  442. package/examples/extensions/subagent/graph-result.ts +48 -0
  443. package/examples/extensions/subagent/index.ts +246 -111
  444. package/examples/extensions/subagent/managed-process-tree.ts +42 -0
  445. package/examples/extensions/subagent/managed-process.test.ts +24 -0
  446. package/examples/extensions/subagent/managed-process.ts +93 -112
  447. package/examples/extensions/subagent/subagent-runtime-types.ts +17 -1
  448. package/examples/extensions/subagent/subagent-stream.ts +161 -0
  449. package/examples/extensions/terminal-browser/README.md +54 -0
  450. package/examples/extensions/terminal-browser/bridge-protocol.ts +29 -0
  451. package/examples/extensions/terminal-browser/bridge.ts +219 -0
  452. package/examples/extensions/terminal-browser/browser-surface.ts +288 -0
  453. package/examples/extensions/terminal-browser/index.ts +215 -0
  454. package/examples/extensions/terminal-browser/placeholders.ts +49 -0
  455. package/examples/extensions/with-deps/package-lock.json +2 -2
  456. package/examples/extensions/with-deps/package.json +1 -1
  457. package/npm-shrinkwrap.json +18 -18
  458. package/package.json +8 -7
  459. package/resources/neo/skills/omk-browser/SKILL.md +32 -0
  460. package/resources/neo/skills/omk-code-review/SKILL.md +24 -0
  461. package/resources/neo/skills/omk-computeruse/SKILL.md +34 -0
  462. package/resources/neo/skills/omk-mcp-setup/SKILL.md +48 -0
  463. package/resources/neo/skills/omk-research/SKILL.md +24 -0
  464. package/resources/neo/skills/omk-site/SKILL.md +28 -0
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Capability-coverage skill planning under host-approved constraints.
3
+ *
4
+ * Ported from docs/OMK_skill_knowledge_control_2026-09-19.zip
5
+ * (src/skills.ts). Exact search for small sets, bounded greedy for large sets.
6
+ */
7
+ import { arrayBound, ensure, integer, lexical, text, unique } from "./validation.js";
8
+ export function planSkills(input) {
9
+ text(input.phase, "phase", 128);
10
+ integer(input.tokenBudget, "tokenBudget", 10_000_000);
11
+ integer(input.maxSkills, "maxSkills", 64);
12
+ arrayBound(input.catalog, "catalog", 500);
13
+ arrayBound(input.needs, "needs", 128);
14
+ unique(input.catalog.map((s) => s.id), "catalog ids");
15
+ unique(input.needs.map((n) => n.capability), "need ids", 128);
16
+ unique(input.allowedPermissions, "permissions");
17
+ unique(input.explicitSkills, "explicitSkills", 64);
18
+ for (const need of input.needs) {
19
+ ensure(Number.isFinite(need.weight) && need.weight > 0 && need.weight <= 1_000_000, "invalid need weight");
20
+ ensure(typeof need.required === "boolean", "required must be boolean");
21
+ }
22
+ const byId = new Map(input.catalog.map((skill) => [skill.id, skill]));
23
+ const rejected = new Map();
24
+ for (const skill of input.catalog) {
25
+ text(skill.contentHash, "contentHash");
26
+ integer(skill.tokenCost, "tokenCost", 1_000_000);
27
+ unique(skill.capabilities, "capabilities", 128);
28
+ unique(skill.phases, "phases", 32);
29
+ unique(skill.dependencies, "dependencies", 64);
30
+ unique(skill.conflicts, "conflicts", 64);
31
+ unique(skill.permissions, "skill permissions", 64);
32
+ ensure(typeof skill.explicitOnly === "boolean", "explicitOnly must be boolean");
33
+ ensure(skill.packages !== null && typeof skill.packages === "object", "packages must be a record");
34
+ for (const [name, versions] of Object.entries(skill.packages)) {
35
+ text(name, "package");
36
+ unique(versions, "versions", 128);
37
+ ensure(versions.length > 0, "empty supported versions");
38
+ }
39
+ if (input.approvedHashes[skill.id] !== skill.contentHash)
40
+ rejected.set(skill.id, "unapproved-or-changed-content");
41
+ else if (!skill.phases.includes(input.phase))
42
+ rejected.set(skill.id, "phase-mismatch");
43
+ else if (skill.explicitOnly && !input.explicitSkills.includes(skill.id))
44
+ rejected.set(skill.id, "explicit-only");
45
+ else if (skill.permissions.some((permission) => !input.allowedPermissions.includes(permission))) {
46
+ rejected.set(skill.id, "permission-denied");
47
+ }
48
+ else if (Object.entries(skill.packages).some(([name, versions]) => !versions.includes(input.installedVersions[name] ?? ""))) {
49
+ rejected.set(skill.id, "version-unknown-or-incompatible");
50
+ }
51
+ }
52
+ // A cycle or unavailable prerequisite invalidates the entire dependent closure.
53
+ const closureCache = new Map();
54
+ const closure = (id, trail = new Set()) => {
55
+ if (trail.has(id) || rejected.has(id))
56
+ return undefined;
57
+ if (closureCache.has(id))
58
+ return closureCache.get(id);
59
+ const skill = byId.get(id);
60
+ if (!skill)
61
+ return undefined;
62
+ const result = new Set([id]);
63
+ const next = new Set([...trail, id]);
64
+ for (const dependency of skill.dependencies) {
65
+ const children = closure(dependency, next);
66
+ if (!children) {
67
+ closureCache.set(id, undefined);
68
+ return undefined;
69
+ }
70
+ for (const child of children)
71
+ result.add(child);
72
+ }
73
+ closureCache.set(id, result);
74
+ return result;
75
+ };
76
+ const closures = new Map();
77
+ for (const id of [...byId.keys()].sort(lexical)) {
78
+ const set = closure(id);
79
+ if (set)
80
+ closures.set(id, set);
81
+ else if (!rejected.has(id))
82
+ rejected.set(id, "invalid-dependency-closure");
83
+ }
84
+ const feasible = (ids) => {
85
+ if (ids.size > input.maxSkills)
86
+ return false;
87
+ let cost = 0;
88
+ for (const id of ids) {
89
+ const skill = byId.get(id);
90
+ if (!skill || rejected.has(id))
91
+ return false;
92
+ if (skill.dependencies.some((d) => !ids.has(d)))
93
+ return false;
94
+ if (skill.conflicts.some((c) => ids.has(c)))
95
+ return false;
96
+ cost += skill.tokenCost;
97
+ }
98
+ return cost <= input.tokenBudget;
99
+ };
100
+ const value = (ids) => {
101
+ const coverage = new Set();
102
+ let cost = 0;
103
+ for (const id of ids) {
104
+ const skill = byId.get(id);
105
+ cost += skill.tokenCost;
106
+ for (const capability of skill.capabilities)
107
+ coverage.add(capability);
108
+ }
109
+ let required = 0, optional = 0;
110
+ for (const need of input.needs) {
111
+ if (coverage.has(need.capability)) {
112
+ if (need.required)
113
+ required += need.weight;
114
+ else
115
+ optional += need.weight;
116
+ }
117
+ }
118
+ return { required, optional, cost, ids: [...ids].sort(lexical) };
119
+ };
120
+ const better = (left, right) => left.required !== right.required
121
+ ? left.required > right.required
122
+ : left.optional !== right.optional
123
+ ? left.optional > right.optional
124
+ : left.cost !== right.cost
125
+ ? left.cost < right.cost
126
+ : left.ids.length !== right.ids.length
127
+ ? left.ids.length < right.ids.length
128
+ : lexical(left.ids.join("\0"), right.ids.join("\0")) < 0;
129
+ let base = new Set();
130
+ const blockedExplicit = [];
131
+ for (const id of [...input.explicitSkills].sort(lexical)) {
132
+ const set = closures.get(id);
133
+ if (!set)
134
+ blockedExplicit.push(id);
135
+ else
136
+ for (const item of set)
137
+ base.add(item);
138
+ }
139
+ if (!feasible(base))
140
+ blockedExplicit.push(...input.explicitSkills.filter((id) => !blockedExplicit.includes(id)));
141
+ // Conflicting explicit requests are never silently replaced by automatic picks.
142
+ if (blockedExplicit.length > 0)
143
+ base = new Set();
144
+ let best = base;
145
+ const candidates = [...closures.entries()].filter(([id]) => !base.has(id));
146
+ const algorithm = candidates.length <= 12 ? "exact-small" : "greedy-with-singleton";
147
+ if (blockedExplicit.length === 0) {
148
+ if (algorithm === "exact-small") {
149
+ const visit = (position, current) => {
150
+ if (!feasible(current))
151
+ return;
152
+ if (better(value(current), value(best)))
153
+ best = current;
154
+ const candidate = candidates[position];
155
+ if (!candidate)
156
+ return;
157
+ visit(position + 1, current);
158
+ visit(position + 1, new Set([...current, ...candidate[1]]));
159
+ };
160
+ visit(0, base);
161
+ }
162
+ else {
163
+ let current = base;
164
+ while (true) {
165
+ const previous = value(current);
166
+ let winner;
167
+ let rank = [-1, -1, ""];
168
+ for (const [id, set] of candidates) {
169
+ if (current.has(id))
170
+ continue;
171
+ const joined = new Set([...current, ...set]);
172
+ if (!feasible(joined))
173
+ continue;
174
+ const after = value(joined);
175
+ const requiredGain = after.required - previous.required;
176
+ const optionalGain = after.optional - previous.optional;
177
+ if (requiredGain <= 0 && optionalGain <= 0)
178
+ continue;
179
+ const cost = Math.max(1, after.cost - previous.cost);
180
+ const proposal = [requiredGain / cost, optionalGain / cost, id];
181
+ if (!winner ||
182
+ proposal[0] > rank[0] ||
183
+ (proposal[0] === rank[0] &&
184
+ (proposal[1] > rank[1] || (proposal[1] === rank[1] && lexical(proposal[2], rank[2]) < 0)))) {
185
+ winner = joined;
186
+ rank = proposal;
187
+ }
188
+ }
189
+ if (!winner)
190
+ break;
191
+ current = winner;
192
+ }
193
+ best = current;
194
+ for (const [, set] of candidates) {
195
+ const joined = new Set([...base, ...set]);
196
+ if (feasible(joined) && better(value(joined), value(best)))
197
+ best = joined;
198
+ }
199
+ }
200
+ }
201
+ const allCovered = new Set([...best].flatMap((id) => byId.get(id).capabilities));
202
+ const uncoveredRequired = input.needs
203
+ .filter((n) => n.required && !allCovered.has(n.capability))
204
+ .map((n) => n.capability)
205
+ .sort(lexical);
206
+ return {
207
+ selected: [...best].sort(lexical),
208
+ tokenCost: value(best).cost,
209
+ covered: input.needs
210
+ .filter((n) => allCovered.has(n.capability))
211
+ .map((n) => n.capability)
212
+ .sort(lexical),
213
+ uncoveredRequired,
214
+ blockedExplicit: blockedExplicit.sort(lexical),
215
+ rejected: Object.fromEntries([...rejected].sort(([a], [b]) => lexical(a, b))),
216
+ algorithm,
217
+ state: blockedExplicit.length ? "explicit-blocked" : uncoveredRequired.length ? "capability-gap" : "covered",
218
+ };
219
+ }
220
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/metacognition/skills.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAiDrF,MAAM,UAAU,UAAU,CAAC,KAAqB,EAAa;IAC5D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IAC1C,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAC1C,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACtC,MAAM,CACL,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC9B,aAAa,CACb,CAAC;IACF,MAAM,CACL,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EACpC,UAAU,EACV,GAAG,CACH,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAC3G,MAAM,CAAC,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,0BAA0B,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,8BAA8B,CAAC,CAAC;QAChF,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,2BAA2B,CAAC,CAAC;QACnG,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACtB,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,0BAA0B,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,WAAW;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,+BAA+B,CAAC,CAAC;aAC7G,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;aAClF,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;aAC5G,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACjG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAC7C,CAAC;aAAM,IACN,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAClC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAC7E,EACA,CAAC;YACF,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,iCAAiC,CAAC,CAAC;QAC3D,CAAC;IACF,CAAC;IACD,gFAAgF;IAChF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAmC,CAAC;IAChE,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,KAAK,GAAG,IAAI,GAAG,EAAU,EAA2B,EAAE,CAAC;QACnF,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,SAAS,CAAC;QACxD,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACrC,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBAChC,OAAO,SAAS,CAAC;YAClB,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,QAAQ;gBAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAAA,CACd,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAChD,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,GAAG;YAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;aAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,4BAA4B,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAwB,EAAW,EAAE,CAAC;QACvD,IAAI,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC7C,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9D,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC1D,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC;QACzB,CAAC;QACD,OAAO,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC;IAAA,CACjC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,GAAwB,EAAS,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YAC5B,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC;YACxB,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,YAAY;gBAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,QAAQ,GAAG,CAAC,EACf,QAAQ,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,IAAI,IAAI,CAAC,QAAQ;oBAAE,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC;;oBACtC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC;YAC9B,CAAC;QACF,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAAA,CACjE,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,IAAW,EAAE,KAAY,EAAW,EAAE,CACrD,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;QAC/B,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;QAChC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YACjC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;YAChC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;gBACzB,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;gBACxB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,GAAG,CAAC,MAAM;oBACrC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM;oBACpC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,IAAI,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7B,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG;YAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;YAC9B,KAAK,MAAM,IAAI,IAAI,GAAG;gBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjH,gFAAgF;IAChF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IACjD,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,MAAM,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,uBAAuB,CAAC;IACpF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,OAAoB,EAAQ,EAAE,CAAC;gBAC/D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,OAAO;gBAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAAE,IAAI,GAAG,OAAO,CAAC;gBACxD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,CAAC,SAAS;oBAAE,OAAO;gBACvB,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC7B,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAA,CAC5D,CAAC;YACF,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAChB,CAAC;aAAM,CAAC;YACP,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,OAAO,IAAI,EAAE,CAAC;gBACb,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;gBAChC,IAAI,MAA+B,CAAC;gBACpC,IAAI,IAAI,GAAsC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3D,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;oBACpC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,SAAS;oBAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;oBAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAAE,SAAS;oBAChC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;oBACxD,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;oBACxD,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC;wBAAE,SAAS;oBACrD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACrD,MAAM,QAAQ,GAAG,CAAC,YAAY,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,EAAE,CAAU,CAAC;oBACzE,IACC,CAAC,MAAM;wBACP,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;wBACrB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;4BACvB,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC1F,CAAC;wBACF,MAAM,GAAG,MAAM,CAAC;wBAChB,IAAI,GAAG,QAAQ,CAAC;oBACjB,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC,MAAM;oBAAE,MAAM;gBACnB,OAAO,GAAG,MAAM,CAAC;YAClB,CAAC;YACD,IAAI,GAAG,OAAO,CAAC;YACf,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC1C,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAAE,IAAI,GAAG,MAAM,CAAC;YAC3E,CAAC;QACF,CAAC;IACF,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAClF,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK;SACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;SAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SACxB,IAAI,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO;QACN,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI;QAC3B,OAAO,EAAE,KAAK,CAAC,KAAK;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;aAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;aACxB,IAAI,CAAC,OAAO,CAAC;QACf,iBAAiB;QACjB,eAAe,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9C,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,SAAS;QACT,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;KAC5G,CAAC;AAAA,CACF","sourcesContent":["/**\n * Capability-coverage skill planning under host-approved constraints.\n *\n * Ported from docs/OMK_skill_knowledge_control_2026-09-19.zip\n * (src/skills.ts). Exact search for small sets, bounded greedy for large sets.\n */\nimport { arrayBound, ensure, integer, lexical, text, unique } from \"./validation.ts\";\n\nexport interface CapabilityNeed {\n\treadonly capability: string;\n\treadonly weight: number;\n\treadonly required: boolean;\n}\nexport interface SkillDescriptor {\n\treadonly id: string;\n\treadonly contentHash: string;\n\treadonly capabilities: readonly string[];\n\treadonly phases: readonly string[];\n\treadonly tokenCost: number;\n\treadonly dependencies: readonly string[];\n\treadonly conflicts: readonly string[];\n\treadonly permissions: readonly string[];\n\treadonly explicitOnly: boolean;\n\t/** Exact versions intentionally, never a hand-written semver implementation. */\n\treadonly packages: Readonly<Record<string, readonly string[]>>;\n}\nexport interface SkillPlanInput {\n\treadonly phase: string;\n\treadonly needs: readonly CapabilityNeed[];\n\treadonly catalog: readonly SkillDescriptor[];\n\t/** Host-owned content pins, not fields supplied by the skill being selected. */\n\treadonly approvedHashes: Readonly<Record<string, string>>;\n\treadonly installedVersions: Readonly<Record<string, string>>;\n\treadonly allowedPermissions: readonly string[];\n\treadonly explicitSkills: readonly string[];\n\treadonly tokenBudget: number;\n\treadonly maxSkills: number;\n}\nexport interface SkillPlan {\n\treadonly selected: readonly string[];\n\treadonly tokenCost: number;\n\treadonly covered: readonly string[];\n\treadonly uncoveredRequired: readonly string[];\n\treadonly blockedExplicit: readonly string[];\n\treadonly rejected: Readonly<Record<string, string>>;\n\treadonly algorithm: \"exact-small\" | \"greedy-with-singleton\";\n\treadonly state: \"covered\" | \"capability-gap\" | \"explicit-blocked\";\n}\ninterface Value {\n\trequired: number;\n\toptional: number;\n\tcost: number;\n\tids: string[];\n}\n\nexport function planSkills(input: SkillPlanInput): SkillPlan {\n\ttext(input.phase, \"phase\", 128);\n\tinteger(input.tokenBudget, \"tokenBudget\", 10_000_000);\n\tinteger(input.maxSkills, \"maxSkills\", 64);\n\tarrayBound(input.catalog, \"catalog\", 500);\n\tarrayBound(input.needs, \"needs\", 128);\n\tunique(\n\t\tinput.catalog.map((s) => s.id),\n\t\t\"catalog ids\",\n\t);\n\tunique(\n\t\tinput.needs.map((n) => n.capability),\n\t\t\"need ids\",\n\t\t128,\n\t);\n\tunique(input.allowedPermissions, \"permissions\");\n\tunique(input.explicitSkills, \"explicitSkills\", 64);\n\tfor (const need of input.needs) {\n\t\tensure(Number.isFinite(need.weight) && need.weight > 0 && need.weight <= 1_000_000, \"invalid need weight\");\n\t\tensure(typeof need.required === \"boolean\", \"required must be boolean\");\n\t}\n\tconst byId = new Map(input.catalog.map((skill) => [skill.id, skill]));\n\tconst rejected = new Map<string, string>();\n\tfor (const skill of input.catalog) {\n\t\ttext(skill.contentHash, \"contentHash\");\n\t\tinteger(skill.tokenCost, \"tokenCost\", 1_000_000);\n\t\tunique(skill.capabilities, \"capabilities\", 128);\n\t\tunique(skill.phases, \"phases\", 32);\n\t\tunique(skill.dependencies, \"dependencies\", 64);\n\t\tunique(skill.conflicts, \"conflicts\", 64);\n\t\tunique(skill.permissions, \"skill permissions\", 64);\n\t\tensure(typeof skill.explicitOnly === \"boolean\", \"explicitOnly must be boolean\");\n\t\tensure(skill.packages !== null && typeof skill.packages === \"object\", \"packages must be a record\");\n\t\tfor (const [name, versions] of Object.entries(skill.packages)) {\n\t\t\ttext(name, \"package\");\n\t\t\tunique(versions, \"versions\", 128);\n\t\t\tensure(versions.length > 0, \"empty supported versions\");\n\t\t}\n\t\tif (input.approvedHashes[skill.id] !== skill.contentHash) rejected.set(skill.id, \"unapproved-or-changed-content\");\n\t\telse if (!skill.phases.includes(input.phase)) rejected.set(skill.id, \"phase-mismatch\");\n\t\telse if (skill.explicitOnly && !input.explicitSkills.includes(skill.id)) rejected.set(skill.id, \"explicit-only\");\n\t\telse if (skill.permissions.some((permission) => !input.allowedPermissions.includes(permission))) {\n\t\t\trejected.set(skill.id, \"permission-denied\");\n\t\t} else if (\n\t\t\tObject.entries(skill.packages).some(\n\t\t\t\t([name, versions]) => !versions.includes(input.installedVersions[name] ?? \"\"),\n\t\t\t)\n\t\t) {\n\t\t\trejected.set(skill.id, \"version-unknown-or-incompatible\");\n\t\t}\n\t}\n\t// A cycle or unavailable prerequisite invalidates the entire dependent closure.\n\tconst closureCache = new Map<string, Set<string> | undefined>();\n\tconst closure = (id: string, trail = new Set<string>()): Set<string> | undefined => {\n\t\tif (trail.has(id) || rejected.has(id)) return undefined;\n\t\tif (closureCache.has(id)) return closureCache.get(id);\n\t\tconst skill = byId.get(id);\n\t\tif (!skill) return undefined;\n\t\tconst result = new Set([id]);\n\t\tconst next = new Set([...trail, id]);\n\t\tfor (const dependency of skill.dependencies) {\n\t\t\tconst children = closure(dependency, next);\n\t\t\tif (!children) {\n\t\t\t\tclosureCache.set(id, undefined);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tfor (const child of children) result.add(child);\n\t\t}\n\t\tclosureCache.set(id, result);\n\t\treturn result;\n\t};\n\tconst closures = new Map<string, Set<string>>();\n\tfor (const id of [...byId.keys()].sort(lexical)) {\n\t\tconst set = closure(id);\n\t\tif (set) closures.set(id, set);\n\t\telse if (!rejected.has(id)) rejected.set(id, \"invalid-dependency-closure\");\n\t}\n\tconst feasible = (ids: ReadonlySet<string>): boolean => {\n\t\tif (ids.size > input.maxSkills) return false;\n\t\tlet cost = 0;\n\t\tfor (const id of ids) {\n\t\t\tconst skill = byId.get(id);\n\t\t\tif (!skill || rejected.has(id)) return false;\n\t\t\tif (skill.dependencies.some((d) => !ids.has(d))) return false;\n\t\t\tif (skill.conflicts.some((c) => ids.has(c))) return false;\n\t\t\tcost += skill.tokenCost;\n\t\t}\n\t\treturn cost <= input.tokenBudget;\n\t};\n\tconst value = (ids: ReadonlySet<string>): Value => {\n\t\tconst coverage = new Set<string>();\n\t\tlet cost = 0;\n\t\tfor (const id of ids) {\n\t\t\tconst skill = byId.get(id)!;\n\t\t\tcost += skill.tokenCost;\n\t\t\tfor (const capability of skill.capabilities) coverage.add(capability);\n\t\t}\n\t\tlet required = 0,\n\t\t\toptional = 0;\n\t\tfor (const need of input.needs) {\n\t\t\tif (coverage.has(need.capability)) {\n\t\t\t\tif (need.required) required += need.weight;\n\t\t\t\telse optional += need.weight;\n\t\t\t}\n\t\t}\n\t\treturn { required, optional, cost, ids: [...ids].sort(lexical) };\n\t};\n\tconst better = (left: Value, right: Value): boolean =>\n\t\tleft.required !== right.required\n\t\t\t? left.required > right.required\n\t\t\t: left.optional !== right.optional\n\t\t\t\t? left.optional > right.optional\n\t\t\t\t: left.cost !== right.cost\n\t\t\t\t\t? left.cost < right.cost\n\t\t\t\t\t: left.ids.length !== right.ids.length\n\t\t\t\t\t\t? left.ids.length < right.ids.length\n\t\t\t\t\t\t: lexical(left.ids.join(\"\\0\"), right.ids.join(\"\\0\")) < 0;\n\tlet base = new Set<string>();\n\tconst blockedExplicit: string[] = [];\n\tfor (const id of [...input.explicitSkills].sort(lexical)) {\n\t\tconst set = closures.get(id);\n\t\tif (!set) blockedExplicit.push(id);\n\t\telse for (const item of set) base.add(item);\n\t}\n\tif (!feasible(base)) blockedExplicit.push(...input.explicitSkills.filter((id) => !blockedExplicit.includes(id)));\n\t// Conflicting explicit requests are never silently replaced by automatic picks.\n\tif (blockedExplicit.length > 0) base = new Set();\n\tlet best = base;\n\tconst candidates = [...closures.entries()].filter(([id]) => !base.has(id));\n\tconst algorithm = candidates.length <= 12 ? \"exact-small\" : \"greedy-with-singleton\";\n\tif (blockedExplicit.length === 0) {\n\t\tif (algorithm === \"exact-small\") {\n\t\t\tconst visit = (position: number, current: Set<string>): void => {\n\t\t\t\tif (!feasible(current)) return;\n\t\t\t\tif (better(value(current), value(best))) best = current;\n\t\t\t\tconst candidate = candidates[position];\n\t\t\t\tif (!candidate) return;\n\t\t\t\tvisit(position + 1, current);\n\t\t\t\tvisit(position + 1, new Set([...current, ...candidate[1]]));\n\t\t\t};\n\t\t\tvisit(0, base);\n\t\t} else {\n\t\t\tlet current = base;\n\t\t\twhile (true) {\n\t\t\t\tconst previous = value(current);\n\t\t\t\tlet winner: Set<string> | undefined;\n\t\t\t\tlet rank: readonly [number, number, string] = [-1, -1, \"\"];\n\t\t\t\tfor (const [id, set] of candidates) {\n\t\t\t\t\tif (current.has(id)) continue;\n\t\t\t\t\tconst joined = new Set([...current, ...set]);\n\t\t\t\t\tif (!feasible(joined)) continue;\n\t\t\t\t\tconst after = value(joined);\n\t\t\t\t\tconst requiredGain = after.required - previous.required;\n\t\t\t\t\tconst optionalGain = after.optional - previous.optional;\n\t\t\t\t\tif (requiredGain <= 0 && optionalGain <= 0) continue;\n\t\t\t\t\tconst cost = Math.max(1, after.cost - previous.cost);\n\t\t\t\t\tconst proposal = [requiredGain / cost, optionalGain / cost, id] as const;\n\t\t\t\t\tif (\n\t\t\t\t\t\t!winner ||\n\t\t\t\t\t\tproposal[0] > rank[0] ||\n\t\t\t\t\t\t(proposal[0] === rank[0] &&\n\t\t\t\t\t\t\t(proposal[1] > rank[1] || (proposal[1] === rank[1] && lexical(proposal[2], rank[2]) < 0)))\n\t\t\t\t\t) {\n\t\t\t\t\t\twinner = joined;\n\t\t\t\t\t\trank = proposal;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!winner) break;\n\t\t\t\tcurrent = winner;\n\t\t\t}\n\t\t\tbest = current;\n\t\t\tfor (const [, set] of candidates) {\n\t\t\t\tconst joined = new Set([...base, ...set]);\n\t\t\t\tif (feasible(joined) && better(value(joined), value(best))) best = joined;\n\t\t\t}\n\t\t}\n\t}\n\tconst allCovered = new Set([...best].flatMap((id) => byId.get(id)!.capabilities));\n\tconst uncoveredRequired = input.needs\n\t\t.filter((n) => n.required && !allCovered.has(n.capability))\n\t\t.map((n) => n.capability)\n\t\t.sort(lexical);\n\treturn {\n\t\tselected: [...best].sort(lexical),\n\t\ttokenCost: value(best).cost,\n\t\tcovered: input.needs\n\t\t\t.filter((n) => allCovered.has(n.capability))\n\t\t\t.map((n) => n.capability)\n\t\t\t.sort(lexical),\n\t\tuncoveredRequired,\n\t\tblockedExplicit: blockedExplicit.sort(lexical),\n\t\trejected: Object.fromEntries([...rejected].sort(([a], [b]) => lexical(a, b))),\n\t\talgorithm,\n\t\tstate: blockedExplicit.length ? \"explicit-blocked\" : uncoveredRequired.length ? \"capability-gap\" : \"covered\",\n\t};\n}\n"]}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Metacognitive state tuple and checkpoint evaluation.
3
+ * Spec §3: X_t = (G, F, O, E, Z, H, M, V, B, P).
4
+ *
5
+ * The tuple is host-owned structured state; the model receives only the
6
+ * hypotheses, evidence, and questions it needs right now. Recommended
7
+ * computation unit is a decision checkpoint — before a new external symbol,
8
+ * after an important change, after a check failure, after verification, after
9
+ * a source conflict, or when strategy repetition is detected.
10
+ */
11
+ import type { CalibrationStore } from "./calibration.ts";
12
+ import type { KnowledgeReport } from "./knowledge.ts";
13
+ import type { Obligation } from "./obligations.ts";
14
+ import type { Prediction } from "./predictions.ts";
15
+ import type { VerifierEvaluation } from "./verifier.ts";
16
+ /** G_t: current goal, stage, target artifact. */
17
+ export interface GoalState {
18
+ readonly taskId: string;
19
+ readonly stageId: string;
20
+ readonly targetArtifact: string;
21
+ readonly goalScope: string;
22
+ }
23
+ /** F_t: observed facts about repository, environment, pinned versions, change scope. */
24
+ export interface FactState {
25
+ readonly candidateHash: string;
26
+ readonly environmentHash: string;
27
+ readonly changeScope: readonly string[];
28
+ readonly analyzerCoverage: "covered" | "partial" | "unsupported" | "unknown";
29
+ }
30
+ /** E_t: evidence candidates, adopted evidence, checks bound to the current artifact. */
31
+ export interface EvidenceState {
32
+ readonly report: KnowledgeReport | null;
33
+ readonly adoptedSourceIds: readonly string[];
34
+ }
35
+ /** H_t: competing cause/design hypotheses and unresolved classification. */
36
+ export interface HypothesisState {
37
+ readonly open: readonly string[];
38
+ readonly discriminatorCandidates: readonly string[];
39
+ readonly modelMismatch: boolean;
40
+ }
41
+ /** V_t: verifier detection coverage, known blind spots, runner health. */
42
+ export interface VerifierState {
43
+ readonly evaluations: readonly VerifierEvaluation[];
44
+ readonly runnerHealth: "healthy" | "degraded" | "unverified";
45
+ }
46
+ /** B_t: remaining time, requests, tokens, concurrency budget. */
47
+ export interface BudgetState {
48
+ readonly remainingMs: number;
49
+ readonly remainingRequests: number;
50
+ readonly remainingTokens: number;
51
+ readonly remainingConcurrent: number;
52
+ }
53
+ /** P_t: host-owned authorization, verification, interruption policy. */
54
+ export interface PolicyState {
55
+ readonly policyVersion: string;
56
+ readonly authorizedActions: readonly string[];
57
+ readonly requiredApprovals: readonly string[];
58
+ readonly interruptionReason: string | null;
59
+ }
60
+ /** Z_t: predictions registered before execution and post-execution mismatches. */
61
+ export type PredictionState = readonly Prediction[];
62
+ /** O_t: premises and completion obligations, plus unverified candidate duties. */
63
+ export type ObligationState = readonly Obligation[];
64
+ /** M_t: conditional performance and calibration records. */
65
+ export type CalibrationState = CalibrationStore;
66
+ export interface MetaState {
67
+ readonly goal: GoalState;
68
+ readonly facts: FactState;
69
+ readonly obligations: ObligationState;
70
+ readonly evidence: EvidenceState;
71
+ readonly predictions: PredictionState;
72
+ readonly hypotheses: HypothesisState;
73
+ readonly calibration: CalibrationState;
74
+ readonly verifier: VerifierState;
75
+ readonly budget: BudgetState;
76
+ readonly policy: PolicyState;
77
+ readonly hostSequence: number;
78
+ readonly progressHistory: readonly {
79
+ key: string;
80
+ newEvidence: boolean;
81
+ resolvedObligations: number;
82
+ newValidChecks: number;
83
+ }[];
84
+ readonly checkpointCount: number;
85
+ }
86
+ export declare function validateMetaState(state: MetaState): void;
87
+ /** Finish states per §9.5: continue, verified-bounded completion, inconclusive stop. */
88
+ export type FinishState = {
89
+ readonly kind: "continue";
90
+ } | {
91
+ readonly kind: "verified-completion";
92
+ readonly receiptId: string;
93
+ readonly scope: string;
94
+ } | {
95
+ readonly kind: "inconclusive";
96
+ readonly reason: string;
97
+ };
98
+ /**
99
+ * §9.5: a VOI of zero never implies verified completion. Completion requires
100
+ * required obligations satisfied AND an approved completion receipt bound to
101
+ * the current candidate.
102
+ */
103
+ export declare function finishState(state: MetaState, receipt: {
104
+ receiptId: string;
105
+ candidateHash: string;
106
+ scope: string;
107
+ } | null): FinishState;
108
+ /** Fingerprint of the full state for checkpoint diffs and receipts. */
109
+ export declare function stateFingerprint(state: MetaState): string;
110
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/metacognition/state.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Metacognitive state tuple and checkpoint evaluation.\n * Spec §3: X_t = (G, F, O, E, Z, H, M, V, B, P).\n *\n * The tuple is host-owned structured state; the model receives only the\n * hypotheses, evidence, and questions it needs right now. Recommended\n * computation unit is a decision checkpoint — before a new external symbol,\n * after an important change, after a check failure, after verification, after\n * a source conflict, or when strategy repetition is detected.\n */\nimport type { CalibrationStore } from \"./calibration.ts\";\nimport type { KnowledgeReport } from \"./knowledge.ts\";\nimport type { Obligation } from \"./obligations.ts\";\nimport type { Prediction } from \"./predictions.ts\";\nimport { canonical, ensure, integer, member, text } from \"./validation.ts\";\nimport type { VerifierEvaluation } from \"./verifier.ts\";\n\n/** G_t: current goal, stage, target artifact. */\nexport interface GoalState {\n\treadonly taskId: string;\n\treadonly stageId: string;\n\treadonly targetArtifact: string;\n\treadonly goalScope: string;\n}\n/** F_t: observed facts about repository, environment, pinned versions, change scope. */\nexport interface FactState {\n\treadonly candidateHash: string;\n\treadonly environmentHash: string;\n\treadonly changeScope: readonly string[];\n\treadonly analyzerCoverage: \"covered\" | \"partial\" | \"unsupported\" | \"unknown\";\n}\n/** E_t: evidence candidates, adopted evidence, checks bound to the current artifact. */\nexport interface EvidenceState {\n\treadonly report: KnowledgeReport | null;\n\treadonly adoptedSourceIds: readonly string[];\n}\n/** H_t: competing cause/design hypotheses and unresolved classification. */\nexport interface HypothesisState {\n\treadonly open: readonly string[];\n\treadonly discriminatorCandidates: readonly string[];\n\treadonly modelMismatch: boolean;\n}\n/** V_t: verifier detection coverage, known blind spots, runner health. */\nexport interface VerifierState {\n\treadonly evaluations: readonly VerifierEvaluation[];\n\treadonly runnerHealth: \"healthy\" | \"degraded\" | \"unverified\";\n}\n/** B_t: remaining time, requests, tokens, concurrency budget. */\nexport interface BudgetState {\n\treadonly remainingMs: number;\n\treadonly remainingRequests: number;\n\treadonly remainingTokens: number;\n\treadonly remainingConcurrent: number;\n}\n/** P_t: host-owned authorization, verification, interruption policy. */\nexport interface PolicyState {\n\treadonly policyVersion: string;\n\treadonly authorizedActions: readonly string[];\n\treadonly requiredApprovals: readonly string[];\n\treadonly interruptionReason: string | null;\n}\n/** Z_t: predictions registered before execution and post-execution mismatches. */\nexport type PredictionState = readonly Prediction[];\n/** O_t: premises and completion obligations, plus unverified candidate duties. */\nexport type ObligationState = readonly Obligation[];\n/** M_t: conditional performance and calibration records. */\nexport type CalibrationState = CalibrationStore;\n\nexport interface MetaState {\n\treadonly goal: GoalState;\n\treadonly facts: FactState;\n\treadonly obligations: ObligationState;\n\treadonly evidence: EvidenceState;\n\treadonly predictions: PredictionState;\n\treadonly hypotheses: HypothesisState;\n\treadonly calibration: CalibrationState;\n\treadonly verifier: VerifierState;\n\treadonly budget: BudgetState;\n\treadonly policy: PolicyState;\n\treadonly hostSequence: number;\n\treadonly progressHistory: readonly {\n\t\tkey: string;\n\t\tnewEvidence: boolean;\n\t\tresolvedObligations: number;\n\t\tnewValidChecks: number;\n\t}[];\n\treadonly checkpointCount: number;\n}\n\nexport function validateMetaState(state: MetaState): void {\n\ttext(state.goal.taskId, \"taskId\", 128);\n\ttext(state.goal.stageId, \"stageId\", 128);\n\ttext(state.goal.targetArtifact, \"targetArtifact\", 512);\n\ttext(state.goal.goalScope, \"goalScope\", 256);\n\ttext(state.facts.candidateHash, \"candidateHash\", 128);\n\ttext(state.facts.environmentHash, \"environmentHash\", 128);\n\tmember(state.facts.analyzerCoverage, [\"covered\", \"partial\", \"unsupported\", \"unknown\"], \"analyzerCoverage\");\n\tmember(state.verifier.runnerHealth, [\"healthy\", \"degraded\", \"unverified\"], \"runnerHealth\");\n\ttext(state.policy.policyVersion, \"policyVersion\", 64);\n\tinteger(state.budget.remainingMs, \"remainingMs\");\n\tinteger(state.budget.remainingRequests, \"remainingRequests\");\n\tinteger(state.budget.remainingTokens, \"remainingTokens\");\n\tinteger(state.budget.remainingConcurrent, \"remainingConcurrent\");\n\tinteger(state.hostSequence, \"hostSequence\");\n\tinteger(state.checkpointCount, \"checkpointCount\");\n}\n\n/** Finish states per §9.5: continue, verified-bounded completion, inconclusive stop. */\nexport type FinishState =\n\t| { readonly kind: \"continue\" }\n\t| { readonly kind: \"verified-completion\"; readonly receiptId: string; readonly scope: string }\n\t| { readonly kind: \"inconclusive\"; readonly reason: string };\n\n/**\n * §9.5: a VOI of zero never implies verified completion. Completion requires\n * required obligations satisfied AND an approved completion receipt bound to\n * the current candidate.\n */\nexport function finishState(\n\tstate: MetaState,\n\treceipt: { receiptId: string; candidateHash: string; scope: string } | null,\n): FinishState {\n\tconst openRequired = state.obligations.filter((o) => o.status === \"required\" || o.status === \"violated\");\n\tif (receipt !== null) {\n\t\tensure(receipt.candidateHash === state.facts.candidateHash, \"receipt candidate binding mismatch\");\n\t\tif (openRequired.length === 0) {\n\t\t\treturn { kind: \"verified-completion\", receiptId: receipt.receiptId, scope: receipt.scope };\n\t\t}\n\t}\n\tif (openRequired.length > 0) {\n\t\treturn { kind: \"inconclusive\", reason: `unresolved-obligations:${openRequired.length}` };\n\t}\n\tif (state.budget.remainingMs === 0 || state.budget.remainingRequests === 0) {\n\t\treturn { kind: \"inconclusive\", reason: \"budget-exhausted\" };\n\t}\n\treturn { kind: \"continue\" };\n}\n\n/** Fingerprint of the full state for checkpoint diffs and receipts. */\nexport function stateFingerprint(state: MetaState): string {\n\treturn canonical([\n\t\tstate.goal.taskId,\n\t\tstate.goal.stageId,\n\t\tstate.facts.candidateHash,\n\t\tstate.facts.environmentHash,\n\t\tstate.policy.policyVersion,\n\t\tstate.obligations.map((o) => [o.id, o.status]),\n\t\tstate.predictions.map((p) => [p.predictionId, p.status]),\n\t]);\n}\n"]}
@@ -0,0 +1,52 @@
1
+ import { canonical, ensure, integer, member, text } from "./validation.js";
2
+ export function validateMetaState(state) {
3
+ text(state.goal.taskId, "taskId", 128);
4
+ text(state.goal.stageId, "stageId", 128);
5
+ text(state.goal.targetArtifact, "targetArtifact", 512);
6
+ text(state.goal.goalScope, "goalScope", 256);
7
+ text(state.facts.candidateHash, "candidateHash", 128);
8
+ text(state.facts.environmentHash, "environmentHash", 128);
9
+ member(state.facts.analyzerCoverage, ["covered", "partial", "unsupported", "unknown"], "analyzerCoverage");
10
+ member(state.verifier.runnerHealth, ["healthy", "degraded", "unverified"], "runnerHealth");
11
+ text(state.policy.policyVersion, "policyVersion", 64);
12
+ integer(state.budget.remainingMs, "remainingMs");
13
+ integer(state.budget.remainingRequests, "remainingRequests");
14
+ integer(state.budget.remainingTokens, "remainingTokens");
15
+ integer(state.budget.remainingConcurrent, "remainingConcurrent");
16
+ integer(state.hostSequence, "hostSequence");
17
+ integer(state.checkpointCount, "checkpointCount");
18
+ }
19
+ /**
20
+ * §9.5: a VOI of zero never implies verified completion. Completion requires
21
+ * required obligations satisfied AND an approved completion receipt bound to
22
+ * the current candidate.
23
+ */
24
+ export function finishState(state, receipt) {
25
+ const openRequired = state.obligations.filter((o) => o.status === "required" || o.status === "violated");
26
+ if (receipt !== null) {
27
+ ensure(receipt.candidateHash === state.facts.candidateHash, "receipt candidate binding mismatch");
28
+ if (openRequired.length === 0) {
29
+ return { kind: "verified-completion", receiptId: receipt.receiptId, scope: receipt.scope };
30
+ }
31
+ }
32
+ if (openRequired.length > 0) {
33
+ return { kind: "inconclusive", reason: `unresolved-obligations:${openRequired.length}` };
34
+ }
35
+ if (state.budget.remainingMs === 0 || state.budget.remainingRequests === 0) {
36
+ return { kind: "inconclusive", reason: "budget-exhausted" };
37
+ }
38
+ return { kind: "continue" };
39
+ }
40
+ /** Fingerprint of the full state for checkpoint diffs and receipts. */
41
+ export function stateFingerprint(state) {
42
+ return canonical([
43
+ state.goal.taskId,
44
+ state.goal.stageId,
45
+ state.facts.candidateHash,
46
+ state.facts.environmentHash,
47
+ state.policy.policyVersion,
48
+ state.obligations.map((o) => [o.id, o.status]),
49
+ state.predictions.map((p) => [p.predictionId, p.status]),
50
+ ]);
51
+ }
52
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/metacognition/state.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Metacognitive state tuple and checkpoint evaluation.\n * Spec §3: X_t = (G, F, O, E, Z, H, M, V, B, P).\n *\n * The tuple is host-owned structured state; the model receives only the\n * hypotheses, evidence, and questions it needs right now. Recommended\n * computation unit is a decision checkpoint — before a new external symbol,\n * after an important change, after a check failure, after verification, after\n * a source conflict, or when strategy repetition is detected.\n */\nimport type { CalibrationStore } from \"./calibration.ts\";\nimport type { KnowledgeReport } from \"./knowledge.ts\";\nimport type { Obligation } from \"./obligations.ts\";\nimport type { Prediction } from \"./predictions.ts\";\nimport { canonical, ensure, integer, member, text } from \"./validation.ts\";\nimport type { VerifierEvaluation } from \"./verifier.ts\";\n\n/** G_t: current goal, stage, target artifact. */\nexport interface GoalState {\n\treadonly taskId: string;\n\treadonly stageId: string;\n\treadonly targetArtifact: string;\n\treadonly goalScope: string;\n}\n/** F_t: observed facts about repository, environment, pinned versions, change scope. */\nexport interface FactState {\n\treadonly candidateHash: string;\n\treadonly environmentHash: string;\n\treadonly changeScope: readonly string[];\n\treadonly analyzerCoverage: \"covered\" | \"partial\" | \"unsupported\" | \"unknown\";\n}\n/** E_t: evidence candidates, adopted evidence, checks bound to the current artifact. */\nexport interface EvidenceState {\n\treadonly report: KnowledgeReport | null;\n\treadonly adoptedSourceIds: readonly string[];\n}\n/** H_t: competing cause/design hypotheses and unresolved classification. */\nexport interface HypothesisState {\n\treadonly open: readonly string[];\n\treadonly discriminatorCandidates: readonly string[];\n\treadonly modelMismatch: boolean;\n}\n/** V_t: verifier detection coverage, known blind spots, runner health. */\nexport interface VerifierState {\n\treadonly evaluations: readonly VerifierEvaluation[];\n\treadonly runnerHealth: \"healthy\" | \"degraded\" | \"unverified\";\n}\n/** B_t: remaining time, requests, tokens, concurrency budget. */\nexport interface BudgetState {\n\treadonly remainingMs: number;\n\treadonly remainingRequests: number;\n\treadonly remainingTokens: number;\n\treadonly remainingConcurrent: number;\n}\n/** P_t: host-owned authorization, verification, interruption policy. */\nexport interface PolicyState {\n\treadonly policyVersion: string;\n\treadonly authorizedActions: readonly string[];\n\treadonly requiredApprovals: readonly string[];\n\treadonly interruptionReason: string | null;\n}\n/** Z_t: predictions registered before execution and post-execution mismatches. */\nexport type PredictionState = readonly Prediction[];\n/** O_t: premises and completion obligations, plus unverified candidate duties. */\nexport type ObligationState = readonly Obligation[];\n/** M_t: conditional performance and calibration records. */\nexport type CalibrationState = CalibrationStore;\n\nexport interface MetaState {\n\treadonly goal: GoalState;\n\treadonly facts: FactState;\n\treadonly obligations: ObligationState;\n\treadonly evidence: EvidenceState;\n\treadonly predictions: PredictionState;\n\treadonly hypotheses: HypothesisState;\n\treadonly calibration: CalibrationState;\n\treadonly verifier: VerifierState;\n\treadonly budget: BudgetState;\n\treadonly policy: PolicyState;\n\treadonly hostSequence: number;\n\treadonly progressHistory: readonly {\n\t\tkey: string;\n\t\tnewEvidence: boolean;\n\t\tresolvedObligations: number;\n\t\tnewValidChecks: number;\n\t}[];\n\treadonly checkpointCount: number;\n}\n\nexport function validateMetaState(state: MetaState): void {\n\ttext(state.goal.taskId, \"taskId\", 128);\n\ttext(state.goal.stageId, \"stageId\", 128);\n\ttext(state.goal.targetArtifact, \"targetArtifact\", 512);\n\ttext(state.goal.goalScope, \"goalScope\", 256);\n\ttext(state.facts.candidateHash, \"candidateHash\", 128);\n\ttext(state.facts.environmentHash, \"environmentHash\", 128);\n\tmember(state.facts.analyzerCoverage, [\"covered\", \"partial\", \"unsupported\", \"unknown\"], \"analyzerCoverage\");\n\tmember(state.verifier.runnerHealth, [\"healthy\", \"degraded\", \"unverified\"], \"runnerHealth\");\n\ttext(state.policy.policyVersion, \"policyVersion\", 64);\n\tinteger(state.budget.remainingMs, \"remainingMs\");\n\tinteger(state.budget.remainingRequests, \"remainingRequests\");\n\tinteger(state.budget.remainingTokens, \"remainingTokens\");\n\tinteger(state.budget.remainingConcurrent, \"remainingConcurrent\");\n\tinteger(state.hostSequence, \"hostSequence\");\n\tinteger(state.checkpointCount, \"checkpointCount\");\n}\n\n/** Finish states per §9.5: continue, verified-bounded completion, inconclusive stop. */\nexport type FinishState =\n\t| { readonly kind: \"continue\" }\n\t| { readonly kind: \"verified-completion\"; readonly receiptId: string; readonly scope: string }\n\t| { readonly kind: \"inconclusive\"; readonly reason: string };\n\n/**\n * §9.5: a VOI of zero never implies verified completion. Completion requires\n * required obligations satisfied AND an approved completion receipt bound to\n * the current candidate.\n */\nexport function finishState(\n\tstate: MetaState,\n\treceipt: { receiptId: string; candidateHash: string; scope: string } | null,\n): FinishState {\n\tconst openRequired = state.obligations.filter((o) => o.status === \"required\" || o.status === \"violated\");\n\tif (receipt !== null) {\n\t\tensure(receipt.candidateHash === state.facts.candidateHash, \"receipt candidate binding mismatch\");\n\t\tif (openRequired.length === 0) {\n\t\t\treturn { kind: \"verified-completion\", receiptId: receipt.receiptId, scope: receipt.scope };\n\t\t}\n\t}\n\tif (openRequired.length > 0) {\n\t\treturn { kind: \"inconclusive\", reason: `unresolved-obligations:${openRequired.length}` };\n\t}\n\tif (state.budget.remainingMs === 0 || state.budget.remainingRequests === 0) {\n\t\treturn { kind: \"inconclusive\", reason: \"budget-exhausted\" };\n\t}\n\treturn { kind: \"continue\" };\n}\n\n/** Fingerprint of the full state for checkpoint diffs and receipts. */\nexport function stateFingerprint(state: MetaState): string {\n\treturn canonical([\n\t\tstate.goal.taskId,\n\t\tstate.goal.stageId,\n\t\tstate.facts.candidateHash,\n\t\tstate.facts.environmentHash,\n\t\tstate.policy.policyVersion,\n\t\tstate.obligations.map((o) => [o.id, o.status]),\n\t\tstate.predictions.map((p) => [p.predictionId, p.status]),\n\t]);\n}\n"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Input-validation primitives for the metacognition kernel.
3
+ *
4
+ * Ported from docs/OMK_skill_knowledge_control_2026-09-19.zip
5
+ * (src/validation.ts). Deterministic, allocation-bounded, no I/O.
6
+ */
7
+ export declare function ensure(condition: unknown, message: string): asserts condition;
8
+ export declare function integer(value: number, label: string, max?: number): void;
9
+ export declare function finite(value: number, label: string, max?: number): void;
10
+ export declare function probability(value: number, label: string): void;
11
+ export declare function text(value: string, label: string, max?: number): void;
12
+ export declare function unique(values: readonly string[], label: string, max?: number): void;
13
+ export declare function member<T extends string>(value: T, values: readonly T[] | readonly string[], label: string): void;
14
+ export declare function lexical(a: string, b: string): number;
15
+ export declare function canonical(value: unknown): string;
16
+ export declare function arrayBound(value: unknown, label: string, max: number): void;
17
+ /** Probability vector: finite, [0,1], sums to 1. Mirrors check_examples.py. */
18
+ export declare function probabilityVector(values: readonly number[], label: string): void;
19
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/metacognition/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAE7E;AACD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAA0B,GAAG,IAAI,CAEzF;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAmB,GAAG,IAAI,CAKjF;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAK9D;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAO,GAAG,IAAI,CAEnE;AACD,wBAAgB,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,IAAI,CAIhF;AACD,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEhH;AACD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUhD;AACD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3E;AACD,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIhF","sourcesContent":["/**\n * Input-validation primitives for the metacognition kernel.\n *\n * Ported from docs/OMK_skill_knowledge_control_2026-09-19.zip\n * (src/validation.ts). Deterministic, allocation-bounded, no I/O.\n */\nexport function ensure(condition: unknown, message: string): asserts condition {\n\tif (!condition) throw new TypeError(message);\n}\nexport function integer(value: number, label: string, max = Number.MAX_SAFE_INTEGER): void {\n\tensure(Number.isSafeInteger(value) && value >= 0 && value <= max, `${label}: expected integer in [0, ${max}]`);\n}\nexport function finite(value: number, label: string, max = Number.MAX_VALUE): void {\n\tensure(\n\t\ttypeof value === \"number\" && Number.isFinite(value) && value >= 0 && value <= max,\n\t\t`${label}: expected finite number in [0, ${max}]`,\n\t);\n}\nexport function probability(value: number, label: string): void {\n\tensure(\n\t\ttypeof value === \"number\" && Number.isFinite(value) && value >= 0 && value <= 1,\n\t\t`${label}: expected probability in [0, 1]`,\n\t);\n}\nexport function text(value: string, label: string, max = 4096): void {\n\tensure(typeof value === \"string\" && value.trim().length > 0 && value.length <= max, `${label}: invalid string`);\n}\nexport function unique(values: readonly string[], label: string, max = 500): void {\n\tensure(Array.isArray(values) && values.length <= max, `${label}: invalid array`);\n\tfor (const value of values) text(value, label, 500);\n\tensure(new Set(values).size === values.length, `${label}: duplicate identifier`);\n}\nexport function member<T extends string>(value: T, values: readonly T[] | readonly string[], label: string): void {\n\tensure(values.includes(value), `${label}: invalid enum`);\n}\nexport function lexical(a: string, b: string): number {\n\treturn a < b ? -1 : a > b ? 1 : 0;\n}\nexport function canonical(value: unknown): string {\n\tif (value === undefined) return '\"__undefined__\"';\n\tif (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n\tif (value !== null && typeof value === \"object\") {\n\t\treturn `{${Object.entries(value)\n\t\t\t.sort(([a], [b]) => lexical(a, b))\n\t\t\t.map(([key, item]) => `${JSON.stringify(key)}:${canonical(item)}`)\n\t\t\t.join(\",\")}}`;\n\t}\n\treturn JSON.stringify(value);\n}\nexport function arrayBound(value: unknown, label: string, max: number): void {\n\tensure(Array.isArray(value) && value.length <= max, `${label}: invalid array`);\n}\n/** Probability vector: finite, [0,1], sums to 1. Mirrors check_examples.py. */\nexport function probabilityVector(values: readonly number[], label: string): void {\n\tensure(values.length > 0, `${label}: empty probability vector`);\n\tfor (const v of values) probability(v, label);\n\tensure(Math.abs(values.reduce((a, b) => a + b, 0) - 1) <= 1e-9, `${label}: probabilities must sum to one`);\n}\n"]}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Input-validation primitives for the metacognition kernel.
3
+ *
4
+ * Ported from docs/OMK_skill_knowledge_control_2026-09-19.zip
5
+ * (src/validation.ts). Deterministic, allocation-bounded, no I/O.
6
+ */
7
+ export function ensure(condition, message) {
8
+ if (!condition)
9
+ throw new TypeError(message);
10
+ }
11
+ export function integer(value, label, max = Number.MAX_SAFE_INTEGER) {
12
+ ensure(Number.isSafeInteger(value) && value >= 0 && value <= max, `${label}: expected integer in [0, ${max}]`);
13
+ }
14
+ export function finite(value, label, max = Number.MAX_VALUE) {
15
+ ensure(typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= max, `${label}: expected finite number in [0, ${max}]`);
16
+ }
17
+ export function probability(value, label) {
18
+ ensure(typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= 1, `${label}: expected probability in [0, 1]`);
19
+ }
20
+ export function text(value, label, max = 4096) {
21
+ ensure(typeof value === "string" && value.trim().length > 0 && value.length <= max, `${label}: invalid string`);
22
+ }
23
+ export function unique(values, label, max = 500) {
24
+ ensure(Array.isArray(values) && values.length <= max, `${label}: invalid array`);
25
+ for (const value of values)
26
+ text(value, label, 500);
27
+ ensure(new Set(values).size === values.length, `${label}: duplicate identifier`);
28
+ }
29
+ export function member(value, values, label) {
30
+ ensure(values.includes(value), `${label}: invalid enum`);
31
+ }
32
+ export function lexical(a, b) {
33
+ return a < b ? -1 : a > b ? 1 : 0;
34
+ }
35
+ export function canonical(value) {
36
+ if (value === undefined)
37
+ return '"__undefined__"';
38
+ if (Array.isArray(value))
39
+ return `[${value.map(canonical).join(",")}]`;
40
+ if (value !== null && typeof value === "object") {
41
+ return `{${Object.entries(value)
42
+ .sort(([a], [b]) => lexical(a, b))
43
+ .map(([key, item]) => `${JSON.stringify(key)}:${canonical(item)}`)
44
+ .join(",")}}`;
45
+ }
46
+ return JSON.stringify(value);
47
+ }
48
+ export function arrayBound(value, label, max) {
49
+ ensure(Array.isArray(value) && value.length <= max, `${label}: invalid array`);
50
+ }
51
+ /** Probability vector: finite, [0,1], sums to 1. Mirrors check_examples.py. */
52
+ export function probabilityVector(values, label) {
53
+ ensure(values.length > 0, `${label}: empty probability vector`);
54
+ for (const v of values)
55
+ probability(v, label);
56
+ ensure(Math.abs(values.reduce((a, b) => a + b, 0) - 1) <= 1e-9, `${label}: probabilities must sum to one`);
57
+ }
58
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/metacognition/validation.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Input-validation primitives for the metacognition kernel.\n *\n * Ported from docs/OMK_skill_knowledge_control_2026-09-19.zip\n * (src/validation.ts). Deterministic, allocation-bounded, no I/O.\n */\nexport function ensure(condition: unknown, message: string): asserts condition {\n\tif (!condition) throw new TypeError(message);\n}\nexport function integer(value: number, label: string, max = Number.MAX_SAFE_INTEGER): void {\n\tensure(Number.isSafeInteger(value) && value >= 0 && value <= max, `${label}: expected integer in [0, ${max}]`);\n}\nexport function finite(value: number, label: string, max = Number.MAX_VALUE): void {\n\tensure(\n\t\ttypeof value === \"number\" && Number.isFinite(value) && value >= 0 && value <= max,\n\t\t`${label}: expected finite number in [0, ${max}]`,\n\t);\n}\nexport function probability(value: number, label: string): void {\n\tensure(\n\t\ttypeof value === \"number\" && Number.isFinite(value) && value >= 0 && value <= 1,\n\t\t`${label}: expected probability in [0, 1]`,\n\t);\n}\nexport function text(value: string, label: string, max = 4096): void {\n\tensure(typeof value === \"string\" && value.trim().length > 0 && value.length <= max, `${label}: invalid string`);\n}\nexport function unique(values: readonly string[], label: string, max = 500): void {\n\tensure(Array.isArray(values) && values.length <= max, `${label}: invalid array`);\n\tfor (const value of values) text(value, label, 500);\n\tensure(new Set(values).size === values.length, `${label}: duplicate identifier`);\n}\nexport function member<T extends string>(value: T, values: readonly T[] | readonly string[], label: string): void {\n\tensure(values.includes(value), `${label}: invalid enum`);\n}\nexport function lexical(a: string, b: string): number {\n\treturn a < b ? -1 : a > b ? 1 : 0;\n}\nexport function canonical(value: unknown): string {\n\tif (value === undefined) return '\"__undefined__\"';\n\tif (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n\tif (value !== null && typeof value === \"object\") {\n\t\treturn `{${Object.entries(value)\n\t\t\t.sort(([a], [b]) => lexical(a, b))\n\t\t\t.map(([key, item]) => `${JSON.stringify(key)}:${canonical(item)}`)\n\t\t\t.join(\",\")}}`;\n\t}\n\treturn JSON.stringify(value);\n}\nexport function arrayBound(value: unknown, label: string, max: number): void {\n\tensure(Array.isArray(value) && value.length <= max, `${label}: invalid array`);\n}\n/** Probability vector: finite, [0,1], sums to 1. Mirrors check_examples.py. */\nexport function probabilityVector(values: readonly number[], label: string): void {\n\tensure(values.length > 0, `${label}: empty probability vector`);\n\tfor (const v of values) probability(v, label);\n\tensure(Math.abs(values.reduce((a, b) => a + b, 0) - 1) <= 1e-9, `${label}: probabilities must sum to one`);\n}\n"]}