@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,786 @@
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
+ @@ -36,6 +36,8 @@ Changed by the quickreviewd maintainers, 2026-08-20:
5
+ 4. A `viking_write` tool was added (durable `content/batch-write`); the
6
+ `viking_remember`, `viking_forget` and `viking_add_resource` tools were
7
+ removed.
8
+ + 5. The memory tools can address a second OpenViking user namespace, built
9
+ + from a second USER key when one is present in the environment.
10
+
11
+ Plus vendoring scaffolding: build-conformance fixes for this repo's stricter
12
+ tsconfig, ambient type declarations for uninstalled packages, three unused
13
+ diff --git a/extensions/vendor/openviking-pi/README.md b/extensions/vendor/openviking-pi/README.md
14
+ --- a/extensions/vendor/openviking-pi/README.md
15
+ +++ b/extensions/vendor/openviking-pi/README.md
16
+ @@ -1,7 +1,7 @@
17
+ # openviking-pi — vendored, patched fork
18
+
19
+ The OpenViking pi extension our sessions load. Vendored, not depended on:
20
+ -upstream ships it as an `examples/` directory, not a package, and we need four
21
+ +upstream ships it as an `examples/` directory, not a package, and we need five
22
+ behaviour changes that upstream has no reason to make.
23
+
24
+ | | |
25
+ @@ -20,7 +20,7 @@ fails on drift between the two.
26
+
27
+ ## Why a fork rather than configuration
28
+
29
+ -Every one of the four patches was tried as configuration first and does not
30
+ +Every one of the five patches was tried as configuration first and does not
31
+ exist there. The evidence is a spike against a **running v0.4.15 server plus
32
+ the pinned pi 0.84.1** — `assets/findings.md` in the issue tracker,
33
+ with transcripts. Read it before changing anything here; several of its
34
+ @@ -28,11 +28,12 @@ findings contradict the OpenViking docs, which lead the tag.
35
+
36
+ ## The patch series
37
+
38
+ -Four numbered behaviour patches, applied in order over the vendored upstream
39
+ +Five numbered behaviour patches, applied in order over the vendored upstream
40
+ files, plus one unnumbered scaffolding patch. They live in `patches/` as
41
+ -`git apply`-able diffs — verified by applying all five, in order, to a
42
+ +`git apply`-able diffs — verified by applying all six, in order, to a
43
+ pristine `v0.4.15` extraction and diffing the result against this directory:
44
+ -byte-identical. Every hunk they add carries a greppable marker:
45
+ +byte-identical. (`patches/` and `upstream.json` are meta and are not themselves
46
+ +part of the reproduced tree.) Every hunk they add carries a greppable marker:
47
+
48
+ ```sh
49
+ grep -rn "QCR PATCH" extensions/vendor/openviking-pi
50
+ @@ -181,6 +182,48 @@ imported from a test because it pulls `typebox` and `@earendil-works/pi-ai`.
51
+ Touches: `qcr-write.ts` (new), `client.ts` (`batchWrite`, `setTags`),
52
+ `tools.ts`, `index.ts` (the advertised tool list).
53
+
54
+ +### 0005 — a second memory namespace (the companion's reviewer key)
55
+ +
56
+ +Upstream builds ONE `OVClient` from ONE key, so a pi reaches exactly the user
57
+ +tree that key owns. The ratified design is asymmetric: **the companion
58
+ +and the TUI can do everything with memory — full read and write over every piece
59
+ +of it** — while automated review sessions hold the reviewer key alone and stay
60
+ +confined server-side. The companion container already receives the second USER
61
+ +key as `OPENVIKING_REVIEWER_KEY` (`docs/companion-memory-access.md`); this patch
62
+ +is what consumes it.
63
+ +
64
+ +`qcr-namespaces.ts` resolves the extra namespaces and routes each tool call to
65
+ +one; `index.ts` builds one `OVClient` per namespace (same endpoint, same
66
+ +account, same actor peer — only the bearer key and `X-OpenViking-User` differ,
67
+ +which is the pairing the server confines) and `tools.ts` addresses whichever one
68
+ +the call names. The shape is the TUI's, not a second invention:
69
+ +`src/tui/memory.ts` already runs one client per namespace with the namespace
70
+ +prefixed onto every address.
71
+ +
72
+ +Four properties are the patch:
73
+ +
74
+ +* **Absence is normal.** No `OPENVIKING_REVIEWER_KEY` ⇒ no second namespace, no
75
+ + error, no `namespace` parameter in any tool schema, unprefixed answers — i.e.
76
+ + every review session keeps today's behaviour exactly, down to the tool
77
+ + descriptions the model sees.
78
+ +* **The call says which tree it touches.** `namespace: "reviewer"` or a
79
+ + `viking://user/reviewer/…` URI; if both are given and disagree the call is
80
+ + REFUSED rather than resolved by a precedence rule, and every answer is
81
+ + prefixed `[<namespace>]`. Silently writing the wrong memory tree is the one
82
+ + failure here that is both invisible and durable.
83
+ +* **`withoutRootKey` covers BOTH keys.** It is generic and `env`-parameterised
84
+ + now; the reviewer key goes through it before a client is built. A new key must
85
+ + not reopen the hole 0000 closed.
86
+ +* **A leaf gains nothing.** `resolveExtraNamespaces` returns `[]` for a leaf,
87
+ + `index.ts` does not construct the clients in the leaf path, and
88
+ + `registerTools` discards namespaces handed to a leaf. Ambient work (recall,
89
+ + sync, commit) stays on the primary client in all cases — a second namespace is
90
+ + a TOOL surface only, never a second session.
91
+ +
92
+ +Touches: `qcr-namespaces.ts` (new), `config.ts` (`withoutRootKey` generic +
93
+ +`env`), `index.ts` (client construction, health probe, the advertised
94
+ +namespaces), `tools.ts` (routing, the `namespace` parameter, prefixed answers).
95
+ +
96
+ ## Rebasing onto a newer upstream
97
+
98
+ ```sh
99
+ @@ -193,16 +236,16 @@ git -C /tmp/ov checkout <new-tag>
100
+ for p in extensions/vendor/openviking-pi/patches/0*.patch; do
101
+ git apply --3way "$p" || echo "RESOLVE: $p"
102
+ done
103
+ -# 3. Re-verify all four patches, then:
104
+ +# 3. Re-verify all five patches, then:
105
+ timeout 900 npm test && npm run build
106
+ ```
107
+
108
+ Then update `extension_commit` and `version` in `config.toml [openviking]`,
109
+ the base commit in `NOTICE` and in the table above, and re-run the live
110
+ -verification below. A bump re-verifies **all four** patches — a patch that no
111
+ +verification below. A bump re-verifies **all five** patches — a patch that no
112
+ longer applies is a patch whose reason may have changed, not a patch to drop.
113
+
114
+ -`tests/openviking-fork.test.ts` is the guard rail: it asserts the four patches
115
+ +`tests/openviking-fork.test.ts` is the guard rail: it asserts the five patches
116
+ are still present (markers, and the *absence* of what each one removed) and
117
+ that the pinned commit here matches `config.toml`. It cannot tell you whether
118
+ upstream grew a *new* compaction handler or a *new* write tool — read the
119
+ @@ -217,6 +260,12 @@ durable write; `batch-write` preconditions 409 correctly and the
120
+ `MEMORY_FIELDS` footgun is real; pi-subagents children carry `--no-extensions`;
121
+ `OPENVIKING_PEER_ID` overrides the path-derived peer id.
122
+
123
+ +Also verified, for 0005: the reviewer USER key reaches `user/reviewer/` and is
124
+ +refused on `user/companion/` when paired with the other user's header — that is
125
+ +the four-cell matrix `node scripts/companion-memory-forward.mjs verify` runs,
126
+ +and it is what makes two USER keys safe. What it proves is the SERVER's
127
+ +confinement, not this extension's plumbing.
128
+ +
129
+ **Not yet verified end to end** (needs a session smoke on the VM, where a real
130
+ model provider exists): that a `viking_write` entry is readable through the
131
+ daemon's client against a live server, and that the ledger block survives a
132
+ @@ -224,3 +273,8 @@ real compaction with this fork loaded. The second half of that is the open
133
+ item — "does a no-op second handler drop ledger-pin's pinned block?" —
134
+ which this patch series makes moot by construction rather than by measurement.
135
+ Fold both into `npm run smoke:session`.
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
+ +only. Fold it into the companion smoke (`npm run smoke:companion`).
141
+ diff --git a/extensions/vendor/openviking-pi/config.ts b/extensions/vendor/openviking-pi/config.ts
142
+ --- a/extensions/vendor/openviking-pi/config.ts
143
+ +++ b/extensions/vendor/openviking-pi/config.ts
144
+ @@ -19,17 +19,28 @@ import { resolveEffectivePeerId } from "./shared/workspace-peer.mjs";
145
+ * So: if the resolved key IS the server's root key, drop it. An unauthenticated
146
+ * client degrades to 401 and the extension reports "not reachable" — loud, and
147
+ * memory-less by design. A wrong-identity client would have been silent.
148
+ + *
149
+ + * [QCR PATCH 5] Generic over the credential shape, and `env` is a parameter:
150
+ + * the fork now resolves a SECOND key (`OPENVIKING_REVIEWER_KEY`, see
151
+ + * qcr-namespaces.ts) and every key must pass through this same guard. A second
152
+ + * key that skipped it would reopen exactly the hole this function closed.
153
+ */
154
+ -type ResolvedCredentials = ReturnType<typeof resolveOpenVikingCredentials>;
155
+ +interface KeyBearingCredentials {
156
+ + apiKey: string;
157
+ + hasApiKey: boolean;
158
+ +}
159
+
160
+ -export function withoutRootKey(creds: ResolvedCredentials): ResolvedCredentials {
161
+ - const rootKey = readServerRootKey();
162
+ +export function withoutRootKey<T extends KeyBearingCredentials>(
163
+ + creds: T,
164
+ + env: Record<string, string | undefined> = process.env,
165
+ +): T {
166
+ + const rootKey = readServerRootKey(env);
167
+ if (!rootKey || creds.apiKey !== rootKey) return creds;
168
+ return { ...creds, apiKey: "", hasApiKey: false };
169
+ }
170
+
171
+ -function readServerRootKey(): string {
172
+ - const raw = (process.env.OPENVIKING_CONFIG_FILE ?? "").trim();
173
+ +function readServerRootKey(env: Record<string, string | undefined> = process.env): string {
174
+ + const raw = (env.OPENVIKING_CONFIG_FILE ?? "").trim();
175
+ const path = raw ? resolvePath(raw.startsWith("~/") ? join(homedir(), raw.slice(2)) : raw)
176
+ : join(homedir(), ".openviking", "ov.conf");
177
+ try {
178
+ diff --git a/extensions/vendor/openviking-pi/index.ts b/extensions/vendor/openviking-pi/index.ts
179
+ --- a/extensions/vendor/openviking-pi/index.ts
180
+ +++ b/extensions/vendor/openviking-pi/index.ts
181
+ @@ -11,13 +11,15 @@
182
+ *
183
+ * ── QCR FORK ────────────────────────────────────────────────────────────────
184
+ * Vendored from volcengine/OpenViking @ v0.4.15, examples/pi-coding-agent-
185
+ - * extension. Four numbered patches; every hunk carries a `[QCR PATCH n]`
186
+ + * extension. Five numbered patches; every hunk carries a `[QCR PATCH n]`
187
+ * marker so a rebase is a search, not an audit. See README.md here.
188
+ * PATCH 1 — no session_before_compact handler (extensions/ledger-pin.ts is
189
+ * the sole owner of compaction) and takeover forced off.
190
+ * PATCH 2 — no ambient recall/sync/commit in a pi-subagents leaf.
191
+ * PATCH 3 — never auto-create an OV session; the daemon owns lifecycle.
192
+ * PATCH 4 — viking_write (durable content/batch-write), the ONLY write tool.
193
+ + * PATCH 5 — a second memory namespace (the companion's reviewer key), tools
194
+ + * only; a leaf and a single-keyed review session are unchanged.
195
+ * ────────────────────────────────────────────────────────────────────────────
196
+ */
197
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
198
+ @@ -33,6 +35,8 @@ import { registerTools } from "./tools.js";
199
+ import { createTakeoverManager } from "./takeover.js";
200
+ // [QCR PATCH 2]
201
+ import { isLeafProcess } from "./qcr-leaf.js";
202
+ +// [QCR PATCH 5]
203
+ +import { ownNamespaceName, resolveExtraNamespaces } from "./qcr-namespaces.js";
204
+
205
+ export default async function (pi: ExtensionAPI) {
206
+ // [QCR PATCH 2] Decided once, from argv, before anything else: a
207
+ @@ -47,6 +51,24 @@ export default async function (pi: ExtensionAPI) {
208
+
209
+ // --- Initialize modules ---
210
+ const client = new OVClient(config);
211
+ + // [QCR PATCH 5] A SECOND client, and only when a second USER key is in the
212
+ + // environment: the companion's `OPENVIKING_REVIEWER_KEY`, which lets the
213
+ + // local pi read AND write reviewer memory as well as its own. Same base URL,
214
+ + // same account, same actor peer (this pi is still the actor) — only the
215
+ + // bearer key and `X-OpenViking-User` differ, which is exactly the pairing the
216
+ + // server confines. The key goes through config.ts's root-key guard on the way
217
+ + // (qcr-namespaces.ts), so a second key cannot become a ROOT client either.
218
+ + //
219
+ + // `leaf ? []` is belt to qcr-namespaces' own braces: a pi-subagents leaf must
220
+ + // not gain a namespace PATCH 2 and PATCH 4 deliberately withheld, so the
221
+ + // clients are not even constructed there. No key is a NORMAL state — this pi
222
+ + // then reaches its own namespace only, exactly as before this patch, which is
223
+ + // every review session's shape.
224
+ + const extraNamespaces = (leaf ? [] : resolveExtraNamespaces(config)).map((ns) => ({
225
+ + name: ns.name,
226
+ + client: new OVClient({ ...config, apiKey: ns.apiKey, user: ns.user }),
227
+ + }));
228
+ + const namespaces = [{ name: ownNamespaceName(config.user), client }, ...extraNamespaces];
229
+ const sync = new SyncManager(client, config);
230
+ const recall = new RecallManager(client, config, () => sync.sessionId);
231
+ const debugLog = (message: string) => {
232
+ @@ -137,9 +159,21 @@ export default async function (pi: ExtensionAPI) {
233
+ archiveOverview = await fetchArchiveOverview(client, sync.sessionId, config);
234
+ }
235
+
236
+ + // [QCR PATCH 5] Each extra namespace's client carries its own `connected`
237
+ + // flag (the tools read it), so each is probed once here — after the leaf
238
+ + // early-return above, so a leaf never even opens the socket. A namespace
239
+ + // that does not answer is degraded, never fatal: its tools say "not
240
+ + // reachable" and the primary namespace is untouched.
241
+ + for (const ns of extraNamespaces) {
242
+ + const reachable = await ns.client.health();
243
+ + if (!reachable && config.logLevel === "info") {
244
+ + ctx.ui.notify(`OpenViking: ${ns.name} memory not reachable`, "warning");
245
+ + }
246
+ + }
247
+ +
248
+ // Register tools (also needed for pi -c continuations).
249
+ if (!toolsRegistered) {
250
+ - registerTools(pi, client, sync, { leaf: false });
251
+ + registerTools(pi, client, sync, { leaf: false, namespaces });
252
+ toolsRegistered = true;
253
+ }
254
+ updateStatus(ctx, connected, 0, sync.sessionId, config, takeover.state);
255
+ @@ -183,6 +217,17 @@ export default async function (pi: ExtensionAPI) {
256
+ // [QCR PATCH 4] viking_remember / viking_forget / viking_add_resource are
257
+ // gone; viking_write is the one write tool.
258
+ parts.push("OpenViking tools: viking_search, viking_read, viking_browse, viking_write, viking_archive_expand.");
259
+ + // [QCR PATCH 5] Say it in the system prompt too, not only in the tool
260
+ + // schemas: with two namespaces reachable, "which memory am I touching" is a
261
+ + // question the model must never have to guess at.
262
+ + if (extraNamespaces.length > 0) {
263
+ + parts.push(
264
+ + `Two OpenViking memory namespaces are reachable: ${namespaces.map((n) => n.name).join(" and ")}. ` +
265
+ + `${namespaces[0]!.name} is your own memory and the default; ` +
266
+ + `${extraNamespaces.map((n) => n.name).join(" and ")} is the review system's, readable and writable from here. ` +
267
+ + "Choose with the `namespace` parameter or by addressing a viking://user/<namespace>/… URI, and check the prefix on every answer.",
268
+ + );
269
+ + }
270
+
271
+ const additions = parts.join("\n\n");
272
+ if (!additions) return;
273
+ diff --git a/extensions/vendor/openviking-pi/tools.ts b/extensions/vendor/openviking-pi/tools.ts
274
+ --- a/extensions/vendor/openviking-pi/tools.ts
275
+ +++ b/extensions/vendor/openviking-pi/tools.ts
276
+ @@ -4,12 +4,26 @@ import type { OVClient } from "./client.js";
277
+ import type { SyncManager } from "./sync.js";
278
+ // [QCR PATCH 4]
279
+ import { buildWriteRequest } from "./qcr-write.js";
280
+ +// [QCR PATCH 5]
281
+ +import { namespaceNote, ownNamespaceName, routeNamespace } from "./qcr-namespaces.js";
282
+ +
283
+ +/** [QCR PATCH 5] One memory namespace the tools can address: a name the model
284
+ + * uses and the client holding that namespace's USER key. */
285
+ +export interface ToolNamespace {
286
+ + name: string;
287
+ + client: OVClient;
288
+ +}
289
+
290
+ export interface RegisterToolsOptions {
291
+ /** [QCR PATCH 2] A pi-subagents leaf gets the READ tools only. A lens pass
292
+ * evaluates a diff; authoring memory is the shepherd session's job, and a
293
+ * leaf has no session identity to author under. */
294
+ leaf?: boolean;
295
+ + /** [QCR PATCH 5] Every namespace this pi can reach, INDEX 0 = its own
296
+ + * identity (the default, and the client `_sync`/recall use). Omitted — the
297
+ + * single-key case, i.e. every review session — is the pre-patch behaviour:
298
+ + * one namespace, no `namespace` parameter in any schema, unprefixed answers. */
299
+ + namespaces?: ToolNamespace[];
300
+ }
301
+
302
+ export function registerTools(
303
+ @@ -20,36 +34,72 @@ export function registerTools(
304
+ ): void {
305
+ const leaf = opts.leaf === true;
306
+
307
+ + // [QCR PATCH 5] A LEAF IS SINGLE-NAMESPACE, STRUCTURALLY. PATCH 2 stops all
308
+ + // ambient work in a leaf and PATCH 4 withholds the write tool there; a second
309
+ + // client must not become a way around either, so namespaces handed to a leaf
310
+ + // are discarded here rather than trusted. (index.ts does not build them for a
311
+ + // leaf in the first place — this is the second layer, same discipline as
312
+ + // qcr-leaf.ts.)
313
+ + const own: ToolNamespace = { name: ownNamespaceName(client.cfg.user), client };
314
+ + const spaces: ToolNamespace[] =
315
+ + leaf || !opts.namespaces || opts.namespaces.length === 0 ? [own] : opts.namespaces;
316
+ + const names = spaces.map((s) => s.name);
317
+ + const multi = spaces.length > 1;
318
+ + /** Appended to every namespace-aware description; empty when single. */
319
+ + const nsNote = namespaceNote(names);
320
+ + /** The `namespace` parameter exists ONLY when there is a choice to make. */
321
+ + const nsParam: Record<string, unknown> = multi
322
+ + ? { namespace: Type.Optional(StringEnum(names)) }
323
+ + : {};
324
+ + const nsGuidelines: string[] = multi
325
+ + ? [`Memory lives in ${names.length} separate trees (${names.join(", ")}); say which one you mean and read the prefix on the answer.`]
326
+ + : [];
327
+ + /** Every answer names the tree it came from — the model must never have to
328
+ + * infer which memory it just touched. */
329
+ + const scoped = (ns: ToolNamespace, text: string) => (multi ? `[${ns.name}] ${text}` : text);
330
+ + /** Route one call, or explain why it cannot be routed. */
331
+ + const pick = (params: any): { ok: true; ns: ToolNamespace } | { ok: false; error: string } => {
332
+ + const routed = routeNamespace(params ?? {}, names);
333
+ + if (!routed.ok) return { ok: false, error: routed.error };
334
+ + return { ok: true, ns: spaces.find((s) => s.name.toLowerCase() === routed.namespace) ?? own };
335
+ + };
336
+ +
337
+ // --- viking_search ---
338
+ pi.registerTool({
339
+ name: "viking_search",
340
+ label: "Viking Search",
341
+ - description: "Semantic search over the OpenViking knowledge base. Returns ranked results with viking:// URIs and abstracts. Use to recall past decisions, user preferences, or project-specific knowledge not in current context.",
342
+ + description: "Semantic search over the OpenViking knowledge base. Returns ranked results with viking:// URIs and abstracts. Use to recall past decisions, user preferences, or project-specific knowledge not in current context." + nsNote,
343
+ promptSnippet: "Search OpenViking for past decisions, preferences, and project knowledge",
344
+ promptGuidelines: [
345
+ "Use viking_search when you need information from previous sessions not in MEMORY.md.",
346
+ "Use viking_search before making decisions that might conflict with past decisions.",
347
+ + ...nsGuidelines,
348
+ ],
349
+ parameters: Type.Object({
350
+ query: Type.String({ description: "Search query" }),
351
+ scope: Type.Optional(Type.String({ description: "Viking URI prefix to scope search (e.g., 'viking://user/memories/')" })),
352
+ limit: Type.Optional(Type.Number({ description: "Max results (default: 10)" })),
353
+ + ...nsParam,
354
+ }),
355
+ async execute(
356
+ _id: string, params: any, _signal: AbortSignal,
357
+ _onUpdate: any, _ctx: any,
358
+ ) {
359
+ - if (!client.connected) {
360
+ - return { content: [{ type: "text", text: "OpenViking server is not reachable." }] };
361
+ + // [QCR PATCH 5] `scope` carries the URI here, so it routes too.
362
+ + const routed = pick(params);
363
+ + if (!routed.ok) return { content: [{ type: "text", text: routed.error }] };
364
+ + const ns = routed.ns;
365
+ + if (!ns.client.connected) {
366
+ + return { content: [{ type: "text", text: scoped(ns, "OpenViking server is not reachable.") }] };
367
+ }
368
+ - const results = await client.find(params.query, {
369
+ + const results = await ns.client.find(params.query, {
370
+ targetUri: params.scope,
371
+ topK: params.limit ?? 10,
372
+ });
373
+ if (results.length === 0) {
374
+ - return { content: [{ type: "text", text: "No results found." }] };
375
+ + return { content: [{ type: "text", text: scoped(ns, "No results found.") }] };
376
+ }
377
+ - const maxChars = client.cfg.recallMaxContentChars;
378
+ + const maxChars = ns.client.cfg.recallMaxContentChars;
379
+ const lines = results.map(r => {
380
+ const abs = r.abstract.length > maxChars
381
+ ? r.abstract.slice(0, maxChars) + "..."
382
+ @@ -57,8 +107,8 @@ export function registerTools(
383
+ return `[${r.score.toFixed(2)}] ${r.uri}\n ${abs}`; }
384
+ );
385
+ return {
386
+ - content: [{ type: "text", text: lines.join("\n\n") }],
387
+ - details: { results },
388
+ + content: [{ type: "text", text: scoped(ns, lines.join("\n\n")) }],
389
+ + details: multi ? { namespace: ns.name, results } : { results },
390
+ };
391
+ },
392
+ });
393
+ @@ -67,29 +117,37 @@ export function registerTools(
394
+ pi.registerTool({
395
+ name: "viking_read",
396
+ label: "Viking Read",
397
+ - description: "Read content at a viking:// URI. Three detail levels: 'abstract' (~100 tokens), 'overview' (~2k tokens), 'full' (complete). Start with abstract, escalate when needed.",
398
+ + description: "Read content at a viking:// URI. Three detail levels: 'abstract' (~100 tokens), 'overview' (~2k tokens), 'full' (complete). Start with abstract, escalate when needed." + nsNote,
399
+ promptSnippet: "Read OpenViking content at a viking:// URI with tiered detail levels",
400
+ + ...(multi ? { promptGuidelines: nsGuidelines } : {}),
401
+ parameters: Type.Object({
402
+ uri: Type.String({ description: "viking:// URI to read" }),
403
+ level: StringEnum(["abstract", "overview", "full"] as const),
404
+ + ...nsParam,
405
+ }),
406
+ async execute(
407
+ _id: string, params: any, _signal: AbortSignal,
408
+ _onUpdate: any, _ctx: any,
409
+ ) {
410
+ - if (!client.connected) {
411
+ - return { content: [{ type: "text", text: "OpenViking server is not reachable." }] };
412
+ + const routed = pick(params);
413
+ + if (!routed.ok) return { content: [{ type: "text", text: routed.error }] };
414
+ + const ns = routed.ns;
415
+ + if (!ns.client.connected) {
416
+ + return { content: [{ type: "text", text: scoped(ns, "OpenViking server is not reachable.") }] };
417
+ }
418
+ let content: string | null = null;
419
+ switch (params.level) {
420
+ - case "abstract": content = await client.abstract(params.uri); break;
421
+ - case "overview": content = await client.overview(params.uri); break;
422
+ - case "full": content = await client.readContent(params.uri); break;
423
+ + case "abstract": content = await ns.client.abstract(params.uri); break;
424
+ + case "overview": content = await ns.client.overview(params.uri); break;
425
+ + case "full": content = await ns.client.readContent(params.uri); break;
426
+ }
427
+ if (!content) {
428
+ - return { content: [{ type: "text", text: `No content at ${params.uri}` }] };
429
+ + return { content: [{ type: "text", text: scoped(ns, `No content at ${params.uri}`) }] };
430
+ }
431
+ - return { content: [{ type: "text", text: content }] };
432
+ + return {
433
+ + content: [{ type: "text", text: scoped(ns, content) }],
434
+ + ...(multi ? { details: { namespace: ns.name } } : {}),
435
+ + };
436
+ },
437
+ });
438
+
439
+ @@ -97,32 +155,37 @@ export function registerTools(
440
+ pi.registerTool({
441
+ name: "viking_browse",
442
+ label: "Viking Browse",
443
+ - description: "Browse the OpenViking knowledge store like a filesystem. List directory contents or get metadata.",
444
+ + description: "Browse the OpenViking knowledge store like a filesystem. List directory contents or get metadata." + nsNote,
445
+ promptSnippet: "Browse the viking:// directory tree in OpenViking",
446
+ + ...(multi ? { promptGuidelines: nsGuidelines } : {}),
447
+ parameters: Type.Object({
448
+ action: StringEnum(["list", "stat"] as const),
449
+ uri: Type.Optional(Type.String({ description: "viking:// URI (default: 'viking://')" })),
450
+ + ...nsParam,
451
+ }),
452
+ async execute(
453
+ _id: string, params: any, _signal: AbortSignal,
454
+ _onUpdate: any, _ctx: any,
455
+ ) {
456
+ - if (!client.connected) {
457
+ - return { content: [{ type: "text", text: "OpenViking server is not reachable." }] };
458
+ + const routed = pick(params);
459
+ + if (!routed.ok) return { content: [{ type: "text", text: routed.error }] };
460
+ + const ns = routed.ns;
461
+ + if (!ns.client.connected) {
462
+ + return { content: [{ type: "text", text: scoped(ns, "OpenViking server is not reachable.") }] };
463
+ }
464
+ const uri = params.uri ?? "viking://";
465
+ if (params.action === "stat") {
466
+ - const info = await client.stat(uri);
467
+ - if (!info) return { content: [{ type: "text", text: `Not found: ${uri}` }] };
468
+ - return { content: [{ type: "text", text: JSON.stringify(info, null, 2) }] };
469
+ + const info = await ns.client.stat(uri);
470
+ + if (!info) return { content: [{ type: "text", text: scoped(ns, `Not found: ${uri}`) }] };
471
+ + return { content: [{ type: "text", text: scoped(ns, JSON.stringify(info, null, 2)) }] };
472
+ }
473
+ // list
474
+ - const entries = await client.ls(uri);
475
+ + const entries = await ns.client.ls(uri);
476
+ if (entries.length === 0) {
477
+ - return { content: [{ type: "text", text: `Empty directory: ${uri}` }] };
478
+ + return { content: [{ type: "text", text: scoped(ns, `Empty directory: ${uri}`) }] };
479
+ }
480
+ const lines = entries.map(e => `${e.isDir ? "📁" : "📄"} ${e.name}`);
481
+ - return { content: [{ type: "text", text: lines.join("\n") }] };
482
+ + return { content: [{ type: "text", text: scoped(ns, lines.join("\n")) }] };
483
+ },
484
+ });
485
+
486
+ @@ -147,12 +210,13 @@ export function registerTools(
487
+ name: "viking_write",
488
+ label: "Viking Write",
489
+ description:
490
+ - "Durably write a memory file to OpenViking (content/batch-write). Use this — not a session message — for anything that must survive the session: review lessons, project gotchas, decisions. mode 'create' fails if the file exists; mode 'replace' requires expect_hash and fails if the file changed since you read it. Returns the hash of what it wrote.",
491
+ + "Durably write a memory file to OpenViking (content/batch-write). Use this — not a session message — for anything that must survive the session: review lessons, project gotchas, decisions. mode 'create' fails if the file exists; mode 'replace' requires expect_hash and fails if the file changed since you read it. Returns the hash of what it wrote." + nsNote,
492
+ promptSnippet: "Durably write a memory file to OpenViking",
493
+ promptGuidelines: [
494
+ "Write one self-contained fact or lesson per file; a memory read months later has no conversation around it.",
495
+ "Prefer mode 'create' with a fresh filename. Only 'replace' an entry you just read, passing its hash as expect_hash.",
496
+ "A 409 means someone else edited the file — re-read it and decide, never retry blindly.",
497
+ + ...nsGuidelines,
498
+ ],
499
+ parameters: Type.Object({
500
+ uri: Type.String({ description: "Target viking:// URI, ending in .md (e.g. 'viking://user/reviewer/memories/experiences/pr-5312-migration.md')" }),
501
+ @@ -161,31 +225,41 @@ export function registerTools(
502
+ mode: Type.Optional(StringEnum(["create", "replace"] as const)),
503
+ expect_hash: Type.Optional(Type.String({ description: "Required for mode 'replace': sha256 of the CURRENT stored bytes" })),
504
+ wait: Type.Optional(Type.Boolean({ description: "Block until the search index is refreshed (slow — costs ~1.6 core-seconds). Default false; the bytes are durable either way." })),
505
+ + ...nsParam,
506
+ }),
507
+ async execute(
508
+ _id: string, params: any, _signal: AbortSignal,
509
+ _onUpdate: any, _ctx: any,
510
+ ) {
511
+ - if (!client.connected) {
512
+ - return { content: [{ type: "text", text: "OpenViking server is not reachable — nothing was written." }] };
513
+ + // [QCR PATCH 5] Route BEFORE building the request: a write under the
514
+ + // wrong key is the one mistake here that is both silent and durable.
515
+ + const routed = pick(params);
516
+ + if (!routed.ok) {
517
+ + return { content: [{ type: "text", text: `${routed.error} Nothing was written.` }], details: { written: false } };
518
+ + }
519
+ + const ns = routed.ns;
520
+ + if (!ns.client.connected) {
521
+ + return { content: [{ type: "text", text: scoped(ns, "OpenViking server is not reachable — nothing was written.") }] };
522
+ }
523
+ const built = buildWriteRequest(params ?? {});
524
+ if (!built.ok) {
525
+ return { content: [{ type: "text", text: built.error }], details: { written: false } };
526
+ }
527
+
528
+ - const res = await client.batchWrite(built.request);
529
+ + const res = await ns.client.batchWrite(built.request);
530
+ if (!res.ok) {
531
+ const message = res.error?.message || `HTTP ${res.status ?? 0}`;
532
+ const conflict = res.status === 409;
533
+ return {
534
+ content: [{
535
+ type: "text",
536
+ - text: conflict
537
+ + text: scoped(ns, conflict
538
+ ? `Write REFUSED (409): ${message} Nothing was written. Re-read ${built.request.operations[0]?.uri} and decide on the current content.`
539
+ - : `Write failed: ${message} Nothing was written.`,
540
+ + : `Write failed: ${message} Nothing was written.`),
541
+ }],
542
+ - details: { written: false, status: res.status, conflict },
543
+ + details: multi
544
+ + ? { namespace: ns.name, written: false, status: res.status, conflict }
545
+ + : { written: false, status: res.status, conflict },
546
+ };
547
+ }
548
+
549
+ @@ -200,24 +274,30 @@ export function registerTools(
550
+ : "written";
551
+ // Best effort, deliberately after the durable write and never fatal:
552
+ // the tags are already in the body text.
553
+ - const tagged = built.tags.length > 0 ? await client.setTags(uri, built.tags) : true;
554
+ + const tagged = built.tags.length > 0 ? await ns.client.setTags(uri, built.tags) : true;
555
+ + const details = { written: true, uri, outcome, hash: built.hash, tags: built.tags, tagged, result };
556
+ return {
557
+ content: [{
558
+ type: "text",
559
+ - text:
560
+ + text: scoped(ns,
561
+ `${uri} ${outcome}. hash=${built.hash}` +
562
+ (built.tags.length > 0
563
+ ? ` tags=${built.tags.map((t) => `#${t}`).join(" ")}${tagged ? "" : " (body only — the retrieval tag list was not updated)"}`
564
+ : "") +
565
+ - " Pass that hash as expect_hash to replace this entry later.",
566
+ + " Pass that hash as expect_hash to replace this entry later."),
567
+ }],
568
+ - details: { written: true, uri, outcome, hash: built.hash, tags: built.tags, tagged, result },
569
+ + details: multi ? { namespace: ns.name, ...details } : details,
570
+ };
571
+ },
572
+ });
573
+ }
574
+
575
+ // --- viking_archive_expand ---
576
+ + // [QCR PATCH 5] Deliberately NOT namespace-aware: it expands a SESSION
577
+ + // archive (`viking://session/<id>`), and sessions belong to the identity this
578
+ + // pi authenticates as. Another user's sessions are not memory this fork
579
+ + // offers to browse, and PATCH 3 already says the daemon owns session
580
+ + // lifecycle. It keeps the primary client, unchanged.
581
+ pi.registerTool({
582
+ name: "viking_archive_expand",
583
+ label: "Viking Archive Expand",
584
+ diff --git a/extensions/vendor/openviking-pi/qcr-namespaces.ts b/extensions/vendor/openviking-pi/qcr-namespaces.ts
585
+ new file mode 100644
586
+ --- /dev/null
587
+ +++ b/extensions/vendor/openviking-pi/qcr-namespaces.ts
588
+ @@ -0,0 +1,198 @@
589
+ +// QCR FORK — file added by PATCH 5 (a second memory namespace). Not upstream.
590
+ +//
591
+ +// WHAT THIS SOLVES. Upstream builds ONE `OVClient` from ONE key, so a pi can
592
+ +// only ever reach the user tree that key owns. The companion on the owner's PC
593
+ +// holds TWO OpenViking USER keys — its own (`user/companion/`) and the
594
+ +// reviewer's (`user/reviewer/`, the key the daemon and every review session
595
+ +// hold) — because the ratified design is that the companion and the TUI can do
596
+ +// EVERYTHING with memory, read and write, over every piece of it, while
597
+ +// automated review sessions hold the reviewer key alone and stay confined
598
+ +// server-side (docs/companion-memory-access.md).
599
+ +//
600
+ +// The second key was already delivered to the companion container as
601
+ +// `OPENVIKING_REVIEWER_KEY` and proven usable; nothing consumed it. This file
602
+ +// is the pure half of consuming it: which extra namespaces exist, and which
603
+ +// namespace a given tool call is addressing. The clients themselves are built
604
+ +// in `index.ts` and handed to `tools.ts` — pure logic lives here so
605
+ +// `tests/openviking-fork.test.ts` can exercise it (`tools.ts` and `index.ts`
606
+ +// cannot be imported from a test; they pull typebox and the pi packages).
607
+ +//
608
+ +// SHAPE BORROWED, NOT INVENTED. The TUI solved the same problem first
609
+ +// (`src/tui/memory.ts`): one client per namespace, keys read by env
610
+ +// name from the shared keys file, and every addressed operation prefixed with
611
+ +// the namespace that owns it so a verb routes back to the right key. A
612
+ +// namespace-prefixed address is the established convention; here the address
613
+ +// the model already types is a `viking://user/<namespace>/…` URI, so the URI
614
+ +// carries the prefix and an explicit `namespace` parameter settles the rest.
615
+ +//
616
+ +// THREE PROPERTIES THIS FILE IS RESPONSIBLE FOR:
617
+ +//
618
+ +// 1. A LEAF NEVER GETS A SECOND NAMESPACE. PATCH 2 stops all ambient work in
619
+ +// a pi-subagents leaf and PATCH 4 withholds the write tool there; a second
620
+ +// client must not become a way around either. `resolveExtraNamespaces`
621
+ +// returns [] for a leaf, `index.ts` does not even call it in the leaf
622
+ +// path, and `tools.ts` discards any namespaces handed to a leaf.
623
+ +// 2. THE ROOT-KEY GUARD COVERS BOTH KEYS. Upstream's resolver ends its
624
+ +// fallback chain at the server's `root_api_key`, which our state-volume
625
+ +// symlink puts within reach. The second key goes through the SAME
626
+ +// `withoutRootKey` guard as the first — a new key must not reopen the hole
627
+ +// PATCH 0000 closed.
628
+ +// 3. A REVIEW SESSION IS UNCHANGED. A PR session's own identity already IS
629
+ +// `reviewer` (`OPENVIKING_USER=reviewer`, key in a 0600 ovcli.conf, and
630
+ +// the daemon never puts `OPENVIKING_REVIEWER_KEY` in a session env), so a
631
+ +// namespace whose user equals our own is dropped rather than duplicated:
632
+ +// even if that variable ever appeared in a session, it would add nothing.
633
+ +// And with a single namespace, routing is a constant and the tools keep
634
+ +// the exact parameters and text they have today.
635
+ +import { withoutRootKey } from "./config.js";
636
+ +
637
+ +/** The extra namespace this fork knows how to build. */
638
+ +export const REVIEWER_NAMESPACE = "reviewer";
639
+ +
640
+ +/** Env name carrying the reviewer USER key. Spelled the same in
641
+ + * `src/tui/companion.ts` (`KEY_NAMES`), `src/tui/memory.ts` (`USER_KEY_ENV`)
642
+ + * and the keys file — do not invent a second spelling. */
643
+ +export const REVIEWER_KEY_ENV = "OPENVIKING_REVIEWER_KEY";
644
+ +
645
+ +/** Which OpenViking USER the reviewer key owns. Overridable only because the
646
+ + * user name is a deployment fact; the default is what the daemon uses. */
647
+ +export const REVIEWER_USER_ENV = "OPENVIKING_REVIEWER_USER";
648
+ +
649
+ +/** One extra namespace's credentials — never logged, never put on an argv. */
650
+ +export interface NamespaceCredentials {
651
+ + /** How the model names it: `reviewer`. */
652
+ + name: string;
653
+ + /** `X-OpenViking-User` for that client. */
654
+ + user: string;
655
+ + apiKey: string;
656
+ +}
657
+ +
658
+ +export interface ResolveNamespaceOptions {
659
+ + /** True in a pi-subagents leaf — the answer is then always []. */
660
+ + leaf?: boolean;
661
+ + /** The root-key guard. Injectable for tests; production passes nothing and
662
+ + * gets `config.ts`'s, which reads the server's own ov.conf. */
663
+ + guardRootKey?: typeof withoutRootKey;
664
+ +}
665
+ +
666
+ +function trimmed(value: unknown): string {
667
+ + return typeof value === "string" ? value.trim() : "";
668
+ +}
669
+ +
670
+ +/** What the model calls the namespace this pi authenticates as. `own` only
671
+ + * when no `OPENVIKING_USER` was configured at all. */
672
+ +export function ownNamespaceName(user: unknown): string {
673
+ + return trimmed(user).toLowerCase() || "own";
674
+ +}
675
+ +
676
+ +/**
677
+ + * The namespaces this process can reach BESIDES its own identity.
678
+ + *
679
+ + * Today that is at most one — `reviewer`, when `OPENVIKING_REVIEWER_KEY` is in
680
+ + * the environment. Its ABSENCE is a normal state, not an error: the process
681
+ + * then reaches its own tree only, exactly as before this patch.
682
+ + */
683
+ +export function resolveExtraNamespaces(
684
+ + config: { user?: string },
685
+ + env: Record<string, string | undefined> = process.env,
686
+ + opts: ResolveNamespaceOptions = {},
687
+ +): NamespaceCredentials[] {
688
+ + // (1) A leaf gets nothing ambient and no second key. See PATCH 2.
689
+ + if (opts.leaf === true) return [];
690
+ +
691
+ + const rawKey = trimmed(env[REVIEWER_KEY_ENV]);
692
+ + if (!rawKey) return [];
693
+ +
694
+ + // (2) The same guard the primary key goes through. If this IS the server's
695
+ + // root key it is dropped and the namespace simply does not exist — the fork
696
+ + // never authenticates as ROOT, by any route, including a new one.
697
+ + const guard = opts.guardRootKey ?? withoutRootKey;
698
+ + const guarded = guard({ apiKey: rawKey, hasApiKey: true }, env);
699
+ + if (!guarded.hasApiKey || !guarded.apiKey) return [];
700
+ +
701
+ + const user = trimmed(env[REVIEWER_USER_ENV]).toLowerCase() || REVIEWER_NAMESPACE;
702
+ +
703
+ + // (3) Never a second client for the tree we already are. This is what keeps
704
+ + // a review session (whose own user IS `reviewer`) structurally single-keyed.
705
+ + if (ownNamespaceName(config.user) === user) return [];
706
+ +
707
+ + return [{ name: REVIEWER_NAMESPACE, user, apiKey: guarded.apiKey }];
708
+ +}
709
+ +
710
+ +// ---- routing a tool call to a namespace -------------------------------------
711
+ +
712
+ +export type NamespaceRoute =
713
+ + | { ok: true; namespace: string }
714
+ + | { ok: false; error: string };
715
+ +
716
+ +/** The user tree a `viking://user/<space>/…` URI names, lowercased. `null`
717
+ + * for anything else — including the reserved-word form (`viking://user/
718
+ + * memories/…`) the client expands server-side, which names no namespace. */
719
+ +export function namespaceOfUri(uri: unknown): string | null {
720
+ + const match = /^\s*viking:\/\/user\/([A-Za-z0-9._-]+)/i.exec(String(uri ?? ""));
721
+ + return match ? match[1]!.toLowerCase() : null;
722
+ +}
723
+ +
724
+ +/**
725
+ + * Which namespace a tool call is touching.
726
+ + *
727
+ + * `names[0]` is this pi's own identity and the default. Two ways to name
728
+ + * another one, and they must agree:
729
+ + *
730
+ + * * `namespace: "reviewer"` — explicit, and what the tool schema advertises;
731
+ + * * a `viking://user/reviewer/…` URI — implicit, because the address the
732
+ + * model already types carries the namespace prefix.
733
+ + *
734
+ + * Disagreement is REFUSED rather than resolved by precedence: writing to the
735
+ + * wrong memory tree is silent, and a rule the model has to remember is exactly
736
+ + * the kind of thing it will get wrong at 3am.
737
+ + *
738
+ + * With ONE namespace this is a constant function that never fails — the
739
+ + * single-key case (every review session) keeps today's behaviour exactly.
740
+ + */
741
+ +export function routeNamespace(
742
+ + params: { namespace?: unknown; uri?: unknown; scope?: unknown },
743
+ + names: readonly string[],
744
+ +): NamespaceRoute {
745
+ + const known = names.map((n) => n.toLowerCase());
746
+ + const fallback = known[0] ?? "";
747
+ + if (known.length <= 1) return { ok: true, namespace: fallback };
748
+ +
749
+ + const explicit = trimmed(params.namespace).toLowerCase();
750
+ + if (explicit && !known.includes(explicit)) {
751
+ + return {
752
+ + ok: false,
753
+ + error:
754
+ + `Unknown memory namespace "${explicit}". This pi reaches: ${known.join(", ")}.` +
755
+ + (explicit === REVIEWER_NAMESPACE ? ` Reviewer memory needs ${REVIEWER_KEY_ENV} in this process's environment.` : ""),
756
+ + };
757
+ + }
758
+ +
759
+ + const implied = namespaceOfUri(params.uri) ?? namespaceOfUri(params.scope);
760
+ + if (implied && known.includes(implied)) {
761
+ + if (explicit && explicit !== implied) {
762
+ + return {
763
+ + ok: false,
764
+ + error:
765
+ + `That URI is in the ${implied} memory tree but namespace says "${explicit}". ` +
766
+ + "Pass one or the other, not two different answers.",
767
+ + };
768
+ + }
769
+ + return { ok: true, namespace: implied };
770
+ + }
771
+ +
772
+ + return { ok: true, namespace: explicit || fallback };
773
+ +}
774
+ +
775
+ +/** The sentence appended to every namespace-aware tool description. Written
776
+ + * once so the four tools cannot drift apart on what they tell the model. */
777
+ +export function namespaceNote(names: readonly string[]): string {
778
+ + if (names.length <= 1) return "";
779
+ + const own = names[0]!;
780
+ + const others = names.slice(1);
781
+ + return (
782
+ + ` MEMORY NAMESPACES: this pi reaches ${names.join(" and ")} — ${own} is your own memory and the default, ` +
783
+ + `${others.join(" and ")} is the review system's. Pick one with \`namespace\`, or address a ` +
784
+ + "viking://user/<namespace>/… URI (the two must agree); every answer is prefixed with the tree it came from."
785
+ + );
786
+ +}