@orion-agents/orion-code 0.1.3 → 0.1.4-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (520) hide show
  1. package/README.md +26 -4
  2. package/README.zh-CN.md +41 -5
  3. package/dist/agents/coder.d.ts.map +1 -1
  4. package/dist/agents/coder.js.map +1 -1
  5. package/dist/agents/fork.d.ts +12 -4
  6. package/dist/agents/fork.d.ts.map +1 -1
  7. package/dist/agents/fork.js +28 -32
  8. package/dist/agents/fork.js.map +1 -1
  9. package/dist/agents/leader.d.ts.map +1 -1
  10. package/dist/agents/leader.js.map +1 -1
  11. package/dist/agents/worker-pool.d.ts.map +1 -1
  12. package/dist/agents/worker-pool.js +38 -29
  13. package/dist/agents/worker-pool.js.map +1 -1
  14. package/dist/cli.d.ts +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +0 -1
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/context-commands.d.ts +4 -0
  19. package/dist/commands/context-commands.d.ts.map +1 -0
  20. package/dist/commands/context-commands.js +52 -0
  21. package/dist/commands/context-commands.js.map +1 -0
  22. package/dist/commands/context-tool-command-handlers.d.ts +13 -0
  23. package/dist/commands/context-tool-command-handlers.d.ts.map +1 -0
  24. package/dist/commands/context-tool-command-handlers.js +573 -0
  25. package/dist/commands/context-tool-command-handlers.js.map +1 -0
  26. package/dist/commands/core-command-handlers.d.ts +12 -0
  27. package/dist/commands/core-command-handlers.d.ts.map +1 -0
  28. package/dist/commands/core-command-handlers.js +798 -0
  29. package/dist/commands/core-command-handlers.js.map +1 -0
  30. package/dist/commands/diagnostic-command-handlers.d.ts +14 -0
  31. package/dist/commands/diagnostic-command-handlers.d.ts.map +1 -0
  32. package/dist/commands/diagnostic-command-handlers.js +1043 -0
  33. package/dist/commands/diagnostic-command-handlers.js.map +1 -0
  34. package/dist/commands/diagnostic-commands.d.ts +4 -0
  35. package/dist/commands/diagnostic-commands.d.ts.map +1 -0
  36. package/dist/commands/diagnostic-commands.js +132 -0
  37. package/dist/commands/diagnostic-commands.js.map +1 -0
  38. package/dist/commands/index.d.ts +7 -8
  39. package/dist/commands/index.d.ts.map +1 -1
  40. package/dist/commands/index.js +34 -3562
  41. package/dist/commands/index.js.map +1 -1
  42. package/dist/commands/legacy-commands.d.ts +4 -0
  43. package/dist/commands/legacy-commands.d.ts.map +1 -0
  44. package/dist/commands/legacy-commands.js +44 -0
  45. package/dist/commands/legacy-commands.js.map +1 -0
  46. package/dist/commands/model-command-handlers.d.ts +13 -0
  47. package/dist/commands/model-command-handlers.d.ts.map +1 -0
  48. package/dist/commands/model-command-handlers.js +314 -0
  49. package/dist/commands/model-command-handlers.js.map +1 -0
  50. package/dist/commands/model-commands.d.ts +4 -0
  51. package/dist/commands/model-commands.d.ts.map +1 -0
  52. package/dist/commands/model-commands.js +52 -0
  53. package/dist/commands/model-commands.js.map +1 -0
  54. package/dist/commands/session-command-handlers.d.ts +9 -0
  55. package/dist/commands/session-command-handlers.d.ts.map +1 -0
  56. package/dist/commands/session-command-handlers.js +566 -0
  57. package/dist/commands/session-command-handlers.js.map +1 -0
  58. package/dist/commands/session-commands.d.ts +4 -0
  59. package/dist/commands/session-commands.d.ts.map +1 -0
  60. package/dist/commands/session-commands.js +78 -0
  61. package/dist/commands/session-commands.js.map +1 -0
  62. package/dist/commands/system-commands.d.ts +4 -0
  63. package/dist/commands/system-commands.d.ts.map +1 -0
  64. package/dist/commands/system-commands.js +92 -0
  65. package/dist/commands/system-commands.js.map +1 -0
  66. package/dist/commands/target-command.d.ts.map +1 -1
  67. package/dist/commands/target-command.js +29 -2
  68. package/dist/commands/target-command.js.map +1 -1
  69. package/dist/commands/tool-commands.d.ts +4 -0
  70. package/dist/commands/tool-commands.d.ts.map +1 -0
  71. package/dist/commands/tool-commands.js +49 -0
  72. package/dist/commands/tool-commands.js.map +1 -0
  73. package/dist/commands/types.d.ts +4 -4
  74. package/dist/commands/workflow-command-handlers.d.ts +7 -0
  75. package/dist/commands/workflow-command-handlers.d.ts.map +1 -0
  76. package/dist/commands/workflow-command-handlers.js +35 -0
  77. package/dist/commands/workflow-command-handlers.js.map +1 -0
  78. package/dist/commands/workflow-commands.d.ts +4 -0
  79. package/dist/commands/workflow-commands.d.ts.map +1 -0
  80. package/dist/commands/workflow-commands.js +92 -0
  81. package/dist/commands/workflow-commands.js.map +1 -0
  82. package/dist/core/checkpoint.d.ts +12 -4
  83. package/dist/core/checkpoint.d.ts.map +1 -1
  84. package/dist/core/checkpoint.js +114 -28
  85. package/dist/core/checkpoint.js.map +1 -1
  86. package/dist/core/cost-tracker.d.ts +5 -1
  87. package/dist/core/cost-tracker.d.ts.map +1 -1
  88. package/dist/core/cost-tracker.js +12 -2
  89. package/dist/core/cost-tracker.js.map +1 -1
  90. package/dist/core/warn-dedup.d.ts +3 -0
  91. package/dist/core/warn-dedup.d.ts.map +1 -1
  92. package/dist/core/warn-dedup.js +6 -6
  93. package/dist/core/warn-dedup.js.map +1 -1
  94. package/dist/framework/index.d.ts +1 -1
  95. package/dist/framework/index.d.ts.map +1 -1
  96. package/dist/framework/index.js.map +1 -1
  97. package/dist/framework/prompt.d.ts +2 -2
  98. package/dist/framework/query.d.ts +2 -2
  99. package/dist/framework/query.d.ts.map +1 -1
  100. package/dist/framework/query.js +57 -10
  101. package/dist/framework/query.js.map +1 -1
  102. package/dist/framework/store.d.ts +4 -4
  103. package/dist/framework/tool-scheduler.d.ts +16 -13
  104. package/dist/framework/tool-scheduler.d.ts.map +1 -1
  105. package/dist/framework/tool-scheduler.js +135 -32
  106. package/dist/framework/tool-scheduler.js.map +1 -1
  107. package/dist/framework/tool.d.ts +30 -2
  108. package/dist/framework/tool.d.ts.map +1 -1
  109. package/dist/framework/tool.js +27 -1
  110. package/dist/framework/tool.js.map +1 -1
  111. package/dist/harness/assembler.d.ts.map +1 -1
  112. package/dist/harness/assembler.js +4 -2
  113. package/dist/harness/assembler.js.map +1 -1
  114. package/dist/harness/evidence.d.ts.map +1 -1
  115. package/dist/harness/evidence.js +3 -2
  116. package/dist/harness/evidence.js.map +1 -1
  117. package/dist/harness/safety.d.ts +11 -1
  118. package/dist/harness/safety.d.ts.map +1 -1
  119. package/dist/harness/safety.js +112 -16
  120. package/dist/harness/safety.js.map +1 -1
  121. package/dist/index.d.ts +1 -4
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js.map +1 -1
  124. package/dist/init.d.ts +4 -8
  125. package/dist/init.d.ts.map +1 -1
  126. package/dist/init.js +4 -4
  127. package/dist/init.js.map +1 -1
  128. package/dist/ink-ui/App.d.ts +2 -2
  129. package/dist/ink-ui/components/Markdown.d.ts.map +1 -1
  130. package/dist/ink-ui/components/Markdown.js.map +1 -1
  131. package/dist/ink-ui/components/PixelHorseBanner.d.ts +2 -2
  132. package/dist/ink-ui/components/StatusLine.d.ts +2 -2
  133. package/dist/ink-ui/launch.d.ts +2 -2
  134. package/dist/ink-ui/screens/ReplScreen.d.ts +2 -2
  135. package/dist/ink-ui/screens/ReplScreen.js.map +1 -1
  136. package/dist/memory/embeddings.d.ts.map +1 -1
  137. package/dist/memory/embeddings.js +3 -2
  138. package/dist/memory/embeddings.js.map +1 -1
  139. package/dist/memory/relevant-finder.d.ts +2 -1
  140. package/dist/memory/relevant-finder.d.ts.map +1 -1
  141. package/dist/memory/relevant-finder.js +17 -8
  142. package/dist/memory/relevant-finder.js.map +1 -1
  143. package/dist/memory/semantic-config.d.ts +9 -0
  144. package/dist/memory/semantic-config.d.ts.map +1 -0
  145. package/dist/memory/semantic-config.js +16 -0
  146. package/dist/memory/semantic-config.js.map +1 -0
  147. package/dist/memory/semantic-search.d.ts +1 -6
  148. package/dist/memory/semantic-search.d.ts.map +1 -1
  149. package/dist/memory/semantic-search.js +5 -16
  150. package/dist/memory/semantic-search.js.map +1 -1
  151. package/dist/memory/storage.d.ts +23 -0
  152. package/dist/memory/storage.d.ts.map +1 -1
  153. package/dist/memory/storage.js +109 -8
  154. package/dist/memory/storage.js.map +1 -1
  155. package/dist/memory/vector-store.d.ts +12 -0
  156. package/dist/memory/vector-store.d.ts.map +1 -1
  157. package/dist/memory/vector-store.js +139 -18
  158. package/dist/memory/vector-store.js.map +1 -1
  159. package/dist/migration/command.d.ts.map +1 -1
  160. package/dist/migration/command.js +0 -1
  161. package/dist/migration/command.js.map +1 -1
  162. package/dist/migration/migrate.d.ts.map +1 -1
  163. package/dist/migration/migrate.js +43 -109
  164. package/dist/migration/migrate.js.map +1 -1
  165. package/dist/migration/types.d.ts +0 -1
  166. package/dist/migration/types.d.ts.map +1 -1
  167. package/dist/print-ui/launch.d.ts +10 -3
  168. package/dist/print-ui/launch.d.ts.map +1 -1
  169. package/dist/print-ui/launch.js +18 -0
  170. package/dist/print-ui/launch.js.map +1 -1
  171. package/dist/product/environment.d.ts +3 -5
  172. package/dist/product/environment.d.ts.map +1 -1
  173. package/dist/product/environment.js +4 -32
  174. package/dist/product/environment.js.map +1 -1
  175. package/dist/product/index.d.ts +1 -1
  176. package/dist/product/index.d.ts.map +1 -1
  177. package/dist/product/index.js +1 -3
  178. package/dist/product/index.js.map +1 -1
  179. package/dist/product/paths.d.ts.map +1 -1
  180. package/dist/product/paths.js +12 -0
  181. package/dist/product/paths.js.map +1 -1
  182. package/dist/runtime/agent-runtime-controller.d.ts +2 -2
  183. package/dist/runtime/agent-runtime-protocol.d.ts +4 -1
  184. package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
  185. package/dist/runtime/agent-runtime-protocol.js +6 -0
  186. package/dist/runtime/agent-runtime-protocol.js.map +1 -1
  187. package/dist/runtime/chat-checkpoint.d.ts +17 -0
  188. package/dist/runtime/chat-checkpoint.d.ts.map +1 -0
  189. package/dist/runtime/chat-checkpoint.js +108 -0
  190. package/dist/runtime/chat-checkpoint.js.map +1 -0
  191. package/dist/runtime/chat-controller.d.ts +10 -46
  192. package/dist/runtime/chat-controller.d.ts.map +1 -1
  193. package/dist/runtime/chat-controller.js +199 -1051
  194. package/dist/runtime/chat-controller.js.map +1 -1
  195. package/dist/runtime/chat-presentation.d.ts +60 -0
  196. package/dist/runtime/chat-presentation.d.ts.map +1 -0
  197. package/dist/runtime/chat-presentation.js +537 -0
  198. package/dist/runtime/chat-presentation.js.map +1 -0
  199. package/dist/runtime/chat-trace.d.ts +52 -0
  200. package/dist/runtime/chat-trace.d.ts.map +1 -0
  201. package/dist/runtime/chat-trace.js +234 -0
  202. package/dist/runtime/chat-trace.js.map +1 -0
  203. package/dist/runtime/chat-workspace.d.ts +22 -0
  204. package/dist/runtime/chat-workspace.d.ts.map +1 -0
  205. package/dist/runtime/chat-workspace.js +154 -0
  206. package/dist/runtime/chat-workspace.js.map +1 -0
  207. package/dist/runtime/goals/accounting.js +1 -1
  208. package/dist/runtime/goals/accounting.js.map +1 -1
  209. package/dist/runtime/goals/completion-audit.d.ts.map +1 -1
  210. package/dist/runtime/goals/completion-audit.js +5 -4
  211. package/dist/runtime/goals/completion-audit.js.map +1 -1
  212. package/dist/runtime/goals/coordinator.d.ts +3 -0
  213. package/dist/runtime/goals/coordinator.d.ts.map +1 -1
  214. package/dist/runtime/goals/coordinator.js +30 -2
  215. package/dist/runtime/goals/coordinator.js.map +1 -1
  216. package/dist/runtime/goals/prompt.d.ts +1 -1
  217. package/dist/runtime/goals/prompt.d.ts.map +1 -1
  218. package/dist/runtime/goals/prompt.js +3 -2
  219. package/dist/runtime/goals/prompt.js.map +1 -1
  220. package/dist/runtime/goals/tools.d.ts +21 -8
  221. package/dist/runtime/goals/tools.d.ts.map +1 -1
  222. package/dist/runtime/goals/tools.js +141 -10
  223. package/dist/runtime/goals/tools.js.map +1 -1
  224. package/dist/runtime/loop-budget.d.ts +2 -2
  225. package/dist/runtime/model-coordinator.d.ts.map +1 -1
  226. package/dist/runtime/model-coordinator.js.map +1 -1
  227. package/dist/runtime/subagents/child-executor-guard.d.ts.map +1 -1
  228. package/dist/runtime/subagents/child-executor-guard.js +4 -0
  229. package/dist/runtime/subagents/child-executor-guard.js.map +1 -1
  230. package/dist/runtime/subagents/index.d.ts +10 -3
  231. package/dist/runtime/subagents/index.d.ts.map +1 -1
  232. package/dist/runtime/subagents/index.js +25 -1
  233. package/dist/runtime/subagents/index.js.map +1 -1
  234. package/dist/runtime/subagents/policy.d.ts +1 -1
  235. package/dist/runtime/subagents/policy.d.ts.map +1 -1
  236. package/dist/runtime/subagents/policy.js.map +1 -1
  237. package/dist/runtime/subagents/presets.d.ts +2 -2
  238. package/dist/runtime/subagents/provider-gate.d.ts.map +1 -1
  239. package/dist/runtime/subagents/provider-gate.js +0 -1
  240. package/dist/runtime/subagents/provider-gate.js.map +1 -1
  241. package/dist/runtime/subagents/research-artifact.d.ts +101 -0
  242. package/dist/runtime/subagents/research-artifact.d.ts.map +1 -0
  243. package/dist/runtime/subagents/research-artifact.js +210 -0
  244. package/dist/runtime/subagents/research-artifact.js.map +1 -0
  245. package/dist/runtime/subagents/research-citation.d.ts +66 -0
  246. package/dist/runtime/subagents/research-citation.d.ts.map +1 -0
  247. package/dist/runtime/subagents/research-citation.js +185 -0
  248. package/dist/runtime/subagents/research-citation.js.map +1 -0
  249. package/dist/runtime/subagents/research-contract.d.ts +83 -0
  250. package/dist/runtime/subagents/research-contract.d.ts.map +1 -0
  251. package/dist/runtime/subagents/research-contract.js +337 -0
  252. package/dist/runtime/subagents/research-contract.js.map +1 -0
  253. package/dist/runtime/subagents/research-quality.d.ts +47 -0
  254. package/dist/runtime/subagents/research-quality.d.ts.map +1 -0
  255. package/dist/runtime/subagents/research-quality.js +125 -0
  256. package/dist/runtime/subagents/research-quality.js.map +1 -0
  257. package/dist/runtime/subagents/research-renderer.d.ts +95 -0
  258. package/dist/runtime/subagents/research-renderer.d.ts.map +1 -0
  259. package/dist/runtime/subagents/research-renderer.js +186 -0
  260. package/dist/runtime/subagents/research-renderer.js.map +1 -0
  261. package/dist/runtime/subagents/research-types.d.ts +105 -0
  262. package/dist/runtime/subagents/research-types.d.ts.map +1 -0
  263. package/dist/runtime/subagents/research-types.js +16 -0
  264. package/dist/runtime/subagents/research-types.js.map +1 -0
  265. package/dist/runtime/subagents/result-parser.d.ts +1 -5
  266. package/dist/runtime/subagents/result-parser.d.ts.map +1 -1
  267. package/dist/runtime/subagents/result-parser.js +5 -72
  268. package/dist/runtime/subagents/result-parser.js.map +1 -1
  269. package/dist/runtime/subagents/runtime-integration.d.ts +13 -7
  270. package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -1
  271. package/dist/runtime/subagents/runtime-integration.js +112 -2
  272. package/dist/runtime/subagents/runtime-integration.js.map +1 -1
  273. package/dist/runtime/subagents/supervisor.d.ts +15 -1
  274. package/dist/runtime/subagents/supervisor.d.ts.map +1 -1
  275. package/dist/runtime/subagents/supervisor.js +58 -3
  276. package/dist/runtime/subagents/supervisor.js.map +1 -1
  277. package/dist/runtime/subagents/tool.d.ts +2 -2
  278. package/dist/runtime/subagents/tool.d.ts.map +1 -1
  279. package/dist/runtime/subagents/tool.js +129 -9
  280. package/dist/runtime/subagents/tool.js.map +1 -1
  281. package/dist/runtime/subagents/types.d.ts +20 -0
  282. package/dist/runtime/subagents/types.d.ts.map +1 -1
  283. package/dist/runtime/subagents/types.js.map +1 -1
  284. package/dist/runtime/subagents/web-research-adapter.d.ts +85 -0
  285. package/dist/runtime/subagents/web-research-adapter.d.ts.map +1 -0
  286. package/dist/runtime/subagents/web-research-adapter.js +328 -0
  287. package/dist/runtime/subagents/web-research-adapter.js.map +1 -0
  288. package/dist/runtime/ui-events.d.ts +8 -8
  289. package/dist/runtime/ui-events.d.ts.map +1 -1
  290. package/dist/runtime/ui-events.js.map +1 -1
  291. package/dist/runtime/ui-view-model.d.ts +40 -0
  292. package/dist/runtime/ui-view-model.d.ts.map +1 -1
  293. package/dist/runtime/ui-view-model.js +126 -0
  294. package/dist/runtime/ui-view-model.js.map +1 -1
  295. package/dist/services/agent-runner.d.ts +5 -2
  296. package/dist/services/agent-runner.d.ts.map +1 -1
  297. package/dist/services/agent-runner.js +18 -18
  298. package/dist/services/agent-runner.js.map +1 -1
  299. package/dist/services/atomic-write.d.ts +9 -1
  300. package/dist/services/atomic-write.d.ts.map +1 -1
  301. package/dist/services/atomic-write.js +55 -2
  302. package/dist/services/atomic-write.js.map +1 -1
  303. package/dist/services/auth/auth.d.ts +11 -7
  304. package/dist/services/auth/auth.d.ts.map +1 -1
  305. package/dist/services/auth/auth.js +133 -34
  306. package/dist/services/auth/auth.js.map +1 -1
  307. package/dist/services/auth/aws.d.ts +2 -0
  308. package/dist/services/auth/aws.d.ts.map +1 -1
  309. package/dist/services/auth/aws.js +126 -12
  310. package/dist/services/auth/aws.js.map +1 -1
  311. package/dist/services/auth/index.d.ts +1 -1
  312. package/dist/services/auth/index.d.ts.map +1 -1
  313. package/dist/services/auth/index.js +2 -1
  314. package/dist/services/auth/index.js.map +1 -1
  315. package/dist/services/auto-fix/autoFixConfig.d.ts +0 -3
  316. package/dist/services/auto-fix/autoFixConfig.d.ts.map +1 -1
  317. package/dist/services/auto-fix/autoFixConfig.js +25 -8
  318. package/dist/services/auto-fix/autoFixConfig.js.map +1 -1
  319. package/dist/services/auto-fix/autoFixHook.d.ts +7 -0
  320. package/dist/services/auto-fix/autoFixHook.d.ts.map +1 -1
  321. package/dist/services/auto-fix/autoFixHook.js +10 -1
  322. package/dist/services/auto-fix/autoFixHook.js.map +1 -1
  323. package/dist/services/compact/auto-compact.d.ts +2 -0
  324. package/dist/services/compact/auto-compact.d.ts.map +1 -1
  325. package/dist/services/compact/auto-compact.js +15 -1
  326. package/dist/services/compact/auto-compact.js.map +1 -1
  327. package/dist/services/compact/compact.d.ts.map +1 -1
  328. package/dist/services/compact/compact.js +9 -11
  329. package/dist/services/compact/compact.js.map +1 -1
  330. package/dist/services/compact/summary-generator.d.ts.map +1 -1
  331. package/dist/services/compact/summary-generator.js +28 -4
  332. package/dist/services/compact/summary-generator.js.map +1 -1
  333. package/dist/services/compact/tool-call-groups.d.ts +19 -0
  334. package/dist/services/compact/tool-call-groups.d.ts.map +1 -0
  335. package/dist/services/compact/tool-call-groups.js +105 -0
  336. package/dist/services/compact/tool-call-groups.js.map +1 -0
  337. package/dist/services/concurrent-sessions.d.ts +4 -0
  338. package/dist/services/concurrent-sessions.d.ts.map +1 -1
  339. package/dist/services/concurrent-sessions.js +76 -21
  340. package/dist/services/concurrent-sessions.js.map +1 -1
  341. package/dist/services/config-dir.d.ts.map +1 -1
  342. package/dist/services/config-dir.js +19 -5
  343. package/dist/services/config-dir.js.map +1 -1
  344. package/dist/services/config.d.ts +6 -4
  345. package/dist/services/config.d.ts.map +1 -1
  346. package/dist/services/config.js +14 -71
  347. package/dist/services/config.js.map +1 -1
  348. package/dist/services/doctor.d.ts +2 -2
  349. package/dist/services/doctor.js.map +1 -1
  350. package/dist/services/file-glob.d.ts.map +1 -1
  351. package/dist/services/file-glob.js +22 -2
  352. package/dist/services/file-glob.js.map +1 -1
  353. package/dist/services/file-lock.d.ts +7 -0
  354. package/dist/services/file-lock.d.ts.map +1 -0
  355. package/dist/services/file-lock.js +139 -0
  356. package/dist/services/file-lock.js.map +1 -0
  357. package/dist/services/global-config.d.ts +2 -0
  358. package/dist/services/global-config.d.ts.map +1 -1
  359. package/dist/services/global-config.js +67 -4
  360. package/dist/services/global-config.js.map +1 -1
  361. package/dist/services/goal-storage.d.ts.map +1 -1
  362. package/dist/services/goal-storage.js +52 -19
  363. package/dist/services/goal-storage.js.map +1 -1
  364. package/dist/services/llm.d.ts +12 -0
  365. package/dist/services/llm.d.ts.map +1 -1
  366. package/dist/services/llm.js +166 -69
  367. package/dist/services/llm.js.map +1 -1
  368. package/dist/services/mcp/transports.d.ts +0 -1
  369. package/dist/services/mcp/transports.d.ts.map +1 -1
  370. package/dist/services/mcp/transports.js +12 -13
  371. package/dist/services/mcp/transports.js.map +1 -1
  372. package/dist/services/model-context.d.ts +8 -0
  373. package/dist/services/model-context.d.ts.map +1 -1
  374. package/dist/services/model-context.js +111 -7
  375. package/dist/services/model-context.js.map +1 -1
  376. package/dist/services/provider-resilience/coordinator.d.ts +9 -4
  377. package/dist/services/provider-resilience/coordinator.d.ts.map +1 -1
  378. package/dist/services/provider-resilience/coordinator.js +88 -21
  379. package/dist/services/provider-resilience/coordinator.js.map +1 -1
  380. package/dist/services/provider-resilience/error-classifier.d.ts +1 -0
  381. package/dist/services/provider-resilience/error-classifier.d.ts.map +1 -1
  382. package/dist/services/provider-resilience/error-classifier.js +50 -29
  383. package/dist/services/provider-resilience/error-classifier.js.map +1 -1
  384. package/dist/services/provider-resilience/index.d.ts +3 -3
  385. package/dist/services/provider-resilience/index.d.ts.map +1 -1
  386. package/dist/services/provider-resilience/index.js +3 -1
  387. package/dist/services/provider-resilience/index.js.map +1 -1
  388. package/dist/services/provider-resilience/request-gate.d.ts +6 -0
  389. package/dist/services/provider-resilience/request-gate.d.ts.map +1 -1
  390. package/dist/services/provider-resilience/request-gate.js +24 -9
  391. package/dist/services/provider-resilience/request-gate.js.map +1 -1
  392. package/dist/services/provider-resilience/stream-recovery.d.ts +1 -1
  393. package/dist/services/provider-resilience/stream-recovery.d.ts.map +1 -1
  394. package/dist/services/provider-resilience/stream-recovery.js +1 -1
  395. package/dist/services/provider-resilience/stream-recovery.js.map +1 -1
  396. package/dist/services/provider-resilience/types.d.ts +9 -0
  397. package/dist/services/provider-resilience/types.d.ts.map +1 -1
  398. package/dist/services/provider-resilience/types.js.map +1 -1
  399. package/dist/services/redaction.d.ts.map +1 -1
  400. package/dist/services/redaction.js +29 -1
  401. package/dist/services/redaction.js.map +1 -1
  402. package/dist/services/session-index.d.ts.map +1 -1
  403. package/dist/services/session-index.js +75 -44
  404. package/dist/services/session-index.js.map +1 -1
  405. package/dist/services/session-memory/sessionMemory.d.ts.map +1 -1
  406. package/dist/services/session-memory/sessionMemory.js +6 -3
  407. package/dist/services/session-memory/sessionMemory.js.map +1 -1
  408. package/dist/services/session-storage.d.ts +8 -0
  409. package/dist/services/session-storage.d.ts.map +1 -1
  410. package/dist/services/session-storage.js +105 -27
  411. package/dist/services/session-storage.js.map +1 -1
  412. package/dist/services/storage-maintenance.d.ts.map +1 -1
  413. package/dist/services/storage-maintenance.js +62 -9
  414. package/dist/services/storage-maintenance.js.map +1 -1
  415. package/dist/services/task-manager.d.ts +9 -4
  416. package/dist/services/task-manager.d.ts.map +1 -1
  417. package/dist/services/task-manager.js +18 -4
  418. package/dist/services/task-manager.js.map +1 -1
  419. package/dist/services/usage-state.d.ts +1 -0
  420. package/dist/services/usage-state.d.ts.map +1 -1
  421. package/dist/services/usage-state.js +81 -45
  422. package/dist/services/usage-state.js.map +1 -1
  423. package/dist/services/verification-profile.d.ts.map +1 -1
  424. package/dist/services/verification-profile.js +23 -3
  425. package/dist/services/verification-profile.js.map +1 -1
  426. package/dist/services/web-search-adapters.d.ts.map +1 -1
  427. package/dist/services/web-search-adapters.js +48 -18
  428. package/dist/services/web-search-adapters.js.map +1 -1
  429. package/dist/services/web-search-mcp.d.ts.map +1 -1
  430. package/dist/services/web-search-mcp.js +27 -11
  431. package/dist/services/web-search-mcp.js.map +1 -1
  432. package/dist/services/workspace-diff.d.ts +14 -0
  433. package/dist/services/workspace-diff.d.ts.map +1 -1
  434. package/dist/services/workspace-diff.js +60 -11
  435. package/dist/services/workspace-diff.js.map +1 -1
  436. package/dist/services/yaml-config.d.ts.map +1 -1
  437. package/dist/services/yaml-config.js +2 -1
  438. package/dist/services/yaml-config.js.map +1 -1
  439. package/dist/skills/loader.d.ts.map +1 -1
  440. package/dist/skills/loader.js +26 -11
  441. package/dist/skills/loader.js.map +1 -1
  442. package/dist/skills/runtime.d.ts +3 -3
  443. package/dist/skills/runtime.d.ts.map +1 -1
  444. package/dist/skills/runtime.js +37 -4
  445. package/dist/skills/runtime.js.map +1 -1
  446. package/dist/skills/types.d.ts +1 -1
  447. package/dist/skills/types.d.ts.map +1 -1
  448. package/dist/terminal-ui/launch.d.ts +16 -8
  449. package/dist/terminal-ui/launch.d.ts.map +1 -1
  450. package/dist/terminal-ui/launch.js +26 -0
  451. package/dist/terminal-ui/launch.js.map +1 -1
  452. package/dist/terminal-ui/raw-editor.js.map +1 -1
  453. package/dist/tools/bash_security.d.ts +58 -18
  454. package/dist/tools/bash_security.d.ts.map +1 -1
  455. package/dist/tools/bash_security.js +587 -80
  456. package/dist/tools/bash_security.js.map +1 -1
  457. package/dist/tools/git.d.ts +8 -8
  458. package/dist/tools/git.d.ts.map +1 -1
  459. package/dist/tools/git.js +248 -55
  460. package/dist/tools/git.js.map +1 -1
  461. package/dist/tools/index.d.ts +14 -4
  462. package/dist/tools/index.d.ts.map +1 -1
  463. package/dist/tools/index.js +236 -42
  464. package/dist/tools/index.js.map +1 -1
  465. package/dist/tools/lsp.d.ts +74 -6
  466. package/dist/tools/lsp.d.ts.map +1 -1
  467. package/dist/tools/lsp.js +24 -5
  468. package/dist/tools/lsp.js.map +1 -1
  469. package/dist/tools/mcp.d.ts +19 -6
  470. package/dist/tools/mcp.d.ts.map +1 -1
  471. package/dist/tools/mcp.js +143 -26
  472. package/dist/tools/mcp.js.map +1 -1
  473. package/dist/tools/plan.d.ts +4 -4
  474. package/dist/tools/sandbox.d.ts +3 -1
  475. package/dist/tools/sandbox.d.ts.map +1 -1
  476. package/dist/tools/sandbox.js +28 -13
  477. package/dist/tools/sandbox.js.map +1 -1
  478. package/dist/tools/todo.d.ts +3 -3
  479. package/dist/tools/web.d.ts +15 -4
  480. package/dist/tools/web.d.ts.map +1 -1
  481. package/dist/tools/web.js +240 -26
  482. package/dist/tools/web.js.map +1 -1
  483. package/dist/tui-core/frame.js.map +1 -1
  484. package/dist/tui-ui/launch.d.ts +3 -3
  485. package/dist/tui-ui/layout.d.ts.map +1 -1
  486. package/dist/tui-ui/layout.js +2 -0
  487. package/dist/tui-ui/layout.js.map +1 -1
  488. package/dist/tui-ui/runner.d.ts.map +1 -1
  489. package/dist/tui-ui/runner.js +1 -0
  490. package/dist/tui-ui/runner.js.map +1 -1
  491. package/dist/tui-ui/state.d.ts +9 -1
  492. package/dist/tui-ui/state.d.ts.map +1 -1
  493. package/dist/tui-ui/state.js +13 -0
  494. package/dist/tui-ui/state.js.map +1 -1
  495. package/dist/ui/markdown.js.map +1 -1
  496. package/dist/utils/debug-log.d.ts +52 -0
  497. package/dist/utils/debug-log.d.ts.map +1 -0
  498. package/dist/utils/debug-log.js +94 -0
  499. package/dist/utils/debug-log.js.map +1 -0
  500. package/dist/utils/errors.d.ts +25 -0
  501. package/dist/utils/errors.d.ts.map +1 -0
  502. package/dist/utils/errors.js +47 -0
  503. package/dist/utils/errors.js.map +1 -0
  504. package/dist/utils/json.d.ts +6 -0
  505. package/dist/utils/json.d.ts.map +1 -0
  506. package/dist/utils/json.js +66 -0
  507. package/dist/utils/json.js.map +1 -0
  508. package/dist/utils/mask.d.ts +8 -1
  509. package/dist/utils/mask.d.ts.map +1 -1
  510. package/dist/utils/mask.js +10 -12
  511. package/dist/utils/mask.js.map +1 -1
  512. package/dist/utils/observability.d.ts +22 -0
  513. package/dist/utils/observability.d.ts.map +1 -0
  514. package/dist/utils/observability.js +80 -0
  515. package/dist/utils/observability.js.map +1 -0
  516. package/dist/utils/token-estimate.d.ts +8 -0
  517. package/dist/utils/token-estimate.d.ts.map +1 -1
  518. package/dist/utils/token-estimate.js +30 -17
  519. package/dist/utils/token-estimate.js.map +1 -1
  520. package/package.json +8 -7
@@ -7,7 +7,7 @@
7
7
  * `subtask` capability - this is enforced structurally, not by prompt alone.
8
8
  */
9
9
  import type { SubagentRole } from './types';
10
- import type { OpenHorseTool } from '../../framework/tool';
10
+ import type { OrionCodeTool } from '../../framework/tool';
11
11
  /** Read-only investigation tools available to children in v0.2.20. */
12
12
  export declare const READ_ONLY_INVESTIGATION_TOOLS: readonly ["read_file", "list_files", "glob", "grep", "batch_read"];
13
13
  /**
@@ -37,7 +37,7 @@ export declare function systemPromptForRole(role: SubagentRole): string;
37
37
  * Returns the names the child may receive; the caller is responsible for
38
38
  * resolving them to tool definitions.
39
39
  */
40
- export declare function filterToolsForRole(availableToolNames: readonly string[], role: SubagentRole, _runtimeTools?: readonly OpenHorseTool[]): string[];
40
+ export declare function filterToolsForRole(availableToolNames: readonly string[], role: SubagentRole, _runtimeTools?: readonly OrionCodeTool[]): string[];
41
41
  /** Assert a filtered tool list contains no forbidden tool. Used by the runner. */
42
42
  export declare function assertNoForbiddenTools(toolNames: readonly string[]): void;
43
43
  //# sourceMappingURL=presets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-gate.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/provider-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAI3F,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK;QAAE,KAAK,IAAI,IAAI,CAAA;KAAE,CAAC;IAClE,4EAA4E;IAC5E,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAED,wDAAwD;AACxD,qBAAa,mBAAoB,SAAQ,KAAK;;CAK7C;AAUD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoD;IAClF,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAkC;gBAE3C,OAAO,EAAE,mBAAmB;IAWxC,8DAA8D;IAC9D,YAAY,IAAI,OAAO;IAIvB,kDAAkD;IAClD,mBAAmB,IAAI,MAAM;IAI7B;;;;;OAKG;IACH,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAYzC;;;;;;;;;OASG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAInC,mDAAmD;IACnD,WAAW,IAAI,MAAM;IAIrB;;;;;;;;;;OAUG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgClD,oEAAoE;IACpE,OAAO,IAAI,IAAI;IAKf;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAapB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;CAgBzB"}
1
+ {"version":3,"file":"provider-gate.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/provider-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAE3F,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK;QAAE,KAAK,IAAI,IAAI,CAAA;KAAE,CAAC;IAClE,4EAA4E;IAC5E,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAED,wDAAwD;AACxD,qBAAa,mBAAoB,SAAQ,KAAK;;CAK7C;AAUD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoD;IAClF,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAkC;gBAE3C,OAAO,EAAE,mBAAmB;IAWxC,8DAA8D;IAC9D,YAAY,IAAI,OAAO;IAIvB,kDAAkD;IAClD,mBAAmB,IAAI,MAAM;IAI7B;;;;;OAKG;IACH,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAYzC;;;;;;;;;OASG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAInC,mDAAmD;IACnD,WAAW,IAAI,MAAM;IAIrB;;;;;;;;;;OAUG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgClD,oEAAoE;IACpE,OAAO,IAAI,IAAI;IAKf;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAapB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;CAgBzB"}
@@ -24,7 +24,6 @@
24
24
  */
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.SubagentProviderGate = exports.AcquireAbortedError = void 0;
27
- const NULL_PROVIDER_GATE = null;
28
27
  /** Thrown when an acquire is aborted via its signal. */
29
28
  class AcquireAbortedError extends Error {
30
29
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"provider-gate.js","sourceRoot":"","sources":["../../../src/runtime/subagents/provider-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-gate.js","sourceRoot":"","sources":["../../../src/runtime/subagents/provider-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Research artifact persistence, resume, and Goal integration (v0.1.4, P1-R5).
3
+ *
4
+ * - Packet + source metadata are saved atomically under a CAS (compare-and-swap)
5
+ * token so a concurrent / active-Goal overwrite without the current token is
6
+ * rejected.
7
+ * - Scope isolation: project / session / Goal are part of the storage key, so a
8
+ * packet can never leak across project/session boundaries.
9
+ * - resume derives completed/partial/failed WITHOUT replaying any external side
10
+ * effect (no network, no fetch) - it only reads the stored packet.
11
+ * - clear/repair/cleanup preserve the original packet + prior CAS tokens for
12
+ * traceability; old schema versions fail closed (never silently migrated).
13
+ *
14
+ * Persistence is injected (default: in-memory map) so the logic is testable
15
+ * without disk.
16
+ */
17
+ import { type ResearchPacket } from './research-types';
18
+ export interface ResearchScope {
19
+ projectPath: string;
20
+ sessionId: string;
21
+ goalId?: string;
22
+ /** Optional packet discriminator when several research tasks share a Goal. */
23
+ packetId?: string;
24
+ }
25
+ export interface ArtifactRecord {
26
+ version: number;
27
+ /** CAS token = content hash of the stored packet at write time. */
28
+ casToken: string;
29
+ packet: ResearchPacket;
30
+ storedAt: string;
31
+ /** Prior CAS tokens, oldest first, kept for traceability. */
32
+ previousTokens: string[];
33
+ }
34
+ export interface ResearchArtifactStore {
35
+ read(scopeKey: string): ArtifactRecord | null;
36
+ /** Legacy unconditional write. Prefer writeIfCas for all read/modify/write paths. */
37
+ write(scopeKey: string, record: ArtifactRecord): void;
38
+ /**
39
+ * Atomically write only when the durable record still has `expectedCurrentToken`.
40
+ * `null` means the scope must still be absent. Implementations that predate this
41
+ * method remain source-compatible, but cannot provide cross-process CAS.
42
+ */
43
+ writeIfCas?(scopeKey: string, expectedCurrentToken: string | null, record: ArtifactRecord): boolean;
44
+ }
45
+ /** Default in-memory store (test seam; production can back this with session storage). */
46
+ export declare function createMemoryArtifactStore(): ResearchArtifactStore;
47
+ export declare function scopeKey(scope: ResearchScope): string;
48
+ /**
49
+ * Durable project-scoped store used by the runtime integration.
50
+ *
51
+ * Each packet has a deterministic filename derived from its full scope. Writes
52
+ * use a sibling temporary file plus rename so a killed process cannot leave a
53
+ * partially-written JSON record that looks resumable.
54
+ */
55
+ export declare function createFileArtifactStore(projectPath: string): ResearchArtifactStore;
56
+ export type ResearchResumeState = 'completed' | 'partial' | 'failed';
57
+ export declare class CasMismatchError extends Error {
58
+ scopeKey: string;
59
+ expected: string;
60
+ actual: string;
61
+ constructor(scopeKey: string, expected: string, actual: string);
62
+ }
63
+ export declare class UnsupportedSchemaError extends Error {
64
+ version: number;
65
+ constructor(version: number);
66
+ }
67
+ export interface SaveOptions {
68
+ /**
69
+ * When set, the write only succeeds if the existing record's CAS token matches.
70
+ * Omitting it for a goal-scoped packet triggers a CasMismatchError (an active
71
+ * Goal's packet must be updated via explicit resume with the current token).
72
+ */
73
+ expectedToken?: string;
74
+ /** Stamp used instead of the wall clock (deterministic tests). */
75
+ now?: () => Date;
76
+ }
77
+ export interface SaveResult {
78
+ version: number;
79
+ casToken: string;
80
+ }
81
+ /**
82
+ * Atomically save (or update) a research packet under its scope. Enforces CAS so
83
+ * concurrent / active-Goal overwrites are rejected unless the caller holds the
84
+ * current token. Returns the new version + token.
85
+ */
86
+ export declare function saveResearchPacket(store: ResearchArtifactStore, packet: ResearchPacket, scope: ResearchScope, opts?: SaveOptions): SaveResult;
87
+ /**
88
+ * Load a packet. Fails closed on old/unsupported schema versions (never migrates
89
+ * silently). Returns null when nothing is stored for the scope.
90
+ */
91
+ export declare function loadResearchPacket(store: ResearchArtifactStore, scope: ResearchScope): ResearchPacket | null;
92
+ /**
93
+ * Resume the research state from a stored packet WITHOUT replaying external side
94
+ * effects. Pure derivation: completed when there are usable sources and no
95
+ * failures/conflicts, partial when there are failures/conflicts but some progress,
96
+ * failed only when there is nothing usable.
97
+ */
98
+ export declare function resumeResearchState(packet: ResearchPacket): ResearchResumeState;
99
+ /** Get the prior CAS tokens for a scope (traceability after clear/repair). */
100
+ export declare function artifactHistory(store: ResearchArtifactStore, scope: ResearchScope): string[];
101
+ //# sourceMappingURL=research-artifact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-artifact.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/research-artifact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AASH,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAC9C,qFAAqF;IACrF,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IACtD;;;;OAIG;IACH,UAAU,CAAC,CACT,QAAQ,EAAE,MAAM,EAChB,oBAAoB,EAAE,MAAM,GAAG,IAAI,EACnC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;CACZ;AAMD,0FAA0F;AAC1F,wBAAgB,yBAAyB,IAAI,qBAAqB,CAiBjE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAErD;AA0BD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,CAyBlF;AAED,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErE,qBAAa,gBAAiB,SAAQ,KAAK;IAEhC,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM;gBAFd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM;CAKxB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC5B,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;CAInC;AAED,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,aAAa,EACpB,IAAI,GAAE,WAAgB,GACrB,UAAU,CAkCZ;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,qBAAqB,EAC5B,KAAK,EAAE,aAAa,GACnB,cAAc,GAAG,IAAI,CAOvB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,mBAAmB,CAW/E;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,EAAE,CAE5F"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ /**
3
+ * Research artifact persistence, resume, and Goal integration (v0.1.4, P1-R5).
4
+ *
5
+ * - Packet + source metadata are saved atomically under a CAS (compare-and-swap)
6
+ * token so a concurrent / active-Goal overwrite without the current token is
7
+ * rejected.
8
+ * - Scope isolation: project / session / Goal are part of the storage key, so a
9
+ * packet can never leak across project/session boundaries.
10
+ * - resume derives completed/partial/failed WITHOUT replaying any external side
11
+ * effect (no network, no fetch) - it only reads the stored packet.
12
+ * - clear/repair/cleanup preserve the original packet + prior CAS tokens for
13
+ * traceability; old schema versions fail closed (never silently migrated).
14
+ *
15
+ * Persistence is injected (default: in-memory map) so the logic is testable
16
+ * without disk.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.UnsupportedSchemaError = exports.CasMismatchError = void 0;
20
+ exports.createMemoryArtifactStore = createMemoryArtifactStore;
21
+ exports.scopeKey = scopeKey;
22
+ exports.createFileArtifactStore = createFileArtifactStore;
23
+ exports.saveResearchPacket = saveResearchPacket;
24
+ exports.loadResearchPacket = loadResearchPacket;
25
+ exports.resumeResearchState = resumeResearchState;
26
+ exports.artifactHistory = artifactHistory;
27
+ const crypto_1 = require("crypto");
28
+ const fs_1 = require("fs");
29
+ const path_1 = require("path");
30
+ const atomic_write_1 = require("../../services/atomic-write");
31
+ const config_dir_1 = require("../../services/config-dir");
32
+ const file_lock_1 = require("../../services/file-lock");
33
+ const research_contract_1 = require("./research-contract");
34
+ const research_types_1 = require("./research-types");
35
+ function cloneRecord(record) {
36
+ return JSON.parse(JSON.stringify(record));
37
+ }
38
+ /** Default in-memory store (test seam; production can back this with session storage). */
39
+ function createMemoryArtifactStore() {
40
+ const map = new Map();
41
+ return {
42
+ read: key => {
43
+ const record = map.get(key);
44
+ return record ? cloneRecord(record) : null;
45
+ },
46
+ write: (key, rec) => {
47
+ map.set(key, cloneRecord(rec));
48
+ },
49
+ writeIfCas: (key, expectedCurrentToken, rec) => {
50
+ const actual = map.get(key)?.casToken ?? null;
51
+ if (actual !== expectedCurrentToken)
52
+ return false;
53
+ map.set(key, cloneRecord(rec));
54
+ return true;
55
+ },
56
+ };
57
+ }
58
+ function scopeKey(scope) {
59
+ return `${scope.projectPath}::${scope.sessionId}::${scope.goalId ?? '-'}::${scope.packetId ?? '-'}`;
60
+ }
61
+ function readArtifactRecord(file) {
62
+ if (!(0, fs_1.existsSync)(file))
63
+ return null;
64
+ try {
65
+ const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
66
+ if (!parsed ||
67
+ typeof parsed.version !== 'number' ||
68
+ typeof parsed.casToken !== 'string' ||
69
+ !parsed.packet ||
70
+ typeof parsed.storedAt !== 'string' ||
71
+ !Array.isArray(parsed.previousTokens)) {
72
+ return null;
73
+ }
74
+ return parsed;
75
+ }
76
+ catch {
77
+ return null;
78
+ }
79
+ }
80
+ function writeArtifactRecord(file, record) {
81
+ (0, atomic_write_1.atomicWriteFileSync)(file, `${JSON.stringify(record)}\n`, { mode: 0o600 });
82
+ }
83
+ /**
84
+ * Durable project-scoped store used by the runtime integration.
85
+ *
86
+ * Each packet has a deterministic filename derived from its full scope. Writes
87
+ * use a sibling temporary file plus rename so a killed process cannot leave a
88
+ * partially-written JSON record that looks resumable.
89
+ */
90
+ function createFileArtifactStore(projectPath) {
91
+ const artifactDir = (0, config_dir_1.getProjectArtifactsDir)(projectPath);
92
+ const fileFor = (key) => {
93
+ const digest = (0, crypto_1.createHash)('sha256').update(key).digest('hex');
94
+ return (0, path_1.join)(artifactDir, `research-${digest}.json`);
95
+ };
96
+ return {
97
+ read: key => readArtifactRecord(fileFor(key)),
98
+ write: (key, record) => {
99
+ (0, fs_1.mkdirSync)(artifactDir, { recursive: true, mode: 0o700 });
100
+ const file = fileFor(key);
101
+ (0, file_lock_1.withFileLockSync)(file, () => writeArtifactRecord(file, record));
102
+ },
103
+ writeIfCas: (key, expectedCurrentToken, record) => {
104
+ (0, fs_1.mkdirSync)(artifactDir, { recursive: true, mode: 0o700 });
105
+ const file = fileFor(key);
106
+ return (0, file_lock_1.withFileLockSync)(file, () => {
107
+ const actual = readArtifactRecord(file)?.casToken ?? null;
108
+ if (actual !== expectedCurrentToken)
109
+ return false;
110
+ writeArtifactRecord(file, record);
111
+ return true;
112
+ });
113
+ },
114
+ };
115
+ }
116
+ class CasMismatchError extends Error {
117
+ constructor(scopeKey, expected, actual) {
118
+ super(`CAS mismatch for ${scopeKey}: expected ${expected}, found ${actual}`);
119
+ this.scopeKey = scopeKey;
120
+ this.expected = expected;
121
+ this.actual = actual;
122
+ this.name = 'CasMismatchError';
123
+ }
124
+ }
125
+ exports.CasMismatchError = CasMismatchError;
126
+ class UnsupportedSchemaError extends Error {
127
+ constructor(version) {
128
+ super(`unsupported research schema version ${version}`);
129
+ this.version = version;
130
+ this.name = 'UnsupportedSchemaError';
131
+ }
132
+ }
133
+ exports.UnsupportedSchemaError = UnsupportedSchemaError;
134
+ /**
135
+ * Atomically save (or update) a research packet under its scope. Enforces CAS so
136
+ * concurrent / active-Goal overwrites are rejected unless the caller holds the
137
+ * current token. Returns the new version + token.
138
+ */
139
+ function saveResearchPacket(store, packet, scope, opts = {}) {
140
+ const key = scopeKey(scope);
141
+ const now = opts.now ?? (() => new Date());
142
+ const casToken = (0, research_contract_1.hashPacket)(packet);
143
+ const existing = store.read(key);
144
+ if (opts.expectedToken !== undefined && !existing) {
145
+ throw new CasMismatchError(key, opts.expectedToken, '<missing>');
146
+ }
147
+ if (scope.goalId && existing && opts.expectedToken === undefined) {
148
+ // An active Goal's packet must be updated with an explicit token (resume),
149
+ // never blindly overwritten.
150
+ throw new CasMismatchError(key, existing.casToken, casToken);
151
+ }
152
+ if (existing && opts.expectedToken !== undefined && opts.expectedToken !== existing.casToken) {
153
+ throw new CasMismatchError(key, opts.expectedToken, existing.casToken);
154
+ }
155
+ const version = (existing?.version ?? 0) + 1;
156
+ const previousTokens = existing ? [...existing.previousTokens, existing.casToken] : [];
157
+ const record = { version, casToken, packet, storedAt: now().toISOString(), previousTokens };
158
+ const expectedCurrentToken = existing?.casToken ?? null;
159
+ if (store.writeIfCas) {
160
+ const written = store.writeIfCas(key, expectedCurrentToken, record);
161
+ if (!written) {
162
+ const actual = store.read(key)?.casToken ?? '<missing>';
163
+ throw new CasMismatchError(key, expectedCurrentToken ?? '<missing>', actual);
164
+ }
165
+ }
166
+ else {
167
+ // Backward compatibility for injected legacy stores. Built-in memory/file
168
+ // stores always take the atomic path above.
169
+ store.write(key, record);
170
+ }
171
+ return { version, casToken };
172
+ }
173
+ /**
174
+ * Load a packet. Fails closed on old/unsupported schema versions (never migrates
175
+ * silently). Returns null when nothing is stored for the scope.
176
+ */
177
+ function loadResearchPacket(store, scope) {
178
+ const rec = store.read(scopeKey(scope));
179
+ if (!rec)
180
+ return null;
181
+ if (rec.packet.schemaVersion !== research_types_1.RESEARCH_SCHEMA_VERSION) {
182
+ throw new UnsupportedSchemaError(rec.packet.schemaVersion);
183
+ }
184
+ return rec.packet;
185
+ }
186
+ /**
187
+ * Resume the research state from a stored packet WITHOUT replaying external side
188
+ * effects. Pure derivation: completed when there are usable sources and no
189
+ * failures/conflicts, partial when there are failures/conflicts but some progress,
190
+ * failed only when there is nothing usable.
191
+ */
192
+ function resumeResearchState(packet) {
193
+ if (packet.schemaVersion !== research_types_1.RESEARCH_SCHEMA_VERSION)
194
+ throw new UnsupportedSchemaError(packet.schemaVersion);
195
+ if (packet.sources.length === 0)
196
+ return 'failed';
197
+ // Only a fully retrieved source set can resume as completed. Partial and
198
+ // stale evidence must remain visible after restart instead of being silently
199
+ // upgraded (#108); failed/blocked retain the existing partial semantics.
200
+ const hasIncompleteSources = packet.sources.some(s => s.status !== 'retrieved');
201
+ const hasConflict = packet.risks.some(r => /conflict/i.test(r));
202
+ if (hasIncompleteSources || hasConflict)
203
+ return 'partial';
204
+ return 'completed';
205
+ }
206
+ /** Get the prior CAS tokens for a scope (traceability after clear/repair). */
207
+ function artifactHistory(store, scope) {
208
+ return store.read(scopeKey(scope))?.previousTokens ?? [];
209
+ }
210
+ //# sourceMappingURL=research-artifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-artifact.js","sourceRoot":"","sources":["../../../src/runtime/subagents/research-artifact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Citation, conflict, and evidence-candidate resolution (v0.1.4, P0-R3).
3
+ *
4
+ * Turns a `ResearchPacket` (with its claims + sources) into:
5
+ * - resolved claim->source bindings (reference-integrity validated),
6
+ * - same-URL multi-version dedupe (older revisions marked `stale` on hash drift),
7
+ * - conflict records for contradictory sources (never auto-picked),
8
+ * - a verification classification per claim,
9
+ * - evidence candidates (only rule-compliant claims; research vs execution kept
10
+ * distinct so a web summary can never stand in for test/build/file facts),
11
+ * - a completion audit that stays `partial`/`unmet` for claims that have sources
12
+ * but no independent verification.
13
+ *
14
+ * This module is pure (no IO) so it is fully testable without network or disk.
15
+ */
16
+ import type { ResearchPacket } from './research-types';
17
+ /** Normalize a URL for dedupe: drop fragment + trailing slash, lowercase host. */
18
+ export declare function urlKey(url: string | undefined): string;
19
+ export type BindingStatus = 'bound' | 'dangling' | 'stale_only' | 'conflicted';
20
+ export interface ClaimBinding {
21
+ claimId: string;
22
+ /** Resolved, non-stale source ids actually backing the claim. */
23
+ sourceIds: string[];
24
+ /** All source ids referenced by the claim (including stale/blocked). */
25
+ referencedSourceIds: string[];
26
+ status: BindingStatus;
27
+ }
28
+ export interface ConflictRecord {
29
+ claimId: string;
30
+ sourceIds: string[];
31
+ reason: string;
32
+ }
33
+ export interface EvidenceCandidate {
34
+ claimId: string;
35
+ /** 'research' = external/web source; 'execution' = file/verification fact. */
36
+ kind: 'research' | 'execution';
37
+ basis: 'file' | 'external';
38
+ summary: string;
39
+ }
40
+ export interface CompletionAudit {
41
+ status: 'met' | 'partial' | 'unmet';
42
+ /** Claims that have sources but no independent verification. */
43
+ unverifiedClaimIds: string[];
44
+ notes: string[];
45
+ }
46
+ export interface CitationResolution {
47
+ packetId: string;
48
+ bindings: ClaimBinding[];
49
+ conflicts: ConflictRecord[];
50
+ staleSourceIds: string[];
51
+ evidenceCandidates: EvidenceCandidate[];
52
+ audit: CompletionAudit;
53
+ }
54
+ /**
55
+ * Resolve citations for a packet.
56
+ *
57
+ * Reference integrity: a claim binding to an unknown source id is flagged
58
+ * `dangling` (and downgraded to `unverified`). Dedupe: sources sharing a
59
+ * canonical URL key are collapsed; the newest by `retrievedAt` wins and older
60
+ * revisions with a different content hash are marked `stale`. Conflict: a claim
61
+ * backed by both a `retrieved` source and a `failed`/`blocked` source (or two
62
+ * sources explicitly flagged contradictory) yields a conflict record and is
63
+ * never silently resolved in the model-favorable direction.
64
+ */
65
+ export declare function resolveCitations(packet: ResearchPacket): CitationResolution;
66
+ //# sourceMappingURL=research-citation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-citation.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/research-citation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAiB,cAAc,EAAgC,MAAM,kBAAkB,CAAC;AAEpG,kFAAkF;AAClF,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAYtD;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,wEAAwE;IACxE,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,IAAI,EAAE,UAAU,GAAG,WAAW,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;IACpC,gEAAgE;IAChE,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAsG3E"}
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ /**
3
+ * Citation, conflict, and evidence-candidate resolution (v0.1.4, P0-R3).
4
+ *
5
+ * Turns a `ResearchPacket` (with its claims + sources) into:
6
+ * - resolved claim->source bindings (reference-integrity validated),
7
+ * - same-URL multi-version dedupe (older revisions marked `stale` on hash drift),
8
+ * - conflict records for contradictory sources (never auto-picked),
9
+ * - a verification classification per claim,
10
+ * - evidence candidates (only rule-compliant claims; research vs execution kept
11
+ * distinct so a web summary can never stand in for test/build/file facts),
12
+ * - a completion audit that stays `partial`/`unmet` for claims that have sources
13
+ * but no independent verification.
14
+ *
15
+ * This module is pure (no IO) so it is fully testable without network or disk.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.urlKey = urlKey;
19
+ exports.resolveCitations = resolveCitations;
20
+ /** Normalize a URL for dedupe: drop fragment + trailing slash, lowercase host. */
21
+ function urlKey(url) {
22
+ if (!url)
23
+ return '';
24
+ try {
25
+ const u = new URL(url);
26
+ const host = u.host.toLowerCase();
27
+ let path = u.pathname;
28
+ if (path.length > 1 && path.endsWith('/'))
29
+ path = path.slice(0, -1);
30
+ const query = u.search;
31
+ return `${u.protocol}//${host}${path}${query}`;
32
+ }
33
+ catch {
34
+ return url;
35
+ }
36
+ }
37
+ /**
38
+ * Resolve citations for a packet.
39
+ *
40
+ * Reference integrity: a claim binding to an unknown source id is flagged
41
+ * `dangling` (and downgraded to `unverified`). Dedupe: sources sharing a
42
+ * canonical URL key are collapsed; the newest by `retrievedAt` wins and older
43
+ * revisions with a different content hash are marked `stale`. Conflict: a claim
44
+ * backed by both a `retrieved` source and a `failed`/`blocked` source (or two
45
+ * sources explicitly flagged contradictory) yields a conflict record and is
46
+ * never silently resolved in the model-favorable direction.
47
+ */
48
+ function resolveCitations(packet) {
49
+ const sourceIds = new Set(packet.sources.map(s => s.id));
50
+ const byId = new Map(packet.sources.map(s => [s.id, s]));
51
+ // --- dedupe same-URL multi-version -> stale ---
52
+ const staleSourceIds = [];
53
+ const groups = new Map();
54
+ for (const s of packet.sources) {
55
+ const key = urlKey(s.canonicalUrl);
56
+ if (!key)
57
+ continue;
58
+ const arr = groups.get(key) ?? [];
59
+ arr.push(s);
60
+ groups.set(key, arr);
61
+ }
62
+ for (const [, group] of groups) {
63
+ if (group.length < 2)
64
+ continue;
65
+ // newest by retrievedAt wins; older ones with a different hash become stale.
66
+ const sorted = [...group].sort((a, b) => b.retrievedAt.localeCompare(a.retrievedAt));
67
+ const winner = sorted[0];
68
+ for (let i = 1; i < sorted.length; i++) {
69
+ const s = sorted[i];
70
+ if (s.contentHash && winner.contentHash && s.contentHash !== winner.contentHash) {
71
+ staleSourceIds.push(s.id);
72
+ s.status = 'stale';
73
+ }
74
+ }
75
+ }
76
+ const staleSet = new Set(staleSourceIds);
77
+ const bindings = [];
78
+ const conflicts = [];
79
+ const evidenceCandidates = [];
80
+ for (const claim of packet.claims) {
81
+ const referenced = claim.sourceIds.filter(id => sourceIds.has(id));
82
+ const danglingRefs = claim.sourceIds.filter(id => !sourceIds.has(id));
83
+ const active = referenced.filter(id => !staleSet.has(id));
84
+ const activeSources = active.map(id => byId.get(id)).filter(Boolean);
85
+ const hasRetrieved = activeSources.some(s => s.status === 'retrieved');
86
+ const hasFailed = activeSources.some(s => s.status === 'failed' || s.status === 'blocked');
87
+ let status;
88
+ if (danglingRefs.length > 0 && referenced.length === 0) {
89
+ status = 'dangling';
90
+ }
91
+ else if (hasRetrieved && hasFailed) {
92
+ status = 'conflicted';
93
+ }
94
+ else if (active.length === 0 && referenced.length > 0) {
95
+ status = 'stale_only';
96
+ }
97
+ else {
98
+ status = 'bound';
99
+ }
100
+ if (status === 'conflicted') {
101
+ conflicts.push({
102
+ claimId: claim.id,
103
+ sourceIds: active,
104
+ reason: 'claim backed by both a retrieved source and a failed/blocked source',
105
+ });
106
+ }
107
+ bindings.push({
108
+ claimId: claim.id,
109
+ sourceIds: active,
110
+ referencedSourceIds: referenced,
111
+ status,
112
+ });
113
+ // Verification classification: conflicted -> contradicted.
114
+ const verification = status === 'conflicted'
115
+ ? 'contradicted'
116
+ : classifyVerification(claim, hasRetrieved, activeSources);
117
+ claim.verification = verification;
118
+ // Evidence candidate: only rule-compliant claims.
119
+ if ((verification === 'observed' || verification === 'partially_observed') &&
120
+ claim.evidenceKind !== 'inference' &&
121
+ status !== 'conflicted') {
122
+ const primary = activeSources.find(s => s.status === 'retrieved');
123
+ const isFile = primary?.kind === 'file';
124
+ evidenceCandidates.push({
125
+ claimId: claim.id,
126
+ kind: isFile ? 'execution' : 'research',
127
+ basis: isFile ? 'file' : 'external',
128
+ summary: claim.text,
129
+ });
130
+ }
131
+ }
132
+ const audit = auditCompletion(packet, bindings);
133
+ return {
134
+ packetId: packet.packetId,
135
+ bindings,
136
+ conflicts,
137
+ staleSourceIds,
138
+ evidenceCandidates,
139
+ audit,
140
+ };
141
+ }
142
+ function classifyVerification(claim, hasRetrieved, activeSources) {
143
+ if (claim.evidenceKind === 'inference')
144
+ return 'unverified';
145
+ if (!hasRetrieved)
146
+ return 'unverified';
147
+ const onlyExcerpt = activeSources.every(s => !!s.excerpt && s.excerpt.length < 4000 && !s.contentHash);
148
+ return onlyExcerpt ? 'partially_observed' : 'observed';
149
+ }
150
+ /**
151
+ * Completion audit. The key invariant (plan exit condition): a claim that HAS
152
+ * sources but no independent verification must keep the audit `partial`/`unmet`
153
+ * - never `met`. We therefore treat any claim with referenced sources whose
154
+ * verification is not `observed` as unverified for audit purposes.
155
+ */
156
+ function auditCompletion(packet, bindings) {
157
+ const notes = [];
158
+ const unverifiedClaimIds = [];
159
+ for (const claim of packet.claims) {
160
+ const binding = bindings.find(b => b.claimId === claim.id);
161
+ const hasSources = (binding?.referencedSourceIds.length ?? 0) > 0;
162
+ const independentlyVerified = claim.verification === 'observed';
163
+ if (!independentlyVerified) {
164
+ if (hasSources) {
165
+ unverifiedClaimIds.push(claim.id);
166
+ notes.push(`claim ${claim.id} has sources but no independent verification (stays partial)`);
167
+ }
168
+ else {
169
+ unverifiedClaimIds.push(claim.id);
170
+ }
171
+ }
172
+ }
173
+ let status;
174
+ if (unverifiedClaimIds.length === 0) {
175
+ status = 'met';
176
+ }
177
+ else if (packet.claims.some(c => (bindings.find(b => b.claimId === c.id)?.referencedSourceIds.length ?? 0) > 0)) {
178
+ status = 'partial';
179
+ }
180
+ else {
181
+ status = 'unmet';
182
+ }
183
+ return { status, unverifiedClaimIds, notes };
184
+ }
185
+ //# sourceMappingURL=research-citation.js.map