attention-manifest-protocol 0.4.2 → 0.4.3

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 (827) 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/docs/schemas/collaboration.schema.json +0 -73
  352. package/docs/schemas/common.schema.json +0 -125
  353. package/docs/schemas/compaction.schema.json +0 -121
  354. package/docs/schemas/concept-compaction.schema.json +0 -73
  355. package/docs/schemas/concept.schema.json +0 -97
  356. package/docs/schemas/epistemic.schema.json +0 -178
  357. package/docs/schemas/federation.schema.json +0 -66
  358. package/docs/schemas/frame.schema.json +0 -86
  359. package/docs/schemas/ledger-snapshot.schema.json +0 -30
  360. package/docs/schemas/manifest.schema.json +0 -169
  361. package/docs/schemas/message.schema.json +0 -41
  362. package/docs/schemas/plan.schema.json +0 -189
  363. package/docs/schemas/receipt.schema.json +0 -45
  364. package/docs/schemas/social.schema.json +0 -153
  365. package/docs/schemas/team.schema.json +0 -56
  366. package/docs/schemas/verb.schema.json +0 -120
  367. package/eslint.config.mts +0 -96
  368. package/index.html +0 -13
  369. package/lib/context/workspaceProtocol.d.ts +0 -30
  370. package/lib/context/workspaceProtocol.js +0 -49
  371. package/prettier.config.mts +0 -37
  372. package/public/favicon.svg +0 -1
  373. package/public/icons.svg +0 -24
  374. package/src/attention/attention.ts +0 -347
  375. package/src/attention/budget.ts +0 -72
  376. package/src/attention/cognition.ts +0 -519
  377. package/src/attention/index.ts +0 -8
  378. package/src/attention/interrupts.ts +0 -228
  379. package/src/attention/resource.ts +0 -316
  380. package/src/attention/social.ts +0 -217
  381. package/src/attention/socialTypes.ts +0 -115
  382. package/src/authz/authz.ts +0 -305
  383. package/src/authz/index.ts +0 -1
  384. package/src/bayes/calibration.ts +0 -204
  385. package/src/bayes/calibrationRegistry.ts +0 -111
  386. package/src/bayes/calibrationSelection.ts +0 -154
  387. package/src/bayes/engine.ts +0 -532
  388. package/src/bayes/index.ts +0 -6
  389. package/src/bayes/reliability.ts +0 -62
  390. package/src/bayes/scopedPriors.ts +0 -88
  391. package/src/boundary/frame.ts +0 -322
  392. package/src/boundary/ids.ts +0 -14
  393. package/src/boundary/index.ts +0 -12
  394. package/src/boundary/refTable.ts +0 -125
  395. package/src/boundary/toolCall.ts +0 -212
  396. package/src/concept/concept.ts +0 -75
  397. package/src/concept/conceptBudget.ts +0 -346
  398. package/src/concept/conceptBudgetTypes.ts +0 -79
  399. package/src/concept/index.ts +0 -3
  400. package/src/concurrency/idempotency.ts +0 -41
  401. package/src/concurrency/index.ts +0 -5
  402. package/src/concurrency/mutex.ts +0 -26
  403. package/src/concurrency/namedLocks.ts +0 -35
  404. package/src/concurrency/retry.ts +0 -50
  405. package/src/concurrency/worker.ts +0 -128
  406. package/src/context/agentContext.ts +0 -308
  407. package/src/context/ast.ts +0 -499
  408. package/src/context/contentStore.ts +0 -75
  409. package/src/context/context.ts +0 -65
  410. package/src/context/contextIndex.ts +0 -85
  411. package/src/context/document.ts +0 -137
  412. package/src/context/fileStorePath.ts +0 -14
  413. package/src/context/index.ts +0 -43
  414. package/src/context/lifecycle.ts +0 -221
  415. package/src/context/projections.ts +0 -151
  416. package/src/context/workspace.ts +0 -422
  417. package/src/context/workspaceProtocol.ts +0 -112
  418. package/src/context/workspaceService.ts +0 -423
  419. package/src/cooperation/board.ts +0 -104
  420. package/src/cooperation/collaboration.ts +0 -60
  421. package/src/cooperation/index.ts +0 -6
  422. package/src/cooperation/merge.ts +0 -190
  423. package/src/cooperation/metrics.ts +0 -57
  424. package/src/cooperation/session.ts +0 -131
  425. package/src/cooperation/unified.ts +0 -56
  426. package/src/counter.ts +0 -9
  427. package/src/database/adapter/adapters.ts +0 -35
  428. package/src/database/adapter/index.ts +0 -4
  429. package/src/database/adapter/runtimeSink.ts +0 -74
  430. package/src/database/adapter/sessionStore.ts +0 -32
  431. package/src/database/adapter/turnStore.ts +0 -23
  432. package/src/database/entity/agent.ts +0 -199
  433. package/src/database/entity/entity.ts +0 -1046
  434. package/src/database/entity/handle.ts +0 -79
  435. package/src/database/entity/index.ts +0 -32
  436. package/src/database/entity/message.ts +0 -74
  437. package/src/database/entity/meta.ts +0 -11
  438. package/src/database/entity/object.ts +0 -42
  439. package/src/database/entity/outbox.ts +0 -15
  440. package/src/database/entity/process.ts +0 -65
  441. package/src/database/entity/registry.ts +0 -155
  442. package/src/database/entity/runtimeApproval.ts +0 -30
  443. package/src/database/entity/runtimeSession.ts +0 -13
  444. package/src/database/entity/runtimeTurn.ts +0 -15
  445. package/src/database/entity/thread.ts +0 -85
  446. package/src/database/entity/window.ts +0 -85
  447. package/src/database/entity/worker.ts +0 -90
  448. package/src/database/index.ts +0 -6
  449. package/src/database/repository/addressSpaceRepository.ts +0 -72
  450. package/src/database/repository/agentRepository.ts +0 -460
  451. package/src/database/repository/base.ts +0 -41
  452. package/src/database/repository/executionRepository.ts +0 -477
  453. package/src/database/repository/handleRepository.ts +0 -64
  454. package/src/database/repository/index.ts +0 -20
  455. package/src/database/repository/messageRepository.ts +0 -52
  456. package/src/database/repository/objectRepository.ts +0 -69
  457. package/src/database/repository/outboxRepository.ts +0 -63
  458. package/src/database/repository/processRepository.ts +0 -58
  459. package/src/database/repository/registryRepository.ts +0 -119
  460. package/src/database/repository/repository.ts +0 -491
  461. package/src/database/repository/runtimeApprovalRepository.ts +0 -44
  462. package/src/database/repository/runtimeSessionRepository.ts +0 -27
  463. package/src/database/repository/runtimeTurnRepository.ts +0 -39
  464. package/src/database/repository/socialRepository.ts +0 -185
  465. package/src/database/repository/threadRepository.ts +0 -57
  466. package/src/database/repository/windowRepository.ts +0 -88
  467. package/src/database/repository/workerRepository.ts +0 -69
  468. package/src/database/service/database.ts +0 -90
  469. package/src/database/service/handleService.ts +0 -48
  470. package/src/database/service/index.ts +0 -16
  471. package/src/database/service/messageService.ts +0 -61
  472. package/src/database/service/objectService.ts +0 -59
  473. package/src/database/service/processService.ts +0 -61
  474. package/src/database/service/registryServices.ts +0 -88
  475. package/src/database/service/service.ts +0 -183
  476. package/src/database/service/stepService.ts +0 -53
  477. package/src/database/service/threadService.ts +0 -65
  478. package/src/database/service/windowService.ts +0 -30
  479. package/src/database/service/workerService.ts +0 -57
  480. package/src/database/sql/index.ts +0 -3
  481. package/src/database/sql/schema.ts +0 -418
  482. package/src/database/sql/sql.ts +0 -543
  483. package/src/database/store/database.ts +0 -210
  484. package/src/database/store/index.ts +0 -3
  485. package/src/database/store/store.ts +0 -266
  486. package/src/delegate/index.ts +0 -2
  487. package/src/delegate/team.ts +0 -268
  488. package/src/delegate/teamTypes.ts +0 -47
  489. package/src/diagnosis/checklist.ts +0 -74
  490. package/src/diagnosis/context.ts +0 -93
  491. package/src/diagnosis/frame.ts +0 -256
  492. package/src/diagnosis/index.ts +0 -5
  493. package/src/diagnosis/router.ts +0 -72
  494. package/src/diagnosis/types.ts +0 -89
  495. package/src/error/agentError.ts +0 -16
  496. package/src/error/ampError.ts +0 -20
  497. package/src/error/authzError.ts +0 -14
  498. package/src/error/boundaryRejection.ts +0 -20
  499. package/src/error/index.ts +0 -7
  500. package/src/error/kernelError.ts +0 -27
  501. package/src/error/mailboxError.ts +0 -9
  502. package/src/error/windowError.ts +0 -12
  503. package/src/evaluation/agreement.ts +0 -96
  504. package/src/evaluation/index.ts +0 -2
  505. package/src/evaluation/labels.ts +0 -241
  506. package/src/evidence/evidenceGraph.ts +0 -205
  507. package/src/evidence/index.ts +0 -4
  508. package/src/evidence/revalidation.ts +0 -191
  509. package/src/execution/exec.ts +0 -408
  510. package/src/execution/handles.ts +0 -65
  511. package/src/execution/index.ts +0 -3
  512. package/src/execution/pin.ts +0 -154
  513. package/src/frame/frame.ts +0 -70
  514. package/src/frame/index.ts +0 -1
  515. package/src/goal/goal.ts +0 -43
  516. package/src/goal/index.ts +0 -2
  517. package/src/goal/plan.ts +0 -196
  518. package/src/governance/attentionManifest.ts +0 -802
  519. package/src/governance/audit.ts +0 -362
  520. package/src/governance/budget.ts +0 -628
  521. package/src/governance/context.ts +0 -356
  522. package/src/governance/control.ts +0 -159
  523. package/src/governance/cooperation.ts +0 -479
  524. package/src/governance/credential.ts +0 -359
  525. package/src/governance/httpServer.ts +0 -99
  526. package/src/governance/index.ts +0 -32
  527. package/src/governance/legal.ts +0 -574
  528. package/src/governance/matrix.ts +0 -460
  529. package/src/governance/perspectives.ts +0 -406
  530. package/src/governance/signing.ts +0 -407
  531. package/src/governance/store.ts +0 -125
  532. package/src/governance/switching.ts +0 -459
  533. package/src/governance/toolPolicy.ts +0 -80
  534. package/src/governance/transport.ts +0 -204
  535. package/src/governance/types.ts +0 -380
  536. package/src/governance/workflow.ts +0 -743
  537. package/src/index.ts +0 -11
  538. package/src/interaction/index.ts +0 -1
  539. package/src/interaction/interaction.ts +0 -391
  540. package/src/ipc/index.ts +0 -4
  541. package/src/ipc/mailbox.ts +0 -132
  542. package/src/ipc/memorySocialStore.ts +0 -93
  543. package/src/ipc/social.ts +0 -93
  544. package/src/kernel/index.ts +0 -14
  545. package/src/kernel/scheduler.ts +0 -498
  546. package/src/ledger/checkpoint.ts +0 -304
  547. package/src/ledger/index.ts +0 -4
  548. package/src/ledger/ledger.ts +0 -31
  549. package/src/ledger/persistence.ts +0 -159
  550. package/src/ledger/share.ts +0 -80
  551. package/src/lock/index.ts +0 -2
  552. package/src/lock/lease.ts +0 -74
  553. package/src/main.ts +0 -199
  554. package/src/manifest/agentCard.ts +0 -72
  555. package/src/manifest/cardSign.ts +0 -87
  556. package/src/manifest/federation.ts +0 -237
  557. package/src/manifest/federationTypes.ts +0 -55
  558. package/src/manifest/index.ts +0 -8
  559. package/src/manifest/keys.ts +0 -643
  560. package/src/manifest/manifest.ts +0 -114
  561. package/src/manifest/sign.ts +0 -134
  562. package/src/manifest/trust.ts +0 -146
  563. package/src/mission/index.ts +0 -2
  564. package/src/mission/missionQueue.ts +0 -75
  565. package/src/module/index.ts +0 -9
  566. package/src/module/llm/deepseek.ts +0 -214
  567. package/src/module/llm/llm.ts +0 -84
  568. package/src/module/mcp/client.ts +0 -110
  569. package/src/module/mcp/http.ts +0 -102
  570. package/src/module/mcp/protocol.ts +0 -77
  571. package/src/module/mcp/server.ts +0 -148
  572. package/src/module/mcp/transport.ts +0 -30
  573. package/src/module/mcp/workspaceServer.ts +0 -111
  574. package/src/module/sandbox/sandbox.ts +0 -29
  575. package/src/module/tool/mcpExecutor.ts +0 -54
  576. package/src/module/tool/policy.ts +0 -52
  577. package/src/module/tool/redact.ts +0 -29
  578. package/src/module/tool/tool.ts +0 -53
  579. package/src/module/tool/workspaceExecutor.ts +0 -35
  580. package/src/policy/guard.ts +0 -240
  581. package/src/policy/index.ts +0 -2
  582. package/src/policy/policy.ts +0 -561
  583. package/src/process/agent.ts +0 -341
  584. package/src/process/agentService.ts +0 -236
  585. package/src/process/agentStore.ts +0 -378
  586. package/src/process/executionStore.ts +0 -151
  587. package/src/process/index.ts +0 -5
  588. package/src/process/process.ts +0 -240
  589. package/src/process/transitions.ts +0 -19
  590. package/src/progress/index.ts +0 -2
  591. package/src/progress/progress.ts +0 -85
  592. package/src/protocol/a2a.ts +0 -120
  593. package/src/protocol/channel.ts +0 -44
  594. package/src/protocol/envelope.ts +0 -655
  595. package/src/protocol/httpChannel.ts +0 -87
  596. package/src/protocol/index.ts +0 -6
  597. package/src/protocol/protocol.ts +0 -138
  598. package/src/protocol/wire.ts +0 -60
  599. package/src/receipt/index.ts +0 -1
  600. package/src/receipt/receipt.ts +0 -47
  601. package/src/registry/content.ts +0 -69
  602. package/src/registry/index.ts +0 -23
  603. package/src/registry/registry.ts +0 -599
  604. package/src/runtime/action.ts +0 -87
  605. package/src/runtime/behavior.ts +0 -330
  606. package/src/runtime/behaviorTuning.ts +0 -163
  607. package/src/runtime/cognitiveRuntime.ts +0 -703
  608. package/src/runtime/escalation.ts +0 -35
  609. package/src/runtime/governedTask.ts +0 -233
  610. package/src/runtime/index.ts +0 -15
  611. package/src/runtime/kernelRuntime.ts +0 -144
  612. package/src/runtime/operation.ts +0 -35
  613. package/src/runtime/replay.ts +0 -71
  614. package/src/runtime/routing.ts +0 -58
  615. package/src/runtime/safety.ts +0 -48
  616. package/src/runtime/session.ts +0 -341
  617. package/src/runtime/sessionStore.ts +0 -43
  618. package/src/runtime/telemetry.ts +0 -55
  619. package/src/runtime/turnStore.ts +0 -30
  620. package/src/scenario/index.ts +0 -1
  621. package/src/scenario/scenario.ts +0 -299
  622. package/src/semantic/canonical.ts +0 -24
  623. package/src/semantic/index.ts +0 -2
  624. package/src/semantic/sha256.ts +0 -82
  625. package/src/storage/appendLog.ts +0 -372
  626. package/src/storage/fileAppendSink.ts +0 -40
  627. package/src/storage/index.ts +0 -2
  628. package/src/store/bindCache.ts +0 -22
  629. package/src/store/cache.ts +0 -191
  630. package/src/store/context.ts +0 -31
  631. package/src/store/handleStore.ts +0 -31
  632. package/src/store/index.ts +0 -9
  633. package/src/store/messageStore.ts +0 -31
  634. package/src/store/objectStore.ts +0 -31
  635. package/src/store/processStore.ts +0 -31
  636. package/src/store/threadStore.ts +0 -31
  637. package/src/store/windowStore.ts +0 -31
  638. package/src/structure/abstractSyntaxTree.ts +0 -493
  639. package/src/structure/avlTree.ts +0 -408
  640. package/src/structure/binarySearchTree.ts +0 -352
  641. package/src/structure/binaryTree.ts +0 -525
  642. package/src/structure/bloomFilter.ts +0 -231
  643. package/src/structure/compare.ts +0 -110
  644. package/src/structure/cuckooFilter.ts +0 -337
  645. package/src/structure/deque.ts +0 -223
  646. package/src/structure/filterKey.ts +0 -36
  647. package/src/structure/hash.ts +0 -279
  648. package/src/structure/heap.ts +0 -268
  649. package/src/structure/index.ts +0 -20
  650. package/src/structure/iterator.ts +0 -22
  651. package/src/structure/lru.ts +0 -619
  652. package/src/structure/ordered.ts +0 -399
  653. package/src/structure/priority.ts +0 -915
  654. package/src/structure/queue.ts +0 -168
  655. package/src/structure/redBlackTree.ts +0 -680
  656. package/src/structure/segmentTree.ts +0 -248
  657. package/src/structure/stack.ts +0 -118
  658. package/src/structure/unordered.ts +0 -407
  659. package/src/style.css +0 -278
  660. package/src/thread/index.ts +0 -2
  661. package/src/thread/thread.ts +0 -176
  662. package/src/thread/transitions.ts +0 -17
  663. package/src/types/common.ts +0 -119
  664. package/src/types/index.ts +0 -23
  665. package/src/warrant/epistemic.ts +0 -154
  666. package/src/warrant/index.ts +0 -3
  667. package/src/warrant/inquiry.ts +0 -166
  668. package/src/warrant/warrant.ts +0 -179
  669. package/src/window/compaction.ts +0 -403
  670. package/src/window/compactionTypes.ts +0 -119
  671. package/src/window/index.ts +0 -7
  672. package/src/window/page.ts +0 -18
  673. package/src/window/window.ts +0 -244
  674. package/tools/_helpers.ts +0 -34
  675. package/tools/a2a-check.ts +0 -110
  676. package/tools/a2a-flow-check.ts +0 -78
  677. package/tools/agent-card-check.ts +0 -76
  678. package/tools/agent-check.ts +0 -236
  679. package/tools/agent-store-check.ts +0 -153
  680. package/tools/agreement-check.ts +0 -27
  681. package/tools/annotation-server-check.ts +0 -48
  682. package/tools/annotation-server.ts +0 -230
  683. package/tools/annotation-status.ts +0 -65
  684. package/tools/approval-access-check.ts +0 -66
  685. package/tools/arch-check.ts +0 -72
  686. package/tools/attention-core-check.ts +0 -48
  687. package/tools/attention-resource-check.ts +0 -169
  688. package/tools/audit-check.ts +0 -207
  689. package/tools/authority-check.ts +0 -124
  690. package/tools/authz-check.ts +0 -138
  691. package/tools/bayes-check.ts +0 -162
  692. package/tools/bayes-probe.ts +0 -154
  693. package/tools/behavior-tuning-check.ts +0 -53
  694. package/tools/board-check.ts +0 -87
  695. package/tools/boundary-check.ts +0 -199
  696. package/tools/bundle-trust-check.ts +0 -96
  697. package/tools/calibrate-imported.ts +0 -108
  698. package/tools/calibration-check.ts +0 -44
  699. package/tools/calibration-registry-check.ts +0 -40
  700. package/tools/calibration-sim.ts +0 -40
  701. package/tools/card-sign-check.ts +0 -71
  702. package/tools/card-trust-check.ts +0 -78
  703. package/tools/channel-check.ts +0 -86
  704. package/tools/checkpoint-check.ts +0 -620
  705. package/tools/cleanup-style-configs.ts +0 -29
  706. package/tools/cognition-check.ts +0 -648
  707. package/tools/cognitive-runtime-check.ts +0 -609
  708. package/tools/collaboration-demo.ts +0 -78
  709. package/tools/compaction-check.ts +0 -266
  710. package/tools/concept-check.ts +0 -260
  711. package/tools/concurrency-check.ts +0 -242
  712. package/tools/conformance-runtime.ts +0 -389
  713. package/tools/conformance.ts +0 -651
  714. package/tools/context-ast-check.ts +0 -90
  715. package/tools/context-ast-deepseek.ts +0 -242
  716. package/tools/context-graph-bench.ts +0 -50
  717. package/tools/context-graph-check.ts +0 -229
  718. package/tools/context-index-check.ts +0 -48
  719. package/tools/context-lifecycle-check.ts +0 -69
  720. package/tools/context-projection-check.ts +0 -73
  721. package/tools/context-scope-check.ts +0 -134
  722. package/tools/context-storage-check.ts +0 -113
  723. package/tools/cooperation-check.ts +0 -517
  724. package/tools/cooperation-http-check.ts +0 -125
  725. package/tools/deepseek-llm-check.ts +0 -147
  726. package/tools/deepseek-probe.ts +0 -494
  727. package/tools/diagnosis-check.ts +0 -109
  728. package/tools/diagnosis-router-check.ts +0 -50
  729. package/tools/document-context-check.ts +0 -237
  730. package/tools/envelope-check.ts +0 -659
  731. package/tools/eslint-rules/index.ts +0 -26
  732. package/tools/eslint-rules/rules/jsdoc-comment-format.ts +0 -105
  733. package/tools/eslint-rules/rules/no-function-keyword.ts +0 -60
  734. package/tools/eslint-rules/rules/no-multiline-parameters.ts +0 -71
  735. package/tools/eslint-rules/rules/no-multiline-type-parameters.ts +0 -57
  736. package/tools/eslint-rules/rules/no-undefined-comparison.ts +0 -115
  737. package/tools/eslint-rules/rules/prefer-template-for-string-conversion.ts +0 -97
  738. package/tools/eslint-rules/rules/require-typeof-parentheses.ts +0 -49
  739. package/tools/eslint-rules/rules/require-variable-type.ts +0 -36
  740. package/tools/eslint-rules/rules/variable-naming.ts +0 -175
  741. package/tools/eval-recorded-replay.ts +0 -215
  742. package/tools/eval-replay.ts +0 -139
  743. package/tools/eval-summary.ts +0 -136
  744. package/tools/evidence-revalidation-check.ts +0 -235
  745. package/tools/exec-check.ts +0 -217
  746. package/tools/federation-check.ts +0 -166
  747. package/tools/federation-demo.ts +0 -45
  748. package/tools/filter-check.ts +0 -243
  749. package/tools/governance-check.ts +0 -680
  750. package/tools/governance-store-check.ts +0 -131
  751. package/tools/governed-task-check.ts +0 -227
  752. package/tools/guard-check.ts +0 -122
  753. package/tools/http-channel-check.ts +0 -125
  754. package/tools/import-campaign.ts +0 -28
  755. package/tools/inquiry-check.ts +0 -126
  756. package/tools/interaction-check.ts +0 -171
  757. package/tools/interrupts-check.ts +0 -173
  758. package/tools/ipc-check.ts +0 -170
  759. package/tools/kernel-async-check.ts +0 -136
  760. package/tools/kernel-check.ts +0 -369
  761. package/tools/kernel-runtime-check.ts +0 -276
  762. package/tools/keys-check.ts +0 -559
  763. package/tools/label-audit.ts +0 -70
  764. package/tools/labels-workflow-check.ts +0 -49
  765. package/tools/linear-structure-check.ts +0 -524
  766. package/tools/live-exec.ts +0 -62
  767. package/tools/live-governance-eval.ts +0 -813
  768. package/tools/live-legacy.ts +0 -50
  769. package/tools/lru-check.ts +0 -182
  770. package/tools/make-annotation-campaign.ts +0 -57
  771. package/tools/mcp-executor-check.ts +0 -33
  772. package/tools/merge-annotations.ts +0 -32
  773. package/tools/merge-check.ts +0 -98
  774. package/tools/metrics-check.ts +0 -84
  775. package/tools/net-probe.ts +0 -107
  776. package/tools/oauth-probe.ts +0 -117
  777. package/tools/outbox-check.ts +0 -50
  778. package/tools/persistence-check.ts +0 -144
  779. package/tools/pin-check.ts +0 -116
  780. package/tools/platform-check.ts +0 -281
  781. package/tools/policy-check.ts +0 -514
  782. package/tools/prettier-plugin/index.mts +0 -84
  783. package/tools/priority-check.ts +0 -627
  784. package/tools/probe-context7.ts +0 -63
  785. package/tools/registry-check.ts +0 -252
  786. package/tools/reliability-check.ts +0 -25
  787. package/tools/retry-check.ts +0 -85
  788. package/tools/rewrite-declaration-extensions.ts +0 -98
  789. package/tools/runtime-check.ts +0 -165
  790. package/tools/runtime-deepseek-check.ts +0 -85
  791. package/tools/runtime-eval.ts +0 -358
  792. package/tools/scenario-check.ts +0 -161
  793. package/tools/scenario-incident.ts +0 -162
  794. package/tools/scoped-priors-check.ts +0 -35
  795. package/tools/scoped-priors-pooling.ts +0 -34
  796. package/tools/segment-ast-check.ts +0 -649
  797. package/tools/session-check.ts +0 -196
  798. package/tools/session-store-check.ts +0 -73
  799. package/tools/share-check.ts +0 -88
  800. package/tools/sign-check.ts +0 -95
  801. package/tools/signing-check.ts +0 -275
  802. package/tools/snapshot-demo.ts +0 -65
  803. package/tools/social-check.ts +0 -146
  804. package/tools/structure-compare-check.ts +0 -95
  805. package/tools/support/documentScanner.ts +0 -577
  806. package/tools/support/texScanner.ts +0 -631
  807. package/tools/support/workspaceScanner.ts +0 -476
  808. package/tools/team-check.ts +0 -163
  809. package/tools/team-demo.ts +0 -36
  810. package/tools/telemetry-check.ts +0 -44
  811. package/tools/tex-context-check.ts +0 -263
  812. package/tools/tool-gate-check.ts +0 -98
  813. package/tools/tree-structure-check.ts +0 -786
  814. package/tools/trust-flow-check.ts +0 -158
  815. package/tools/turn-store-check.ts +0 -57
  816. package/tools/unified-check.ts +0 -83
  817. package/tools/validate.ts +0 -309
  818. package/tools/wire-check.ts +0 -96
  819. package/tools/workspace-agent-check.ts +0 -486
  820. package/tools/workspace-agent-demo.ts +0 -62
  821. package/tools/workspace-agent-server.ts +0 -101
  822. package/tools/workspace-context-check.ts +0 -331
  823. package/tools/workspace-context.ts +0 -131
  824. package/tsconfig.build.json +0 -14
  825. package/tsconfig.json +0 -24
  826. package/tsconfig.tools.json +0 -31
  827. 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
  };