@namzu/cli 26.3.0 → 28.0.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 (376) hide show
  1. package/CHANGELOG.md +271 -0
  2. package/README.md +67 -46
  3. package/dist/bin.js +7 -0
  4. package/dist/bin.js.map +1 -1
  5. package/dist/checkpoints/store.d.ts +17 -4
  6. package/dist/checkpoints/store.d.ts.map +1 -1
  7. package/dist/checkpoints/store.js +20 -5
  8. package/dist/checkpoints/store.js.map +1 -1
  9. package/dist/cli.d.ts +2 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +124 -14
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/acp.d.ts +23 -1
  14. package/dist/commands/acp.d.ts.map +1 -1
  15. package/dist/commands/acp.js +41 -2
  16. package/dist/commands/acp.js.map +1 -1
  17. package/dist/commands/drain.d.ts +69 -2
  18. package/dist/commands/drain.d.ts.map +1 -1
  19. package/dist/commands/drain.js +216 -136
  20. package/dist/commands/drain.js.map +1 -1
  21. package/dist/commands/eval.js +1 -1
  22. package/dist/commands/eval.js.map +1 -1
  23. package/dist/commands/{run-flags.d.ts → exec-flags.d.ts} +36 -28
  24. package/dist/commands/exec-flags.d.ts.map +1 -0
  25. package/dist/commands/{run-flags.js → exec-flags.js} +35 -27
  26. package/dist/commands/exec-flags.js.map +1 -0
  27. package/dist/commands/exec-json.d.ts +75 -0
  28. package/dist/commands/exec-json.d.ts.map +1 -0
  29. package/dist/commands/exec-json.js +473 -0
  30. package/dist/commands/exec-json.js.map +1 -0
  31. package/dist/commands/exec.d.ts +42 -0
  32. package/dist/commands/exec.d.ts.map +1 -0
  33. package/dist/commands/exec.js +683 -0
  34. package/dist/commands/exec.js.map +1 -0
  35. package/dist/commands/host-queries.d.ts +12 -0
  36. package/dist/commands/host-queries.d.ts.map +1 -0
  37. package/dist/commands/host-queries.js +149 -0
  38. package/dist/commands/host-queries.js.map +1 -0
  39. package/dist/commands/prior-messages.js +1 -1
  40. package/dist/commands/prior-messages.js.map +1 -1
  41. package/dist/commands/provider-wait.d.ts +5 -5
  42. package/dist/commands/provider-wait.d.ts.map +1 -1
  43. package/dist/commands/provider-wait.js +2 -2
  44. package/dist/commands/registry.d.ts.map +1 -1
  45. package/dist/commands/registry.js +2 -0
  46. package/dist/commands/registry.js.map +1 -1
  47. package/dist/commands/resident-flags.d.ts +2 -2
  48. package/dist/commands/resident-flags.d.ts.map +1 -1
  49. package/dist/commands/resident-flags.js +4 -2
  50. package/dist/commands/resident-flags.js.map +1 -1
  51. package/dist/commands/resident-learning.js +1 -1
  52. package/dist/commands/resident-learning.js.map +1 -1
  53. package/dist/commands/resident.d.ts.map +1 -1
  54. package/dist/commands/resident.js +3 -2
  55. package/dist/commands/resident.js.map +1 -1
  56. package/dist/commands/serve.js +2 -2
  57. package/dist/commands/serve.js.map +1 -1
  58. package/dist/commands/skills.js +1 -1
  59. package/dist/commands/skills.js.map +1 -1
  60. package/dist/commands/state.js +8 -8
  61. package/dist/commands/state.js.map +1 -1
  62. package/dist/commands/stdin.d.ts +5 -5
  63. package/dist/commands/stdin.js +5 -5
  64. package/dist/commands/types.d.ts +2 -0
  65. package/dist/commands/types.d.ts.map +1 -1
  66. package/dist/config/load.d.ts +1 -1
  67. package/dist/config/load.d.ts.map +1 -1
  68. package/dist/config/load.js +36 -5
  69. package/dist/config/load.js.map +1 -1
  70. package/dist/config/schema.d.ts +59 -20
  71. package/dist/config/schema.d.ts.map +1 -1
  72. package/dist/config/schema.js.map +1 -1
  73. package/dist/config/tool-result-screens.js +1 -1
  74. package/dist/config/turn-guards.d.ts +23 -0
  75. package/dist/config/turn-guards.d.ts.map +1 -0
  76. package/dist/config/turn-guards.js +46 -0
  77. package/dist/config/turn-guards.js.map +1 -0
  78. package/dist/context/directories.d.ts +37 -0
  79. package/dist/context/directories.d.ts.map +1 -0
  80. package/dist/context/directories.js +69 -0
  81. package/dist/context/directories.js.map +1 -0
  82. package/dist/context/environment.d.ts +55 -0
  83. package/dist/context/environment.d.ts.map +1 -1
  84. package/dist/context/environment.js +96 -0
  85. package/dist/context/environment.js.map +1 -1
  86. package/dist/context/project-tracker.d.ts +3 -3
  87. package/dist/context/project-tracker.d.ts.map +1 -1
  88. package/dist/context/project-tracker.js +3 -3
  89. package/dist/context/project-tracker.js.map +1 -1
  90. package/dist/context/project.d.ts +2 -2
  91. package/dist/context/project.js +2 -2
  92. package/dist/context/sandbox.d.ts +22 -3
  93. package/dist/context/sandbox.d.ts.map +1 -1
  94. package/dist/context/sandbox.js +42 -4
  95. package/dist/context/sandbox.js.map +1 -1
  96. package/dist/doctor/checks/chain.d.ts +1 -1
  97. package/dist/doctor/checks/chain.js +7 -7
  98. package/dist/doctor/checks/chain.js.map +1 -1
  99. package/dist/doctor/checks/invariants.d.ts +2 -2
  100. package/dist/doctor/checks/invariants.js +5 -5
  101. package/dist/doctor/checks/invariants.js.map +1 -1
  102. package/dist/doctor/checks/logging.js +1 -1
  103. package/dist/doctor/checks/logging.js.map +1 -1
  104. package/dist/doctor/checks/sandbox.js +1 -1
  105. package/dist/doctor/checks/sandbox.js.map +1 -1
  106. package/dist/doctor/checks/session-export.d.ts +1 -1
  107. package/dist/doctor/checks/session-export.js +2 -2
  108. package/dist/doctor/checks/session-export.js.map +1 -1
  109. package/dist/doctor/checks/telemetry.d.ts +1 -1
  110. package/dist/doctor/checks/telemetry.js +1 -1
  111. package/dist/doctor/registry.js +2 -2
  112. package/dist/doctor/registry.js.map +1 -1
  113. package/dist/exit-codes.d.ts +2 -2
  114. package/dist/exit-codes.js +2 -2
  115. package/dist/integrations/mcp/servers.d.ts +1 -1
  116. package/dist/integrations/providers/access.d.ts +4 -1
  117. package/dist/integrations/providers/access.d.ts.map +1 -1
  118. package/dist/integrations/providers/access.js +6 -3
  119. package/dist/integrations/providers/access.js.map +1 -1
  120. package/dist/integrations/providers/chain-capabilities.d.ts +6 -6
  121. package/dist/integrations/providers/chain-capabilities.js +8 -8
  122. package/dist/integrations/providers/chain-capabilities.js.map +1 -1
  123. package/dist/integrations/providers/register.d.ts +1 -1
  124. package/dist/integrations/providers/register.js +1 -1
  125. package/dist/integrations/providers/registry.d.ts +1 -1
  126. package/dist/integrations/providers/zen-catalogue.d.ts +100 -0
  127. package/dist/integrations/providers/zen-catalogue.d.ts.map +1 -0
  128. package/dist/integrations/providers/zen-catalogue.js +196 -0
  129. package/dist/integrations/providers/zen-catalogue.js.map +1 -0
  130. package/dist/integrations/resident/inspection.d.ts +4 -1
  131. package/dist/integrations/resident/inspection.d.ts.map +1 -1
  132. package/dist/integrations/resident/inspection.js +53 -34
  133. package/dist/integrations/resident/inspection.js.map +1 -1
  134. package/dist/integrations/resident/learning-storage.d.ts +7 -2
  135. package/dist/integrations/resident/learning-storage.d.ts.map +1 -1
  136. package/dist/integrations/resident/learning-storage.js +12 -8
  137. package/dist/integrations/resident/learning-storage.js.map +1 -1
  138. package/dist/integrations/resident/runner-launch.d.ts +3 -3
  139. package/dist/integrations/resident/runner-launch.d.ts.map +1 -1
  140. package/dist/integrations/resident/runner-store.d.ts +1 -1
  141. package/dist/integrations/resident/runner-store.d.ts.map +1 -1
  142. package/dist/integrations/resident/runner-store.js +5 -2
  143. package/dist/integrations/resident/runner-store.js.map +1 -1
  144. package/dist/integrations/resident/runner-worker.js +23 -0
  145. package/dist/integrations/resident/runner-worker.js.map +1 -1
  146. package/dist/integrations/resident/session-log-reads.d.ts +37 -0
  147. package/dist/integrations/resident/session-log-reads.d.ts.map +1 -0
  148. package/dist/integrations/resident/session-log-reads.js +125 -0
  149. package/dist/integrations/resident/session-log-reads.js.map +1 -0
  150. package/dist/integrations/resident/session-step.d.ts +4 -2
  151. package/dist/integrations/resident/session-step.d.ts.map +1 -1
  152. package/dist/integrations/resident/session-step.js +16 -14
  153. package/dist/integrations/resident/session-step.js.map +1 -1
  154. package/dist/integrations/resident/storage.d.ts +23 -1
  155. package/dist/integrations/resident/storage.d.ts.map +1 -1
  156. package/dist/integrations/resident/storage.js +60 -17
  157. package/dist/integrations/resident/storage.js.map +1 -1
  158. package/dist/integrations/resident/tool-evidence.d.ts +4 -2
  159. package/dist/integrations/resident/tool-evidence.d.ts.map +1 -1
  160. package/dist/integrations/resident/tool-evidence.js +36 -30
  161. package/dist/integrations/resident/tool-evidence.js.map +1 -1
  162. package/dist/integrations/resident/verification.d.ts +2 -2
  163. package/dist/integrations/resident/verification.d.ts.map +1 -1
  164. package/dist/integrations/resident/verification.js +4 -4
  165. package/dist/integrations/resident/verification.js.map +1 -1
  166. package/dist/integrations/sessions/checkpoint-view.d.ts +13 -0
  167. package/dist/integrations/sessions/checkpoint-view.d.ts.map +1 -0
  168. package/dist/integrations/sessions/checkpoint-view.js +48 -0
  169. package/dist/integrations/sessions/checkpoint-view.js.map +1 -0
  170. package/dist/integrations/sessions/context-inventory.js +1 -1
  171. package/dist/integrations/sessions/context-inventory.js.map +1 -1
  172. package/dist/integrations/sessions/conversation-search.d.ts +16 -20
  173. package/dist/integrations/sessions/conversation-search.d.ts.map +1 -1
  174. package/dist/integrations/sessions/conversation-search.js +305 -731
  175. package/dist/integrations/sessions/conversation-search.js.map +1 -1
  176. package/dist/integrations/sessions/evidence-page-validation.d.ts +4 -4
  177. package/dist/integrations/sessions/evidence-page-validation.d.ts.map +1 -1
  178. package/dist/integrations/sessions/evidence-page-validation.js +1 -1
  179. package/dist/integrations/sessions/evidence-page-validation.js.map +1 -1
  180. package/dist/integrations/sessions/evidence-recall.d.ts +40 -2
  181. package/dist/integrations/sessions/evidence-recall.d.ts.map +1 -1
  182. package/dist/integrations/sessions/evidence-recall.js +41 -97
  183. package/dist/integrations/sessions/evidence-recall.js.map +1 -1
  184. package/dist/integrations/sessions/store.d.ts +153 -85
  185. package/dist/integrations/sessions/store.d.ts.map +1 -1
  186. package/dist/integrations/sessions/store.js +414 -484
  187. package/dist/integrations/sessions/store.js.map +1 -1
  188. package/dist/integrations/sessions/task-context.d.ts +15 -2
  189. package/dist/integrations/sessions/task-context.d.ts.map +1 -1
  190. package/dist/integrations/sessions/task-context.js +34 -11
  191. package/dist/integrations/sessions/task-context.js.map +1 -1
  192. package/dist/integrations/sessions/transcript-export.d.ts +13 -6
  193. package/dist/integrations/sessions/transcript-export.d.ts.map +1 -1
  194. package/dist/integrations/sessions/transcript-export.js +148 -263
  195. package/dist/integrations/sessions/transcript-export.js.map +1 -1
  196. package/dist/integrations/state/home.d.ts +4 -16
  197. package/dist/integrations/state/home.d.ts.map +1 -1
  198. package/dist/integrations/state/home.js +6 -42
  199. package/dist/integrations/state/home.js.map +1 -1
  200. package/dist/integrations/state/project.d.ts +6 -7
  201. package/dist/integrations/state/project.d.ts.map +1 -1
  202. package/dist/integrations/state/project.js +7 -9
  203. package/dist/integrations/state/project.js.map +1 -1
  204. package/dist/integrations/state/report.d.ts +27 -41
  205. package/dist/integrations/state/report.d.ts.map +1 -1
  206. package/dist/integrations/state/report.js +172 -464
  207. package/dist/integrations/state/report.js.map +1 -1
  208. package/dist/integrations/state/retention.d.ts +18 -0
  209. package/dist/integrations/state/retention.d.ts.map +1 -0
  210. package/dist/integrations/state/retention.js +18 -0
  211. package/dist/integrations/state/retention.js.map +1 -0
  212. package/dist/integrations/subagents/activity.d.ts +36 -31
  213. package/dist/integrations/subagents/activity.d.ts.map +1 -1
  214. package/dist/integrations/subagents/activity.js +27 -23
  215. package/dist/integrations/subagents/activity.js.map +1 -1
  216. package/dist/integrations/subagents/batches.d.ts +91 -0
  217. package/dist/integrations/subagents/batches.d.ts.map +1 -0
  218. package/dist/integrations/subagents/batches.js +172 -0
  219. package/dist/integrations/subagents/batches.js.map +1 -0
  220. package/dist/integrations/subagents/parent.d.ts +26 -11
  221. package/dist/integrations/subagents/parent.d.ts.map +1 -1
  222. package/dist/integrations/subagents/parent.js +13 -28
  223. package/dist/integrations/subagents/parent.js.map +1 -1
  224. package/dist/integrations/subagents/policy.d.ts +2 -2
  225. package/dist/integrations/subagents/policy.d.ts.map +1 -1
  226. package/dist/integrations/subagents/policy.js +2 -2
  227. package/dist/integrations/subagents/policy.js.map +1 -1
  228. package/dist/integrations/subagents/replay.d.ts +91 -26
  229. package/dist/integrations/subagents/replay.d.ts.map +1 -1
  230. package/dist/integrations/subagents/replay.js +216 -114
  231. package/dist/integrations/subagents/replay.js.map +1 -1
  232. package/dist/integrations/subagents/runtime.d.ts +50 -26
  233. package/dist/integrations/subagents/runtime.d.ts.map +1 -1
  234. package/dist/integrations/subagents/runtime.js +132 -126
  235. package/dist/integrations/subagents/runtime.js.map +1 -1
  236. package/dist/integrations/subagents/saved-agents.d.ts +57 -0
  237. package/dist/integrations/subagents/saved-agents.d.ts.map +1 -0
  238. package/dist/integrations/subagents/saved-agents.js +102 -0
  239. package/dist/integrations/subagents/saved-agents.js.map +1 -0
  240. package/dist/integrations/subagents/slash.d.ts +55 -0
  241. package/dist/integrations/subagents/slash.d.ts.map +1 -0
  242. package/dist/integrations/subagents/slash.js +45 -0
  243. package/dist/integrations/subagents/slash.js.map +1 -0
  244. package/dist/integrations/telemetry/session-export.d.ts +6 -6
  245. package/dist/integrations/telemetry/session-export.d.ts.map +1 -1
  246. package/dist/integrations/telemetry/session-export.js +2 -2
  247. package/dist/integrations/web/search.d.ts +1 -1
  248. package/dist/logging.d.ts +5 -5
  249. package/dist/logging.js +6 -6
  250. package/dist/memory/presentation.d.ts +11 -0
  251. package/dist/memory/presentation.d.ts.map +1 -1
  252. package/dist/memory/presentation.js +25 -0
  253. package/dist/memory/presentation.js.map +1 -1
  254. package/dist/memory/store.d.ts +13 -7
  255. package/dist/memory/store.d.ts.map +1 -1
  256. package/dist/memory/store.js +37 -11
  257. package/dist/memory/store.js.map +1 -1
  258. package/dist/memory/typed.d.ts +116 -0
  259. package/dist/memory/typed.d.ts.map +1 -0
  260. package/dist/memory/typed.js +336 -0
  261. package/dist/memory/typed.js.map +1 -0
  262. package/dist/permissions/checks.d.ts +1 -1
  263. package/dist/permissions/checks.js +1 -1
  264. package/dist/permissions/headless-trust.d.ts +4 -4
  265. package/dist/permissions/headless-trust.d.ts.map +1 -1
  266. package/dist/permissions/headless-trust.js +6 -6
  267. package/dist/permissions/headless-trust.js.map +1 -1
  268. package/dist/permissions/mode.d.ts +4 -4
  269. package/dist/permissions/mode.js +1 -1
  270. package/dist/permissions/rules.d.ts +1 -1
  271. package/dist/permissions/rules.js +1 -1
  272. package/dist/termination.d.ts +75 -0
  273. package/dist/termination.d.ts.map +1 -0
  274. package/dist/termination.js +143 -0
  275. package/dist/termination.js.map +1 -0
  276. package/dist/tui/AgentExplorer.d.ts +2 -2
  277. package/dist/tui/AgentExplorer.js +4 -4
  278. package/dist/tui/AgentExplorer.js.map +1 -1
  279. package/dist/tui/App.d.ts +9 -1
  280. package/dist/tui/App.d.ts.map +1 -1
  281. package/dist/tui/App.js +456 -307
  282. package/dist/tui/App.js.map +1 -1
  283. package/dist/tui/LiveActivity.d.ts +1 -1
  284. package/dist/tui/LiveActivity.d.ts.map +1 -1
  285. package/dist/tui/PermissionOverlay.d.ts +8 -0
  286. package/dist/tui/PermissionOverlay.d.ts.map +1 -1
  287. package/dist/tui/PermissionOverlay.js +25 -2
  288. package/dist/tui/PermissionOverlay.js.map +1 -1
  289. package/dist/tui/Picker.js +1 -1
  290. package/dist/tui/agent.d.ts +211 -135
  291. package/dist/tui/agent.d.ts.map +1 -1
  292. package/dist/tui/agent.js +535 -316
  293. package/dist/tui/agent.js.map +1 -1
  294. package/dist/tui/conversation-evidence-view.js +3 -3
  295. package/dist/tui/conversation-evidence-view.js.map +1 -1
  296. package/dist/tui/conversation-history.d.ts +4 -21
  297. package/dist/tui/conversation-history.d.ts.map +1 -1
  298. package/dist/tui/conversation-history.js +4 -28
  299. package/dist/tui/conversation-history.js.map +1 -1
  300. package/dist/tui/index.d.ts.map +1 -1
  301. package/dist/tui/index.js +27 -1
  302. package/dist/tui/index.js.map +1 -1
  303. package/dist/tui/log-pane.js +1 -1
  304. package/dist/tui/markdownParser.d.ts +1 -1
  305. package/dist/tui/markdownParser.js +1 -1
  306. package/dist/tui/permission-review.d.ts +16 -0
  307. package/dist/tui/permission-review.d.ts.map +1 -1
  308. package/dist/tui/permission-review.js +25 -2
  309. package/dist/tui/permission-review.js.map +1 -1
  310. package/dist/tui/slashCommands.d.ts +30 -41
  311. package/dist/tui/slashCommands.d.ts.map +1 -1
  312. package/dist/tui/slashCommands.js +75 -66
  313. package/dist/tui/slashCommands.js.map +1 -1
  314. package/dist/tui/status-panel-layout.js +1 -1
  315. package/dist/tui/status-panel-layout.js.map +1 -1
  316. package/dist/tui/{run-interruption.d.ts → turn-interruption.d.ts} +4 -4
  317. package/dist/tui/turn-interruption.d.ts.map +1 -0
  318. package/dist/tui/{run-interruption.js → turn-interruption.js} +20 -20
  319. package/dist/tui/turn-interruption.js.map +1 -0
  320. package/dist/tui/turn-limits-settings.d.ts +39 -0
  321. package/dist/tui/turn-limits-settings.d.ts.map +1 -0
  322. package/dist/tui/{run-limits-settings.js → turn-limits-settings.js} +18 -18
  323. package/dist/tui/turn-limits-settings.js.map +1 -0
  324. package/dist/tui/types.d.ts +3 -3
  325. package/dist/tui/types.d.ts.map +1 -1
  326. package/dist/user-commands/store.d.ts +4 -4
  327. package/dist/user-commands/store.js +5 -5
  328. package/dist/user-commands/store.js.map +1 -1
  329. package/package.json +6 -6
  330. package/dist/commands/run-flags.d.ts.map +0 -1
  331. package/dist/commands/run-flags.js.map +0 -1
  332. package/dist/commands/run-stream.d.ts +0 -65
  333. package/dist/commands/run-stream.d.ts.map +0 -1
  334. package/dist/commands/run-stream.js +0 -603
  335. package/dist/commands/run-stream.js.map +0 -1
  336. package/dist/commands/run.d.ts +0 -39
  337. package/dist/commands/run.d.ts.map +0 -1
  338. package/dist/commands/run.js +0 -533
  339. package/dist/commands/run.js.map +0 -1
  340. package/dist/config/run-limits.d.ts +0 -11
  341. package/dist/config/run-limits.d.ts.map +0 -1
  342. package/dist/config/run-limits.js +0 -64
  343. package/dist/config/run-limits.js.map +0 -1
  344. package/dist/integrations/sessions/compaction-evidence.d.ts +0 -5
  345. package/dist/integrations/sessions/compaction-evidence.d.ts.map +0 -1
  346. package/dist/integrations/sessions/compaction-evidence.js +0 -59
  347. package/dist/integrations/sessions/compaction-evidence.js.map +0 -1
  348. package/dist/integrations/sessions/database.d.ts +0 -5
  349. package/dist/integrations/sessions/database.d.ts.map +0 -1
  350. package/dist/integrations/sessions/database.js +0 -34
  351. package/dist/integrations/sessions/database.js.map +0 -1
  352. package/dist/integrations/sessions/paths.d.ts +0 -7
  353. package/dist/integrations/sessions/paths.d.ts.map +0 -1
  354. package/dist/integrations/sessions/paths.js +0 -14
  355. package/dist/integrations/sessions/paths.js.map +0 -1
  356. package/dist/integrations/sessions/run-discovery.d.ts +0 -24
  357. package/dist/integrations/sessions/run-discovery.d.ts.map +0 -1
  358. package/dist/integrations/sessions/run-discovery.js +0 -142
  359. package/dist/integrations/sessions/run-discovery.js.map +0 -1
  360. package/dist/integrations/sessions/turn-evidence.d.ts +0 -129
  361. package/dist/integrations/sessions/turn-evidence.d.ts.map +0 -1
  362. package/dist/integrations/sessions/turn-evidence.js +0 -517
  363. package/dist/integrations/sessions/turn-evidence.js.map +0 -1
  364. package/dist/integrations/subagents/history.d.ts +0 -26
  365. package/dist/integrations/subagents/history.d.ts.map +0 -1
  366. package/dist/integrations/subagents/history.js +0 -76
  367. package/dist/integrations/subagents/history.js.map +0 -1
  368. package/dist/integrations/subagents/runs.d.ts +0 -72
  369. package/dist/integrations/subagents/runs.d.ts.map +0 -1
  370. package/dist/integrations/subagents/runs.js +0 -155
  371. package/dist/integrations/subagents/runs.js.map +0 -1
  372. package/dist/tui/run-interruption.d.ts.map +0 -1
  373. package/dist/tui/run-interruption.js.map +0 -1
  374. package/dist/tui/run-limits-settings.d.ts +0 -39
  375. package/dist/tui/run-limits-settings.d.ts.map +0 -1
  376. package/dist/tui/run-limits-settings.js.map +0 -1
@@ -1,7 +1,10 @@
1
1
  import type { ProviderRegistryEntry } from './registry.js';
2
2
  /** The service's public marker is not an account credential. */
3
3
  export declare function hasApiCredential(entry: ProviderRegistryEntry, apiKey: string | undefined): boolean;
4
- /** Anonymous Zen admission uses the driver's explicit public model catalogue. */
4
+ /**
5
+ * Anonymous Zen admission uses the driver's explicit public model catalogue —
6
+ * the session's active one, which is the background refresh once it lands.
7
+ */
5
8
  export declare function requiresCredentialForModel(entry: ProviderRegistryEntry, model: string): boolean;
6
9
  export declare function canSelectModel(entry: ProviderRegistryEntry, apiKey: string | undefined, model: string): boolean;
7
10
  //# sourceMappingURL=access.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../../src/integrations/providers/access.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE1D,gEAAgE;AAChE,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAKT;AAED,iFAAiF;AACjF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAK/F;AAED,wBAAgB,cAAc,CAC7B,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,GACX,OAAO,CAET"}
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../../src/integrations/providers/access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAG1D,gEAAgE;AAChE,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAKT;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAK/F;AAED,wBAAgB,cAAc,CAC7B,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,GACX,OAAO,CAET"}
@@ -1,4 +1,4 @@
1
- import { findZenModel } from '@namzu/zen/models';
1
+ import { findActiveZenModel } from './zen-catalogue.js';
2
2
  /** The service's public marker is not an account credential. */
3
3
  export function hasApiCredential(entry, apiKey) {
4
4
  if (entry.id === 'zen' || entry.id === 'zen-go') {
@@ -6,10 +6,13 @@ export function hasApiCredential(entry, apiKey) {
6
6
  }
7
7
  return Boolean(apiKey);
8
8
  }
9
- /** Anonymous Zen admission uses the driver's explicit public model catalogue. */
9
+ /**
10
+ * Anonymous Zen admission uses the driver's explicit public model catalogue —
11
+ * the session's active one, which is the background refresh once it lands.
12
+ */
10
13
  export function requiresCredentialForModel(entry, model) {
11
14
  return (entry.requiresApiKey ||
12
- (entry.id === 'zen' && findZenModel('zen', model)?.supportsAnonymousAccess !== true));
15
+ (entry.id === 'zen' && findActiveZenModel('zen', model)?.supportsAnonymousAccess !== true));
13
16
  }
14
17
  export function canSelectModel(entry, apiKey, model) {
15
18
  return hasApiCredential(entry, apiKey) || !requiresCredentialForModel(entry, model);
@@ -1 +1 @@
1
- {"version":3,"file":"access.js","sourceRoot":"","sources":["../../../src/integrations/providers/access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIhD,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAC/B,KAA4B,EAC5B,MAA0B;IAE1B,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,CAAA;IAC7D,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAA;AACvB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,0BAA0B,CAAC,KAA4B,EAAE,KAAa;IACrF,OAAO,CACN,KAAK,CAAC,cAAc;QACpB,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,uBAAuB,KAAK,IAAI,CAAC,CACpF,CAAA;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,KAA4B,EAC5B,MAA0B,EAC1B,KAAa;IAEb,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACpF,CAAC"}
1
+ {"version":3,"file":"access.js","sourceRoot":"","sources":["../../../src/integrations/providers/access.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAC/B,KAA4B,EAC5B,MAA0B;IAE1B,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,CAAA;IAC7D,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAA;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAA4B,EAAE,KAAa;IACrF,OAAO,CACN,KAAK,CAAC,cAAc;QACpB,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,uBAAuB,KAAK,IAAI,CAAC,CAC1F,CAAA;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,KAA4B,EAC5B,MAA0B,EAC1B,KAAa;IAEb,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACpF,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Do the members of a provider chain agree about what they can do?
3
3
  *
4
- * The runtime negotiates capabilities ONCE per run, against the provider it was
4
+ * The runtime negotiates capabilities ONCE per turn, against the provider it was
5
5
  * handed, and that answer decides whether tool surfaces go into the prompt and
6
6
  * whether image and document attachments are mapped. A chain whose members
7
7
  * disagree therefore cannot be honoured by taking the strongest answer: if the
@@ -13,7 +13,7 @@
13
13
  * chain. That is worse, and worse in the direction that matters. An operator who
14
14
  * adds a weaker fallback to gain resilience would find their PRIMARY had quietly
15
15
  * lost tool support, permanently, with nothing saying so — a capability given up
16
- * on every run to guard against a failure that happens rarely. So a disagreement
16
+ * on every turn to guard against a failure that happens rarely. So a disagreement
17
17
  * is refused and named, and an operator who wants the intersection anyway says
18
18
  * so explicitly.
19
19
  *
@@ -28,18 +28,18 @@
28
28
  * provider IS. A check that overstates its authority is how someone later finds
29
29
  * the runtime disagreed with it and stops believing it.
30
30
  *
31
- * ## And it is a property of the CHAIN, not of a run
31
+ * ## And it is a property of the CHAIN, not of a turn
32
32
  *
33
33
  * Every sentence here says what becomes unavailable IF the chain falls over,
34
- * and that stays the right tense now that it does. A run negotiates
34
+ * and that stays the right tense now that it does. A turn negotiates
35
35
  * capabilities once, against the primary, and keeps that answer across a swap —
36
36
  * so at the moment this check runs, no degradation has happened and claiming
37
37
  * one would be a confident statement about a turn that may never come.
38
38
  *
39
39
  * The conditional is also what makes the refusal worth having. Because the
40
40
  * negotiated answer does NOT follow the swap, a chain that disagrees would put
41
- * a run on a member holding a request shaped for someone else. Catching that
42
- * here, before a run starts, is cheaper than discovering it during one.
41
+ * a turn on a member holding a request shaped for someone else. Catching that
42
+ * here, before a turn starts, is cheaper than discovering it during one.
43
43
  */
44
44
  import type { ResolvedProviderCapabilities } from '@namzu/sdk';
45
45
  import { type ProviderChoice } from './preferences.js';
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Do the members of a provider chain agree about what they can do?
3
3
  *
4
- * The runtime negotiates capabilities ONCE per run, against the provider it was
4
+ * The runtime negotiates capabilities ONCE per turn, against the provider it was
5
5
  * handed, and that answer decides whether tool surfaces go into the prompt and
6
6
  * whether image and document attachments are mapped. A chain whose members
7
7
  * disagree therefore cannot be honoured by taking the strongest answer: if the
@@ -13,7 +13,7 @@
13
13
  * chain. That is worse, and worse in the direction that matters. An operator who
14
14
  * adds a weaker fallback to gain resilience would find their PRIMARY had quietly
15
15
  * lost tool support, permanently, with nothing saying so — a capability given up
16
- * on every run to guard against a failure that happens rarely. So a disagreement
16
+ * on every turn to guard against a failure that happens rarely. So a disagreement
17
17
  * is refused and named, and an operator who wants the intersection anyway says
18
18
  * so explicitly.
19
19
  *
@@ -28,18 +28,18 @@
28
28
  * provider IS. A check that overstates its authority is how someone later finds
29
29
  * the runtime disagreed with it and stops believing it.
30
30
  *
31
- * ## And it is a property of the CHAIN, not of a run
31
+ * ## And it is a property of the CHAIN, not of a turn
32
32
  *
33
33
  * Every sentence here says what becomes unavailable IF the chain falls over,
34
- * and that stays the right tense now that it does. A run negotiates
34
+ * and that stays the right tense now that it does. A turn negotiates
35
35
  * capabilities once, against the primary, and keeps that answer across a swap —
36
36
  * so at the moment this check runs, no degradation has happened and claiming
37
37
  * one would be a confident statement about a turn that may never come.
38
38
  *
39
39
  * The conditional is also what makes the refusal worth having. Because the
40
40
  * negotiated answer does NOT follow the swap, a chain that disagrees would put
41
- * a run on a member holding a request shaped for someone else. Catching that
42
- * here, before a run starts, is cheaper than discovering it during one.
41
+ * a turn on a member holding a request shaped for someone else. Catching that
42
+ * here, before a turn starts, is cheaper than discovering it during one.
43
43
  */
44
44
  import { chainPositionName } from './preferences.js';
45
45
  import { PROVIDER_REGISTRY } from './registry.js';
@@ -126,7 +126,7 @@ export function chainCapabilityDisagreements(members, resolved) {
126
126
  return out;
127
127
  }
128
128
  /**
129
- * A smaller output ceiling is the same problem wearing a number: a run served by
129
+ * A smaller output ceiling is the same problem wearing a number: a turn served by
130
130
  * that member produces shorter replies than the chain was configured for.
131
131
  * Reported against the LARGEST declared ceiling, for the reason the booleans are
132
132
  * reported against the first member that has the capability.
@@ -195,7 +195,7 @@ export function describeCapabilityRefusal(disagreements) {
195
195
  'The providers in your chain declare different capabilities, so namzu cannot honour the chain as written:',
196
196
  ...disagreements.map((d) => ` - ${d.sentence}`),
197
197
  '',
198
- 'Taking the strongest answer would advertise abilities a fallback does not have. Taking the weakest would cost your primary a capability on every run, to guard against a failure that happens rarely. Neither is chosen for you.',
198
+ 'Taking the strongest answer would advertise abilities a fallback does not have. Taking the weakest would cost your primary a capability on every turn, to guard against a failure that happens rarely. Neither is chosen for you.',
199
199
  'Either drop the member that disagrees, or set "allowCapabilityMismatch": true in ~/.namzu/preferences.json to accept the limitation — it is printed on every launch.',
200
200
  ].join('\n');
201
201
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chain-capabilities.js","sourceRoot":"","sources":["../../../src/integrations/providers/chain-capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chain-capabilities.js","sourceRoot":"","sources":["../../../src/integrations/providers/chain-capabilities.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * This is the only place the wired driver packages are imported, so it decides
5
5
  * what a `namzu` invocation actually pulls in and when. The imports are dynamic
6
- * for that reason: a run on one provider does not load the other drivers, and a
6
+ * for that reason: a turn on one provider does not load the other drivers, and a
7
7
  * command that never touches a model loads none.
8
8
  *
9
9
  * ## Why it lives here rather than in the session module
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * This is the only place the wired driver packages are imported, so it decides
5
5
  * what a `namzu` invocation actually pulls in and when. The imports are dynamic
6
- * for that reason: a run on one provider does not load the other drivers, and a
6
+ * for that reason: a turn on one provider does not load the other drivers, and a
7
7
  * command that never touches a model loads none.
8
8
  *
9
9
  * ## Why it lives here rather than in the session module
@@ -88,7 +88,7 @@ export interface ProviderRegistryEntry {
88
88
  * Default model when the user does not pick one in the picker.
89
89
  *
90
90
  * **These are namzu's picks, not the provider's, and they go stale.** A
91
- * hardcoded default fails silently: nothing errors, the run just happens on
91
+ * hardcoded default fails silently: nothing errors, the turn just happens on
92
92
  * an older model than the operator assumes, and only a reader who already
93
93
  * knows the current generation would notice. One sat two generations behind
94
94
  * for exactly that reason.
@@ -0,0 +1,100 @@
1
+ /**
2
+ * The Zen and Zen Go model catalogue this CLI session routes and lists with.
3
+ *
4
+ * `@namzu/zen` ships a bundled snapshot and never fetches on its own. The CLI
5
+ * opts in: every launch starts one background refresh (`startZenCatalogueRefresh`)
6
+ * that is never awaited on the startup path, is bounded in time, and is
7
+ * cancelled when the command returns. Until it lands the session uses the
8
+ * last-good copy under the application home, or — with none — the bundled
9
+ * snapshot. A refresh that lands becomes the active catalogue at once and is
10
+ * written as the new last-good copy; a refresh that fails changes nothing and
11
+ * says so in one log line. There is no state in between: a catalogue is either
12
+ * the whole of a validated derivation or it is not used.
13
+ *
14
+ * Every Zen provider the CLI builds reads `activeZenCatalogue` at each lookup
15
+ * (`ZenConfig.catalogue` as a function), so a catalogue that lands mid-session
16
+ * reaches providers that were built before it.
17
+ */
18
+ import type { Logger } from '@namzu/sdk';
19
+ import { type ZenCatalogue, type ZenCatalogueResult } from '@namzu/zen/catalogue';
20
+ import type { ZenModel, ZenService } from '@namzu/zen/models';
21
+ /** Where the last-good catalogue lives, relative to the application home. */
22
+ export declare const ZEN_CATALOGUE_CACHE_PATH: string;
23
+ /** The whole refresh — five reads and the derivation — gets this long, then stops. */
24
+ export declare const ZEN_CATALOGUE_REFRESH_BUDGET_MS = 30000;
25
+ /** Which catalogue the session is using. */
26
+ export type ZenCatalogueSource = 'bundled' | 'cache' | 'live';
27
+ /** The runtime catalogue this session routes with, or undefined for the bundled snapshot. */
28
+ export declare function activeZenCatalogue(): ZenCatalogue | undefined;
29
+ /** Where the active catalogue came from. */
30
+ export declare function activeZenCatalogueSource(): ZenCatalogueSource;
31
+ /** Exact lookup against the active catalogue, falling back to the bundled snapshot. */
32
+ export declare function findActiveZenModel(service: ZenService, id: string): ZenModel | undefined;
33
+ /**
34
+ * Whether the CLI can offer `model` on `providerId` — false only for a Zen or
35
+ * Zen Go id the active catalogue lists as served with no known wire format.
36
+ *
37
+ * `ZenProvider.listModels` lists such an id so that an embedder, who can pass
38
+ * `protocol`, can see it. The CLI has no key or flag that names a protocol, so
39
+ * choosing one would fail on every turn with a remedy the operator cannot
40
+ * apply; the CLI's listings leave it out instead.
41
+ */
42
+ export declare function isOfferableModel(providerId: string, model: string): boolean;
43
+ /** Test seam: back to the bundled snapshot. */
44
+ export declare function __resetZenCatalogueForTests(): void;
45
+ /** How a refresh ended. `cancelled` is the launch ending first, which is not a failure. */
46
+ export type ZenCatalogueRefreshOutcome = {
47
+ readonly kind: 'live';
48
+ readonly catalogue: ZenCatalogue;
49
+ } | {
50
+ readonly kind: 'failed';
51
+ readonly using: 'cache' | 'bundled';
52
+ readonly reason: string;
53
+ } | {
54
+ readonly kind: 'cancelled';
55
+ };
56
+ export interface ZenCatalogueRefresh {
57
+ /** Settles when the refresh does. Never rejects. */
58
+ readonly done: Promise<ZenCatalogueRefreshOutcome>;
59
+ /** Stop now. Idempotent; a refresh that already landed is kept. */
60
+ cancel(): void;
61
+ }
62
+ export interface StartZenCatalogueRefreshOptions {
63
+ /** The application home (`NAMZU_HOME`, default `~/.namzu`). */
64
+ readonly home: string;
65
+ /**
66
+ * Where the refresh's lines go. A function is called for each line, and the
67
+ * CLI passes `cliLogger` itself: the process logger is rebuilt when the TUI
68
+ * installs its ring buffer or `exec --json` its NDJSON sink, both after the
69
+ * refresh starts, and a logger captured at start would keep writing to the
70
+ * sink that was current then — raw lines under Ink, pretty lines on a
71
+ * machine-read stderr.
72
+ */
73
+ readonly log: Logger | (() => Logger);
74
+ /** Defaults to the global `fetch`. */
75
+ readonly fetch?: typeof fetch;
76
+ /** Defaults to `ZEN_CATALOGUE_REFRESH_BUDGET_MS`. */
77
+ readonly budgetMs?: number;
78
+ /** Test seam for the derivation; defaults to `@namzu/zen/catalogue`'s `fetchZenCatalogue`. */
79
+ readonly fetchCatalogue?: (options: {
80
+ readonly fetch?: typeof fetch;
81
+ readonly signal: AbortSignal;
82
+ readonly timeoutMs: number;
83
+ }) => Promise<ZenCatalogueResult>;
84
+ }
85
+ /**
86
+ * Start the launch's background refresh and return at once.
87
+ *
88
+ * Synchronous by contract: nothing here is awaited before the handle is
89
+ * returned, so the caller's startup path cannot wait on the network or the
90
+ * disk. The last-good copy is read first and adopted if no live catalogue has
91
+ * landed by then; the network result, when it lands, replaces it.
92
+ */
93
+ export declare function startZenCatalogueRefresh(options: StartZenCatalogueRefreshOptions): ZenCatalogueRefresh;
94
+ /**
95
+ * Write the last-good copy atomically: a sibling temp file, then a rename, so
96
+ * a reader — this launch's next start, or a concurrent one — sees the old copy
97
+ * or the new one and never a torn write.
98
+ */
99
+ export declare function writeLastGood(path: string, catalogue: ZenCatalogue): Promise<void>;
100
+ //# sourceMappingURL=zen-catalogue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zen-catalogue.d.ts","sourceRoot":"","sources":["../../../src/integrations/providers/zen-catalogue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,kBAAkB,EAKvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE7D,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,QAAoC,CAAA;AAEzE,sFAAsF;AACtF,eAAO,MAAM,+BAA+B,QAAS,CAAA;AAKrD,4CAA4C;AAC5C,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AAK7D,6FAA6F;AAC7F,wBAAgB,kBAAkB,IAAI,YAAY,GAAG,SAAS,CAE7D;AAED,4CAA4C;AAC5C,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAExF;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAI3E;AAED,+CAA+C;AAC/C,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD;AAED,2FAA2F;AAC3F,MAAM,MAAM,0BAA0B,GACnC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzF;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAA;AAEjC,MAAM,WAAW,mBAAmB;IACnC,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAClD,mEAAmE;IACnE,MAAM,IAAI,IAAI,CAAA;CACd;AAED,MAAM,WAAW,+BAA+B;IAC/C,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;IACrC,sCAAsC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IAC7B,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,8FAA8F;IAC9F,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE;QACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;QAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAC1B,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;CACjC;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,+BAA+B,GACtC,mBAAmB,CAoErB;AAiCD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBxF"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * The Zen and Zen Go model catalogue this CLI session routes and lists with.
3
+ *
4
+ * `@namzu/zen` ships a bundled snapshot and never fetches on its own. The CLI
5
+ * opts in: every launch starts one background refresh (`startZenCatalogueRefresh`)
6
+ * that is never awaited on the startup path, is bounded in time, and is
7
+ * cancelled when the command returns. Until it lands the session uses the
8
+ * last-good copy under the application home, or — with none — the bundled
9
+ * snapshot. A refresh that lands becomes the active catalogue at once and is
10
+ * written as the new last-good copy; a refresh that fails changes nothing and
11
+ * says so in one log line. There is no state in between: a catalogue is either
12
+ * the whole of a validated derivation or it is not used.
13
+ *
14
+ * Every Zen provider the CLI builds reads `activeZenCatalogue` at each lookup
15
+ * (`ZenConfig.catalogue` as a function), so a catalogue that lands mid-session
16
+ * reaches providers that were built before it.
17
+ */
18
+ import { mkdir, open, rename, rm } from 'node:fs/promises';
19
+ import { dirname, join } from 'node:path';
20
+ import { fetchZenCatalogue, findZenCatalogueModel, isUnroutedZenModel, parseZenCatalogue, } from '@namzu/zen/catalogue';
21
+ /** Where the last-good catalogue lives, relative to the application home. */
22
+ export const ZEN_CATALOGUE_CACHE_PATH = join('cli', 'zen-catalogue.json');
23
+ /** The whole refresh — five reads and the derivation — gets this long, then stops. */
24
+ export const ZEN_CATALOGUE_REFRESH_BUDGET_MS = 30_000;
25
+ /** A stored catalogue past this is refused unread. The live one serialises to ~40 KB. */
26
+ const MAX_CACHE_BYTES = 4 * 1024 * 1024;
27
+ let active;
28
+ let activeSource = 'bundled';
29
+ /** The runtime catalogue this session routes with, or undefined for the bundled snapshot. */
30
+ export function activeZenCatalogue() {
31
+ return active;
32
+ }
33
+ /** Where the active catalogue came from. */
34
+ export function activeZenCatalogueSource() {
35
+ return activeSource;
36
+ }
37
+ /** Exact lookup against the active catalogue, falling back to the bundled snapshot. */
38
+ export function findActiveZenModel(service, id) {
39
+ return findZenCatalogueModel(active, service, id);
40
+ }
41
+ /**
42
+ * Whether the CLI can offer `model` on `providerId` — false only for a Zen or
43
+ * Zen Go id the active catalogue lists as served with no known wire format.
44
+ *
45
+ * `ZenProvider.listModels` lists such an id so that an embedder, who can pass
46
+ * `protocol`, can see it. The CLI has no key or flag that names a protocol, so
47
+ * choosing one would fail on every turn with a remedy the operator cannot
48
+ * apply; the CLI's listings leave it out instead.
49
+ */
50
+ export function isOfferableModel(providerId, model) {
51
+ const service = providerId === 'zen' ? 'zen' : providerId === 'zen-go' ? 'go' : undefined;
52
+ return service === undefined || !isUnroutedZenModel(active, service, model);
53
+ }
54
+ /** Test seam: back to the bundled snapshot. */
55
+ export function __resetZenCatalogueForTests() {
56
+ active = undefined;
57
+ activeSource = 'bundled';
58
+ }
59
+ /**
60
+ * Start the launch's background refresh and return at once.
61
+ *
62
+ * Synchronous by contract: nothing here is awaited before the handle is
63
+ * returned, so the caller's startup path cannot wait on the network or the
64
+ * disk. The last-good copy is read first and adopted if no live catalogue has
65
+ * landed by then; the network result, when it lands, replaces it.
66
+ */
67
+ export function startZenCatalogueRefresh(options) {
68
+ const controller = new AbortController();
69
+ const budget = options.budgetMs ?? ZEN_CATALOGUE_REFRESH_BUDGET_MS;
70
+ const signal = AbortSignal.any([controller.signal, AbortSignal.timeout(budget)]);
71
+ const cachePath = join(options.home, ZEN_CATALOGUE_CACHE_PATH);
72
+ const source = options.log;
73
+ const log = () => (typeof source === 'function' ? source() : source);
74
+ let landed = false;
75
+ const run = async () => {
76
+ // Yield before touching anything, so even the synchronous prelude of a
77
+ // file read or a fetch happens after the caller has its handle back.
78
+ await Promise.resolve();
79
+ const cached = readLastGood(cachePath, log).then((catalogue) => {
80
+ if (catalogue && !landed && !controller.signal.aborted) {
81
+ active = catalogue;
82
+ activeSource = 'cache';
83
+ }
84
+ });
85
+ try {
86
+ signal.throwIfAborted();
87
+ const fetchCatalogue = options.fetchCatalogue ?? fetchZenCatalogue;
88
+ const { catalogue } = await fetchCatalogue({
89
+ ...(options.fetch ? { fetch: options.fetch } : {}),
90
+ signal,
91
+ timeoutMs: Math.min(budget, 15_000),
92
+ });
93
+ signal.throwIfAborted();
94
+ landed = true;
95
+ active = catalogue;
96
+ activeSource = 'live';
97
+ await writeLastGood(cachePath, catalogue).catch((error) => {
98
+ log().warn('Zen model catalogue refreshed but the last-good copy was not written', {
99
+ 'namzu.zen_catalogue.cache_path': cachePath,
100
+ 'namzu.zen_catalogue.reason': errorText(error),
101
+ });
102
+ });
103
+ log().debug('Zen model catalogue refreshed', {
104
+ 'namzu.zen_catalogue.zen_models': catalogue.zen.length,
105
+ 'namzu.zen_catalogue.go_models': catalogue.go.length,
106
+ });
107
+ return { kind: 'live', catalogue };
108
+ }
109
+ catch (error) {
110
+ await cached;
111
+ if (controller.signal.aborted)
112
+ return { kind: 'cancelled' };
113
+ const using = activeSource === 'cache' ? 'cache' : 'bundled';
114
+ const reason = signal.aborted
115
+ ? `the refresh did not finish within ${budget}ms`
116
+ : errorText(error);
117
+ log().warn('Zen model catalogue refresh failed; keeping the catalogue already in use', {
118
+ 'namzu.zen_catalogue.using': using,
119
+ 'namzu.zen_catalogue.reason': reason,
120
+ });
121
+ return { kind: 'failed', using, reason };
122
+ }
123
+ };
124
+ const done = run().catch((error) => ({
125
+ kind: 'failed',
126
+ using: activeSource === 'cache' ? 'cache' : 'bundled',
127
+ reason: errorText(error),
128
+ }));
129
+ return {
130
+ done,
131
+ cancel: () => controller.abort(new Error('The launch ended before the Zen catalogue refresh.')),
132
+ };
133
+ }
134
+ /** The last-good copy, or undefined — one log line when one exists and is refused. */
135
+ async function readLastGood(path, log) {
136
+ let text;
137
+ try {
138
+ const handle = await open(path, 'r');
139
+ try {
140
+ const { size } = await handle.stat();
141
+ if (size > MAX_CACHE_BYTES)
142
+ throw new Error(`it is ${size} bytes, past ${MAX_CACHE_BYTES}`);
143
+ text = await handle.readFile('utf8');
144
+ }
145
+ finally {
146
+ await handle.close();
147
+ }
148
+ }
149
+ catch (error) {
150
+ if (error?.code === 'ENOENT')
151
+ return undefined;
152
+ log().warn('Zen model catalogue last-good copy could not be read; ignoring it', {
153
+ 'namzu.zen_catalogue.cache_path': path,
154
+ 'namzu.zen_catalogue.reason': errorText(error),
155
+ });
156
+ return undefined;
157
+ }
158
+ try {
159
+ return parseZenCatalogue(JSON.parse(text));
160
+ }
161
+ catch (error) {
162
+ log().warn('Zen model catalogue last-good copy is not a valid catalogue; ignoring it', {
163
+ 'namzu.zen_catalogue.cache_path': path,
164
+ 'namzu.zen_catalogue.reason': errorText(error),
165
+ });
166
+ return undefined;
167
+ }
168
+ }
169
+ /**
170
+ * Write the last-good copy atomically: a sibling temp file, then a rename, so
171
+ * a reader — this launch's next start, or a concurrent one — sees the old copy
172
+ * or the new one and never a torn write.
173
+ */
174
+ export async function writeLastGood(path, catalogue) {
175
+ await mkdir(dirname(path), { recursive: true });
176
+ const temp = `${path}.tmp-${process.pid}-${Date.now()}`;
177
+ try {
178
+ const handle = await open(temp, 'wx', 0o600);
179
+ try {
180
+ await handle.writeFile(`${JSON.stringify(catalogue)}\n`, 'utf8');
181
+ await handle.sync();
182
+ }
183
+ finally {
184
+ await handle.close();
185
+ }
186
+ await rename(temp, path);
187
+ }
188
+ catch (error) {
189
+ await rm(temp, { force: true }).catch(() => { });
190
+ throw error;
191
+ }
192
+ }
193
+ function errorText(error) {
194
+ return (error instanceof Error ? error.message : String(error)).slice(0, 500);
195
+ }
196
+ //# sourceMappingURL=zen-catalogue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zen-catalogue.js","sourceRoot":"","sources":["../../../src/integrations/providers/zen-catalogue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGzC,OAAO,EAGN,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,sBAAsB,CAAA;AAG7B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAA;AAEzE,sFAAsF;AACtF,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAAA;AAErD,yFAAyF;AACzF,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAKvC,IAAI,MAAgC,CAAA;AACpC,IAAI,YAAY,GAAuB,SAAS,CAAA;AAEhD,6FAA6F;AAC7F,MAAM,UAAU,kBAAkB;IACjC,OAAO,MAAM,CAAA;AACd,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,wBAAwB;IACvC,OAAO,YAAY,CAAA;AACpB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,kBAAkB,CAAC,OAAmB,EAAE,EAAU;IACjE,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;AAClD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAE,KAAa;IACjE,MAAM,OAAO,GACZ,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1E,OAAO,OAAO,KAAK,SAAS,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;AAC5E,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,2BAA2B;IAC1C,MAAM,GAAG,SAAS,CAAA;IAClB,YAAY,GAAG,SAAS,CAAA;AACzB,CAAC;AAuCD;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACvC,OAAwC;IAExC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,IAAI,+BAA+B,CAAA;IAClE,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAChF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAA;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAA;IAC1B,MAAM,GAAG,GAAG,GAAW,EAAE,CAAC,CAAC,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAC5E,IAAI,MAAM,GAAG,KAAK,CAAA;IAElB,MAAM,GAAG,GAAG,KAAK,IAAyC,EAAE;QAC3D,uEAAuE;QACvE,qEAAqE;QACrE,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;QACvB,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YAC9D,IAAI,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACxD,MAAM,GAAG,SAAS,CAAA;gBAClB,YAAY,GAAG,OAAO,CAAA;YACvB,CAAC;QACF,CAAC,CAAC,CAAA;QACF,IAAI,CAAC;YACJ,MAAM,CAAC,cAAc,EAAE,CAAA;YACvB,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,iBAAiB,CAAA;YAClE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,cAAc,CAAC;gBAC1C,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,MAAM;gBACN,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;aACnC,CAAC,CAAA;YACF,MAAM,CAAC,cAAc,EAAE,CAAA;YACvB,MAAM,GAAG,IAAI,CAAA;YACb,MAAM,GAAG,SAAS,CAAA;YAClB,YAAY,GAAG,MAAM,CAAA;YACrB,MAAM,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBAClE,GAAG,EAAE,CAAC,IAAI,CAAC,sEAAsE,EAAE;oBAClF,gCAAgC,EAAE,SAAS;oBAC3C,4BAA4B,EAAE,SAAS,CAAC,KAAK,CAAC;iBAC9C,CAAC,CAAA;YACH,CAAC,CAAC,CAAA;YACF,GAAG,EAAE,CAAC,KAAK,CAAC,+BAA+B,EAAE;gBAC5C,gCAAgC,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM;gBACtD,+BAA+B,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM;aACpD,CAAC,CAAA;YACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,MAAM,CAAA;YACZ,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;YAC3D,MAAM,KAAK,GAAG,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;YAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO;gBAC5B,CAAC,CAAC,qCAAqC,MAAM,IAAI;gBACjD,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACnB,GAAG,EAAE,CAAC,IAAI,CAAC,0EAA0E,EAAE;gBACtF,2BAA2B,EAAE,KAAK;gBAClC,4BAA4B,EAAE,MAAM;aACpC,CAAC,CAAA;YACF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;QACzC,CAAC;IACF,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CACvB,CAAC,KAAc,EAA8B,EAAE,CAAC,CAAC;QAChD,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACrD,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC;KACxB,CAAC,CACF,CAAA;IACD,OAAO;QACN,IAAI;QACJ,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;KAC/F,CAAA;AACF,CAAC;AAED,sFAAsF;AACtF,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,GAAiB;IAC1D,IAAI,IAAY,CAAA;IAChB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACpC,IAAI,CAAC;YACJ,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YACpC,IAAI,IAAI,GAAG,eAAe;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,gBAAgB,eAAe,EAAE,CAAC,CAAA;YAC3F,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrC,CAAC;gBAAS,CAAC;YACV,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAA2C,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAA;QACrF,GAAG,EAAE,CAAC,IAAI,CAAC,mEAAmE,EAAE;YAC/E,gCAAgC,EAAE,IAAI;YACtC,4BAA4B,EAAE,SAAS,CAAC,KAAK,CAAC;SAC9C,CAAC,CAAA;QACF,OAAO,SAAS,CAAA;IACjB,CAAC;IACD,IAAI,CAAC;QACJ,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,GAAG,EAAE,CAAC,IAAI,CAAC,0EAA0E,EAAE;YACtF,gCAAgC,EAAE,IAAI;YACtC,4BAA4B,EAAE,SAAS,CAAC,KAAK,CAAC;SAC9C,CAAC,CAAA;QACF,OAAO,SAAS,CAAA;IACjB,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,SAAuB;IACxE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,IAAI,GAAG,GAAG,IAAI,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;IACvD,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;QAC5C,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAChE,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QACpB,CAAC;gBAAS,CAAC;YACV,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QACD,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC/C,MAAM,KAAK,CAAA;IACZ,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAChC,OAAO,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC9E,CAAC"}
@@ -1,6 +1,9 @@
1
1
  import { type ResidentConsumptionOptions, type ResidentConsumptionReport, type ResidentConsumptionResolver } from '@namzu/sdk';
2
2
  import type { CliResident } from './storage.js';
3
- /** Uses only scoped attempt/run records. No provider discovery or session writes. */
3
+ /**
4
+ * Uses only the attempt receipts and the step's own session log, read in
5
+ * bounded pieces. No provider discovery, no index, no session writes.
6
+ */
4
7
  export declare function residentConsumptionResolver(resident: CliResident): ResidentConsumptionResolver;
5
8
  export declare function residentInspectionText(report: ResidentConsumptionReport): string;
6
9
  export declare function inspectCliResident(resident: CliResident, throughRevision: number, options?: ResidentConsumptionOptions, signal?: AbortSignal): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"inspection.d.ts","sourceRoot":"","sources":["../../../src/integrations/resident/inspection.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,0BAA0B,EAE/B,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAGhC,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAmF/C,qFAAqF;AACrF,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,WAAW,GAAG,2BAA2B,CAuJ9F;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM,CA2ChF;AAED,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,WAAW,EACrB,eAAe,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,0BAA0B,EACpC,MAAM,CAAC,EAAE,WAAW;;;GASpB"}
1
+ {"version":3,"file":"inspection.d.ts","sourceRoot":"","sources":["../../../src/integrations/resident/inspection.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,0BAA0B,EAE/B,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAKhC,MAAM,YAAY,CAAA;AAMnB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAwF/C;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,WAAW,GAAG,2BAA2B,CA4J9F;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM,CA2ChF;AAED,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,WAAW,EACrB,eAAe,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,0BAA0B,EACpC,MAAM,CAAC,EAAE,WAAW;;;GASpB"}