attention-manifest-protocol 0.4.2 → 0.4.4

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 (809) hide show
  1. package/CHANGELOG.md +341 -293
  2. package/CHANGELOG.zh-CN.md +41 -8
  3. package/README.md +250 -171
  4. package/README.zh-CN.md +251 -171
  5. package/lib/assignment/assign.d.ts +102 -0
  6. package/lib/assignment/assign.js +556 -0
  7. package/lib/assignment/binding.d.ts +103 -0
  8. package/lib/assignment/binding.js +575 -0
  9. package/lib/assignment/errors.d.ts +14 -0
  10. package/lib/assignment/errors.js +16 -0
  11. package/lib/assignment/guards.d.ts +18 -0
  12. package/lib/assignment/guards.js +28 -0
  13. package/lib/assignment/index.d.ts +10 -0
  14. package/lib/assignment/index.js +10 -0
  15. package/lib/assignment/types.d.ts +169 -0
  16. package/lib/assignment/types.js +1 -0
  17. package/lib/attention/budget.d.ts +1 -1
  18. package/lib/attention/budget.js +31 -9
  19. package/lib/bayes/engine.js +2 -1
  20. package/lib/bayes/reliability.js +25 -10
  21. package/lib/boundary/frame.d.ts +10 -4
  22. package/lib/boundary/frame.js +346 -109
  23. package/lib/boundary/kinds.d.ts +11 -0
  24. package/lib/boundary/kinds.js +33 -0
  25. package/lib/boundary/refTable.d.ts +19 -9
  26. package/lib/boundary/refTable.js +128 -30
  27. package/lib/boundary/toolCall.d.ts +22 -10
  28. package/lib/boundary/toolCall.js +798 -97
  29. package/lib/concept/conceptBudget.js +10 -1
  30. package/lib/concurrency/idempotency.d.ts +4 -3
  31. package/lib/concurrency/idempotency.js +57 -13
  32. package/lib/concurrency/retry.js +18 -3
  33. package/lib/context/agentContext.d.ts +13 -0
  34. package/lib/context/agentContext.js +14 -1
  35. package/lib/context/ast.d.ts +4 -1
  36. package/lib/context/ast.js +13 -3
  37. package/lib/context/contentStore.js +22 -9
  38. package/lib/context/contextBuilder.d.ts +457 -0
  39. package/lib/context/contextBuilder.js +1395 -0
  40. package/lib/context/contextPackage.d.ts +214 -0
  41. package/lib/context/contextPackage.js +191 -0
  42. package/lib/context/index.d.ts +14 -3
  43. package/lib/context/index.js +9 -1
  44. package/lib/context/relevance.d.ts +171 -0
  45. package/lib/context/relevance.js +250 -0
  46. package/lib/context/workspaceDiff.d.ts +105 -0
  47. package/lib/context/workspaceDiff.js +238 -0
  48. package/lib/context/workspaceService.d.ts +236 -1
  49. package/lib/context/workspaceService.js +1501 -73
  50. package/lib/cooperation/collaboration.d.ts +9 -0
  51. package/lib/cooperation/session.d.ts +4 -4
  52. package/lib/cooperation/session.js +3 -3
  53. package/lib/database/adapter/filesystemStore.d.ts +145 -0
  54. package/lib/database/adapter/filesystemStore.js +321 -0
  55. package/lib/database/adapter/index.d.ts +2 -0
  56. package/lib/database/adapter/index.js +2 -0
  57. package/lib/database/adapter/workspaceSessionStore.d.ts +118 -0
  58. package/lib/database/adapter/workspaceSessionStore.js +120 -0
  59. package/lib/database/entity/fileGraph.d.ts +53 -0
  60. package/lib/database/entity/fileGraph.js +15 -0
  61. package/lib/database/entity/fileTree.d.ts +76 -0
  62. package/lib/database/entity/fileTree.js +39 -0
  63. package/lib/database/entity/hook.d.ts +29 -0
  64. package/lib/database/entity/hook.js +18 -0
  65. package/lib/database/entity/index.d.ts +4 -0
  66. package/lib/database/entity/index.js +4 -0
  67. package/lib/database/entity/workspaceSession.d.ts +53 -0
  68. package/lib/database/entity/workspaceSession.js +28 -0
  69. package/lib/database/repository/fileAnnotationRepository.d.ts +75 -0
  70. package/lib/database/repository/fileAnnotationRepository.js +109 -0
  71. package/lib/database/repository/fileGraphRepository.d.ts +188 -0
  72. package/lib/database/repository/fileGraphRepository.js +648 -0
  73. package/lib/database/repository/fileNodeRepository.d.ts +116 -0
  74. package/lib/database/repository/fileNodeRepository.js +263 -0
  75. package/lib/database/repository/fileOutlineRepository.d.ts +40 -0
  76. package/lib/database/repository/fileOutlineRepository.js +104 -0
  77. package/lib/database/repository/fileWriteRepository.d.ts +41 -0
  78. package/lib/database/repository/fileWriteRepository.js +93 -0
  79. package/lib/database/repository/hookRepository.d.ts +67 -0
  80. package/lib/database/repository/hookRepository.js +150 -0
  81. package/lib/database/repository/index.d.ts +7 -0
  82. package/lib/database/repository/index.js +7 -0
  83. package/lib/database/repository/workspaceSessionRepository.d.ts +134 -0
  84. package/lib/database/repository/workspaceSessionRepository.js +327 -0
  85. package/lib/database/service/database.d.ts +14 -0
  86. package/lib/database/service/database.js +21 -0
  87. package/lib/database/sql/schema.js +187 -0
  88. package/lib/database/store/database.js +6 -1
  89. package/lib/delegate/team.d.ts +5 -0
  90. package/lib/delegate/team.js +83 -20
  91. package/lib/discover/classify.d.ts +20 -0
  92. package/lib/discover/classify.js +85 -0
  93. package/lib/discover/host.d.ts +20 -0
  94. package/lib/discover/host.js +89 -0
  95. package/lib/discover/index.d.ts +11 -0
  96. package/lib/discover/index.js +11 -0
  97. package/lib/discover/kinds.d.ts +14 -0
  98. package/lib/discover/kinds.js +23 -0
  99. package/lib/discover/tree.d.ts +7 -0
  100. package/lib/discover/tree.js +432 -0
  101. package/lib/discover/types.d.ts +115 -0
  102. package/lib/discover/types.js +1 -0
  103. package/lib/error/boundaryRejection.d.ts +1 -1
  104. package/lib/evaluation/agreement.js +2 -2
  105. package/lib/execution/handles.js +6 -0
  106. package/lib/execution/pin.js +2 -2
  107. package/lib/file/cfb.d.ts +56 -0
  108. package/lib/file/cfb.js +396 -0
  109. package/lib/file/dependency.d.ts +151 -0
  110. package/lib/file/dependency.js +568 -0
  111. package/lib/file/directory.d.ts +34 -0
  112. package/lib/file/directory.js +141 -0
  113. package/lib/file/errors.d.ts +20 -0
  114. package/lib/file/errors.js +18 -0
  115. package/lib/file/exportGraph.d.ts +31 -0
  116. package/lib/file/exportGraph.js +554 -0
  117. package/lib/file/file.d.ts +40 -0
  118. package/lib/file/file.js +339 -0
  119. package/lib/file/importGraph.d.ts +121 -0
  120. package/lib/file/importGraph.js +1022 -0
  121. package/lib/file/index.d.ts +45 -0
  122. package/lib/file/index.js +30 -0
  123. package/lib/file/metadata.d.ts +66 -0
  124. package/lib/file/metadata.js +470 -0
  125. package/lib/file/path.d.ts +60 -0
  126. package/lib/file/path.js +259 -0
  127. package/lib/file/read.d.ts +168 -0
  128. package/lib/file/read.js +541 -0
  129. package/lib/file/runtime.d.ts +95 -0
  130. package/lib/file/runtime.js +150 -0
  131. package/lib/file/service.d.ts +227 -0
  132. package/lib/file/service.js +663 -0
  133. package/lib/file/syntaxTree.d.ts +7 -0
  134. package/lib/file/syntaxTree.js +38 -0
  135. package/lib/file/time.d.ts +38 -0
  136. package/lib/file/time.js +44 -0
  137. package/lib/file/tree.d.ts +53 -0
  138. package/lib/file/tree.js +417 -0
  139. package/lib/file/types.d.ts +371 -0
  140. package/lib/file/types.js +1 -0
  141. package/lib/file/write.d.ts +159 -0
  142. package/lib/file/write.js +1028 -0
  143. package/lib/file/zip.d.ts +35 -0
  144. package/lib/file/zip.js +349 -0
  145. package/lib/fingerprint/algorithm.d.ts +97 -0
  146. package/lib/fingerprint/algorithm.js +271 -0
  147. package/lib/fingerprint/bytes.d.ts +18 -0
  148. package/lib/fingerprint/bytes.js +31 -0
  149. package/lib/fingerprint/error.d.ts +73 -0
  150. package/lib/fingerprint/error.js +86 -0
  151. package/lib/fingerprint/file.d.ts +71 -0
  152. package/lib/fingerprint/file.js +254 -0
  153. package/lib/fingerprint/index.d.ts +37 -0
  154. package/lib/fingerprint/index.js +12 -0
  155. package/lib/fingerprint/json.d.ts +41 -0
  156. package/lib/fingerprint/json.js +94 -0
  157. package/lib/fingerprint/number.d.ts +32 -0
  158. package/lib/fingerprint/number.js +95 -0
  159. package/lib/fingerprint/policy.d.ts +54 -0
  160. package/lib/fingerprint/policy.js +50 -0
  161. package/lib/fingerprint/preimage.d.ts +84 -0
  162. package/lib/fingerprint/preimage.js +133 -0
  163. package/lib/fingerprint/raw.d.ts +26 -0
  164. package/lib/fingerprint/raw.js +45 -0
  165. package/lib/fingerprint/ref.d.ts +39 -0
  166. package/lib/fingerprint/ref.js +178 -0
  167. package/lib/fingerprint/text.d.ts +42 -0
  168. package/lib/fingerprint/text.js +155 -0
  169. package/lib/fingerprint/tree.d.ts +56 -0
  170. package/lib/fingerprint/tree.js +288 -0
  171. package/lib/fingerprint/verify.d.ts +20 -0
  172. package/lib/fingerprint/verify.js +99 -0
  173. package/lib/global/filesystem.d.ts +43 -0
  174. package/lib/global/filesystem.js +75 -0
  175. package/lib/global/index.d.ts +8 -0
  176. package/lib/global/index.js +8 -0
  177. package/lib/global/service.d.ts +51 -0
  178. package/lib/global/service.js +98 -0
  179. package/lib/governance/transport.js +18 -6
  180. package/lib/hook/ast.d.ts +29 -0
  181. package/lib/hook/ast.js +22 -0
  182. package/lib/hook/code.d.ts +55 -0
  183. package/lib/hook/code.js +47 -0
  184. package/lib/hook/dependency.d.ts +45 -0
  185. package/lib/hook/dependency.js +28 -0
  186. package/lib/hook/diff.d.ts +114 -0
  187. package/lib/hook/diff.js +327 -0
  188. package/lib/hook/exportation.d.ts +31 -0
  189. package/lib/hook/exportation.js +24 -0
  190. package/lib/hook/file.d.ts +44 -0
  191. package/lib/hook/file.js +154 -0
  192. package/lib/hook/importation.d.ts +33 -0
  193. package/lib/hook/importation.js +22 -0
  194. package/lib/hook/index.d.ts +30 -0
  195. package/lib/hook/index.js +23 -0
  196. package/lib/hook/outline.d.ts +35 -0
  197. package/lib/hook/outline.js +27 -0
  198. package/lib/hook/project.d.ts +65 -0
  199. package/lib/hook/project.js +217 -0
  200. package/lib/hook/types.d.ts +114 -0
  201. package/lib/hook/types.js +407 -0
  202. package/lib/index.d.ts +9 -0
  203. package/lib/index.js +9 -0
  204. package/lib/lock/lease.js +28 -3
  205. package/lib/manifest/cardSign.d.ts +1 -1
  206. package/lib/manifest/cardSign.js +37 -7
  207. package/lib/manifest/federation.js +13 -6
  208. package/lib/manifest/trust.d.ts +2 -0
  209. package/lib/manifest/trust.js +27 -6
  210. package/lib/module/index.d.ts +4 -0
  211. package/lib/module/index.js +4 -0
  212. package/lib/module/mcp/client.js +21 -2
  213. package/lib/module/mcp/filesystemServer.d.ts +24 -0
  214. package/lib/module/mcp/filesystemServer.js +102 -0
  215. package/lib/module/mcp/http.js +32 -19
  216. package/lib/module/mcp/workspaceServer.js +20 -3
  217. package/lib/module/tool/filesystemExecutor.d.ts +18 -0
  218. package/lib/module/tool/filesystemExecutor.js +49 -0
  219. package/lib/module/tool/globalExecutor.d.ts +17 -0
  220. package/lib/module/tool/globalExecutor.js +39 -0
  221. package/lib/module/tool/globalFilesystemExecutor.d.ts +18 -0
  222. package/lib/module/tool/globalFilesystemExecutor.js +49 -0
  223. package/lib/module/tool/workspaceExecutor.d.ts +9 -0
  224. package/lib/module/tool/workspaceExecutor.js +16 -3
  225. package/lib/naming/aliases.d.ts +48 -0
  226. package/lib/naming/aliases.js +79 -0
  227. package/lib/naming/catalog.d.ts +117 -0
  228. package/lib/naming/catalog.js +108 -0
  229. package/lib/naming/grammar.d.ts +67 -0
  230. package/lib/naming/grammar.js +212 -0
  231. package/lib/naming/ids.d.ts +157 -0
  232. package/lib/naming/ids.js +119 -0
  233. package/lib/naming/index.d.ts +13 -0
  234. package/lib/naming/index.js +13 -0
  235. package/lib/outline/index.d.ts +9 -0
  236. package/lib/outline/index.js +8 -0
  237. package/lib/outline/office.d.ts +160 -0
  238. package/lib/outline/office.js +2375 -0
  239. package/lib/outline/officeBridge.d.ts +32 -0
  240. package/lib/outline/officeBridge.js +27 -0
  241. package/lib/outline/outline.d.ts +159 -0
  242. package/lib/outline/outline.js +837 -0
  243. package/lib/outline/outlineIndex.d.ts +97 -0
  244. package/lib/outline/outlineIndex.js +325 -0
  245. package/lib/outline/outlineKeywords.d.ts +59 -0
  246. package/lib/outline/outlineKeywords.js +143 -0
  247. package/lib/outline/outlineStrategies.d.ts +414 -0
  248. package/lib/outline/outlineStrategies.js +8324 -0
  249. package/lib/outline/reactOutline.d.ts +37 -0
  250. package/lib/outline/reactOutline.js +1070 -0
  251. package/lib/outline/shellOutline.d.ts +65 -0
  252. package/lib/outline/shellOutline.js +873 -0
  253. package/lib/outline/sqlOutline.d.ts +170 -0
  254. package/lib/outline/sqlOutline.js +1536 -0
  255. package/lib/outline/strategy.d.ts +46 -0
  256. package/lib/outline/strategy.js +1 -0
  257. package/lib/outline/types.d.ts +95 -0
  258. package/lib/outline/types.js +1 -0
  259. package/lib/outline/visualBasicOutline.d.ts +27 -0
  260. package/lib/outline/visualBasicOutline.js +750 -0
  261. package/lib/protocol/filesystem.d.ts +55 -0
  262. package/lib/protocol/filesystem.js +105 -0
  263. package/lib/protocol/global.d.ts +42 -0
  264. package/lib/protocol/global.js +63 -0
  265. package/lib/protocol/globalFilesystem.d.ts +40 -0
  266. package/lib/protocol/globalFilesystem.js +59 -0
  267. package/lib/protocol/index.d.ts +4 -0
  268. package/lib/protocol/index.js +4 -0
  269. package/lib/protocol/protocol.d.ts +4 -0
  270. package/lib/protocol/wire.js +5 -2
  271. package/lib/protocol/workspace.d.ts +305 -0
  272. package/lib/protocol/workspace.js +258 -0
  273. package/lib/receipt/receipt.d.ts +8 -0
  274. package/lib/registry/content.js +9 -3
  275. package/lib/runtime/kernelRuntime.js +9 -1
  276. package/lib/scenario/scenario.js +5 -4
  277. package/lib/semantic/canonical.d.ts +61 -0
  278. package/lib/semantic/canonical.js +135 -8
  279. package/lib/semantic/jsonValue.d.ts +31 -0
  280. package/lib/semantic/jsonValue.js +122 -0
  281. package/lib/semantic/sha256.js +3 -0
  282. package/lib/semantic/time.d.ts +14 -0
  283. package/lib/semantic/time.js +56 -0
  284. package/lib/session/context.d.ts +76 -0
  285. package/lib/session/context.js +419 -0
  286. package/lib/session/errors.d.ts +24 -0
  287. package/lib/session/errors.js +22 -0
  288. package/lib/session/identity.d.ts +24 -0
  289. package/lib/session/identity.js +56 -0
  290. package/lib/session/index.d.ts +14 -0
  291. package/lib/session/index.js +12 -0
  292. package/lib/session/registry.d.ts +130 -0
  293. package/lib/session/registry.js +908 -0
  294. package/lib/session/types.d.ts +227 -0
  295. package/lib/session/types.js +14 -0
  296. package/lib/structure/index.d.ts +1 -0
  297. package/lib/structure/index.js +1 -0
  298. package/lib/structure/trie.d.ts +88 -0
  299. package/lib/structure/trie.js +183 -0
  300. package/lib/syntax/byteIndex.d.ts +44 -0
  301. package/lib/syntax/byteIndex.js +148 -0
  302. package/lib/syntax/charset.d.ts +88 -0
  303. package/lib/syntax/charset.js +276 -0
  304. package/lib/syntax/index.d.ts +6 -0
  305. package/lib/syntax/index.js +5 -0
  306. package/lib/syntax/syntaxRegistry.d.ts +150 -0
  307. package/lib/syntax/syntaxRegistry.js +314 -0
  308. package/lib/syntax/syntaxTree.d.ts +106 -0
  309. package/lib/syntax/syntaxTree.js +668 -0
  310. package/lib/syntax/types.d.ts +15 -0
  311. package/lib/syntax/types.js +1 -0
  312. package/lib/types/common.d.ts +1 -1
  313. package/package.json +72 -193
  314. package/.editorconfig +0 -12
  315. package/.prettierignore +0 -17
  316. package/MCP-Token/347/250/216/344/270/216/344/270/213/344/270/200/344/273/243/345/267/245/345/205/267/345/215/217/350/256/256.html +0 -1763
  317. package/docs/annotation-campaign-A.csv +0 -54
  318. package/docs/annotation-campaign-B.csv +0 -54
  319. package/docs/annotation-campaign.csv +0 -54
  320. package/docs/eval/annotations-A.jsonl +0 -16
  321. package/docs/eval/annotations.json +0 -122
  322. package/docs/eval/recorded-labels.json +0 -12
  323. package/docs/eval/replay-cases.json +0 -14
  324. package/docs/eval/replay-labels-b.json +0 -14
  325. package/docs/examples/attention-request.json +0 -16
  326. package/docs/examples/checkpoint.json +0 -15
  327. package/docs/examples/claim.json +0 -66
  328. package/docs/examples/collaboration.json +0 -66
  329. package/docs/examples/concept-checkpoint.json +0 -15
  330. package/docs/examples/concept-prune-plan.json +0 -45
  331. package/docs/examples/federation.json +0 -126
  332. package/docs/examples/frame-chain.json +0 -77
  333. package/docs/examples/ledger-snapshot.json +0 -108
  334. package/docs/examples/manifest.json +0 -77
  335. package/docs/examples/message.json +0 -19
  336. package/docs/examples/other-model.json +0 -45
  337. package/docs/examples/plan.json +0 -50
  338. package/docs/examples/prune-plan.json +0 -48
  339. package/docs/examples/receipt.json +0 -22
  340. package/docs/examples/runtime-run.json +0 -573
  341. package/docs/examples/team.json +0 -66
  342. package/docs/examples/verb-note.json +0 -11
  343. package/docs/probes/bayes-scores.json +0 -1452
  344. package/docs/probes/calibration-imported.json +0 -141
  345. package/docs/probes/context-ast-deepseek.json +0 -1577
  346. package/docs/probes/deepseek-probe.json +0 -917
  347. package/docs/probes/eval-recorded-replay.json +0 -597
  348. package/docs/probes/eval-replay.json +0 -124
  349. package/docs/probes/eval-summary.json +0 -42
  350. package/docs/probes/runtime-eval.json +0 -4230
  351. package/eslint.config.mts +0 -96
  352. package/index.html +0 -13
  353. package/prettier.config.mts +0 -37
  354. package/public/favicon.svg +0 -1
  355. package/public/icons.svg +0 -24
  356. package/src/attention/attention.ts +0 -347
  357. package/src/attention/budget.ts +0 -72
  358. package/src/attention/cognition.ts +0 -519
  359. package/src/attention/index.ts +0 -8
  360. package/src/attention/interrupts.ts +0 -228
  361. package/src/attention/resource.ts +0 -316
  362. package/src/attention/social.ts +0 -217
  363. package/src/attention/socialTypes.ts +0 -115
  364. package/src/authz/authz.ts +0 -305
  365. package/src/authz/index.ts +0 -1
  366. package/src/bayes/calibration.ts +0 -204
  367. package/src/bayes/calibrationRegistry.ts +0 -111
  368. package/src/bayes/calibrationSelection.ts +0 -154
  369. package/src/bayes/engine.ts +0 -532
  370. package/src/bayes/index.ts +0 -6
  371. package/src/bayes/reliability.ts +0 -62
  372. package/src/bayes/scopedPriors.ts +0 -88
  373. package/src/boundary/frame.ts +0 -322
  374. package/src/boundary/ids.ts +0 -14
  375. package/src/boundary/index.ts +0 -12
  376. package/src/boundary/refTable.ts +0 -125
  377. package/src/boundary/toolCall.ts +0 -212
  378. package/src/concept/concept.ts +0 -75
  379. package/src/concept/conceptBudget.ts +0 -346
  380. package/src/concept/conceptBudgetTypes.ts +0 -79
  381. package/src/concept/index.ts +0 -3
  382. package/src/concurrency/idempotency.ts +0 -41
  383. package/src/concurrency/index.ts +0 -5
  384. package/src/concurrency/mutex.ts +0 -26
  385. package/src/concurrency/namedLocks.ts +0 -35
  386. package/src/concurrency/retry.ts +0 -50
  387. package/src/concurrency/worker.ts +0 -128
  388. package/src/context/agentContext.ts +0 -308
  389. package/src/context/ast.ts +0 -499
  390. package/src/context/contentStore.ts +0 -75
  391. package/src/context/context.ts +0 -65
  392. package/src/context/contextIndex.ts +0 -85
  393. package/src/context/document.ts +0 -137
  394. package/src/context/fileStorePath.ts +0 -14
  395. package/src/context/index.ts +0 -43
  396. package/src/context/lifecycle.ts +0 -221
  397. package/src/context/projections.ts +0 -151
  398. package/src/context/workspace.ts +0 -422
  399. package/src/context/workspaceProtocol.ts +0 -112
  400. package/src/context/workspaceService.ts +0 -423
  401. package/src/cooperation/board.ts +0 -104
  402. package/src/cooperation/collaboration.ts +0 -60
  403. package/src/cooperation/index.ts +0 -6
  404. package/src/cooperation/merge.ts +0 -190
  405. package/src/cooperation/metrics.ts +0 -57
  406. package/src/cooperation/session.ts +0 -131
  407. package/src/cooperation/unified.ts +0 -56
  408. package/src/counter.ts +0 -9
  409. package/src/database/adapter/adapters.ts +0 -35
  410. package/src/database/adapter/index.ts +0 -4
  411. package/src/database/adapter/runtimeSink.ts +0 -74
  412. package/src/database/adapter/sessionStore.ts +0 -32
  413. package/src/database/adapter/turnStore.ts +0 -23
  414. package/src/database/entity/agent.ts +0 -199
  415. package/src/database/entity/entity.ts +0 -1046
  416. package/src/database/entity/handle.ts +0 -79
  417. package/src/database/entity/index.ts +0 -32
  418. package/src/database/entity/message.ts +0 -74
  419. package/src/database/entity/meta.ts +0 -11
  420. package/src/database/entity/object.ts +0 -42
  421. package/src/database/entity/outbox.ts +0 -15
  422. package/src/database/entity/process.ts +0 -65
  423. package/src/database/entity/registry.ts +0 -155
  424. package/src/database/entity/runtimeApproval.ts +0 -30
  425. package/src/database/entity/runtimeSession.ts +0 -13
  426. package/src/database/entity/runtimeTurn.ts +0 -15
  427. package/src/database/entity/thread.ts +0 -85
  428. package/src/database/entity/window.ts +0 -85
  429. package/src/database/entity/worker.ts +0 -90
  430. package/src/database/index.ts +0 -6
  431. package/src/database/repository/addressSpaceRepository.ts +0 -72
  432. package/src/database/repository/agentRepository.ts +0 -460
  433. package/src/database/repository/base.ts +0 -41
  434. package/src/database/repository/executionRepository.ts +0 -477
  435. package/src/database/repository/handleRepository.ts +0 -64
  436. package/src/database/repository/index.ts +0 -20
  437. package/src/database/repository/messageRepository.ts +0 -52
  438. package/src/database/repository/objectRepository.ts +0 -69
  439. package/src/database/repository/outboxRepository.ts +0 -63
  440. package/src/database/repository/processRepository.ts +0 -58
  441. package/src/database/repository/registryRepository.ts +0 -119
  442. package/src/database/repository/repository.ts +0 -491
  443. package/src/database/repository/runtimeApprovalRepository.ts +0 -44
  444. package/src/database/repository/runtimeSessionRepository.ts +0 -27
  445. package/src/database/repository/runtimeTurnRepository.ts +0 -39
  446. package/src/database/repository/socialRepository.ts +0 -185
  447. package/src/database/repository/threadRepository.ts +0 -57
  448. package/src/database/repository/windowRepository.ts +0 -88
  449. package/src/database/repository/workerRepository.ts +0 -69
  450. package/src/database/service/database.ts +0 -90
  451. package/src/database/service/handleService.ts +0 -48
  452. package/src/database/service/index.ts +0 -16
  453. package/src/database/service/messageService.ts +0 -61
  454. package/src/database/service/objectService.ts +0 -59
  455. package/src/database/service/processService.ts +0 -61
  456. package/src/database/service/registryServices.ts +0 -88
  457. package/src/database/service/service.ts +0 -183
  458. package/src/database/service/stepService.ts +0 -53
  459. package/src/database/service/threadService.ts +0 -65
  460. package/src/database/service/windowService.ts +0 -30
  461. package/src/database/service/workerService.ts +0 -57
  462. package/src/database/sql/index.ts +0 -3
  463. package/src/database/sql/schema.ts +0 -418
  464. package/src/database/sql/sql.ts +0 -543
  465. package/src/database/store/database.ts +0 -210
  466. package/src/database/store/index.ts +0 -3
  467. package/src/database/store/store.ts +0 -266
  468. package/src/delegate/index.ts +0 -2
  469. package/src/delegate/team.ts +0 -268
  470. package/src/delegate/teamTypes.ts +0 -47
  471. package/src/diagnosis/checklist.ts +0 -74
  472. package/src/diagnosis/context.ts +0 -93
  473. package/src/diagnosis/frame.ts +0 -256
  474. package/src/diagnosis/index.ts +0 -5
  475. package/src/diagnosis/router.ts +0 -72
  476. package/src/diagnosis/types.ts +0 -89
  477. package/src/error/agentError.ts +0 -16
  478. package/src/error/ampError.ts +0 -20
  479. package/src/error/authzError.ts +0 -14
  480. package/src/error/boundaryRejection.ts +0 -20
  481. package/src/error/index.ts +0 -7
  482. package/src/error/kernelError.ts +0 -27
  483. package/src/error/mailboxError.ts +0 -9
  484. package/src/error/windowError.ts +0 -12
  485. package/src/evaluation/agreement.ts +0 -96
  486. package/src/evaluation/index.ts +0 -2
  487. package/src/evaluation/labels.ts +0 -241
  488. package/src/evidence/evidenceGraph.ts +0 -205
  489. package/src/evidence/index.ts +0 -4
  490. package/src/evidence/revalidation.ts +0 -191
  491. package/src/execution/exec.ts +0 -408
  492. package/src/execution/handles.ts +0 -65
  493. package/src/execution/index.ts +0 -3
  494. package/src/execution/pin.ts +0 -154
  495. package/src/frame/frame.ts +0 -70
  496. package/src/frame/index.ts +0 -1
  497. package/src/goal/goal.ts +0 -43
  498. package/src/goal/index.ts +0 -2
  499. package/src/goal/plan.ts +0 -196
  500. package/src/governance/attentionManifest.ts +0 -802
  501. package/src/governance/audit.ts +0 -362
  502. package/src/governance/budget.ts +0 -628
  503. package/src/governance/context.ts +0 -356
  504. package/src/governance/control.ts +0 -159
  505. package/src/governance/cooperation.ts +0 -479
  506. package/src/governance/credential.ts +0 -359
  507. package/src/governance/httpServer.ts +0 -99
  508. package/src/governance/index.ts +0 -32
  509. package/src/governance/legal.ts +0 -574
  510. package/src/governance/matrix.ts +0 -460
  511. package/src/governance/perspectives.ts +0 -406
  512. package/src/governance/signing.ts +0 -407
  513. package/src/governance/store.ts +0 -125
  514. package/src/governance/switching.ts +0 -459
  515. package/src/governance/toolPolicy.ts +0 -80
  516. package/src/governance/transport.ts +0 -204
  517. package/src/governance/types.ts +0 -380
  518. package/src/governance/workflow.ts +0 -743
  519. package/src/index.ts +0 -11
  520. package/src/interaction/index.ts +0 -1
  521. package/src/interaction/interaction.ts +0 -391
  522. package/src/ipc/index.ts +0 -4
  523. package/src/ipc/mailbox.ts +0 -132
  524. package/src/ipc/memorySocialStore.ts +0 -93
  525. package/src/ipc/social.ts +0 -93
  526. package/src/kernel/index.ts +0 -14
  527. package/src/kernel/scheduler.ts +0 -498
  528. package/src/ledger/checkpoint.ts +0 -304
  529. package/src/ledger/index.ts +0 -4
  530. package/src/ledger/ledger.ts +0 -31
  531. package/src/ledger/persistence.ts +0 -159
  532. package/src/ledger/share.ts +0 -80
  533. package/src/lock/index.ts +0 -2
  534. package/src/lock/lease.ts +0 -74
  535. package/src/main.ts +0 -199
  536. package/src/manifest/agentCard.ts +0 -72
  537. package/src/manifest/cardSign.ts +0 -87
  538. package/src/manifest/federation.ts +0 -237
  539. package/src/manifest/federationTypes.ts +0 -55
  540. package/src/manifest/index.ts +0 -8
  541. package/src/manifest/keys.ts +0 -643
  542. package/src/manifest/manifest.ts +0 -114
  543. package/src/manifest/sign.ts +0 -134
  544. package/src/manifest/trust.ts +0 -146
  545. package/src/mission/index.ts +0 -2
  546. package/src/mission/missionQueue.ts +0 -75
  547. package/src/module/index.ts +0 -9
  548. package/src/module/llm/deepseek.ts +0 -214
  549. package/src/module/llm/llm.ts +0 -84
  550. package/src/module/mcp/client.ts +0 -110
  551. package/src/module/mcp/http.ts +0 -102
  552. package/src/module/mcp/protocol.ts +0 -77
  553. package/src/module/mcp/server.ts +0 -148
  554. package/src/module/mcp/transport.ts +0 -30
  555. package/src/module/mcp/workspaceServer.ts +0 -111
  556. package/src/module/sandbox/sandbox.ts +0 -29
  557. package/src/module/tool/mcpExecutor.ts +0 -54
  558. package/src/module/tool/policy.ts +0 -52
  559. package/src/module/tool/redact.ts +0 -29
  560. package/src/module/tool/tool.ts +0 -53
  561. package/src/module/tool/workspaceExecutor.ts +0 -35
  562. package/src/policy/guard.ts +0 -240
  563. package/src/policy/index.ts +0 -2
  564. package/src/policy/policy.ts +0 -561
  565. package/src/process/agent.ts +0 -341
  566. package/src/process/agentService.ts +0 -236
  567. package/src/process/agentStore.ts +0 -378
  568. package/src/process/executionStore.ts +0 -151
  569. package/src/process/index.ts +0 -5
  570. package/src/process/process.ts +0 -240
  571. package/src/process/transitions.ts +0 -19
  572. package/src/progress/index.ts +0 -2
  573. package/src/progress/progress.ts +0 -85
  574. package/src/protocol/a2a.ts +0 -120
  575. package/src/protocol/channel.ts +0 -44
  576. package/src/protocol/envelope.ts +0 -655
  577. package/src/protocol/httpChannel.ts +0 -87
  578. package/src/protocol/index.ts +0 -6
  579. package/src/protocol/protocol.ts +0 -138
  580. package/src/protocol/wire.ts +0 -60
  581. package/src/receipt/index.ts +0 -1
  582. package/src/receipt/receipt.ts +0 -47
  583. package/src/registry/content.ts +0 -69
  584. package/src/registry/index.ts +0 -23
  585. package/src/registry/registry.ts +0 -599
  586. package/src/runtime/action.ts +0 -87
  587. package/src/runtime/behavior.ts +0 -330
  588. package/src/runtime/behaviorTuning.ts +0 -163
  589. package/src/runtime/cognitiveRuntime.ts +0 -703
  590. package/src/runtime/escalation.ts +0 -35
  591. package/src/runtime/governedTask.ts +0 -233
  592. package/src/runtime/index.ts +0 -15
  593. package/src/runtime/kernelRuntime.ts +0 -144
  594. package/src/runtime/operation.ts +0 -35
  595. package/src/runtime/replay.ts +0 -71
  596. package/src/runtime/routing.ts +0 -58
  597. package/src/runtime/safety.ts +0 -48
  598. package/src/runtime/session.ts +0 -341
  599. package/src/runtime/sessionStore.ts +0 -43
  600. package/src/runtime/telemetry.ts +0 -55
  601. package/src/runtime/turnStore.ts +0 -30
  602. package/src/scenario/index.ts +0 -1
  603. package/src/scenario/scenario.ts +0 -299
  604. package/src/semantic/canonical.ts +0 -24
  605. package/src/semantic/index.ts +0 -2
  606. package/src/semantic/sha256.ts +0 -82
  607. package/src/storage/appendLog.ts +0 -372
  608. package/src/storage/fileAppendSink.ts +0 -40
  609. package/src/storage/index.ts +0 -2
  610. package/src/store/bindCache.ts +0 -22
  611. package/src/store/cache.ts +0 -191
  612. package/src/store/context.ts +0 -31
  613. package/src/store/handleStore.ts +0 -31
  614. package/src/store/index.ts +0 -9
  615. package/src/store/messageStore.ts +0 -31
  616. package/src/store/objectStore.ts +0 -31
  617. package/src/store/processStore.ts +0 -31
  618. package/src/store/threadStore.ts +0 -31
  619. package/src/store/windowStore.ts +0 -31
  620. package/src/structure/abstractSyntaxTree.ts +0 -493
  621. package/src/structure/avlTree.ts +0 -408
  622. package/src/structure/binarySearchTree.ts +0 -352
  623. package/src/structure/binaryTree.ts +0 -525
  624. package/src/structure/bloomFilter.ts +0 -231
  625. package/src/structure/compare.ts +0 -110
  626. package/src/structure/cuckooFilter.ts +0 -337
  627. package/src/structure/deque.ts +0 -223
  628. package/src/structure/filterKey.ts +0 -36
  629. package/src/structure/hash.ts +0 -279
  630. package/src/structure/heap.ts +0 -268
  631. package/src/structure/index.ts +0 -20
  632. package/src/structure/iterator.ts +0 -22
  633. package/src/structure/lru.ts +0 -619
  634. package/src/structure/ordered.ts +0 -399
  635. package/src/structure/priority.ts +0 -915
  636. package/src/structure/queue.ts +0 -168
  637. package/src/structure/redBlackTree.ts +0 -680
  638. package/src/structure/segmentTree.ts +0 -248
  639. package/src/structure/stack.ts +0 -118
  640. package/src/structure/unordered.ts +0 -407
  641. package/src/style.css +0 -278
  642. package/src/thread/index.ts +0 -2
  643. package/src/thread/thread.ts +0 -176
  644. package/src/thread/transitions.ts +0 -17
  645. package/src/types/common.ts +0 -119
  646. package/src/types/index.ts +0 -23
  647. package/src/warrant/epistemic.ts +0 -154
  648. package/src/warrant/index.ts +0 -3
  649. package/src/warrant/inquiry.ts +0 -166
  650. package/src/warrant/warrant.ts +0 -179
  651. package/src/window/compaction.ts +0 -403
  652. package/src/window/compactionTypes.ts +0 -119
  653. package/src/window/index.ts +0 -7
  654. package/src/window/page.ts +0 -18
  655. package/src/window/window.ts +0 -244
  656. package/tools/_helpers.ts +0 -34
  657. package/tools/a2a-check.ts +0 -110
  658. package/tools/a2a-flow-check.ts +0 -78
  659. package/tools/agent-card-check.ts +0 -76
  660. package/tools/agent-check.ts +0 -236
  661. package/tools/agent-store-check.ts +0 -153
  662. package/tools/agreement-check.ts +0 -27
  663. package/tools/annotation-server-check.ts +0 -48
  664. package/tools/annotation-server.ts +0 -230
  665. package/tools/annotation-status.ts +0 -65
  666. package/tools/approval-access-check.ts +0 -66
  667. package/tools/arch-check.ts +0 -72
  668. package/tools/attention-core-check.ts +0 -48
  669. package/tools/attention-resource-check.ts +0 -169
  670. package/tools/audit-check.ts +0 -207
  671. package/tools/authority-check.ts +0 -124
  672. package/tools/authz-check.ts +0 -138
  673. package/tools/bayes-check.ts +0 -162
  674. package/tools/bayes-probe.ts +0 -154
  675. package/tools/behavior-tuning-check.ts +0 -53
  676. package/tools/board-check.ts +0 -87
  677. package/tools/boundary-check.ts +0 -199
  678. package/tools/bundle-trust-check.ts +0 -96
  679. package/tools/calibrate-imported.ts +0 -108
  680. package/tools/calibration-check.ts +0 -44
  681. package/tools/calibration-registry-check.ts +0 -40
  682. package/tools/calibration-sim.ts +0 -40
  683. package/tools/card-sign-check.ts +0 -71
  684. package/tools/card-trust-check.ts +0 -78
  685. package/tools/channel-check.ts +0 -86
  686. package/tools/checkpoint-check.ts +0 -620
  687. package/tools/cleanup-style-configs.ts +0 -29
  688. package/tools/cognition-check.ts +0 -648
  689. package/tools/cognitive-runtime-check.ts +0 -609
  690. package/tools/collaboration-demo.ts +0 -78
  691. package/tools/compaction-check.ts +0 -266
  692. package/tools/concept-check.ts +0 -260
  693. package/tools/concurrency-check.ts +0 -242
  694. package/tools/conformance-runtime.ts +0 -389
  695. package/tools/conformance.ts +0 -651
  696. package/tools/context-ast-check.ts +0 -90
  697. package/tools/context-ast-deepseek.ts +0 -242
  698. package/tools/context-graph-bench.ts +0 -50
  699. package/tools/context-graph-check.ts +0 -229
  700. package/tools/context-index-check.ts +0 -48
  701. package/tools/context-lifecycle-check.ts +0 -69
  702. package/tools/context-projection-check.ts +0 -73
  703. package/tools/context-scope-check.ts +0 -134
  704. package/tools/context-storage-check.ts +0 -113
  705. package/tools/cooperation-check.ts +0 -517
  706. package/tools/cooperation-http-check.ts +0 -125
  707. package/tools/deepseek-llm-check.ts +0 -147
  708. package/tools/deepseek-probe.ts +0 -494
  709. package/tools/diagnosis-check.ts +0 -109
  710. package/tools/diagnosis-router-check.ts +0 -50
  711. package/tools/document-context-check.ts +0 -237
  712. package/tools/envelope-check.ts +0 -659
  713. package/tools/eslint-rules/index.ts +0 -26
  714. package/tools/eslint-rules/rules/jsdoc-comment-format.ts +0 -105
  715. package/tools/eslint-rules/rules/no-function-keyword.ts +0 -60
  716. package/tools/eslint-rules/rules/no-multiline-parameters.ts +0 -71
  717. package/tools/eslint-rules/rules/no-multiline-type-parameters.ts +0 -57
  718. package/tools/eslint-rules/rules/no-undefined-comparison.ts +0 -115
  719. package/tools/eslint-rules/rules/prefer-template-for-string-conversion.ts +0 -97
  720. package/tools/eslint-rules/rules/require-typeof-parentheses.ts +0 -49
  721. package/tools/eslint-rules/rules/require-variable-type.ts +0 -36
  722. package/tools/eslint-rules/rules/variable-naming.ts +0 -175
  723. package/tools/eval-recorded-replay.ts +0 -215
  724. package/tools/eval-replay.ts +0 -139
  725. package/tools/eval-summary.ts +0 -136
  726. package/tools/evidence-revalidation-check.ts +0 -235
  727. package/tools/exec-check.ts +0 -217
  728. package/tools/federation-check.ts +0 -166
  729. package/tools/federation-demo.ts +0 -45
  730. package/tools/filter-check.ts +0 -243
  731. package/tools/governance-check.ts +0 -680
  732. package/tools/governance-store-check.ts +0 -131
  733. package/tools/governed-task-check.ts +0 -227
  734. package/tools/guard-check.ts +0 -122
  735. package/tools/http-channel-check.ts +0 -125
  736. package/tools/import-campaign.ts +0 -28
  737. package/tools/inquiry-check.ts +0 -126
  738. package/tools/interaction-check.ts +0 -171
  739. package/tools/interrupts-check.ts +0 -173
  740. package/tools/ipc-check.ts +0 -170
  741. package/tools/kernel-async-check.ts +0 -136
  742. package/tools/kernel-check.ts +0 -369
  743. package/tools/kernel-runtime-check.ts +0 -276
  744. package/tools/keys-check.ts +0 -559
  745. package/tools/label-audit.ts +0 -70
  746. package/tools/labels-workflow-check.ts +0 -49
  747. package/tools/linear-structure-check.ts +0 -524
  748. package/tools/live-exec.ts +0 -62
  749. package/tools/live-governance-eval.ts +0 -813
  750. package/tools/live-legacy.ts +0 -50
  751. package/tools/lru-check.ts +0 -182
  752. package/tools/make-annotation-campaign.ts +0 -57
  753. package/tools/mcp-executor-check.ts +0 -33
  754. package/tools/merge-annotations.ts +0 -32
  755. package/tools/merge-check.ts +0 -98
  756. package/tools/metrics-check.ts +0 -84
  757. package/tools/net-probe.ts +0 -107
  758. package/tools/oauth-probe.ts +0 -117
  759. package/tools/outbox-check.ts +0 -50
  760. package/tools/persistence-check.ts +0 -144
  761. package/tools/pin-check.ts +0 -116
  762. package/tools/platform-check.ts +0 -281
  763. package/tools/policy-check.ts +0 -514
  764. package/tools/prettier-plugin/index.mts +0 -84
  765. package/tools/priority-check.ts +0 -627
  766. package/tools/probe-context7.ts +0 -63
  767. package/tools/registry-check.ts +0 -252
  768. package/tools/reliability-check.ts +0 -25
  769. package/tools/retry-check.ts +0 -85
  770. package/tools/rewrite-declaration-extensions.ts +0 -98
  771. package/tools/runtime-check.ts +0 -165
  772. package/tools/runtime-deepseek-check.ts +0 -85
  773. package/tools/runtime-eval.ts +0 -358
  774. package/tools/scenario-check.ts +0 -161
  775. package/tools/scenario-incident.ts +0 -162
  776. package/tools/scoped-priors-check.ts +0 -35
  777. package/tools/scoped-priors-pooling.ts +0 -34
  778. package/tools/segment-ast-check.ts +0 -649
  779. package/tools/session-check.ts +0 -196
  780. package/tools/session-store-check.ts +0 -73
  781. package/tools/share-check.ts +0 -88
  782. package/tools/sign-check.ts +0 -95
  783. package/tools/signing-check.ts +0 -275
  784. package/tools/snapshot-demo.ts +0 -65
  785. package/tools/social-check.ts +0 -146
  786. package/tools/structure-compare-check.ts +0 -95
  787. package/tools/support/documentScanner.ts +0 -577
  788. package/tools/support/texScanner.ts +0 -631
  789. package/tools/support/workspaceScanner.ts +0 -476
  790. package/tools/team-check.ts +0 -163
  791. package/tools/team-demo.ts +0 -36
  792. package/tools/telemetry-check.ts +0 -44
  793. package/tools/tex-context-check.ts +0 -263
  794. package/tools/tool-gate-check.ts +0 -98
  795. package/tools/tree-structure-check.ts +0 -786
  796. package/tools/trust-flow-check.ts +0 -158
  797. package/tools/turn-store-check.ts +0 -57
  798. package/tools/unified-check.ts +0 -83
  799. package/tools/validate.ts +0 -309
  800. package/tools/wire-check.ts +0 -96
  801. package/tools/workspace-agent-check.ts +0 -486
  802. package/tools/workspace-agent-demo.ts +0 -62
  803. package/tools/workspace-agent-server.ts +0 -101
  804. package/tools/workspace-context-check.ts +0 -331
  805. package/tools/workspace-context.ts +0 -131
  806. package/tsconfig.build.json +0 -14
  807. package/tsconfig.json +0 -24
  808. package/tsconfig.tools.json +0 -31
  809. package/viz/context-ast.json +0 -1577
@@ -1,6 +1,308 @@
1
1
  import { canonical, digestOf } from "../semantic/canonical.js";
2
+ import { cloneJson, deepFreezeJson, jsonValueProblem } from "../semantic/jsonValue.js";
3
+ import { isDateTime } from "../semantic/time.js";
2
4
  import { BoundaryRejection } from "../error/boundaryRejection.js";
3
- const isRecord = (value) => typeof (value) === "object" && value !== null && !Array.isArray(value);
5
+ /**
6
+ * Deepest schema/value walk; a `$ref` cycle and an absurdly nested schema both
7
+ * stop here with a schema problem instead of exhausting the stack.
8
+ */
9
+ const MaxSchemaDepth = 128;
10
+ const JsonTypes = ["null", "boolean", "object", "array", "string", "number", "integer"];
11
+ /**
12
+ * Keywords that carry no constraint; their value is never interpreted.
13
+ */
14
+ const AnnotationKeywords = [
15
+ "$schema",
16
+ "$id",
17
+ "title",
18
+ "description",
19
+ "default",
20
+ "examples",
21
+ "deprecated",
22
+ "readOnly",
23
+ "writeOnly",
24
+ "$comment",
25
+ "$defs",
26
+ "definitions",
27
+ ];
28
+ /**
29
+ * Applicators this validator understands. Anything else is fail-closed.
30
+ */
31
+ const SupportedKeywords = [
32
+ "$ref",
33
+ "type",
34
+ "const",
35
+ "enum",
36
+ "allOf",
37
+ "anyOf",
38
+ "oneOf",
39
+ "properties",
40
+ "required",
41
+ "additionalProperties",
42
+ "minProperties",
43
+ "maxProperties",
44
+ "dependentRequired",
45
+ "propertyNames",
46
+ "items",
47
+ "additionalItems",
48
+ "minItems",
49
+ "maxItems",
50
+ "uniqueItems",
51
+ "minLength",
52
+ "maxLength",
53
+ "pattern",
54
+ "format",
55
+ "minimum",
56
+ "maximum",
57
+ "exclusiveMinimum",
58
+ "exclusiveMaximum",
59
+ "multipleOf",
60
+ ];
61
+ const SupportedFormats = ["date-time", "date", "time", "email", "uri", "uuid"];
62
+ const DatePattern = /^(\d{4})-(\d{2})-(\d{2})$/;
63
+ const TimePattern = /^(\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(Z|[+-]\d{2}:\d{2})$/;
64
+ const EmailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
65
+ const UriPattern = /^[A-Za-z][A-Za-z0-9+.-]*:\S*$/;
66
+ const UuidPattern = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
67
+ const isPlainObject = (value) => {
68
+ if (typeof (value) !== "object" || value === null || Array.isArray(value)) {
69
+ return false;
70
+ }
71
+ let prototype;
72
+ try {
73
+ prototype = Object.getPrototypeOf(value);
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ return prototype === null || prototype === Object.prototype;
79
+ };
80
+ const isSchemaNode = (value) => typeof (value) === "boolean" || isPlainObject(value);
81
+ const readString = (schema, keyword, at, problems) => {
82
+ if (!Object.hasOwn(schema, keyword)) {
83
+ return (void 0);
84
+ }
85
+ const value = schema[keyword];
86
+ if (typeof (value) !== "string") {
87
+ problems.push(`${at}: "${keyword}" must be a string`);
88
+ return (void 0);
89
+ }
90
+ return value;
91
+ };
92
+ const readFiniteNumber = (schema, keyword, at, problems) => {
93
+ if (!Object.hasOwn(schema, keyword)) {
94
+ return (void 0);
95
+ }
96
+ const value = schema[keyword];
97
+ if (typeof (value) !== "number" || !Number.isFinite(value)) {
98
+ problems.push(`${at}: "${keyword}" must be a finite number`);
99
+ return (void 0);
100
+ }
101
+ return value;
102
+ };
103
+ const readCount = (schema, keyword, at, problems) => {
104
+ if (!Object.hasOwn(schema, keyword)) {
105
+ return (void 0);
106
+ }
107
+ const value = schema[keyword];
108
+ if (typeof (value) !== "number" || !Number.isInteger(value) || value < 0) {
109
+ problems.push(`${at}: "${keyword}" must be a non-negative integer`);
110
+ return (void 0);
111
+ }
112
+ return value;
113
+ };
114
+ const readBoolean = (schema, keyword, at, problems) => {
115
+ if (!Object.hasOwn(schema, keyword)) {
116
+ return (void 0);
117
+ }
118
+ const value = schema[keyword];
119
+ if (typeof (value) !== "boolean") {
120
+ problems.push(`${at}: "${keyword}" must be a boolean`);
121
+ return (void 0);
122
+ }
123
+ return value;
124
+ };
125
+ const readPlainObject = (schema, keyword, at, problems) => {
126
+ if (!Object.hasOwn(schema, keyword)) {
127
+ return (void 0);
128
+ }
129
+ const value = schema[keyword];
130
+ if (!isPlainObject(value)) {
131
+ problems.push(`${at}: "${keyword}" must be an object`);
132
+ return (void 0);
133
+ }
134
+ return value;
135
+ };
136
+ const readStringArray = (schema, keyword, at, problems) => {
137
+ if (!Object.hasOwn(schema, keyword)) {
138
+ return (void 0);
139
+ }
140
+ const value = schema[keyword];
141
+ if (!Array.isArray(value)) {
142
+ problems.push(`${at}: "${keyword}" must be an array of strings`);
143
+ return (void 0);
144
+ }
145
+ let valid = true;
146
+ for (let index = 0; index < value.length; index += 1) {
147
+ if (typeof (value[index]) !== "string") {
148
+ problems.push(`${at}: "${keyword}[${index}]" must be a string`);
149
+ valid = false;
150
+ }
151
+ }
152
+ if (!valid) {
153
+ return (void 0);
154
+ }
155
+ return value;
156
+ };
157
+ const readSchemaArray = (schema, keyword, at, problems) => {
158
+ if (!Object.hasOwn(schema, keyword)) {
159
+ return (void 0);
160
+ }
161
+ const value = schema[keyword];
162
+ if (!Array.isArray(value) || value.length === 0) {
163
+ problems.push(`${at}: "${keyword}" must be a non-empty array of schemas`);
164
+ return (void 0);
165
+ }
166
+ let valid = true;
167
+ for (let index = 0; index < value.length; index += 1) {
168
+ if (!isSchemaNode(value[index])) {
169
+ problems.push(`${at}: "${keyword}[${index}]" must be a schema`);
170
+ valid = false;
171
+ }
172
+ }
173
+ if (!valid) {
174
+ return (void 0);
175
+ }
176
+ return value;
177
+ };
178
+ const readEnum = (schema, at, problems) => {
179
+ if (!Object.hasOwn(schema, "enum")) {
180
+ return (void 0);
181
+ }
182
+ const declared = schema.enum;
183
+ if (!Array.isArray(declared) || declared.length === 0) {
184
+ problems.push(`${at}: "enum" must be a non-empty array of JSON values`);
185
+ return (void 0);
186
+ }
187
+ let valid = true;
188
+ for (let index = 0; index < declared.length; index += 1) {
189
+ const itemProblem = jsonValueProblem(declared[index], `${at}.enum[${index}]`);
190
+ if (itemProblem !== (void 0)) {
191
+ problems.push(`${at}: "enum[${index}]" is not JSON (${itemProblem})`);
192
+ valid = false;
193
+ }
194
+ }
195
+ if (!valid) {
196
+ return (void 0);
197
+ }
198
+ return declared;
199
+ };
200
+ const readTypes = (schema, at, problems) => {
201
+ if (!Object.hasOwn(schema, "type")) {
202
+ return (void 0);
203
+ }
204
+ const declared = schema.type;
205
+ const types = [];
206
+ let valid = true;
207
+ if (typeof (declared) === "string") {
208
+ types.push(declared);
209
+ }
210
+ else if (Array.isArray(declared)) {
211
+ if (declared.length === 0) {
212
+ problems.push(`${at}: "type" must not be an empty array`);
213
+ valid = false;
214
+ }
215
+ for (let index = 0; index < declared.length; index += 1) {
216
+ const item = declared[index];
217
+ if (typeof (item) !== "string") {
218
+ problems.push(`${at}: "type[${index}]" must be a string`);
219
+ valid = false;
220
+ }
221
+ else {
222
+ types.push(item);
223
+ }
224
+ }
225
+ }
226
+ else {
227
+ problems.push(`${at}: "type" must be a string or an array of strings`);
228
+ return (void 0);
229
+ }
230
+ for (let index = 0; index < types.length; index += 1) {
231
+ if (!JsonTypes.includes(types[index])) {
232
+ problems.push(`${at}: unknown type "${types[index]}"`);
233
+ valid = false;
234
+ }
235
+ }
236
+ if (!valid) {
237
+ return (void 0);
238
+ }
239
+ return types;
240
+ };
241
+ const sameJson = (left, right) => canonical(left) === canonical(right);
242
+ const daysInMonth = (year, month) => {
243
+ if (month === 2) {
244
+ const leap = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
245
+ return leap ? 29 : 28;
246
+ }
247
+ return [4, 6, 9, 11].includes(month) ? 30 : 31;
248
+ };
249
+ const isDate = (value) => {
250
+ const match = DatePattern.exec(value);
251
+ if (match === null) {
252
+ return false;
253
+ }
254
+ const year = Number(match[1]);
255
+ const month = Number(match[2]);
256
+ const day = Number(match[3]);
257
+ if (month < 1 || month > 12) {
258
+ return false;
259
+ }
260
+ return day >= 1 && day <= daysInMonth(year, month);
261
+ };
262
+ const isTime = (value) => {
263
+ const match = TimePattern.exec(value);
264
+ if (match === null) {
265
+ return false;
266
+ }
267
+ const hour = Number(match[1]);
268
+ const minute = Number(match[2]);
269
+ const second = Number(match[3]);
270
+ if (hour > 23 || minute > 59 || second > 60) {
271
+ return false;
272
+ }
273
+ if (second === 60 && (hour !== 23 || minute !== 59)) {
274
+ return false;
275
+ }
276
+ if (match[5] !== "Z") {
277
+ const offsetHour = Number(match[5].slice(1, 3));
278
+ const offsetMinute = Number(match[5].slice(4, 6));
279
+ if (offsetHour > 23 || offsetMinute > 59) {
280
+ return false;
281
+ }
282
+ }
283
+ return true;
284
+ };
285
+ const formatMatches = (format, value) => {
286
+ if (format === "date-time") {
287
+ return isDateTime(value);
288
+ }
289
+ if (format === "date") {
290
+ return isDate(value);
291
+ }
292
+ if (format === "time") {
293
+ return isTime(value);
294
+ }
295
+ if (format === "email") {
296
+ return EmailPattern.test(value);
297
+ }
298
+ if (format === "uri") {
299
+ return UriPattern.test(value);
300
+ }
301
+ if (format === "uuid") {
302
+ return UuidPattern.test(value);
303
+ }
304
+ return false;
305
+ };
4
306
  const matchesType = (type, value) => {
5
307
  if (type === "null") {
6
308
  return value === null;
@@ -9,7 +311,7 @@ const matchesType = (type, value) => {
9
311
  return Array.isArray(value);
10
312
  }
11
313
  if (type === "object") {
12
- return isRecord(value);
314
+ return isPlainObject(value);
13
315
  }
14
316
  if (type === "string") {
15
317
  return typeof (value) === "string";
@@ -23,151 +325,550 @@ const matchesType = (type, value) => {
23
325
  if (type === "integer") {
24
326
  return typeof (value) === "number" && Number.isInteger(value);
25
327
  }
26
- return true;
328
+ return false;
27
329
  };
28
- const checkSchema = (schema, value, at, depth, problems) => {
29
- if (depth > 32) {
30
- problems.push(`${at}: schema nesting exceeds 32`);
31
- return;
330
+ const decodePointer = (name) => name.replaceAll("~1", "/").replaceAll("~0", "~");
331
+ /**
332
+ * Resolve the three reference forms this validator accepts. Anything else —
333
+ * external URLs, other pointers, missing definitions — is a schema problem.
334
+ */
335
+ const resolveRef = (ref, root, at, problems) => {
336
+ if (ref === "#") {
337
+ return root;
32
338
  }
33
- if (!isRecord(schema)) {
34
- problems.push(`${at}: schema must be an object`);
35
- return;
339
+ const prefixes = ["#/$defs/", "#/definitions/"];
340
+ for (let index = 0; index < prefixes.length; index += 1) {
341
+ const prefix = prefixes[index];
342
+ if (!ref.startsWith(prefix)) {
343
+ continue;
344
+ }
345
+ const encoded = ref.slice(prefix.length);
346
+ if (encoded.length === 0 || encoded.includes("/")) {
347
+ break;
348
+ }
349
+ const name = decodePointer(encoded);
350
+ const container = isPlainObject(root)
351
+ ? isPlainObject(root[prefix === "#/$defs/" ? "$defs" : "definitions"])
352
+ ? root[prefix === "#/$defs/" ? "$defs" : "definitions"]
353
+ : (void 0)
354
+ : (void 0);
355
+ if (container === (void 0) || !Object.hasOwn(container, name)) {
356
+ problems.push(`${at}: $ref "${ref}" cannot be resolved`);
357
+ return (void 0);
358
+ }
359
+ const target = container[name];
360
+ if (typeof (target) === "boolean" || isPlainObject(target)) {
361
+ return target;
362
+ }
363
+ problems.push(`${at}: $ref "${ref}" does not point at a schema`);
364
+ return (void 0);
36
365
  }
37
- if ("const" in schema && canonical(schema.const) !== canonical(value)) {
38
- problems.push(`${at} must equal the const value`);
366
+ problems.push(`${at}: $ref "${ref}" is not a local reference (only #, #/$defs/<name>, #/definitions/<name>)`);
367
+ return (void 0);
368
+ };
369
+ const schemaMatches = (schema, value, depth, root) => {
370
+ const problems = [];
371
+ checkSchema(schema, value, "$", depth, root, problems);
372
+ return problems.length === 0;
373
+ };
374
+ const checkObjectKeywords = (schema, value, at, depth, root, problems) => {
375
+ if (!isPlainObject(schema) || !isPlainObject(value)) {
376
+ return;
39
377
  }
40
- if (Array.isArray(schema.enum) && !schema.enum.some((item) => canonical(item) === canonical(value))) {
41
- problems.push(`${at} is not one of the allowed values`);
378
+ const keys = Object.keys(value);
379
+ const requiredNames = readStringArray(schema, "required", at, problems);
380
+ if (requiredNames !== (void 0)) {
381
+ for (let index = 0; index < requiredNames.length; index += 1) {
382
+ const name = requiredNames[index];
383
+ if (!Object.hasOwn(value, name)) {
384
+ problems.push(`${at}.${name} is required`);
385
+ }
386
+ }
42
387
  }
43
- if (Array.isArray(schema.allOf)) {
44
- schema.allOf.forEach((branch) => checkSchema(branch, value, at, depth + 1, problems));
388
+ const hasProperties = Object.hasOwn(schema, "properties");
389
+ const properties = readPlainObject(schema, "properties", at, problems);
390
+ const hasAdditional = Object.hasOwn(schema, "additionalProperties");
391
+ let additional = (void 0);
392
+ let additionalValid = false;
393
+ if (hasAdditional) {
394
+ const declared = schema.additionalProperties;
395
+ if (typeof (declared) === "boolean" || isPlainObject(declared)) {
396
+ additional = declared;
397
+ additionalValid = true;
398
+ }
399
+ else {
400
+ problems.push(`${at}: "additionalProperties" must be a boolean or a schema`);
401
+ }
45
402
  }
46
- if (Array.isArray(schema.anyOf) && !schema.anyOf.some((branch) => schemaMatches(branch, value, depth + 1))) {
47
- problems.push(`${at} matches none of anyOf`);
403
+ if (!hasProperties && additionalValid && additional === false) {
404
+ if (keys.length > 0) {
405
+ problems.push(`${at} does not allow properties`);
406
+ }
48
407
  }
49
- if (Array.isArray(schema.oneOf)) {
50
- const matched = schema.oneOf.filter((branch) => schemaMatches(branch, value, depth + 1)).length;
51
- if (matched !== 1) {
52
- problems.push(`${at} matches ${matched} of oneOf, expected exactly 1`);
408
+ else {
409
+ for (let index = 0; index < keys.length; index += 1) {
410
+ const key = keys[index];
411
+ const child = value[key];
412
+ if (properties !== (void 0) && Object.hasOwn(properties, key)) {
413
+ checkSchema(properties[key], child, `${at}.${key}`, depth + 1, root, problems);
414
+ }
415
+ else if (additionalValid && additional === false) {
416
+ problems.push(`${at}.${key} is not allowed`);
417
+ }
418
+ else if (additionalValid && isPlainObject(additional)) {
419
+ checkSchema(additional, child, `${at}.${key}`, depth + 1, root, problems);
420
+ }
53
421
  }
54
422
  }
55
- const declared = schema.type;
56
- const types = Array.isArray(declared)
57
- ? declared.filter((item) => typeof (item) === "string")
58
- : typeof (declared) === "string"
59
- ? [declared]
60
- : [];
61
- if (types.length > 0 && !types.some((type) => matchesType(type, value))) {
62
- problems.push(`${at} expected ${types.join("|")}`);
63
- return;
423
+ const minProperties = readCount(schema, "minProperties", at, problems);
424
+ if (minProperties !== (void 0) && keys.length < minProperties) {
425
+ problems.push(`${at} needs at least ${minProperties} properties`);
64
426
  }
65
- if (Array.isArray(value)) {
66
- if (Array.isArray(schema.items)) {
67
- schema.items.forEach((item, index) => {
68
- if (index < value.length) {
69
- checkSchema(item, value[index], `${at}[${index}]`, depth + 1, problems);
70
- }
71
- });
427
+ const maxProperties = readCount(schema, "maxProperties", at, problems);
428
+ if (maxProperties !== (void 0) && keys.length > maxProperties) {
429
+ problems.push(`${at} allows at most ${maxProperties} properties`);
430
+ }
431
+ if (Object.hasOwn(schema, "dependentRequired")) {
432
+ const dependent = schema.dependentRequired;
433
+ if (!isPlainObject(dependent)) {
434
+ problems.push(`${at}: "dependentRequired" must be an object`);
72
435
  }
73
- else if (schema.items !== (void 0)) {
74
- value.forEach((item, index) => checkSchema(schema.items, item, `${at}[${index}]`, depth + 1, problems));
436
+ else {
437
+ const triggers = Object.keys(dependent);
438
+ for (let index = 0; index < triggers.length; index += 1) {
439
+ const trigger = triggers[index];
440
+ const dependency = dependent[trigger];
441
+ if (!Array.isArray(dependency) || !dependency.every((item) => typeof (item) === "string")) {
442
+ problems.push(`${at}: "dependentRequired.${trigger}" must be an array of strings`);
443
+ continue;
444
+ }
445
+ if (!Object.hasOwn(value, trigger)) {
446
+ continue;
447
+ }
448
+ for (let dependencyIndex = 0; dependencyIndex < dependency.length; dependencyIndex += 1) {
449
+ const name = dependency[dependencyIndex];
450
+ if (!Object.hasOwn(value, name)) {
451
+ problems.push(`${at}.${name} is required when ${at}.${trigger} is present`);
452
+ }
453
+ }
454
+ }
75
455
  }
76
- const minItems = schema.minItems;
77
- const maxItems = schema.maxItems;
78
- if (typeof (minItems) === "number" && value.length < minItems) {
79
- problems.push(`${at} needs at least ${minItems} items`);
456
+ }
457
+ if (Object.hasOwn(schema, "propertyNames")) {
458
+ const declared = schema.propertyNames;
459
+ if (typeof (declared) !== "boolean" && !isPlainObject(declared)) {
460
+ problems.push(`${at}: "propertyNames" must be an object or a boolean schema`);
80
461
  }
81
- if (typeof (maxItems) === "number" && value.length > maxItems) {
82
- problems.push(`${at} allows at most ${maxItems} items`);
462
+ else {
463
+ for (let index = 0; index < keys.length; index += 1) {
464
+ checkSchema(declared, keys[index], `${at}.${keys[index]}`, depth + 1, root, problems);
465
+ }
83
466
  }
467
+ }
468
+ };
469
+ const checkArrayKeywords = (schema, value, at, depth, root, problems) => {
470
+ if (!isPlainObject(schema) || !Array.isArray(value)) {
84
471
  return;
85
472
  }
86
- if (isRecord(value)) {
87
- const required = schema.required;
88
- if (Array.isArray(required)) {
89
- for (let index = 0; index < required.length; index += 1) {
90
- const name = required[index];
91
- if (typeof (name) === "string" && !(name in value)) {
92
- problems.push(`${at}.${name} is required`);
473
+ const hasItems = Object.hasOwn(schema, "items");
474
+ let single = (void 0);
475
+ let singleValid = false;
476
+ let tuple = (void 0);
477
+ if (hasItems) {
478
+ const declared = schema.items;
479
+ if (Array.isArray(declared)) {
480
+ let valid = true;
481
+ for (let index = 0; index < declared.length; index += 1) {
482
+ if (!isSchemaNode(declared[index])) {
483
+ problems.push(`${at}: "items[${index}]" must be a schema`);
484
+ valid = false;
93
485
  }
94
486
  }
487
+ if (valid) {
488
+ tuple = declared;
489
+ }
95
490
  }
96
- const properties = schema.properties;
97
- if (isRecord(properties)) {
98
- const keys = Object.keys(value);
99
- for (let index = 0; index < keys.length; index += 1) {
100
- const key = keys[index];
101
- const child = properties[key];
102
- if (child !== (void 0)) {
103
- checkSchema(child, value[key], `${at}.${key}`, depth + 1, problems);
491
+ else if (typeof (declared) === "boolean" || isPlainObject(declared)) {
492
+ single = declared;
493
+ singleValid = true;
494
+ }
495
+ else {
496
+ problems.push(`${at}: "items" must be an object, a boolean or an array of schemas`);
497
+ }
498
+ }
499
+ if (tuple !== (void 0)) {
500
+ for (let index = 0; index < tuple.length; index += 1) {
501
+ if (index < value.length) {
502
+ checkSchema(tuple[index], value[index], `${at}[${index}]`, depth + 1, root, problems);
503
+ }
504
+ }
505
+ if (Object.hasOwn(schema, "additionalItems")) {
506
+ const extra = schema.additionalItems;
507
+ if (extra === false) {
508
+ if (value.length > tuple.length) {
509
+ problems.push(`${at} allows at most ${tuple.length} items`);
104
510
  }
105
- else if (schema.additionalProperties === false) {
106
- problems.push(`${at}.${key} is not allowed`);
511
+ }
512
+ else if (typeof (extra) === "boolean" || isPlainObject(extra)) {
513
+ for (let index = tuple.length; index < value.length; index += 1) {
514
+ checkSchema(extra, value[index], `${at}[${index}]`, depth + 1, root, problems);
107
515
  }
108
516
  }
517
+ else {
518
+ problems.push(`${at}: "additionalItems" must be a boolean or a schema`);
519
+ }
109
520
  }
110
- else if (schema.additionalProperties === false && Object.keys(value).length > 0) {
111
- problems.push(`${at} does not allow properties`);
521
+ }
522
+ else {
523
+ if (singleValid) {
524
+ for (let index = 0; index < value.length; index += 1) {
525
+ checkSchema(single, value[index], `${at}[${index}]`, depth + 1, root, problems);
526
+ }
527
+ }
528
+ if (Object.hasOwn(schema, "additionalItems") && !Array.isArray(schema.items)) {
529
+ problems.push(`${at}: "additionalItems" requires "items" to be an array of schemas`);
530
+ }
531
+ }
532
+ const minItems = readCount(schema, "minItems", at, problems);
533
+ if (minItems !== (void 0) && value.length < minItems) {
534
+ problems.push(`${at} needs at least ${minItems} items`);
535
+ }
536
+ const maxItems = readCount(schema, "maxItems", at, problems);
537
+ if (maxItems !== (void 0) && value.length > maxItems) {
538
+ problems.push(`${at} allows at most ${maxItems} items`);
539
+ }
540
+ const uniqueItems = readBoolean(schema, "uniqueItems", at, problems);
541
+ if (uniqueItems === true) {
542
+ const seen = new Set();
543
+ for (let index = 0; index < value.length; index += 1) {
544
+ const key = canonical(value[index]);
545
+ if (seen.has(key)) {
546
+ problems.push(`${at}[${index}] duplicates an earlier item`);
547
+ }
548
+ else {
549
+ seen.add(key);
550
+ }
112
551
  }
552
+ }
553
+ };
554
+ const checkStringKeywords = (schema, value, at, problems, pattern, patternSource, format) => {
555
+ const length = Array.from(value).length;
556
+ const minLength = readCount(schema, "minLength", at, problems);
557
+ if (minLength !== (void 0) && length < minLength) {
558
+ problems.push(`${at} is shorter than ${minLength}`);
559
+ }
560
+ const maxLength = readCount(schema, "maxLength", at, problems);
561
+ if (maxLength !== (void 0) && length > maxLength) {
562
+ problems.push(`${at} is longer than ${maxLength}`);
563
+ }
564
+ if (pattern !== (void 0) && !pattern.test(value)) {
565
+ problems.push(`${at} does not match ${patternSource}`);
566
+ }
567
+ if (format !== (void 0) && !formatMatches(format, value)) {
568
+ problems.push(`${at} is not a valid ${format}`);
569
+ }
570
+ };
571
+ const checkNumberKeywords = (schema, value, at, _depth, _root, problems) => {
572
+ if (!isPlainObject(schema) || typeof (value) !== "number") {
113
573
  return;
114
574
  }
115
- if (typeof (value) === "string") {
116
- const minLength = schema.minLength;
117
- const maxLength = schema.maxLength;
118
- const pattern = schema.pattern;
119
- if (typeof (minLength) === "number" && value.length < minLength) {
120
- problems.push(`${at} is shorter than ${minLength}`);
575
+ const minimum = readFiniteNumber(schema, "minimum", at, problems);
576
+ if (minimum !== (void 0) && value < minimum) {
577
+ problems.push(`${at} is below ${minimum}`);
578
+ }
579
+ const maximum = readFiniteNumber(schema, "maximum", at, problems);
580
+ if (maximum !== (void 0) && value > maximum) {
581
+ problems.push(`${at} is above ${maximum}`);
582
+ }
583
+ let exclusiveMinimum = (void 0);
584
+ if (Object.hasOwn(schema, "exclusiveMinimum")) {
585
+ const declared = schema.exclusiveMinimum;
586
+ if (typeof (declared) === "number" && Number.isFinite(declared)) {
587
+ exclusiveMinimum = declared;
588
+ }
589
+ else if (declared === true) {
590
+ if (minimum === (void 0)) {
591
+ problems.push(`${at}: "exclusiveMinimum" requires a numeric "minimum"`);
592
+ }
593
+ else {
594
+ exclusiveMinimum = minimum;
595
+ }
596
+ }
597
+ else if (declared !== false) {
598
+ problems.push(`${at}: "exclusiveMinimum" must be a number or a boolean`);
121
599
  }
122
- if (typeof (maxLength) === "number" && value.length > maxLength) {
123
- problems.push(`${at} is longer than ${maxLength}`);
600
+ }
601
+ if (exclusiveMinimum !== (void 0) && value <= exclusiveMinimum) {
602
+ problems.push(`${at} must be greater than ${exclusiveMinimum}`);
603
+ }
604
+ let exclusiveMaximum = (void 0);
605
+ if (Object.hasOwn(schema, "exclusiveMaximum")) {
606
+ const declared = schema.exclusiveMaximum;
607
+ if (typeof (declared) === "number" && Number.isFinite(declared)) {
608
+ exclusiveMaximum = declared;
609
+ }
610
+ else if (declared === true) {
611
+ if (maximum === (void 0)) {
612
+ problems.push(`${at}: "exclusiveMaximum" requires a numeric "maximum"`);
613
+ }
614
+ else {
615
+ exclusiveMaximum = maximum;
616
+ }
617
+ }
618
+ else if (declared !== false) {
619
+ problems.push(`${at}: "exclusiveMaximum" must be a number or a boolean`);
620
+ }
621
+ }
622
+ if (exclusiveMaximum !== (void 0) && value >= exclusiveMaximum) {
623
+ problems.push(`${at} must be less than ${exclusiveMaximum}`);
624
+ }
625
+ if (Object.hasOwn(schema, "multipleOf")) {
626
+ const declared = schema.multipleOf;
627
+ if (typeof (declared) !== "number" || !Number.isFinite(declared) || declared <= 0) {
628
+ problems.push(`${at}: "multipleOf" must be a positive finite number`);
629
+ }
630
+ else {
631
+ const quotient = value / declared;
632
+ if (Math.abs(quotient - Math.round(quotient)) > 1e-9 * Math.max(1, Math.abs(quotient))) {
633
+ problems.push(`${at} is not a multiple of ${declared}`);
634
+ }
635
+ }
636
+ }
637
+ };
638
+ const checkSchema = (schema, value, at, depth, root, problems) => {
639
+ if (depth > MaxSchemaDepth) {
640
+ problems.push(`${at}: schema nesting exceeds ${MaxSchemaDepth}`);
641
+ return;
642
+ }
643
+ if (typeof (schema) === "boolean") {
644
+ if (!schema) {
645
+ problems.push(`${at} does not accept any value`);
646
+ }
647
+ return;
648
+ }
649
+ if (!isPlainObject(schema)) {
650
+ problems.push(`${at}: schema must be an object or a boolean`);
651
+ return;
652
+ }
653
+ const keywords = Object.keys(schema);
654
+ for (let index = 0; index < keywords.length; index += 1) {
655
+ const keyword = keywords[index];
656
+ if (!SupportedKeywords.includes(keyword) && !AnnotationKeywords.includes(keyword)) {
657
+ problems.push(`${at}: unsupported keyword "${keyword}"`);
658
+ }
659
+ }
660
+ /*
661
+ * `pattern` and `format` are validated on the schema itself, not only when
662
+ * the value happens to be a string, so a broken keyword cannot hide behind
663
+ * a value of another type.
664
+ */
665
+ let patternRegExp = (void 0);
666
+ let patternSource = (void 0);
667
+ if (Object.hasOwn(schema, "pattern")) {
668
+ const declared = schema.pattern;
669
+ if (typeof (declared) !== "string") {
670
+ problems.push(`${at}: "pattern" must be a string`);
124
671
  }
125
- if (typeof (pattern) === "string") {
672
+ else {
673
+ patternSource = declared;
126
674
  try {
127
- if (!new RegExp(pattern).test(value)) {
128
- problems.push(`${at} does not match ${pattern}`);
129
- }
675
+ patternRegExp = new RegExp(declared);
130
676
  }
131
677
  catch {
132
- problems.push(`${at} has an invalid pattern`);
678
+ problems.push(`${at}: invalid pattern ${JSON.stringify(declared)}`);
133
679
  }
134
680
  }
135
681
  }
136
- if (typeof (value) === "number") {
137
- const minimum = schema.minimum;
138
- const maximum = schema.maximum;
139
- if (typeof (minimum) === "number" && value < minimum) {
140
- problems.push(`${at} is below ${minimum}`);
682
+ let formatName = (void 0);
683
+ if (Object.hasOwn(schema, "format")) {
684
+ const declared = schema.format;
685
+ if (typeof (declared) !== "string") {
686
+ problems.push(`${at}: "format" must be a string`);
141
687
  }
142
- if (typeof (maximum) === "number" && value > maximum) {
143
- problems.push(`${at} is above ${maximum}`);
688
+ else if (!SupportedFormats.includes(declared)) {
689
+ problems.push(`${at}: unsupported format "${declared}"`);
690
+ }
691
+ else {
692
+ formatName = declared;
144
693
  }
145
694
  }
146
- };
147
- const schemaMatches = (schema, value, depth) => {
148
- const problems = [];
149
- checkSchema(schema, value, "$", depth, problems);
150
- return problems.length === 0;
695
+ if (Object.hasOwn(schema, "$ref")) {
696
+ const ref = readString(schema, "$ref", at, problems);
697
+ if (ref !== (void 0)) {
698
+ const resolved = resolveRef(ref, root, at, problems);
699
+ if (resolved !== (void 0)) {
700
+ checkSchema(resolved, value, at, depth + 1, root, problems);
701
+ }
702
+ }
703
+ }
704
+ if (Object.hasOwn(schema, "const")) {
705
+ const constValue = schema.const;
706
+ const constProblem = jsonValueProblem(constValue, `${at}.const`);
707
+ if (constProblem !== (void 0)) {
708
+ problems.push(`${at}: "const" is not JSON (${constProblem})`);
709
+ }
710
+ else if (!sameJson(constValue, value)) {
711
+ problems.push(`${at} must equal the const value`);
712
+ }
713
+ }
714
+ const allowedValues = readEnum(schema, at, problems);
715
+ if (allowedValues !== (void 0) && !allowedValues.some((item) => sameJson(item, value))) {
716
+ problems.push(`${at} is not one of the allowed values`);
717
+ }
718
+ const allOf = readSchemaArray(schema, "allOf", at, problems);
719
+ if (allOf !== (void 0)) {
720
+ for (let index = 0; index < allOf.length; index += 1) {
721
+ checkSchema(allOf[index], value, at, depth + 1, root, problems);
722
+ }
723
+ }
724
+ const anyOf = readSchemaArray(schema, "anyOf", at, problems);
725
+ if (anyOf !== (void 0)) {
726
+ let matched = false;
727
+ for (let index = 0; index < anyOf.length; index += 1) {
728
+ if (schemaMatches(anyOf[index], value, depth + 1, root)) {
729
+ matched = true;
730
+ }
731
+ }
732
+ if (!matched) {
733
+ problems.push(`${at} matches none of anyOf`);
734
+ }
735
+ }
736
+ const oneOf = readSchemaArray(schema, "oneOf", at, problems);
737
+ if (oneOf !== (void 0)) {
738
+ let matched = 0;
739
+ for (let index = 0; index < oneOf.length; index += 1) {
740
+ if (schemaMatches(oneOf[index], value, depth + 1, root)) {
741
+ matched += 1;
742
+ }
743
+ }
744
+ if (matched !== 1) {
745
+ problems.push(`${at} matches ${matched} of oneOf, expected exactly 1`);
746
+ }
747
+ }
748
+ if (Object.hasOwn(schema, "type")) {
749
+ const types = readTypes(schema, at, problems);
750
+ if (types !== (void 0) && !types.some((type) => matchesType(type, value))) {
751
+ problems.push(`${at} expected ${types.join("|")}`);
752
+ return;
753
+ }
754
+ }
755
+ if (Array.isArray(value)) {
756
+ checkArrayKeywords(schema, value, at, depth, root, problems);
757
+ return;
758
+ }
759
+ if (isPlainObject(value)) {
760
+ checkObjectKeywords(schema, value, at, depth, root, problems);
761
+ return;
762
+ }
763
+ if (typeof (value) === "string") {
764
+ checkStringKeywords(schema, value, at, problems, patternRegExp, patternSource, formatName);
765
+ return;
766
+ }
767
+ if (typeof (value) === "number") {
768
+ checkNumberKeywords(schema, value, at, depth, root, problems);
769
+ }
151
770
  };
152
771
  /**
153
772
  * Parse a tool call's arguments against its declared schema.
154
773
  *
774
+ * The returned `args` is a deep-frozen clone of `raw`: mutating the caller's
775
+ * object afterwards changes neither `args` nor `digest`.
776
+ *
155
777
  * @throws BoundaryRejection `invalid_tool_args` with every problem found.
156
778
  */
157
- export const parseToolCall = (tool, raw) => {
779
+ const parseToolCallInner = (tool, raw) => {
158
780
  const problems = [];
159
- if (typeof (tool.name) !== "string" || tool.name.length === 0) {
160
- problems.push("tool.name is empty");
781
+ let name = "";
782
+ let schemaValue = (void 0);
783
+ let schemaUsable = false;
784
+ let rawObject = (void 0);
785
+ const candidate = tool;
786
+ if (!isPlainObject(candidate)) {
787
+ problems.push("tool must be an object with a name and an inputSchema");
161
788
  }
162
- if (!isRecord(raw)) {
789
+ else {
790
+ try {
791
+ const declaredName = candidate.name;
792
+ if (typeof (declaredName) !== "string" || declaredName.length === 0) {
793
+ problems.push("tool.name must be a non-empty string");
794
+ }
795
+ else {
796
+ name = declaredName;
797
+ }
798
+ if (!Object.hasOwn(candidate, "inputSchema")) {
799
+ problems.push("tool.inputSchema is required (object or boolean)");
800
+ }
801
+ else {
802
+ const declaredSchema = candidate.inputSchema;
803
+ if (typeof (declaredSchema) === "boolean" || isPlainObject(declaredSchema)) {
804
+ schemaValue = declaredSchema;
805
+ schemaUsable = true;
806
+ }
807
+ else {
808
+ problems.push("tool.inputSchema must be an object or a boolean");
809
+ }
810
+ }
811
+ }
812
+ catch (error) {
813
+ problems.push(`tool cannot be inspected (${error instanceof Error ? error.name : typeof (error)})`);
814
+ }
815
+ }
816
+ if (!isPlainObject(raw)) {
163
817
  problems.push("arguments must be an object");
164
818
  }
165
819
  else {
166
- checkSchema(tool.inputSchema, raw, "$", 0, problems);
820
+ let jsonProblem = (void 0);
821
+ try {
822
+ jsonProblem = jsonValueProblem(raw);
823
+ }
824
+ catch (error) {
825
+ jsonProblem = `arguments cannot be inspected (${error instanceof Error ? error.name : typeof (error)})`;
826
+ }
827
+ if (jsonProblem !== (void 0)) {
828
+ problems.push(jsonProblem);
829
+ }
830
+ else {
831
+ rawObject = raw;
832
+ }
833
+ }
834
+ if (schemaUsable && rawObject !== (void 0)) {
835
+ try {
836
+ checkSchema(schemaValue, rawObject, "$", 0, schemaValue, problems);
837
+ }
838
+ catch (error) {
839
+ problems.push(`arguments cannot be validated (${error instanceof Error ? error.name : typeof (error)})`);
840
+ }
167
841
  }
168
842
  if (problems.length > 0) {
169
843
  throw new BoundaryRejection("invalid_tool_args", problems);
170
844
  }
171
- const args = raw;
172
- return { tool: tool.name, args, digest: digestOf(args) };
845
+ const accepted = rawObject;
846
+ if (accepted === (void 0)) {
847
+ throw new BoundaryRejection("invalid_tool_args", ["arguments must be an object"]);
848
+ }
849
+ try {
850
+ const args = deepFreezeJson(cloneJson(accepted));
851
+ return { tool: name, args, digest: digestOf(args) };
852
+ }
853
+ catch (error) {
854
+ const reason = error instanceof Error ? error.message : String(error);
855
+ throw new BoundaryRejection("invalid_tool_args", [`arguments are not strict JSON: ${reason}`]);
856
+ }
857
+ };
858
+ /**
859
+ * Public entry point. The inner checks catch the common inspection failures;
860
+ * this outer guard covers a revoked `Proxy` whose very prototype lookup throws
861
+ * before the inner `try` blocks run.
862
+ */
863
+ export const parseToolCall = (tool, raw) => {
864
+ try {
865
+ return parseToolCallInner(tool, raw);
866
+ }
867
+ catch (error) {
868
+ if (error instanceof BoundaryRejection) {
869
+ throw error;
870
+ }
871
+ const reason = error instanceof Error ? error.message : typeof (error);
872
+ throw new BoundaryRejection("invalid_tool_args", [`arguments could not be inspected: ${reason}`]);
873
+ }
173
874
  };