attention-manifest-protocol 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (627) hide show
  1. package/CHANGELOG.md +250 -226
  2. package/CHANGELOG.zh-CN.md +63 -39
  3. package/README.md +22 -1
  4. package/README.zh-CN.md +22 -1
  5. package/docs/probes/calibration-imported.json +141 -141
  6. package/docs/probes/eval-recorded-replay.json +597 -597
  7. package/docs/probes/eval-replay.json +124 -124
  8. package/docs/probes/eval-summary.json +42 -42
  9. package/docs/probes/runtime-eval.json +4230 -4230
  10. package/lib/attention/attention.d.ts +153 -0
  11. package/lib/attention/attention.js +209 -0
  12. package/lib/attention/budget.d.ts +31 -0
  13. package/lib/attention/budget.js +55 -0
  14. package/lib/attention/cognition.d.ts +230 -0
  15. package/lib/attention/cognition.js +245 -0
  16. package/lib/attention/index.d.ts +8 -0
  17. package/lib/attention/index.js +7 -0
  18. package/lib/attention/interrupts.d.ts +97 -0
  19. package/lib/attention/interrupts.js +151 -0
  20. package/lib/attention/resource.d.ts +167 -0
  21. package/lib/attention/resource.js +148 -0
  22. package/lib/attention/social.d.ts +74 -0
  23. package/lib/attention/social.js +153 -0
  24. package/lib/attention/socialTypes.d.ts +102 -0
  25. package/lib/attention/socialTypes.js +1 -0
  26. package/lib/authz/authz.d.ts +75 -0
  27. package/lib/authz/authz.js +176 -0
  28. package/lib/authz/index.d.ts +1 -0
  29. package/lib/authz/index.js +1 -0
  30. package/lib/bayes/calibration.d.ts +67 -0
  31. package/lib/bayes/calibration.js +114 -0
  32. package/lib/bayes/calibrationRegistry.d.ts +39 -0
  33. package/lib/bayes/calibrationRegistry.js +61 -0
  34. package/lib/bayes/calibrationSelection.d.ts +40 -0
  35. package/lib/bayes/calibrationSelection.js +89 -0
  36. package/lib/bayes/engine.d.ts +163 -0
  37. package/lib/bayes/engine.js +354 -0
  38. package/lib/bayes/index.d.ts +6 -0
  39. package/lib/bayes/index.js +6 -0
  40. package/lib/bayes/reliability.d.ts +27 -0
  41. package/lib/bayes/reliability.js +38 -0
  42. package/lib/bayes/scopedPriors.d.ts +34 -0
  43. package/lib/bayes/scopedPriors.js +70 -0
  44. package/lib/boundary/frame.d.ts +63 -0
  45. package/lib/boundary/frame.js +239 -0
  46. package/lib/boundary/ids.d.ts +8 -0
  47. package/lib/boundary/ids.js +12 -0
  48. package/lib/boundary/index.d.ts +12 -0
  49. package/lib/boundary/index.js +8 -0
  50. package/lib/boundary/refTable.d.ts +49 -0
  51. package/lib/boundary/refTable.js +92 -0
  52. package/lib/boundary/toolCall.d.ts +33 -0
  53. package/lib/boundary/toolCall.js +173 -0
  54. package/lib/concept/concept.d.ts +67 -0
  55. package/lib/concept/concept.js +1 -0
  56. package/lib/concept/conceptBudget.d.ts +56 -0
  57. package/lib/concept/conceptBudget.js +281 -0
  58. package/lib/concept/conceptBudgetTypes.d.ts +74 -0
  59. package/lib/concept/conceptBudgetTypes.js +1 -0
  60. package/lib/concept/index.d.ts +3 -0
  61. package/lib/concept/index.js +3 -0
  62. package/lib/concurrency/idempotency.d.ts +16 -0
  63. package/lib/concurrency/idempotency.js +21 -0
  64. package/lib/concurrency/index.d.ts +5 -0
  65. package/lib/concurrency/index.js +5 -0
  66. package/lib/concurrency/mutex.d.ts +13 -0
  67. package/lib/concurrency/mutex.js +26 -0
  68. package/lib/concurrency/namedLocks.d.ts +7 -0
  69. package/lib/concurrency/namedLocks.js +31 -0
  70. package/lib/concurrency/retry.d.ts +23 -0
  71. package/lib/concurrency/retry.js +38 -0
  72. package/lib/concurrency/worker.d.ts +42 -0
  73. package/lib/concurrency/worker.js +67 -0
  74. package/lib/context/agentContext.d.ts +58 -0
  75. package/lib/context/agentContext.js +197 -0
  76. package/lib/context/ast.d.ts +98 -0
  77. package/lib/context/ast.js +414 -0
  78. package/lib/context/contentStore.d.ts +16 -0
  79. package/lib/context/contentStore.js +61 -0
  80. package/lib/context/context.d.ts +15 -0
  81. package/lib/context/context.js +39 -0
  82. package/lib/context/contextIndex.d.ts +40 -0
  83. package/lib/context/contextIndex.js +64 -0
  84. package/lib/context/document.d.ts +102 -0
  85. package/lib/context/document.js +22 -0
  86. package/lib/context/fileStorePath.d.ts +1 -0
  87. package/lib/context/fileStorePath.js +13 -0
  88. package/lib/context/index.d.ts +22 -0
  89. package/lib/context/index.js +11 -0
  90. package/lib/context/lifecycle.d.ts +91 -0
  91. package/lib/context/lifecycle.js +163 -0
  92. package/lib/context/projections.d.ts +20 -0
  93. package/lib/context/projections.js +127 -0
  94. package/lib/context/workspace.d.ts +111 -0
  95. package/lib/context/workspace.js +318 -0
  96. package/lib/context/workspaceProtocol.d.ts +30 -0
  97. package/lib/context/workspaceProtocol.js +49 -0
  98. package/lib/context/workspaceService.d.ts +63 -0
  99. package/lib/context/workspaceService.js +352 -0
  100. package/lib/cooperation/board.d.ts +47 -0
  101. package/lib/cooperation/board.js +66 -0
  102. package/lib/cooperation/collaboration.d.ts +55 -0
  103. package/lib/cooperation/collaboration.js +1 -0
  104. package/lib/cooperation/index.d.ts +6 -0
  105. package/lib/cooperation/index.js +6 -0
  106. package/lib/cooperation/merge.d.ts +69 -0
  107. package/lib/cooperation/merge.js +109 -0
  108. package/lib/cooperation/metrics.d.ts +39 -0
  109. package/lib/cooperation/metrics.js +17 -0
  110. package/lib/cooperation/session.d.ts +75 -0
  111. package/lib/cooperation/session.js +74 -0
  112. package/lib/cooperation/unified.d.ts +38 -0
  113. package/lib/cooperation/unified.js +40 -0
  114. package/lib/database/adapter/adapters.d.ts +24 -0
  115. package/lib/database/adapter/adapters.js +31 -0
  116. package/lib/database/adapter/index.d.ts +4 -0
  117. package/lib/database/adapter/index.js +4 -0
  118. package/lib/database/adapter/runtimeSink.d.ts +20 -0
  119. package/lib/database/adapter/runtimeSink.js +50 -0
  120. package/lib/database/adapter/sessionStore.d.ts +11 -0
  121. package/lib/database/adapter/sessionStore.js +23 -0
  122. package/lib/database/adapter/turnStore.d.ts +10 -0
  123. package/lib/database/adapter/turnStore.js +15 -0
  124. package/lib/database/entity/agent.d.ts +133 -0
  125. package/lib/database/entity/agent.js +61 -0
  126. package/lib/database/entity/entity.d.ts +715 -0
  127. package/lib/database/entity/entity.js +372 -0
  128. package/lib/database/entity/handle.d.ts +31 -0
  129. package/lib/database/entity/handle.js +53 -0
  130. package/lib/database/entity/index.d.ts +32 -0
  131. package/lib/database/entity/index.js +22 -0
  132. package/lib/database/entity/message.d.ts +27 -0
  133. package/lib/database/entity/message.js +52 -0
  134. package/lib/database/entity/meta.d.ts +11 -0
  135. package/lib/database/entity/meta.js +1 -0
  136. package/lib/database/entity/object.d.ts +23 -0
  137. package/lib/database/entity/object.js +24 -0
  138. package/lib/database/entity/outbox.d.ts +9 -0
  139. package/lib/database/entity/outbox.js +5 -0
  140. package/lib/database/entity/process.d.ts +30 -0
  141. package/lib/database/entity/process.js +40 -0
  142. package/lib/database/entity/registry.d.ts +81 -0
  143. package/lib/database/entity/registry.js +91 -0
  144. package/lib/database/entity/runtimeApproval.d.ts +23 -0
  145. package/lib/database/entity/runtimeApproval.js +5 -0
  146. package/lib/database/entity/runtimeSession.d.ts +7 -0
  147. package/lib/database/entity/runtimeSession.js +5 -0
  148. package/lib/database/entity/runtimeTurn.d.ts +9 -0
  149. package/lib/database/entity/runtimeTurn.js +5 -0
  150. package/lib/database/entity/thread.d.ts +35 -0
  151. package/lib/database/entity/thread.js +55 -0
  152. package/lib/database/entity/window.d.ts +39 -0
  153. package/lib/database/entity/window.js +56 -0
  154. package/lib/database/entity/worker.d.ts +42 -0
  155. package/lib/database/entity/worker.js +58 -0
  156. package/lib/database/index.d.ts +6 -0
  157. package/lib/database/index.js +6 -0
  158. package/lib/database/repository/addressSpaceRepository.d.ts +18 -0
  159. package/lib/database/repository/addressSpaceRepository.js +40 -0
  160. package/lib/database/repository/agentRepository.d.ts +41 -0
  161. package/lib/database/repository/agentRepository.js +398 -0
  162. package/lib/database/repository/base.d.ts +31 -0
  163. package/lib/database/repository/base.js +23 -0
  164. package/lib/database/repository/executionRepository.d.ts +64 -0
  165. package/lib/database/repository/executionRepository.js +379 -0
  166. package/lib/database/repository/handleRepository.d.ts +35 -0
  167. package/lib/database/repository/handleRepository.js +57 -0
  168. package/lib/database/repository/index.d.ts +20 -0
  169. package/lib/database/repository/index.js +17 -0
  170. package/lib/database/repository/messageRepository.d.ts +33 -0
  171. package/lib/database/repository/messageRepository.js +45 -0
  172. package/lib/database/repository/objectRepository.d.ts +43 -0
  173. package/lib/database/repository/objectRepository.js +60 -0
  174. package/lib/database/repository/outboxRepository.d.ts +15 -0
  175. package/lib/database/repository/outboxRepository.js +51 -0
  176. package/lib/database/repository/processRepository.d.ts +31 -0
  177. package/lib/database/repository/processRepository.js +48 -0
  178. package/lib/database/repository/registryRepository.d.ts +72 -0
  179. package/lib/database/repository/registryRepository.js +95 -0
  180. package/lib/database/repository/repository.d.ts +322 -0
  181. package/lib/database/repository/repository.js +332 -0
  182. package/lib/database/repository/runtimeApprovalRepository.d.ts +14 -0
  183. package/lib/database/repository/runtimeApprovalRepository.js +35 -0
  184. package/lib/database/repository/runtimeSessionRepository.d.ts +9 -0
  185. package/lib/database/repository/runtimeSessionRepository.js +21 -0
  186. package/lib/database/repository/runtimeTurnRepository.d.ts +10 -0
  187. package/lib/database/repository/runtimeTurnRepository.js +32 -0
  188. package/lib/database/repository/socialRepository.d.ts +22 -0
  189. package/lib/database/repository/socialRepository.js +155 -0
  190. package/lib/database/repository/threadRepository.d.ts +29 -0
  191. package/lib/database/repository/threadRepository.js +48 -0
  192. package/lib/database/repository/windowRepository.d.ts +46 -0
  193. package/lib/database/repository/windowRepository.js +68 -0
  194. package/lib/database/repository/workerRepository.d.ts +38 -0
  195. package/lib/database/repository/workerRepository.js +61 -0
  196. package/lib/database/service/database.d.ts +55 -0
  197. package/lib/database/service/database.js +77 -0
  198. package/lib/database/service/handleService.d.ts +20 -0
  199. package/lib/database/service/handleService.js +34 -0
  200. package/lib/database/service/index.d.ts +16 -0
  201. package/lib/database/service/index.js +11 -0
  202. package/lib/database/service/messageService.d.ts +26 -0
  203. package/lib/database/service/messageService.js +40 -0
  204. package/lib/database/service/objectService.d.ts +32 -0
  205. package/lib/database/service/objectService.js +31 -0
  206. package/lib/database/service/processService.d.ts +22 -0
  207. package/lib/database/service/processService.js +45 -0
  208. package/lib/database/service/registryServices.d.ts +43 -0
  209. package/lib/database/service/registryServices.js +60 -0
  210. package/lib/database/service/service.d.ts +131 -0
  211. package/lib/database/service/service.js +153 -0
  212. package/lib/database/service/stepService.d.ts +23 -0
  213. package/lib/database/service/stepService.js +35 -0
  214. package/lib/database/service/threadService.d.ts +23 -0
  215. package/lib/database/service/threadService.js +48 -0
  216. package/lib/database/service/windowService.d.ts +15 -0
  217. package/lib/database/service/windowService.js +22 -0
  218. package/lib/database/service/workerService.d.ts +28 -0
  219. package/lib/database/service/workerService.js +34 -0
  220. package/lib/database/sql/index.d.ts +3 -0
  221. package/lib/database/sql/index.js +2 -0
  222. package/lib/database/sql/schema.d.ts +5 -0
  223. package/lib/database/sql/schema.js +416 -0
  224. package/lib/database/sql/sql.d.ts +290 -0
  225. package/lib/database/sql/sql.js +430 -0
  226. package/lib/database/store/database.d.ts +75 -0
  227. package/lib/database/store/database.js +143 -0
  228. package/lib/database/store/index.d.ts +3 -0
  229. package/lib/database/store/index.js +2 -0
  230. package/lib/database/store/store.d.ts +145 -0
  231. package/lib/database/store/store.js +192 -0
  232. package/lib/delegate/index.d.ts +2 -0
  233. package/lib/delegate/index.js +2 -0
  234. package/lib/delegate/team.d.ts +92 -0
  235. package/lib/delegate/team.js +200 -0
  236. package/lib/delegate/teamTypes.d.ts +43 -0
  237. package/lib/delegate/teamTypes.js +1 -0
  238. package/lib/diagnosis/checklist.d.ts +16 -0
  239. package/lib/diagnosis/checklist.js +61 -0
  240. package/lib/diagnosis/context.d.ts +19 -0
  241. package/lib/diagnosis/context.js +79 -0
  242. package/lib/diagnosis/frame.d.ts +34 -0
  243. package/lib/diagnosis/frame.js +230 -0
  244. package/lib/diagnosis/index.d.ts +5 -0
  245. package/lib/diagnosis/index.js +5 -0
  246. package/lib/diagnosis/router.d.ts +22 -0
  247. package/lib/diagnosis/router.js +47 -0
  248. package/lib/diagnosis/types.d.ts +78 -0
  249. package/lib/diagnosis/types.js +2 -0
  250. package/lib/error/agentError.d.ts +9 -0
  251. package/lib/error/agentError.js +13 -0
  252. package/lib/error/ampError.d.ts +14 -0
  253. package/lib/error/ampError.js +19 -0
  254. package/lib/error/authzError.d.ts +10 -0
  255. package/lib/error/authzError.js +11 -0
  256. package/lib/error/boundaryRejection.d.ts +16 -0
  257. package/lib/error/boundaryRejection.js +14 -0
  258. package/lib/error/index.d.ts +7 -0
  259. package/lib/error/index.js +7 -0
  260. package/lib/error/kernelError.d.ts +11 -0
  261. package/lib/error/kernelError.js +12 -0
  262. package/lib/error/mailboxError.d.ts +5 -0
  263. package/lib/error/mailboxError.js +6 -0
  264. package/lib/error/windowError.d.ts +8 -0
  265. package/lib/error/windowError.js +9 -0
  266. package/lib/evaluation/agreement.d.ts +22 -0
  267. package/lib/evaluation/agreement.js +82 -0
  268. package/lib/evaluation/index.d.ts +2 -0
  269. package/lib/evaluation/index.js +2 -0
  270. package/lib/evaluation/labels.d.ts +56 -0
  271. package/lib/evaluation/labels.js +206 -0
  272. package/lib/evidence/evidenceGraph.d.ts +37 -0
  273. package/lib/evidence/evidenceGraph.js +165 -0
  274. package/lib/evidence/index.d.ts +4 -0
  275. package/lib/evidence/index.js +2 -0
  276. package/lib/evidence/revalidation.d.ts +70 -0
  277. package/lib/evidence/revalidation.js +146 -0
  278. package/lib/execution/exec.d.ts +151 -0
  279. package/lib/execution/exec.js +282 -0
  280. package/lib/execution/handles.d.ts +25 -0
  281. package/lib/execution/handles.js +45 -0
  282. package/lib/execution/index.d.ts +3 -0
  283. package/lib/execution/index.js +3 -0
  284. package/lib/execution/pin.d.ts +60 -0
  285. package/lib/execution/pin.js +103 -0
  286. package/lib/frame/frame.d.ts +61 -0
  287. package/lib/frame/frame.js +1 -0
  288. package/lib/frame/index.d.ts +1 -0
  289. package/lib/frame/index.js +1 -0
  290. package/lib/goal/goal.d.ts +19 -0
  291. package/lib/goal/goal.js +21 -0
  292. package/lib/goal/index.d.ts +2 -0
  293. package/lib/goal/index.js +1 -0
  294. package/lib/goal/plan.d.ts +125 -0
  295. package/lib/goal/plan.js +60 -0
  296. package/lib/governance/attentionManifest.d.ts +279 -0
  297. package/lib/governance/attentionManifest.js +467 -0
  298. package/lib/governance/audit.d.ts +123 -0
  299. package/lib/governance/audit.js +263 -0
  300. package/lib/governance/budget.d.ts +219 -0
  301. package/lib/governance/budget.js +424 -0
  302. package/lib/governance/context.d.ts +159 -0
  303. package/lib/governance/context.js +229 -0
  304. package/lib/governance/control.d.ts +65 -0
  305. package/lib/governance/control.js +89 -0
  306. package/lib/governance/cooperation.d.ts +163 -0
  307. package/lib/governance/cooperation.js +350 -0
  308. package/lib/governance/credential.d.ts +117 -0
  309. package/lib/governance/credential.js +229 -0
  310. package/lib/governance/httpServer.d.ts +18 -0
  311. package/lib/governance/httpServer.js +74 -0
  312. package/lib/governance/index.d.ts +32 -0
  313. package/lib/governance/index.js +32 -0
  314. package/lib/governance/legal.d.ts +222 -0
  315. package/lib/governance/legal.js +371 -0
  316. package/lib/governance/matrix.d.ts +170 -0
  317. package/lib/governance/matrix.js +365 -0
  318. package/lib/governance/perspectives.d.ts +98 -0
  319. package/lib/governance/perspectives.js +340 -0
  320. package/lib/governance/signing.d.ts +131 -0
  321. package/lib/governance/signing.js +241 -0
  322. package/lib/governance/store.d.ts +33 -0
  323. package/lib/governance/store.js +89 -0
  324. package/lib/governance/switching.d.ts +183 -0
  325. package/lib/governance/switching.js +257 -0
  326. package/lib/governance/toolPolicy.d.ts +37 -0
  327. package/lib/governance/toolPolicy.js +42 -0
  328. package/lib/governance/transport.d.ts +76 -0
  329. package/lib/governance/transport.js +124 -0
  330. package/lib/governance/types.d.ts +218 -0
  331. package/lib/governance/types.js +72 -0
  332. package/lib/governance/workflow.d.ts +174 -0
  333. package/lib/governance/workflow.js +612 -0
  334. package/lib/index.d.ts +11 -0
  335. package/lib/index.js +11 -0
  336. package/lib/interaction/index.d.ts +1 -0
  337. package/lib/interaction/index.js +1 -0
  338. package/lib/interaction/interaction.d.ts +83 -0
  339. package/lib/interaction/interaction.js +256 -0
  340. package/lib/ipc/index.d.ts +4 -0
  341. package/lib/ipc/index.js +3 -0
  342. package/lib/ipc/mailbox.d.ts +37 -0
  343. package/lib/ipc/mailbox.js +77 -0
  344. package/lib/ipc/memorySocialStore.d.ts +14 -0
  345. package/lib/ipc/memorySocialStore.js +83 -0
  346. package/lib/ipc/social.d.ts +80 -0
  347. package/lib/ipc/social.js +1 -0
  348. package/lib/kernel/index.d.ts +2 -0
  349. package/lib/kernel/index.js +1 -0
  350. package/lib/kernel/scheduler.d.ts +195 -0
  351. package/lib/kernel/scheduler.js +334 -0
  352. package/lib/ledger/checkpoint.d.ts +116 -0
  353. package/lib/ledger/checkpoint.js +223 -0
  354. package/lib/ledger/index.d.ts +4 -0
  355. package/lib/ledger/index.js +4 -0
  356. package/lib/ledger/ledger.d.ts +21 -0
  357. package/lib/ledger/ledger.js +23 -0
  358. package/lib/ledger/persistence.d.ts +46 -0
  359. package/lib/ledger/persistence.js +106 -0
  360. package/lib/ledger/share.d.ts +29 -0
  361. package/lib/ledger/share.js +39 -0
  362. package/lib/lock/index.d.ts +2 -0
  363. package/lib/lock/index.js +1 -0
  364. package/lib/lock/lease.d.ts +23 -0
  365. package/lib/lock/lease.js +42 -0
  366. package/lib/manifest/agentCard.d.ts +35 -0
  367. package/lib/manifest/agentCard.js +38 -0
  368. package/lib/manifest/cardSign.d.ts +25 -0
  369. package/lib/manifest/cardSign.js +70 -0
  370. package/lib/manifest/federation.d.ts +64 -0
  371. package/lib/manifest/federation.js +187 -0
  372. package/lib/manifest/federationTypes.d.ts +51 -0
  373. package/lib/manifest/federationTypes.js +1 -0
  374. package/lib/manifest/index.d.ts +8 -0
  375. package/lib/manifest/index.js +8 -0
  376. package/lib/manifest/keys.d.ts +221 -0
  377. package/lib/manifest/keys.js +484 -0
  378. package/lib/manifest/manifest.d.ts +102 -0
  379. package/lib/manifest/manifest.js +1 -0
  380. package/lib/manifest/sign.d.ts +38 -0
  381. package/lib/manifest/sign.js +90 -0
  382. package/lib/manifest/trust.d.ts +54 -0
  383. package/lib/manifest/trust.js +87 -0
  384. package/lib/mission/index.d.ts +2 -0
  385. package/lib/mission/index.js +1 -0
  386. package/lib/mission/missionQueue.d.ts +19 -0
  387. package/lib/mission/missionQueue.js +62 -0
  388. package/lib/module/index.d.ts +9 -0
  389. package/lib/module/index.js +9 -0
  390. package/lib/module/llm/deepseek.d.ts +43 -0
  391. package/lib/module/llm/deepseek.js +162 -0
  392. package/lib/module/llm/llm.d.ts +64 -0
  393. package/lib/module/llm/llm.js +16 -0
  394. package/lib/module/mcp/client.d.ts +32 -0
  395. package/lib/module/mcp/client.js +84 -0
  396. package/lib/module/mcp/http.d.ts +32 -0
  397. package/lib/module/mcp/http.js +83 -0
  398. package/lib/module/mcp/protocol.d.ts +62 -0
  399. package/lib/module/mcp/protocol.js +20 -0
  400. package/lib/module/mcp/server.d.ts +22 -0
  401. package/lib/module/mcp/server.js +138 -0
  402. package/lib/module/mcp/transport.d.ts +19 -0
  403. package/lib/module/mcp/transport.js +16 -0
  404. package/lib/module/mcp/workspaceServer.d.ts +20 -0
  405. package/lib/module/mcp/workspaceServer.js +90 -0
  406. package/lib/module/sandbox/sandbox.d.ts +24 -0
  407. package/lib/module/sandbox/sandbox.js +5 -0
  408. package/lib/module/tool/mcpExecutor.d.ts +18 -0
  409. package/lib/module/tool/mcpExecutor.js +41 -0
  410. package/lib/module/tool/policy.d.ts +30 -0
  411. package/lib/module/tool/policy.js +23 -0
  412. package/lib/module/tool/redact.d.ts +9 -0
  413. package/lib/module/tool/redact.js +19 -0
  414. package/lib/module/tool/tool.d.ts +26 -0
  415. package/lib/module/tool/tool.js +24 -0
  416. package/lib/module/tool/workspaceExecutor.d.ts +12 -0
  417. package/lib/module/tool/workspaceExecutor.js +25 -0
  418. package/lib/policy/guard.d.ts +115 -0
  419. package/lib/policy/guard.js +154 -0
  420. package/lib/policy/index.d.ts +2 -0
  421. package/lib/policy/index.js +2 -0
  422. package/lib/policy/policy.d.ts +249 -0
  423. package/lib/policy/policy.js +364 -0
  424. package/lib/process/agent.d.ts +295 -0
  425. package/lib/process/agent.js +1 -0
  426. package/lib/process/agentService.d.ts +87 -0
  427. package/lib/process/agentService.js +128 -0
  428. package/lib/process/agentStore.d.ts +35 -0
  429. package/lib/process/agentStore.js +328 -0
  430. package/lib/process/executionStore.d.ts +79 -0
  431. package/lib/process/executionStore.js +71 -0
  432. package/lib/process/index.d.ts +5 -0
  433. package/lib/process/index.js +5 -0
  434. package/lib/process/process.d.ts +120 -0
  435. package/lib/process/process.js +111 -0
  436. package/lib/process/transitions.d.ts +11 -0
  437. package/lib/process/transitions.js +8 -0
  438. package/lib/progress/index.d.ts +2 -0
  439. package/lib/progress/index.js +1 -0
  440. package/lib/progress/progress.d.ts +26 -0
  441. package/lib/progress/progress.js +42 -0
  442. package/lib/protocol/a2a.d.ts +51 -0
  443. package/lib/protocol/a2a.js +79 -0
  444. package/lib/protocol/channel.d.ts +25 -0
  445. package/lib/protocol/channel.js +27 -0
  446. package/lib/protocol/envelope.d.ts +180 -0
  447. package/lib/protocol/envelope.js +495 -0
  448. package/lib/protocol/httpChannel.d.ts +33 -0
  449. package/lib/protocol/httpChannel.js +59 -0
  450. package/lib/protocol/index.d.ts +6 -0
  451. package/lib/protocol/index.js +6 -0
  452. package/lib/protocol/protocol.d.ts +120 -0
  453. package/lib/protocol/protocol.js +1 -0
  454. package/lib/protocol/wire.d.ts +12 -0
  455. package/lib/protocol/wire.js +55 -0
  456. package/lib/receipt/index.d.ts +1 -0
  457. package/lib/receipt/index.js +1 -0
  458. package/lib/receipt/receipt.d.ts +43 -0
  459. package/lib/receipt/receipt.js +1 -0
  460. package/lib/registry/content.d.ts +10 -0
  461. package/lib/registry/content.js +58 -0
  462. package/lib/registry/index.d.ts +4 -0
  463. package/lib/registry/index.js +2 -0
  464. package/lib/registry/registry.d.ts +109 -0
  465. package/lib/registry/registry.js +299 -0
  466. package/lib/runtime/action.d.ts +46 -0
  467. package/lib/runtime/action.js +39 -0
  468. package/lib/runtime/behavior.d.ts +110 -0
  469. package/lib/runtime/behavior.js +179 -0
  470. package/lib/runtime/behaviorTuning.d.ts +59 -0
  471. package/lib/runtime/behaviorTuning.js +95 -0
  472. package/lib/runtime/cognitiveRuntime.d.ts +189 -0
  473. package/lib/runtime/cognitiveRuntime.js +490 -0
  474. package/lib/runtime/escalation.d.ts +22 -0
  475. package/lib/runtime/escalation.js +15 -0
  476. package/lib/runtime/governedTask.d.ts +57 -0
  477. package/lib/runtime/governedTask.js +150 -0
  478. package/lib/runtime/index.d.ts +15 -0
  479. package/lib/runtime/index.js +15 -0
  480. package/lib/runtime/kernelRuntime.d.ts +33 -0
  481. package/lib/runtime/kernelRuntime.js +105 -0
  482. package/lib/runtime/operation.d.ts +30 -0
  483. package/lib/runtime/operation.js +1 -0
  484. package/lib/runtime/replay.d.ts +24 -0
  485. package/lib/runtime/replay.js +38 -0
  486. package/lib/runtime/routing.d.ts +12 -0
  487. package/lib/runtime/routing.js +44 -0
  488. package/lib/runtime/safety.d.ts +15 -0
  489. package/lib/runtime/safety.js +28 -0
  490. package/lib/runtime/session.d.ts +147 -0
  491. package/lib/runtime/session.js +214 -0
  492. package/lib/runtime/sessionStore.d.ts +24 -0
  493. package/lib/runtime/sessionStore.js +20 -0
  494. package/lib/runtime/telemetry.d.ts +24 -0
  495. package/lib/runtime/telemetry.js +33 -0
  496. package/lib/runtime/turnStore.d.ts +16 -0
  497. package/lib/runtime/turnStore.js +15 -0
  498. package/lib/scenario/index.d.ts +1 -0
  499. package/lib/scenario/index.js +1 -0
  500. package/lib/scenario/scenario.d.ts +52 -0
  501. package/lib/scenario/scenario.js +210 -0
  502. package/lib/semantic/canonical.d.ts +6 -0
  503. package/lib/semantic/canonical.js +22 -0
  504. package/lib/semantic/index.d.ts +2 -0
  505. package/lib/semantic/index.js +2 -0
  506. package/lib/semantic/sha256.d.ts +1 -0
  507. package/lib/semantic/sha256.js +66 -0
  508. package/lib/storage/appendLog.d.ts +145 -0
  509. package/lib/storage/appendLog.js +299 -0
  510. package/lib/storage/fileAppendSink.d.ts +7 -0
  511. package/lib/storage/fileAppendSink.js +34 -0
  512. package/lib/storage/index.d.ts +2 -0
  513. package/lib/storage/index.js +2 -0
  514. package/lib/store/bindCache.d.ts +9 -0
  515. package/lib/store/bindCache.js +18 -0
  516. package/lib/store/cache.d.ts +48 -0
  517. package/lib/store/cache.js +162 -0
  518. package/lib/store/context.d.ts +10 -0
  519. package/lib/store/context.js +27 -0
  520. package/lib/store/handleStore.d.ts +9 -0
  521. package/lib/store/handleStore.js +25 -0
  522. package/lib/store/index.d.ts +9 -0
  523. package/lib/store/index.js +8 -0
  524. package/lib/store/messageStore.d.ts +9 -0
  525. package/lib/store/messageStore.js +25 -0
  526. package/lib/store/objectStore.d.ts +9 -0
  527. package/lib/store/objectStore.js +25 -0
  528. package/lib/store/processStore.d.ts +9 -0
  529. package/lib/store/processStore.js +25 -0
  530. package/lib/store/threadStore.d.ts +9 -0
  531. package/lib/store/threadStore.js +25 -0
  532. package/lib/store/windowStore.d.ts +9 -0
  533. package/lib/store/windowStore.js +25 -0
  534. package/lib/structure/abstractSyntaxTree.d.ts +181 -0
  535. package/lib/structure/abstractSyntaxTree.js +400 -0
  536. package/lib/structure/avlTree.d.ts +125 -0
  537. package/lib/structure/avlTree.js +369 -0
  538. package/lib/structure/binarySearchTree.d.ts +125 -0
  539. package/lib/structure/binarySearchTree.js +306 -0
  540. package/lib/structure/binaryTree.d.ts +174 -0
  541. package/lib/structure/binaryTree.js +495 -0
  542. package/lib/structure/bloomFilter.d.ts +126 -0
  543. package/lib/structure/bloomFilter.js +177 -0
  544. package/lib/structure/compare.d.ts +55 -0
  545. package/lib/structure/compare.js +96 -0
  546. package/lib/structure/cuckooFilter.d.ts +149 -0
  547. package/lib/structure/cuckooFilter.js +267 -0
  548. package/lib/structure/deque.d.ts +117 -0
  549. package/lib/structure/deque.js +205 -0
  550. package/lib/structure/filterKey.d.ts +19 -0
  551. package/lib/structure/filterKey.js +28 -0
  552. package/lib/structure/hash.d.ts +129 -0
  553. package/lib/structure/hash.js +241 -0
  554. package/lib/structure/heap.d.ts +152 -0
  555. package/lib/structure/heap.js +227 -0
  556. package/lib/structure/index.d.ts +20 -0
  557. package/lib/structure/index.js +20 -0
  558. package/lib/structure/iterator.d.ts +6 -0
  559. package/lib/structure/iterator.js +16 -0
  560. package/lib/structure/lru.d.ts +235 -0
  561. package/lib/structure/lru.js +524 -0
  562. package/lib/structure/ordered.d.ts +89 -0
  563. package/lib/structure/ordered.js +336 -0
  564. package/lib/structure/priority.d.ts +499 -0
  565. package/lib/structure/priority.js +756 -0
  566. package/lib/structure/queue.d.ts +90 -0
  567. package/lib/structure/queue.js +154 -0
  568. package/lib/structure/redBlackTree.d.ts +142 -0
  569. package/lib/structure/redBlackTree.js +644 -0
  570. package/lib/structure/segmentTree.d.ts +129 -0
  571. package/lib/structure/segmentTree.js +205 -0
  572. package/lib/structure/stack.d.ts +77 -0
  573. package/lib/structure/stack.js +107 -0
  574. package/lib/structure/unordered.d.ts +99 -0
  575. package/lib/structure/unordered.js +341 -0
  576. package/lib/thread/index.d.ts +2 -0
  577. package/lib/thread/index.js +2 -0
  578. package/lib/thread/thread.d.ts +107 -0
  579. package/lib/thread/thread.js +81 -0
  580. package/lib/thread/transitions.d.ts +8 -0
  581. package/lib/thread/transitions.js +9 -0
  582. package/lib/types/common.d.ts +80 -0
  583. package/lib/types/common.js +5 -0
  584. package/lib/types/index.d.ts +23 -0
  585. package/lib/types/index.js +1 -0
  586. package/lib/warrant/epistemic.d.ts +141 -0
  587. package/lib/warrant/epistemic.js +1 -0
  588. package/lib/warrant/index.d.ts +3 -0
  589. package/lib/warrant/index.js +3 -0
  590. package/lib/warrant/inquiry.d.ts +69 -0
  591. package/lib/warrant/inquiry.js +119 -0
  592. package/lib/warrant/warrant.d.ts +46 -0
  593. package/lib/warrant/warrant.js +153 -0
  594. package/lib/window/compaction.d.ts +57 -0
  595. package/lib/window/compaction.js +334 -0
  596. package/lib/window/compactionTypes.d.ts +113 -0
  597. package/lib/window/compactionTypes.js +1 -0
  598. package/lib/window/index.d.ts +7 -0
  599. package/lib/window/index.js +3 -0
  600. package/lib/window/page.d.ts +16 -0
  601. package/lib/window/page.js +2 -0
  602. package/lib/window/window.d.ts +68 -0
  603. package/lib/window/window.js +194 -0
  604. package/package.json +22 -1
  605. package/src/authz/index.ts +1 -0
  606. package/src/concept/index.ts +3 -0
  607. package/src/concurrency/index.ts +5 -0
  608. package/src/cooperation/index.ts +6 -0
  609. package/src/delegate/index.ts +2 -0
  610. package/src/error/index.ts +7 -0
  611. package/src/evaluation/index.ts +2 -0
  612. package/src/execution/index.ts +3 -0
  613. package/src/frame/index.ts +1 -0
  614. package/src/index.ts +11 -0
  615. package/src/ledger/index.ts +4 -0
  616. package/src/manifest/index.ts +8 -0
  617. package/src/policy/index.ts +2 -0
  618. package/src/protocol/index.ts +6 -0
  619. package/src/receipt/index.ts +1 -0
  620. package/src/semantic/index.ts +2 -0
  621. package/src/storage/index.ts +2 -0
  622. package/src/structure/index.ts +20 -0
  623. package/src/thread/index.ts +2 -0
  624. package/src/warrant/index.ts +3 -0
  625. package/src/window/index.ts +7 -4
  626. package/tools/rewrite-declaration-extensions.ts +98 -0
  627. package/tsconfig.build.json +14 -0
@@ -0,0 +1,176 @@
1
+ import { AuthzError } from "../error/authzError.js";
2
+ import { putObject } from "../database/store/database.js";
3
+ const AllActions = ["read", "write", "append", "grant", "revoke", "spawn", "kill", "send", "receive", "fork", "join"];
4
+ const toCapability = (row) => {
5
+ const subject = { kind: row.subject_kind, id: row.subject_id };
6
+ if (row.subject_pid !== null) {
7
+ subject.pid = row.subject_pid;
8
+ }
9
+ const resource = { kind: row.resource_kind, id: row.resource_id };
10
+ if (row.owner_pid !== null) {
11
+ resource.ownerPid = row.owner_pid;
12
+ }
13
+ const capability = {
14
+ hid: row.hid,
15
+ id: row.id,
16
+ subject,
17
+ resource,
18
+ rights: JSON.parse(row.rights),
19
+ scope: row.scope,
20
+ createdAt: row.created_at,
21
+ };
22
+ if (row.parent_hid !== null) {
23
+ capability.parentHid = row.parent_hid;
24
+ }
25
+ if (row.expires_at !== null) {
26
+ capability.expiresAt = row.expires_at;
27
+ }
28
+ if (row.revoked_at !== null) {
29
+ capability.revokedAt = row.revoked_at;
30
+ }
31
+ if (row.granted_by !== null) {
32
+ capability.grantedBy = row.granted_by;
33
+ }
34
+ return capability;
35
+ };
36
+ const live = (row, at) => row.revoked_at === null && (row.expires_at === null || row.expires_at > at);
37
+ const rowsFor = (db, subject, resource, at) => {
38
+ const subjects = [subject];
39
+ // A thread also acts with the capabilities of its process (fds are shared).
40
+ if (subject.kind === "thread" && subject.pid !== (void 0)) {
41
+ subjects.push({ kind: "process", id: `p.${subject.pid}`, pid: subject.pid });
42
+ }
43
+ const rows = [];
44
+ for (const candidate of subjects) {
45
+ const found = db
46
+ .prepare(`SELECT * FROM handles
47
+ WHERE subject_kind = ? AND subject_id = ?
48
+ AND resource_kind = ? AND resource_id = ?
49
+ ORDER BY hid ASC`)
50
+ .all(candidate.kind, candidate.id, resource.kind, resource.id);
51
+ rows.push(...found.filter((row) => live(row, at)));
52
+ }
53
+ if (subject.kind === "thread" && subject.pid !== (void 0)) {
54
+ const inherited = db
55
+ .prepare(`SELECT * FROM handles
56
+ WHERE subject_kind = 'process' AND subject_pid = ?
57
+ AND resource_kind = ? AND resource_id = ?
58
+ ORDER BY hid ASC`)
59
+ .all(subject.pid, resource.kind, resource.id);
60
+ rows.push(...inherited.filter((row) => live(row, at)));
61
+ }
62
+ return rows;
63
+ };
64
+ const isOwner = (subject, resource) => resource.ownerPid !== (void 0) && subject.pid === resource.ownerPid;
65
+ /**
66
+ * Rights the subject actually holds on the resource, including ownership.
67
+ */
68
+ export const effectiveRights = (db, subject, resource, at) => {
69
+ if (subject.kind === "host" || isOwner(subject, resource)) {
70
+ return [...AllActions];
71
+ }
72
+ const rights = new Set();
73
+ for (const row of rowsFor(db, subject, resource, at)) {
74
+ for (const right of JSON.parse(row.rights)) {
75
+ rights.add(right);
76
+ }
77
+ }
78
+ return [...rights];
79
+ };
80
+ export const can = (db, subject, action, resource, at) => {
81
+ return effectiveRights(db, subject, resource, at).includes(action);
82
+ };
83
+ /**
84
+ * Throws unless the subject holds `action` on `resource`.
85
+ */
86
+ export const requirePermission = (db, subject, action, resource, at) => {
87
+ if (can(db, subject, action, resource, at)) {
88
+ return;
89
+ }
90
+ throw new AuthzError("permission_denied", [`${subject.kind}:${subject.id} may not ${action} ${resource.kind}:${resource.id}`]);
91
+ };
92
+ export const listCapabilities = (db, subject) => {
93
+ const rows = db
94
+ .prepare("SELECT * FROM handles WHERE subject_kind = ? AND subject_id = ? ORDER BY hid ASC")
95
+ .all(subject.kind, subject.id);
96
+ return rows.map(toCapability);
97
+ };
98
+ /**
99
+ * Grant a subset of the grantor's rights to another subject.
100
+ *
101
+ * Amplification is rejected in both dimensions the model cares about: no new
102
+ * right may appear, and the new expiry may not outlive the grantor's own.
103
+ */
104
+ export const grant = (db, input, at) => {
105
+ if (input.rights.length === 0) {
106
+ throw new AuthzError("invalid_grant", ["rights must not be empty"]);
107
+ }
108
+ if (input.grantee.kind === "host") {
109
+ throw new AuthzError("invalid_grant", ["cannot grant to host"]);
110
+ }
111
+ requirePermission(db, input.grantor, "grant", input.resource, at);
112
+ const available = effectiveRights(db, input.grantor, input.resource, at);
113
+ const amplified = input.rights.filter((right) => !available.includes(right));
114
+ if (amplified.length > 0) {
115
+ throw new AuthzError("rights_amplification", [`grantor does not hold ${amplified.join(", ")}`]);
116
+ }
117
+ const source = rowsFor(db, input.grantor, input.resource, at).find((row) => JSON.parse(row.rights).includes("grant"));
118
+ const sourceExpiry = source?.expires_at ?? undefined;
119
+ if (sourceExpiry !== (void 0) && (input.expiresAt === (void 0) || input.expiresAt > sourceExpiry)) {
120
+ throw new AuthzError("expiry_amplification", [`grant expires after the grantor's capability (${sourceExpiry})`]);
121
+ }
122
+ const count = db.prepare("SELECT COUNT(*) AS n FROM handles").get();
123
+ const hid = count.n + 1;
124
+ const id = `h.${hid}`;
125
+ const scope = input.scope ?? (input.grantee.kind === "thread" ? "thread" : "process");
126
+ const result = db
127
+ .prepare(`INSERT INTO handles
128
+ (id, subject_kind, subject_id, subject_pid, resource_kind, resource_id, owner_pid, rights, scope, parent_hid, expires_at, granted_by, created_at)
129
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
130
+ .run(id, input.grantee.kind, input.grantee.id, input.grantee.pid ?? null, input.resource.kind, input.resource.id, input.resource.ownerPid ?? null, JSON.stringify(input.rights), scope, source?.hid ?? null, input.expiresAt ?? null, input.grantor.id, at);
131
+ const row = db.prepare("SELECT * FROM handles WHERE hid = ?").get(Number(result.lastInsertRowid));
132
+ putObject(db, "event", `ev.authz.grant.${row.hid}`, {
133
+ amp: "0.1",
134
+ kind: "event",
135
+ id: `ev.authz.grant.${row.hid}`,
136
+ at,
137
+ actor: { kind: input.grantor.kind === "host" ? "self" : "agent", id: input.grantor.id },
138
+ type: "authz.granted",
139
+ payload: { capability: id, grantee: input.grantee.id, resource: input.resource, rights: input.rights },
140
+ }, at);
141
+ return toCapability(row);
142
+ };
143
+ /**
144
+ * Revoke a capability and every grant derived from it.
145
+ */
146
+ export const revoke = (db, subject, hid, at) => {
147
+ const row = db.prepare("SELECT * FROM handles WHERE hid = ?").get(hid);
148
+ if (row === (void 0)) {
149
+ throw new AuthzError("unknown_capability", [`hid ${hid}`]);
150
+ }
151
+ const capability = toCapability(row);
152
+ requirePermission(db, subject, "revoke", capability.resource, at);
153
+ const result = db
154
+ .prepare(`WITH RECURSIVE tree(hid) AS (
155
+ SELECT ?
156
+ UNION ALL
157
+ SELECT h.hid FROM handles h JOIN tree t ON h.parent_hid = t.hid
158
+ )
159
+ UPDATE handles SET revoked_at = ?
160
+ WHERE hid IN (SELECT hid FROM tree) AND revoked_at IS NULL`)
161
+ .run(hid, at);
162
+ const count = Number(result.changes);
163
+ if (count === 0) {
164
+ return 0;
165
+ }
166
+ putObject(db, "event", `ev.authz.revoke.${hid}.${count}`, {
167
+ amp: "0.1",
168
+ kind: "event",
169
+ id: `ev.authz.revoke.${hid}.${count}`,
170
+ at,
171
+ actor: { kind: "self", id: subject.id },
172
+ type: "authz.revoked",
173
+ payload: { capability: hid, revoked: count },
174
+ }, at);
175
+ return count;
176
+ };
@@ -0,0 +1 @@
1
+ export * from "./authz.js";
@@ -0,0 +1 @@
1
+ export * from "./authz.js";
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Post-hoc calibration utilities.
3
+ *
4
+ * The model's posterior is not trusted as-is; we measure ECE/Brier and fit a
5
+ * monotone isotonic map only for evaluation. Cross-validation is mandatory on
6
+ * small samples so the "improvement" is not just in-sample overfit.
7
+ */
8
+ export interface CalibrationPoint {
9
+ predicted: number;
10
+ actual: boolean;
11
+ }
12
+ export interface IsotonicModel {
13
+ /**
14
+ * Upper predicted bound of each block.
15
+ */
16
+ thresholds: number[];
17
+ /**
18
+ * Observed frequency of each block.
19
+ */
20
+ values: number[];
21
+ }
22
+ /**
23
+ * Calibration statistics for one set of predictions.
24
+ */
25
+ type CalibrationReport = {
26
+ ece: number;
27
+ brier: number;
28
+ rawEce: number;
29
+ rawBrier: number;
30
+ };
31
+ /**
32
+ * Expected calibration error over optionally binned predictions.
33
+ */
34
+ type EceScore = (points: readonly CalibrationPoint[], bins?: number) => number;
35
+ /**
36
+ * Fit an isotonic map to the given points.
37
+ */
38
+ type FitIsotonic = (points: readonly CalibrationPoint[]) => IsotonicModel;
39
+ /**
40
+ * Fit a temperature scalar to the given points.
41
+ */
42
+ type FitTemperature = (points: readonly CalibrationPoint[], grid?: readonly number[]) => TemperatureModel;
43
+ /**
44
+ * Apply a temperature scalar to one prediction.
45
+ */
46
+ type ApplyTemperature = (model: TemperatureModel, predicted: number) => number;
47
+ /**
48
+ * Cross-validated calibration report.
49
+ */
50
+ type CrossValidate = (points: readonly CalibrationPoint[], folds?: number) => CalibrationReport;
51
+ export declare const brier: (points: readonly CalibrationPoint[]) => number;
52
+ export declare const ece: EceScore;
53
+ /**
54
+ * Pool-adjacent-violators isotonic regression.
55
+ */
56
+ export declare const fitIsotonic: FitIsotonic;
57
+ export declare const applyIsotonic: (model: IsotonicModel, predicted: number) => number;
58
+ export interface TemperatureModel {
59
+ temperature: number;
60
+ }
61
+ /**
62
+ * Grid-fit temperature by NLL; T<1 sharpens, T>1 softens.
63
+ */
64
+ export declare const fitTemperature: FitTemperature;
65
+ export declare const applyTemperature: ApplyTemperature;
66
+ export declare const crossValidateCalibration: CrossValidate;
67
+ export {};
@@ -0,0 +1,114 @@
1
+ const DefaultGrid = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 2.5, 3, 4, 5];
2
+ const clamp01 = (value) => Math.max(0, Math.min(1, value));
3
+ export const brier = (points) => {
4
+ if (points.length === 0) {
5
+ return 0;
6
+ }
7
+ return points.reduce((sum, point) => sum + (point.predicted - (point.actual ? 1 : 0)) ** 2, 0) / points.length;
8
+ };
9
+ export const ece = (points, bins = 10) => {
10
+ if (points.length === 0) {
11
+ return 0;
12
+ }
13
+ const buckets = Array.from({ length: bins }, () => ({ n: 0, confidence: 0, accuracy: 0 }));
14
+ for (let i = 0; i < points.length; i += 1) {
15
+ const point = points[i];
16
+ const index = Math.min(bins - 1, Math.max(0, Math.floor(clamp01(point.predicted) * bins)));
17
+ buckets[index].n += 1;
18
+ buckets[index].confidence += point.predicted;
19
+ buckets[index].accuracy += point.actual ? 1 : 0;
20
+ }
21
+ return buckets.reduce((sum, bucket) => {
22
+ if (bucket.n === 0) {
23
+ return sum;
24
+ }
25
+ return sum + (bucket.n / points.length) * Math.abs(bucket.accuracy / bucket.n - bucket.confidence / bucket.n);
26
+ }, 0);
27
+ };
28
+ /**
29
+ * Pool-adjacent-violators isotonic regression.
30
+ */
31
+ export const fitIsotonic = (points) => {
32
+ const sorted = [...points].sort((left, right) => left.predicted - right.predicted);
33
+ const blocks = [];
34
+ for (let i = 0; i < sorted.length; i += 1) {
35
+ const point = sorted[i];
36
+ blocks.push({ sum: point.actual ? 1 : 0, n: 1, max: point.predicted });
37
+ while (blocks.length >= 2) {
38
+ const current = blocks[blocks.length - 1];
39
+ const previous = blocks[blocks.length - 2];
40
+ if (previous.sum / previous.n <= current.sum / current.n) {
41
+ break;
42
+ }
43
+ blocks.splice(blocks.length - 2, 2, {
44
+ sum: previous.sum + current.sum,
45
+ n: previous.n + current.n,
46
+ max: current.max,
47
+ });
48
+ }
49
+ }
50
+ return {
51
+ thresholds: blocks.map((block) => block.max),
52
+ values: blocks.map((block) => block.sum / block.n),
53
+ };
54
+ };
55
+ export const applyIsotonic = (model, predicted) => {
56
+ if (model.thresholds.length === 0) {
57
+ return clamp01(predicted);
58
+ }
59
+ const index = model.thresholds.findIndex((threshold) => predicted <= threshold);
60
+ return model.values[index === -1 ? model.values.length - 1 : index];
61
+ };
62
+ const logit = (value) => {
63
+ const bounded = Math.max(1e-6, Math.min(1 - 1e-6, value));
64
+ return Math.log(bounded / (1 - bounded));
65
+ };
66
+ const sigmoid = (value) => 1 / (1 + Math.exp(-value));
67
+ /**
68
+ * Grid-fit temperature by NLL; T<1 sharpens, T>1 softens.
69
+ */
70
+ export const fitTemperature = (points, grid = DefaultGrid) => {
71
+ if (points.length === 0) {
72
+ return { temperature: 1 };
73
+ }
74
+ let best = 1;
75
+ let bestLoss = Number.POSITIVE_INFINITY;
76
+ for (let i = 0; i < grid.length; i += 1) {
77
+ const temperature = grid[i];
78
+ const loss = points.reduce((sum, point) => {
79
+ const calibrated = sigmoid(logit(point.predicted) / temperature);
80
+ const target = point.actual ? 1 : 0;
81
+ return sum - (target * Math.log(Math.max(1e-9, calibrated)) + (1 - target) * Math.log(Math.max(1e-9, 1 - calibrated)));
82
+ }, 0);
83
+ if (loss < bestLoss) {
84
+ bestLoss = loss;
85
+ best = temperature;
86
+ }
87
+ }
88
+ return { temperature: best };
89
+ };
90
+ export const applyTemperature = (model, predicted) => sigmoid(logit(predicted) / model.temperature);
91
+ export const crossValidateCalibration = (points, folds = 5) => {
92
+ if (points.length === 0) {
93
+ return { ece: 0, brier: 0, rawEce: 0, rawBrier: 0 };
94
+ }
95
+ const predictions = [];
96
+ for (let fold = 0; fold < folds; fold += 1) {
97
+ const train = points.filter((_point, index) => index % folds !== fold);
98
+ const test = points.filter((_point, index) => index % folds === fold);
99
+ if (train.length === 0 || test.length === 0) {
100
+ continue;
101
+ }
102
+ const model = fitIsotonic(train);
103
+ for (let i = 0; i < test.length; i += 1) {
104
+ const point = test[i];
105
+ predictions.push({ predicted: applyIsotonic(model, point.predicted), actual: point.actual });
106
+ }
107
+ }
108
+ return {
109
+ ece: ece(predictions),
110
+ brier: brier(predictions),
111
+ rawEce: ece(points),
112
+ rawBrier: brier(points),
113
+ };
114
+ };
@@ -0,0 +1,39 @@
1
+ import type { CalibrationPoint } from "./calibration.js";
2
+ import type { CalibrationMethod, CalibrationSelection } from "./calibrationSelection.js";
3
+ export interface CalibrationModel {
4
+ scope: string;
5
+ method: CalibrationMethod;
6
+ samples: number;
7
+ rawEce: number;
8
+ cvEce: number;
9
+ thresholds: number[];
10
+ values: number[];
11
+ temperature?: number;
12
+ ciLower: number;
13
+ ciUpper: number;
14
+ activatedAt: string;
15
+ }
16
+ export interface RegisterOptions {
17
+ minSamples?: number;
18
+ minImprovement?: number;
19
+ folds?: number;
20
+ /**
21
+ * Require the bootstrap 95% upper bound to be below zero.
22
+ */
23
+ requireCi?: boolean;
24
+ bootstrapSamples?: number;
25
+ seed?: number;
26
+ at?: string;
27
+ }
28
+ export interface RegisterResult {
29
+ status: "raw" | "activated";
30
+ selection: CalibrationSelection;
31
+ model?: CalibrationModel;
32
+ }
33
+ export declare class CalibrationRegistry {
34
+ private readonly models;
35
+ register(scope: string, points: readonly CalibrationPoint[], options?: RegisterOptions): RegisterResult;
36
+ calibrate(scope: string, predicted: number): number;
37
+ model(scope: string): CalibrationModel | undefined;
38
+ scopes(): string[];
39
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Calibration registry.
3
+ *
4
+ * A fitted map is activated only when there are enough points AND its
5
+ * cross-validated ECE beats raw by `minImprovement`. Otherwise the scope stays
6
+ * raw. This prevents the "isotonic made it worse" failure from shipping.
7
+ */
8
+ import { applyIsotonic, applyTemperature, fitIsotonic, fitTemperature } from "./calibration.js";
9
+ import { selectCalibration, bootstrapEceDelta } from "./calibrationSelection.js";
10
+ const clamp01 = (value) => Math.max(0, Math.min(1, value));
11
+ export class CalibrationRegistry {
12
+ models = new Map();
13
+ register(scope, points, options = {}) {
14
+ const minSamples = options.minSamples ?? 30;
15
+ const minImprovement = options.minImprovement ?? 0.01;
16
+ const selection = selectCalibration(points, options.folds ?? 5);
17
+ const candidate = points.length >= minSamples && selection.method !== "raw" && selection.rawEce - selection.ece >= minImprovement;
18
+ const ci = candidate
19
+ ? bootstrapEceDelta(points, selection.method, options.folds ?? 5, options.bootstrapSamples ?? 500, options.seed ?? 42)
20
+ : { mean: 0, lower: 0, upper: 0 };
21
+ const improves = candidate && (options.requireCi === false || ci.upper < 0);
22
+ if (!improves) {
23
+ this.models.delete(scope);
24
+ return { status: "raw", selection };
25
+ }
26
+ const model = fitIsotonic(points);
27
+ const temperature = fitTemperature(points);
28
+ const record = {
29
+ scope,
30
+ method: selection.method,
31
+ samples: points.length,
32
+ rawEce: selection.rawEce,
33
+ cvEce: selection.ece,
34
+ thresholds: model.thresholds,
35
+ values: model.values,
36
+ ...(selection.method === "temperature" ? { temperature: temperature.temperature } : {}),
37
+ ciLower: ci.lower,
38
+ ciUpper: ci.upper,
39
+ activatedAt: options.at ?? new Date().toISOString(),
40
+ };
41
+ this.models.set(scope, record);
42
+ return { status: "activated", selection, model: record };
43
+ }
44
+ calibrate(scope, predicted) {
45
+ const model = this.models.get(scope);
46
+ if (model === (void 0)) {
47
+ return clamp01(predicted);
48
+ }
49
+ if (model.method === "temperature") {
50
+ return applyTemperature({ temperature: model.temperature ?? 1 }, predicted);
51
+ }
52
+ const calibrated = applyIsotonic({ thresholds: model.thresholds, values: model.values }, predicted);
53
+ return model.method === "isotonic" ? calibrated : 0.5 * calibrated + 0.5 * clamp01(predicted);
54
+ }
55
+ model(scope) {
56
+ return this.models.get(scope);
57
+ }
58
+ scopes() {
59
+ return [...this.models.keys()];
60
+ }
61
+ }
@@ -0,0 +1,40 @@
1
+ import type { CalibrationPoint } from "./calibration.js";
2
+ export type CalibrationMethod = "raw" | "isotonic" | "shrunk" | "temperature";
3
+ export interface CalibrationSelection {
4
+ method: CalibrationMethod;
5
+ ece: number;
6
+ brier: number;
7
+ rawEce: number;
8
+ rawBrier: number;
9
+ }
10
+ export interface CvPrediction {
11
+ predicted: number;
12
+ actual: boolean;
13
+ }
14
+ /**
15
+ * Emits one out-of-fold prediction per calibration point.
16
+ */
17
+ type CrossValidatedPredictor = (points: readonly CalibrationPoint[], method: CalibrationMethod, folds: number) => CvPrediction[];
18
+ export declare const crossValidatedPredictions: CrossValidatedPredictor;
19
+ /**
20
+ * Percentile interval for the paired ECE delta.
21
+ */
22
+ type BootstrapInterval = {
23
+ mean: number;
24
+ lower: number;
25
+ upper: number;
26
+ };
27
+ /**
28
+ * Bootstrap signature for the ECE delta estimate.
29
+ */
30
+ type BootstrapDelta = (points: readonly CalibrationPoint[], method: CalibrationMethod, folds?: number, samples?: number, seed?: number) => BootstrapInterval;
31
+ /**
32
+ * Paired bootstrap of ECE(calibrated) - ECE(raw); negative means improvement.
33
+ */
34
+ export declare const bootstrapEceDelta: BootstrapDelta;
35
+ /**
36
+ * Picks the calibration method with the lowest cross-validated ECE.
37
+ */
38
+ type CalibrationSelector = (points: readonly CalibrationPoint[], folds?: number) => CalibrationSelection;
39
+ export declare const selectCalibration: CalibrationSelector;
40
+ export {};
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Calibration model selection. Fits raw / isotonic / shrunk isotonic /
3
+ * temperature on each cross-validation fold and picks the lowest ECE; ties
4
+ * prefer raw.
5
+ */
6
+ import { applyIsotonic, applyTemperature, brier, ece, fitIsotonic, fitTemperature } from "./calibration.js";
7
+ const clamp01 = (value) => Math.max(0, Math.min(1, value));
8
+ const predict = (method, isotonic, temperature, value) => {
9
+ if (method === "raw") {
10
+ return clamp01(value);
11
+ }
12
+ if (method === "temperature") {
13
+ return applyTemperature(temperature, value);
14
+ }
15
+ const calibrated = applyIsotonic(isotonic, value);
16
+ return method === "isotonic" ? calibrated : 0.5 * calibrated + 0.5 * value;
17
+ };
18
+ export const crossValidatedPredictions = (points, method, folds) => {
19
+ const predictions = [];
20
+ for (let fold = 0; fold < folds; fold += 1) {
21
+ const train = points.filter((_, index) => index % folds !== fold);
22
+ const test = points.filter((_, index) => index % folds === fold);
23
+ if (train.length === 0 || test.length === 0) {
24
+ continue;
25
+ }
26
+ const isotonic = fitIsotonic(train);
27
+ const temperature = fitTemperature(train);
28
+ for (let index = 0; index < test.length; index += 1) {
29
+ const point = test[index];
30
+ predictions.push({ predicted: predict(method, isotonic, temperature, point.predicted), actual: point.actual });
31
+ }
32
+ }
33
+ return predictions;
34
+ };
35
+ const crossValidate = (points, method, folds) => {
36
+ const predictions = crossValidatedPredictions(points, method, folds);
37
+ return { ece: ece(predictions), brier: brier(predictions) };
38
+ };
39
+ const mulberry32 = (seed) => {
40
+ let state = seed >>> 0;
41
+ return () => {
42
+ state += 0x6d2b79f5;
43
+ let value = Math.imul(state ^ (state >>> 15), 1 | state);
44
+ value ^= value + Math.imul(value ^ (value >>> 7), 61 | value);
45
+ return ((value ^ (value >>> 14)) >>> 0) / 4294967296;
46
+ };
47
+ };
48
+ /**
49
+ * Paired bootstrap of ECE(calibrated) - ECE(raw); negative means improvement.
50
+ */
51
+ export const bootstrapEceDelta = (points, method, folds = 5, samples = 500, seed = 42) => {
52
+ const raw = crossValidatedPredictions(points, "raw", folds);
53
+ const calibrated = crossValidatedPredictions(points, method, folds);
54
+ if (raw.length === 0 || raw.length !== calibrated.length) {
55
+ return { mean: 0, lower: 0, upper: 0 };
56
+ }
57
+ const random = mulberry32(seed);
58
+ const deltas = [];
59
+ for (let sample = 0; sample < samples; sample += 1) {
60
+ const left = [];
61
+ const right = [];
62
+ for (let index = 0; index < raw.length; index += 1) {
63
+ const pick = Math.floor(random() * raw.length);
64
+ left.push(raw[pick]);
65
+ right.push(calibrated[pick]);
66
+ }
67
+ deltas.push(ece(right) - ece(left));
68
+ }
69
+ deltas.sort((a, b) => a - b);
70
+ const mean = deltas.reduce((sum, value) => sum + value, 0) / deltas.length;
71
+ return {
72
+ mean,
73
+ lower: deltas[Math.floor(deltas.length * 0.025)] ?? mean,
74
+ upper: deltas[Math.floor(deltas.length * 0.975)] ?? mean,
75
+ };
76
+ };
77
+ export const selectCalibration = (points, folds = 5) => {
78
+ const rawEce = ece(points);
79
+ const rawBrier = brier(points);
80
+ const candidates = [{ method: "raw", ece: rawEce, brier: rawBrier, rawEce, rawBrier }];
81
+ const methods = ["isotonic", "shrunk", "temperature"];
82
+ for (let index = 0; index < methods.length; index += 1) {
83
+ const method = methods[index];
84
+ const score = crossValidate(points, method, folds);
85
+ candidates.push({ method, ece: score.ece, brier: score.brier, rawEce, rawBrier });
86
+ }
87
+ candidates.sort((left, right) => left.ece - right.ece || (left.method === "raw" ? -1 : 1));
88
+ return candidates[0];
89
+ };