@quickchatai/quickreview 0.0.0-stage → 1.1.0

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 (1443) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +385 -2
  3. package/THIRD-PARTY-NOTICES.md +134 -0
  4. package/agents/pass-abstraction.md +64 -0
  5. package/agents/pass-ask-human.md +134 -0
  6. package/agents/pass-backcompat.md +67 -0
  7. package/agents/pass-baseline.md +61 -0
  8. package/agents/pass-behaviour-delta.md +64 -0
  9. package/agents/pass-bounds.md +36 -0
  10. package/agents/pass-claims.md +31 -0
  11. package/agents/pass-concurrency.md +168 -0
  12. package/agents/pass-consistency.md +57 -0
  13. package/agents/pass-contracts.md +30 -0
  14. package/agents/pass-data-safety.md +54 -0
  15. package/agents/pass-deferred.md +35 -0
  16. package/agents/pass-delivery.md +37 -0
  17. package/agents/pass-duplication.md +60 -0
  18. package/agents/pass-intent.md +63 -0
  19. package/agents/pass-lint-conformance.md +46 -0
  20. package/agents/pass-maintainability.md +67 -0
  21. package/agents/pass-placement.md +68 -0
  22. package/agents/pass-prod-risk.md +24 -0
  23. package/agents/pass-rollout.md +32 -0
  24. package/agents/pass-roundtrip.md +46 -0
  25. package/agents/pass-security.md +31 -0
  26. package/agents/pass-simplicity.md +68 -0
  27. package/agents/pass-statelessness.md +27 -0
  28. package/agents/pass-style.md +37 -0
  29. package/agents/pass-sweep.md +57 -0
  30. package/agents/pass-tests.md +58 -0
  31. package/agents/pass-ui.md +23 -0
  32. package/agents/pass-validate.md +50 -0
  33. package/agents/pass-widened.md +46 -0
  34. package/agents/scan/pass-scan.md +86 -0
  35. package/bin/qcr.js +11 -0
  36. package/config.example.toml +1067 -0
  37. package/deploy/ansible/README.md +356 -0
  38. package/deploy/ansible/group_vars/all.yml +212 -0
  39. package/deploy/ansible/inventory.example.ini +25 -0
  40. package/deploy/ansible/playbook.yml +360 -0
  41. package/deploy/collect-secrets.sh +289 -0
  42. package/deploy/collect-slack-secrets.mjs +1190 -0
  43. package/deploy/github-app-manifest.json +31 -0
  44. package/deploy/manifest.schema.json +75 -0
  45. package/deploy/qcr-update.sh +803 -0
  46. package/deploy/reviewer/AGENTS.override.md +12 -0
  47. package/dist/extensions/cli/bash-guard-ambient.js +42 -0
  48. package/dist/extensions/cli/bash-guard-ambient.js.map +1 -0
  49. package/dist/extensions/cli/bash-guard.js +5 -0
  50. package/dist/extensions/cli/bash-guard.js.map +1 -0
  51. package/dist/extensions/cli/companion-guard.js +5 -0
  52. package/dist/extensions/cli/companion-guard.js.map +1 -0
  53. package/dist/extensions/cli/debug-round.js +8 -0
  54. package/dist/extensions/cli/debug-round.js.map +1 -0
  55. package/dist/extensions/cli/inject-bridge.js +5 -0
  56. package/dist/extensions/cli/inject-bridge.js.map +1 -0
  57. package/dist/extensions/cli/ledger-pin.js +5 -0
  58. package/dist/extensions/cli/ledger-pin.js.map +1 -0
  59. package/dist/extensions/cli/lens.js +13 -0
  60. package/dist/extensions/cli/lens.js.map +1 -0
  61. package/dist/extensions/cli/muted-theme.js +5 -0
  62. package/dist/extensions/cli/muted-theme.js.map +1 -0
  63. package/dist/extensions/cli/onboarding.js +5 -0
  64. package/dist/extensions/cli/onboarding.js.map +1 -0
  65. package/dist/extensions/cli/setup.js +5 -0
  66. package/dist/extensions/cli/setup.js.map +1 -0
  67. package/dist/extensions/cli/tui-view.js +5 -0
  68. package/dist/extensions/cli/tui-view.js.map +1 -0
  69. package/dist/extensions/companion-guard.js +361 -0
  70. package/dist/extensions/companion-guard.js.map +1 -0
  71. package/dist/extensions/debug-round.js +204 -0
  72. package/dist/extensions/debug-round.js.map +1 -0
  73. package/dist/extensions/inject-bridge.js +603 -0
  74. package/dist/extensions/inject-bridge.js.map +1 -0
  75. package/dist/extensions/muted-theme.js +12 -0
  76. package/dist/extensions/muted-theme.js.map +1 -0
  77. package/dist/extensions/onboarding.js +175 -0
  78. package/dist/extensions/onboarding.js.map +1 -0
  79. package/dist/extensions/setup-replay.js +269 -0
  80. package/dist/extensions/setup-replay.js.map +1 -0
  81. package/dist/extensions/setup-scan.js +998 -0
  82. package/dist/extensions/setup-scan.js.map +1 -0
  83. package/dist/extensions/setup-triage.js +175 -0
  84. package/dist/extensions/setup-triage.js.map +1 -0
  85. package/dist/extensions/setup.js +1160 -0
  86. package/dist/extensions/setup.js.map +1 -0
  87. package/dist/extensions/tui-view.js +389 -0
  88. package/dist/extensions/tui-view.js.map +1 -0
  89. package/dist/extensions/vendor/openviking-pi/client.js +376 -0
  90. package/dist/extensions/vendor/openviking-pi/client.js.map +1 -0
  91. package/dist/extensions/vendor/openviking-pi/config.js +189 -0
  92. package/dist/extensions/vendor/openviking-pi/config.js.map +1 -0
  93. package/dist/extensions/vendor/openviking-pi/index.js +421 -0
  94. package/dist/extensions/vendor/openviking-pi/index.js.map +1 -0
  95. package/dist/extensions/vendor/openviking-pi/lib/capture-adapter.mjs +86 -0
  96. package/dist/extensions/vendor/openviking-pi/lib/capture-adapter.mjs.map +1 -0
  97. package/dist/extensions/vendor/openviking-pi/lib/takeover-core.mjs +408 -0
  98. package/dist/extensions/vendor/openviking-pi/lib/takeover-core.mjs.map +1 -0
  99. package/dist/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs +41 -0
  100. package/dist/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs.map +1 -0
  101. package/dist/extensions/vendor/openviking-pi/qcr-hint.js +290 -0
  102. package/dist/extensions/vendor/openviking-pi/qcr-hint.js.map +1 -0
  103. package/dist/extensions/vendor/openviking-pi/qcr-honest.js +148 -0
  104. package/dist/extensions/vendor/openviking-pi/qcr-honest.js.map +1 -0
  105. package/dist/extensions/vendor/openviking-pi/qcr-hooks.js +68 -0
  106. package/dist/extensions/vendor/openviking-pi/qcr-hooks.js.map +1 -0
  107. package/dist/extensions/vendor/openviking-pi/qcr-leaf.js +77 -0
  108. package/dist/extensions/vendor/openviking-pi/qcr-leaf.js.map +1 -0
  109. package/dist/extensions/vendor/openviking-pi/qcr-lesson.js +216 -0
  110. package/dist/extensions/vendor/openviking-pi/qcr-lesson.js.map +1 -0
  111. package/dist/extensions/vendor/openviking-pi/qcr-namespaces.js +154 -0
  112. package/dist/extensions/vendor/openviking-pi/qcr-namespaces.js.map +1 -0
  113. package/dist/extensions/vendor/openviking-pi/qcr-recall.js +254 -0
  114. package/dist/extensions/vendor/openviking-pi/qcr-recall.js.map +1 -0
  115. package/dist/extensions/vendor/openviking-pi/qcr-shim.js +94 -0
  116. package/dist/extensions/vendor/openviking-pi/qcr-shim.js.map +1 -0
  117. package/dist/extensions/vendor/openviking-pi/qcr-write.js +333 -0
  118. package/dist/extensions/vendor/openviking-pi/qcr-write.js.map +1 -0
  119. package/dist/extensions/vendor/openviking-pi/recall.js +108 -0
  120. package/dist/extensions/vendor/openviking-pi/recall.js.map +1 -0
  121. package/dist/extensions/vendor/openviking-pi/shared/capture-utils.mjs +529 -0
  122. package/dist/extensions/vendor/openviking-pi/shared/capture-utils.mjs.map +1 -0
  123. package/dist/extensions/vendor/openviking-pi/shared/credentials.mjs +205 -0
  124. package/dist/extensions/vendor/openviking-pi/shared/credentials.mjs.map +1 -0
  125. package/dist/extensions/vendor/openviking-pi/shared/pending-queue.mjs +442 -0
  126. package/dist/extensions/vendor/openviking-pi/shared/pending-queue.mjs.map +1 -0
  127. package/dist/extensions/vendor/openviking-pi/shared/profile-inject.mjs +286 -0
  128. package/dist/extensions/vendor/openviking-pi/shared/profile-inject.mjs.map +1 -0
  129. package/dist/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs +189 -0
  130. package/dist/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs.map +1 -0
  131. package/dist/extensions/vendor/openviking-pi/shared/recall-core.mjs +580 -0
  132. package/dist/extensions/vendor/openviking-pi/shared/recall-core.mjs.map +1 -0
  133. package/dist/extensions/vendor/openviking-pi/shared/retryable.mjs +11 -0
  134. package/dist/extensions/vendor/openviking-pi/shared/retryable.mjs.map +1 -0
  135. package/dist/extensions/vendor/openviking-pi/shared/session-model.mjs +63 -0
  136. package/dist/extensions/vendor/openviking-pi/shared/session-model.mjs.map +1 -0
  137. package/dist/extensions/vendor/openviking-pi/shared/uri-guard.mjs +58 -0
  138. package/dist/extensions/vendor/openviking-pi/shared/uri-guard.mjs.map +1 -0
  139. package/dist/extensions/vendor/openviking-pi/shared/workspace-peer.mjs +16 -0
  140. package/dist/extensions/vendor/openviking-pi/shared/workspace-peer.mjs.map +1 -0
  141. package/dist/extensions/vendor/openviking-pi/sync.js +127 -0
  142. package/dist/extensions/vendor/openviking-pi/sync.js.map +1 -0
  143. package/dist/extensions/vendor/openviking-pi/takeover.js +25 -0
  144. package/dist/extensions/vendor/openviking-pi/takeover.js.map +1 -0
  145. package/dist/extensions/vendor/openviking-pi/tools.js +417 -0
  146. package/dist/extensions/vendor/openviking-pi/tools.js.map +1 -0
  147. package/dist/src/anomalies.js +483 -0
  148. package/dist/src/anomalies.js.map +1 -0
  149. package/dist/src/answerworker.js +180 -0
  150. package/dist/src/answerworker.js.map +1 -0
  151. package/dist/src/appstamp.js +68 -0
  152. package/dist/src/appstamp.js.map +1 -0
  153. package/dist/src/archive/admission.js +3 -0
  154. package/dist/src/archive/admission.js.map +1 -0
  155. package/dist/src/archive/archivedb.js +474 -0
  156. package/dist/src/archive/archivedb.js.map +1 -0
  157. package/dist/src/archive/archiver.js +1770 -0
  158. package/dist/src/archive/archiver.js.map +1 -0
  159. package/dist/src/archive/archivewrite.js +198 -0
  160. package/dist/src/archive/archivewrite.js.map +1 -0
  161. package/dist/src/archive/bundle.js +266 -0
  162. package/dist/src/archive/bundle.js.map +1 -0
  163. package/dist/src/archive/dbmove.js +638 -0
  164. package/dist/src/archive/dbmove.js.map +1 -0
  165. package/dist/src/archive/duplicatecounts.js +80 -0
  166. package/dist/src/archive/duplicatecounts.js.map +1 -0
  167. package/dist/src/archive/eligibility.js +113 -0
  168. package/dist/src/archive/eligibility.js.map +1 -0
  169. package/dist/src/archive/extract.js +288 -0
  170. package/dist/src/archive/extract.js.map +1 -0
  171. package/dist/src/archive/fsutil.js +330 -0
  172. package/dist/src/archive/fsutil.js.map +1 -0
  173. package/dist/src/archive/gzfile.js +277 -0
  174. package/dist/src/archive/gzfile.js.map +1 -0
  175. package/dist/src/archive/kinds.js +22 -0
  176. package/dist/src/archive/kinds.js.map +1 -0
  177. package/dist/src/archive/livecheckpoint.js +178 -0
  178. package/dist/src/archive/livecheckpoint.js.map +1 -0
  179. package/dist/src/archive/liveretention.js +145 -0
  180. package/dist/src/archive/liveretention.js.map +1 -0
  181. package/dist/src/archive/manifest.js +284 -0
  182. package/dist/src/archive/manifest.js.map +1 -0
  183. package/dist/src/archive/overseer.js +283 -0
  184. package/dist/src/archive/overseer.js.map +1 -0
  185. package/dist/src/archive/piglobal.js +129 -0
  186. package/dist/src/archive/piglobal.js.map +1 -0
  187. package/dist/src/archive/plan.js +398 -0
  188. package/dist/src/archive/plan.js.map +1 -0
  189. package/dist/src/archive/prarchive.js +831 -0
  190. package/dist/src/archive/prarchive.js.map +1 -0
  191. package/dist/src/archive/prfiles.js +303 -0
  192. package/dist/src/archive/prfiles.js.map +1 -0
  193. package/dist/src/archive/report.js +169 -0
  194. package/dist/src/archive/report.js.map +1 -0
  195. package/dist/src/archive/restore.js +276 -0
  196. package/dist/src/archive/restore.js.map +1 -0
  197. package/dist/src/archive/rows.js +106 -0
  198. package/dist/src/archive/rows.js.map +1 -0
  199. package/dist/src/archive/seal.js +480 -0
  200. package/dist/src/archive/seal.js.map +1 -0
  201. package/dist/src/archive/status.js +528 -0
  202. package/dist/src/archive/status.js.map +1 -0
  203. package/dist/src/archive/storepass.js +409 -0
  204. package/dist/src/archive/storepass.js.map +1 -0
  205. package/dist/src/backfill.js +217 -0
  206. package/dist/src/backfill.js.map +1 -0
  207. package/dist/src/bench/cost.js +87 -0
  208. package/dist/src/bench/exec.js +76 -0
  209. package/dist/src/bench/values.js +14 -0
  210. package/dist/src/botcontrol.js +127 -0
  211. package/dist/src/botcontrol.js.map +1 -0
  212. package/dist/src/botworker.js +805 -0
  213. package/dist/src/botworker.js.map +1 -0
  214. package/dist/src/capture.js +234 -0
  215. package/dist/src/capture.js.map +1 -0
  216. package/dist/src/cases.js +1491 -0
  217. package/dist/src/cases.js.map +1 -0
  218. package/dist/src/channelfs.js +27 -0
  219. package/dist/src/channelfs.js.map +1 -0
  220. package/dist/src/checklist.js +312 -0
  221. package/dist/src/checklist.js.map +1 -0
  222. package/dist/src/ciretry.js +91 -0
  223. package/dist/src/ciretry.js.map +1 -0
  224. package/dist/src/cli.js +1916 -0
  225. package/dist/src/cli.js.map +1 -0
  226. package/dist/src/cliops.js +333 -0
  227. package/dist/src/cliops.js.map +1 -0
  228. package/dist/src/clonedir.js +15 -0
  229. package/dist/src/clonedir.js.map +1 -0
  230. package/dist/src/commandeffects.js +43 -0
  231. package/dist/src/commandeffects.js.map +1 -0
  232. package/dist/src/commands.js +1312 -0
  233. package/dist/src/commands.js.map +1 -0
  234. package/dist/src/companioninbox.js +203 -0
  235. package/dist/src/companioninbox.js.map +1 -0
  236. package/dist/src/compare.js +673 -0
  237. package/dist/src/compare.js.map +1 -0
  238. package/dist/src/config.js +1027 -0
  239. package/dist/src/config.js.map +1 -0
  240. package/dist/src/configcheck.js +111 -0
  241. package/dist/src/configcheck.js.map +1 -0
  242. package/dist/src/coreext.js +43 -0
  243. package/dist/src/coreext.js.map +1 -0
  244. package/dist/src/daemon.js +929 -0
  245. package/dist/src/daemon.js.map +1 -0
  246. package/dist/src/debuground.js +731 -0
  247. package/dist/src/debuground.js.map +1 -0
  248. package/dist/src/debugroundpi.js +219 -0
  249. package/dist/src/debugroundpi.js.map +1 -0
  250. package/dist/src/diagnostics.js +14 -0
  251. package/dist/src/diagnostics.js.map +1 -0
  252. package/dist/src/digest.js +139 -0
  253. package/dist/src/digest.js.map +1 -0
  254. package/dist/src/dispatch.js +1726 -0
  255. package/dist/src/dispatch.js.map +1 -0
  256. package/dist/src/engine/answerguard.js +18 -0
  257. package/dist/src/engine/answerguard.js.map +1 -0
  258. package/dist/src/engine/botsdk.js +262 -0
  259. package/dist/src/engine/botsdk.js.map +1 -0
  260. package/dist/src/engine/caserunner-sdk.js +332 -0
  261. package/dist/src/engine/caserunner-sdk.js.map +1 -0
  262. package/dist/src/engine/debugpi.js +194 -0
  263. package/dist/src/engine/debugpi.js.map +1 -0
  264. package/dist/src/eod.js +473 -0
  265. package/dist/src/eod.js.map +1 -0
  266. package/dist/src/eodpinwatch.js +391 -0
  267. package/dist/src/eodpinwatch.js.map +1 -0
  268. package/dist/src/escalation.js +1009 -0
  269. package/dist/src/escalation.js.map +1 -0
  270. package/dist/src/eventloop.js +779 -0
  271. package/dist/src/eventloop.js.map +1 -0
  272. package/dist/src/execboundary.js +430 -0
  273. package/dist/src/execboundary.js.map +1 -0
  274. package/dist/src/feedback.js +915 -0
  275. package/dist/src/feedback.js.map +1 -0
  276. package/dist/src/findingscheck.js +200 -0
  277. package/dist/src/findingscheck.js.map +1 -0
  278. package/dist/src/fsdenied.js +26 -0
  279. package/dist/src/fsdenied.js.map +1 -0
  280. package/dist/src/ghread.js +181 -0
  281. package/dist/src/ghread.js.map +1 -0
  282. package/dist/src/github.js +1063 -0
  283. package/dist/src/github.js.map +1 -0
  284. package/dist/src/homes.js +103 -0
  285. package/dist/src/homes.js.map +1 -0
  286. package/dist/src/hostroute.js +24 -0
  287. package/dist/src/hostroute.js.map +1 -0
  288. package/dist/src/improvements.js +625 -0
  289. package/dist/src/improvements.js.map +1 -0
  290. package/dist/src/install.js +946 -0
  291. package/dist/src/install.js.map +1 -0
  292. package/dist/src/installkind.js +40 -0
  293. package/dist/src/installkind.js.map +1 -0
  294. package/dist/src/ipc/capability.js +286 -0
  295. package/dist/src/ipc/capability.js.map +1 -0
  296. package/dist/src/ipc/client.js +226 -0
  297. package/dist/src/ipc/client.js.map +1 -0
  298. package/dist/src/ipc/control.js +70 -0
  299. package/dist/src/ipc/control.js.map +1 -0
  300. package/dist/src/ipc/ghreadshim.js +77 -0
  301. package/dist/src/ipc/ghreadshim.js.map +1 -0
  302. package/dist/src/ipc/launcher.js +65 -0
  303. package/dist/src/ipc/launcher.js.map +1 -0
  304. package/dist/src/ipc/permits.js +293 -0
  305. package/dist/src/ipc/permits.js.map +1 -0
  306. package/dist/src/ipc/postshim.js +137 -0
  307. package/dist/src/ipc/postshim.js.map +1 -0
  308. package/dist/src/ipc/protocol.js +239 -0
  309. package/dist/src/ipc/protocol.js.map +1 -0
  310. package/dist/src/ipc/server.js +312 -0
  311. package/dist/src/ipc/server.js.map +1 -0
  312. package/dist/src/ipc/workerspec.js +148 -0
  313. package/dist/src/ipc/workerspec.js.map +1 -0
  314. package/dist/src/learner/learner.js +1272 -0
  315. package/dist/src/learner/learner.js.map +1 -0
  316. package/dist/src/learner/miner.js +948 -0
  317. package/dist/src/learner/miner.js.map +1 -0
  318. package/dist/src/learner/packet.js +216 -0
  319. package/dist/src/learner/packet.js.map +1 -0
  320. package/dist/src/learner/receipt.js +135 -0
  321. package/dist/src/learner/receipt.js.map +1 -0
  322. package/dist/src/learner/status.js +38 -0
  323. package/dist/src/learner/status.js.map +1 -0
  324. package/dist/src/ledgercheck.js +120 -0
  325. package/dist/src/ledgercheck.js.map +1 -0
  326. package/dist/src/lessonledger.js +451 -0
  327. package/dist/src/lessonledger.js.map +1 -0
  328. package/dist/src/lessonselect.js +639 -0
  329. package/dist/src/lessonselect.js.map +1 -0
  330. package/dist/src/lessonshadow.js +540 -0
  331. package/dist/src/lessonshadow.js.map +1 -0
  332. package/dist/src/levers.js +302 -0
  333. package/dist/src/levers.js.map +1 -0
  334. package/dist/src/live/projection.js +450 -0
  335. package/dist/src/live/projection.js.map +1 -0
  336. package/dist/src/live/publish.js +83 -0
  337. package/dist/src/live/publish.js.map +1 -0
  338. package/dist/src/live/read.js +60 -0
  339. package/dist/src/live/read.js.map +1 -0
  340. package/dist/src/livecli.js +288 -0
  341. package/dist/src/livecli.js.map +1 -0
  342. package/dist/src/loginhint.js +42 -0
  343. package/dist/src/loginhint.js.map +1 -0
  344. package/dist/src/loginrefresh/atomic.js +66 -0
  345. package/dist/src/loginrefresh/atomic.js.map +1 -0
  346. package/dist/src/loginrefresh/lock.js +93 -0
  347. package/dist/src/loginrefresh/lock.js.map +1 -0
  348. package/dist/src/loginrefresh/main.js +58 -0
  349. package/dist/src/loginrefresh/main.js.map +1 -0
  350. package/dist/src/loginrefresh/pirefresh.js +49 -0
  351. package/dist/src/loginrefresh/pirefresh.js.map +1 -0
  352. package/dist/src/loginrefresh/refresher.js +286 -0
  353. package/dist/src/loginrefresh/refresher.js.map +1 -0
  354. package/dist/src/loginrefresh/supervisor.js +253 -0
  355. package/dist/src/loginrefresh/supervisor.js.map +1 -0
  356. package/dist/src/loginrefresh/types.js +4 -0
  357. package/dist/src/loginrefresh/types.js.map +1 -0
  358. package/dist/src/memory/context.js +251 -0
  359. package/dist/src/memory/context.js.map +1 -0
  360. package/dist/src/memory/datafence.js +5 -0
  361. package/dist/src/memory/datafence.js.map +1 -0
  362. package/dist/src/memory/delivery.js +131 -0
  363. package/dist/src/memory/delivery.js.map +1 -0
  364. package/dist/src/memory/eventtags.js +81 -0
  365. package/dist/src/memory/eventtags.js.map +1 -0
  366. package/dist/src/memory/health.js +713 -0
  367. package/dist/src/memory/health.js.map +1 -0
  368. package/dist/src/memory/import.js +504 -0
  369. package/dist/src/memory/import.js.map +1 -0
  370. package/dist/src/memory/layout.js +252 -0
  371. package/dist/src/memory/layout.js.map +1 -0
  372. package/dist/src/memory/legacy-file.js +100 -0
  373. package/dist/src/memory/legacy-file.js.map +1 -0
  374. package/dist/src/memory/lessons.js +370 -0
  375. package/dist/src/memory/lessons.js.map +1 -0
  376. package/dist/src/memory/ovsession.js +449 -0
  377. package/dist/src/memory/ovsession.js.map +1 -0
  378. package/dist/src/memory/relayout.js +259 -0
  379. package/dist/src/memory/relayout.js.map +1 -0
  380. package/dist/src/memory/roundactivity.js +180 -0
  381. package/dist/src/memory/roundactivity.js.map +1 -0
  382. package/dist/src/memory/selection.js +690 -0
  383. package/dist/src/memory/selection.js.map +1 -0
  384. package/dist/src/memory/shadowstatus.js +69 -0
  385. package/dist/src/memory/shadowstatus.js.map +1 -0
  386. package/dist/src/memory/store.js +83 -0
  387. package/dist/src/memory/store.js.map +1 -0
  388. package/dist/src/memory/textidentity.js +8 -0
  389. package/dist/src/memory/textidentity.js.map +1 -0
  390. package/dist/src/metrics.js +773 -0
  391. package/dist/src/metrics.js.map +1 -0
  392. package/dist/src/missingconfig.js +8 -0
  393. package/dist/src/missingconfig.js.map +1 -0
  394. package/dist/src/npmverbs.js +226 -0
  395. package/dist/src/npmverbs.js.map +1 -0
  396. package/dist/src/onboard/choices.js +191 -0
  397. package/dist/src/onboard/choices.js.map +1 -0
  398. package/dist/src/onboard/engine.js +344 -0
  399. package/dist/src/onboard/engine.js.map +1 -0
  400. package/dist/src/onboard/launch.js +83 -0
  401. package/dist/src/onboard/launch.js.map +1 -0
  402. package/dist/src/onboard/steps/appslug.js +211 -0
  403. package/dist/src/onboard/steps/appslug.js.map +1 -0
  404. package/dist/src/onboard/steps/bringup.js +408 -0
  405. package/dist/src/onboard/steps/bringup.js.map +1 -0
  406. package/dist/src/onboard/steps/compose.js +343 -0
  407. package/dist/src/onboard/steps/compose.js.map +1 -0
  408. package/dist/src/onboard/steps/configdelivery.js +50 -0
  409. package/dist/src/onboard/steps/configdelivery.js.map +1 -0
  410. package/dist/src/onboard/steps/configfill.js +1148 -0
  411. package/dist/src/onboard/steps/configfill.js.map +1 -0
  412. package/dist/src/onboard/steps/deploysh.js +80 -0
  413. package/dist/src/onboard/steps/deploysh.js.map +1 -0
  414. package/dist/src/onboard/steps/embeddings.js +472 -0
  415. package/dist/src/onboard/steps/embeddings.js.map +1 -0
  416. package/dist/src/onboard/steps/escalation.js +571 -0
  417. package/dist/src/onboard/steps/escalation.js.map +1 -0
  418. package/dist/src/onboard/steps/githubapp.js +1092 -0
  419. package/dist/src/onboard/steps/githubapp.js.map +1 -0
  420. package/dist/src/onboard/steps/golive.js +506 -0
  421. package/dist/src/onboard/steps/golive.js.map +1 -0
  422. package/dist/src/onboard/steps/index.js +67 -0
  423. package/dist/src/onboard/steps/index.js.map +1 -0
  424. package/dist/src/onboard/steps/ingress.js +762 -0
  425. package/dist/src/onboard/steps/ingress.js.map +1 -0
  426. package/dist/src/onboard/steps/inventory.js +420 -0
  427. package/dist/src/onboard/steps/inventory.js.map +1 -0
  428. package/dist/src/onboard/steps/llmauth.js +893 -0
  429. package/dist/src/onboard/steps/llmauth.js.map +1 -0
  430. package/dist/src/onboard/steps/memory.js +1060 -0
  431. package/dist/src/onboard/steps/memory.js.map +1 -0
  432. package/dist/src/onboard/steps/memorykeys.js +43 -0
  433. package/dist/src/onboard/steps/memorykeys.js.map +1 -0
  434. package/dist/src/onboard/steps/preflight.js +172 -0
  435. package/dist/src/onboard/steps/preflight.js.map +1 -0
  436. package/dist/src/onboard/steps/proof.js +502 -0
  437. package/dist/src/onboard/steps/proof.js.map +1 -0
  438. package/dist/src/onboard/steps/ssh.js +300 -0
  439. package/dist/src/onboard/steps/ssh.js.map +1 -0
  440. package/dist/src/onboard/steps/topology.js +291 -0
  441. package/dist/src/onboard/steps/topology.js.map +1 -0
  442. package/dist/src/onboard/steps/transport.js +511 -0
  443. package/dist/src/onboard/steps/transport.js.map +1 -0
  444. package/dist/src/onboard/steps/verifyup.js +362 -0
  445. package/dist/src/onboard/steps/verifyup.js.map +1 -0
  446. package/dist/src/onboard/steps/vmdeploy.js +368 -0
  447. package/dist/src/onboard/steps/vmdeploy.js.map +1 -0
  448. package/dist/src/onboard/toml.js +53 -0
  449. package/dist/src/onboard/toml.js.map +1 -0
  450. package/dist/src/opencli.js +508 -0
  451. package/dist/src/opencli.js.map +1 -0
  452. package/dist/src/openpr.js +457 -0
  453. package/dist/src/openpr.js.map +1 -0
  454. package/dist/src/openviking/client.js +821 -0
  455. package/dist/src/openviking/client.js.map +1 -0
  456. package/dist/src/openviking/context.js +218 -0
  457. package/dist/src/openviking/context.js.map +1 -0
  458. package/dist/src/openviking/embedder.js +457 -0
  459. package/dist/src/openviking/embedder.js.map +1 -0
  460. package/dist/src/openviking/gapsink.js +38 -0
  461. package/dist/src/openviking/gapsink.js.map +1 -0
  462. package/dist/src/openviking/health.js +69 -0
  463. package/dist/src/openviking/health.js.map +1 -0
  464. package/dist/src/openviking/index.js +24 -0
  465. package/dist/src/openviking/index.js.map +1 -0
  466. package/dist/src/openviking/lessonfind.js +54 -0
  467. package/dist/src/openviking/lessonfind.js.map +1 -0
  468. package/dist/src/openviking/probe.js +89 -0
  469. package/dist/src/openviking/probe.js.map +1 -0
  470. package/dist/src/openviking/proc.js +95 -0
  471. package/dist/src/openviking/proc.js.map +1 -0
  472. package/dist/src/openviking/provisionreport.js +144 -0
  473. package/dist/src/openviking/provisionreport.js.map +1 -0
  474. package/dist/src/openviking/reembed.js +317 -0
  475. package/dist/src/openviking/reembed.js.map +1 -0
  476. package/dist/src/openviking/relayout.js +153 -0
  477. package/dist/src/openviking/relayout.js.map +1 -0
  478. package/dist/src/openviking/sidecar-main.js +39 -0
  479. package/dist/src/openviking/sidecar-main.js.map +1 -0
  480. package/dist/src/openviking/sidecar.js +79 -0
  481. package/dist/src/openviking/sidecar.js.map +1 -0
  482. package/dist/src/openviking/store.js +1758 -0
  483. package/dist/src/openviking/store.js.map +1 -0
  484. package/dist/src/openviking/supervisor.js +422 -0
  485. package/dist/src/openviking/supervisor.js.map +1 -0
  486. package/dist/src/openviking/types.js +5 -0
  487. package/dist/src/openviking/types.js.map +1 -0
  488. package/dist/src/operator-recovery.js +172 -0
  489. package/dist/src/operator-recovery.js.map +1 -0
  490. package/dist/src/operatormessage.js +44 -0
  491. package/dist/src/operatormessage.js.map +1 -0
  492. package/dist/src/outcomes.js +1361 -0
  493. package/dist/src/outcomes.js.map +1 -0
  494. package/dist/src/piauthcopy.js +5 -0
  495. package/dist/src/piauthcopy.js.map +1 -0
  496. package/dist/src/picli.js +45 -0
  497. package/dist/src/picli.js.map +1 -0
  498. package/dist/src/picwd.js +25 -0
  499. package/dist/src/picwd.js.map +1 -0
  500. package/dist/src/pilogin.js +35 -0
  501. package/dist/src/pilogin.js.map +1 -0
  502. package/dist/src/pingpong.js +1028 -0
  503. package/dist/src/pingpong.js.map +1 -0
  504. package/dist/src/posting-journal.js +441 -0
  505. package/dist/src/posting-journal.js.map +1 -0
  506. package/dist/src/posting-outbox.js +662 -0
  507. package/dist/src/posting-outbox.js.map +1 -0
  508. package/dist/src/posting-receipt.js +203 -0
  509. package/dist/src/posting-receipt.js.map +1 -0
  510. package/dist/src/posting.js +348 -0
  511. package/dist/src/posting.js.map +1 -0
  512. package/dist/src/postops.js +637 -0
  513. package/dist/src/postops.js.map +1 -0
  514. package/dist/src/pr-activity.js +11 -0
  515. package/dist/src/pr-activity.js.map +1 -0
  516. package/dist/src/pr-author.js +5 -0
  517. package/dist/src/pr-author.js.map +1 -0
  518. package/dist/src/pr-conversation.js +355 -0
  519. package/dist/src/pr-conversation.js.map +1 -0
  520. package/dist/src/pr-session-lifecycle.js +542 -0
  521. package/dist/src/pr-session-lifecycle.js.map +1 -0
  522. package/dist/src/preflight.js +341 -0
  523. package/dist/src/preflight.js.map +1 -0
  524. package/dist/src/priorresolve.js +275 -0
  525. package/dist/src/priorresolve.js.map +1 -0
  526. package/dist/src/qcrbin.js +180 -0
  527. package/dist/src/qcrbin.js.map +1 -0
  528. package/dist/src/recheck.js +1398 -0
  529. package/dist/src/recheck.js.map +1 -0
  530. package/dist/src/reconcile.js +820 -0
  531. package/dist/src/reconcile.js.map +1 -0
  532. package/dist/src/recordedfindings.js +15 -0
  533. package/dist/src/recordedfindings.js.map +1 -0
  534. package/dist/src/regression.js +546 -0
  535. package/dist/src/regression.js.map +1 -0
  536. package/dist/src/replay.js +598 -0
  537. package/dist/src/replay.js.map +1 -0
  538. package/dist/src/requiredpasses.js +113 -0
  539. package/dist/src/requiredpasses.js.map +1 -0
  540. package/dist/src/resumecheck.js +168 -0
  541. package/dist/src/resumecheck.js.map +1 -0
  542. package/dist/src/reviewcli.js +671 -0
  543. package/dist/src/reviewcli.js.map +1 -0
  544. package/dist/src/reviewcontext.js +22 -0
  545. package/dist/src/reviewcontext.js.map +1 -0
  546. package/dist/src/reviewdetach.js +574 -0
  547. package/dist/src/reviewdetach.js.map +1 -0
  548. package/dist/src/reviewhistory.js +284 -0
  549. package/dist/src/reviewhistory.js.map +1 -0
  550. package/dist/src/reviewhome.js +26 -0
  551. package/dist/src/reviewhome.js.map +1 -0
  552. package/dist/src/reviewmemory.js +110 -0
  553. package/dist/src/reviewmemory.js.map +1 -0
  554. package/dist/src/reviewrendercli.js +104 -0
  555. package/dist/src/reviewrendercli.js.map +1 -0
  556. package/dist/src/round-work.js +20 -0
  557. package/dist/src/round-work.js.map +1 -0
  558. package/dist/src/runhost.js +72 -0
  559. package/dist/src/runhost.js.map +1 -0
  560. package/dist/src/scanauth.js +25 -0
  561. package/dist/src/scanauth.js.map +1 -0
  562. package/dist/src/scanbox.js +846 -0
  563. package/dist/src/scanbox.js.map +1 -0
  564. package/dist/src/scancli.js +1074 -0
  565. package/dist/src/scancli.js.map +1 -0
  566. package/dist/src/scandriverlog.js +30 -0
  567. package/dist/src/scandriverlog.js.map +1 -0
  568. package/dist/src/session-bridge.js +75 -0
  569. package/dist/src/session-bridge.js.map +1 -0
  570. package/dist/src/session-command-payload.js +29 -0
  571. package/dist/src/session-command-payload.js.map +1 -0
  572. package/dist/src/session-command-supervisor.js +939 -0
  573. package/dist/src/session-command-supervisor.js.map +1 -0
  574. package/dist/src/sessionjsonl.js +85 -0
  575. package/dist/src/sessionjsonl.js.map +1 -0
  576. package/dist/src/sessions.js +541 -0
  577. package/dist/src/sessions.js.map +1 -0
  578. package/dist/src/setup/adapters.js +330 -0
  579. package/dist/src/setup/adapters.js.map +1 -0
  580. package/dist/src/setup/baselines.js +64 -0
  581. package/dist/src/setup/baselines.js.map +1 -0
  582. package/dist/src/setup/caserunner.js +554 -0
  583. package/dist/src/setup/caserunner.js.map +1 -0
  584. package/dist/src/setup/configcommit.js +358 -0
  585. package/dist/src/setup/configcommit.js.map +1 -0
  586. package/dist/src/setup/engine.js +672 -0
  587. package/dist/src/setup/engine.js.map +1 -0
  588. package/dist/src/setup/facts.js +593 -0
  589. package/dist/src/setup/facts.js.map +1 -0
  590. package/dist/src/setup/findings.js +948 -0
  591. package/dist/src/setup/findings.js.map +1 -0
  592. package/dist/src/setup/history.js +338 -0
  593. package/dist/src/setup/history.js.map +1 -0
  594. package/dist/src/setup/interview.js +185 -0
  595. package/dist/src/setup/interview.js.map +1 -0
  596. package/dist/src/setup/ledger.js +207 -0
  597. package/dist/src/setup/ledger.js.map +1 -0
  598. package/dist/src/setup/pins.js +43 -0
  599. package/dist/src/setup/pins.js.map +1 -0
  600. package/dist/src/setup/portrait.js +432 -0
  601. package/dist/src/setup/portrait.js.map +1 -0
  602. package/dist/src/setup/presentation.js +9 -0
  603. package/dist/src/setup/presentation.js.map +1 -0
  604. package/dist/src/setup/profile.js +417 -0
  605. package/dist/src/setup/profile.js.map +1 -0
  606. package/dist/src/setup/replay.js +240 -0
  607. package/dist/src/setup/replay.js.map +1 -0
  608. package/dist/src/setup/replaybuild.js +311 -0
  609. package/dist/src/setup/replaybuild.js.map +1 -0
  610. package/dist/src/setup/replayrun.js +806 -0
  611. package/dist/src/setup/replayrun.js.map +1 -0
  612. package/dist/src/setup/replaysource.js +169 -0
  613. package/dist/src/setup/replaysource.js.map +1 -0
  614. package/dist/src/setup/retune.js +333 -0
  615. package/dist/src/setup/retune.js.map +1 -0
  616. package/dist/src/setup/retunelog.js +51 -0
  617. package/dist/src/setup/retunelog.js.map +1 -0
  618. package/dist/src/setup/scan.js +725 -0
  619. package/dist/src/setup/scan.js.map +1 -0
  620. package/dist/src/setup/scanbuild.js +133 -0
  621. package/dist/src/setup/scanbuild.js.map +1 -0
  622. package/dist/src/setup/scanfacts.js +96 -0
  623. package/dist/src/setup/scanfacts.js.map +1 -0
  624. package/dist/src/setup/scanlease.js +251 -0
  625. package/dist/src/setup/scanlease.js.map +1 -0
  626. package/dist/src/setup/scanreport.js +289 -0
  627. package/dist/src/setup/scanreport.js.map +1 -0
  628. package/dist/src/setup/scanrun.js +1733 -0
  629. package/dist/src/setup/scanrun.js.map +1 -0
  630. package/dist/src/setup/scantree.js +257 -0
  631. package/dist/src/setup/scantree.js.map +1 -0
  632. package/dist/src/setup/stage2.js +617 -0
  633. package/dist/src/setup/stage2.js.map +1 -0
  634. package/dist/src/setup/stage2request.js +259 -0
  635. package/dist/src/setup/stage2request.js.map +1 -0
  636. package/dist/src/setup/survey.js +307 -0
  637. package/dist/src/setup/survey.js.map +1 -0
  638. package/dist/src/setup/surveyrun.js +549 -0
  639. package/dist/src/setup/surveyrun.js.map +1 -0
  640. package/dist/src/setup/textsniff.js +89 -0
  641. package/dist/src/setup/textsniff.js.map +1 -0
  642. package/dist/src/setup/trackersink.js +395 -0
  643. package/dist/src/setup/trackersink.js.map +1 -0
  644. package/dist/src/setup/triage.js +636 -0
  645. package/dist/src/setup/triage.js.map +1 -0
  646. package/dist/src/setup/tuning.js +585 -0
  647. package/dist/src/setup/tuning.js.map +1 -0
  648. package/dist/src/setup/unitcut.js +437 -0
  649. package/dist/src/setup/unitcut.js.map +1 -0
  650. package/dist/src/singleflight.js +72 -0
  651. package/dist/src/singleflight.js.map +1 -0
  652. package/dist/src/slack/announce.js +725 -0
  653. package/dist/src/slack/announce.js.map +1 -0
  654. package/dist/src/slack/api.js +227 -0
  655. package/dist/src/slack/api.js.map +1 -0
  656. package/dist/src/slack/messages.js +158 -0
  657. package/dist/src/slack/messages.js.map +1 -0
  658. package/dist/src/slack/origin.js +550 -0
  659. package/dist/src/slack/origin.js.map +1 -0
  660. package/dist/src/slack/policy.js +225 -0
  661. package/dist/src/slack/policy.js.map +1 -0
  662. package/dist/src/slack/reply.js +153 -0
  663. package/dist/src/slack/reply.js.map +1 -0
  664. package/dist/src/slack/router.js +189 -0
  665. package/dist/src/slack/router.js.map +1 -0
  666. package/dist/src/slack/socket.js +323 -0
  667. package/dist/src/slack/socket.js.map +1 -0
  668. package/dist/src/slack/types.js +11 -0
  669. package/dist/src/slack/types.js.map +1 -0
  670. package/dist/src/sqlitehint.js +30 -0
  671. package/dist/src/sqlitehint.js.map +1 -0
  672. package/dist/src/ssh-observation.js +25 -0
  673. package/dist/src/ssh-observation.js.map +1 -0
  674. package/dist/src/state.js +5869 -0
  675. package/dist/src/state.js.map +1 -0
  676. package/dist/src/statemachine.js +220 -0
  677. package/dist/src/statemachine.js.map +1 -0
  678. package/dist/src/stubs.js +52 -0
  679. package/dist/src/stubs.js.map +1 -0
  680. package/dist/src/takeover.js +506 -0
  681. package/dist/src/takeover.js.map +1 -0
  682. package/dist/src/takeoverpi.js +249 -0
  683. package/dist/src/takeoverpi.js.map +1 -0
  684. package/dist/src/terminal-failure.js +26 -0
  685. package/dist/src/terminal-failure.js.map +1 -0
  686. package/dist/src/thread-resolution-refusal.js +4 -0
  687. package/dist/src/thread-resolution-refusal.js.map +1 -0
  688. package/dist/src/tmux.js +126 -0
  689. package/dist/src/tmux.js.map +1 -0
  690. package/dist/src/trackerid.js +43 -0
  691. package/dist/src/trackerid.js.map +1 -0
  692. package/dist/src/transcriptindex.js +512 -0
  693. package/dist/src/transcriptindex.js.map +1 -0
  694. package/dist/src/tui/actions.js +404 -0
  695. package/dist/src/tui/actions.js.map +1 -0
  696. package/dist/src/tui/alerts.js +523 -0
  697. package/dist/src/tui/alerts.js.map +1 -0
  698. package/dist/src/tui/app.js +1835 -0
  699. package/dist/src/tui/app.js.map +1 -0
  700. package/dist/src/tui/archiveops.js +164 -0
  701. package/dist/src/tui/archiveops.js.map +1 -0
  702. package/dist/src/tui/autofile.js +191 -0
  703. package/dist/src/tui/autofile.js.map +1 -0
  704. package/dist/src/tui/board.js +1143 -0
  705. package/dist/src/tui/board.js.map +1 -0
  706. package/dist/src/tui/candidates.js +699 -0
  707. package/dist/src/tui/candidates.js.map +1 -0
  708. package/dist/src/tui/cellwidth.js +151 -0
  709. package/dist/src/tui/cellwidth.js.map +1 -0
  710. package/dist/src/tui/changelog-store.js +404 -0
  711. package/dist/src/tui/changelog-store.js.map +1 -0
  712. package/dist/src/tui/chord.js +26 -0
  713. package/dist/src/tui/chord.js.map +1 -0
  714. package/dist/src/tui/clipboard.js +81 -0
  715. package/dist/src/tui/clipboard.js.map +1 -0
  716. package/dist/src/tui/cmdbar.js +253 -0
  717. package/dist/src/tui/cmdbar.js.map +1 -0
  718. package/dist/src/tui/companion.js +1275 -0
  719. package/dist/src/tui/companion.js.map +1 -0
  720. package/dist/src/tui/companionplan.js +200 -0
  721. package/dist/src/tui/companionplan.js.map +1 -0
  722. package/dist/src/tui/companiontab.js +61 -0
  723. package/dist/src/tui/companiontab.js.map +1 -0
  724. package/dist/src/tui/confighome.js +105 -0
  725. package/dist/src/tui/confighome.js.map +1 -0
  726. package/dist/src/tui/connect.js +44 -0
  727. package/dist/src/tui/connect.js.map +1 -0
  728. package/dist/src/tui/deploy-ceremony.js +75 -0
  729. package/dist/src/tui/deploy-ceremony.js.map +1 -0
  730. package/dist/src/tui/deploy-drain.js +93 -0
  731. package/dist/src/tui/deploy-drain.js.map +1 -0
  732. package/dist/src/tui/deploy-process.js +234 -0
  733. package/dist/src/tui/deploy-process.js.map +1 -0
  734. package/dist/src/tui/deploytab.js +1263 -0
  735. package/dist/src/tui/deploytab.js.map +1 -0
  736. package/dist/src/tui/design.js +111 -0
  737. package/dist/src/tui/design.js.map +1 -0
  738. package/dist/src/tui/digesttab.js +148 -0
  739. package/dist/src/tui/digesttab.js.map +1 -0
  740. package/dist/src/tui/emptystate.js +32 -0
  741. package/dist/src/tui/emptystate.js.map +1 -0
  742. package/dist/src/tui/evidence.js +790 -0
  743. package/dist/src/tui/evidence.js.map +1 -0
  744. package/dist/src/tui/feed.js +415 -0
  745. package/dist/src/tui/feed.js.map +1 -0
  746. package/dist/src/tui/feedbacktab.js +907 -0
  747. package/dist/src/tui/feedbacktab.js.map +1 -0
  748. package/dist/src/tui/filters.js +72 -0
  749. package/dist/src/tui/filters.js.map +1 -0
  750. package/dist/src/tui/ghread.js +272 -0
  751. package/dist/src/tui/ghread.js.map +1 -0
  752. package/dist/src/tui/historypull.js +61 -0
  753. package/dist/src/tui/historypull.js.map +1 -0
  754. package/dist/src/tui/inboxpull.js +197 -0
  755. package/dist/src/tui/inboxpull.js.map +1 -0
  756. package/dist/src/tui/index.js +1425 -0
  757. package/dist/src/tui/index.js.map +1 -0
  758. package/dist/src/tui/issuesink.js +206 -0
  759. package/dist/src/tui/issuesink.js.map +1 -0
  760. package/dist/src/tui/jsonfile.js +32 -0
  761. package/dist/src/tui/jsonfile.js.map +1 -0
  762. package/dist/src/tui/keys.js +97 -0
  763. package/dist/src/tui/keys.js.map +1 -0
  764. package/dist/src/tui/layout.js +70 -0
  765. package/dist/src/tui/layout.js.map +1 -0
  766. package/dist/src/tui/learning.js +469 -0
  767. package/dist/src/tui/learning.js.map +1 -0
  768. package/dist/src/tui/lessonswitch.js +103 -0
  769. package/dist/src/tui/lessonswitch.js.map +1 -0
  770. package/dist/src/tui/livecontrol.js +167 -0
  771. package/dist/src/tui/livecontrol.js.map +1 -0
  772. package/dist/src/tui/memforward.js +310 -0
  773. package/dist/src/tui/memforward.js.map +1 -0
  774. package/dist/src/tui/memincident.js +287 -0
  775. package/dist/src/tui/memincident.js.map +1 -0
  776. package/dist/src/tui/memory.js +485 -0
  777. package/dist/src/tui/memory.js.map +1 -0
  778. package/dist/src/tui/memtab.js +513 -0
  779. package/dist/src/tui/memtab.js.map +1 -0
  780. package/dist/src/tui/metricstab.js +979 -0
  781. package/dist/src/tui/metricstab.js.map +1 -0
  782. package/dist/src/tui/model.js +104 -0
  783. package/dist/src/tui/model.js.map +1 -0
  784. package/dist/src/tui/mouse.js +83 -0
  785. package/dist/src/tui/mouse.js.map +1 -0
  786. package/dist/src/tui/msg.js +196 -0
  787. package/dist/src/tui/msg.js.map +1 -0
  788. package/dist/src/tui/nativecompanion.js +321 -0
  789. package/dist/src/tui/nativecompanion.js.map +1 -0
  790. package/dist/src/tui/openurl.js +17 -0
  791. package/dist/src/tui/openurl.js.map +1 -0
  792. package/dist/src/tui/paint.js +501 -0
  793. package/dist/src/tui/paint.js.map +1 -0
  794. package/dist/src/tui/panes.js +74 -0
  795. package/dist/src/tui/panes.js.map +1 -0
  796. package/dist/src/tui/pipane.js +166 -0
  797. package/dist/src/tui/pipane.js.map +1 -0
  798. package/dist/src/tui/poll-hooks.js +11 -0
  799. package/dist/src/tui/poll-hooks.js.map +1 -0
  800. package/dist/src/tui/poll.js +113 -0
  801. package/dist/src/tui/poll.js.map +1 -0
  802. package/dist/src/tui/proposals.js +715 -0
  803. package/dist/src/tui/proposals.js.map +1 -0
  804. package/dist/src/tui/prpause.js +132 -0
  805. package/dist/src/tui/prpause.js.map +1 -0
  806. package/dist/src/tui/reload.js +351 -0
  807. package/dist/src/tui/reload.js.map +1 -0
  808. package/dist/src/tui/remote.js +312 -0
  809. package/dist/src/tui/remote.js.map +1 -0
  810. package/dist/src/tui/rollover.js +767 -0
  811. package/dist/src/tui/rollover.js.map +1 -0
  812. package/dist/src/tui/scantab.js +1053 -0
  813. package/dist/src/tui/scantab.js.map +1 -0
  814. package/dist/src/tui/setupentry.js +81 -0
  815. package/dist/src/tui/setupentry.js.map +1 -0
  816. package/dist/src/tui/sidebar.js +602 -0
  817. package/dist/src/tui/sidebar.js.map +1 -0
  818. package/dist/src/tui/sshtriage.js +393 -0
  819. package/dist/src/tui/sshtriage.js.map +1 -0
  820. package/dist/src/tui/startup.js +172 -0
  821. package/dist/src/tui/startup.js.map +1 -0
  822. package/dist/src/tui/tabs.js +41 -0
  823. package/dist/src/tui/tabs.js.map +1 -0
  824. package/dist/src/tui/termmirror.js +217 -0
  825. package/dist/src/tui/termmirror.js.map +1 -0
  826. package/dist/src/tui/theme.js +95 -0
  827. package/dist/src/tui/theme.js.map +1 -0
  828. package/dist/src/tui/ticketstab.js +224 -0
  829. package/dist/src/tui/ticketstab.js.map +1 -0
  830. package/dist/src/tui/tmuxsocket.js +101 -0
  831. package/dist/src/tui/tmuxsocket.js.map +1 -0
  832. package/dist/src/tui/trackertickets.js +77 -0
  833. package/dist/src/tui/trackertickets.js.map +1 -0
  834. package/dist/src/tui/unwedge.js +245 -0
  835. package/dist/src/tui/unwedge.js.map +1 -0
  836. package/dist/src/tui/viewer.js +479 -0
  837. package/dist/src/tui/viewer.js.map +1 -0
  838. package/dist/src/tui/viewerinput.js +125 -0
  839. package/dist/src/tui/viewerinput.js.map +1 -0
  840. package/dist/src/updatenotice.js +143 -0
  841. package/dist/src/updatenotice.js.map +1 -0
  842. package/dist/src/usage.js +1007 -0
  843. package/dist/src/usage.js.map +1 -0
  844. package/dist/src/verdicts.js +3848 -0
  845. package/dist/src/verdicts.js.map +1 -0
  846. package/dist/src/version.js +58 -0
  847. package/dist/src/version.js.map +1 -0
  848. package/dist/src/wakes.js +411 -0
  849. package/dist/src/wakes.js.map +1 -0
  850. package/dist/src/webhook.js +725 -0
  851. package/dist/src/webhook.js.map +1 -0
  852. package/dist/src/webhookheal.js +238 -0
  853. package/dist/src/webhookheal.js.map +1 -0
  854. package/dist/src/wire.js +1801 -0
  855. package/dist/src/wire.js.map +1 -0
  856. package/dist/src/worker-session-host.js +531 -0
  857. package/dist/src/worker-session-host.js.map +1 -0
  858. package/dist/src/workerbreaker.js +112 -0
  859. package/dist/src/workerbreaker.js.map +1 -0
  860. package/dist/src/workercontrol.js +49 -0
  861. package/dist/src/workercontrol.js.map +1 -0
  862. package/dist/src/workerlease.js +351 -0
  863. package/dist/src/workerlease.js.map +1 -0
  864. package/dist/src/workerliveness.js +84 -0
  865. package/dist/src/workerliveness.js.map +1 -0
  866. package/dist/src/workerlog.js +65 -0
  867. package/dist/src/workerlog.js.map +1 -0
  868. package/dist/src/workerruntime.js +10 -0
  869. package/dist/src/workerruntime.js.map +1 -0
  870. package/dist/src/workersupervisor.js +1206 -0
  871. package/dist/src/workersupervisor.js.map +1 -0
  872. package/dist/src/workerusage.js +23 -0
  873. package/dist/src/workerusage.js.map +1 -0
  874. package/dist/src/workerworld.js +332 -0
  875. package/dist/src/workerworld.js.map +1 -0
  876. package/dist/src/worktrees.js +984 -0
  877. package/dist/src/worktrees.js.map +1 -0
  878. package/docker/Dockerfile +284 -0
  879. package/docker/Dockerfile.dockerignore +35 -0
  880. package/docker/README.md +221 -0
  881. package/docker/companion/Dockerfile +139 -0
  882. package/docker/companion/agents/evidence.md +34 -0
  883. package/docker/companion/agents/explore.md +26 -0
  884. package/docker/companion/agents/pass-survey.md +49 -0
  885. package/docker/companion/agents/study.md +26 -0
  886. package/docker/companion/entrypoint.sh +343 -0
  887. package/docker/companion/memory-health.mjs +269 -0
  888. package/docker/entrypoint.sh +782 -0
  889. package/docker/memory/Dockerfile +191 -0
  890. package/docker/memory/Dockerfile.dockerignore +20 -0
  891. package/docker/memory/README.md +60 -0
  892. package/docker/memory/entrypoint.sh +163 -0
  893. package/docker/setid/qcr-setid.c +109 -0
  894. package/docker/tunnel/Dockerfile.cloudflared +51 -0
  895. package/docker/tunnel/Dockerfile.ngrok +40 -0
  896. package/docker/tunnel/sidecar.mjs +411 -0
  897. package/docker/vm/tmux.conf +26 -0
  898. package/docker-compose.yml +348 -0
  899. package/extensions/cli/bash-guard-ambient.ts +71 -0
  900. package/extensions/cli/bash-guard.ts +12 -0
  901. package/extensions/cli/companion-guard.ts +8 -0
  902. package/extensions/cli/debug-round.ts +9 -0
  903. package/extensions/cli/inject-bridge.ts +8 -0
  904. package/extensions/cli/ledger-pin.ts +13 -0
  905. package/extensions/cli/lens.ts +22 -0
  906. package/extensions/cli/muted-theme.ts +9 -0
  907. package/extensions/cli/onboarding.ts +8 -0
  908. package/extensions/cli/setup.ts +8 -0
  909. package/extensions/cli/tui-view.ts +8 -0
  910. package/extensions/companion-guard.ts +411 -0
  911. package/extensions/debug-round.ts +281 -0
  912. package/extensions/inject-bridge.ts +630 -0
  913. package/extensions/inline-bash.ts +102 -0
  914. package/extensions/muted-theme.json +68 -0
  915. package/extensions/muted-theme.ts +23 -0
  916. package/extensions/onboarding.ts +233 -0
  917. package/extensions/setup-replay.ts +336 -0
  918. package/extensions/setup-scan.ts +1236 -0
  919. package/extensions/setup-triage.ts +190 -0
  920. package/extensions/setup.ts +1428 -0
  921. package/extensions/tui-view.ts +489 -0
  922. package/extensions/vendor/openviking-pi/LICENSE +201 -0
  923. package/extensions/vendor/openviking-pi/NOTICE +68 -0
  924. package/extensions/vendor/openviking-pi/README.md +550 -0
  925. package/extensions/vendor/openviking-pi/client.ts +588 -0
  926. package/extensions/vendor/openviking-pi/config.json +28 -0
  927. package/extensions/vendor/openviking-pi/config.ts +271 -0
  928. package/extensions/vendor/openviking-pi/index.ts +523 -0
  929. package/extensions/vendor/openviking-pi/lib/capture-adapter.d.mts +10 -0
  930. package/extensions/vendor/openviking-pi/lib/capture-adapter.mjs +88 -0
  931. package/extensions/vendor/openviking-pi/lib/takeover-core.d.mts +80 -0
  932. package/extensions/vendor/openviking-pi/lib/takeover-core.mjs +406 -0
  933. package/extensions/vendor/openviking-pi/lib/uri-guard-adapter.d.mts +1 -0
  934. package/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs +42 -0
  935. package/extensions/vendor/openviking-pi/patches/0000-vendoring-and-build-conformance.patch +726 -0
  936. package/extensions/vendor/openviking-pi/patches/0001-remove-session-before-compact-handler.patch +101 -0
  937. package/extensions/vendor/openviking-pi/patches/0002-no-ambient-work-in-subagent-leaves.patch +202 -0
  938. package/extensions/vendor/openviking-pi/patches/0003-never-auto-create-openviking-sessions.patch +120 -0
  939. package/extensions/vendor/openviking-pi/patches/0004-viking-write-durable-batch-write.patch +521 -0
  940. package/extensions/vendor/openviking-pi/patches/0005-second-memory-namespace.patch +786 -0
  941. package/extensions/vendor/openviking-pi/patches/0006-writes-that-stick-and-honest-errors.patch +996 -0
  942. package/extensions/vendor/openviking-pi/patches/0007-bounded-recall-no-commit.patch +794 -0
  943. package/extensions/vendor/openviking-pi/patches/0008-pr-derived-recall.patch +379 -0
  944. package/extensions/vendor/openviking-pi/patches/0009-pr-session-tools-in-round-areas.patch +375 -0
  945. package/extensions/vendor/openviking-pi/patches/0010-typed-lessons.patch +448 -0
  946. package/extensions/vendor/openviking-pi/patches/0011-review-session-memory-boundary.patch +382 -0
  947. package/extensions/vendor/openviking-pi/patches/0012-typecheck-against-the-real-pi.patch +129 -0
  948. package/extensions/vendor/openviking-pi/patches/0013-createopenviking-factory.patch +1168 -0
  949. package/extensions/vendor/openviking-pi/qcr-hint.ts +313 -0
  950. package/extensions/vendor/openviking-pi/qcr-honest.ts +183 -0
  951. package/extensions/vendor/openviking-pi/qcr-hooks.ts +87 -0
  952. package/extensions/vendor/openviking-pi/qcr-leaf.ts +78 -0
  953. package/extensions/vendor/openviking-pi/qcr-lesson.ts +231 -0
  954. package/extensions/vendor/openviking-pi/qcr-namespaces.ts +198 -0
  955. package/extensions/vendor/openviking-pi/qcr-recall.ts +288 -0
  956. package/extensions/vendor/openviking-pi/qcr-shim.ts +142 -0
  957. package/extensions/vendor/openviking-pi/qcr-write.ts +427 -0
  958. package/extensions/vendor/openviking-pi/recall.ts +149 -0
  959. package/extensions/vendor/openviking-pi/shared/capture-utils.d.mts +9 -0
  960. package/extensions/vendor/openviking-pi/shared/capture-utils.mjs +515 -0
  961. package/extensions/vendor/openviking-pi/shared/credentials.d.mts +14 -0
  962. package/extensions/vendor/openviking-pi/shared/credentials.mjs +228 -0
  963. package/extensions/vendor/openviking-pi/shared/pending-queue.d.mts +19 -0
  964. package/extensions/vendor/openviking-pi/shared/pending-queue.mjs +458 -0
  965. package/extensions/vendor/openviking-pi/shared/profile-inject.d.mts +17 -0
  966. package/extensions/vendor/openviking-pi/shared/profile-inject.mjs +294 -0
  967. package/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs +195 -0
  968. package/extensions/vendor/openviking-pi/shared/recall-core.d.mts +13 -0
  969. package/extensions/vendor/openviking-pi/shared/recall-core.mjs +609 -0
  970. package/extensions/vendor/openviking-pi/shared/retryable.mjs +9 -0
  971. package/extensions/vendor/openviking-pi/shared/session-model.d.mts +3 -0
  972. package/extensions/vendor/openviking-pi/shared/session-model.mjs +57 -0
  973. package/extensions/vendor/openviking-pi/shared/uri-guard.mjs +56 -0
  974. package/extensions/vendor/openviking-pi/shared/workspace-peer.d.mts +5 -0
  975. package/extensions/vendor/openviking-pi/shared/workspace-peer.mjs +16 -0
  976. package/extensions/vendor/openviking-pi/sync.ts +163 -0
  977. package/extensions/vendor/openviking-pi/takeover.ts +36 -0
  978. package/extensions/vendor/openviking-pi/tools.ts +479 -0
  979. package/extensions/vendor/openviking-pi/upstream.json +48 -0
  980. package/package.json +138 -4
  981. package/profiles/default/README.md +21 -0
  982. package/profiles/default/addenda/.gitkeep +0 -0
  983. package/profiles/default/profile.toml +17 -0
  984. package/profiles/example-django/README.md +21 -0
  985. package/profiles/example-django/addenda/10-migration-discipline.md +13 -0
  986. package/profiles/example-django/addenda/20-new-column-nullability.md +12 -0
  987. package/profiles/example-django/addenda/30-test-doctrine.md +12 -0
  988. package/profiles/example-django/addenda/40-orm-usage.md +19 -0
  989. package/profiles/example-django/addenda/50-declared-shape.md +10 -0
  990. package/profiles/example-django/addenda/60-config-placement.md +14 -0
  991. package/profiles/example-django/heuristics.toml +24 -0
  992. package/profiles/example-django/profile.toml +9 -0
  993. package/profiles/fast/README.md +24 -0
  994. package/profiles/fast/profile.toml +59 -0
  995. package/profiles/minimal/README.md +17 -0
  996. package/profiles/minimal/addenda/.gitkeep +0 -0
  997. package/profiles/minimal/profile.toml +8 -0
  998. package/profiles/snappy/README.md +24 -0
  999. package/profiles/snappy/addenda/10-race-as-question.md +6 -0
  1000. package/profiles/snappy/profile.toml +46 -0
  1001. package/prompts/companion-day-open.md +46 -0
  1002. package/prompts/companion-first-run.md +104 -0
  1003. package/prompts/companion.md +821 -0
  1004. package/prompts/conversation-system.md +117 -0
  1005. package/prompts/eod-sweep.md +120 -0
  1006. package/prompts/onboarding.md +74 -0
  1007. package/prompts/pass-common.md +52 -0
  1008. package/prompts/pass-quality-common.md +22 -0
  1009. package/prompts/round-first.md +874 -0
  1010. package/prompts/round-follow-up.md +991 -0
  1011. package/prompts/round-re-review.md +889 -0
  1012. package/prompts/round-recheck.md +196 -0
  1013. package/prompts/round-staleness.md +856 -0
  1014. package/schemas/review-result.v1.json +391 -0
  1015. package/schemas/scan-result.v1.json +421 -0
  1016. package/schemas/version.v1.json +57 -0
  1017. package/scripts/approve-pr.sh +16 -0
  1018. package/scripts/build-stamp.mjs +67 -0
  1019. package/scripts/commit-verdict.sh +155 -0
  1020. package/scripts/companion-e2e.sh +250 -0
  1021. package/scripts/companion-memory-forward.mjs +1966 -0
  1022. package/scripts/config-fingerprint.sh +28 -0
  1023. package/scripts/deploy-manifest.mjs +141 -0
  1024. package/scripts/deploy.sh +1435 -0
  1025. package/scripts/directory-lock.mjs +193 -0
  1026. package/scripts/heartbeat-fresh.mjs +54 -0
  1027. package/scripts/install-locator.sh +328 -0
  1028. package/scripts/install-wrapper.sh +76 -0
  1029. package/scripts/memory-search-check.mjs +98 -0
  1030. package/scripts/mint-token.sh +212 -0
  1031. package/scripts/openviking-embedder.py +392 -0
  1032. package/scripts/openviking-ov-conf.mjs +161 -0
  1033. package/scripts/openviking-provision.mjs +1122 -0
  1034. package/scripts/openviking-reembed.mjs +1154 -0
  1035. package/scripts/post-review.sh +16 -0
  1036. package/scripts/pr-checks.sh +256 -0
  1037. package/scripts/pr-context.py +174 -0
  1038. package/scripts/pr-context.sh +63 -0
  1039. package/scripts/pr-self.sh +144 -0
  1040. package/scripts/pr-threads.sh +145 -0
  1041. package/scripts/qcr +15 -0
  1042. package/scripts/qcr-host.sh +769 -0
  1043. package/scripts/render-review.sh +24 -0
  1044. package/scripts/reply-thread.sh +16 -0
  1045. package/scripts/required-passes.py +112 -0
  1046. package/scripts/smoke-companion.sh +211 -0
  1047. package/scripts/tui-deploy-runner.mjs +61 -0
  1048. package/scripts/verify-dist.mjs +201 -0
  1049. package/scripts/vm-ghcr-login.sh +188 -0
  1050. package/seeds/agents/pass-baseline.md +61 -0
  1051. package/seeds/agents/pass-contracts.md +30 -0
  1052. package/seeds/agents/pass-data-safety.md +54 -0
  1053. package/seeds/agents/pass-delivery.md +37 -0
  1054. package/seeds/agents/pass-prod-risk.md +24 -0
  1055. package/seeds/agents/pass-security.md +31 -0
  1056. package/seeds/agents/pass-statelessness.md +27 -0
  1057. package/seeds/agents/pass-ui.md +23 -0
  1058. package/seeds/agents/pass-validate.md +50 -0
  1059. package/seeds/prompts/conversation-system.md +117 -0
  1060. package/seeds/prompts/eod-sweep.md +120 -0
  1061. package/seeds/prompts/pass-common.md +52 -0
  1062. package/skills/companion/adjudicate/SKILL.md +247 -0
  1063. package/skills/companion/evidence/SKILL.md +150 -0
  1064. package/skills/companion/land/SKILL.md +200 -0
  1065. package/skills/companion/replay/SKILL.md +138 -0
  1066. package/skills/companion/setup/SKILL.md +167 -0
  1067. package/skills/companion/survey/SKILL.md +160 -0
  1068. package/skills/selfimprove/README.md +34 -0
  1069. package/skills/selfimprove/SKILL.md +127 -0
  1070. package/skills/selfimprove/agents/openai.yaml +2 -0
  1071. package/skills/selfimprove/commands/selfimprove.md +6 -0
  1072. package/skills/selfimprove/references/fix-loop.md +49 -0
  1073. package/skills/selfimprove/references/ledger.md +20 -0
  1074. package/skills/selfimprove/references/setup.md +40 -0
  1075. package/src/anomalies.ts +566 -0
  1076. package/src/answerworker.ts +251 -0
  1077. package/src/appstamp.ts +65 -0
  1078. package/src/archive/admission.ts +3 -0
  1079. package/src/archive/archivedb.ts +548 -0
  1080. package/src/archive/archiver.ts +1963 -0
  1081. package/src/archive/archivewrite.ts +279 -0
  1082. package/src/archive/bundle.ts +333 -0
  1083. package/src/archive/dbmove.ts +911 -0
  1084. package/src/archive/duplicatecounts.ts +98 -0
  1085. package/src/archive/eligibility.ts +181 -0
  1086. package/src/archive/extract.ts +342 -0
  1087. package/src/archive/fsutil.ts +415 -0
  1088. package/src/archive/gzfile.ts +370 -0
  1089. package/src/archive/kinds.ts +21 -0
  1090. package/src/archive/livecheckpoint.ts +217 -0
  1091. package/src/archive/liveretention.ts +180 -0
  1092. package/src/archive/manifest.ts +519 -0
  1093. package/src/archive/overseer.ts +336 -0
  1094. package/src/archive/piglobal.ts +174 -0
  1095. package/src/archive/plan.ts +612 -0
  1096. package/src/archive/prarchive.ts +984 -0
  1097. package/src/archive/prfiles.ts +406 -0
  1098. package/src/archive/report.ts +252 -0
  1099. package/src/archive/restore.ts +330 -0
  1100. package/src/archive/rows.ts +187 -0
  1101. package/src/archive/seal.ts +630 -0
  1102. package/src/archive/status.ts +719 -0
  1103. package/src/archive/storepass.ts +581 -0
  1104. package/src/backfill.ts +362 -0
  1105. package/src/bench/cost.ts +113 -0
  1106. package/src/bench/exec.ts +90 -0
  1107. package/src/bench/values.ts +13 -0
  1108. package/src/botcontrol.ts +176 -0
  1109. package/src/botworker.ts +953 -0
  1110. package/src/capture.ts +321 -0
  1111. package/src/cases.ts +1789 -0
  1112. package/src/channelfs.ts +26 -0
  1113. package/src/checklist.ts +506 -0
  1114. package/src/ciretry.ts +141 -0
  1115. package/src/cli.ts +2271 -0
  1116. package/src/cliops.ts +384 -0
  1117. package/src/clonedir.ts +15 -0
  1118. package/src/commandeffects.ts +57 -0
  1119. package/src/commands.ts +1678 -0
  1120. package/src/companioninbox.ts +239 -0
  1121. package/src/compare.ts +957 -0
  1122. package/src/config.ts +2050 -0
  1123. package/src/configcheck.ts +133 -0
  1124. package/src/coreext.ts +47 -0
  1125. package/src/daemon.ts +1302 -0
  1126. package/src/debuground.ts +927 -0
  1127. package/src/debugroundpi.ts +262 -0
  1128. package/src/diagnostics.ts +14 -0
  1129. package/src/digest.ts +183 -0
  1130. package/src/dispatch.ts +2250 -0
  1131. package/src/engine/answerguard.ts +27 -0
  1132. package/src/engine/botsdk.ts +336 -0
  1133. package/src/engine/caserunner-sdk.ts +423 -0
  1134. package/src/engine/debugpi.ts +235 -0
  1135. package/src/eod.ts +669 -0
  1136. package/src/eodpinwatch.ts +556 -0
  1137. package/src/escalation.ts +1253 -0
  1138. package/src/eventloop.ts +1045 -0
  1139. package/src/execboundary.ts +633 -0
  1140. package/src/feedback.ts +1162 -0
  1141. package/src/findingscheck.ts +298 -0
  1142. package/src/fsdenied.ts +24 -0
  1143. package/src/ghread.ts +242 -0
  1144. package/src/github.ts +1497 -0
  1145. package/src/homes.ts +175 -0
  1146. package/src/hostroute.ts +53 -0
  1147. package/src/improvements.ts +787 -0
  1148. package/src/install.ts +1103 -0
  1149. package/src/installkind.ts +50 -0
  1150. package/src/ipc/capability.ts +333 -0
  1151. package/src/ipc/client.ts +269 -0
  1152. package/src/ipc/control.ts +90 -0
  1153. package/src/ipc/ghreadshim.ts +94 -0
  1154. package/src/ipc/launcher.ts +65 -0
  1155. package/src/ipc/permits.ts +362 -0
  1156. package/src/ipc/postshim.ts +164 -0
  1157. package/src/ipc/protocol.ts +342 -0
  1158. package/src/ipc/server.ts +371 -0
  1159. package/src/ipc/workerspec.ts +218 -0
  1160. package/src/learner/learner.ts +1655 -0
  1161. package/src/learner/miner.ts +1290 -0
  1162. package/src/learner/packet.ts +340 -0
  1163. package/src/learner/receipt.ts +168 -0
  1164. package/src/learner/status.ts +107 -0
  1165. package/src/ledgercheck.ts +157 -0
  1166. package/src/lessonledger.ts +703 -0
  1167. package/src/lessonselect.ts +888 -0
  1168. package/src/lessonshadow.ts +810 -0
  1169. package/src/levers.ts +393 -0
  1170. package/src/live/projection.ts +491 -0
  1171. package/src/live/publish.ts +92 -0
  1172. package/src/live/read.ts +86 -0
  1173. package/src/livecli.ts +336 -0
  1174. package/src/loginhint.ts +56 -0
  1175. package/src/loginrefresh/atomic.ts +76 -0
  1176. package/src/loginrefresh/lock.ts +104 -0
  1177. package/src/loginrefresh/main.ts +59 -0
  1178. package/src/loginrefresh/pirefresh.ts +57 -0
  1179. package/src/loginrefresh/refresher.ts +326 -0
  1180. package/src/loginrefresh/supervisor.ts +273 -0
  1181. package/src/loginrefresh/types.ts +35 -0
  1182. package/src/memory/context.ts +385 -0
  1183. package/src/memory/datafence.ts +9 -0
  1184. package/src/memory/delivery.ts +171 -0
  1185. package/src/memory/eventtags.ts +80 -0
  1186. package/src/memory/health.ts +953 -0
  1187. package/src/memory/import.ts +664 -0
  1188. package/src/memory/layout.ts +261 -0
  1189. package/src/memory/legacy-file.ts +104 -0
  1190. package/src/memory/lessons.ts +447 -0
  1191. package/src/memory/ovsession.ts +601 -0
  1192. package/src/memory/relayout.ts +335 -0
  1193. package/src/memory/roundactivity.ts +209 -0
  1194. package/src/memory/selection.ts +989 -0
  1195. package/src/memory/shadowstatus.ts +125 -0
  1196. package/src/memory/store.ts +275 -0
  1197. package/src/memory/textidentity.ts +8 -0
  1198. package/src/metrics.ts +1056 -0
  1199. package/src/missingconfig.ts +7 -0
  1200. package/src/npmverbs.ts +264 -0
  1201. package/src/onboard/choices.ts +222 -0
  1202. package/src/onboard/engine.ts +518 -0
  1203. package/src/onboard/launch.ts +115 -0
  1204. package/src/onboard/steps/appslug.ts +265 -0
  1205. package/src/onboard/steps/bringup.ts +482 -0
  1206. package/src/onboard/steps/compose.ts +459 -0
  1207. package/src/onboard/steps/configdelivery.ts +58 -0
  1208. package/src/onboard/steps/configfill.ts +1352 -0
  1209. package/src/onboard/steps/deploysh.ts +105 -0
  1210. package/src/onboard/steps/embeddings.ts +550 -0
  1211. package/src/onboard/steps/escalation.ts +640 -0
  1212. package/src/onboard/steps/githubapp.ts +1414 -0
  1213. package/src/onboard/steps/golive.ts +577 -0
  1214. package/src/onboard/steps/index.ts +71 -0
  1215. package/src/onboard/steps/ingress.ts +907 -0
  1216. package/src/onboard/steps/inventory.ts +526 -0
  1217. package/src/onboard/steps/llmauth.ts +1095 -0
  1218. package/src/onboard/steps/memory.ts +1290 -0
  1219. package/src/onboard/steps/memorykeys.ts +85 -0
  1220. package/src/onboard/steps/preflight.ts +191 -0
  1221. package/src/onboard/steps/proof.ts +624 -0
  1222. package/src/onboard/steps/ssh.ts +377 -0
  1223. package/src/onboard/steps/topology.ts +337 -0
  1224. package/src/onboard/steps/transport.ts +665 -0
  1225. package/src/onboard/steps/verifyup.ts +448 -0
  1226. package/src/onboard/steps/vmdeploy.ts +442 -0
  1227. package/src/onboard/toml.ts +50 -0
  1228. package/src/opencli.ts +591 -0
  1229. package/src/openpr.ts +568 -0
  1230. package/src/openviking/client.ts +1131 -0
  1231. package/src/openviking/context.ts +263 -0
  1232. package/src/openviking/embedder.ts +516 -0
  1233. package/src/openviking/gapsink.ts +63 -0
  1234. package/src/openviking/health.ts +83 -0
  1235. package/src/openviking/index.ts +119 -0
  1236. package/src/openviking/lessonfind.ts +92 -0
  1237. package/src/openviking/probe.ts +129 -0
  1238. package/src/openviking/proc.ts +110 -0
  1239. package/src/openviking/provisionreport.ts +160 -0
  1240. package/src/openviking/reembed.ts +412 -0
  1241. package/src/openviking/relayout.ts +177 -0
  1242. package/src/openviking/sidecar-main.ts +38 -0
  1243. package/src/openviking/sidecar.ts +106 -0
  1244. package/src/openviking/store.ts +2025 -0
  1245. package/src/openviking/supervisor.ts +474 -0
  1246. package/src/openviking/types.ts +174 -0
  1247. package/src/operator-recovery.ts +237 -0
  1248. package/src/operatormessage.ts +52 -0
  1249. package/src/outcomes.ts +1670 -0
  1250. package/src/piauthcopy.ts +12 -0
  1251. package/src/picli.ts +49 -0
  1252. package/src/picwd.ts +25 -0
  1253. package/src/pilogin.ts +37 -0
  1254. package/src/pingpong.ts +1339 -0
  1255. package/src/posting-journal.ts +549 -0
  1256. package/src/posting-outbox.ts +802 -0
  1257. package/src/posting-receipt.ts +324 -0
  1258. package/src/posting.ts +603 -0
  1259. package/src/postops.ts +832 -0
  1260. package/src/pr-activity.ts +20 -0
  1261. package/src/pr-author.ts +6 -0
  1262. package/src/pr-conversation.ts +432 -0
  1263. package/src/pr-session-lifecycle.ts +631 -0
  1264. package/src/preflight.ts +391 -0
  1265. package/src/priorresolve.ts +343 -0
  1266. package/src/qcrbin.ts +186 -0
  1267. package/src/recheck.ts +1775 -0
  1268. package/src/reconcile.ts +1030 -0
  1269. package/src/recordedfindings.ts +27 -0
  1270. package/src/regression.ts +833 -0
  1271. package/src/replay.ts +816 -0
  1272. package/src/requiredpasses.ts +148 -0
  1273. package/src/resumecheck.ts +246 -0
  1274. package/src/reviewcli.ts +787 -0
  1275. package/src/reviewcontext.ts +35 -0
  1276. package/src/reviewdetach.ts +734 -0
  1277. package/src/reviewhistory.ts +427 -0
  1278. package/src/reviewhome.ts +36 -0
  1279. package/src/reviewmemory.ts +133 -0
  1280. package/src/reviewrendercli.ts +139 -0
  1281. package/src/round-work.ts +42 -0
  1282. package/src/runhost.ts +108 -0
  1283. package/src/scanauth.ts +36 -0
  1284. package/src/scanbox.ts +1081 -0
  1285. package/src/scancli.ts +1296 -0
  1286. package/src/scandriverlog.ts +32 -0
  1287. package/src/session-bridge.ts +139 -0
  1288. package/src/session-command-payload.ts +35 -0
  1289. package/src/session-command-supervisor.ts +1142 -0
  1290. package/src/sessionjsonl.ts +88 -0
  1291. package/src/sessions.ts +659 -0
  1292. package/src/setup/adapters.ts +335 -0
  1293. package/src/setup/baselines.ts +110 -0
  1294. package/src/setup/caserunner.ts +611 -0
  1295. package/src/setup/configcommit.ts +443 -0
  1296. package/src/setup/engine.ts +1001 -0
  1297. package/src/setup/facts.ts +627 -0
  1298. package/src/setup/findings.ts +1264 -0
  1299. package/src/setup/history.ts +443 -0
  1300. package/src/setup/interview.ts +243 -0
  1301. package/src/setup/ledger.ts +324 -0
  1302. package/src/setup/pins.ts +66 -0
  1303. package/src/setup/portrait.ts +635 -0
  1304. package/src/setup/presentation.ts +18 -0
  1305. package/src/setup/profile.ts +508 -0
  1306. package/src/setup/replay.ts +370 -0
  1307. package/src/setup/replaybuild.ts +392 -0
  1308. package/src/setup/replayrun.ts +1096 -0
  1309. package/src/setup/replaysource.ts +198 -0
  1310. package/src/setup/retune.ts +415 -0
  1311. package/src/setup/retunelog.ts +95 -0
  1312. package/src/setup/scan.ts +1033 -0
  1313. package/src/setup/scanbuild.ts +168 -0
  1314. package/src/setup/scanfacts.ts +107 -0
  1315. package/src/setup/scanlease.ts +297 -0
  1316. package/src/setup/scanreport.ts +373 -0
  1317. package/src/setup/scanrun.ts +2268 -0
  1318. package/src/setup/scantree.ts +259 -0
  1319. package/src/setup/stage2.ts +926 -0
  1320. package/src/setup/stage2request.ts +347 -0
  1321. package/src/setup/survey.ts +458 -0
  1322. package/src/setup/surveyrun.ts +758 -0
  1323. package/src/setup/textsniff.ts +95 -0
  1324. package/src/setup/trackersink.ts +433 -0
  1325. package/src/setup/triage.ts +768 -0
  1326. package/src/setup/tuning.ts +766 -0
  1327. package/src/setup/unitcut.ts +523 -0
  1328. package/src/singleflight.ts +86 -0
  1329. package/src/slack/announce.ts +911 -0
  1330. package/src/slack/api.ts +303 -0
  1331. package/src/slack/messages.ts +288 -0
  1332. package/src/slack/origin.ts +599 -0
  1333. package/src/slack/policy.ts +354 -0
  1334. package/src/slack/reply.ts +201 -0
  1335. package/src/slack/router.ts +285 -0
  1336. package/src/slack/socket.ts +384 -0
  1337. package/src/slack/types.ts +108 -0
  1338. package/src/sqlitehint.ts +32 -0
  1339. package/src/ssh-observation.ts +30 -0
  1340. package/src/state.ts +8243 -0
  1341. package/src/statemachine.ts +369 -0
  1342. package/src/stubs.ts +68 -0
  1343. package/src/takeover.ts +634 -0
  1344. package/src/takeoverpi.ts +293 -0
  1345. package/src/terminal-failure.ts +41 -0
  1346. package/src/thread-resolution-refusal.ts +2 -0
  1347. package/src/tmux.ts +153 -0
  1348. package/src/trackerid.ts +41 -0
  1349. package/src/transcriptindex.ts +665 -0
  1350. package/src/tui/actions.ts +484 -0
  1351. package/src/tui/alerts.ts +666 -0
  1352. package/src/tui/app.ts +1979 -0
  1353. package/src/tui/archiveops.ts +192 -0
  1354. package/src/tui/autofile.ts +233 -0
  1355. package/src/tui/board.ts +1432 -0
  1356. package/src/tui/candidates.ts +889 -0
  1357. package/src/tui/cellwidth.ts +148 -0
  1358. package/src/tui/changelog-store.ts +503 -0
  1359. package/src/tui/chord.ts +25 -0
  1360. package/src/tui/clipboard.ts +92 -0
  1361. package/src/tui/cmdbar.ts +296 -0
  1362. package/src/tui/companion.ts +1427 -0
  1363. package/src/tui/companionplan.ts +247 -0
  1364. package/src/tui/companiontab.ts +83 -0
  1365. package/src/tui/confighome.ts +155 -0
  1366. package/src/tui/connect.ts +68 -0
  1367. package/src/tui/deploy-ceremony.ts +104 -0
  1368. package/src/tui/deploy-drain.ts +129 -0
  1369. package/src/tui/deploy-process.ts +265 -0
  1370. package/src/tui/deploytab.ts +1523 -0
  1371. package/src/tui/design.ts +125 -0
  1372. package/src/tui/digesttab.ts +214 -0
  1373. package/src/tui/emptystate.ts +39 -0
  1374. package/src/tui/evidence.ts +999 -0
  1375. package/src/tui/feed.ts +604 -0
  1376. package/src/tui/feedbacktab.ts +1077 -0
  1377. package/src/tui/filters.ts +90 -0
  1378. package/src/tui/ghread.ts +321 -0
  1379. package/src/tui/historypull.ts +81 -0
  1380. package/src/tui/inboxpull.ts +236 -0
  1381. package/src/tui/index.ts +1565 -0
  1382. package/src/tui/issuesink.ts +238 -0
  1383. package/src/tui/jsonfile.ts +42 -0
  1384. package/src/tui/keys.ts +109 -0
  1385. package/src/tui/layout.ts +108 -0
  1386. package/src/tui/learning.ts +627 -0
  1387. package/src/tui/lessonswitch.ts +118 -0
  1388. package/src/tui/livecontrol.ts +228 -0
  1389. package/src/tui/memforward.ts +443 -0
  1390. package/src/tui/memincident.ts +363 -0
  1391. package/src/tui/memory.ts +620 -0
  1392. package/src/tui/memtab.ts +606 -0
  1393. package/src/tui/metricstab.ts +1177 -0
  1394. package/src/tui/model.ts +131 -0
  1395. package/src/tui/mouse.ts +98 -0
  1396. package/src/tui/msg.ts +268 -0
  1397. package/src/tui/nativecompanion.ts +417 -0
  1398. package/src/tui/openurl.ts +21 -0
  1399. package/src/tui/paint.ts +511 -0
  1400. package/src/tui/panes.ts +98 -0
  1401. package/src/tui/pipane.ts +219 -0
  1402. package/src/tui/poll-hooks.ts +12 -0
  1403. package/src/tui/poll.ts +147 -0
  1404. package/src/tui/proposals.ts +838 -0
  1405. package/src/tui/prpause.ts +150 -0
  1406. package/src/tui/reload.ts +436 -0
  1407. package/src/tui/remote.ts +413 -0
  1408. package/src/tui/rollover.ts +969 -0
  1409. package/src/tui/scantab.ts +1290 -0
  1410. package/src/tui/setupentry.ts +93 -0
  1411. package/src/tui/sidebar.ts +749 -0
  1412. package/src/tui/sshtriage.ts +510 -0
  1413. package/src/tui/startup.ts +231 -0
  1414. package/src/tui/tabs.ts +45 -0
  1415. package/src/tui/termmirror.ts +224 -0
  1416. package/src/tui/theme.ts +95 -0
  1417. package/src/tui/ticketstab.ts +310 -0
  1418. package/src/tui/tmuxsocket.ts +129 -0
  1419. package/src/tui/trackertickets.ts +84 -0
  1420. package/src/tui/unwedge.ts +286 -0
  1421. package/src/tui/viewer.ts +575 -0
  1422. package/src/tui/viewerinput.ts +173 -0
  1423. package/src/updatenotice.ts +178 -0
  1424. package/src/usage.ts +1154 -0
  1425. package/src/verdicts.ts +4689 -0
  1426. package/src/version.ts +80 -0
  1427. package/src/wakes.ts +476 -0
  1428. package/src/webhook.ts +942 -0
  1429. package/src/webhookheal.ts +276 -0
  1430. package/src/wire.ts +2153 -0
  1431. package/src/worker-session-host.ts +602 -0
  1432. package/src/workerbreaker.ts +156 -0
  1433. package/src/workercontrol.ts +104 -0
  1434. package/src/workerlease.ts +441 -0
  1435. package/src/workerliveness.ts +103 -0
  1436. package/src/workerlog.ts +79 -0
  1437. package/src/workerruntime.ts +30 -0
  1438. package/src/workersupervisor.ts +1538 -0
  1439. package/src/workerusage.ts +42 -0
  1440. package/src/workerworld.ts +427 -0
  1441. package/src/worktrees.ts +1138 -0
  1442. package/tests/fixtures/regression-cases.json +795 -0
  1443. package/tests/fixtures/seed-manifest.json +19 -0
@@ -0,0 +1,794 @@
1
+ diff --git a/extensions/vendor/openviking-pi/NOTICE b/extensions/vendor/openviking-pi/NOTICE
2
+ --- a/extensions/vendor/openviking-pi/NOTICE
3
+ +++ b/extensions/vendor/openviking-pi/NOTICE
4
+ @@ -42,6 +42,10 @@ Changed by the quickreviewd maintainers, 2026-08-20:
5
+ `viking_write` writes several entries as one batch, a refused key is
6
+ re-read once, and tool failures are reported as failures rather than
7
+ as empty results (2026-10-06).
8
+ + 7. The context hook waits at most 500 ms for recall (every recall request,
9
+ + fallbacks included, on that one deadline), query expansion is off,
10
+ + retired memory entries are never recalled, and sessions are never
11
+ + committed (2026-10-06).
12
+
13
+ Plus vendoring scaffolding: build-conformance fixes for this repo's stricter
14
+ tsconfig, ambient type declarations for uninstalled packages, three unused
15
+ diff --git a/extensions/vendor/openviking-pi/README.md b/extensions/vendor/openviking-pi/README.md
16
+ --- a/extensions/vendor/openviking-pi/README.md
17
+ +++ b/extensions/vendor/openviking-pi/README.md
18
+ @@ -1,7 +1,7 @@
19
+ # openviking-pi — vendored, patched fork
20
+
21
+ The OpenViking pi extension our sessions load. Vendored, not depended on:
22
+ -upstream ships it as an `examples/` directory, not a package, and we need six
23
+ +upstream ships it as an `examples/` directory, not a package, and we need seven
24
+ behaviour changes that upstream has no reason to make.
25
+
26
+ | | |
27
+ @@ -20,7 +20,7 @@ fails on drift between the two.
28
+
29
+ ## Why a fork rather than configuration
30
+
31
+ -Every one of the six patches was tried as configuration first and does not
32
+ +Every one of the seven patches was tried as configuration first and does not
33
+ exist there. The evidence is a spike against a **running v0.4.15 server plus
34
+ the pinned pi 0.84.1** — `assets/findings.md` in the issue tracker,
35
+ with transcripts. Read it before changing anything here; several of its
36
+ @@ -28,9 +28,9 @@ findings contradict the OpenViking docs, which lead the tag.
37
+
38
+ ## The patch series
39
+
40
+ -Six numbered behaviour patches, applied in order over the vendored upstream
41
+ +Seven numbered behaviour patches, applied in order over the vendored upstream
42
+ files, plus one unnumbered scaffolding patch. They live in `patches/` as
43
+ -`git apply`-able diffs — verified by applying all seven, in order, to a
44
+ +`git apply`-able diffs — verified by applying all eight, in order, to a
45
+ pristine `v0.4.15` extraction and diffing the result against this directory:
46
+ byte-identical. (`patches/` and `upstream.json` are meta and are not themselves
47
+ part of the reproduced tree.) Every hunk they add carries a greppable marker:
48
+ @@ -266,6 +266,58 @@ Touches: `qcr-honest.ts` (new), `qcr-write.ts` (`buildBatchWriteRequest`,
49
+ `statResponse` envelopes), `config.ts` (`rereadApiKey`), `tools.ts`,
50
+ `index.ts` (the banner, the re-reader).
51
+
52
+ +### 0007 — bounded recall, no commit (S3)
53
+ +
54
+ +By the owner's ruling, PR sessions keep this extension, bounded — the
55
+ +per-turn recall wait is capped at 500 ms and query expansion is off. Four
56
+ +changes:
57
+ +
58
+ +* **The `context` hook waits at most 500 ms for recall.** It used to await
59
+ + the whole recall before every provider request: a context search that could
60
+ + spend a 15 s expansion fuse, then a `/search/recall` fallback with its own
61
+ + 10 s, then a raw find — against a server whose local embedder blocks its one
62
+ + event loop (search p50 22 s, max 155 s, 2026-10-03..06). Now every request
63
+ + of one recall runs on ONE deadline (`qcr-recall.ts` `budgetedFetch`): each
64
+ + gets the time left as its own timeout, and once none is left the next
65
+ + request is not sent — the fetch throws, which ends the fallback chain where
66
+ + it stands. `raceBudget` returns the hook on time whatever the chain is doing.
67
+ + A recall that misses the deadline leaves this run without a block; a late
68
+ + answer is dropped, never injected into a later turn (that would rewrite a
69
+ + message the provider has already cached). A caller may ask for less than
70
+ + `RECALL_WAIT_MS`, never more.
71
+ +* **Query expansion is off — in code.** `config.json` says
72
+ + `"recallQueryExpansion": "off"`, and `config.ts` forces it (and the
73
+ + `Configured` flag that makes the request body carry it) after every
74
+ + override, including `OPENVIKING_RECALL_QUERY_EXPANSION`, the way PATCH 1
75
+ + forces takeover: a ruling is not a knob. Expansion is a model call the
76
+ + server makes before retrieval whenever a search carries a session id; this
77
+ + deployment runs no model for it. (`ov.conf retrieval.enable_intent = false`
78
+ + turns the server's own query planning off too — the entrypoints.)
79
+ +* **A retired entry is never recalled.** Retire is a `#retired` header tag and
80
+ + the file stays in the indexed root. The daemon publishes the retired URIs
81
+ + it sees beside the sessions' ovcli.conf (`QCR_OV_RETIRED_FILE`,
82
+ + `src/memory/ovsession.ts` `writeRetiredUris`); `retiredGuard` sends them as
83
+ + `exclude_uris` on a context search (never on list mode, which rejects the
84
+ + field) and drops any recalled entry whose own text opens with the tag,
85
+ + re-rendering the block in the server's envelope. The header rule is
86
+ + `parseHashTags`', pinned against it by test — a `#retired` quoted in prose
87
+ + is not a retirement.
88
+ +* **Nothing commits a session.**: commit exists to promote session
89
+ + notes into memories through an extraction model this deployment does not
90
+ + run, so every commit archived the raw notes and produced nothing (143
91
+ + archives on the VM, 0 overviews). The 20k-token threshold commit (and the
92
+ + session GET after every synced turn that decided it), the commit on
93
+ + `session_shutdown` and the `/viking commit` command are gone;
94
+ + `SyncManager.commit()` sends nothing and queues nothing, and a commit an
95
+ + older build queued on disk is answered with a final refusal on replay, so
96
+ + it is dropped, never sent. Per-turn sync STAYS (R3); the raw tier ages out
97
+ + by the daemon's DELETE when the PR closes (and its reconcile sweep).
98
+ +
99
+ +Touches: `qcr-recall.ts` (new), `recall.ts` (the bounded, retired-aware
100
+ +search), `sync.ts` (no commit, the replay refusal), `index.ts` (the hook's
101
+ +budget, the retired list, no shutdown commit, the command, the banner),
102
+ +`config.ts` (expansion forced off), `config.json`.
103
+ +
104
+ ## Rebasing onto a newer upstream
105
+
106
+ ```sh
107
+ @@ -278,16 +330,16 @@ git -C /tmp/ov checkout <new-tag>
108
+ for p in extensions/vendor/openviking-pi/patches/0*.patch; do
109
+ git apply --3way "$p" || echo "RESOLVE: $p"
110
+ done
111
+ -# 3. Re-verify all six patches, then:
112
+ +# 3. Re-verify all seven patches, then:
113
+ timeout 900 npm test && npm run build
114
+ ```
115
+
116
+ Then update `extension_commit` and `version` in `config.toml [openviking]`,
117
+ the base commit in `NOTICE` and in the table above, and re-run the live
118
+ -verification below. A bump re-verifies **all six** patches — a patch that no
119
+ +verification below. A bump re-verifies **all seven** patches — a patch that no
120
+ longer applies is a patch whose reason may have changed, not a patch to drop.
121
+
122
+ -`tests/openviking-fork.test.ts` is the guard rail: it asserts the six patches
123
+ +`tests/openviking-fork.test.ts` is the guard rail: it asserts the seven patches
124
+ are still present (markers, and the *absence* of what each one removed) and
125
+ that the pinned commit here matches `config.toml`. It cannot tell you whether
126
+ upstream grew a *new* compaction handler or a *new* write tool — read the
127
+ @@ -316,6 +368,12 @@ item — "does a no-op second handler drop ledger-pin's pinned block?"
128
+ which this patch series makes moot by construction rather than by measurement.
129
+ Fold both into `npm run smoke:session`.
130
+
131
+ +Also unverified live, for 0007: that pi awaits the `context` handler before
132
+ +the provider request exactly as upstream's comment says (the 500 ms bound is
133
+ +unit-tested on the recall manager and pinned structurally on the hook), and
134
+ +that the pinned server takes `exclude_uris` on the context face as the
135
+ +daemon's own search already does. Fold both into the session smoke.
136
+ +
137
+ Also unverified live: a `viking_read`/`viking_write` through the SECOND
138
+ (reviewer) client from the companion's pi. The key and the server-side
139
+ confinement are proven; the extension-side routing is covered by unit tests
140
+ diff --git a/extensions/vendor/openviking-pi/config.json b/extensions/vendor/openviking-pi/config.json
141
+ --- a/extensions/vendor/openviking-pi/config.json
142
+ +++ b/extensions/vendor/openviking-pi/config.json
143
+ @@ -8,9 +8,8 @@
144
+ "minQueryLength": 3,
145
+ "profileTokenBudget": 10000,
146
+ "resumeContextBudget": 32000,
147
+ - "commitTokenThreshold": 20000,
148
+ - "commitKeepRecentCount": 10,
149
+ - "_qcr_fork": "Vendored + patched fork of the OpenViking pi extension; see README.md. takeover.enabled below is belt-and-braces only — config.ts forces it off in code (PATCH 1).",
150
+ + "recallQueryExpansion": "off",
151
+ + "_qcr_fork": "Vendored + patched fork of the OpenViking pi extension; see README.md. takeover.enabled below and recallQueryExpansion above are belt-and-braces only — config.ts forces takeover off (PATCH 1) and query expansion off (PATCH 7) in code. There is no commitTokenThreshold: nothing commits a session (PATCH 7).",
152
+ "takeover": {
153
+ "enabled": false,
154
+ "tokenThreshold": 30000,
155
+ diff --git a/extensions/vendor/openviking-pi/config.ts b/extensions/vendor/openviking-pi/config.ts
156
+ --- a/extensions/vendor/openviking-pi/config.ts
157
+ +++ b/extensions/vendor/openviking-pi/config.ts
158
+ @@ -235,6 +235,17 @@ export function loadConfig(extensionDir: string): OVConfig {
159
+ config.captureMode = config.captureMode === "keyword" ? "keyword" : "semantic";
160
+ config.recallPeerScope = config.recallPeerScope === "actor" ? "actor" : "all";
161
+ config.recallQueryExpansion = config.recallQueryExpansion === "off" ? "off" : "auto";
162
+ + // [QCR PATCH 7] Query expansion is OFF, in code — owner ruling R3 (
163
+ + // S3). It is a model call the server makes before retrieval whenever a
164
+ + // search carries a session id, this deployment configures no model for it
165
+ + // (every call failed on a missing key), and it sat on the 15 s fuse the
166
+ + // context hook used to wait out. config.json says "off" too, but like
167
+ + // takeover in PATCH 1 a knob — or the OPENVIKING_RECALL_QUERY_EXPANSION env
168
+ + // override above — is something an operator can flip, and this one is a
169
+ + // ruling. `Configured` is what makes the request body carry the "off"
170
+ + // (recall-core.mjs sends nothing, i.e. the server's "auto", otherwise).
171
+ + config.recallQueryExpansion = "off";
172
+ + config.recallQueryExpansionConfigured = true;
173
+ if (!Array.isArray(config.bypassPatterns)) config.bypassPatterns = [];
174
+ config.peerId = resolveEffectivePeerId({ cfg: config as any, cwd: process.cwd() }).peerId;
175
+ return config;
176
+ diff --git a/extensions/vendor/openviking-pi/index.ts b/extensions/vendor/openviking-pi/index.ts
177
+ --- a/extensions/vendor/openviking-pi/index.ts
178
+ +++ b/extensions/vendor/openviking-pi/index.ts
179
+ @@ -11,7 +11,7 @@
180
+ *
181
+ * ── QCR FORK ────────────────────────────────────────────────────────────────
182
+ * Vendored from volcengine/OpenViking @ v0.4.15, examples/pi-coding-agent-
183
+ - * extension. Six numbered patches; every hunk carries a `[QCR PATCH n]`
184
+ + * extension. Seven numbered patches; every hunk carries a `[QCR PATCH n]`
185
+ * marker so a rebase is a search, not an audit. See README.md here.
186
+ * PATCH 1 — no session_before_compact handler (extensions/ledger-pin.ts is
187
+ * the sole owner of compaction) and takeover forced off.
188
+ @@ -24,6 +24,10 @@
189
+ * is not), viking_write takes several entries as ONE batch, a
190
+ * refused key is re-read once, and no failure reads as "No
191
+ * results found".
192
+ + * PATCH 7 — bounded recall, no commit: the context hook waits at most
193
+ + * 500 ms for recall (every request of it on one deadline, no
194
+ + * fallback past it), query expansion is off in code, retired
195
+ + * entries are never recalled, and nothing commits a session.
196
+ * ────────────────────────────────────────────────────────────────────────────
197
+ */
198
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
199
+ @@ -41,6 +45,8 @@ import { createTakeoverManager } from "./takeover.js";
200
+ import { isLeafProcess } from "./qcr-leaf.js";
201
+ // [QCR PATCH 5]
202
+ import { ownNamespaceName, resolveExtraNamespaces } from "./qcr-namespaces.js";
203
+ +// [QCR PATCH 7]
204
+ +import { readRetiredUris, RECALL_WAIT_MS, RETIRED_FILE_ENV } from "./qcr-recall.js";
205
+
206
+ export default async function (pi: ExtensionAPI) {
207
+ // [QCR PATCH 2] Decided once, from argv, before anything else: a
208
+ @@ -79,7 +85,12 @@ export default async function (pi: ExtensionAPI) {
209
+ }));
210
+ const namespaces = [{ name: ownNamespaceName(config.user), client }, ...extraNamespaces];
211
+ const sync = new SyncManager(client, config);
212
+ - const recall = new RecallManager(client, config, () => sync.sessionId);
213
+ + // [QCR PATCH 7] The retired URIs the daemon publishes beside ovcli.conf,
214
+ + // re-read for every recall (a small local file), so a retirement reaches a
215
+ + // running session without a restart.
216
+ + const recall = new RecallManager(client, config, () => sync.sessionId, {
217
+ + retiredUris: () => readRetiredUris(process.env[RETIRED_FILE_ENV]),
218
+ + });
219
+ const debugLog = (message: string) => {
220
+ const file = process.env.OV_DEBUG_LOG;
221
+ if (!file) return;
222
+ @@ -254,7 +265,10 @@ export default async function (pi: ExtensionAPI) {
223
+
224
+ // Keep recall synchronous with the provider request so the current prompt
225
+ // still receives current-query memory, without blocking user-message UI.
226
+ - await recall.searchPending();
227
+ + // [QCR PATCH 7] …but never for longer than RECALL_WAIT_MS (owner ruling
228
+ + // R3): every request of the recall shares that one deadline, and a recall
229
+ + // that misses it leaves this run without a block — the turn goes on.
230
+ + await recall.searchPending(RECALL_WAIT_MS);
231
+
232
+ const afterTakeover = config.takeoverEnabled
233
+ ? takeover.transformContext(event.messages as any)
234
+ @@ -273,8 +287,8 @@ export default async function (pi: ExtensionAPI) {
235
+ // --- turn_end ---
236
+ pi.on("turn_end", async (event, ctx) => {
237
+ if (!connected || bypassed || !config.syncTurns) return;
238
+ - // [QCR PATCH 2] No turn sync and therefore no threshold auto-commit from
239
+ - // a leaf — a commit there would archive the SHEPHERD's session.
240
+ + // [QCR PATCH 2] No turn sync from a leaf. ([QCR PATCH 7]: the threshold
241
+ + // auto-commit that rode the sync is gone everywhere — sync.ts.)
242
+ if (leaf) return;
243
+
244
+ const branch = ctx.sessionManager.getBranch();
245
+ @@ -309,12 +323,11 @@ export default async function (pi: ExtensionAPI) {
246
+ // [QCR PATCH 2] A leaf exits after every pass; it commits nothing.
247
+ if (leaf) return;
248
+
249
+ + // [QCR PATCH 7] was `takeover.shutdown()` / `sync.commit()` — a commit on
250
+ + // every shutdown.: commit is never called (it only promotes notes
251
+ + // through an extraction model this deployment does not run); the PR's raw
252
+ + // tier ages out by the daemon's DELETE when the PR closes.
253
+ await sync.shutdown();
254
+ - if (config.takeoverEnabled) {
255
+ - await takeover.shutdown();
256
+ - } else {
257
+ - await sync.commit();
258
+ - }
259
+ });
260
+
261
+ // --- agent_end ---
262
+ @@ -335,20 +348,12 @@ export default async function (pi: ExtensionAPI) {
263
+ }
264
+
265
+ if (args?.trim() === "commit") {
266
+ - await sync.shutdown();
267
+ - const commitResult = config.takeoverEnabled ? null : await sync.commit();
268
+ - const ok = config.takeoverEnabled
269
+ - ? await takeover.commitAndAdvance()
270
+ - : commitResult !== null;
271
+ - if (ok) {
272
+ - ctx.ui.notify(
273
+ - "OpenViking: committed successfully" +
274
+ - (commitResult?.trace_id ? ` (trace_id=${commitResult.trace_id})` : ""),
275
+ - "info",
276
+ - );
277
+ - } else {
278
+ - ctx.ui.notify("OpenViking: commit failed", "error");
279
+ - }
280
+ + // [QCR PATCH 7] No manual commit either — say so rather
281
+ + // than report a "failed" commit that was never attempted.
282
+ + ctx.ui.notify(
283
+ + "OpenViking: session commit is disabled in this deployment — durable memory is written with viking_write",
284
+ + "info",
285
+ + );
286
+ return;
287
+ }
288
+
289
+ @@ -432,12 +437,11 @@ function updateStatus(
290
+ ): void {
291
+ const setter = ctx?.ui?.setStatus;
292
+ if (typeof setter !== "function") return;
293
+ - const threshold = config.takeoverEnabled
294
+ - ? config.takeoverTokenThreshold
295
+ - : config.commitTokenThreshold;
296
+ + // [QCR PATCH 7] was ` · ✎ ${commitTokenThreshold}` — a commit threshold
297
+ + // that no longer exists.
298
+ const pending = config.takeoverEnabled && takeoverState
299
+ - ? ` · ctx ${takeoverState.coveredUserTurns ?? 0} · ~${takeoverState.pendingTokens ?? 0}/${threshold}`
300
+ - : ` · ✎ ${threshold}`;
301
+ + ? ` · ctx ${takeoverState.coveredUserTurns ?? 0} · ~${takeoverState.pendingTokens ?? 0}/${config.takeoverTokenThreshold}`
302
+ + : " · no commit";
303
+ const status = `${connected ? "OV ✓" : "OV ✗"} · ↩${added}${pending} · ${sessionId ? sessionId.slice(0, 12) : "none"}`;
304
+ try {
305
+ setter(status);
306
+ diff --git a/extensions/vendor/openviking-pi/recall.ts b/extensions/vendor/openviking-pi/recall.ts
307
+ --- a/extensions/vendor/openviking-pi/recall.ts
308
+ +++ b/extensions/vendor/openviking-pi/recall.ts
309
+ @@ -1,12 +1,22 @@
310
+ import type { OVClient } from "./client.js";
311
+ import type { OVConfig } from "./config.js";
312
+ import { buildRecallBlock } from "./shared/recall-core.mjs";
313
+ +// [QCR PATCH 7]
314
+ +import { budgetedFetch, raceBudget, RECALL_WAIT_MS, retiredGuard } from "./qcr-recall.js";
315
+
316
+ export interface RecallCache {
317
+ block: string | null;
318
+ promptText: string; // the query this cache is for
319
+ }
320
+
321
+ +/** [QCR PATCH 7] What the recall manager needs beyond the client. */
322
+ +export interface RecallOptions {
323
+ + /** The retired URIs to exclude (the daemon's published list). */
324
+ + retiredUris?: () => readonly string[];
325
+ + /** Millisecond clock for the recall deadline. Tests inject one. */
326
+ + now?: () => number;
327
+ +}
328
+ +
329
+ export class RecallManager {
330
+ private client: OVClient;
331
+ private config: OVConfig;
332
+ @@ -15,18 +25,37 @@ export class RecallManager {
333
+ // Read lazily: the session manager that owns this id is constructed after the
334
+ // recall manager, and the id only exists once a session has been opened.
335
+ private sessionId: () => string | null;
336
+ + // [QCR PATCH 7]
337
+ + private retiredUris: () => readonly string[];
338
+ + private now: () => number;
339
+
340
+ - constructor(client: OVClient, config: OVConfig, sessionId: () => string | null = () => null) {
341
+ + constructor(
342
+ + client: OVClient,
343
+ + config: OVConfig,
344
+ + sessionId: () => string | null = () => null,
345
+ + opts: RecallOptions = {},
346
+ + ) {
347
+ this.client = client;
348
+ this.config = config;
349
+ this.sessionId = sessionId;
350
+ + this.retiredUris = opts.retiredUris ?? (() => []);
351
+ + this.now = opts.now ?? Date.now;
352
+ }
353
+
354
+ queueSearch(userQuery: string): void {
355
+ this.pendingPrompt = userQuery;
356
+ }
357
+
358
+ - async searchPending(): Promise<string | null> {
359
+ + /**
360
+ + * [QCR PATCH 7] Bounded: the whole recall — every request of it, fallbacks
361
+ + * included — runs on ONE deadline `budgetMs` from now, capped at
362
+ + * `RECALL_WAIT_MS` (owner ruling R3, S3). A recall that misses it is
363
+ + * "no recall for this run": the turn proceeds, and a late answer is dropped
364
+ + * rather than injected into a later turn (that would rewrite a message the
365
+ + * provider has already cached). Retired entries are excluded and filtered
366
+ + * (`retiredGuard`).
367
+ + */
368
+ + async searchPending(budgetMs: number = RECALL_WAIT_MS): Promise<string | null> {
369
+ if (!this.pendingPrompt) return this.cache.block;
370
+
371
+ const userQuery = this.pendingPrompt;
372
+ @@ -36,20 +65,28 @@ export class RecallManager {
373
+ return null;
374
+ }
375
+
376
+ - const block = await buildRecallBlock(
377
+ - // 10s is this extension's own budget for a bare retrieval; when the
378
+ - // request also spends a server fuse the helper hands down a longer
379
+ - // deadline, and ignoring it would abort a request still inside its fuse.
380
+ - (path: string, init?: any, options?: any) =>
381
+ - this.client.fetchJSON(path, init, options?.timeoutMs ?? 10000),
382
+ - this.config as any,
383
+ - userQuery,
384
+ - {
385
+ + const budget = Math.max(0, Math.min(Number(budgetMs) || 0, RECALL_WAIT_MS));
386
+ + const deadline = this.now() + budget;
387
+ + const fetch = retiredGuard(
388
+ + budgetedFetch(
389
+ + // 10s was this extension's own budget for a bare retrieval; the
390
+ + // deadline above now caps every request at the time left on it.
391
+ + (path: string, init?: any, options?: any) =>
392
+ + this.client.fetchJSON(path, init, options?.timeoutMs ?? 10000),
393
+ + deadline,
394
+ + this.now,
395
+ + ),
396
+ + this.retiredUris,
397
+ + );
398
+ + const { value: block } = await raceBudget(
399
+ + buildRecallBlock(fetch, this.config as any, userQuery, {
400
+ actorPeerId: this.config.peerId,
401
+ - // Passing the OV session id is what turns on server-side query
402
+ - // expansion and the cross-turn dedup ledger.
403
+ + // The OV session id buys the cross-turn dedup ledger; query
404
+ + // expansion, which it would also turn on, is forced off in config.ts.
405
+ sessionId: this.sessionId() ?? "",
406
+ - },
407
+ + }),
408
+ + deadline - this.now(),
409
+ + null as string | null,
410
+ );
411
+ this.cache = { block, promptText: userQuery };
412
+ return block;
413
+ diff --git a/extensions/vendor/openviking-pi/sync.ts b/extensions/vendor/openviking-pi/sync.ts
414
+ --- a/extensions/vendor/openviking-pi/sync.ts
415
+ +++ b/extensions/vendor/openviking-pi/sync.ts
416
+ @@ -7,6 +7,8 @@ import type { OVConfig } from "./config.js";
417
+ import { enqueue, listPending, replayPending } from "./shared/pending-queue.mjs";
418
+ import { extractBranchCapturePayloads } from "./lib/capture-adapter.mjs";
419
+ import { countUndeliveredForSession, estimatePayloadTokens } from "./lib/takeover-core.mjs";
420
+ +// [QCR PATCH 7]
421
+ +import { refuseCommits } from "./qcr-recall.js";
422
+
423
+ // --- SyncManager ---
424
+
425
+ @@ -91,7 +93,9 @@ export class SyncManager {
426
+ async replayPending(): Promise<void> {
427
+ if (!this.client.connected) return;
428
+ await replayPending(
429
+ - (path: string, init?: any) => this.client.fetchJSON(path, init, 10000),
430
+ + // [QCR PATCH 7] A commit an older build queued on disk is answered with
431
+ + // a final refusal here — dropped from the queue, never sent.
432
+ + refuseCommits((path: string, init?: any) => this.client.fetchJSON(path, init, 10000)),
433
+ (stage: string, data: unknown) =>
434
+ debugLog(`${stage}: ${JSON.stringify(data)}`),
435
+ );
436
+ @@ -122,9 +126,10 @@ export class SyncManager {
437
+ if (added === extracted.payloads.length) {
438
+ this.syncedEntryCount = extracted.nextEntryCount;
439
+ }
440
+ - if (added > 0 && !this.config.takeoverEnabled) {
441
+ - await this.commitIfNeeded();
442
+ - }
443
+ + // [QCR PATCH 7] was `if (added > 0 && !takeoverEnabled) await
444
+ + // this.commitIfNeeded()` — a session GET after every synced turn and a
445
+ + // commit at 20k pending tokens. Commit is never called; the
446
+ + // per-turn sync above stays (owner ruling R3).
447
+ return { added, tokens, allDelivered };
448
+ }
449
+
450
+ @@ -136,39 +141,18 @@ export class SyncManager {
451
+ return { accepted: true, delivered: false };
452
+ }
453
+
454
+ - async commitIfNeeded(): Promise<void> {
455
+ - if (!this.ovSessionId) return;
456
+ - const meta = await this.client.getSession(this.ovSessionId);
457
+ - const pending = Number(meta?.pending_tokens || 0);
458
+ - if (pending >= this.config.commitTokenThreshold) {
459
+ - await this.commit();
460
+ - }
461
+ - }
462
+ -
463
+ - async commit(opts: { queueOnFailure?: boolean; keepRecentCount?: number } = {}): Promise<any | null> {
464
+ - if (!this.ovSessionId) return null;
465
+ - const response = await this.client.commitSessionResponse(
466
+ - this.ovSessionId,
467
+ - opts.keepRecentCount,
468
+ - );
469
+ - const result = response.result;
470
+ - if (!result) {
471
+ - debugLog(
472
+ - `commit: session=${this.ovSessionId} ok=false status=${response.status ?? 0} ` +
473
+ - `trace_id=${response.traceId || "none"} ` +
474
+ - `error=${response.error?.message || response.error?.code || "unknown"}`,
475
+ - );
476
+ - if (opts.queueOnFailure !== false) {
477
+ - await enqueue("commitSession", this.ovSessionId, {
478
+ - keep_recent_count: opts.keepRecentCount ?? this.config.commitKeepRecentCount,
479
+ - });
480
+ - }
481
+ - return null;
482
+ - }
483
+ - debugLog(
484
+ - `commit: session=${this.ovSessionId} ok=true trace_id=${result.trace_id || "none"}`,
485
+ - );
486
+ - return result;
487
+ + // [QCR PATCH 7] `commitIfNeeded()` is DELETED (it read the session after
488
+ + // every synced turn to decide a commit), and `commit()` never sends one:
489
+ + // commit exists to PROMOTE session notes into memories through an
490
+ + // extraction model this deployment does not configure, so each one archived
491
+ + // the raw notes and produced nothing (143 archives on the VM, 0 overviews).
492
+ + // It also queues nothing, so a refused commit cannot come back on replay.
493
+ + // The signature stays for the takeover manager, which config.ts forces off.
494
+ + async commit(
495
+ + _opts: { queueOnFailure?: boolean; keepRecentCount?: number } = {},
496
+ + ): Promise<any | null> {
497
+ + if (this.ovSessionId) debugLog(`commit: session=${this.ovSessionId} refused (QCR PATCH 7)`);
498
+ + return null;
499
+ }
500
+
501
+ async shutdown(): Promise<void> {
502
+ diff --git a/extensions/vendor/openviking-pi/qcr-recall.ts b/extensions/vendor/openviking-pi/qcr-recall.ts
503
+ new file mode 100644
504
+ --- /dev/null
505
+ +++ b/extensions/vendor/openviking-pi/qcr-recall.ts
506
+ @@ -0,0 +1,288 @@
507
+ +// QCR FORK — file added by PATCH 7 (bounded recall, no commit). Not upstream.
508
+ +// S3, owner ruling R3: "PR sessions keep the OpenViking extension,
509
+ +// bounded: the per-turn recall wait is capped at 500 ms and query expansion is
510
+ +// off."
511
+ +//
512
+ +// The pure half of three fixes, kept free of pi and of the OV client so
513
+ +// `tests/openviking-fork.test.ts` can exercise it (`index.ts` cannot be
514
+ +// imported from a test).
515
+ +//
516
+ +// 1. RECALL NEVER HOLDS A TURN PAST ITS BUDGET. The `context` hook awaited
517
+ +// the recall search before every provider request, and that search could
518
+ +// spend a 15 s expansion fuse and then a `/search/recall` fallback with its
519
+ +// own 10 s — on a server whose local embedder blocks its one event loop
520
+ +// (search p50 22 s, max 155 s, 2026-10-03..06). `budgetedFetch` gives every
521
+ +// request of one recall the time left on ONE deadline and starts nothing
522
+ +// once it has passed (it throws, which ends the fallback chain before it
523
+ +// sends a request); `raceBudget` is the belt that returns the hook on time
524
+ +// whatever the chain is doing.
525
+ +// 2. A RETIRED ENTRY IS NEVER RECALLED. Retire is a `#retired` header tag and
526
+ +// the file stays in the indexed root, so a semantic search finds it. The
527
+ +// daemon already knows the retired set (its store sweep) and publishes the
528
+ +// URIs to a file beside the sessions' ovcli.conf (`QCR_OV_RETIRED_FILE`);
529
+ +// `retiredGuard` sends them as `exclude_uris`, and drops any recalled entry
530
+ +// whose own text opens with the tag (the header-only rule of
531
+ +// `src/memory/eventtags.ts` `parseHashTags` — a `#retired` quoted further
532
+ +// in is prose, not a retirement).
533
+ +// 3. NOTHING COMMITS.: commit exists to PROMOTE session notes into
534
+ +// memories through an extraction model this deployment never configures,
535
+ +// so every commit archived the raw notes and produced nothing (143 archives
536
+ +// on the VM, 0 overviews). The commit calls are gone from sync/index; a
537
+ +// commit queued on disk by an older build is refused here, never replayed.
538
+ +import { readFileSync } from "node:fs";
539
+ +
540
+ +/** The longest the `context` hook waits for recall before the turn proceeds
541
+ + * without it (R3). A cap: a caller may ask for less, never for more. */
542
+ +export const RECALL_WAIT_MS = 500;
543
+ +
544
+ +/** The server's `MAX_EXCLUDE_URIS` (context_assembler/params.py). */
545
+ +export const MAX_RECALL_EXCLUSIONS = 200;
546
+ +
547
+ +/** Where the daemon publishes the retired URIs. Not a secret: the URIs of
548
+ + * retired entries the session's own key can already list. */
549
+ +export const RETIRED_FILE_ENV = "QCR_OV_RETIRED_FILE";
550
+ +
551
+ +/** The seam's retirement tag (src/openviking/store.ts `RETIRED_TAG`). */
552
+ +export const RETIRED_TAG = "retired";
553
+ +
554
+ +/** The answer shape of `OVClient.fetchJSON`, loosened so this file does not
555
+ + * import the client. */
556
+ +export interface FetchAnswer {
557
+ + ok: boolean;
558
+ + status?: number;
559
+ + result?: any;
560
+ + error?: any;
561
+ + traceId?: string;
562
+ +}
563
+ +
564
+ +export type FetchLike = (path: string, init?: any, options?: any) => Promise<FetchAnswer>;
565
+ +
566
+ +/** Thrown by a budgeted fetch once the deadline has passed. It ends the
567
+ + * recall chain where it stands — nothing further is sent, and nothing is
568
+ + * cached from a request that was never made — and `raceBudget` turns it into
569
+ + * "no recall this turn". */
570
+ +export class RecallBudgetSpent extends Error {
571
+ + constructor() {
572
+ + super("recall budget spent");
573
+ + this.name = "RecallBudgetSpent";
574
+ + }
575
+ +}
576
+ +
577
+ +/**
578
+ + * Every request of one recall shares ONE deadline. A request gets the time
579
+ + * left on it as its own timeout (the client aborts it there), and once none is
580
+ + * left nothing is started — the `/search/recall` and raw-find fallbacks
581
+ + * included, which used to double the load exactly when the server was slow.
582
+ + */
583
+ +export function budgetedFetch(
584
+ + inner: FetchLike,
585
+ + deadlineAt: number,
586
+ + now: () => number = Date.now,
587
+ +): FetchLike {
588
+ + return async (path, init, options) => {
589
+ + const remaining = Math.floor(deadlineAt - now());
590
+ + if (remaining < 5) throw new RecallBudgetSpent(); // a few ms only race the abort that just fired
591
+ + const asked = Number(options?.timeoutMs);
592
+ + const timeoutMs = Number.isFinite(asked) && asked > 0 ? Math.min(asked, remaining) : remaining;
593
+ + return inner(path, init, { ...(options ?? {}), timeoutMs });
594
+ + };
595
+ +}
596
+ +
597
+ +/**
598
+ + * `work`, or `fallback` once `ms` have passed. Never rejects: a recall that
599
+ + * throws is a recall that found nothing. The work is NOT cancelled — under a
600
+ + * `budgetedFetch` it has nothing left to send by then — and a late answer is
601
+ + * discarded, never injected into a later turn of the same run (that would
602
+ + * rewrite a message the provider has already cached).
603
+ + */
604
+ +export async function raceBudget<T>(
605
+ + work: Promise<T>,
606
+ + ms: number,
607
+ + fallback: T,
608
+ +): Promise<{ value: T; timedOut: boolean }> {
609
+ + const settled = work.then(
610
+ + (value) => ({ value, timedOut: false }),
611
+ + () => ({ value: fallback, timedOut: false }),
612
+ + );
613
+ + if (!(ms > 0)) return { value: fallback, timedOut: true };
614
+ + let timer: ReturnType<typeof setTimeout> | undefined;
615
+ + try {
616
+ + return await Promise.race([
617
+ + settled,
618
+ + new Promise<{ value: T; timedOut: boolean }>((resolve) => {
619
+ + timer = setTimeout(() => resolve({ value: fallback, timedOut: true }), ms);
620
+ + (timer as { unref?: () => void }).unref?.();
621
+ + }),
622
+ + ]);
623
+ + } finally {
624
+ + if (timer !== undefined) clearTimeout(timer);
625
+ + }
626
+ +}
627
+ +
628
+ +/**
629
+ + * Does this text OPEN with the `#retired` tag? Header-only, exactly like
630
+ + * `parseHashTags` (src/memory/eventtags.ts): the leading run of `#tag` tokens
631
+ + * is the header and the scan stops at the first word that is not one, so a
632
+ + * `[feedback]` entry quoting "mark it #retired" is not hidden by its prose.
633
+ + * `tests/openviking-fork.test.ts` pins the two parsers against each other.
634
+ + */
635
+ +export function hasRetiredHeader(text: unknown): boolean {
636
+ + for (const token of String(text ?? "").split(/\s+/)) {
637
+ + if (token === "") continue;
638
+ + if (!token.startsWith("#")) return false;
639
+ + if (token.slice(1).toLowerCase() === RETIRED_TAG) return true;
640
+ + }
641
+ + return false;
642
+ +}
643
+ +
644
+ +/**
645
+ + * The retired URIs the daemon published (`{"uris": [...]}`), or `[]`.
646
+ + * Total: no path, no file, a garbled file — all mean "no exclusions", and the
647
+ + * header filter in `retiredGuard` still applies.
648
+ + */
649
+ +export function readRetiredUris(
650
+ + path: string | undefined,
651
+ + read: (p: string) => string = defaultRead,
652
+ +): string[] {
653
+ + if (!path || path.trim() === "") return [];
654
+ + let parsed: unknown;
655
+ + try {
656
+ + parsed = JSON.parse(read(path.trim()));
657
+ + } catch {
658
+ + return [];
659
+ + }
660
+ + const raw = (parsed as { uris?: unknown })?.uris;
661
+ + if (!Array.isArray(raw)) return [];
662
+ + const out: string[] = [];
663
+ + for (const uri of raw) {
664
+ + if (typeof uri !== "string" || !uri.startsWith("viking://") || out.includes(uri)) continue;
665
+ + out.push(uri);
666
+ + if (out.length >= MAX_RECALL_EXCLUSIONS) break;
667
+ + }
668
+ + return out;
669
+ +}
670
+ +
671
+ +function defaultRead(p: string): string {
672
+ + return readFileSync(p, "utf8");
673
+ +}
674
+ +
675
+ +/** One assembled entry exactly as the server renders it
676
+ + * (`retrieve/context_assembler/render.py` `render_entry`), so a block we had
677
+ + * to re-render after dropping a retired entry reads like the server's. */
678
+ +export function renderContextEntry(entry: {
679
+ + uri?: unknown;
680
+ + category?: unknown;
681
+ + score?: unknown;
682
+ + detail?: unknown;
683
+ + text?: unknown;
684
+ +}): string {
685
+ + const attr = (v: unknown) =>
686
+ + String(v ?? "")
687
+ + .replace(/&/g, "&amp;")
688
+ + .replace(/"/g, "&quot;")
689
+ + .replace(/</g, "&lt;");
690
+ + const score = Number(entry.score);
691
+ + const head =
692
+ + `<memory uri="${attr(entry.uri)}" type="${attr(entry.category)}"` +
693
+ + ` score="${(Number.isFinite(score) ? score : 0).toFixed(2)}" detail="${String(entry.detail ?? "")}"`;
694
+ + const text = String(entry.text ?? "");
695
+ + if (text === "") return `${head} />`;
696
+ + return `${head}>\n${text.replace(/<(\/?)memory(?=[\s/>])/gi, "<\\$1memory")}\n</memory>`;
697
+ +}
698
+ +
699
+ +const CONTEXT_PATHS = new Set(["/api/v1/search/search", "/api/v1/search/recall"]);
700
+ +const FIND_PATH = "/api/v1/search/find";
701
+ +
702
+ +/**
703
+ + * Retired entries out of every recall request this fetch carries:
704
+ + * * a context search or the `/search/recall` preset is SENT the published
705
+ + * retired URIs as `exclude_uris` (merged with any it already carried,
706
+ + * capped at the server's 200) — list-mode search rejects the field, so
707
+ + * only a `mode: "context"` body gets it;
708
+ + * * whatever comes back is FILTERED: an entry the list names, or whose own
709
+ + * text opens with `#retired`, is dropped, and the rendered block is
710
+ + * rebuilt from what is left (the digest with it — it was written from the
711
+ + * dropped entry too);
712
+ + * * the raw-find fallback's `memories` are filtered the same way.
713
+ + */
714
+ +export function retiredGuard(inner: FetchLike, retired: () => readonly string[]): FetchLike {
715
+ + return async (path, init, options) => {
716
+ + let excluded: readonly string[] = [];
717
+ + try {
718
+ + excluded = retired();
719
+ + } catch {
720
+ + excluded = [];
721
+ + }
722
+ + const excludedSet = new Set(excluded);
723
+ + let sent = init;
724
+ + if (CONTEXT_PATHS.has(path) && typeof init?.body === "string" && excluded.length > 0) {
725
+ + try {
726
+ + const body = JSON.parse(init.body) as Record<string, unknown>;
727
+ + if (path !== "/api/v1/search/search" || body["mode"] === "context") {
728
+ + const have = Array.isArray(body["exclude_uris"])
729
+ + ? (body["exclude_uris"] as unknown[]).filter((u): u is string => typeof u === "string")
730
+ + : [];
731
+ + body["exclude_uris"] = [...new Set([...have, ...excluded])].slice(0, MAX_RECALL_EXCLUSIONS);
732
+ + sent = { ...init, body: JSON.stringify(body) };
733
+ + }
734
+ + } catch {
735
+ + sent = init;
736
+ + }
737
+ + }
738
+ + const res = await inner(path, sent, options);
739
+ + if (!res?.ok || !res.result || typeof res.result !== "object") return res;
740
+ + const isRetired = (uri: unknown, text: unknown) =>
741
+ + (typeof uri === "string" && excludedSet.has(uri)) || hasRetiredHeader(text);
742
+ + if (CONTEXT_PATHS.has(path) && Array.isArray(res.result.entries)) {
743
+ + const entries = res.result.entries as Array<Record<string, unknown>>;
744
+ + const kept = entries.filter((e) => !isRetired(e?.["uri"], e?.["text"] ?? e?.["content"]));
745
+ + if (kept.length === entries.length) return res;
746
+ + return {
747
+ + ...res,
748
+ + result: {
749
+ + ...res.result,
750
+ + entries: kept,
751
+ + rendered: kept.map(renderContextEntry).join("\n"),
752
+ + digest: "",
753
+ + },
754
+ + };
755
+ + }
756
+ + if (path === FIND_PATH && Array.isArray(res.result.memories)) {
757
+ + const memories = res.result.memories as Array<Record<string, unknown>>;
758
+ + const kept = memories.filter(
759
+ + (m) => !isRetired(m?.["uri"], m?.["abstract"] ?? m?.["overview"]),
760
+ + );
761
+ + if (kept.length === memories.length) return res;
762
+ + return { ...res, result: { ...res.result, memories: kept } };
763
+ + }
764
+ + return res;
765
+ + };
766
+ +}
767
+ +
768
+ +/** Is this the commit route of a session? */
769
+ +export function isCommitPath(path: string): boolean {
770
+ + return /^\/api\/v1\/sessions\/[^/]+\/commit(?:[?#].*)?$/.test(path);
771
+ +}
772
+ +
773
+ +/** What a refused commit answers: a 400 the pending queue treats as final
774
+ + * (`retryable.mjs`), so a commit an older build queued is dropped, not
775
+ + * retried. */
776
+ +export const COMMIT_REFUSED: FetchAnswer = Object.freeze({
777
+ + ok: false,
778
+ + status: 400,
779
+ + result: null,
780
+ + error: Object.freeze({
781
+ + code: "QCR_COMMIT_DISABLED",
782
+ + message:
783
+ + "session commit is disabled in this fork: it only promotes notes through an " +
784
+ + "extraction model this deployment does not run",
785
+ + }),
786
+ +}) as FetchAnswer;
787
+ +
788
+ +/** A fetch that never sends a session commit. */
789
+ +export function refuseCommits(inner: FetchLike): FetchLike {
790
+ + return async (path, init, options) => {
791
+ + if (isCommitPath(path)) return { ...COMMIT_REFUSED };
792
+ + return inner(path, init, options);
793
+ + };
794
+ +}