@namzu/sdk 34.2.0 → 35.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 (637) hide show
  1. package/CHANGELOG.md +133 -0
  2. package/README.md +2 -6
  3. package/dist/agents/PipelineAgent.d.ts.map +1 -1
  4. package/dist/agents/PipelineAgent.js +118 -100
  5. package/dist/agents/PipelineAgent.js.map +1 -1
  6. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  7. package/dist/agents/ReactiveAgent.js +2 -0
  8. package/dist/agents/ReactiveAgent.js.map +1 -1
  9. package/dist/agents/RouterAgent.d.ts.map +1 -1
  10. package/dist/agents/RouterAgent.js +105 -61
  11. package/dist/agents/RouterAgent.js.map +1 -1
  12. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  13. package/dist/agents/SupervisorAgent.js +8 -4
  14. package/dist/agents/SupervisorAgent.js.map +1 -1
  15. package/dist/agents/budget.d.ts +6 -0
  16. package/dist/agents/budget.d.ts.map +1 -0
  17. package/dist/agents/budget.js +33 -0
  18. package/dist/agents/budget.js.map +1 -0
  19. package/dist/agents/explore.d.ts +20 -0
  20. package/dist/agents/explore.d.ts.map +1 -0
  21. package/dist/agents/explore.js +26 -0
  22. package/dist/agents/explore.js.map +1 -0
  23. package/dist/agents/file-definitions.d.ts +80 -0
  24. package/dist/agents/file-definitions.d.ts.map +1 -0
  25. package/dist/agents/file-definitions.js +179 -0
  26. package/dist/agents/file-definitions.js.map +1 -0
  27. package/dist/agents/index.d.ts +3 -0
  28. package/dist/agents/index.d.ts.map +1 -1
  29. package/dist/agents/index.js +2 -0
  30. package/dist/agents/index.js.map +1 -1
  31. package/dist/bridge/a2a/mapper.d.ts.map +1 -1
  32. package/dist/bridge/a2a/mapper.js +6 -0
  33. package/dist/bridge/a2a/mapper.js.map +1 -1
  34. package/dist/bridge/sse/mapper.d.ts.map +1 -1
  35. package/dist/bridge/sse/mapper.js +22 -0
  36. package/dist/bridge/sse/mapper.js.map +1 -1
  37. package/dist/bus/lock.d.ts.map +1 -1
  38. package/dist/bus/lock.js +1 -10
  39. package/dist/bus/lock.js.map +1 -1
  40. package/dist/compaction/consolidation.d.ts +31 -0
  41. package/dist/compaction/consolidation.d.ts.map +1 -0
  42. package/dist/compaction/consolidation.js +63 -0
  43. package/dist/compaction/consolidation.js.map +1 -0
  44. package/dist/compaction/factory.d.ts.map +1 -1
  45. package/dist/compaction/factory.js +3 -0
  46. package/dist/compaction/factory.js.map +1 -1
  47. package/dist/compaction/index.d.ts +6 -1
  48. package/dist/compaction/index.d.ts.map +1 -1
  49. package/dist/compaction/index.js +6 -0
  50. package/dist/compaction/index.js.map +1 -1
  51. package/dist/compaction/manager.d.ts +7 -0
  52. package/dist/compaction/manager.d.ts.map +1 -1
  53. package/dist/compaction/manager.js +31 -0
  54. package/dist/compaction/manager.js.map +1 -1
  55. package/dist/compaction/plan.d.ts +23 -0
  56. package/dist/compaction/plan.d.ts.map +1 -1
  57. package/dist/compaction/plan.js +41 -24
  58. package/dist/compaction/plan.js.map +1 -1
  59. package/dist/compaction/salience/bm25.d.ts +26 -0
  60. package/dist/compaction/salience/bm25.d.ts.map +1 -0
  61. package/dist/compaction/salience/bm25.js +56 -0
  62. package/dist/compaction/salience/bm25.js.map +1 -0
  63. package/dist/compaction/salience/goal.d.ts +21 -0
  64. package/dist/compaction/salience/goal.d.ts.map +1 -0
  65. package/dist/compaction/salience/goal.js +32 -0
  66. package/dist/compaction/salience/goal.js.map +1 -0
  67. package/dist/compaction/salience/index.d.ts +4 -0
  68. package/dist/compaction/salience/index.d.ts.map +1 -0
  69. package/dist/compaction/salience/index.js +4 -0
  70. package/dist/compaction/salience/index.js.map +1 -0
  71. package/dist/compaction/salience/minhash.d.ts +17 -0
  72. package/dist/compaction/salience/minhash.d.ts.map +1 -0
  73. package/dist/compaction/salience/minhash.js +54 -0
  74. package/dist/compaction/salience/minhash.js.map +1 -0
  75. package/dist/compaction/salience/score.d.ts +64 -0
  76. package/dist/compaction/salience/score.d.ts.map +1 -0
  77. package/dist/compaction/salience/score.js +256 -0
  78. package/dist/compaction/salience/score.js.map +1 -0
  79. package/dist/compaction/salience/tokenize.d.ts +20 -0
  80. package/dist/compaction/salience/tokenize.d.ts.map +1 -0
  81. package/dist/compaction/salience/tokenize.js +92 -0
  82. package/dist/compaction/salience/tokenize.js.map +1 -0
  83. package/dist/compaction/salience/working-set.d.ts +59 -0
  84. package/dist/compaction/salience/working-set.d.ts.map +1 -0
  85. package/dist/compaction/salience/working-set.js +137 -0
  86. package/dist/compaction/salience/working-set.js.map +1 -0
  87. package/dist/compaction/serializer.d.ts +2 -0
  88. package/dist/compaction/serializer.d.ts.map +1 -1
  89. package/dist/compaction/serializer.js +15 -0
  90. package/dist/compaction/serializer.js.map +1 -1
  91. package/dist/compaction/token-estimate.d.ts +13 -0
  92. package/dist/compaction/token-estimate.d.ts.map +1 -0
  93. package/dist/compaction/token-estimate.js +58 -0
  94. package/dist/compaction/token-estimate.js.map +1 -0
  95. package/dist/compaction/tool-result-editing.d.ts +10 -2
  96. package/dist/compaction/tool-result-editing.d.ts.map +1 -1
  97. package/dist/compaction/tool-result-editing.js +22 -24
  98. package/dist/compaction/tool-result-editing.js.map +1 -1
  99. package/dist/compaction/types.d.ts +22 -1
  100. package/dist/compaction/types.d.ts.map +1 -1
  101. package/dist/compaction/wire.d.ts +3 -1
  102. package/dist/compaction/wire.d.ts.map +1 -1
  103. package/dist/compaction/wire.js +2 -0
  104. package/dist/compaction/wire.js.map +1 -1
  105. package/dist/config/runtime.d.ts +58 -28
  106. package/dist/config/runtime.d.ts.map +1 -1
  107. package/dist/config/runtime.js +13 -1
  108. package/dist/config/runtime.js.map +1 -1
  109. package/dist/connector/builtins/http.d.ts.map +1 -1
  110. package/dist/connector/builtins/http.js +2 -8
  111. package/dist/connector/builtins/http.js.map +1 -1
  112. package/dist/connector/builtins/webhook.js +2 -2
  113. package/dist/connector/builtins/webhook.js.map +1 -1
  114. package/dist/connector/mcp/adapter.d.ts +2 -0
  115. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  116. package/dist/connector/mcp/adapter.js +30 -0
  117. package/dist/connector/mcp/adapter.js.map +1 -1
  118. package/dist/connector/tools/adapter.js +2 -2
  119. package/dist/connector/tools/adapter.js.map +1 -1
  120. package/dist/connector/tools/definitions.js +2 -2
  121. package/dist/connector/tools/definitions.js.map +1 -1
  122. package/dist/constants/compaction/index.d.ts +1 -0
  123. package/dist/constants/compaction/index.d.ts.map +1 -1
  124. package/dist/constants/compaction/index.js +1 -0
  125. package/dist/constants/compaction/index.js.map +1 -1
  126. package/dist/constants/telemetry/index.d.ts +0 -1
  127. package/dist/constants/telemetry/index.d.ts.map +1 -1
  128. package/dist/constants/telemetry/index.js +0 -1
  129. package/dist/constants/telemetry/index.js.map +1 -1
  130. package/dist/contracts/a2a.d.ts +5 -5
  131. package/dist/contracts/api.d.ts +4 -2
  132. package/dist/contracts/api.d.ts.map +1 -1
  133. package/dist/contracts/schemas.d.ts +1 -15
  134. package/dist/contracts/schemas.d.ts.map +1 -1
  135. package/dist/contracts/schemas.js +5 -20
  136. package/dist/contracts/schemas.js.map +1 -1
  137. package/dist/invariants/index.d.ts +1 -1
  138. package/dist/manager/agent/lifecycle.d.ts +2 -18
  139. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  140. package/dist/manager/agent/lifecycle.js +373 -340
  141. package/dist/manager/agent/lifecycle.js.map +1 -1
  142. package/dist/manager/run/persistence.d.ts +3 -0
  143. package/dist/manager/run/persistence.d.ts.map +1 -1
  144. package/dist/manager/run/persistence.js +35 -5
  145. package/dist/manager/run/persistence.js.map +1 -1
  146. package/dist/plugin/index.d.ts +2 -0
  147. package/dist/plugin/index.d.ts.map +1 -1
  148. package/dist/plugin/index.js +1 -0
  149. package/dist/plugin/index.js.map +1 -1
  150. package/dist/plugin/shell-hook.d.ts +128 -0
  151. package/dist/plugin/shell-hook.d.ts.map +1 -0
  152. package/dist/plugin/shell-hook.js +299 -0
  153. package/dist/plugin/shell-hook.js.map +1 -0
  154. package/dist/prompt/coding-agent-doctrine.d.ts +63 -0
  155. package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -0
  156. package/dist/prompt/coding-agent-doctrine.js +100 -0
  157. package/dist/prompt/coding-agent-doctrine.js.map +1 -0
  158. package/dist/prompt/index.d.ts +2 -0
  159. package/dist/prompt/index.d.ts.map +1 -1
  160. package/dist/prompt/index.js +1 -0
  161. package/dist/prompt/index.js.map +1 -1
  162. package/dist/provider/errors.d.ts +1 -1
  163. package/dist/provider/errors.js +1 -1
  164. package/dist/provider/fallback.d.ts +2 -0
  165. package/dist/provider/fallback.d.ts.map +1 -1
  166. package/dist/provider/fallback.js +3 -1
  167. package/dist/provider/fallback.js.map +1 -1
  168. package/dist/provider/retry.d.ts +2 -0
  169. package/dist/provider/retry.d.ts.map +1 -1
  170. package/dist/provider/retry.js +3 -1
  171. package/dist/provider/retry.js.map +1 -1
  172. package/dist/provider/token-budget.d.ts +13 -0
  173. package/dist/provider/token-budget.d.ts.map +1 -0
  174. package/dist/provider/token-budget.js +102 -0
  175. package/dist/provider/token-budget.js.map +1 -0
  176. package/dist/public-runtime.d.ts +12 -12
  177. package/dist/public-runtime.d.ts.map +1 -1
  178. package/dist/public-runtime.js +14 -9
  179. package/dist/public-runtime.js.map +1 -1
  180. package/dist/public-tools.d.ts +2 -0
  181. package/dist/public-tools.d.ts.map +1 -1
  182. package/dist/public-tools.js +2 -0
  183. package/dist/public-tools.js.map +1 -1
  184. package/dist/public-types.d.ts +12 -2
  185. package/dist/public-types.d.ts.map +1 -1
  186. package/dist/registry/command/kernel-commands.d.ts.map +1 -1
  187. package/dist/registry/command/kernel-commands.js +18 -6
  188. package/dist/registry/command/kernel-commands.js.map +1 -1
  189. package/dist/registry/tool/execute.d.ts.map +1 -1
  190. package/dist/registry/tool/execute.js +4 -1
  191. package/dist/registry/tool/execute.js.map +1 -1
  192. package/dist/run/LimitChecker.js +1 -1
  193. package/dist/run/LimitChecker.js.map +1 -1
  194. package/dist/run/drain.js +1 -1
  195. package/dist/run/reporter.d.ts.map +1 -1
  196. package/dist/run/reporter.js +15 -0
  197. package/dist/run/reporter.js.map +1 -1
  198. package/dist/run/token-budget.d.ts +108 -0
  199. package/dist/run/token-budget.d.ts.map +1 -0
  200. package/dist/run/token-budget.js +591 -0
  201. package/dist/run/token-budget.js.map +1 -0
  202. package/dist/runtime/jobs/registry.d.ts +29 -0
  203. package/dist/runtime/jobs/registry.d.ts.map +1 -1
  204. package/dist/runtime/jobs/registry.js +98 -18
  205. package/dist/runtime/jobs/registry.js.map +1 -1
  206. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  207. package/dist/runtime/query/checkpoint.js +10 -3
  208. package/dist/runtime/query/checkpoint.js.map +1 -1
  209. package/dist/runtime/query/context.d.ts +2 -26
  210. package/dist/runtime/query/context.d.ts.map +1 -1
  211. package/dist/runtime/query/context.js +1 -29
  212. package/dist/runtime/query/context.js.map +1 -1
  213. package/dist/runtime/query/executor.d.ts +12 -9
  214. package/dist/runtime/query/executor.d.ts.map +1 -1
  215. package/dist/runtime/query/executor.js +95 -46
  216. package/dist/runtime/query/executor.js.map +1 -1
  217. package/dist/runtime/query/guard.d.ts.map +1 -1
  218. package/dist/runtime/query/guard.js +8 -0
  219. package/dist/runtime/query/guard.js.map +1 -1
  220. package/dist/runtime/query/index.d.ts +35 -4
  221. package/dist/runtime/query/index.d.ts.map +1 -1
  222. package/dist/runtime/query/index.js +152 -52
  223. package/dist/runtime/query/index.js.map +1 -1
  224. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  225. package/dist/runtime/query/iteration/index.js +16 -5
  226. package/dist/runtime/query/iteration/index.js.map +1 -1
  227. package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
  228. package/dist/runtime/query/iteration/phases/compaction.js +98 -30
  229. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  230. package/dist/runtime/query/iteration/phases/context.d.ts +2 -0
  231. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  232. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  233. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  234. package/dist/runtime/query/iteration/phases/tool-review.js +29 -7
  235. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  236. package/dist/runtime/query/iteration/phases/working-memory.d.ts.map +1 -1
  237. package/dist/runtime/query/iteration/phases/working-memory.js +25 -15
  238. package/dist/runtime/query/iteration/phases/working-memory.js.map +1 -1
  239. package/dist/runtime/query/plugin-hooks.d.ts +1 -1
  240. package/dist/runtime/query/plugin-hooks.d.ts.map +1 -1
  241. package/dist/runtime/query/plugin-hooks.js +20 -1
  242. package/dist/runtime/query/plugin-hooks.js.map +1 -1
  243. package/dist/runtime/query/repeat-call.d.ts +20 -2
  244. package/dist/runtime/query/repeat-call.d.ts.map +1 -1
  245. package/dist/runtime/query/repeat-call.js +35 -7
  246. package/dist/runtime/query/repeat-call.js.map +1 -1
  247. package/dist/runtime/query/result.d.ts.map +1 -1
  248. package/dist/runtime/query/result.js +9 -0
  249. package/dist/runtime/query/result.js.map +1 -1
  250. package/dist/runtime/query/review-policy.d.ts +142 -0
  251. package/dist/runtime/query/review-policy.d.ts.map +1 -0
  252. package/dist/runtime/query/review-policy.js +144 -0
  253. package/dist/runtime/query/review-policy.js.map +1 -0
  254. package/dist/runtime/query/run-state.d.ts.map +1 -1
  255. package/dist/runtime/query/run-state.js +4 -0
  256. package/dist/runtime/query/run-state.js.map +1 -1
  257. package/dist/runtime/query/steering.d.ts +4 -0
  258. package/dist/runtime/query/steering.d.ts.map +1 -1
  259. package/dist/runtime/query/steering.js +29 -0
  260. package/dist/runtime/query/steering.js.map +1 -1
  261. package/dist/runtime/query/token-budget.d.ts +7 -0
  262. package/dist/runtime/query/token-budget.d.ts.map +1 -0
  263. package/dist/runtime/query/token-budget.js +101 -0
  264. package/dist/runtime/query/token-budget.js.map +1 -0
  265. package/dist/runtime/query/tool-output-budget.d.ts +2 -0
  266. package/dist/runtime/query/tool-output-budget.d.ts.map +1 -1
  267. package/dist/runtime/query/tool-output-budget.js +29 -11
  268. package/dist/runtime/query/tool-output-budget.js.map +1 -1
  269. package/dist/runtime/query/tool-pause.d.ts.map +1 -1
  270. package/dist/runtime/query/tool-pause.js +4 -2
  271. package/dist/runtime/query/tool-pause.js.map +1 -1
  272. package/dist/runtime/query/tooling.d.ts +4 -0
  273. package/dist/runtime/query/tooling.d.ts.map +1 -1
  274. package/dist/runtime/query/tooling.js +4 -0
  275. package/dist/runtime/query/tooling.js.map +1 -1
  276. package/dist/sandbox/provider/local.d.ts +3 -1
  277. package/dist/sandbox/provider/local.d.ts.map +1 -1
  278. package/dist/sandbox/provider/local.js +112 -12
  279. package/dist/sandbox/provider/local.js.map +1 -1
  280. package/dist/scheduler/delegating.d.ts +1 -0
  281. package/dist/scheduler/delegating.d.ts.map +1 -1
  282. package/dist/scheduler/delegating.js +29 -12
  283. package/dist/scheduler/delegating.js.map +1 -1
  284. package/dist/scheduler/local.d.ts +1 -0
  285. package/dist/scheduler/local.d.ts.map +1 -1
  286. package/dist/scheduler/local.js +4 -7
  287. package/dist/scheduler/local.js.map +1 -1
  288. package/dist/session/index.d.ts +0 -1
  289. package/dist/session/index.d.ts.map +1 -1
  290. package/dist/session/index.js +0 -1
  291. package/dist/session/index.js.map +1 -1
  292. package/dist/session/workspace/path-builder.d.ts.map +1 -1
  293. package/dist/session/workspace/path-builder.js +5 -4
  294. package/dist/session/workspace/path-builder.js.map +1 -1
  295. package/dist/store/feedback/disk.d.ts.map +1 -1
  296. package/dist/store/feedback/disk.js +4 -6
  297. package/dist/store/feedback/disk.js.map +1 -1
  298. package/dist/store/index.d.ts +2 -0
  299. package/dist/store/index.d.ts.map +1 -1
  300. package/dist/store/index.js +1 -0
  301. package/dist/store/index.js.map +1 -1
  302. package/dist/store/memory/disk.d.ts.map +1 -1
  303. package/dist/store/memory/disk.js +3 -12
  304. package/dist/store/memory/disk.js.map +1 -1
  305. package/dist/store/run/checkpoint-disk.d.ts +3 -3
  306. package/dist/store/run/checkpoint-disk.d.ts.map +1 -1
  307. package/dist/store/run/checkpoint-disk.js +14 -26
  308. package/dist/store/run/checkpoint-disk.js.map +1 -1
  309. package/dist/store/run/claim-disk.js +1 -1
  310. package/dist/store/run/conformance.d.ts +1 -1
  311. package/dist/store/run/conformance.d.ts.map +1 -1
  312. package/dist/store/run/conformance.js +41 -33
  313. package/dist/store/run/conformance.js.map +1 -1
  314. package/dist/store/run/disk.d.ts.map +1 -1
  315. package/dist/store/run/disk.js +20 -4
  316. package/dist/store/run/disk.js.map +1 -1
  317. package/dist/store/run/token-budget-disk.d.ts +37 -0
  318. package/dist/store/run/token-budget-disk.d.ts.map +1 -0
  319. package/dist/store/run/token-budget-disk.js +208 -0
  320. package/dist/store/run/token-budget-disk.js.map +1 -0
  321. package/dist/store/session/disk.d.ts +4 -13
  322. package/dist/store/session/disk.d.ts.map +1 -1
  323. package/dist/store/session/disk.js +34 -31
  324. package/dist/store/session/disk.js.map +1 -1
  325. package/dist/store/session/memory.d.ts +2 -0
  326. package/dist/store/session/memory.d.ts.map +1 -1
  327. package/dist/store/session/memory.js +41 -2
  328. package/dist/store/session/memory.js.map +1 -1
  329. package/dist/store/task/disk.d.ts.map +1 -1
  330. package/dist/store/task/disk.js +7 -8
  331. package/dist/store/task/disk.js.map +1 -1
  332. package/dist/store/topic/memory.d.ts +2 -0
  333. package/dist/store/topic/memory.d.ts.map +1 -1
  334. package/dist/store/topic/memory.js +13 -1
  335. package/dist/store/topic/memory.js.map +1 -1
  336. package/dist/test-support/ids.d.ts +4 -19
  337. package/dist/test-support/ids.d.ts.map +1 -1
  338. package/dist/test-support/ids.js +51 -59
  339. package/dist/test-support/ids.js.map +1 -1
  340. package/dist/tools/advisory/index.d.ts.map +1 -1
  341. package/dist/tools/advisory/index.js +3 -1
  342. package/dist/tools/advisory/index.js.map +1 -1
  343. package/dist/tools/builtins/bash.d.ts +2 -0
  344. package/dist/tools/builtins/bash.d.ts.map +1 -1
  345. package/dist/tools/builtins/bash.js +9 -11
  346. package/dist/tools/builtins/bash.js.map +1 -1
  347. package/dist/tools/builtins/computer-use.d.ts +2 -2
  348. package/dist/tools/builtins/computer-use.d.ts.map +1 -1
  349. package/dist/tools/builtins/computer-use.js +4 -2
  350. package/dist/tools/builtins/computer-use.js.map +1 -1
  351. package/dist/tools/builtins/edit.js +2 -2
  352. package/dist/tools/builtins/edit.js.map +1 -1
  353. package/dist/tools/builtins/glob.js +3 -3
  354. package/dist/tools/builtins/glob.js.map +1 -1
  355. package/dist/tools/builtins/grep.js +2 -2
  356. package/dist/tools/builtins/grep.js.map +1 -1
  357. package/dist/tools/builtins/ls.js +2 -2
  358. package/dist/tools/builtins/ls.js.map +1 -1
  359. package/dist/tools/builtins/lsp.js +2 -2
  360. package/dist/tools/builtins/lsp.js.map +1 -1
  361. package/dist/tools/builtins/read-file.js +2 -2
  362. package/dist/tools/builtins/read-file.js.map +1 -1
  363. package/dist/tools/builtins/write-file.js +2 -2
  364. package/dist/tools/builtins/write-file.js.map +1 -1
  365. package/dist/tools/coordinator/ask-user-question.d.ts +33 -0
  366. package/dist/tools/coordinator/ask-user-question.d.ts.map +1 -0
  367. package/dist/tools/coordinator/ask-user-question.js +237 -0
  368. package/dist/tools/coordinator/ask-user-question.js.map +1 -0
  369. package/dist/tools/coordinator/index.d.ts +1 -2
  370. package/dist/tools/coordinator/index.d.ts.map +1 -1
  371. package/dist/tools/coordinator/index.js +4 -220
  372. package/dist/tools/coordinator/index.js.map +1 -1
  373. package/dist/tools/memory/read.d.ts.map +1 -1
  374. package/dist/tools/memory/read.js +2 -4
  375. package/dist/tools/memory/read.js.map +1 -1
  376. package/dist/tools/paths.d.ts +13 -0
  377. package/dist/tools/paths.d.ts.map +1 -1
  378. package/dist/tools/paths.js +53 -0
  379. package/dist/tools/paths.js.map +1 -1
  380. package/dist/tools/roster.d.ts +27 -0
  381. package/dist/tools/roster.d.ts.map +1 -0
  382. package/dist/tools/roster.js +42 -0
  383. package/dist/tools/roster.js.map +1 -0
  384. package/dist/types/agent/base.d.ts +5 -0
  385. package/dist/types/agent/base.d.ts.map +1 -1
  386. package/dist/types/agent/pipeline.d.ts +3 -0
  387. package/dist/types/agent/pipeline.d.ts.map +1 -1
  388. package/dist/types/agent/router.d.ts +2 -3
  389. package/dist/types/agent/router.d.ts.map +1 -1
  390. package/dist/types/agent/scheduler.d.ts +3 -0
  391. package/dist/types/agent/scheduler.d.ts.map +1 -1
  392. package/dist/types/agent/task.d.ts +5 -16
  393. package/dist/types/agent/task.d.ts.map +1 -1
  394. package/dist/types/agent/task.js.map +1 -1
  395. package/dist/types/common/index.d.ts.map +1 -1
  396. package/dist/types/common/index.js +3 -0
  397. package/dist/types/common/index.js.map +1 -1
  398. package/dist/types/computer-use/index.d.ts +8 -0
  399. package/dist/types/computer-use/index.d.ts.map +1 -1
  400. package/dist/types/computer-use/index.js.map +1 -1
  401. package/dist/types/hitl/index.d.ts +5 -0
  402. package/dist/types/hitl/index.d.ts.map +1 -1
  403. package/dist/types/hitl/index.js.map +1 -1
  404. package/dist/types/ids/brand.d.ts +5 -47
  405. package/dist/types/ids/brand.d.ts.map +1 -1
  406. package/dist/types/ids/brand.js +2 -39
  407. package/dist/types/ids/brand.js.map +1 -1
  408. package/dist/types/ids/index.d.ts +59 -69
  409. package/dist/types/ids/index.d.ts.map +1 -1
  410. package/dist/types/ids/index.js +12 -10
  411. package/dist/types/ids/index.js.map +1 -1
  412. package/dist/types/permission/index.d.ts +9 -0
  413. package/dist/types/permission/index.d.ts.map +1 -1
  414. package/dist/types/permission/index.js +9 -1
  415. package/dist/types/permission/index.js.map +1 -1
  416. package/dist/types/plugin/index.d.ts +45 -4
  417. package/dist/types/plugin/index.d.ts.map +1 -1
  418. package/dist/types/plugin/index.js +7 -0
  419. package/dist/types/plugin/index.js.map +1 -1
  420. package/dist/types/run/config.d.ts +3 -0
  421. package/dist/types/run/config.d.ts.map +1 -1
  422. package/dist/types/run/emergency.d.ts +5 -0
  423. package/dist/types/run/emergency.d.ts.map +1 -1
  424. package/dist/types/run/emergency.js.map +1 -1
  425. package/dist/types/run/entity.d.ts +6 -2
  426. package/dist/types/run/entity.d.ts.map +1 -1
  427. package/dist/types/run/events.d.ts +35 -0
  428. package/dist/types/run/events.d.ts.map +1 -1
  429. package/dist/types/run/events.js.map +1 -1
  430. package/dist/types/run/index.d.ts +1 -0
  431. package/dist/types/run/index.d.ts.map +1 -1
  432. package/dist/types/run/index.js +1 -0
  433. package/dist/types/run/index.js.map +1 -1
  434. package/dist/types/run/state.d.ts +16 -15
  435. package/dist/types/run/state.d.ts.map +1 -1
  436. package/dist/types/run/state.js +41 -22
  437. package/dist/types/run/state.js.map +1 -1
  438. package/dist/types/run/stop-reason.d.ts +3 -14
  439. package/dist/types/run/stop-reason.d.ts.map +1 -1
  440. package/dist/types/run/token-budget-store.d.ts +29 -0
  441. package/dist/types/run/token-budget-store.d.ts.map +1 -0
  442. package/dist/types/run/token-budget-store.js +25 -0
  443. package/dist/types/run/token-budget-store.js.map +1 -0
  444. package/dist/types/sandbox/index.d.ts +27 -2
  445. package/dist/types/sandbox/index.d.ts.map +1 -1
  446. package/dist/types/sandbox/index.js.map +1 -1
  447. package/dist/types/session/store.d.ts +8 -0
  448. package/dist/types/session/store.d.ts.map +1 -1
  449. package/dist/types/tool/index.d.ts +15 -0
  450. package/dist/types/tool/index.d.ts.map +1 -1
  451. package/dist/types/tool/index.js.map +1 -1
  452. package/dist/utils/frontmatter.d.ts +1 -1
  453. package/dist/utils/frontmatter.js +1 -1
  454. package/dist/utils/id-format.d.ts +3 -0
  455. package/dist/utils/id-format.d.ts.map +1 -0
  456. package/dist/utils/id-format.js +9 -0
  457. package/dist/utils/id-format.js.map +1 -0
  458. package/dist/utils/id.d.ts +65 -32
  459. package/dist/utils/id.d.ts.map +1 -1
  460. package/dist/utils/id.js +168 -148
  461. package/dist/utils/id.js.map +1 -1
  462. package/dist/utils/log/exception.js +1 -1
  463. package/dist/utils/log/exception.js.map +1 -1
  464. package/dist/utils/log/index.d.ts.map +1 -1
  465. package/dist/utils/log/index.js +1 -2
  466. package/dist/utils/log/index.js.map +1 -1
  467. package/dist/utils/log/templates.d.ts.map +1 -1
  468. package/dist/utils/log/templates.js +0 -1
  469. package/dist/utils/log/templates.js.map +1 -1
  470. package/package.json +1 -1
  471. package/src/agents/AGENTS.md +1 -1
  472. package/src/agents/PipelineAgent.ts +129 -109
  473. package/src/agents/ReactiveAgent.ts +2 -0
  474. package/src/agents/RouterAgent.ts +120 -73
  475. package/src/agents/SupervisorAgent.ts +12 -4
  476. package/src/agents/budget.ts +42 -0
  477. package/src/agents/explore.ts +29 -0
  478. package/src/agents/file-definitions.ts +237 -0
  479. package/src/agents/index.ts +15 -0
  480. package/src/bridge/a2a/mapper.ts +6 -0
  481. package/src/bridge/sse/mapper.ts +22 -0
  482. package/src/bus/lock.ts +1 -10
  483. package/src/compaction/consolidation.ts +79 -0
  484. package/src/compaction/factory.ts +3 -0
  485. package/src/compaction/index.ts +34 -4
  486. package/src/compaction/manager.ts +39 -1
  487. package/src/compaction/plan.ts +52 -21
  488. package/src/compaction/salience/bm25.ts +72 -0
  489. package/src/compaction/salience/goal.ts +44 -0
  490. package/src/compaction/salience/index.ts +19 -0
  491. package/src/compaction/salience/minhash.ts +53 -0
  492. package/src/compaction/salience/score.ts +305 -0
  493. package/src/compaction/salience/tokenize.ts +89 -0
  494. package/src/compaction/salience/working-set.ts +187 -0
  495. package/src/compaction/serializer.ts +16 -0
  496. package/src/compaction/token-estimate.ts +57 -0
  497. package/src/compaction/tool-result-editing.ts +28 -26
  498. package/src/compaction/types.ts +24 -1
  499. package/src/compaction/wire.ts +5 -1
  500. package/src/config/runtime.ts +13 -1
  501. package/src/connector/builtins/http.ts +2 -8
  502. package/src/connector/builtins/webhook.ts +2 -2
  503. package/src/connector/mcp/adapter.ts +32 -0
  504. package/src/connector/tools/adapter.ts +2 -2
  505. package/src/connector/tools/definitions.ts +2 -2
  506. package/src/constants/compaction/index.ts +1 -0
  507. package/src/constants/telemetry/index.ts +0 -1
  508. package/src/contracts/api.ts +5 -1
  509. package/src/contracts/schemas.ts +6 -20
  510. package/src/invariants/index.ts +1 -1
  511. package/src/manager/agent/lifecycle.ts +380 -352
  512. package/src/manager/run/persistence.ts +35 -5
  513. package/src/plugin/index.ts +19 -0
  514. package/src/plugin/shell-hook.ts +403 -0
  515. package/src/prompt/coding-agent-doctrine.ts +118 -0
  516. package/src/prompt/index.ts +8 -0
  517. package/src/provider/errors.ts +1 -1
  518. package/src/provider/fallback.ts +4 -1
  519. package/src/provider/retry.ts +4 -1
  520. package/src/provider/token-budget.ts +114 -0
  521. package/src/public-runtime.ts +54 -27
  522. package/src/public-tools.ts +5 -0
  523. package/src/public-types.ts +65 -0
  524. package/src/registry/command/kernel-commands.ts +16 -6
  525. package/src/registry/tool/execute.ts +4 -1
  526. package/src/run/LimitChecker.ts +1 -1
  527. package/src/run/drain.ts +1 -1
  528. package/src/run/reporter.ts +15 -0
  529. package/src/run/token-budget.ts +692 -0
  530. package/src/runtime/jobs/registry.ts +123 -17
  531. package/src/runtime/query/checkpoint.ts +10 -3
  532. package/src/runtime/query/context.ts +3 -57
  533. package/src/runtime/query/executor.ts +128 -58
  534. package/src/runtime/query/guard.ts +8 -0
  535. package/src/runtime/query/index.ts +201 -62
  536. package/src/runtime/query/iteration/index.ts +24 -6
  537. package/src/runtime/query/iteration/phases/compaction.ts +130 -31
  538. package/src/runtime/query/iteration/phases/context.ts +2 -0
  539. package/src/runtime/query/iteration/phases/tool-review.ts +39 -7
  540. package/src/runtime/query/iteration/phases/working-memory.ts +23 -14
  541. package/src/runtime/query/plugin-hooks.ts +24 -2
  542. package/src/runtime/query/repeat-call.ts +42 -7
  543. package/src/runtime/query/result.ts +9 -0
  544. package/src/runtime/query/review-policy.ts +231 -0
  545. package/src/runtime/query/run-state.ts +4 -0
  546. package/src/runtime/query/steering.ts +32 -0
  547. package/src/runtime/query/token-budget.ts +127 -0
  548. package/src/runtime/query/tool-output-budget.ts +33 -10
  549. package/src/runtime/query/tool-pause.ts +4 -2
  550. package/src/runtime/query/tooling.ts +8 -0
  551. package/src/sandbox/provider/local.ts +123 -13
  552. package/src/scheduler/delegating.ts +35 -13
  553. package/src/scheduler/local.ts +5 -7
  554. package/src/session/index.ts +0 -1
  555. package/src/session/workspace/path-builder.ts +5 -4
  556. package/src/store/feedback/disk.ts +4 -6
  557. package/src/store/index.ts +2 -0
  558. package/src/store/memory/disk.ts +3 -11
  559. package/src/store/run/checkpoint-disk.ts +14 -27
  560. package/src/store/run/claim-disk.ts +1 -1
  561. package/src/store/run/conformance.ts +55 -39
  562. package/src/store/run/disk.ts +19 -4
  563. package/src/store/run/token-budget-disk.ts +247 -0
  564. package/src/store/session/disk.ts +36 -29
  565. package/src/store/session/memory.ts +38 -1
  566. package/src/store/task/disk.ts +7 -8
  567. package/src/store/topic/memory.ts +13 -1
  568. package/src/test-support/ids.ts +62 -59
  569. package/src/tools/advisory/index.ts +3 -1
  570. package/src/tools/builtins/bash.ts +11 -12
  571. package/src/tools/builtins/computer-use.ts +6 -2
  572. package/src/tools/builtins/edit.ts +2 -2
  573. package/src/tools/builtins/glob.ts +3 -3
  574. package/src/tools/builtins/grep.ts +2 -2
  575. package/src/tools/builtins/ls.ts +2 -2
  576. package/src/tools/builtins/lsp.ts +2 -2
  577. package/src/tools/builtins/read-file.ts +2 -2
  578. package/src/tools/builtins/write-file.ts +2 -2
  579. package/src/tools/coordinator/ask-user-question.ts +284 -0
  580. package/src/tools/coordinator/index.ts +5 -248
  581. package/src/tools/memory/read.ts +2 -4
  582. package/src/tools/paths.ts +64 -0
  583. package/src/tools/roster.ts +46 -0
  584. package/src/types/agent/base.ts +6 -0
  585. package/src/types/agent/pipeline.ts +3 -0
  586. package/src/types/agent/router.ts +2 -3
  587. package/src/types/agent/scheduler.ts +4 -0
  588. package/src/types/agent/task.ts +5 -18
  589. package/src/types/common/index.ts +3 -0
  590. package/src/types/computer-use/index.ts +8 -0
  591. package/src/types/hitl/index.ts +5 -0
  592. package/src/types/ids/brand.ts +5 -48
  593. package/src/types/ids/index.ts +66 -75
  594. package/src/types/permission/index.ts +11 -0
  595. package/src/types/plugin/index.ts +49 -1
  596. package/src/types/run/config.ts +3 -0
  597. package/src/types/run/emergency.ts +5 -0
  598. package/src/types/run/entity.ts +6 -2
  599. package/src/types/run/events.ts +37 -0
  600. package/src/types/run/index.ts +1 -0
  601. package/src/types/run/state.ts +58 -30
  602. package/src/types/run/stop-reason.ts +3 -14
  603. package/src/types/run/token-budget-store.ts +54 -0
  604. package/src/types/sandbox/index.ts +32 -0
  605. package/src/types/session/store.ts +8 -0
  606. package/src/types/tool/index.ts +15 -0
  607. package/src/utils/frontmatter.ts +1 -1
  608. package/src/utils/id-format.ts +9 -0
  609. package/src/utils/id.ts +222 -181
  610. package/src/utils/log/exception.ts +1 -1
  611. package/src/utils/log/index.ts +1 -2
  612. package/src/utils/log/templates.ts +0 -1
  613. package/dist/session/migration/errors.d.ts +0 -26
  614. package/dist/session/migration/errors.d.ts.map +0 -1
  615. package/dist/session/migration/errors.js +0 -22
  616. package/dist/session/migration/errors.js.map +0 -1
  617. package/dist/session/migration/filesystem.d.ts +0 -122
  618. package/dist/session/migration/filesystem.d.ts.map +0 -1
  619. package/dist/session/migration/filesystem.js +0 -379
  620. package/dist/session/migration/filesystem.js.map +0 -1
  621. package/dist/session/migration/id-prefix.d.ts +0 -113
  622. package/dist/session/migration/id-prefix.d.ts.map +0 -1
  623. package/dist/session/migration/id-prefix.js +0 -132
  624. package/dist/session/migration/id-prefix.js.map +0 -1
  625. package/dist/session/migration/index.d.ts +0 -12
  626. package/dist/session/migration/index.d.ts.map +0 -1
  627. package/dist/session/migration/index.js +0 -12
  628. package/dist/session/migration/index.js.map +0 -1
  629. package/dist/session/migration/marker.d.ts +0 -57
  630. package/dist/session/migration/marker.d.ts.map +0 -1
  631. package/dist/session/migration/marker.js +0 -123
  632. package/dist/session/migration/marker.js.map +0 -1
  633. package/src/session/migration/errors.ts +0 -23
  634. package/src/session/migration/filesystem.ts +0 -468
  635. package/src/session/migration/id-prefix.ts +0 -166
  636. package/src/session/migration/index.ts +0 -41
  637. package/src/session/migration/marker.ts +0 -142
@@ -1,122 +0,0 @@
1
- /**
2
- * Boot-time filesystem re-layout — `.namzu/threads/{thd_X}/` →
3
- * `.namzu/projects/{prj_legacy_<X>}/sessions/ses_legacy_default/runs/...`.
4
- *
5
- * The `thd_X` this module reads off the filesystem is D2 meaning (a), the
6
- * pre-0.2.0 top-level container — unrelated to and untouched by
7
- * NZ-TOPIC-04's narrowing of the live Topic layer's id to `top_*`. As of
8
- * that task `thd_*` means only what this module has always used it to
9
- * mean; see `session/migration/id-prefix.ts` for the disambiguation.
10
- *
11
- * Trigger: first {@link RunContextFactory.build} call per process. The
12
- * factory invokes {@link DefaultFilesystemMigrator.migrate} before resolving
13
- * any path so legacy runs are never orphaned by the new layout.
14
- *
15
- * See session-hierarchy.md §13.4.1 for the detection / trigger / atomicity
16
- * contract. Concurrency model:
17
- *
18
- * 1. Main marker present → short-circuit `already_migrated`. Idempotent.
19
- * 2. Legacy `.namzu/threads/` absent → write the main marker and return
20
- * `noop_no_legacy`. This plants the marker on fresh installs so the
21
- * `threads/` detection branch is only ever entered once.
22
- * 3. Legacy layout detected → acquire the `.tmp` lock via `wx`; on
23
- * EEXIST another boot is mid-migration. The loser waits 100ms and
24
- * re-checks the main marker — cooperating, not competing. Roadmap
25
- * Risk #4 mitigation.
26
- * 4. Per-legacy-thread: rename the whole `runs/` subtree in a single
27
- * `fs.rename` call (cross-OS atomic on the same filesystem; different
28
- * filesystems fall back to copy-then-unlink via Node's default — a
29
- * known limitation documented below).
30
- * 5. Synthesize `project.json` + `session.json` via write-tmp-rename
31
- * (Convention #8) so partial crashes leave no half-serialised state.
32
- * 6. Write main marker last — presence of the marker is the canonical
33
- * "migration done" signal.
34
- *
35
- * Known limitations:
36
- * - Cross-filesystem moves: Node's `fs.rename` rejects with `EXDEV` when
37
- * source and target live on different filesystems. This migrator does
38
- * NOT fall back to copy-then-unlink; the error surfaces as
39
- * {@link FilesystemMigrationError} with op `'rename_runs'`. Consumers
40
- * running `.namzu/threads` and `.namzu/projects` on different mounts
41
- * must migrate manually (documented INTERP flag).
42
- * - `UNKNOWN_TENANT_ID`: legacy threads have no tenant denormalisation on
43
- * disk. The synthesised project.json carries the sentinel so consumers
44
- * know these are legacy-rehomed and can either tag-then-retain or
45
- * reject until a real tenant is assigned (policy is consumer-owned).
46
- */
47
- import type { ProjectId, SessionId } from '../../types/session/ids.js';
48
- import type { Logger } from '../../utils/logger.js';
49
- /**
50
- * Sentinel SessionId used for legacy pre-0.2.0 runs that pre-date the
51
- * Session entity. Every migrated thread collapses into this single session
52
- * so consumers can still address the runs through the new layout.
53
- */
54
- export declare const LEGACY_DEFAULT_SESSION_ID: SessionId;
55
- /** Prefix for projects synthesised from legacy `thd_*` folders. */
56
- export declare const LEGACY_DEFAULT_PROJECT_PREFIX = "prj_legacy_";
57
- /** Marker version string persisted at `.migration/v0.2.0`. */
58
- export declare const MIGRATION_VERSION = "0.2.0";
59
- /** Marker file path relative to rootDir. */
60
- export declare const MARKER_REL_PATH: string;
61
- /** In-flight lock file path relative to rootDir. */
62
- export declare const LOCK_REL_PATH: string;
63
- /**
64
- * Result of a migration attempt. `kind` discriminates the three outcomes;
65
- * `migratedThreads` is only non-empty for `kind: 'migrated'`. Sinks and
66
- * callers can switch on `kind` without string parsing.
67
- */
68
- export interface FilesystemMigrationResult {
69
- kind: 'migrated' | 'already_migrated' | 'noop_no_legacy';
70
- migratedThreads: readonly {
71
- legacyThreadId: string;
72
- newProjectId: ProjectId;
73
- }[];
74
- markerPath: string;
75
- at: Date;
76
- }
77
- /** Event emitted on successful migration (`kind === 'migrated'` only). */
78
- export interface FilesystemMigrationEvent {
79
- type: 'filesystem.migrated';
80
- result: FilesystemMigrationResult;
81
- }
82
- /** Sink contract — one `emit` method. */
83
- export interface FilesystemMigrationSink {
84
- emit(event: FilesystemMigrationEvent): void;
85
- }
86
- export declare const NOOP_FILESYSTEM_MIGRATION_SINK: FilesystemMigrationSink;
87
- /**
88
- * Wires the migration facts `DefaultFilesystemMigrator` already computes —
89
- * `kind`, `migratedThreads`, `markerPath`, `at` — to a `Logger`, instead of
90
- * the sink they are thrown at on every real boot today
91
- * (`NOOP_FILESYSTEM_MIGRATION_SINK`, still `ensureMigrated`'s default — see
92
- * `runtime/query/context.ts`). A caller opts into this by constructing its
93
- * own `DefaultFilesystemMigrator(loggingMigrationSink(log))` and passing it
94
- * to `ensureMigrated`, the way `runtime/query/index.ts` does; nothing here
95
- * changes what the default migrator does.
96
- *
97
- * `FilesystemMigrationSink.emit` is only ever called with
98
- * `type: 'filesystem.migrated'` (Step 6 in the module doc above) —
99
- * `already_migrated` and `noop_no_legacy` never reach a sink at all, by the
100
- * shape of `FilesystemMigrationEvent`. A caller that wants those two logged
101
- * as well reads them straight off `ensureMigrated`'s resolved
102
- * `FilesystemMigrationResult`, the way `runtime/query/index.ts` does,
103
- * rather than this function growing a case the type it wraps cannot
104
- * produce — widening `FilesystemMigrationEvent` to carry them would be a
105
- * breaking change to every exhaustive switch already written over it.
106
- */
107
- export declare function loggingMigrationSink(log: Logger): FilesystemMigrationSink;
108
- /** Interface so consumers can inject a stub migrator in tests. */
109
- export interface FilesystemMigrator {
110
- migrate(rootDir: string): Promise<FilesystemMigrationResult>;
111
- }
112
- /**
113
- * Default implementation. Migration is driven by the contract documented in
114
- * the module header — readers should trace concerns to this comment rather
115
- * than re-deriving from code.
116
- */
117
- export declare class DefaultFilesystemMigrator implements FilesystemMigrator {
118
- private readonly sink;
119
- constructor(sink?: FilesystemMigrationSink);
120
- migrate(rootDir: string): Promise<FilesystemMigrationResult>;
121
- }
122
- //# sourceMappingURL=filesystem.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../../src/session/migration/filesystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAItE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAInD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,WAAoC,CAAA;AAE1E,mEAAmE;AACnE,eAAO,MAAM,6BAA6B,gBAAgB,CAAA;AAE1D,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,UAAU,CAAA;AAExC,4CAA4C;AAC5C,eAAO,MAAM,eAAe,QAA+B,CAAA;AAE3D,oDAAoD;AACpD,eAAO,MAAM,aAAa,QAAmC,CAAA;AAK7D;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACzC,IAAI,EAAE,UAAU,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;IACxD,eAAe,EAAE,SAAS;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,SAAS,CAAA;KAAE,EAAE,CAAA;IAC/E,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,IAAI,CAAA;CACR;AAED,0EAA0E;AAC1E,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,qBAAqB,CAAA;IAC3B,MAAM,EAAE,yBAAyB,CAAA;CACjC;AAED,yCAAyC;AACzC,MAAM,WAAW,uBAAuB;IACvC,IAAI,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAAA;CAC3C;AAED,eAAO,MAAM,8BAA8B,EAAE,uBAE5C,CAAA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAYzE;AAED,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IAClC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAA;CAC5D;AAyCD;;;;GAIG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,GAAE,uBAAwD;IAErF,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAsPlE"}
@@ -1,379 +0,0 @@
1
- /**
2
- * Boot-time filesystem re-layout — `.namzu/threads/{thd_X}/` →
3
- * `.namzu/projects/{prj_legacy_<X>}/sessions/ses_legacy_default/runs/...`.
4
- *
5
- * The `thd_X` this module reads off the filesystem is D2 meaning (a), the
6
- * pre-0.2.0 top-level container — unrelated to and untouched by
7
- * NZ-TOPIC-04's narrowing of the live Topic layer's id to `top_*`. As of
8
- * that task `thd_*` means only what this module has always used it to
9
- * mean; see `session/migration/id-prefix.ts` for the disambiguation.
10
- *
11
- * Trigger: first {@link RunContextFactory.build} call per process. The
12
- * factory invokes {@link DefaultFilesystemMigrator.migrate} before resolving
13
- * any path so legacy runs are never orphaned by the new layout.
14
- *
15
- * See session-hierarchy.md §13.4.1 for the detection / trigger / atomicity
16
- * contract. Concurrency model:
17
- *
18
- * 1. Main marker present → short-circuit `already_migrated`. Idempotent.
19
- * 2. Legacy `.namzu/threads/` absent → write the main marker and return
20
- * `noop_no_legacy`. This plants the marker on fresh installs so the
21
- * `threads/` detection branch is only ever entered once.
22
- * 3. Legacy layout detected → acquire the `.tmp` lock via `wx`; on
23
- * EEXIST another boot is mid-migration. The loser waits 100ms and
24
- * re-checks the main marker — cooperating, not competing. Roadmap
25
- * Risk #4 mitigation.
26
- * 4. Per-legacy-thread: rename the whole `runs/` subtree in a single
27
- * `fs.rename` call (cross-OS atomic on the same filesystem; different
28
- * filesystems fall back to copy-then-unlink via Node's default — a
29
- * known limitation documented below).
30
- * 5. Synthesize `project.json` + `session.json` via write-tmp-rename
31
- * (Convention #8) so partial crashes leave no half-serialised state.
32
- * 6. Write main marker last — presence of the marker is the canonical
33
- * "migration done" signal.
34
- *
35
- * Known limitations:
36
- * - Cross-filesystem moves: Node's `fs.rename` rejects with `EXDEV` when
37
- * source and target live on different filesystems. This migrator does
38
- * NOT fall back to copy-then-unlink; the error surfaces as
39
- * {@link FilesystemMigrationError} with op `'rename_runs'`. Consumers
40
- * running `.namzu/threads` and `.namzu/projects` on different mounts
41
- * must migrate manually (documented INTERP flag).
42
- * - `UNKNOWN_TENANT_ID`: legacy threads have no tenant denormalisation on
43
- * disk. The synthesised project.json carries the sentinel so consumers
44
- * know these are legacy-rehomed and can either tag-then-retain or
45
- * reject until a real tenant is assigned (policy is consumer-owned).
46
- */
47
- import { mkdir, readdir, rename, stat } from 'node:fs/promises';
48
- import { join } from 'node:path';
49
- import { BOOT_EVENT_NAMES } from '../../constants/telemetry/index.js';
50
- import { UNKNOWN_TENANT_ID } from '../../types/ids/index.js';
51
- import { atomicWriteFile } from '../../utils/atomic-write.js';
52
- import { asProjectId, asSessionId } from '../../utils/id.js';
53
- import { EVENT_NAME_ATTRIBUTE } from '../../utils/log/types.js';
54
- import { FilesystemMigrationError } from './errors.js';
55
- import { acquireMigrationLock, readMarker, releaseMigrationLock, writeMarker } from './marker.js';
56
- /**
57
- * Sentinel SessionId used for legacy pre-0.2.0 runs that pre-date the
58
- * Session entity. Every migrated thread collapses into this single session
59
- * so consumers can still address the runs through the new layout.
60
- */
61
- export const LEGACY_DEFAULT_SESSION_ID = asSessionId('ses_legacy_default');
62
- /** Prefix for projects synthesised from legacy `thd_*` folders. */
63
- export const LEGACY_DEFAULT_PROJECT_PREFIX = 'prj_legacy_';
64
- /** Marker version string persisted at `.migration/v0.2.0`. */
65
- export const MIGRATION_VERSION = '0.2.0';
66
- /** Marker file path relative to rootDir. */
67
- export const MARKER_REL_PATH = join('.migration', 'v0.2.0');
68
- /** In-flight lock file path relative to rootDir. */
69
- export const LOCK_REL_PATH = join('.migration', 'v0.2.0.tmp');
70
- /** Delay before the loser re-checks the main marker on lock contention. */
71
- const LOCK_WAIT_MS = 100;
72
- export const NOOP_FILESYSTEM_MIGRATION_SINK = {
73
- emit() { },
74
- };
75
- /**
76
- * Wires the migration facts `DefaultFilesystemMigrator` already computes —
77
- * `kind`, `migratedThreads`, `markerPath`, `at` — to a `Logger`, instead of
78
- * the sink they are thrown at on every real boot today
79
- * (`NOOP_FILESYSTEM_MIGRATION_SINK`, still `ensureMigrated`'s default — see
80
- * `runtime/query/context.ts`). A caller opts into this by constructing its
81
- * own `DefaultFilesystemMigrator(loggingMigrationSink(log))` and passing it
82
- * to `ensureMigrated`, the way `runtime/query/index.ts` does; nothing here
83
- * changes what the default migrator does.
84
- *
85
- * `FilesystemMigrationSink.emit` is only ever called with
86
- * `type: 'filesystem.migrated'` (Step 6 in the module doc above) —
87
- * `already_migrated` and `noop_no_legacy` never reach a sink at all, by the
88
- * shape of `FilesystemMigrationEvent`. A caller that wants those two logged
89
- * as well reads them straight off `ensureMigrated`'s resolved
90
- * `FilesystemMigrationResult`, the way `runtime/query/index.ts` does,
91
- * rather than this function growing a case the type it wraps cannot
92
- * produce — widening `FilesystemMigrationEvent` to carry them would be a
93
- * breaking change to every exhaustive switch already written over it.
94
- */
95
- export function loggingMigrationSink(log) {
96
- return {
97
- emit(event) {
98
- const { result } = event;
99
- log.info('filesystem migration completed', {
100
- [EVENT_NAME_ATTRIBUTE]: BOOT_EVENT_NAMES.MIGRATION_COMPLETED,
101
- 'namzu.migration.kind': result.kind,
102
- 'namzu.migration.marker_path': result.markerPath,
103
- 'namzu.migration.migrated_thread_count': result.migratedThreads.length,
104
- });
105
- },
106
- };
107
- }
108
- /**
109
- * Default implementation. Migration is driven by the contract documented in
110
- * the module header — readers should trace concerns to this comment rather
111
- * than re-deriving from code.
112
- */
113
- export class DefaultFilesystemMigrator {
114
- sink;
115
- constructor(sink = NOOP_FILESYSTEM_MIGRATION_SINK) {
116
- this.sink = sink;
117
- }
118
- async migrate(rootDir) {
119
- const markerPath = join(rootDir, MARKER_REL_PATH);
120
- const lockPath = join(rootDir, LOCK_REL_PATH);
121
- const threadsDir = join(rootDir, 'threads');
122
- const projectsDir = join(rootDir, 'projects');
123
- // Step 1: completed-marker short-circuit (cheapest idempotency check).
124
- const existing = await readMarker(markerPath);
125
- if (existing) {
126
- return {
127
- kind: 'already_migrated',
128
- migratedThreads: [],
129
- markerPath,
130
- at: existing.at,
131
- };
132
- }
133
- // Step 2: legacy absent → no-op. Plant the marker so subsequent boots
134
- // do not re-enter this branch. Fresh installs fall through here.
135
- const threadsExists = await directoryExists(threadsDir);
136
- if (!threadsExists) {
137
- const at = new Date();
138
- try {
139
- await writeMarker(markerPath, {
140
- version: MIGRATION_VERSION,
141
- at,
142
- migratedThreads: [],
143
- });
144
- }
145
- catch (cause) {
146
- throw new FilesystemMigrationError({
147
- op: 'write_marker',
148
- path: markerPath,
149
- cause,
150
- });
151
- }
152
- return {
153
- kind: 'noop_no_legacy',
154
- migratedThreads: [],
155
- markerPath,
156
- at,
157
- };
158
- }
159
- // Step 3: cooperate on the tmp lock.
160
- try {
161
- await acquireMigrationLock(lockPath);
162
- }
163
- catch (err) {
164
- const code = err.code;
165
- if (code === 'EEXIST') {
166
- // Another boot is mid-migration — wait and re-read the main marker.
167
- await sleep(LOCK_WAIT_MS);
168
- const follow = await readMarker(markerPath);
169
- if (follow) {
170
- return {
171
- kind: 'already_migrated',
172
- migratedThreads: [],
173
- markerPath,
174
- at: follow.at,
175
- };
176
- }
177
- // Main marker still absent — the winning boot is still going OR
178
- // crashed. We re-throw so the caller sees a contention surface
179
- // rather than silently assuming success.
180
- throw new FilesystemMigrationError({
181
- op: 'acquire_lock',
182
- path: lockPath,
183
- cause: err,
184
- });
185
- }
186
- throw new FilesystemMigrationError({
187
- op: 'acquire_lock',
188
- path: lockPath,
189
- cause: err,
190
- });
191
- }
192
- try {
193
- // Step 4a: enumerate legacy thread dirs.
194
- let entries;
195
- try {
196
- entries = await readdir(threadsDir);
197
- }
198
- catch (cause) {
199
- throw new FilesystemMigrationError({
200
- op: 'enumerate_threads',
201
- path: threadsDir,
202
- cause,
203
- });
204
- }
205
- const migrated = [];
206
- const now = new Date();
207
- for (const entry of entries) {
208
- // Accept only `thd_*` (and tolerate `prj_*` legacy in case of
209
- // rerun after a partial-crash-with-renamed-but-no-marker).
210
- if (!entry.startsWith('thd_'))
211
- continue;
212
- const legacyThreadId = entry;
213
- const suffix = legacyThreadId.slice('thd_'.length);
214
- // The suffix comes off the filesystem, and `startsWith('thd_')`
215
- // is the only thing it has passed. A folder named `thd_Not An
216
- // Id` mints `prj_legacy_Not An Id`: structurally a `ProjectId`,
217
- // accepted by no validator, and now a directory name in the new
218
- // layout. The migration is the one place a project id is built
219
- // from data rather than generated, so it is the one place the
220
- // id contract has to be checked.
221
- //
222
- // (Not a containment check — it cannot be one. `readdir` yields
223
- // path components, which hold no separator, and `..` is never
224
- // among them; `prj_legacy_..` is a literal name, not a parent
225
- // reference. Nothing here can leave the root.)
226
- //
227
- // It refuses rather than skipping. A skipped folder is a legacy
228
- // thread whose runs are still on disk and no longer addressable,
229
- // with nothing in the result saying so — and the marker would be
230
- // written as if the migration were complete.
231
- if (!/^[a-z0-9]+$/.test(suffix)) {
232
- throw new FilesystemMigrationError({
233
- op: 'validate_thread_id',
234
- path: join(threadsDir, legacyThreadId),
235
- cause: new Error(`Legacy thread folder '${legacyThreadId}' is not a thread id: expected 'thd_' followed by lowercase alphanumerics. It is refused rather than migrated because the name is used as a directory name.`),
236
- });
237
- }
238
- const newProjectId = asProjectId(`${LEGACY_DEFAULT_PROJECT_PREFIX}${suffix}`);
239
- const legacyRunsDir = join(threadsDir, legacyThreadId, 'runs');
240
- const newProjectDir = join(projectsDir, newProjectId);
241
- const newSessionDir = join(newProjectDir, 'sessions', LEGACY_DEFAULT_SESSION_ID);
242
- const newRunsDir = join(newSessionDir, 'runs');
243
- // Ensure parent path exists for the atomic rename of `runs/`.
244
- try {
245
- await mkdir(newSessionDir, { recursive: true });
246
- }
247
- catch (cause) {
248
- throw new FilesystemMigrationError({
249
- op: 'mkdir_session',
250
- path: newSessionDir,
251
- cause,
252
- });
253
- }
254
- // Move the whole `runs/` subtree in a single rename — atomic on
255
- // same-filesystem, EXDEV on cross-mount (documented limitation).
256
- const legacyRunsExists = await directoryExists(legacyRunsDir);
257
- if (legacyRunsExists) {
258
- try {
259
- await rename(legacyRunsDir, newRunsDir);
260
- }
261
- catch (cause) {
262
- throw new FilesystemMigrationError({
263
- op: 'rename_runs',
264
- path: legacyRunsDir,
265
- cause,
266
- });
267
- }
268
- }
269
- // Step 4b: synthesize project.json via write-tmp-rename.
270
- const projectJson = {
271
- id: newProjectId,
272
- tenantId: UNKNOWN_TENANT_ID,
273
- name: `legacy ${legacyThreadId}`,
274
- config: {
275
- maxDelegationDepth: 4,
276
- maxDelegationWidth: 8,
277
- maxInterventionDepth: 10,
278
- },
279
- createdAt: now.toISOString(),
280
- updatedAt: now.toISOString(),
281
- _legacy: true,
282
- };
283
- const projectJsonPath = join(newProjectDir, 'project.json');
284
- try {
285
- await atomicWriteJson(projectJsonPath, projectJson);
286
- }
287
- catch (cause) {
288
- throw new FilesystemMigrationError({
289
- op: 'write_project_json',
290
- path: projectJsonPath,
291
- cause,
292
- });
293
- }
294
- // Step 4c: synthesize session.json for the legacy-default session.
295
- const sessionJson = {
296
- id: LEGACY_DEFAULT_SESSION_ID,
297
- projectId: newProjectId,
298
- tenantId: UNKNOWN_TENANT_ID,
299
- status: 'idle',
300
- currentActor: null,
301
- previousActors: [],
302
- workspaceId: null,
303
- ownerVersion: 0,
304
- createdAt: now.toISOString(),
305
- updatedAt: now.toISOString(),
306
- _legacy: true,
307
- };
308
- const sessionJsonPath = join(newSessionDir, 'session.json');
309
- try {
310
- await atomicWriteJson(sessionJsonPath, sessionJson);
311
- }
312
- catch (cause) {
313
- throw new FilesystemMigrationError({
314
- op: 'write_session_json',
315
- path: sessionJsonPath,
316
- cause,
317
- });
318
- }
319
- migrated.push({ legacyThreadId, newProjectId });
320
- }
321
- // Step 5: write the completion marker last. Presence = done.
322
- try {
323
- await writeMarker(markerPath, {
324
- version: MIGRATION_VERSION,
325
- at: now,
326
- migratedThreads: migrated,
327
- });
328
- }
329
- catch (cause) {
330
- throw new FilesystemMigrationError({
331
- op: 'write_marker',
332
- path: markerPath,
333
- cause,
334
- });
335
- }
336
- const result = {
337
- kind: 'migrated',
338
- migratedThreads: migrated,
339
- markerPath,
340
- at: now,
341
- };
342
- // Step 6: emit event.
343
- this.sink.emit({ type: 'filesystem.migrated', result });
344
- return result;
345
- }
346
- finally {
347
- // Always release the lock — even on failure, a crashed run with the
348
- // main marker absent will retry on the next boot; the stale `.tmp`
349
- // would otherwise wedge that retry.
350
- await releaseMigrationLock(lockPath).catch(() => undefined);
351
- }
352
- }
353
- }
354
- /**
355
- * The duplication this replaced existed to keep `session/migration/` free
356
- * of an inbound dependency on the store layer, which was the right
357
- * instinct — and it also meant this copy kept the fixed sidecar name after
358
- * the stores were fixed. Living in `utils/` satisfies both: everything may
359
- * depend on it, so there is nothing left to duplicate.
360
- */
361
- async function atomicWriteJson(filePath, value) {
362
- await atomicWriteFile(filePath, JSON.stringify(value, null, 2));
363
- }
364
- async function directoryExists(path) {
365
- try {
366
- const s = await stat(path);
367
- return s.isDirectory();
368
- }
369
- catch (err) {
370
- const code = err.code;
371
- if (code === 'ENOENT')
372
- return false;
373
- throw err;
374
- }
375
- }
376
- function sleep(ms) {
377
- return new Promise((resolve) => setTimeout(resolve, ms));
378
- }
379
- //# sourceMappingURL=filesystem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../../src/session/migration/filesystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEjG;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC,oBAAoB,CAAC,CAAA;AAE1E,mEAAmE;AACnE,MAAM,CAAC,MAAM,6BAA6B,GAAG,aAAa,CAAA;AAE1D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAA;AAExC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;AAE3D,oDAAoD;AACpD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;AAE7D,2EAA2E;AAC3E,MAAM,YAAY,GAAG,GAAG,CAAA;AAyBxB,MAAM,CAAC,MAAM,8BAA8B,GAA4B;IACtE,IAAI,KAAI,CAAC;CACT,CAAA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC/C,OAAO;QACN,IAAI,CAAC,KAAK;YACT,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;YACxB,GAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE;gBAC1C,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,CAAC,mBAAmB;gBAC5D,sBAAsB,EAAE,MAAM,CAAC,IAAI;gBACnC,6BAA6B,EAAE,MAAM,CAAC,UAAU;gBAChD,uCAAuC,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM;aACtE,CAAC,CAAA;QACH,CAAC;KACD,CAAA;AACF,CAAC;AA8CD;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IACR;IAA7B,YAA6B,OAAgC,8BAA8B;QAA9D,SAAI,GAAJ,IAAI,CAA0D;IAAG,CAAC;IAE/F,KAAK,CAAC,OAAO,CAAC,OAAe;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAE7C,uEAAuE;QACvE,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAA;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACd,OAAO;gBACN,IAAI,EAAE,kBAAkB;gBACxB,eAAe,EAAE,EAAE;gBACnB,UAAU;gBACV,EAAE,EAAE,QAAQ,CAAC,EAAE;aACf,CAAA;QACF,CAAC;QAED,sEAAsE;QACtE,iEAAiE;QACjE,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAA;QACvD,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAA;YACrB,IAAI,CAAC;gBACJ,MAAM,WAAW,CAAC,UAAU,EAAE;oBAC7B,OAAO,EAAE,iBAAiB;oBAC1B,EAAE;oBACF,eAAe,EAAE,EAAE;iBACnB,CAAC,CAAA;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,wBAAwB,CAAC;oBAClC,EAAE,EAAE,cAAc;oBAClB,IAAI,EAAE,UAAU;oBAChB,KAAK;iBACL,CAAC,CAAA;YACH,CAAC;YACD,OAAO;gBACN,IAAI,EAAE,gBAAgB;gBACtB,eAAe,EAAE,EAAE;gBACnB,UAAU;gBACV,EAAE;aACF,CAAA;QACF,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC;YACJ,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAA;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAA;YAChD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvB,oEAAoE;gBACpE,MAAM,KAAK,CAAC,YAAY,CAAC,CAAA;gBACzB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAA;gBAC3C,IAAI,MAAM,EAAE,CAAC;oBACZ,OAAO;wBACN,IAAI,EAAE,kBAAkB;wBACxB,eAAe,EAAE,EAAE;wBACnB,UAAU;wBACV,EAAE,EAAE,MAAM,CAAC,EAAE;qBACb,CAAA;gBACF,CAAC;gBACD,gEAAgE;gBAChE,+DAA+D;gBAC/D,yCAAyC;gBACzC,MAAM,IAAI,wBAAwB,CAAC;oBAClC,EAAE,EAAE,cAAc;oBAClB,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,GAAG;iBACV,CAAC,CAAA;YACH,CAAC;YACD,MAAM,IAAI,wBAAwB,CAAC;gBAClC,EAAE,EAAE,cAAc;gBAClB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,GAAG;aACV,CAAC,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACJ,yCAAyC;YACzC,IAAI,OAAiB,CAAA;YACrB,IAAI,CAAC;gBACJ,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,wBAAwB,CAAC;oBAClC,EAAE,EAAE,mBAAmB;oBACvB,IAAI,EAAE,UAAU;oBAChB,KAAK;iBACL,CAAC,CAAA;YACH,CAAC;YAED,MAAM,QAAQ,GAA0D,EAAE,CAAA;YAC1E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;YAEtB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC7B,8DAA8D;gBAC9D,2DAA2D;gBAC3D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;oBAAE,SAAQ;gBAEvC,MAAM,cAAc,GAAG,KAAK,CAAA;gBAC5B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gBAElD,gEAAgE;gBAChE,8DAA8D;gBAC9D,gEAAgE;gBAChE,gEAAgE;gBAChE,+DAA+D;gBAC/D,8DAA8D;gBAC9D,iCAAiC;gBACjC,EAAE;gBACF,gEAAgE;gBAChE,8DAA8D;gBAC9D,8DAA8D;gBAC9D,+CAA+C;gBAC/C,EAAE;gBACF,gEAAgE;gBAChE,iEAAiE;gBACjE,iEAAiE;gBACjE,6CAA6C;gBAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjC,MAAM,IAAI,wBAAwB,CAAC;wBAClC,EAAE,EAAE,oBAAoB;wBACxB,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC;wBACtC,KAAK,EAAE,IAAI,KAAK,CACf,yBAAyB,cAAc,6JAA6J,CACpM;qBACD,CAAC,CAAA;gBACH,CAAC;gBAED,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,6BAA6B,GAAG,MAAM,EAAE,CAAC,CAAA;gBAE7E,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,CAAA;gBAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;gBACrD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,yBAAyB,CAAC,CAAA;gBAChF,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;gBAE9C,8DAA8D;gBAC9D,IAAI,CAAC;oBACJ,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;gBAChD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,IAAI,wBAAwB,CAAC;wBAClC,EAAE,EAAE,eAAe;wBACnB,IAAI,EAAE,aAAa;wBACnB,KAAK;qBACL,CAAC,CAAA;gBACH,CAAC;gBAED,gEAAgE;gBAChE,iEAAiE;gBACjE,MAAM,gBAAgB,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC,CAAA;gBAC7D,IAAI,gBAAgB,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACJ,MAAM,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;oBACxC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,MAAM,IAAI,wBAAwB,CAAC;4BAClC,EAAE,EAAE,aAAa;4BACjB,IAAI,EAAE,aAAa;4BACnB,KAAK;yBACL,CAAC,CAAA;oBACH,CAAC;gBACF,CAAC;gBAED,yDAAyD;gBACzD,MAAM,WAAW,GAAqB;oBACrC,EAAE,EAAE,YAAY;oBAChB,QAAQ,EAAE,iBAAiB;oBAC3B,IAAI,EAAE,UAAU,cAAc,EAAE;oBAChC,MAAM,EAAE;wBACP,kBAAkB,EAAE,CAAC;wBACrB,kBAAkB,EAAE,CAAC;wBACrB,oBAAoB,EAAE,EAAE;qBACxB;oBACD,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;oBAC5B,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;oBAC5B,OAAO,EAAE,IAAI;iBACb,CAAA;gBACD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;gBAC3D,IAAI,CAAC;oBACJ,MAAM,eAAe,CAAC,eAAe,EAAE,WAAW,CAAC,CAAA;gBACpD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,IAAI,wBAAwB,CAAC;wBAClC,EAAE,EAAE,oBAAoB;wBACxB,IAAI,EAAE,eAAe;wBACrB,KAAK;qBACL,CAAC,CAAA;gBACH,CAAC;gBAED,mEAAmE;gBACnE,MAAM,WAAW,GAAqB;oBACrC,EAAE,EAAE,yBAAyB;oBAC7B,SAAS,EAAE,YAAY;oBACvB,QAAQ,EAAE,iBAAiB;oBAC3B,MAAM,EAAE,MAAM;oBACd,YAAY,EAAE,IAAI;oBAClB,cAAc,EAAE,EAAE;oBAClB,WAAW,EAAE,IAAI;oBACjB,YAAY,EAAE,CAAC;oBACf,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;oBAC5B,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;oBAC5B,OAAO,EAAE,IAAI;iBACb,CAAA;gBACD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;gBAC3D,IAAI,CAAC;oBACJ,MAAM,eAAe,CAAC,eAAe,EAAE,WAAW,CAAC,CAAA;gBACpD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,IAAI,wBAAwB,CAAC;wBAClC,EAAE,EAAE,oBAAoB;wBACxB,IAAI,EAAE,eAAe;wBACrB,KAAK;qBACL,CAAC,CAAA;gBACH,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAA;YAChD,CAAC;YAED,6DAA6D;YAC7D,IAAI,CAAC;gBACJ,MAAM,WAAW,CAAC,UAAU,EAAE;oBAC7B,OAAO,EAAE,iBAAiB;oBAC1B,EAAE,EAAE,GAAG;oBACP,eAAe,EAAE,QAAQ;iBACzB,CAAC,CAAA;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,wBAAwB,CAAC;oBAClC,EAAE,EAAE,cAAc;oBAClB,IAAI,EAAE,UAAU;oBAChB,KAAK;iBACL,CAAC,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAA8B;gBACzC,IAAI,EAAE,UAAU;gBAChB,eAAe,EAAE,QAAQ;gBACzB,UAAU;gBACV,EAAE,EAAE,GAAG;aACP,CAAA;YAED,sBAAsB;YACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,CAAA;YAEvD,OAAO,MAAM,CAAA;QACd,CAAC;gBAAS,CAAC;YACV,oEAAoE;YACpE,mEAAmE;YACnE,oCAAoC;YACpC,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC5D,CAAC;IACF,CAAC;CACD;AAED;;;;;;GAMG;AACH,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,KAAc;IAC9D,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC;QACJ,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1B,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAA;QAChD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QACnC,MAAM,GAAG,CAAA;IACV,CAAC;AACF,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC"}
@@ -1,113 +0,0 @@
1
- /**
2
- * ID-prefix migration window — read-side compat for the pre-0.2.0 top-level
3
- * `thd_*` container id (D2 meaning (a), ses_020). NZ-TOPIC-04 narrowed the
4
- * Topic layer's own id (D2 meaning (b)) to `top_*`, so as of this release
5
- * `thd_*` means ONLY the legacy container everywhere in this codebase — see
6
- * `types/ids/index.ts` for where the two meanings used to collide.
7
- *
8
- * Consumers that touch raw legacy container IDs (the filesystem migrator,
9
- * wire decoders, CLI imports) route through {@link acceptLegacyContainerId}
10
- * so the warning signal is structured rather than ad-hoc console output
11
- * (Convention #18).
12
- *
13
- * | Window state | Reader accepts | Writer emits | Legacy read behaviour |
14
- * |--------------|---------------------|--------------|-------------------------------|
15
- * | OPEN (now) | `thd_*` AND `prj_*` | `prj_*` only | emits `MigrationWarning` once |
16
- * | CLOSED | `prj_*` only | `prj_*` only | rejects `StalePrefixError` |
17
- *
18
- * The {@link WINDOW_OPEN} constant is the module-level default for
19
- * {@link acceptLegacyContainerId}'s `windowOpen` parameter — the single
20
- * knob that flips this module from soft-accept to hard-reject in
21
- * production. The writer guard {@link rejectLegacyContainerPrefix} has no
22
- * such fork: a writer must never emit `thd_*` in EITHER window state (see
23
- * the table's Writer column, unchanged across both rows), so it takes no
24
- * `windowOpen` parameter at all — one would be unused, which is its own
25
- * failure mode (a-check-that-cannot-fail, applied to an argument no less
26
- * than to a branch). Convention #0: no silent long-lived compat — the
27
- * window is explicit and fails closed when closed.
28
- */
29
- import type { ProjectId } from '../../types/session/ids.js';
30
- /**
31
- * Structured event emitted when the reader accepts a legacy `thd_*` ID.
32
- *
33
- * Shape is stable across the 0.2.x window — platform consumers can wire
34
- * this into their observability pipeline (metrics, audit log) without
35
- * string parsing (Convention #18).
36
- */
37
- export interface MigrationWarning {
38
- kind: 'id_prefix_legacy_read';
39
- legacyId: string;
40
- normalizedId: ProjectId;
41
- at: Date;
42
- emittedOncePerProcess: true;
43
- }
44
- /** Sink contract — one `emit` method so callers can swap implementations. */
45
- export interface MigrationWarningSink {
46
- emit(warning: MigrationWarning): void;
47
- }
48
- /**
49
- * Default sink used when consumers do not inject one. Drops warnings on the
50
- * floor — migration still runs; observers just lose the signal. Convention
51
- * #5 deny-by-default applies to behaviour, not telemetry; missing a warning
52
- * sink is not a failure mode.
53
- */
54
- export declare const NOOP_MIGRATION_WARNING_SINK: MigrationWarningSink;
55
- /**
56
- * Raised when the reader encounters a string that is neither a valid
57
- * `prj_*` nor `thd_*` prefix. In the 0.3.x window the legacy branch will
58
- * also throw this error — flip {@link WINDOW_OPEN} to `false` to cut over.
59
- */
60
- export declare class StalePrefixError extends Error {
61
- readonly details: {
62
- rawId: string;
63
- kind: 'thd_rejected' | 'unknown_prefix';
64
- };
65
- constructor(details: {
66
- rawId: string;
67
- kind: 'thd_rejected' | 'unknown_prefix';
68
- });
69
- }
70
- /**
71
- * 0.2.x: compat window OPEN — `thd_*` coerces to `prj_*` with a warning.
72
- * 0.3.x: flip to `false` — legacy branch becomes throw-only.
73
- */
74
- export declare const WINDOW_OPEN = true;
75
- /**
76
- * Accept-on-read for legacy container `thd_*` IDs during the 0.2.x window.
77
- *
78
- * Contract:
79
- * - `prj_*` inputs return as-is; no warning emitted.
80
- * - `thd_*` inputs normalize to `prj_<suffix>` and emit a single
81
- * {@link MigrationWarning} per distinct input string per process.
82
- * - Everything else (including a live `top_*` Topic id — NZ-TOPIC-04)
83
- * throws {@link StalePrefixError} with `kind: 'unknown_prefix'}`.
84
- * - `windowOpen` (default {@link WINDOW_OPEN}) is an explicit parameter
85
- * rather than a read of the module constant so the CLOSED branch below
86
- * is reachable from a test without mutating shared module state
87
- * (a-check-that-cannot-fail). When `false`, the `thd_*` branch throws
88
- * too — single knob, single commit, now also a single argument a test
89
- * can flip per-call.
90
- *
91
- * Testing hook: {@link __resetSeenLegacyForTests} clears the dedup Set so
92
- * each test starts with a clean emission history.
93
- */
94
- export declare function acceptLegacyContainerId(raw: string, sink: MigrationWarningSink, windowOpen?: boolean): ProjectId;
95
- /**
96
- * Writer guard: reject emission of a legacy container `thd_*` id at encode
97
- * time. Phase 1's {@link generateProjectId} already emits `prj_*` only;
98
- * this helper exists so write paths that handle raw strings (e.g.
99
- * synthesis during filesystem migration) can fail fast on accidental
100
- * legacy re-emission. No `windowOpen` parameter — unlike the reader above,
101
- * this guard's outcome does not fork on migration-window state; a writer
102
- * must never emit `thd_*` in either window (see the module header's
103
- * Writer column). Convention #0: no silent back-sliding to the old prefix.
104
- */
105
- export declare function rejectLegacyContainerPrefix(id: string): void;
106
- /**
107
- * Test-only: clear the process-level dedup Set so subsequent
108
- * {@link acceptLegacyContainerId} calls emit warnings again. Production code
109
- * must never call this — the whole point is one warning per distinct
110
- * legacy id per process.
111
- */
112
- export declare function __resetSeenLegacyForTests(): void;
113
- //# sourceMappingURL=id-prefix.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"id-prefix.d.ts","sourceRoot":"","sources":["../../../src/session/migration/id-prefix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAG3D;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,uBAAuB,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,SAAS,CAAA;IACvB,EAAE,EAAE,IAAI,CAAA;IACR,qBAAqB,EAAE,IAAI,CAAA;CAC3B;AAED,6EAA6E;AAC7E,MAAM,WAAW,oBAAoB;IACpC,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACrC;AAED;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,oBAEzC,CAAA;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAAA;KAAE,CAAA;gBAEhE,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAAA;KAAE;CAS/E;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,OAAO,CAAA;AAS/B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,oBAAoB,EAC1B,UAAU,GAAE,OAAqB,GAC/B,SAAS,CAsBX;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAI5D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}