@automaton-labs/aib 0.0.7 → 0.0.9

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 (477) hide show
  1. package/README.md +21 -578
  2. package/config/agent-dx-policy.default.json +31 -0
  3. package/config/control-plane-client.default.json +3 -0
  4. package/dist/agent-dx/agent-dx.js +805 -0
  5. package/dist/agent-dx/presentation.js +32 -0
  6. package/dist/alias-advisor/analyze.js +982 -0
  7. package/dist/alias-advisor/exact-text-cost.js +74 -0
  8. package/dist/alias-advisor/lexical.js +240 -0
  9. package/dist/alias-advisor/model.js +2 -0
  10. package/dist/alias-advisor/path-identity.js +49 -0
  11. package/dist/alias-advisor/ranking.js +171 -0
  12. package/dist/alias-advisor/token-estimator.js +85 -0
  13. package/dist/bin/aib.js +5 -1
  14. package/dist/bin/cli.js +811 -4
  15. package/dist/commands/add-missing-imports-preview-cache.js +99 -2
  16. package/dist/commands/add-missing-imports.js +241 -2
  17. package/dist/commands/apply-module-plan.js +1319 -3
  18. package/dist/commands/background-command.js +378 -2
  19. package/dist/commands/captured-input.js +74 -1
  20. package/dist/commands/config-command.js +314 -2
  21. package/dist/commands/config-output.js +357 -10
  22. package/dist/commands/control-plane-command.js +183 -1
  23. package/dist/commands/declaration-command.js +1209 -7
  24. package/dist/commands/declaration-execution-cache.js +79 -1
  25. package/dist/commands/declaration-format.js +221 -1
  26. package/dist/commands/declaration-preview-cache.js +114 -2
  27. package/dist/commands/diagnostics-command.js +70 -3
  28. package/dist/commands/doctor.js +137 -3
  29. package/dist/commands/execution-command.js +117 -1
  30. package/dist/commands/exports-star-collapse-command.js +178 -0
  31. package/dist/commands/exports-star-command.js +252 -0
  32. package/dist/commands/exports-star-preview-cache.js +84 -0
  33. package/dist/commands/feedback-command.js +176 -3
  34. package/dist/commands/file-move-to-dir-execution-cache.js +92 -1
  35. package/dist/commands/file-move-to-dir-preview-cache.js +125 -2
  36. package/dist/commands/file-move-to-dir-worker.js +54 -0
  37. package/dist/commands/file-move-to-dir.js +1073 -5
  38. package/dist/commands/file-mutation-runtime.js +102 -1
  39. package/dist/commands/file-mutation-worker-apply.js +180 -0
  40. package/dist/commands/file-refactor-batch-execution-cache.js +90 -1
  41. package/dist/commands/file-refactor-batch-preview-cache.js +125 -2
  42. package/dist/commands/file-refactor-batch-worker.js +54 -0
  43. package/dist/commands/file-refactor-batch.js +1154 -5
  44. package/dist/commands/file-rename-execution-cache.js +92 -1
  45. package/dist/commands/file-rename-preview-cache.js +125 -2
  46. package/dist/commands/file-rename-worker.js +54 -0
  47. package/dist/commands/file-rename.js +1053 -5
  48. package/dist/commands/file-text-edit-executor.js +205 -0
  49. package/dist/commands/find-importers.js +52 -1
  50. package/dist/commands/find-unused-imports.js +55 -1
  51. package/dist/commands/generate-docs-command.js +244 -6
  52. package/dist/commands/help-command.js +460 -7
  53. package/dist/commands/import-specifier-policy.js +391 -0
  54. package/dist/commands/imports-command.js +68 -1
  55. package/dist/commands/imports-rebase.js +1138 -0
  56. package/dist/commands/init-skill-usage.js +92 -3
  57. package/dist/commands/init-workspace.js +30 -1
  58. package/dist/commands/inspect-alias-candidates.js +413 -0
  59. package/dist/commands/inspect-cycles.js +811 -5
  60. package/dist/commands/inspect-direct-usages.js +98 -0
  61. package/dist/commands/inspect-duplicates-format.js +229 -0
  62. package/dist/commands/inspect-format-primitives.js +127 -0
  63. package/dist/commands/inspect-format.js +1590 -18
  64. package/dist/commands/inspect-graph.js +1553 -9
  65. package/dist/commands/inspect-imports.js +339 -2
  66. package/dist/commands/inspect-mixed-format.js +524 -0
  67. package/dist/commands/inspect-module-plan-format.js +216 -0
  68. package/dist/commands/inspect-module-plan-serialization.js +402 -0
  69. package/dist/commands/inspect-reference-path-format.js +157 -0
  70. package/dist/commands/inspect-request-values.js +599 -0
  71. package/dist/commands/inspect-selector-kind.js +21 -0
  72. package/dist/commands/inspect-selector.js +50 -0
  73. package/dist/commands/inspect-symbol-format.js +90 -0
  74. package/dist/commands/inspect-topology.js +435 -0
  75. package/dist/commands/inspect-tree.js +827 -5
  76. package/dist/commands/inspect-usages-detail.js +793 -0
  77. package/dist/commands/inspect-usages-evidence.js +31 -0
  78. package/dist/commands/inspect-usages-format.js +367 -0
  79. package/dist/commands/inspect.js +1450 -16
  80. package/dist/commands/internal-command.js +64 -0
  81. package/dist/commands/json-file-input.js +60 -1
  82. package/dist/commands/module-plan-cache.js +156 -2
  83. package/dist/commands/module-plan-standalone.js +208 -0
  84. package/dist/commands/module-plan-timeout.js +77 -1
  85. package/dist/commands/move-preview-cache.js +101 -2
  86. package/dist/commands/mutate-aggregate-output.js +996 -0
  87. package/dist/commands/mutate-child-execution.js +374 -0
  88. package/dist/commands/mutate-command.js +1394 -0
  89. package/dist/commands/mutate-declaration-output.js +313 -0
  90. package/dist/commands/mutate-domain-adapters.js +638 -0
  91. package/dist/commands/mutate-execution-cache.js +114 -0
  92. package/dist/commands/mutate-execution-status.js +598 -0
  93. package/dist/commands/mutate-failure-output.js +531 -0
  94. package/dist/commands/mutate-file-view.js +151 -0
  95. package/dist/commands/mutate-object-output.js +91 -0
  96. package/dist/commands/mutate-output-values.js +97 -0
  97. package/dist/commands/mutate-preview-cache.js +86 -0
  98. package/dist/commands/mutate-response-replay.js +153 -0
  99. package/dist/commands/mutate-result-projection.js +818 -0
  100. package/dist/commands/mutation-eta.js +28 -0
  101. package/dist/commands/mutation-execution-cache.js +140 -3
  102. package/dist/commands/mutation-recovery-journal.js +195 -0
  103. package/dist/commands/normalize-imports.js +1120 -4
  104. package/dist/commands/object-pack-command.js +546 -0
  105. package/dist/commands/object-pack-preview-cache.js +88 -0
  106. package/dist/commands/observability-command.js +47 -3
  107. package/dist/commands/ota-command.js +403 -2
  108. package/dist/commands/print-config.js +10 -1
  109. package/dist/commands/quick-read.js +1113 -11
  110. package/dist/commands/refactor-batch-builder.js +265 -1
  111. package/dist/commands/refactor-batch-execution-cache.js +85 -1
  112. package/dist/commands/refactor-batch-preview-cache.js +96 -2
  113. package/dist/commands/refactor-batch.js +461 -4
  114. package/dist/commands/rename-entities.js +794 -4
  115. package/dist/commands/rename-execution-cache.js +49 -1
  116. package/dist/commands/rename-input.js +22 -1
  117. package/dist/commands/rename-polling-policy.js +68 -0
  118. package/dist/commands/rename-preview-cache.js +96 -2
  119. package/dist/commands/result-view.js +993 -7
  120. package/dist/commands/reveal-command.js +445 -5
  121. package/dist/commands/selector-suggestions.js +93 -0
  122. package/dist/commands/session-workspace.js +1836 -31
  123. package/dist/commands/shared.js +2 -1
  124. package/dist/commands/skills-command.js +315 -0
  125. package/dist/commands/sync-command.js +59 -2
  126. package/dist/commands/worker-command.js +173 -1
  127. package/dist/commands/workspace-cache.js +55 -1
  128. package/dist/config/defaults.js +26 -1
  129. package/dist/config/env-vars.js +77 -1
  130. package/dist/config/glob-match.js +44 -1
  131. package/dist/config/import-rules.js +165 -1
  132. package/dist/config/local-config.js +293 -3
  133. package/dist/config/mutation-comments.js +51 -1
  134. package/dist/config/path-aliases.js +165 -1
  135. package/dist/config/path-display.js +84 -1
  136. package/dist/config/product-storage.js +37 -1
  137. package/dist/config/request-env.js +21 -0
  138. package/dist/config/request-routing-context.js +23 -0
  139. package/dist/config/resolve-command-alias.js +74 -1
  140. package/dist/config/resolve.js +24 -1
  141. package/dist/config/tsconfig-discovery.js +113 -1
  142. package/dist/config/typescript-preferences.js +131 -0
  143. package/dist/config/workspace-root.js +310 -3
  144. package/dist/config/workspace-state.js +254 -1
  145. package/dist/content/content-bundle.js +88 -1
  146. package/dist/diagnostics/module-plan-timeline.js +75 -2
  147. package/dist/diagnostics/readiness-text.js +45 -8
  148. package/dist/dsl/aib-dsl.js +838 -1
  149. package/dist/dsl/declaration-dsl.js +264 -1
  150. package/dist/dsl/file-move-to-dir-dsl.js +123 -1
  151. package/dist/dsl/file-refactor-batch-dsl.js +203 -1
  152. package/dist/dsl/file-rename-dsl.js +135 -1
  153. package/dist/dsl/mutate-dsl.js +746 -0
  154. package/dist/help/bootstrap.bash.md +176 -341
  155. package/dist/help/bootstrap.md +175 -340
  156. package/dist/help/bootstrap.pwsh.md +176 -341
  157. package/dist/help/docs/basics.md +1 -1
  158. package/dist/help/docs/config-setup.import-normalize.md +65 -65
  159. package/dist/help/docs/config-setup.import-rules.md +6 -5
  160. package/dist/help/docs/first-setup.md +6 -5
  161. package/dist/help/docs/help-protocol.md +4 -3
  162. package/dist/help/docs/import.base.md +38 -0
  163. package/dist/help/docs/import.rebase.md +85 -0
  164. package/dist/help/docs/inspect.aliasCandidates.md +39 -0
  165. package/dist/help/docs/inspect.code.md +1 -7
  166. package/dist/help/docs/inspect.file.md +10 -19
  167. package/dist/help/docs/inspect.graph.md +3 -17
  168. package/dist/help/{dsl/docs/inspect.md → docs/inspect.shared.md} +13 -12
  169. package/dist/help/docs/modulePlan.md +24 -28
  170. package/dist/help/docs/move.md +19 -22
  171. package/dist/help/{dsl/topics/file.move.md → docs/moveToDir.md} +36 -34
  172. package/dist/help/docs/mutate.mixed.md +34 -0
  173. package/dist/help/docs/mutation.shared.md +55 -0
  174. package/dist/help/docs/patterns.md +3 -12
  175. package/dist/help/docs/qr.md +12 -6
  176. package/dist/help/docs/quick-map.md +36 -24
  177. package/dist/help/docs/recipe.file-layout.md +10 -10
  178. package/dist/help/docs/recipe.import-boundary.md +92 -0
  179. package/dist/help/docs/recipe.safe-artifact-probing.md +68 -0
  180. package/dist/help/docs/recipe.unfamiliar-area.md +64 -0
  181. package/dist/help/docs/recipes.md +20 -0
  182. package/dist/help/docs/rename.md +19 -27
  183. package/dist/help/docs/renameFile.md +36 -0
  184. package/dist/help/docs/rules.md +26 -0
  185. package/dist/help/dsl/bootstrap.bash.md +176 -341
  186. package/dist/help/dsl/bootstrap.md +175 -340
  187. package/dist/help/dsl/bootstrap.pwsh.md +176 -341
  188. package/dist/help/dsl/docs/basics.md +1 -1
  189. package/dist/help/dsl/docs/config-setup.import-normalize.md +65 -65
  190. package/dist/help/dsl/docs/config-setup.import-rules.md +6 -5
  191. package/dist/help/dsl/docs/first-setup.md +6 -5
  192. package/dist/help/dsl/docs/help-protocol.md +4 -3
  193. package/dist/help/dsl/docs/import.base.md +38 -0
  194. package/dist/help/dsl/docs/import.rebase.md +85 -0
  195. package/dist/help/dsl/docs/inspect.aliasCandidates.md +39 -0
  196. package/dist/help/dsl/docs/inspect.code.md +1 -7
  197. package/dist/help/dsl/docs/inspect.file.md +10 -19
  198. package/dist/help/dsl/docs/inspect.graph.md +3 -17
  199. package/dist/help/{docs/inspect.md → dsl/docs/inspect.shared.md} +13 -12
  200. package/dist/help/dsl/docs/modulePlan.md +24 -28
  201. package/dist/help/dsl/docs/move.md +19 -22
  202. package/dist/help/{topics/file.move.md → dsl/docs/moveToDir.md} +36 -34
  203. package/dist/help/dsl/docs/mutate.mixed.md +34 -0
  204. package/dist/help/dsl/docs/mutation.shared.md +55 -0
  205. package/dist/help/dsl/docs/patterns.md +3 -12
  206. package/dist/help/dsl/docs/qr.md +12 -6
  207. package/dist/help/dsl/docs/quick-map.md +36 -24
  208. package/dist/help/dsl/docs/recipe.file-layout.md +10 -10
  209. package/dist/help/dsl/docs/recipe.import-boundary.md +92 -0
  210. package/dist/help/dsl/docs/recipe.safe-artifact-probing.md +68 -0
  211. package/dist/help/dsl/docs/recipe.unfamiliar-area.md +64 -0
  212. package/dist/help/dsl/docs/recipes.md +20 -0
  213. package/dist/help/dsl/docs/rename.md +19 -27
  214. package/dist/help/dsl/docs/renameFile.md +36 -0
  215. package/dist/help/dsl/docs/rules.md +26 -0
  216. package/dist/help/dsl/full.md +175 -340
  217. package/dist/help/dsl/help-index.md +48 -43
  218. package/dist/help/dsl/snippets/agents.md +2 -2
  219. package/dist/help/dsl/tokens/qr.inline.examples.md +1 -1
  220. package/dist/help/dsl/topics/basics.md +1 -1
  221. package/dist/help/dsl/topics/config-setup.import-normalize.md +65 -65
  222. package/dist/help/dsl/topics/config-setup.import-rules.md +6 -5
  223. package/dist/help/dsl/topics/first-setup.md +6 -5
  224. package/dist/help/dsl/topics/help-protocol.md +4 -3
  225. package/dist/help/dsl/topics/import.base.md +36 -0
  226. package/dist/help/dsl/topics/import.rebase.md +83 -0
  227. package/dist/help/dsl/topics/inspect.aliasCandidates.md +37 -0
  228. package/dist/help/dsl/topics/inspect.code.md +1 -7
  229. package/dist/help/dsl/topics/inspect.file.md +10 -19
  230. package/dist/help/dsl/topics/inspect.graph.md +3 -17
  231. package/dist/help/dsl/topics/{inspect.md → inspect.shared.md} +13 -12
  232. package/dist/help/dsl/topics/modulePlan.md +21 -26
  233. package/dist/help/dsl/topics/move.md +17 -18
  234. package/dist/help/{docs/file.move.md → dsl/topics/moveToDir.md} +33 -35
  235. package/dist/help/dsl/topics/mutate.mixed.md +32 -0
  236. package/dist/help/dsl/topics/mutation.shared.md +53 -0
  237. package/dist/help/dsl/topics/patterns.md +3 -12
  238. package/dist/help/dsl/topics/qr.md +12 -6
  239. package/dist/help/dsl/topics/quick-map.md +36 -24
  240. package/dist/help/dsl/topics/recipe.file-layout.md +10 -10
  241. package/dist/help/dsl/topics/recipe.import-boundary.md +90 -0
  242. package/dist/help/dsl/topics/recipe.safe-artifact-probing.md +66 -0
  243. package/dist/help/dsl/topics/recipe.unfamiliar-area.md +62 -0
  244. package/dist/help/dsl/topics/recipes.md +18 -0
  245. package/dist/help/dsl/topics/rename.md +15 -15
  246. package/dist/help/dsl/topics/renameFile.md +34 -0
  247. package/dist/help/dsl/topics/rules.md +24 -0
  248. package/dist/help/full.md +175 -340
  249. package/dist/help/help-index.md +48 -43
  250. package/dist/help/help-meta.json +98 -48
  251. package/dist/help/index.md +52 -20
  252. package/dist/help/snippets/agents.md +2 -2
  253. package/dist/help/tokens/qr.inline.examples.md +1 -1
  254. package/dist/help/topics/basics.md +1 -1
  255. package/dist/help/topics/config-setup.import-normalize.md +65 -65
  256. package/dist/help/topics/config-setup.import-rules.md +6 -5
  257. package/dist/help/topics/first-setup.md +6 -5
  258. package/dist/help/topics/help-protocol.md +4 -3
  259. package/dist/help/topics/import.base.md +36 -0
  260. package/dist/help/topics/import.rebase.md +83 -0
  261. package/dist/help/topics/inspect.aliasCandidates.md +37 -0
  262. package/dist/help/topics/inspect.code.md +1 -7
  263. package/dist/help/topics/inspect.file.md +10 -19
  264. package/dist/help/topics/inspect.graph.md +3 -17
  265. package/dist/help/topics/{inspect.md → inspect.shared.md} +13 -12
  266. package/dist/help/topics/modulePlan.md +21 -26
  267. package/dist/help/topics/move.md +17 -18
  268. package/dist/help/{dsl/docs/file.move.md → topics/moveToDir.md} +33 -35
  269. package/dist/help/topics/mutate.mixed.md +32 -0
  270. package/dist/help/topics/mutation.shared.md +53 -0
  271. package/dist/help/topics/patterns.md +3 -12
  272. package/dist/help/topics/qr.md +12 -6
  273. package/dist/help/topics/quick-map.md +36 -24
  274. package/dist/help/topics/recipe.file-layout.md +10 -10
  275. package/dist/help/topics/recipe.import-boundary.md +90 -0
  276. package/dist/help/topics/recipe.safe-artifact-probing.md +66 -0
  277. package/dist/help/topics/recipe.unfamiliar-area.md +62 -0
  278. package/dist/help/topics/recipes.md +18 -0
  279. package/dist/help/topics/rename.md +15 -15
  280. package/dist/help/topics/renameFile.md +34 -0
  281. package/dist/help/topics/rules.md +24 -0
  282. package/dist/host/capabilities.js +56 -1
  283. package/dist/imports/standalone-import-analysis.js +602 -0
  284. package/dist/imports/standalone-import-model.js +2 -0
  285. package/dist/imports/standalone-import-process.js +66 -0
  286. package/dist/imports/standalone-import-worker.js +27 -0
  287. package/dist/imports/standalone-ts-project.js +147 -0
  288. package/dist/inspect/inspect-duplicates-service.js +526 -0
  289. package/dist/inspect/inspect-reverse-module-closure.js +338 -0
  290. package/dist/inspect/inspect-source-ranges.js +82 -0
  291. package/dist/inspect/inspect-source-shape.js +649 -0
  292. package/dist/inspect/standalone-inspect-analysis.js +319 -0
  293. package/dist/inspect/standalone-inspect-model.js +9 -0
  294. package/dist/inspect/standalone-inspect-process.js +55 -0
  295. package/dist/inspect/standalone-inspect-usages.js +274 -0
  296. package/dist/inspect/standalone-inspect-worker.js +13 -0
  297. package/dist/metrics/central-metrics.js +101 -2
  298. package/dist/mutation/concrete-edit-plan.js +157 -0
  299. package/dist/mutation/exports-star-collapse-preview.js +361 -0
  300. package/dist/mutation/exports-star-expand-apply.js +373 -0
  301. package/dist/mutation/exports-star-expand-preview.js +807 -0
  302. package/dist/mutation/file-impact-scan.js +182 -0
  303. package/dist/mutation/file-mutation-discovery.js +674 -0
  304. package/dist/mutation/file-mutation-eta.js +99 -0
  305. package/dist/mutation/file-mutation-standalone-apply.js +584 -0
  306. package/dist/mutation/file-mutation-standalone-planner.js +500 -0
  307. package/dist/mutation/file-mutation-tsserver-session.js +473 -0
  308. package/dist/mutation/mutation-estimate.js +45 -0
  309. package/dist/mutation/mutation-plan.js +467 -0
  310. package/dist/mutation/object-mutation-foundation.js +2 -0
  311. package/dist/mutation/object-mutation-partition.js +148 -0
  312. package/dist/mutation/object-pack-semantic-apply.js +507 -0
  313. package/dist/mutation/object-pack-semantic-preview.js +984 -0
  314. package/dist/mutation/object-unpack-semantic-preview.js +993 -0
  315. package/dist/mutation/package-manifest-impact.js +176 -0
  316. package/dist/mutation/rename-owner-worker-child.js +37 -0
  317. package/dist/mutation/rename-owner-worker.js +122 -0
  318. package/dist/mutation/runtime-cycle-query.js +66 -0
  319. package/dist/mutation/semantic-execution-progress.js +63 -0
  320. package/dist/mutation/semantic-export-index.js +474 -0
  321. package/dist/mutation/semantic-impact-scan.js +434 -0
  322. package/dist/mutation/semantic-model.js +2 -0
  323. package/dist/mutation/semantic-move-best-effort-planner.js +209 -0
  324. package/dist/mutation/semantic-move-config-worker-child.js +61 -0
  325. package/dist/mutation/semantic-move-config-worker.js +449 -0
  326. package/dist/mutation/semantic-move-declarations.js +94 -0
  327. package/dist/mutation/semantic-move-metrics.js +119 -0
  328. package/dist/mutation/semantic-move-model.js +2 -0
  329. package/dist/mutation/semantic-move-owner-authority.js +122 -0
  330. package/dist/mutation/semantic-move-owner-candidates.js +300 -0
  331. package/dist/mutation/semantic-move-owner-divergence-harness.js +474 -0
  332. package/dist/mutation/semantic-move-owner-divergence-runner.js +162 -0
  333. package/dist/mutation/semantic-move-plan-hash.js +56 -0
  334. package/dist/mutation/semantic-move-policy.js +360 -0
  335. package/dist/mutation/semantic-move-process.js +218 -0
  336. package/dist/mutation/semantic-move-provider-diagnostics.js +27 -0
  337. package/dist/mutation/semantic-move-standalone-engine.js +919 -0
  338. package/dist/mutation/semantic-move-standalone-planner.js +1553 -0
  339. package/dist/mutation/semantic-move-transaction.js +639 -0
  340. package/dist/mutation/semantic-mutation-engine.js +478 -0
  341. package/dist/mutation/semantic-mutation-runtime.js +521 -0
  342. package/dist/mutation/semantic-planner-retry.js +26 -0
  343. package/dist/mutation/semantic-program-roots.js +69 -0
  344. package/dist/mutation/semantic-rename-commonjs.js +229 -0
  345. package/dist/mutation/semantic-rename-config-worker-child.js +46 -0
  346. package/dist/mutation/semantic-rename-config-worker.js +498 -0
  347. package/dist/mutation/semantic-rename-locations.js +192 -0
  348. package/dist/mutation/semantic-rename-model.js +2 -0
  349. package/dist/mutation/semantic-rename-process.js +217 -0
  350. package/dist/mutation/semantic-rename-standalone-engine.js +302 -0
  351. package/dist/mutation/semantic-rename-standalone-planner.js +567 -0
  352. package/dist/mutation/semantic-rename-transaction.js +333 -0
  353. package/dist/mutation/semantic-unused-import-cleanup.js +248 -0
  354. package/dist/mutation/semantic-worker-retry.js +40 -0
  355. package/dist/mutation/semantic-workspace.js +804 -0
  356. package/dist/mutation/targeted-import-canonicalizer.js +359 -0
  357. package/dist/observability/config.js +206 -1
  358. package/dist/observability/context.js +59 -1
  359. package/dist/observability/failure-snapshot.js +124 -2
  360. package/dist/observability/recent.js +63 -2
  361. package/dist/payloads/read-stdin-json.js +212 -1
  362. package/dist/rg-wrapper/core.js +714 -6
  363. package/dist/rg-wrapper/options.js +125 -1
  364. package/dist/rtk-wrapper/core.js +144 -2
  365. package/dist/rtk-wrapper/git-safety.js +203 -0
  366. package/dist/rtk-wrapper/output-adapter.js +106 -0
  367. package/dist/runtime/buffered-process.js +114 -0
  368. package/dist/runtime/bundled-node.js +97 -1
  369. package/dist/runtime/command-lifecycle.js +2 -0
  370. package/dist/runtime/input-source.js +238 -1
  371. package/dist/runtime/node-cli-identity.js +37 -0
  372. package/dist/runtime/run-command.js +191 -1
  373. package/dist/selectors/parse-entities.js +84 -1
  374. package/dist/semantic/semantic-context-pool.js +830 -0
  375. package/dist/semantic/semantic-context-provider.js +416 -0
  376. package/dist/semantic/semantic-resident-admission.js +38 -0
  377. package/dist/semantic/semantic-worker-child.js +40 -0
  378. package/dist/semantic/semantic-worker-manager.js +460 -0
  379. package/dist/semantic/semantic-worker-protocol.js +2 -0
  380. package/dist/semantic/semantic-worker-runtime.js +38 -0
  381. package/dist/semantic/workspace-semantic-context-pools.js +136 -0
  382. package/dist/session/client.js +359 -1
  383. package/dist/session/daemon-state.js +185 -2
  384. package/dist/session/external-tool-coordinator.js +88 -0
  385. package/dist/session/external-tool-request.js +52 -0
  386. package/dist/session/lane-owner.js +116 -0
  387. package/dist/session/paths.js +71 -1
  388. package/dist/session/runtime-lifecycle.js +225 -0
  389. package/dist/session/runtime-shutdown.js +95 -0
  390. package/dist/session/server.js +1194 -7
  391. package/dist/session/session-health.js +27 -0
  392. package/dist/shared/agent-text.js +29 -1
  393. package/dist/shared/errors.js +496 -30
  394. package/dist/shared/event-loop.js +6 -1
  395. package/dist/shared/hints.js +37 -1
  396. package/dist/shared/metrics.js +43 -1
  397. package/dist/shared/presentation.js +69 -4
  398. package/dist/shared/stdin-examples.js +77 -1
  399. package/dist/shared/stdout.js +6 -2
  400. package/dist/shared/types.js +23 -1
  401. package/dist/tool-runtime/runtime-tools.js +120 -1
  402. package/dist/topology/availability.js +663 -0
  403. package/dist/topology/cache.js +130 -0
  404. package/dist/topology/candidates.js +372 -0
  405. package/dist/topology/core.js +903 -0
  406. package/dist/topology/dependency-snapshot.js +189 -0
  407. package/dist/topology/model.js +2 -0
  408. package/dist/topology/scope.js +100 -0
  409. package/dist/topology/ts-oracle-batch.js +529 -0
  410. package/dist/topology/ts-oracle-host.js +69 -0
  411. package/dist/topology/ts-oracle-model.js +2 -0
  412. package/dist/topology/ts-oracle.js +224 -0
  413. package/dist/topology/tsconfig-loader.js +105 -0
  414. package/dist/topology/workspace-project-index.js +542 -0
  415. package/dist/tracing/config.js +192 -2
  416. package/dist/tracing/failure-summary.js +100 -0
  417. package/dist/tracing/trace.js +318 -5
  418. package/dist/tsc-wrapper/core.js +697 -0
  419. package/dist/workers/control-plane/aib-control-plane-worker.cjs +32 -32
  420. package/dist/workers/control-plane/client-config.default.json +3 -3
  421. package/dist/workers/lexical-worker-child.js +27 -0
  422. package/dist/workers/lexical-worker-manager.js +394 -0
  423. package/dist/workers/lexical-worker-protocol.js +2 -0
  424. package/dist/workers/lexical-worker-runtime.js +25 -0
  425. package/dist/workers/owned-one-shot-process.js +115 -0
  426. package/dist/workers/product-storage.js +23 -1
  427. package/dist/workers/registry.js +241 -1
  428. package/package.json +8 -13
  429. package/scripts/postinstall.cjs +29 -29
  430. package/scripts/provision-runtime.cjs +411 -459
  431. package/dist/client/http-client.js +0 -1
  432. package/dist/client/transport-options.js +0 -1
  433. package/dist/client/websocket-client.js +0 -1
  434. package/dist/commands/entity-resolution.js +0 -1
  435. package/dist/commands/file-command.js +0 -1
  436. package/dist/commands/host-command.js +0 -1
  437. package/dist/commands/inspect-symbol-query.js +0 -1
  438. package/dist/commands/list-instances.js +0 -1
  439. package/dist/commands/module-plan-command.js +0 -1
  440. package/dist/commands/move-command.js +0 -1
  441. package/dist/commands/move-to-file.js +0 -2
  442. package/dist/commands/ping.js +0 -1
  443. package/dist/commands/refactor-command.js +0 -1
  444. package/dist/commands/rename-command.js +0 -1
  445. package/dist/commands/runtime-command.js +0 -4
  446. package/dist/commands/runtime-info.js +0 -1
  447. package/dist/commands/validate-module-plan.js +0 -2
  448. package/dist/compatibility/policy.js +0 -1
  449. package/dist/config/auto-start-ide.js +0 -1
  450. package/dist/discovery/registry.js +0 -1
  451. package/dist/discovery/select-instance.js +0 -1
  452. package/dist/help/docs/file.rename.md +0 -35
  453. package/dist/help/docs/mutation.md +0 -60
  454. package/dist/help/docs/refactor.batch.md +0 -44
  455. package/dist/help/dsl/docs/file.rename.md +0 -35
  456. package/dist/help/dsl/docs/mutation.md +0 -60
  457. package/dist/help/dsl/docs/refactor.batch.md +0 -44
  458. package/dist/help/dsl/topics/file.rename.md +0 -33
  459. package/dist/help/dsl/topics/mutation.md +0 -58
  460. package/dist/help/dsl/topics/refactor.batch.md +0 -33
  461. package/dist/help/topics/file.rename.md +0 -33
  462. package/dist/help/topics/mutation.md +0 -58
  463. package/dist/help/topics/refactor.batch.md +0 -33
  464. package/dist/ide-launch/common.cjs +0 -162
  465. package/dist/managed-host/extension-vsix-resolver.js +0 -1
  466. package/dist/managed-host/manage-serve-web-host.cjs +0 -141
  467. package/dist/managed-host/serve-web-autostart.js +0 -1
  468. package/dist/managed-host/serve-web-host.cjs +0 -2115
  469. package/dist/runtime/managed-runtime-provisioning.js +0 -1
  470. package/dist/shared/diagnostic-catalog.js +0 -1
  471. package/dist/shared/diagnostics.js +0 -1
  472. package/dist/shared/operations.js +0 -1
  473. package/dist/shared/protocol.js +0 -1
  474. package/dist/shared/routes.js +0 -1
  475. package/extension/vscode-refactor-bridge-extension.vsix +0 -0
  476. package/runtimes/launcher/linux-x64/aib +0 -0
  477. package/runtimes/launcher/win-x64/aib.exe +0 -0
@@ -0,0 +1,805 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.AGENT_DX_TESTING = void 0;
37
+ exports.collectUnknownFlagSignal = collectUnknownFlagSignal;
38
+ exports.recordAgentDxObservation = recordAgentDxObservation;
39
+ exports.collectAgentDxObservationSignals = collectAgentDxObservationSignals;
40
+ exports.applyAgentDxSignals = applyAgentDxSignals;
41
+ const node_crypto_1 = require("node:crypto");
42
+ const fs = __importStar(require("node:fs"));
43
+ const path = __importStar(require("node:path"));
44
+ const product_storage_1 = require("../config/product-storage");
45
+ const env_vars_1 = require("../config/env-vars");
46
+ const session_workspace_1 = require("../commands/session-workspace");
47
+ const presentation_1 = require("./presentation");
48
+ const AGENT_TEXT_FIELD = "__aibText";
49
+ function collectUnknownFlagSignal(input) {
50
+ const valueFlags = input.valueFlags ?? new Set();
51
+ const unknownFlags = [];
52
+ for (let index = 0; index < input.args.length; index += 1) {
53
+ const current = input.args[index] ?? "";
54
+ if (!current.startsWith("-") || current === "--") {
55
+ continue;
56
+ }
57
+ if (input.knownFlags.has(current)) {
58
+ if (valueFlags.has(current)) {
59
+ index += 1;
60
+ }
61
+ continue;
62
+ }
63
+ unknownFlags.push(current);
64
+ }
65
+ if (unknownFlags.length === 0) {
66
+ return null;
67
+ }
68
+ return {
69
+ kind: "unknownFlag",
70
+ command: input.command,
71
+ flags: uniqueStrings(unknownFlags),
72
+ ...(input.helpRefs ? { helpRefs: input.helpRefs } : {}),
73
+ ...(input.suggestions ? { suggestions: input.suggestions } : {})
74
+ };
75
+ }
76
+ function recordAgentDxObservation(cwd, observation) {
77
+ collectAgentDxObservationSignals(cwd, observation);
78
+ }
79
+ function collectAgentDxObservationSignals(cwd, observation) {
80
+ const policy = resolveAgentDxPolicy();
81
+ const state = readAgentDxState(cwd);
82
+ const nowMs = Date.now();
83
+ const stored = {
84
+ ...observation,
85
+ targets: observation.targets.filter((target) => target.length > 0).slice(0, 20),
86
+ atMs: nowMs
87
+ };
88
+ state.observations = trimObservations([...state.observations, stored], nowMs, policy);
89
+ state.updatedAt = new Date(nowMs).toISOString();
90
+ const signals = buildObservationSignals(state, stored, nowMs, policy);
91
+ writeAgentDxState(state);
92
+ return signals;
93
+ }
94
+ function applyAgentDxSignals(cwd, response, signals) {
95
+ const persistentSignals = mergeAgentDxSignals(signals.filter((signal) => Boolean(signal)));
96
+ if (persistentSignals.length === 0) {
97
+ return response;
98
+ }
99
+ const state = readAgentDxState(cwd);
100
+ const now = new Date().toISOString();
101
+ for (const signal of persistentSignals) {
102
+ const key = signalKey(signal);
103
+ const item = state.signals[key] ?? {
104
+ count: 0,
105
+ firstSeenAt: now,
106
+ lastSeenAt: now,
107
+ shownCount: 0
108
+ };
109
+ item.count += 1;
110
+ item.lastSeenAt = now;
111
+ if (buildReminder(signal)) {
112
+ item.shownCount += 1;
113
+ item.lastShownAt = now;
114
+ }
115
+ state.signals[key] = item;
116
+ }
117
+ state.updatedAt = now;
118
+ writeAgentDxState(state);
119
+ const reminders = buildReminders(mergeAgentDxResponseSignals(persistentSignals));
120
+ if (reminders.length === 0) {
121
+ return response;
122
+ }
123
+ const nextResponse = {
124
+ ...response,
125
+ agentDx: {
126
+ schemaVersion: 1,
127
+ reminders: reminders.map((reminder) => ({
128
+ kind: reminder.kind,
129
+ level: reminder.level,
130
+ command: reminder.command,
131
+ flags: reminder.flags,
132
+ textLines: reminder.textLines,
133
+ ...(reminder.helpRefs ? { helpRefs: reminder.helpRefs } : {}),
134
+ ...(reminder.suggestions ? { suggestions: reminder.suggestions } : {})
135
+ }))
136
+ }
137
+ };
138
+ const existingText = nextResponse[AGENT_TEXT_FIELD];
139
+ if (typeof existingText === "string" && existingText !== "") {
140
+ nextResponse[AGENT_TEXT_FIELD] = (0, presentation_1.appendAgentDxText)(existingText, nextResponse);
141
+ }
142
+ return nextResponse;
143
+ }
144
+ function buildReminders(signals) {
145
+ const unknownSignals = signals.filter(isUnknownFlagSignal);
146
+ const inspectUnknown = unknownSignals.filter((signal) => signal.command.startsWith("inspect ") &&
147
+ signal.flags.length > 0);
148
+ const mutateUnknown = unknownSignals.filter((signal) => signal.command.startsWith("mutate ") &&
149
+ signal.flags.length > 0);
150
+ const inspectKeys = new Set(inspectUnknown.map((signal) => signalKey(signal)));
151
+ const mutateKeys = new Set(mutateUnknown.map((signal) => signalKey(signal)));
152
+ const reminders = signals
153
+ .filter((signal) => !inspectKeys.has(signalKey(signal)) && !mutateKeys.has(signalKey(signal)))
154
+ .map(buildReminder)
155
+ .filter((reminder) => reminder !== null);
156
+ if (inspectUnknown.length === 1) {
157
+ const reminder = buildReminder(inspectUnknown[0]);
158
+ if (reminder) {
159
+ reminders.push(reminder);
160
+ }
161
+ }
162
+ else if (inspectUnknown.length > 1) {
163
+ reminders.push(buildInspectUnknownFlagReminder(inspectUnknown));
164
+ }
165
+ if (mutateUnknown.length > 0) {
166
+ reminders.push(buildMutateUnknownFlagReminder(mutateUnknown));
167
+ }
168
+ return reminders;
169
+ }
170
+ function buildInspectUnknownFlagReminder(signals) {
171
+ const byFlags = new Map();
172
+ const helpRefs = mergeHelpRefs(...signals.map((signal) => signal.helpRefs));
173
+ for (const signal of signals) {
174
+ const flags = uniqueStrings(signal.flags);
175
+ const key = flags.join("\0");
176
+ const group = byFlags.get(key) ?? { flags, ops: [] };
177
+ const op = signal.command.slice("inspect ".length);
178
+ if (op && !group.ops.includes(op)) {
179
+ group.ops.push(op);
180
+ }
181
+ byFlags.set(key, group);
182
+ }
183
+ const helpTopics = uniqueStrings((helpRefs ?? []).map((ref) => ref.topic));
184
+ const textLines = [
185
+ "inspect request uses unsupported options:",
186
+ ...Array.from(byFlags.values()).map((group) => `${group.ops.join(", ")}: ${group.flags.join(" ")}`)
187
+ ];
188
+ if (helpTopics.length > 0) {
189
+ textLines.push(`Help: aib help ${helpTopics.join(" ")}`);
190
+ }
191
+ return {
192
+ kind: "unknownFlag",
193
+ level: "short",
194
+ command: "inspect request",
195
+ flags: uniqueStrings(signals.flatMap((signal) => signal.flags)),
196
+ textLines,
197
+ ...(helpRefs ? { helpRefs } : {})
198
+ };
199
+ }
200
+ function buildMutateUnknownFlagReminder(signals) {
201
+ const byFlags = new Map();
202
+ const helpRefs = mergeHelpRefs(...signals.map((signal) => signal.helpRefs));
203
+ for (const signal of signals) {
204
+ const flags = uniqueStrings(signal.flags);
205
+ const key = flags.join("\0");
206
+ const group = byFlags.get(key) ?? { flags, ops: [] };
207
+ const op = formatMutateUnknownFlagOperation(signal.command);
208
+ if (op && !group.ops.includes(op)) {
209
+ group.ops.push(op);
210
+ }
211
+ byFlags.set(key, group);
212
+ }
213
+ const helpTopics = uniqueStrings((helpRefs ?? []).map((ref) => ref.topic));
214
+ const textLines = [
215
+ "mutate preview uses unsupported options:",
216
+ ...Array.from(byFlags.values()).map((group) => `${group.ops.join(", ")}: ${group.flags.join(" ")}`)
217
+ ];
218
+ if (helpTopics.length > 0) {
219
+ textLines.push(`Help: aib help ${helpTopics.join(" ")}`);
220
+ }
221
+ return {
222
+ kind: "unknownFlag",
223
+ level: "short",
224
+ command: "mutate preview",
225
+ flags: uniqueStrings(signals.flatMap((signal) => signal.flags)),
226
+ textLines,
227
+ ...(helpRefs ? { helpRefs } : {})
228
+ };
229
+ }
230
+ function formatMutateUnknownFlagOperation(command) {
231
+ const op = command.slice("mutate ".length).trim();
232
+ switch (op) {
233
+ case "semantic rename":
234
+ return "rename";
235
+ case "semantic move":
236
+ return "move";
237
+ case "file moveToDir":
238
+ return "moveToDir";
239
+ case "file rename":
240
+ return "renameFile";
241
+ case "module":
242
+ return "module";
243
+ default:
244
+ return op;
245
+ }
246
+ }
247
+ function mergeAgentDxSignals(signals, keyForSignal = signalKey) {
248
+ const byCommand = new Map();
249
+ for (const signal of signals) {
250
+ const key = keyForSignal(signal);
251
+ const existing = byCommand.get(key);
252
+ if (!existing) {
253
+ byCommand.set(key, signal.kind === "unknownFlag" ? {
254
+ ...signal,
255
+ flags: uniqueStrings(signal.flags)
256
+ } : signal);
257
+ continue;
258
+ }
259
+ if (existing.kind !== "unknownFlag" || signal.kind !== "unknownFlag") {
260
+ continue;
261
+ }
262
+ existing.flags = uniqueStrings([...existing.flags, ...signal.flags]);
263
+ const helpRefs = mergeHelpRefs(existing.helpRefs, signal.helpRefs);
264
+ if (helpRefs) {
265
+ existing.helpRefs = helpRefs;
266
+ }
267
+ const suggestions = mergeSuggestions(existing.suggestions, signal.suggestions);
268
+ if (suggestions) {
269
+ existing.suggestions = suggestions;
270
+ }
271
+ }
272
+ return Array.from(byCommand.values());
273
+ }
274
+ function mergeAgentDxResponseSignals(signals) {
275
+ return mergeAgentDxSignals(signals, responseSignalKey);
276
+ }
277
+ function responseSignalKey(signal) {
278
+ return signal.kind === "unknownFlag"
279
+ ? `${signal.kind}:${signal.command}`
280
+ : signalKey(signal);
281
+ }
282
+ function isUnknownFlagSignal(signal) {
283
+ return signal.kind === "unknownFlag";
284
+ }
285
+ function mergeHelpRefs(...items) {
286
+ const merged = items.flatMap((item) => item ?? []);
287
+ if (merged.length === 0) {
288
+ return undefined;
289
+ }
290
+ const seen = new Set();
291
+ return merged.filter((item) => {
292
+ const key = `${item.topic}:${item.reason ?? ""}:${item.mode ?? ""}`;
293
+ if (seen.has(key)) {
294
+ return false;
295
+ }
296
+ seen.add(key);
297
+ return true;
298
+ });
299
+ }
300
+ function mergeSuggestions(left, right) {
301
+ const merged = [...(left ?? []), ...(right ?? [])];
302
+ if (merged.length === 0) {
303
+ return undefined;
304
+ }
305
+ const seen = new Set();
306
+ return merged.filter((item) => {
307
+ const key = item.command ?? item.text ?? "";
308
+ if (seen.has(key)) {
309
+ return false;
310
+ }
311
+ seen.add(key);
312
+ return true;
313
+ });
314
+ }
315
+ function buildReminder(signal) {
316
+ if (signal.kind === "batchSuggestion") {
317
+ return {
318
+ kind: "batchSuggestion",
319
+ level: "short",
320
+ command: signal.command,
321
+ flags: [],
322
+ textLines: [
323
+ `You called ${signal.command} ${signal.count} times in a row. Batch compatible reads:`,
324
+ signal.exampleCommand
325
+ ]
326
+ };
327
+ }
328
+ if (signal.kind === "inspectDslNudge") {
329
+ return {
330
+ kind: "inspectDslNudge",
331
+ level: "short",
332
+ command: `inspect ${signal.op}`,
333
+ flags: [],
334
+ textLines: formatInspectDslNudgeLines(signal)
335
+ };
336
+ }
337
+ if (signal.kind === "toolSuggestion") {
338
+ return {
339
+ kind: "toolSuggestion",
340
+ level: "short",
341
+ command: signal.command,
342
+ flags: [],
343
+ textLines: [
344
+ `You are reading many TS/JS files with ${signal.command}. Prefer focused inspect when you need symbols, imports, or code:`,
345
+ ...signal.suggestedCommands
346
+ ]
347
+ };
348
+ }
349
+ if (signal.kind !== "unknownFlag" || signal.flags.length === 0) {
350
+ return null;
351
+ }
352
+ const textLines = [
353
+ `${signal.command} does not support: ${signal.flags.join(" ")}`
354
+ ];
355
+ const suggestion = preferredSuggestion(signal.suggestions);
356
+ if (suggestion) {
357
+ textLines.push(suggestion);
358
+ }
359
+ const help = preferredHelp(signal.helpRefs);
360
+ if (help && suggestion !== `Use: aib help ${help.topic}`) {
361
+ textLines.push(`Help: aib help ${help.topic}`);
362
+ }
363
+ return {
364
+ kind: "unknownFlag",
365
+ level: "short",
366
+ command: signal.command,
367
+ flags: signal.flags,
368
+ textLines,
369
+ ...(signal.helpRefs ? { helpRefs: signal.helpRefs } : {}),
370
+ ...(signal.suggestions ? { suggestions: signal.suggestions } : {})
371
+ };
372
+ }
373
+ function formatInspectDslNudgeLines(signal) {
374
+ const intro = signal.reason === "repeatedInlineCalls"
375
+ ? `You called inspect ${signal.op} ${signal.callCount ?? signal.targets.length} times. Use inspect DSL for batched reads:`
376
+ : `You used inline multi-target inspect ${signal.op}. Prefer inspect DSL for grouped reads:`;
377
+ return [
378
+ intro,
379
+ "@'",
380
+ ...signal.exampleLines,
381
+ "'@ | aib inspect --stdin"
382
+ ];
383
+ }
384
+ function preferredSuggestion(suggestions) {
385
+ const sorted = (suggestions ?? []).slice().sort((left, right) => (left.priority ?? 100) - (right.priority ?? 100));
386
+ const first = sorted[0];
387
+ if (!first) {
388
+ return null;
389
+ }
390
+ if (first.command) {
391
+ return `Use: ${first.command}`;
392
+ }
393
+ return first.text ?? null;
394
+ }
395
+ function preferredHelp(helpRefs) {
396
+ const sorted = (helpRefs ?? []).slice().sort((left, right) => (left.priority ?? 100) - (right.priority ?? 100));
397
+ return sorted[0] ?? null;
398
+ }
399
+ function signalKey(signal) {
400
+ if (signal.kind === "batchSuggestion") {
401
+ return `${signal.kind}:${signal.command}:${signal.reason}`;
402
+ }
403
+ if (signal.kind === "toolSuggestion") {
404
+ return `${signal.kind}:${signal.command}:${signal.reason}`;
405
+ }
406
+ if (signal.kind === "inspectDslNudge") {
407
+ return `${signal.kind}:inspect:${signal.reason}:${signal.op}`;
408
+ }
409
+ return `${signal.kind}:${signal.command}:${signal.flags.slice().sort().join(",")}`;
410
+ }
411
+ exports.AGENT_DX_TESTING = {
412
+ buildReminders(signals) {
413
+ return buildReminders(mergeAgentDxResponseSignals(mergeAgentDxSignals(signals)));
414
+ }
415
+ };
416
+ function readAgentDxState(cwd) {
417
+ const scopeKey = agentDxScopeKey(cwd);
418
+ const file = agentDxStatePath(scopeKey);
419
+ try {
420
+ const parsed = JSON.parse(fs.readFileSync(file, "utf8"));
421
+ if (isObject(parsed) && parsed.version === 1 && parsed.scopeKey === scopeKey && isObject(parsed.signals)) {
422
+ return {
423
+ version: 1,
424
+ scopeKey,
425
+ updatedAt: typeof parsed.updatedAt === "string" ? parsed.updatedAt : new Date().toISOString(),
426
+ observations: Array.isArray(parsed.observations) ? normalizeObservations(parsed.observations) : [],
427
+ signals: normalizeSignals(parsed.signals)
428
+ };
429
+ }
430
+ }
431
+ catch {
432
+ // State is best-effort. Corrupt or missing state should not affect command behavior.
433
+ }
434
+ return {
435
+ version: 1,
436
+ scopeKey,
437
+ updatedAt: new Date().toISOString(),
438
+ observations: [],
439
+ signals: {}
440
+ };
441
+ }
442
+ function writeAgentDxState(state) {
443
+ try {
444
+ const file = agentDxStatePath(state.scopeKey);
445
+ fs.mkdirSync(path.dirname(file), { recursive: true });
446
+ fs.writeFileSync(file, `${JSON.stringify(state, null, 2)}\n`, "utf8");
447
+ }
448
+ catch {
449
+ // State is best-effort.
450
+ }
451
+ }
452
+ function agentDxStatePath(scopeKey) {
453
+ return path.join((0, product_storage_1.productStorageRoot)(), "agent-dx", `${safeFileName(scopeKey)}.json`);
454
+ }
455
+ function agentDxScopeKey(cwd) {
456
+ const session = (0, session_workspace_1.tryResolveCurrentSessionId)(cwd);
457
+ if (session.sessionId) {
458
+ return `session:${session.sessionId}`;
459
+ }
460
+ return `cwd:${hashText(path.resolve(cwd).toLowerCase())}`;
461
+ }
462
+ function normalizeSignals(value) {
463
+ const result = {};
464
+ for (const [key, raw] of Object.entries(value)) {
465
+ if (!isObject(raw)) {
466
+ continue;
467
+ }
468
+ result[key] = {
469
+ count: numberOrZero(raw.count),
470
+ firstSeenAt: typeof raw.firstSeenAt === "string" ? raw.firstSeenAt : new Date().toISOString(),
471
+ lastSeenAt: typeof raw.lastSeenAt === "string" ? raw.lastSeenAt : new Date().toISOString(),
472
+ shownCount: numberOrZero(raw.shownCount),
473
+ ...(typeof raw.lastShownAt === "string" ? { lastShownAt: raw.lastShownAt } : {})
474
+ };
475
+ }
476
+ return result;
477
+ }
478
+ function normalizeObservations(values) {
479
+ return values.flatMap((value) => {
480
+ if (!isObject(value)) {
481
+ return [];
482
+ }
483
+ const command = typeof value.command === "string" ? value.command : "";
484
+ const family = readObservationFamily(value.family);
485
+ const surface = readObservationSurface(value.surface);
486
+ const targets = Array.isArray(value.targets)
487
+ ? value.targets.filter((target) => typeof target === "string")
488
+ : [];
489
+ const atMs = typeof value.atMs === "number" && Number.isFinite(value.atMs) ? value.atMs : 0;
490
+ if (!command || !family || !surface || atMs <= 0) {
491
+ return [];
492
+ }
493
+ return [{
494
+ command,
495
+ family,
496
+ surface,
497
+ targets: targets.slice(0, 20),
498
+ batchable: value.batchable === true,
499
+ atMs
500
+ }];
501
+ });
502
+ }
503
+ function trimObservations(observations, nowMs, policy) {
504
+ return observations
505
+ .filter((observation) => nowMs - observation.atMs <= policy.storage.observationWindowMs)
506
+ .slice(-policy.storage.observationMaxCount);
507
+ }
508
+ function buildObservationSignals(state, current, nowMs, policy) {
509
+ if (current.command === "qr") {
510
+ return [
511
+ ...buildQrBatchSuggestionSignals(state, current, nowMs, policy),
512
+ ...buildQrOveruseSignals(state, current, nowMs, policy)
513
+ ];
514
+ }
515
+ if (current.family === "inspect") {
516
+ return buildInspectDslNudgeSignals(state, current, nowMs, policy);
517
+ }
518
+ return [];
519
+ }
520
+ function buildQrBatchSuggestionSignals(state, current, nowMs, policy) {
521
+ const config = policy.signals.repeatedQrBatch;
522
+ if (!config.enabled || current.surface !== "inline" || !current.batchable) {
523
+ return [];
524
+ }
525
+ const recent = state.observations
526
+ .filter((observation) => nowMs - observation.atMs <= config.windowMs)
527
+ .slice(-config.minCount);
528
+ if (recent.length < config.minCount || recent.some((observation) => observation.command !== "qr" ||
529
+ observation.surface !== "inline" ||
530
+ !observation.batchable ||
531
+ observation.targets.length === 0)) {
532
+ return [];
533
+ }
534
+ const signal = {
535
+ kind: "batchSuggestion",
536
+ command: "qr",
537
+ reason: "repeatedInline",
538
+ count: recent.length,
539
+ targets: uniqueStrings(recent.flatMap((observation) => observation.targets)).slice(0, 6),
540
+ exampleCommand: formatQrBatchExample(recent.flatMap((observation) => observation.targets), config.maxExampleItems, config.maxExampleChars),
541
+ windowMs: config.windowMs
542
+ };
543
+ const signalState = state.signals[signalKey(signal)];
544
+ if (signalState?.lastShownAt && nowMs - Date.parse(signalState.lastShownAt) < config.cooldownMs) {
545
+ return [];
546
+ }
547
+ return [signal];
548
+ }
549
+ function formatQrBatchExample(targets, maxItems, maxChars) {
550
+ const uniqueTargets = uniqueStrings(targets);
551
+ const selected = [];
552
+ for (const target of uniqueTargets) {
553
+ const candidate = `aib qr ${[...selected, target].join(" ")}`;
554
+ if (selected.length >= maxItems || (selected.length > 0 && candidate.length > maxChars)) {
555
+ break;
556
+ }
557
+ selected.push(target);
558
+ }
559
+ const hidden = Math.max(0, uniqueTargets.length - selected.length);
560
+ const suffix = hidden > 0 ? ` # +${hidden} more` : "";
561
+ return `aib qr ${selected.join(" ")}${suffix}`;
562
+ }
563
+ function buildInspectDslNudgeSignals(state, current, nowMs, policy) {
564
+ const config = policy.signals.inspectDslNudge;
565
+ if (!config.enabled || current.family !== "inspect" || current.surface !== "inline" || !current.batchable || current.targets.length === 0) {
566
+ return [];
567
+ }
568
+ const op = current.command.startsWith("inspect ") ? current.command.slice("inspect ".length) : "";
569
+ if (!op) {
570
+ return [];
571
+ }
572
+ if (current.targets.length > 1 && op !== "tree") {
573
+ const signal = buildInspectDslNudgeSignal({
574
+ reason: "inlineMultiTarget",
575
+ op,
576
+ targets: current.targets,
577
+ config
578
+ });
579
+ return shouldSuppressSignal(state, signal, nowMs, config.cooldownMs) ? [] : [signal];
580
+ }
581
+ const recent = state.observations
582
+ .filter((observation) => nowMs - observation.atMs <= config.windowMs &&
583
+ observation.command === current.command &&
584
+ observation.family === "inspect" &&
585
+ observation.surface === "inline" &&
586
+ observation.batchable &&
587
+ observation.targets.length > 0)
588
+ .slice(-config.minCount);
589
+ if (recent.length < config.minCount) {
590
+ return [];
591
+ }
592
+ const signal = buildInspectDslNudgeSignal({
593
+ reason: "repeatedInlineCalls",
594
+ op,
595
+ targets: recent.flatMap((observation) => observation.targets),
596
+ callCount: recent.length,
597
+ config
598
+ });
599
+ return shouldSuppressSignal(state, signal, nowMs, config.cooldownMs) ? [] : [signal];
600
+ }
601
+ function buildInspectDslNudgeSignal(input) {
602
+ const formatted = formatInspectDslExample(input.op, input.targets, input.config.maxExampleItems, input.config.maxExampleChars);
603
+ return {
604
+ kind: "inspectDslNudge",
605
+ reason: input.reason,
606
+ op: input.op,
607
+ targets: uniqueStrings(input.targets),
608
+ ...(input.callCount !== undefined ? { callCount: input.callCount } : {}),
609
+ exampleLines: formatted.lines,
610
+ hiddenCount: formatted.hiddenCount
611
+ };
612
+ }
613
+ function formatInspectDslExample(op, targets, maxItems, maxChars) {
614
+ const uniqueTargets = uniqueStrings(targets);
615
+ const lines = [];
616
+ for (const target of uniqueTargets) {
617
+ const nextLine = `${op} ${target}`;
618
+ const nextLines = [...lines, nextLine];
619
+ const nextLength = nextLines.join("\n").length;
620
+ if (lines.length >= maxItems || (lines.length > 0 && nextLength > maxChars)) {
621
+ break;
622
+ }
623
+ lines.push(nextLine);
624
+ }
625
+ const hiddenCount = Math.max(0, uniqueTargets.length - lines.length);
626
+ if (hiddenCount > 0) {
627
+ lines.push(`# +${hiddenCount} more`);
628
+ }
629
+ return { lines, hiddenCount };
630
+ }
631
+ function buildQrOveruseSignals(state, current, nowMs, policy) {
632
+ const config = policy.signals.qrOveruseTsJs;
633
+ if (!config.enabled || current.targets.filter(isCodeLikeTarget).length === 0) {
634
+ return [];
635
+ }
636
+ const recent = state.observations.filter((observation) => nowMs - observation.atMs <= config.windowMs);
637
+ const qrCodeTargets = recent
638
+ .filter((observation) => observation.command === "qr")
639
+ .flatMap((observation) => observation.targets.filter(isCodeLikeTarget));
640
+ const inspectCodeCount = recent.filter((observation) => observation.family === "inspect" &&
641
+ observation.targets.some(isCodeLikeTarget)).length;
642
+ if (qrCodeTargets.length < config.targetMinCount || inspectCodeCount > 0) {
643
+ return [];
644
+ }
645
+ const signal = {
646
+ kind: "toolSuggestion",
647
+ command: "qr",
648
+ reason: "qrOveruseTsJs",
649
+ observedCount: qrCodeTargets.length,
650
+ sampleTargets: uniqueStrings(qrCodeTargets.map(firstShellToken)).slice(0, 5),
651
+ suggestedCommands: [
652
+ "aib inspect file <file>",
653
+ "aib inspect imports <file>",
654
+ "aib inspect code <file> <selector>"
655
+ ]
656
+ };
657
+ const signalState = state.signals[signalKey(signal)];
658
+ if (signalState?.lastShownAt && nowMs - Date.parse(signalState.lastShownAt) < config.cooldownMs) {
659
+ return [];
660
+ }
661
+ return [signal];
662
+ }
663
+ function shouldSuppressSignal(state, signal, nowMs, cooldownMs) {
664
+ const signalState = state.signals[signalKey(signal)];
665
+ return Boolean(signalState?.lastShownAt && nowMs - Date.parse(signalState.lastShownAt) < cooldownMs);
666
+ }
667
+ let cachedAgentDxPolicy = null;
668
+ function resolveAgentDxPolicy() {
669
+ if (cachedAgentDxPolicy) {
670
+ return cachedAgentDxPolicy;
671
+ }
672
+ cachedAgentDxPolicy = readAgentDxPolicy();
673
+ return cachedAgentDxPolicy;
674
+ }
675
+ function readAgentDxPolicy() {
676
+ const raw = readAgentDxPolicyJson();
677
+ return mergeAgentDxPolicy(DEFAULT_AGENT_DX_POLICY, raw);
678
+ }
679
+ function readAgentDxPolicyJson() {
680
+ const paths = [
681
+ process.env[env_vars_1.CLI_ENV.agentDxPolicyConfig],
682
+ path.resolve(__dirname, "..", "..", "config", "agent-dx-policy.default.json")
683
+ ].filter((item) => typeof item === "string" && item.trim().length > 0);
684
+ for (const filePath of paths) {
685
+ try {
686
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
687
+ if (isObject(parsed)) {
688
+ return parsed;
689
+ }
690
+ }
691
+ catch {
692
+ // Policy config is best-effort; fall back to bundled defaults.
693
+ }
694
+ }
695
+ return null;
696
+ }
697
+ const DEFAULT_AGENT_DX_POLICY = {
698
+ schemaVersion: 1,
699
+ storage: {
700
+ observationWindowMs: 900000,
701
+ observationMaxCount: 200
702
+ },
703
+ signals: {
704
+ repeatedQrBatch: {
705
+ enabled: true,
706
+ windowMs: 3000,
707
+ minCount: 3,
708
+ cooldownMs: 600000,
709
+ maxExampleItems: 3,
710
+ maxExampleChars: 240
711
+ },
712
+ qrOveruseTsJs: {
713
+ enabled: true,
714
+ windowMs: 600000,
715
+ targetMinCount: 6,
716
+ cooldownMs: 900000
717
+ },
718
+ inspectDslNudge: {
719
+ enabled: true,
720
+ windowMs: 30000,
721
+ minCount: 3,
722
+ cooldownMs: 600000,
723
+ maxExampleItems: 3,
724
+ maxExampleChars: 320
725
+ }
726
+ }
727
+ };
728
+ function mergeAgentDxPolicy(base, raw) {
729
+ if (!raw) {
730
+ return base;
731
+ }
732
+ const storage = isObject(raw.storage) ? raw.storage : {};
733
+ const signals = isObject(raw.signals) ? raw.signals : {};
734
+ const repeatedQrBatch = isObject(signals.repeatedQrBatch) ? signals.repeatedQrBatch : {};
735
+ const qrOveruseTsJs = isObject(signals.qrOveruseTsJs) ? signals.qrOveruseTsJs : {};
736
+ const inspectDslNudge = isObject(signals.inspectDslNudge) ? signals.inspectDslNudge : {};
737
+ return {
738
+ schemaVersion: 1,
739
+ storage: {
740
+ observationWindowMs: readPositiveInteger(storage.observationWindowMs, base.storage.observationWindowMs),
741
+ observationMaxCount: readPositiveInteger(storage.observationMaxCount, base.storage.observationMaxCount)
742
+ },
743
+ signals: {
744
+ repeatedQrBatch: {
745
+ enabled: readBoolean(repeatedQrBatch.enabled, base.signals.repeatedQrBatch.enabled),
746
+ windowMs: readPositiveInteger(repeatedQrBatch.windowMs, base.signals.repeatedQrBatch.windowMs),
747
+ minCount: readPositiveInteger(repeatedQrBatch.minCount, base.signals.repeatedQrBatch.minCount),
748
+ cooldownMs: readPositiveInteger(repeatedQrBatch.cooldownMs, base.signals.repeatedQrBatch.cooldownMs),
749
+ maxExampleItems: readPositiveInteger(repeatedQrBatch.maxExampleItems, base.signals.repeatedQrBatch.maxExampleItems),
750
+ maxExampleChars: readPositiveInteger(repeatedQrBatch.maxExampleChars, base.signals.repeatedQrBatch.maxExampleChars)
751
+ },
752
+ qrOveruseTsJs: {
753
+ enabled: readBoolean(qrOveruseTsJs.enabled, base.signals.qrOveruseTsJs.enabled),
754
+ windowMs: readPositiveInteger(qrOveruseTsJs.windowMs, base.signals.qrOveruseTsJs.windowMs),
755
+ targetMinCount: readPositiveInteger(qrOveruseTsJs.targetMinCount, base.signals.qrOveruseTsJs.targetMinCount),
756
+ cooldownMs: readPositiveInteger(qrOveruseTsJs.cooldownMs, base.signals.qrOveruseTsJs.cooldownMs)
757
+ },
758
+ inspectDslNudge: {
759
+ enabled: readBoolean(inspectDslNudge.enabled, base.signals.inspectDslNudge.enabled),
760
+ windowMs: readPositiveInteger(inspectDslNudge.windowMs, base.signals.inspectDslNudge.windowMs),
761
+ minCount: readPositiveInteger(inspectDslNudge.minCount, base.signals.inspectDslNudge.minCount),
762
+ cooldownMs: readPositiveInteger(inspectDslNudge.cooldownMs, base.signals.inspectDslNudge.cooldownMs),
763
+ maxExampleItems: readPositiveInteger(inspectDslNudge.maxExampleItems, base.signals.inspectDslNudge.maxExampleItems),
764
+ maxExampleChars: readPositiveInteger(inspectDslNudge.maxExampleChars, base.signals.inspectDslNudge.maxExampleChars)
765
+ }
766
+ }
767
+ };
768
+ }
769
+ function readPositiveInteger(value, fallback) {
770
+ return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : fallback;
771
+ }
772
+ function readBoolean(value, fallback) {
773
+ return typeof value === "boolean" ? value : fallback;
774
+ }
775
+ function isCodeLikeTarget(target) {
776
+ return /\.(?:cjs|cts|js|jsx|mjs|mts|ts|tsx)(?:\s|$)/i.test(firstShellToken(target));
777
+ }
778
+ function firstShellToken(value) {
779
+ return value.trim().split(/\s+/, 1)[0] ?? "";
780
+ }
781
+ function readObservationFamily(value) {
782
+ return value === "read" || value === "inspect" || value === "mutation" || value === "view" || value === "other"
783
+ ? value
784
+ : null;
785
+ }
786
+ function readObservationSurface(value) {
787
+ return value === "inline" || value === "stdin-dsl" || value === "json" || value === "stdin-raw"
788
+ ? value
789
+ : null;
790
+ }
791
+ function safeFileName(value) {
792
+ return value.replace(/[^a-zA-Z0-9._-]+/g, "_").slice(0, 120);
793
+ }
794
+ function hashText(value) {
795
+ return (0, node_crypto_1.createHash)("sha256").update(value).digest("hex").slice(0, 16);
796
+ }
797
+ function uniqueStrings(values) {
798
+ return Array.from(new Set(values));
799
+ }
800
+ function numberOrZero(value) {
801
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
802
+ }
803
+ function isObject(value) {
804
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
805
+ }