@caupulican/pi-adaptative 0.81.40 → 0.81.42

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 (599) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +1 -1
  3. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js +1 -0
  4. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +1 -1
  5. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.ts +1 -0
  6. package/dist/bundled-resources/runtimes/pi-shell-engine/commands/text.py +5 -1
  7. package/dist/bundled-resources/runtimes/pi-shell-engine/context.py +3 -3
  8. package/dist/bundled-resources/runtimes/pi-shell-engine/errors.py +8 -0
  9. package/dist/bundled-resources/runtimes/pi-shell-engine/exec.py +26 -3
  10. package/dist/bundled-resources/runtimes/pi-shell-engine/expand.py +3 -0
  11. package/dist/bundled-resources/runtimes/pi-shell-engine/main.py +4 -1
  12. package/dist/bundled-resources/runtimes/pi-shell-engine/state.py +2 -1
  13. package/dist/bundled-resources/runtimes/pi-shell-engine/tokens.py +2 -0
  14. package/dist/cli/args.d.ts +2 -0
  15. package/dist/cli/args.d.ts.map +1 -1
  16. package/dist/cli/args.js +22 -1
  17. package/dist/cli/args.js.map +1 -1
  18. package/dist/core/agent-paths.d.ts +38 -0
  19. package/dist/core/agent-paths.d.ts.map +1 -1
  20. package/dist/core/agent-paths.js +77 -0
  21. package/dist/core/agent-paths.js.map +1 -1
  22. package/dist/core/agent-session-contracts.d.ts +311 -0
  23. package/dist/core/agent-session-contracts.d.ts.map +1 -0
  24. package/dist/core/agent-session-contracts.js +26 -0
  25. package/dist/core/agent-session-contracts.js.map +1 -0
  26. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  27. package/dist/core/agent-session-runtime.js +3 -0
  28. package/dist/core/agent-session-runtime.js.map +1 -1
  29. package/dist/core/agent-session.d.ts +26 -405
  30. package/dist/core/agent-session.d.ts.map +1 -1
  31. package/dist/core/agent-session.js +90 -316
  32. package/dist/core/agent-session.js.map +1 -1
  33. package/dist/core/auth-storage.d.ts.map +1 -1
  34. package/dist/core/auth-storage.js +3 -1
  35. package/dist/core/auth-storage.js.map +1 -1
  36. package/dist/core/autonomy/contracts.d.ts +2 -0
  37. package/dist/core/autonomy/contracts.d.ts.map +1 -1
  38. package/dist/core/autonomy/contracts.js.map +1 -1
  39. package/dist/core/autonomy/envelope-enforcement.d.ts.map +1 -1
  40. package/dist/core/autonomy/envelope-enforcement.js +4 -9
  41. package/dist/core/autonomy/envelope-enforcement.js.map +1 -1
  42. package/dist/core/autonomy/lane-tool-surface.d.ts +3 -1
  43. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
  44. package/dist/core/autonomy/lane-tool-surface.js +19 -5
  45. package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
  46. package/dist/core/autonomy/path-scope.d.ts +14 -0
  47. package/dist/core/autonomy/path-scope.d.ts.map +1 -1
  48. package/dist/core/autonomy/path-scope.js +37 -6
  49. package/dist/core/autonomy/path-scope.js.map +1 -1
  50. package/dist/core/background-lane-controller.d.ts +30 -2
  51. package/dist/core/background-lane-controller.d.ts.map +1 -1
  52. package/dist/core/background-lane-controller.js +33 -1
  53. package/dist/core/background-lane-controller.js.map +1 -1
  54. package/dist/core/bedrock-sso-login.d.ts +16 -0
  55. package/dist/core/bedrock-sso-login.d.ts.map +1 -0
  56. package/dist/core/bedrock-sso-login.js +98 -0
  57. package/dist/core/bedrock-sso-login.js.map +1 -0
  58. package/dist/core/compaction-controller.d.ts.map +1 -1
  59. package/dist/core/compaction-controller.js +1 -1
  60. package/dist/core/compaction-controller.js.map +1 -1
  61. package/dist/core/compaction-support.d.ts +3 -8
  62. package/dist/core/compaction-support.d.ts.map +1 -1
  63. package/dist/core/compaction-support.js +3 -3
  64. package/dist/core/compaction-support.js.map +1 -1
  65. package/dist/core/context-pipeline.d.ts +1 -1
  66. package/dist/core/context-pipeline.d.ts.map +1 -1
  67. package/dist/core/context-pipeline.js +7 -33
  68. package/dist/core/context-pipeline.js.map +1 -1
  69. package/dist/core/cost/cost-summary.d.ts.map +1 -1
  70. package/dist/core/cost/cost-summary.js +5 -3
  71. package/dist/core/cost/cost-summary.js.map +1 -1
  72. package/dist/core/cost/daily-usage.d.ts.map +1 -1
  73. package/dist/core/cost/daily-usage.js +4 -5
  74. package/dist/core/cost/daily-usage.js.map +1 -1
  75. package/dist/core/default-tool-surface.d.ts.map +1 -1
  76. package/dist/core/default-tool-surface.js +1 -0
  77. package/dist/core/default-tool-surface.js.map +1 -1
  78. package/dist/core/delegation/managed-lane-controller.d.ts +11 -1
  79. package/dist/core/delegation/managed-lane-controller.d.ts.map +1 -1
  80. package/dist/core/delegation/managed-lane-controller.js +84 -41
  81. package/dist/core/delegation/managed-lane-controller.js.map +1 -1
  82. package/dist/core/delegation/session-worker-claim.d.ts.map +1 -1
  83. package/dist/core/delegation/session-worker-claim.js +4 -3
  84. package/dist/core/delegation/session-worker-claim.js.map +1 -1
  85. package/dist/core/delegation/worker-action-journal.d.ts +73 -0
  86. package/dist/core/delegation/worker-action-journal.d.ts.map +1 -0
  87. package/dist/core/delegation/worker-action-journal.js +297 -0
  88. package/dist/core/delegation/worker-action-journal.js.map +1 -0
  89. package/dist/core/delegation/worker-actions.d.ts +36 -1
  90. package/dist/core/delegation/worker-actions.d.ts.map +1 -1
  91. package/dist/core/delegation/worker-actions.js +171 -46
  92. package/dist/core/delegation/worker-actions.js.map +1 -1
  93. package/dist/core/delegation/worker-agent-control-coordinator.d.ts +75 -0
  94. package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -0
  95. package/dist/core/delegation/worker-agent-control-coordinator.js +218 -0
  96. package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -0
  97. package/dist/core/delegation/worker-agent-control.d.ts +66 -0
  98. package/dist/core/delegation/worker-agent-control.d.ts.map +1 -0
  99. package/dist/core/delegation/worker-agent-control.js +163 -0
  100. package/dist/core/delegation/worker-agent-control.js.map +1 -0
  101. package/dist/core/delegation/worker-attempt-executor.d.ts +80 -0
  102. package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -0
  103. package/dist/core/delegation/worker-attempt-executor.js +343 -0
  104. package/dist/core/delegation/worker-attempt-executor.js.map +1 -0
  105. package/dist/core/delegation/worker-claim.d.ts +30 -0
  106. package/dist/core/delegation/worker-claim.d.ts.map +1 -1
  107. package/dist/core/delegation/worker-claim.js +205 -53
  108. package/dist/core/delegation/worker-claim.js.map +1 -1
  109. package/dist/core/delegation/worker-conversation-store.d.ts +116 -0
  110. package/dist/core/delegation/worker-conversation-store.d.ts.map +1 -0
  111. package/dist/core/delegation/worker-conversation-store.js +442 -0
  112. package/dist/core/delegation/worker-conversation-store.js.map +1 -0
  113. package/dist/core/delegation/worker-delegation-controller.d.ts +21 -5
  114. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
  115. package/dist/core/delegation/worker-delegation-controller.js +386 -251
  116. package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
  117. package/dist/core/delegation/worker-delegation-request.d.ts +14 -0
  118. package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -1
  119. package/dist/core/delegation/worker-delegation-request.js.map +1 -1
  120. package/dist/core/delegation/worker-dispatch-scheduler.d.ts +4 -2
  121. package/dist/core/delegation/worker-dispatch-scheduler.d.ts.map +1 -1
  122. package/dist/core/delegation/worker-dispatch-scheduler.js +16 -6
  123. package/dist/core/delegation/worker-dispatch-scheduler.js.map +1 -1
  124. package/dist/core/delegation/worker-execution-policy.d.ts +2 -1
  125. package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -1
  126. package/dist/core/delegation/worker-execution-policy.js +5 -7
  127. package/dist/core/delegation/worker-execution-policy.js.map +1 -1
  128. package/dist/core/delegation/worker-lifecycle.d.ts +44 -1
  129. package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -1
  130. package/dist/core/delegation/worker-lifecycle.js +120 -0
  131. package/dist/core/delegation/worker-lifecycle.js.map +1 -1
  132. package/dist/core/delegation/worker-process-owner.d.ts +18 -0
  133. package/dist/core/delegation/worker-process-owner.d.ts.map +1 -0
  134. package/dist/core/delegation/worker-process-owner.js +54 -0
  135. package/dist/core/delegation/worker-process-owner.js.map +1 -0
  136. package/dist/core/delegation/worker-profile-resolver.d.ts +5 -1
  137. package/dist/core/delegation/worker-profile-resolver.d.ts.map +1 -1
  138. package/dist/core/delegation/worker-profile-resolver.js +8 -0
  139. package/dist/core/delegation/worker-profile-resolver.js.map +1 -1
  140. package/dist/core/delegation/worker-recovery-coordinator.d.ts +54 -0
  141. package/dist/core/delegation/worker-recovery-coordinator.d.ts.map +1 -0
  142. package/dist/core/delegation/worker-recovery-coordinator.js +181 -0
  143. package/dist/core/delegation/worker-recovery-coordinator.js.map +1 -0
  144. package/dist/core/delegation/worker-resource-catalog.d.ts +32 -0
  145. package/dist/core/delegation/worker-resource-catalog.d.ts.map +1 -0
  146. package/dist/core/delegation/worker-resource-catalog.js +116 -0
  147. package/dist/core/delegation/worker-resource-catalog.js.map +1 -0
  148. package/dist/core/delegation/worker-resource-materializer.d.ts +47 -0
  149. package/dist/core/delegation/worker-resource-materializer.d.ts.map +1 -0
  150. package/dist/core/delegation/worker-resource-materializer.js +137 -0
  151. package/dist/core/delegation/worker-resource-materializer.js.map +1 -0
  152. package/dist/core/delegation/worker-runner.d.ts +3 -1
  153. package/dist/core/delegation/worker-runner.d.ts.map +1 -1
  154. package/dist/core/delegation/worker-runner.js +189 -54
  155. package/dist/core/delegation/worker-runner.js.map +1 -1
  156. package/dist/core/delegation/worker-terminal-finalizer.d.ts +23 -0
  157. package/dist/core/delegation/worker-terminal-finalizer.d.ts.map +1 -0
  158. package/dist/core/delegation/worker-terminal-finalizer.js +12 -0
  159. package/dist/core/delegation/worker-terminal-finalizer.js.map +1 -0
  160. package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +38 -0
  161. package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -0
  162. package/dist/core/delegation/worker-write-reservation-coordinator.js +107 -0
  163. package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -0
  164. package/dist/core/delegation/worker-write-reservation.d.ts +90 -0
  165. package/dist/core/delegation/worker-write-reservation.d.ts.map +1 -0
  166. package/dist/core/delegation/worker-write-reservation.js +348 -0
  167. package/dist/core/delegation/worker-write-reservation.js.map +1 -0
  168. package/dist/core/extension-import-authority.d.ts +6 -0
  169. package/dist/core/extension-import-authority.d.ts.map +1 -0
  170. package/dist/core/extension-import-authority.js +10 -0
  171. package/dist/core/extension-import-authority.js.map +1 -0
  172. package/dist/core/extensions/loader.d.ts.map +1 -1
  173. package/dist/core/extensions/loader.js +2 -3
  174. package/dist/core/extensions/loader.js.map +1 -1
  175. package/dist/core/extensions/runner.d.ts +3 -0
  176. package/dist/core/extensions/runner.d.ts.map +1 -1
  177. package/dist/core/extensions/runner.js +14 -5
  178. package/dist/core/extensions/runner.js.map +1 -1
  179. package/dist/core/extensions/stale-context.d.ts +2 -0
  180. package/dist/core/extensions/stale-context.d.ts.map +1 -0
  181. package/dist/core/extensions/stale-context.js +2 -0
  182. package/dist/core/extensions/stale-context.js.map +1 -0
  183. package/dist/core/extensions/types.d.ts +8 -0
  184. package/dist/core/extensions/types.d.ts.map +1 -1
  185. package/dist/core/extensions/types.js.map +1 -1
  186. package/dist/core/foreground-recovery-controller.d.ts +1 -0
  187. package/dist/core/foreground-recovery-controller.d.ts.map +1 -1
  188. package/dist/core/foreground-recovery-controller.js +13 -13
  189. package/dist/core/foreground-recovery-controller.js.map +1 -1
  190. package/dist/core/goal-loop-controller.d.ts +14 -9
  191. package/dist/core/goal-loop-controller.d.ts.map +1 -1
  192. package/dist/core/goal-loop-controller.js +47 -75
  193. package/dist/core/goal-loop-controller.js.map +1 -1
  194. package/dist/core/goals/compact-goal-context.d.ts +11 -0
  195. package/dist/core/goals/compact-goal-context.d.ts.map +1 -0
  196. package/dist/core/goals/compact-goal-context.js +59 -0
  197. package/dist/core/goals/compact-goal-context.js.map +1 -0
  198. package/dist/core/goals/goal-acceptance.d.ts.map +1 -1
  199. package/dist/core/goals/goal-acceptance.js +2 -0
  200. package/dist/core/goals/goal-acceptance.js.map +1 -1
  201. package/dist/core/goals/goal-auto-continue-controller.d.ts +2 -1
  202. package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -1
  203. package/dist/core/goals/goal-auto-continue-controller.js +5 -8
  204. package/dist/core/goals/goal-auto-continue-controller.js.map +1 -1
  205. package/dist/core/goals/goal-continuation-controller.d.ts +2 -2
  206. package/dist/core/goals/goal-continuation-controller.d.ts.map +1 -1
  207. package/dist/core/goals/goal-continuation-controller.js +42 -11
  208. package/dist/core/goals/goal-continuation-controller.js.map +1 -1
  209. package/dist/core/goals/goal-continuation-defaults.d.ts +4 -29
  210. package/dist/core/goals/goal-continuation-defaults.d.ts.map +1 -1
  211. package/dist/core/goals/goal-continuation-defaults.js +4 -32
  212. package/dist/core/goals/goal-continuation-defaults.js.map +1 -1
  213. package/dist/core/goals/goal-continuation-prompt.d.ts +8 -18
  214. package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -1
  215. package/dist/core/goals/goal-continuation-prompt.js +9 -179
  216. package/dist/core/goals/goal-continuation-prompt.js.map +1 -1
  217. package/dist/core/goals/goal-lifecycle.d.ts +35 -12
  218. package/dist/core/goals/goal-lifecycle.d.ts.map +1 -1
  219. package/dist/core/goals/goal-lifecycle.js +98 -13
  220. package/dist/core/goals/goal-lifecycle.js.map +1 -1
  221. package/dist/core/goals/goal-record.d.ts +17 -0
  222. package/dist/core/goals/goal-record.d.ts.map +1 -0
  223. package/dist/core/goals/goal-record.js +31 -0
  224. package/dist/core/goals/goal-record.js.map +1 -0
  225. package/dist/core/goals/goal-session-controller.d.ts +42 -0
  226. package/dist/core/goals/goal-session-controller.d.ts.map +1 -0
  227. package/dist/core/goals/goal-session-controller.js +128 -0
  228. package/dist/core/goals/goal-session-controller.js.map +1 -0
  229. package/dist/core/goals/goal-state.d.ts +45 -25
  230. package/dist/core/goals/goal-state.d.ts.map +1 -1
  231. package/dist/core/goals/goal-state.js +85 -15
  232. package/dist/core/goals/goal-state.js.map +1 -1
  233. package/dist/core/goals/goal-tool-core.d.ts +1 -4
  234. package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
  235. package/dist/core/goals/goal-tool-core.js +49 -34
  236. package/dist/core/goals/goal-tool-core.js.map +1 -1
  237. package/dist/core/goals/session-goal-state.d.ts +18 -8
  238. package/dist/core/goals/session-goal-state.d.ts.map +1 -1
  239. package/dist/core/goals/session-goal-state.js +134 -11
  240. package/dist/core/goals/session-goal-state.js.map +1 -1
  241. package/dist/core/human-input-controller.d.ts +47 -0
  242. package/dist/core/human-input-controller.d.ts.map +1 -0
  243. package/dist/core/human-input-controller.js +181 -0
  244. package/dist/core/human-input-controller.js.map +1 -0
  245. package/dist/core/local-runtime-controller.d.ts +1 -1
  246. package/dist/core/local-runtime-controller.d.ts.map +1 -1
  247. package/dist/core/local-runtime-controller.js.map +1 -1
  248. package/dist/core/model-capability.d.ts +0 -19
  249. package/dist/core/model-capability.d.ts.map +1 -1
  250. package/dist/core/model-capability.js +0 -19
  251. package/dist/core/model-capability.js.map +1 -1
  252. package/dist/core/model-registry.d.ts +6 -1
  253. package/dist/core/model-registry.d.ts.map +1 -1
  254. package/dist/core/model-registry.js +13 -5
  255. package/dist/core/model-registry.js.map +1 -1
  256. package/dist/core/model-resolver.d.ts +16 -1
  257. package/dist/core/model-resolver.d.ts.map +1 -1
  258. package/dist/core/model-resolver.js +32 -16
  259. package/dist/core/model-resolver.js.map +1 -1
  260. package/dist/core/model-router-controller.d.ts +1 -1
  261. package/dist/core/model-router-controller.d.ts.map +1 -1
  262. package/dist/core/model-router-controller.js.map +1 -1
  263. package/dist/core/model-selection-controller.d.ts +1 -1
  264. package/dist/core/model-selection-controller.d.ts.map +1 -1
  265. package/dist/core/model-selection-controller.js.map +1 -1
  266. package/dist/core/models/model-endpoint.d.ts +3 -0
  267. package/dist/core/models/model-endpoint.d.ts.map +1 -0
  268. package/dist/core/models/model-endpoint.js +11 -0
  269. package/dist/core/models/model-endpoint.js.map +1 -0
  270. package/dist/core/orchestration/agent-resume.d.ts +2 -0
  271. package/dist/core/orchestration/agent-resume.d.ts.map +1 -1
  272. package/dist/core/orchestration/agent-resume.js +7 -0
  273. package/dist/core/orchestration/agent-resume.js.map +1 -1
  274. package/dist/core/orchestration/attempt-usage.d.ts +28 -0
  275. package/dist/core/orchestration/attempt-usage.d.ts.map +1 -0
  276. package/dist/core/orchestration/attempt-usage.js +168 -0
  277. package/dist/core/orchestration/attempt-usage.js.map +1 -0
  278. package/dist/core/orchestration/capability-gateway.d.ts +19 -1
  279. package/dist/core/orchestration/capability-gateway.d.ts.map +1 -1
  280. package/dist/core/orchestration/capability-gateway.js +128 -28
  281. package/dist/core/orchestration/capability-gateway.js.map +1 -1
  282. package/dist/core/orchestration/contracts.d.ts +35 -0
  283. package/dist/core/orchestration/contracts.d.ts.map +1 -1
  284. package/dist/core/orchestration/contracts.js +17 -0
  285. package/dist/core/orchestration/contracts.js.map +1 -1
  286. package/dist/core/orchestration/delegation-ledger.d.ts +17 -2
  287. package/dist/core/orchestration/delegation-ledger.d.ts.map +1 -1
  288. package/dist/core/orchestration/delegation-ledger.js +81 -3
  289. package/dist/core/orchestration/delegation-ledger.js.map +1 -1
  290. package/dist/core/orchestration/event-store.d.ts +1 -0
  291. package/dist/core/orchestration/event-store.d.ts.map +1 -1
  292. package/dist/core/orchestration/event-store.js +78 -38
  293. package/dist/core/orchestration/event-store.js.map +1 -1
  294. package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
  295. package/dist/core/orchestration/profile-registry.js +81 -41
  296. package/dist/core/orchestration/profile-registry.js.map +1 -1
  297. package/dist/core/orchestration/profile-store.d.ts.map +1 -1
  298. package/dist/core/orchestration/profile-store.js +18 -4
  299. package/dist/core/orchestration/profile-store.js.map +1 -1
  300. package/dist/core/orchestration/risk-budget.d.ts +2 -0
  301. package/dist/core/orchestration/risk-budget.d.ts.map +1 -1
  302. package/dist/core/orchestration/risk-budget.js +26 -0
  303. package/dist/core/orchestration/risk-budget.js.map +1 -1
  304. package/dist/core/orchestration/task-runtime.d.ts +13 -1
  305. package/dist/core/orchestration/task-runtime.d.ts.map +1 -1
  306. package/dist/core/orchestration/task-runtime.js +127 -16
  307. package/dist/core/orchestration/task-runtime.js.map +1 -1
  308. package/dist/core/orchestration/work-state-projection.d.ts.map +1 -1
  309. package/dist/core/orchestration/work-state-projection.js +1 -1
  310. package/dist/core/orchestration/work-state-projection.js.map +1 -1
  311. package/dist/core/orchestration/worker-execution-contract.d.ts +3 -1
  312. package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -1
  313. package/dist/core/orchestration/worker-execution-contract.js +75 -23
  314. package/dist/core/orchestration/worker-execution-contract.js.map +1 -1
  315. package/dist/core/orchestration/worker-result-adapter.d.ts +9 -3
  316. package/dist/core/orchestration/worker-result-adapter.d.ts.map +1 -1
  317. package/dist/core/orchestration/worker-result-adapter.js +167 -14
  318. package/dist/core/orchestration/worker-result-adapter.js.map +1 -1
  319. package/dist/core/package-manager.d.ts.map +1 -1
  320. package/dist/core/package-manager.js +20 -3
  321. package/dist/core/package-manager.js.map +1 -1
  322. package/dist/core/profile-filter-controller.d.ts +8 -1
  323. package/dist/core/profile-filter-controller.d.ts.map +1 -1
  324. package/dist/core/profile-filter-controller.js +23 -5
  325. package/dist/core/profile-filter-controller.js.map +1 -1
  326. package/dist/core/prompt-templates.d.ts +1 -0
  327. package/dist/core/prompt-templates.d.ts.map +1 -1
  328. package/dist/core/prompt-templates.js +18 -29
  329. package/dist/core/prompt-templates.js.map +1 -1
  330. package/dist/core/reflection-controller.d.ts +2 -2
  331. package/dist/core/reflection-controller.d.ts.map +1 -1
  332. package/dist/core/reflection-controller.js +92 -54
  333. package/dist/core/reflection-controller.js.map +1 -1
  334. package/dist/core/request-auth.d.ts +7 -0
  335. package/dist/core/request-auth.d.ts.map +1 -0
  336. package/dist/core/request-auth.js +8 -0
  337. package/dist/core/request-auth.js.map +1 -0
  338. package/dist/core/research/evidence-bundle.d.ts +20 -0
  339. package/dist/core/research/evidence-bundle.d.ts.map +1 -1
  340. package/dist/core/research/evidence-bundle.js +173 -69
  341. package/dist/core/research/evidence-bundle.js.map +1 -1
  342. package/dist/core/resource-loader.d.ts.map +1 -1
  343. package/dist/core/resource-loader.js +16 -6
  344. package/dist/core/resource-loader.js.map +1 -1
  345. package/dist/core/risk-classifier.d.ts.map +1 -1
  346. package/dist/core/risk-classifier.js +8 -0
  347. package/dist/core/risk-classifier.js.map +1 -1
  348. package/dist/core/runtime-builder.d.ts +22 -3
  349. package/dist/core/runtime-builder.d.ts.map +1 -1
  350. package/dist/core/runtime-builder.js +147 -80
  351. package/dist/core/runtime-builder.js.map +1 -1
  352. package/dist/core/sdk.d.ts.map +1 -1
  353. package/dist/core/sdk.js +7 -1
  354. package/dist/core/sdk.js.map +1 -1
  355. package/dist/core/secrets/credential-exposure-guard.d.ts +9 -0
  356. package/dist/core/secrets/credential-exposure-guard.d.ts.map +1 -0
  357. package/dist/core/secrets/credential-exposure-guard.js +241 -0
  358. package/dist/core/secrets/credential-exposure-guard.js.map +1 -0
  359. package/dist/core/secrets/secret-dotenv.d.ts +27 -0
  360. package/dist/core/secrets/secret-dotenv.d.ts.map +1 -0
  361. package/dist/core/secrets/secret-dotenv.js +183 -0
  362. package/dist/core/secrets/secret-dotenv.js.map +1 -0
  363. package/dist/core/secrets/secret-vault-format.d.ts +112 -0
  364. package/dist/core/secrets/secret-vault-format.d.ts.map +1 -0
  365. package/dist/core/secrets/secret-vault-format.js +397 -0
  366. package/dist/core/secrets/secret-vault-format.js.map +1 -0
  367. package/dist/core/secrets/secret-vault.d.ts +72 -0
  368. package/dist/core/secrets/secret-vault.d.ts.map +1 -0
  369. package/dist/core/secrets/secret-vault.js +671 -0
  370. package/dist/core/secrets/secret-vault.js.map +1 -0
  371. package/dist/core/session-analytics.d.ts +4 -23
  372. package/dist/core/session-analytics.d.ts.map +1 -1
  373. package/dist/core/session-analytics.js +39 -69
  374. package/dist/core/session-analytics.js.map +1 -1
  375. package/dist/core/session-artifact-bundle.d.ts +35 -0
  376. package/dist/core/session-artifact-bundle.d.ts.map +1 -0
  377. package/dist/core/session-artifact-bundle.js +61 -0
  378. package/dist/core/session-artifact-bundle.js.map +1 -0
  379. package/dist/core/session-role.d.ts +5 -0
  380. package/dist/core/session-role.d.ts.map +1 -1
  381. package/dist/core/session-role.js +14 -1
  382. package/dist/core/session-role.js.map +1 -1
  383. package/dist/core/session-tree-navigator.d.ts +4 -6
  384. package/dist/core/session-tree-navigator.d.ts.map +1 -1
  385. package/dist/core/session-tree-navigator.js +4 -1
  386. package/dist/core/session-tree-navigator.js.map +1 -1
  387. package/dist/core/settings-manager.d.ts +1 -1
  388. package/dist/core/settings-manager.d.ts.map +1 -1
  389. package/dist/core/settings-manager.js +1 -1
  390. package/dist/core/settings-manager.js.map +1 -1
  391. package/dist/core/slash-commands.d.ts.map +1 -1
  392. package/dist/core/slash-commands.js +2 -2
  393. package/dist/core/slash-commands.js.map +1 -1
  394. package/dist/core/tool-capability-policy.d.ts.map +1 -1
  395. package/dist/core/tool-capability-policy.js +1 -0
  396. package/dist/core/tool-capability-policy.js.map +1 -1
  397. package/dist/core/tool-gate-controller.d.ts.map +1 -1
  398. package/dist/core/tool-gate-controller.js +8 -2
  399. package/dist/core/tool-gate-controller.js.map +1 -1
  400. package/dist/core/tool-protocol-controller.d.ts +2 -4
  401. package/dist/core/tool-protocol-controller.d.ts.map +1 -1
  402. package/dist/core/tool-protocol-controller.js.map +1 -1
  403. package/dist/core/tool-recovery-stats.d.ts +21 -1
  404. package/dist/core/tool-recovery-stats.d.ts.map +1 -1
  405. package/dist/core/tool-recovery-stats.js.map +1 -1
  406. package/dist/core/tools/bash.d.ts +5 -0
  407. package/dist/core/tools/bash.d.ts.map +1 -1
  408. package/dist/core/tools/bash.js +59 -5
  409. package/dist/core/tools/bash.js.map +1 -1
  410. package/dist/core/tools/delegate-status.d.ts +6 -1
  411. package/dist/core/tools/delegate-status.d.ts.map +1 -1
  412. package/dist/core/tools/delegate-status.js +106 -25
  413. package/dist/core/tools/delegate-status.js.map +1 -1
  414. package/dist/core/tools/delegate.d.ts +9 -1
  415. package/dist/core/tools/delegate.d.ts.map +1 -1
  416. package/dist/core/tools/delegate.js +329 -69
  417. package/dist/core/tools/delegate.js.map +1 -1
  418. package/dist/core/tools/git-filter.d.ts +1 -8
  419. package/dist/core/tools/git-filter.d.ts.map +1 -1
  420. package/dist/core/tools/git-filter.js +2 -63
  421. package/dist/core/tools/git-filter.js.map +1 -1
  422. package/dist/core/tools/goal.d.ts +5 -3
  423. package/dist/core/tools/goal.d.ts.map +1 -1
  424. package/dist/core/tools/goal.js +97 -19
  425. package/dist/core/tools/goal.js.map +1 -1
  426. package/dist/core/tools/index.d.ts +1 -0
  427. package/dist/core/tools/index.d.ts.map +1 -1
  428. package/dist/core/tools/index.js +1 -0
  429. package/dist/core/tools/index.js.map +1 -1
  430. package/dist/core/tools/orchestration-panel.d.ts +1 -4
  431. package/dist/core/tools/orchestration-panel.d.ts.map +1 -1
  432. package/dist/core/tools/orchestration-panel.js +0 -44
  433. package/dist/core/tools/orchestration-panel.js.map +1 -1
  434. package/dist/core/tools/output-accumulator.d.ts +11 -0
  435. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  436. package/dist/core/tools/output-accumulator.js +36 -3
  437. package/dist/core/tools/output-accumulator.js.map +1 -1
  438. package/dist/core/tools/python.d.ts +2 -0
  439. package/dist/core/tools/python.d.ts.map +1 -1
  440. package/dist/core/tools/python.js +3 -1
  441. package/dist/core/tools/python.js.map +1 -1
  442. package/dist/core/tools/read.d.ts.map +1 -1
  443. package/dist/core/tools/read.js +1 -1
  444. package/dist/core/tools/read.js.map +1 -1
  445. package/dist/core/tools/run-process.d.ts +1 -1
  446. package/dist/core/tools/run-process.d.ts.map +1 -1
  447. package/dist/core/tools/run-process.js +69 -9
  448. package/dist/core/tools/run-process.js.map +1 -1
  449. package/dist/core/tools/search-command-guard.d.ts +14 -0
  450. package/dist/core/tools/search-command-guard.d.ts.map +1 -0
  451. package/dist/core/tools/search-command-guard.js +333 -0
  452. package/dist/core/tools/search-command-guard.js.map +1 -0
  453. package/dist/core/tools/secret-store.d.ts +38 -0
  454. package/dist/core/tools/secret-store.d.ts.map +1 -0
  455. package/dist/core/tools/secret-store.js +412 -0
  456. package/dist/core/tools/secret-store.js.map +1 -0
  457. package/dist/core/tools/shell-command-parser.d.ts +16 -0
  458. package/dist/core/tools/shell-command-parser.d.ts.map +1 -0
  459. package/dist/core/tools/shell-command-parser.js +113 -0
  460. package/dist/core/tools/shell-command-parser.js.map +1 -0
  461. package/dist/core/tools/shell-contract-router.d.ts.map +1 -1
  462. package/dist/core/tools/shell-contract-router.js +12 -5
  463. package/dist/core/tools/shell-contract-router.js.map +1 -1
  464. package/dist/core/tools/task-steps.d.ts.map +1 -1
  465. package/dist/core/tools/task-steps.js +4 -7
  466. package/dist/core/tools/task-steps.js.map +1 -1
  467. package/dist/core/util/atomic-file.d.ts +6 -2
  468. package/dist/core/util/atomic-file.d.ts.map +1 -1
  469. package/dist/core/util/atomic-file.js +4 -4
  470. package/dist/core/util/atomic-file.js.map +1 -1
  471. package/dist/core/util/bounded-file.d.ts +15 -0
  472. package/dist/core/util/bounded-file.d.ts.map +1 -0
  473. package/dist/core/util/bounded-file.js +120 -0
  474. package/dist/core/util/bounded-file.js.map +1 -0
  475. package/dist/core/util/bounded-jsonl.d.ts.map +1 -1
  476. package/dist/core/util/bounded-jsonl.js +119 -9
  477. package/dist/core/util/bounded-jsonl.js.map +1 -1
  478. package/dist/core/util/bounded-value.d.ts +3 -0
  479. package/dist/core/util/bounded-value.d.ts.map +1 -0
  480. package/dist/core/util/bounded-value.js +12 -0
  481. package/dist/core/util/bounded-value.js.map +1 -0
  482. package/dist/core/util/value-guards.d.ts +2 -0
  483. package/dist/core/util/value-guards.d.ts.map +1 -1
  484. package/dist/core/util/value-guards.js +5 -0
  485. package/dist/core/util/value-guards.js.map +1 -1
  486. package/dist/index.d.ts +3 -2
  487. package/dist/index.d.ts.map +1 -1
  488. package/dist/index.js +2 -1
  489. package/dist/index.js.map +1 -1
  490. package/dist/main.d.ts.map +1 -1
  491. package/dist/main.js +25 -11
  492. package/dist/main.js.map +1 -1
  493. package/dist/modes/interactive/auth-dialogs-controller.d.ts +4 -0
  494. package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
  495. package/dist/modes/interactive/auth-dialogs-controller.js +60 -1
  496. package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
  497. package/dist/modes/interactive/components/activity-lane.d.ts +55 -0
  498. package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -0
  499. package/dist/modes/interactive/components/activity-lane.js +304 -0
  500. package/dist/modes/interactive/components/activity-lane.js.map +1 -0
  501. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  502. package/dist/modes/interactive/components/assistant-message.js +19 -10
  503. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  504. package/dist/modes/interactive/components/expandable-text.d.ts +12 -0
  505. package/dist/modes/interactive/components/expandable-text.d.ts.map +1 -0
  506. package/dist/modes/interactive/components/expandable-text.js +17 -0
  507. package/dist/modes/interactive/components/expandable-text.js.map +1 -0
  508. package/dist/modes/interactive/components/extension-editor.d.ts +15 -1
  509. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  510. package/dist/modes/interactive/components/extension-editor.js +30 -21
  511. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  512. package/dist/modes/interactive/components/extension-input.d.ts +1 -0
  513. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  514. package/dist/modes/interactive/components/extension-input.js +6 -1
  515. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  516. package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
  517. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  518. package/dist/modes/interactive/components/scoped-models-selector.js +23 -14
  519. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  520. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  521. package/dist/modes/interactive/components/session-selector.js +27 -44
  522. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  523. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  524. package/dist/modes/interactive/components/settings-selector.js +4 -4
  525. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  526. package/dist/modes/interactive/components/tool-execution.d.ts +19 -11
  527. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  528. package/dist/modes/interactive/components/tool-execution.js +53 -20
  529. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  530. package/dist/modes/interactive/components/tool-group.d.ts.map +1 -1
  531. package/dist/modes/interactive/components/tool-group.js +3 -0
  532. package/dist/modes/interactive/components/tool-group.js.map +1 -1
  533. package/dist/modes/interactive/components/usage-action-selector.d.ts +16 -0
  534. package/dist/modes/interactive/components/usage-action-selector.d.ts.map +1 -0
  535. package/dist/modes/interactive/components/usage-action-selector.js +46 -0
  536. package/dist/modes/interactive/components/usage-action-selector.js.map +1 -0
  537. package/dist/modes/interactive/extension-ui-host.d.ts.map +1 -1
  538. package/dist/modes/interactive/extension-ui-host.js +1 -0
  539. package/dist/modes/interactive/extension-ui-host.js.map +1 -1
  540. package/dist/modes/interactive/external-editor.d.ts +15 -0
  541. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  542. package/dist/modes/interactive/external-editor.js +27 -19
  543. package/dist/modes/interactive/external-editor.js.map +1 -1
  544. package/dist/modes/interactive/history-reload-math.d.ts +6 -2
  545. package/dist/modes/interactive/history-reload-math.d.ts.map +1 -1
  546. package/dist/modes/interactive/history-reload-math.js +10 -5
  547. package/dist/modes/interactive/history-reload-math.js.map +1 -1
  548. package/dist/modes/interactive/interactive-event-controller.d.ts +74 -0
  549. package/dist/modes/interactive/interactive-event-controller.d.ts.map +1 -0
  550. package/dist/modes/interactive/interactive-event-controller.js +328 -0
  551. package/dist/modes/interactive/interactive-event-controller.js.map +1 -0
  552. package/dist/modes/interactive/interactive-mode.d.ts +20 -25
  553. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  554. package/dist/modes/interactive/interactive-mode.js +196 -608
  555. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  556. package/dist/modes/interactive/loaded-resources-view.d.ts +20 -0
  557. package/dist/modes/interactive/loaded-resources-view.d.ts.map +1 -0
  558. package/dist/modes/interactive/loaded-resources-view.js +147 -0
  559. package/dist/modes/interactive/loaded-resources-view.js.map +1 -0
  560. package/dist/modes/interactive/resource-display.d.ts.map +1 -1
  561. package/dist/modes/interactive/resource-display.js +8 -2
  562. package/dist/modes/interactive/resource-display.js.map +1 -1
  563. package/dist/modes/interactive/resource-shell-commands.d.ts +1 -5
  564. package/dist/modes/interactive/resource-shell-commands.d.ts.map +1 -1
  565. package/dist/modes/interactive/resource-shell-commands.js +0 -5
  566. package/dist/modes/interactive/resource-shell-commands.js.map +1 -1
  567. package/dist/modes/interactive/session-flow-commands.d.ts +10 -6
  568. package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
  569. package/dist/modes/interactive/session-flow-commands.js +123 -70
  570. package/dist/modes/interactive/session-flow-commands.js.map +1 -1
  571. package/dist/modes/interactive/usage-commands.d.ts +34 -0
  572. package/dist/modes/interactive/usage-commands.d.ts.map +1 -0
  573. package/dist/modes/interactive/usage-commands.js +225 -0
  574. package/dist/modes/interactive/usage-commands.js.map +1 -0
  575. package/dist/utils/shell.d.ts.map +1 -1
  576. package/dist/utils/shell.js +5 -3
  577. package/dist/utils/shell.js.map +1 -1
  578. package/dist/utils/version-check.d.ts.map +1 -1
  579. package/dist/utils/version-check.js +3 -1
  580. package/dist/utils/version-check.js.map +1 -1
  581. package/docs/UI_POLISH_ORCHESTRATION.md +25 -31
  582. package/docs/UI_QUALITY_ORCHESTRATION.md +22 -24
  583. package/docs/providers.md +9 -1
  584. package/docs/tool-repair.md +3 -0
  585. package/docs/ui-reference/README.md +6 -6
  586. package/docs/ui-reference/orchestration-after.txt +14 -7
  587. package/docs/ui-reference/orchestration-before.txt +12 -6
  588. package/docs/ui-reference/orchestration-reference.txt +15 -5
  589. package/docs/usage.md +9 -1
  590. package/docs/windows.md +4 -2
  591. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  592. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  593. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  594. package/examples/extensions/sandbox/package-lock.json +2 -2
  595. package/examples/extensions/sandbox/package.json +1 -1
  596. package/examples/extensions/with-deps/package-lock.json +2 -2
  597. package/examples/extensions/with-deps/package.json +1 -1
  598. package/npm-shrinkwrap.json +13 -13
  599. package/package.json +4 -4
@@ -1,36 +1,184 @@
1
1
  import { isPlainRecord } from "../util/value-guards.js";
2
- function cloneJsonValue(value) {
3
- if (Array.isArray(value)) {
4
- return value.map(cloneJsonValue);
5
- }
6
- if (value !== null && typeof value === "object") {
7
- return Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, cloneJsonValue(nested)]));
2
+ /** Bounds every durable evidence bundle, including worker-authored evidence. */
3
+ export const MAX_EVIDENCE_QUERY_CHARS = 4_096;
4
+ export const MAX_EVIDENCE_CREATED_AT_CHARS = 128;
5
+ export const MAX_EVIDENCE_SOURCES = 64;
6
+ export const MAX_EVIDENCE_FINDINGS = 64;
7
+ export const MAX_EVIDENCE_SOURCE_ID_CHARS = 256;
8
+ export const MAX_EVIDENCE_FINDING_ID_CHARS = 256;
9
+ export const MAX_EVIDENCE_TEXT_CHARS = 8_000;
10
+ export const MAX_EVIDENCE_EXCERPT_CHARS = 8_000;
11
+ export const MAX_EVIDENCE_IDS_PER_FINDING = 64;
12
+ export const MAX_EVIDENCE_METADATA_DEPTH = 8;
13
+ export const MAX_EVIDENCE_METADATA_ENTRIES = 64;
14
+ export const MAX_EVIDENCE_METADATA_ARRAY_ITEMS = 64;
15
+ export const MAX_EVIDENCE_METADATA_KEY_CHARS = 256;
16
+ export const MAX_EVIDENCE_METADATA_STRING_CHARS = 4_096;
17
+ function invalidEvidence(message) {
18
+ throw new Error(`Invalid evidence bundle: ${message}`);
19
+ }
20
+ /**
21
+ * Reads only own data properties. This is deliberately not Object.entries()/spread: snapshots
22
+ * and external lane reports are untrusted, and a getter must never execute while validating them.
23
+ */
24
+ function ownDataRecord(value, label) {
25
+ if (!isPlainRecord(value))
26
+ invalidEvidence(`${label} must be a plain object.`);
27
+ const descriptors = Object.getOwnPropertyDescriptors(value);
28
+ const record = Object.create(null);
29
+ for (const [key, descriptor] of Object.entries(descriptors)) {
30
+ if (!("value" in descriptor))
31
+ invalidEvidence(`${label}.${key} must not be an accessor.`);
32
+ record[key] = descriptor.value;
8
33
  }
34
+ return record;
35
+ }
36
+ function requiredBoundedString(value, label, maximumChars) {
37
+ if (typeof value !== "string" || value.length === 0)
38
+ invalidEvidence(`${label} must be a non-empty string.`);
39
+ if (value.length > maximumChars)
40
+ invalidEvidence(`${label} exceeds ${maximumChars} characters.`);
9
41
  return value;
10
42
  }
11
- function cloneJsonObject(value) {
12
- return Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, cloneJsonValue(nested)]));
43
+ function optionalBoundedString(value, label, maximumChars) {
44
+ if (value === undefined)
45
+ return undefined;
46
+ return requiredBoundedString(value, label, maximumChars);
13
47
  }
14
- function isJsonValue(value) {
15
- if (value === null || typeof value === "string" || typeof value === "boolean") {
16
- return true;
48
+ function boundedArray(value, label, maximumItems) {
49
+ if (!Array.isArray(value))
50
+ invalidEvidence(`${label} must be an array.`);
51
+ if (value.length > maximumItems)
52
+ invalidEvidence(`${label} exceeds ${maximumItems} entries.`);
53
+ return value;
54
+ }
55
+ function ownArrayValue(array, index, label) {
56
+ const descriptor = Object.getOwnPropertyDescriptor(array, String(index));
57
+ if (!descriptor || !("value" in descriptor))
58
+ invalidEvidence(`${label}[${index}] must be a data value.`);
59
+ return descriptor.value;
60
+ }
61
+ function normalizeJsonValue(value, label, depth) {
62
+ if (value === null || typeof value === "boolean")
63
+ return value;
64
+ if (typeof value === "string") {
65
+ if (value.length > MAX_EVIDENCE_METADATA_STRING_CHARS) {
66
+ invalidEvidence(`${label} exceeds ${MAX_EVIDENCE_METADATA_STRING_CHARS} characters.`);
67
+ }
68
+ return value;
17
69
  }
18
70
  if (typeof value === "number") {
19
- return Number.isFinite(value);
71
+ if (!Number.isFinite(value))
72
+ invalidEvidence(`${label} must be finite.`);
73
+ return value;
74
+ }
75
+ if (depth >= MAX_EVIDENCE_METADATA_DEPTH) {
76
+ invalidEvidence(`${label} exceeds metadata depth ${MAX_EVIDENCE_METADATA_DEPTH}.`);
20
77
  }
21
78
  if (Array.isArray(value)) {
22
- return value.every(isJsonValue);
79
+ if (value.length > MAX_EVIDENCE_METADATA_ARRAY_ITEMS) {
80
+ invalidEvidence(`${label} exceeds ${MAX_EVIDENCE_METADATA_ARRAY_ITEMS} entries.`);
81
+ }
82
+ const copied = [];
83
+ for (let index = 0; index < value.length; index++) {
84
+ copied.push(normalizeJsonValue(ownArrayValue(value, index, label), `${label}[${index}]`, depth + 1));
85
+ }
86
+ return copied;
23
87
  }
24
- if (typeof value === "object") {
25
- return isJsonObject(value);
88
+ const record = ownDataRecord(value, label);
89
+ const entries = Object.entries(record);
90
+ if (entries.length > MAX_EVIDENCE_METADATA_ENTRIES) {
91
+ invalidEvidence(`${label} exceeds ${MAX_EVIDENCE_METADATA_ENTRIES} entries.`);
26
92
  }
27
- return false;
93
+ const copied = {};
94
+ for (const [key, nested] of entries) {
95
+ if (key.length > MAX_EVIDENCE_METADATA_KEY_CHARS) {
96
+ invalidEvidence(`${label} contains a key exceeding ${MAX_EVIDENCE_METADATA_KEY_CHARS} characters.`);
97
+ }
98
+ copied[key] = normalizeJsonValue(nested, `${label}.${key}`, depth + 1);
99
+ }
100
+ return copied;
28
101
  }
29
- function isJsonObject(value) {
30
- if (!isPlainRecord(value)) {
31
- return false;
102
+ function normalizeMetadata(value, label) {
103
+ const normalized = normalizeJsonValue(value, label, 0);
104
+ if (Array.isArray(normalized) || normalized === null || typeof normalized !== "object") {
105
+ invalidEvidence(`${label} must be an object.`);
32
106
  }
33
- return Object.values(value).every(isJsonValue);
107
+ return normalized;
108
+ }
109
+ /**
110
+ * Validates and copies an evidence bundle without invoking accessors or preserving unbounded
111
+ * foreign object graphs. This is the sole boundary used for durable worker-claim evidence.
112
+ */
113
+ export function normalizeEvidenceBundleForStorage(value) {
114
+ const bundle = ownDataRecord(value, "bundle");
115
+ const query = requiredBoundedString(bundle.query, "bundle.query", MAX_EVIDENCE_QUERY_CHARS);
116
+ const createdAt = optionalBoundedString(bundle.createdAt, "bundle.createdAt", MAX_EVIDENCE_CREATED_AT_CHARS);
117
+ const sourceValues = boundedArray(bundle.sources, "bundle.sources", MAX_EVIDENCE_SOURCES);
118
+ const findingValues = boundedArray(bundle.findings, "bundle.findings", MAX_EVIDENCE_FINDINGS);
119
+ const sources = [];
120
+ for (let index = 0; index < sourceValues.length; index++) {
121
+ const source = ownDataRecord(ownArrayValue(sourceValues, index, "bundle.sources"), `bundle.sources[${index}]`);
122
+ const sourceKind = source.kind;
123
+ if (typeof sourceKind !== "string" ||
124
+ !["workspace", "transcript", "automata", "web", "user", "tool"].includes(sourceKind)) {
125
+ invalidEvidence(`bundle.sources[${index}].kind is invalid.`);
126
+ }
127
+ const kind = sourceKind;
128
+ if (typeof source.trusted !== "boolean")
129
+ invalidEvidence(`bundle.sources[${index}].trusted must be boolean.`);
130
+ sources.push({
131
+ id: requiredBoundedString(source.id, `bundle.sources[${index}].id`, MAX_EVIDENCE_SOURCE_ID_CHARS),
132
+ kind,
133
+ trusted: source.trusted,
134
+ ...(source.title !== undefined
135
+ ? { title: optionalBoundedString(source.title, `bundle.sources[${index}].title`, MAX_EVIDENCE_TEXT_CHARS) }
136
+ : {}),
137
+ ...(source.uri !== undefined
138
+ ? { uri: optionalBoundedString(source.uri, `bundle.sources[${index}].uri`, MAX_EVIDENCE_TEXT_CHARS) }
139
+ : {}),
140
+ ...(source.excerpt !== undefined
141
+ ? {
142
+ excerpt: optionalBoundedString(source.excerpt, `bundle.sources[${index}].excerpt`, MAX_EVIDENCE_EXCERPT_CHARS),
143
+ }
144
+ : {}),
145
+ ...(source.metadata !== undefined
146
+ ? { metadata: normalizeMetadata(source.metadata, `bundle.sources[${index}].metadata`) }
147
+ : {}),
148
+ });
149
+ }
150
+ const findings = [];
151
+ for (let index = 0; index < findingValues.length; index++) {
152
+ const finding = ownDataRecord(ownArrayValue(findingValues, index, "bundle.findings"), `bundle.findings[${index}]`);
153
+ const evidenceIdValues = boundedArray(finding.evidenceIds, `bundle.findings[${index}].evidenceIds`, MAX_EVIDENCE_IDS_PER_FINDING);
154
+ const evidenceIds = [];
155
+ for (let evidenceIndex = 0; evidenceIndex < evidenceIdValues.length; evidenceIndex++) {
156
+ evidenceIds.push(requiredBoundedString(ownArrayValue(evidenceIdValues, evidenceIndex, `bundle.findings[${index}].evidenceIds`), `bundle.findings[${index}].evidenceIds[${evidenceIndex}]`, MAX_EVIDENCE_SOURCE_ID_CHARS));
157
+ }
158
+ if (finding.confidence !== undefined &&
159
+ (typeof finding.confidence !== "number" || !Number.isFinite(finding.confidence))) {
160
+ invalidEvidence(`bundle.findings[${index}].confidence must be finite.`);
161
+ }
162
+ findings.push({
163
+ id: requiredBoundedString(finding.id, `bundle.findings[${index}].id`, MAX_EVIDENCE_FINDING_ID_CHARS),
164
+ summary: requiredBoundedString(finding.summary, `bundle.findings[${index}].summary`, MAX_EVIDENCE_TEXT_CHARS),
165
+ evidenceIds,
166
+ ...(finding.confidence !== undefined ? { confidence: finding.confidence } : {}),
167
+ });
168
+ }
169
+ return { query, sources, findings, ...(createdAt !== undefined ? { createdAt } : {}) };
170
+ }
171
+ function cloneJsonValue(value) {
172
+ if (Array.isArray(value)) {
173
+ return value.map(cloneJsonValue);
174
+ }
175
+ if (value !== null && typeof value === "object") {
176
+ return Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, cloneJsonValue(nested)]));
177
+ }
178
+ return value;
179
+ }
180
+ function cloneJsonObject(value) {
181
+ return Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, cloneJsonValue(nested)]));
34
182
  }
35
183
  function cloneEvidenceRef(source) {
36
184
  return {
@@ -53,59 +201,15 @@ export function createEvidenceBundle(args) {
53
201
  };
54
202
  }
55
203
  export function cloneEvidenceBundleForStorage(bundle) {
56
- return {
57
- query: bundle.query,
58
- sources: bundle.sources.map(cloneEvidenceRef),
59
- findings: bundle.findings.map(cloneFinding),
60
- createdAt: bundle.createdAt,
61
- };
204
+ return normalizeEvidenceBundleForStorage(bundle);
62
205
  }
63
206
  export function isEvidenceBundle(value) {
64
- if (!isPlainRecord(value))
65
- return false;
66
- const bundle = value;
67
- if (typeof bundle.query !== "string")
68
- return false;
69
- if (bundle.createdAt !== undefined && typeof bundle.createdAt !== "string")
70
- return false;
71
- if (!Array.isArray(bundle.sources))
72
- return false;
73
- for (const source of bundle.sources) {
74
- if (!isPlainRecord(source))
75
- return false;
76
- const ref = source;
77
- if (typeof ref.id !== "string")
78
- return false;
79
- if (typeof ref.kind !== "string" ||
80
- !["workspace", "transcript", "automata", "web", "user", "tool"].includes(ref.kind)) {
81
- return false;
82
- }
83
- if (typeof ref.trusted !== "boolean")
84
- return false;
85
- if (ref.title !== undefined && typeof ref.title !== "string")
86
- return false;
87
- if (ref.uri !== undefined && typeof ref.uri !== "string")
88
- return false;
89
- if (ref.excerpt !== undefined && typeof ref.excerpt !== "string")
90
- return false;
91
- if (ref.metadata !== undefined && !isJsonObject(ref.metadata))
92
- return false;
207
+ try {
208
+ normalizeEvidenceBundleForStorage(value);
209
+ return true;
93
210
  }
94
- if (!Array.isArray(bundle.findings))
211
+ catch {
95
212
  return false;
96
- for (const finding of bundle.findings) {
97
- if (!isPlainRecord(finding))
98
- return false;
99
- const f = finding;
100
- if (typeof f.id !== "string")
101
- return false;
102
- if (typeof f.summary !== "string")
103
- return false;
104
- if (f.confidence !== undefined && (typeof f.confidence !== "number" || !Number.isFinite(f.confidence)))
105
- return false;
106
- if (!Array.isArray(f.evidenceIds) || !f.evidenceIds.every((id) => typeof id === "string"))
107
- return false;
108
213
  }
109
- return true;
110
214
  }
111
215
  //# sourceMappingURL=evidence-bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evidence-bundle.js","sourceRoot":"","sources":["../../../src/core/research/evidence-bundle.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EvidenceBundle, EvidenceRef, Finding, JsonObject, JsonValue } from \"../autonomy/contracts.ts\";\nimport { isPlainRecord } from \"../util/value-guards.ts\";\n\nfunction cloneJsonValue(value: JsonValue): JsonValue {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(cloneJsonValue);\n\t}\n\tif (value !== null && typeof value === \"object\") {\n\t\treturn Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, cloneJsonValue(nested)]));\n\t}\n\treturn value;\n}\n\nfunction cloneJsonObject(value: JsonObject): JsonObject {\n\treturn Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, cloneJsonValue(nested)]));\n}\n\nfunction isJsonValue(value: unknown): value is JsonValue {\n\tif (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n\t\treturn true;\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn Number.isFinite(value);\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.every(isJsonValue);\n\t}\n\tif (typeof value === \"object\") {\n\t\treturn isJsonObject(value);\n\t}\n\treturn false;\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n\tif (!isPlainRecord(value)) {\n\t\treturn false;\n\t}\n\treturn Object.values(value).every(isJsonValue);\n}\n\nfunction cloneEvidenceRef(source: EvidenceRef): EvidenceRef {\n\treturn {\n\t\t...source,\n\t\tmetadata: source.metadata ? cloneJsonObject(source.metadata) : undefined,\n\t};\n}\n\nfunction cloneFinding(finding: Finding): Finding {\n\treturn {\n\t\t...finding,\n\t\tevidenceIds: [...finding.evidenceIds],\n\t};\n}\n\nexport function createEvidenceBundle(args: {\n\tquery: string;\n\tsources: readonly EvidenceRef[];\n\tfindings: readonly Finding[];\n\tnow?: string;\n}): EvidenceBundle {\n\treturn {\n\t\tquery: args.query,\n\t\tsources: args.sources.map(cloneEvidenceRef),\n\t\tfindings: args.findings.map(cloneFinding),\n\t\tcreatedAt: args.now,\n\t};\n}\n\nexport function cloneEvidenceBundleForStorage(bundle: EvidenceBundle): EvidenceBundle {\n\treturn {\n\t\tquery: bundle.query,\n\t\tsources: bundle.sources.map(cloneEvidenceRef),\n\t\tfindings: bundle.findings.map(cloneFinding),\n\t\tcreatedAt: bundle.createdAt,\n\t};\n}\n\nexport function isEvidenceBundle(value: unknown): value is EvidenceBundle {\n\tif (!isPlainRecord(value)) return false;\n\tconst bundle = value as Record<string, unknown>;\n\n\tif (typeof bundle.query !== \"string\") return false;\n\tif (bundle.createdAt !== undefined && typeof bundle.createdAt !== \"string\") return false;\n\n\tif (!Array.isArray(bundle.sources)) return false;\n\tfor (const source of bundle.sources) {\n\t\tif (!isPlainRecord(source)) return false;\n\t\tconst ref = source as Record<string, unknown>;\n\t\tif (typeof ref.id !== \"string\") return false;\n\t\tif (\n\t\t\ttypeof ref.kind !== \"string\" ||\n\t\t\t![\"workspace\", \"transcript\", \"automata\", \"web\", \"user\", \"tool\"].includes(ref.kind)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tif (typeof ref.trusted !== \"boolean\") return false;\n\t\tif (ref.title !== undefined && typeof ref.title !== \"string\") return false;\n\t\tif (ref.uri !== undefined && typeof ref.uri !== \"string\") return false;\n\t\tif (ref.excerpt !== undefined && typeof ref.excerpt !== \"string\") return false;\n\t\tif (ref.metadata !== undefined && !isJsonObject(ref.metadata)) return false;\n\t}\n\n\tif (!Array.isArray(bundle.findings)) return false;\n\tfor (const finding of bundle.findings) {\n\t\tif (!isPlainRecord(finding)) return false;\n\t\tconst f = finding as Record<string, unknown>;\n\t\tif (typeof f.id !== \"string\") return false;\n\t\tif (typeof f.summary !== \"string\") return false;\n\t\tif (f.confidence !== undefined && (typeof f.confidence !== \"number\" || !Number.isFinite(f.confidence)))\n\t\t\treturn false;\n\t\tif (!Array.isArray(f.evidenceIds) || !f.evidenceIds.every((id) => typeof id === \"string\")) return false;\n\t}\n\n\treturn true;\n}\n"]}
1
+ {"version":3,"file":"evidence-bundle.js","sourceRoot":"","sources":["../../../src/core/research/evidence-bundle.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,gFAAgF;AAChF,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAChD,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AACjD,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAChD,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAC/C,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAChD,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,CAAC;AACpD,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AACnD,MAAM,CAAC,MAAM,kCAAkC,GAAG,KAAK,CAAC;AAExD,SAAS,eAAe,CAAC,OAAe,EAAS;IAChD,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;AAAA,CACvD;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa,EAA2B;IAC9E,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,eAAe,CAAC,GAAG,KAAK,0BAA0B,CAAC,CAAC;IAC/E,MAAM,WAAW,GAAG,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,MAAM,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAA4B,CAAC;IACvF,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC;YAAE,eAAe,CAAC,GAAG,KAAK,IAAI,GAAG,2BAA2B,CAAC,CAAC;QAC1F,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAAA,CACd;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,KAAa,EAAE,YAAoB,EAAU;IAC3F,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,eAAe,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAC7G,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY;QAAE,eAAe,CAAC,GAAG,KAAK,YAAY,YAAY,cAAc,CAAC,CAAC;IACjG,OAAO,KAAK,CAAC;AAAA,CACb;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,KAAa,EAAE,YAAoB,EAAsB;IACvG,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAAA,CACzD;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,KAAa,EAAE,YAAoB,EAAsB;IAC9F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,eAAe,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IACzE,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY;QAAE,eAAe,CAAC,GAAG,KAAK,YAAY,YAAY,WAAW,CAAC,CAAC;IAC9F,OAAO,KAAK,CAAC;AAAA,CACb;AAED,SAAS,aAAa,CAAC,KAAyB,EAAE,KAAa,EAAE,KAAa,EAAW;IACxF,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC;QAAE,eAAe,CAAC,GAAG,KAAK,IAAI,KAAK,yBAAyB,CAAC,CAAC;IACzG,OAAO,UAAU,CAAC,KAAK,CAAC;AAAA,CACxB;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,KAAa,EAAE,KAAa,EAAa;IACpF,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,kCAAkC,EAAE,CAAC;YACvD,eAAe,CAAC,GAAG,KAAK,YAAY,kCAAkC,cAAc,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,eAAe,CAAC,GAAG,KAAK,kBAAkB,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,KAAK,IAAI,2BAA2B,EAAE,CAAC;QAC1C,eAAe,CAAC,GAAG,KAAK,2BAA2B,2BAA2B,GAAG,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,MAAM,GAAG,iCAAiC,EAAE,CAAC;YACtD,eAAe,CAAC,GAAG,KAAK,YAAY,iCAAiC,WAAW,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,KAAK,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACtG,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,MAAM,GAAG,6BAA6B,EAAE,CAAC;QACpD,eAAe,CAAC,GAAG,KAAK,YAAY,6BAA6B,WAAW,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,MAAM,GAAG,+BAA+B,EAAE,CAAC;YAClD,eAAe,CAAC,GAAG,KAAK,6BAA6B,+BAA+B,cAAc,CAAC,CAAC;QACrG,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC;AAAA,CACd;AAED,SAAS,iBAAiB,CAAC,KAAc,EAAE,KAAa,EAAc;IACrE,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACxF,eAAe,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,UAAU,CAAC;AAAA,CAClB;AAED;;;GAGG;AACH,MAAM,UAAU,iCAAiC,CAAC,KAAc,EAAkB;IACjF,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,wBAAwB,CAAC,CAAC;IAC5F,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,EAAE,6BAA6B,CAAC,CAAC;IAC7G,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;IAC1F,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,gBAAgB,CAAC,EAAE,kBAAkB,KAAK,GAAG,CAAC,CAAC;QAC/G,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QAC/B,IACC,OAAO,UAAU,KAAK,QAAQ;YAC9B,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EACnF,CAAC;YACF,eAAe,CAAC,kBAAkB,KAAK,oBAAoB,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,IAAI,GAAG,UAAgC,CAAC;QAC9C,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS;YAAE,eAAe,CAAC,kBAAkB,KAAK,4BAA4B,CAAC,CAAC;QAC9G,OAAO,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,qBAAqB,CAAC,MAAM,CAAC,EAAE,EAAE,kBAAkB,KAAK,MAAM,EAAE,4BAA4B,CAAC;YACjG,IAAI;YACJ,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS;gBAC7B,CAAC,CAAC,EAAE,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,KAAK,SAAS,EAAE,uBAAuB,CAAC,EAAE;gBAC3G,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS;gBAC3B,CAAC,CAAC,EAAE,GAAG,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,EAAE,uBAAuB,CAAC,EAAE;gBACrG,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS;gBAC/B,CAAC,CAAC;oBACA,OAAO,EAAE,qBAAqB,CAC7B,MAAM,CAAC,OAAO,EACd,kBAAkB,KAAK,WAAW,EAClC,0BAA0B,CAC1B;iBACD;gBACF,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS;gBAChC,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,KAAK,YAAY,CAAC,EAAE;gBACvF,CAAC,CAAC,EAAE,CAAC;SACN,CAAC,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,aAAa,CAC5B,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,iBAAiB,CAAC,EACtD,mBAAmB,KAAK,GAAG,CAC3B,CAAC;QACF,MAAM,gBAAgB,GAAG,YAAY,CACpC,OAAO,CAAC,WAAW,EACnB,mBAAmB,KAAK,eAAe,EACvC,4BAA4B,CAC5B,CAAC;QACF,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,KAAK,IAAI,aAAa,GAAG,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC;YACtF,WAAW,CAAC,IAAI,CACf,qBAAqB,CACpB,aAAa,CAAC,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,KAAK,eAAe,CAAC,EACvF,mBAAmB,KAAK,iBAAiB,aAAa,GAAG,EACzD,4BAA4B,CAC5B,CACD,CAAC;QACH,CAAC;QACD,IACC,OAAO,CAAC,UAAU,KAAK,SAAS;YAChC,CAAC,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAC/E,CAAC;YACF,eAAe,CAAC,mBAAmB,KAAK,8BAA8B,CAAC,CAAC;QACzE,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACb,EAAE,EAAE,qBAAqB,CAAC,OAAO,CAAC,EAAE,EAAE,mBAAmB,KAAK,MAAM,EAAE,6BAA6B,CAAC;YACpG,OAAO,EAAE,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,KAAK,WAAW,EAAE,uBAAuB,CAAC;YAC7G,WAAW;YACX,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/E,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAAA,CACvF;AAED,SAAS,cAAc,CAAC,KAAgB,EAAa;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,KAAK,CAAC;AAAA,CACb;AAED,SAAS,eAAe,CAAC,KAAiB,EAAc;IACvD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,CACvG;AAED,SAAS,gBAAgB,CAAC,MAAmB,EAAe;IAC3D,OAAO;QACN,GAAG,MAAM;QACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;KACxE,CAAC;AAAA,CACF;AAED,SAAS,YAAY,CAAC,OAAgB,EAAW;IAChD,OAAO;QACN,GAAG,OAAO;QACV,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;KACrC,CAAC;AAAA,CACF;AAED,MAAM,UAAU,oBAAoB,CAAC,IAKpC,EAAkB;IAClB,OAAO;QACN,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;QACzC,SAAS,EAAE,IAAI,CAAC,GAAG;KACnB,CAAC;AAAA,CACF;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAsB,EAAkB;IACrF,OAAO,iCAAiC,CAAC,MAAM,CAAC,CAAC;AAAA,CACjD;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAA2B;IACzE,IAAI,CAAC;QACJ,iCAAiC,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AAAA,CACD","sourcesContent":["import type {\n\tEvidenceBundle,\n\tEvidenceRef,\n\tEvidenceSourceKind,\n\tFinding,\n\tJsonObject,\n\tJsonValue,\n} from \"../autonomy/contracts.ts\";\nimport { isPlainRecord } from \"../util/value-guards.ts\";\n\n/** Bounds every durable evidence bundle, including worker-authored evidence. */\nexport const MAX_EVIDENCE_QUERY_CHARS = 4_096;\nexport const MAX_EVIDENCE_CREATED_AT_CHARS = 128;\nexport const MAX_EVIDENCE_SOURCES = 64;\nexport const MAX_EVIDENCE_FINDINGS = 64;\nexport const MAX_EVIDENCE_SOURCE_ID_CHARS = 256;\nexport const MAX_EVIDENCE_FINDING_ID_CHARS = 256;\nexport const MAX_EVIDENCE_TEXT_CHARS = 8_000;\nexport const MAX_EVIDENCE_EXCERPT_CHARS = 8_000;\nexport const MAX_EVIDENCE_IDS_PER_FINDING = 64;\nexport const MAX_EVIDENCE_METADATA_DEPTH = 8;\nexport const MAX_EVIDENCE_METADATA_ENTRIES = 64;\nexport const MAX_EVIDENCE_METADATA_ARRAY_ITEMS = 64;\nexport const MAX_EVIDENCE_METADATA_KEY_CHARS = 256;\nexport const MAX_EVIDENCE_METADATA_STRING_CHARS = 4_096;\n\nfunction invalidEvidence(message: string): never {\n\tthrow new Error(`Invalid evidence bundle: ${message}`);\n}\n\n/**\n * Reads only own data properties. This is deliberately not Object.entries()/spread: snapshots\n * and external lane reports are untrusted, and a getter must never execute while validating them.\n */\nfunction ownDataRecord(value: unknown, label: string): Record<string, unknown> {\n\tif (!isPlainRecord(value)) invalidEvidence(`${label} must be a plain object.`);\n\tconst descriptors = Object.getOwnPropertyDescriptors(value);\n\tconst record: Record<string, unknown> = Object.create(null) as Record<string, unknown>;\n\tfor (const [key, descriptor] of Object.entries(descriptors)) {\n\t\tif (!(\"value\" in descriptor)) invalidEvidence(`${label}.${key} must not be an accessor.`);\n\t\trecord[key] = descriptor.value;\n\t}\n\treturn record;\n}\n\nfunction requiredBoundedString(value: unknown, label: string, maximumChars: number): string {\n\tif (typeof value !== \"string\" || value.length === 0) invalidEvidence(`${label} must be a non-empty string.`);\n\tif (value.length > maximumChars) invalidEvidence(`${label} exceeds ${maximumChars} characters.`);\n\treturn value;\n}\n\nfunction optionalBoundedString(value: unknown, label: string, maximumChars: number): string | undefined {\n\tif (value === undefined) return undefined;\n\treturn requiredBoundedString(value, label, maximumChars);\n}\n\nfunction boundedArray(value: unknown, label: string, maximumItems: number): readonly unknown[] {\n\tif (!Array.isArray(value)) invalidEvidence(`${label} must be an array.`);\n\tif (value.length > maximumItems) invalidEvidence(`${label} exceeds ${maximumItems} entries.`);\n\treturn value;\n}\n\nfunction ownArrayValue(array: readonly unknown[], index: number, label: string): unknown {\n\tconst descriptor = Object.getOwnPropertyDescriptor(array, String(index));\n\tif (!descriptor || !(\"value\" in descriptor)) invalidEvidence(`${label}[${index}] must be a data value.`);\n\treturn descriptor.value;\n}\n\nfunction normalizeJsonValue(value: unknown, label: string, depth: number): JsonValue {\n\tif (value === null || typeof value === \"boolean\") return value;\n\tif (typeof value === \"string\") {\n\t\tif (value.length > MAX_EVIDENCE_METADATA_STRING_CHARS) {\n\t\t\tinvalidEvidence(`${label} exceeds ${MAX_EVIDENCE_METADATA_STRING_CHARS} characters.`);\n\t\t}\n\t\treturn value;\n\t}\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isFinite(value)) invalidEvidence(`${label} must be finite.`);\n\t\treturn value;\n\t}\n\tif (depth >= MAX_EVIDENCE_METADATA_DEPTH) {\n\t\tinvalidEvidence(`${label} exceeds metadata depth ${MAX_EVIDENCE_METADATA_DEPTH}.`);\n\t}\n\tif (Array.isArray(value)) {\n\t\tif (value.length > MAX_EVIDENCE_METADATA_ARRAY_ITEMS) {\n\t\t\tinvalidEvidence(`${label} exceeds ${MAX_EVIDENCE_METADATA_ARRAY_ITEMS} entries.`);\n\t\t}\n\t\tconst copied: JsonValue[] = [];\n\t\tfor (let index = 0; index < value.length; index++) {\n\t\t\tcopied.push(normalizeJsonValue(ownArrayValue(value, index, label), `${label}[${index}]`, depth + 1));\n\t\t}\n\t\treturn copied;\n\t}\n\tconst record = ownDataRecord(value, label);\n\tconst entries = Object.entries(record);\n\tif (entries.length > MAX_EVIDENCE_METADATA_ENTRIES) {\n\t\tinvalidEvidence(`${label} exceeds ${MAX_EVIDENCE_METADATA_ENTRIES} entries.`);\n\t}\n\tconst copied: JsonObject = {};\n\tfor (const [key, nested] of entries) {\n\t\tif (key.length > MAX_EVIDENCE_METADATA_KEY_CHARS) {\n\t\t\tinvalidEvidence(`${label} contains a key exceeding ${MAX_EVIDENCE_METADATA_KEY_CHARS} characters.`);\n\t\t}\n\t\tcopied[key] = normalizeJsonValue(nested, `${label}.${key}`, depth + 1);\n\t}\n\treturn copied;\n}\n\nfunction normalizeMetadata(value: unknown, label: string): JsonObject {\n\tconst normalized = normalizeJsonValue(value, label, 0);\n\tif (Array.isArray(normalized) || normalized === null || typeof normalized !== \"object\") {\n\t\tinvalidEvidence(`${label} must be an object.`);\n\t}\n\treturn normalized;\n}\n\n/**\n * Validates and copies an evidence bundle without invoking accessors or preserving unbounded\n * foreign object graphs. This is the sole boundary used for durable worker-claim evidence.\n */\nexport function normalizeEvidenceBundleForStorage(value: unknown): EvidenceBundle {\n\tconst bundle = ownDataRecord(value, \"bundle\");\n\tconst query = requiredBoundedString(bundle.query, \"bundle.query\", MAX_EVIDENCE_QUERY_CHARS);\n\tconst createdAt = optionalBoundedString(bundle.createdAt, \"bundle.createdAt\", MAX_EVIDENCE_CREATED_AT_CHARS);\n\tconst sourceValues = boundedArray(bundle.sources, \"bundle.sources\", MAX_EVIDENCE_SOURCES);\n\tconst findingValues = boundedArray(bundle.findings, \"bundle.findings\", MAX_EVIDENCE_FINDINGS);\n\tconst sources: EvidenceRef[] = [];\n\tfor (let index = 0; index < sourceValues.length; index++) {\n\t\tconst source = ownDataRecord(ownArrayValue(sourceValues, index, \"bundle.sources\"), `bundle.sources[${index}]`);\n\t\tconst sourceKind = source.kind;\n\t\tif (\n\t\t\ttypeof sourceKind !== \"string\" ||\n\t\t\t![\"workspace\", \"transcript\", \"automata\", \"web\", \"user\", \"tool\"].includes(sourceKind)\n\t\t) {\n\t\t\tinvalidEvidence(`bundle.sources[${index}].kind is invalid.`);\n\t\t}\n\t\tconst kind = sourceKind as EvidenceSourceKind;\n\t\tif (typeof source.trusted !== \"boolean\") invalidEvidence(`bundle.sources[${index}].trusted must be boolean.`);\n\t\tsources.push({\n\t\t\tid: requiredBoundedString(source.id, `bundle.sources[${index}].id`, MAX_EVIDENCE_SOURCE_ID_CHARS),\n\t\t\tkind,\n\t\t\ttrusted: source.trusted,\n\t\t\t...(source.title !== undefined\n\t\t\t\t? { title: optionalBoundedString(source.title, `bundle.sources[${index}].title`, MAX_EVIDENCE_TEXT_CHARS) }\n\t\t\t\t: {}),\n\t\t\t...(source.uri !== undefined\n\t\t\t\t? { uri: optionalBoundedString(source.uri, `bundle.sources[${index}].uri`, MAX_EVIDENCE_TEXT_CHARS) }\n\t\t\t\t: {}),\n\t\t\t...(source.excerpt !== undefined\n\t\t\t\t? {\n\t\t\t\t\t\texcerpt: optionalBoundedString(\n\t\t\t\t\t\t\tsource.excerpt,\n\t\t\t\t\t\t\t`bundle.sources[${index}].excerpt`,\n\t\t\t\t\t\t\tMAX_EVIDENCE_EXCERPT_CHARS,\n\t\t\t\t\t\t),\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(source.metadata !== undefined\n\t\t\t\t? { metadata: normalizeMetadata(source.metadata, `bundle.sources[${index}].metadata`) }\n\t\t\t\t: {}),\n\t\t});\n\t}\n\tconst findings: Finding[] = [];\n\tfor (let index = 0; index < findingValues.length; index++) {\n\t\tconst finding = ownDataRecord(\n\t\t\townArrayValue(findingValues, index, \"bundle.findings\"),\n\t\t\t`bundle.findings[${index}]`,\n\t\t);\n\t\tconst evidenceIdValues = boundedArray(\n\t\t\tfinding.evidenceIds,\n\t\t\t`bundle.findings[${index}].evidenceIds`,\n\t\t\tMAX_EVIDENCE_IDS_PER_FINDING,\n\t\t);\n\t\tconst evidenceIds: string[] = [];\n\t\tfor (let evidenceIndex = 0; evidenceIndex < evidenceIdValues.length; evidenceIndex++) {\n\t\t\tevidenceIds.push(\n\t\t\t\trequiredBoundedString(\n\t\t\t\t\townArrayValue(evidenceIdValues, evidenceIndex, `bundle.findings[${index}].evidenceIds`),\n\t\t\t\t\t`bundle.findings[${index}].evidenceIds[${evidenceIndex}]`,\n\t\t\t\t\tMAX_EVIDENCE_SOURCE_ID_CHARS,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tfinding.confidence !== undefined &&\n\t\t\t(typeof finding.confidence !== \"number\" || !Number.isFinite(finding.confidence))\n\t\t) {\n\t\t\tinvalidEvidence(`bundle.findings[${index}].confidence must be finite.`);\n\t\t}\n\t\tfindings.push({\n\t\t\tid: requiredBoundedString(finding.id, `bundle.findings[${index}].id`, MAX_EVIDENCE_FINDING_ID_CHARS),\n\t\t\tsummary: requiredBoundedString(finding.summary, `bundle.findings[${index}].summary`, MAX_EVIDENCE_TEXT_CHARS),\n\t\t\tevidenceIds,\n\t\t\t...(finding.confidence !== undefined ? { confidence: finding.confidence } : {}),\n\t\t});\n\t}\n\treturn { query, sources, findings, ...(createdAt !== undefined ? { createdAt } : {}) };\n}\n\nfunction cloneJsonValue(value: JsonValue): JsonValue {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(cloneJsonValue);\n\t}\n\tif (value !== null && typeof value === \"object\") {\n\t\treturn Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, cloneJsonValue(nested)]));\n\t}\n\treturn value;\n}\n\nfunction cloneJsonObject(value: JsonObject): JsonObject {\n\treturn Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, cloneJsonValue(nested)]));\n}\n\nfunction cloneEvidenceRef(source: EvidenceRef): EvidenceRef {\n\treturn {\n\t\t...source,\n\t\tmetadata: source.metadata ? cloneJsonObject(source.metadata) : undefined,\n\t};\n}\n\nfunction cloneFinding(finding: Finding): Finding {\n\treturn {\n\t\t...finding,\n\t\tevidenceIds: [...finding.evidenceIds],\n\t};\n}\n\nexport function createEvidenceBundle(args: {\n\tquery: string;\n\tsources: readonly EvidenceRef[];\n\tfindings: readonly Finding[];\n\tnow?: string;\n}): EvidenceBundle {\n\treturn {\n\t\tquery: args.query,\n\t\tsources: args.sources.map(cloneEvidenceRef),\n\t\tfindings: args.findings.map(cloneFinding),\n\t\tcreatedAt: args.now,\n\t};\n}\n\nexport function cloneEvidenceBundleForStorage(bundle: EvidenceBundle): EvidenceBundle {\n\treturn normalizeEvidenceBundleForStorage(bundle);\n}\n\nexport function isEvidenceBundle(value: unknown): value is EvidenceBundle {\n\ttry {\n\t\tnormalizeEvidenceBundleForStorage(value);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n"]}