@detergent-software/atk 8.7.0-dev.8 → 8.7.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 (94) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +44 -12
  3. package/build/commands/audit.d.ts.map +1 -1
  4. package/build/commands/audit.js +13 -4
  5. package/build/commands/audit.js.map +1 -1
  6. package/build/commands/install.d.ts.map +1 -1
  7. package/build/commands/install.js +77 -20
  8. package/build/commands/install.js.map +1 -1
  9. package/build/commands/schema.d.ts +1 -1
  10. package/build/commands/sync.js +2 -2
  11. package/build/commands/sync.js.map +1 -1
  12. package/build/commands/update.js +2 -2
  13. package/build/commands/update.js.map +1 -1
  14. package/build/components/CrossScopeWarning.d.ts +12 -0
  15. package/build/components/CrossScopeWarning.d.ts.map +1 -0
  16. package/build/components/CrossScopeWarning.js +13 -0
  17. package/build/components/CrossScopeWarning.js.map +1 -0
  18. package/build/components/index.d.ts +1 -0
  19. package/build/components/index.d.ts.map +1 -1
  20. package/build/components/index.js +1 -0
  21. package/build/components/index.js.map +1 -1
  22. package/build/hooks/useUninstallState.d.ts +11 -8
  23. package/build/hooks/useUninstallState.d.ts.map +1 -1
  24. package/build/hooks/useUninstallState.js +42 -11
  25. package/build/hooks/useUninstallState.js.map +1 -1
  26. package/build/lib/adapter.d.ts +2 -1
  27. package/build/lib/adapter.d.ts.map +1 -1
  28. package/build/lib/adapter.js +17 -13
  29. package/build/lib/adapter.js.map +1 -1
  30. package/build/lib/checksum.d.ts.map +1 -1
  31. package/build/lib/checksum.js +2 -1
  32. package/build/lib/checksum.js.map +1 -1
  33. package/build/lib/config-entries.d.ts +15 -2
  34. package/build/lib/config-entries.d.ts.map +1 -1
  35. package/build/lib/config-entries.js +20 -0
  36. package/build/lib/config-entries.js.map +1 -1
  37. package/build/lib/config-lock.d.ts.map +1 -1
  38. package/build/lib/config-lock.js +2 -1
  39. package/build/lib/config-lock.js.map +1 -1
  40. package/build/lib/cross-scope.d.ts +50 -0
  41. package/build/lib/cross-scope.d.ts.map +1 -0
  42. package/build/lib/cross-scope.js +132 -0
  43. package/build/lib/cross-scope.js.map +1 -0
  44. package/build/lib/diagnostics.d.ts +13 -0
  45. package/build/lib/diagnostics.d.ts.map +1 -1
  46. package/build/lib/diagnostics.js +44 -9
  47. package/build/lib/diagnostics.js.map +1 -1
  48. package/build/lib/diff-command.d.ts.map +1 -1
  49. package/build/lib/diff-command.js +4 -4
  50. package/build/lib/diff-command.js.map +1 -1
  51. package/build/lib/init.d.ts.map +1 -1
  52. package/build/lib/init.js +2 -1
  53. package/build/lib/init.js.map +1 -1
  54. package/build/lib/installed-for-tool.d.ts.map +1 -1
  55. package/build/lib/installed-for-tool.js +2 -2
  56. package/build/lib/installed-for-tool.js.map +1 -1
  57. package/build/lib/installer.d.ts.map +1 -1
  58. package/build/lib/installer.js +49 -39
  59. package/build/lib/installer.js.map +1 -1
  60. package/build/lib/mover.d.ts.map +1 -1
  61. package/build/lib/mover.js +2 -2
  62. package/build/lib/mover.js.map +1 -1
  63. package/build/lib/owned-paths.d.ts.map +1 -1
  64. package/build/lib/owned-paths.js +4 -4
  65. package/build/lib/owned-paths.js.map +1 -1
  66. package/build/lib/root-path.d.ts +7 -0
  67. package/build/lib/root-path.d.ts.map +1 -0
  68. package/build/lib/root-path.js +10 -0
  69. package/build/lib/root-path.js.map +1 -0
  70. package/build/lib/schemas/adapter.d.ts +21 -0
  71. package/build/lib/schemas/adapter.d.ts.map +1 -1
  72. package/build/lib/schemas/adapter.js +11 -0
  73. package/build/lib/schemas/adapter.js.map +1 -1
  74. package/build/lib/schemas/lockfile.d.ts.map +1 -1
  75. package/build/lib/schemas/lockfile.js +5 -3
  76. package/build/lib/schemas/lockfile.js.map +1 -1
  77. package/build/lib/sync.d.ts.map +1 -1
  78. package/build/lib/sync.js +19 -7
  79. package/build/lib/sync.js.map +1 -1
  80. package/build/lib/tool-resolver.d.ts +9 -0
  81. package/build/lib/tool-resolver.d.ts.map +1 -1
  82. package/build/lib/tool-resolver.js +26 -0
  83. package/build/lib/tool-resolver.js.map +1 -1
  84. package/build/lib/uninstaller.d.ts +26 -4
  85. package/build/lib/uninstaller.d.ts.map +1 -1
  86. package/build/lib/uninstaller.js +65 -21
  87. package/build/lib/uninstaller.js.map +1 -1
  88. package/build/lib/updater.d.ts.map +1 -1
  89. package/build/lib/updater.js +2 -2
  90. package/build/lib/updater.js.map +1 -1
  91. package/package.json +1 -1
  92. package/tool-adapters/claude-code.json +8 -0
  93. package/tool-adapters/codex-cli.json +5 -0
  94. package/tool-adapters/copilot-cli.json +9 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,109 @@
1
+ ## [8.7.0](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv8.6.1&targetVersion=GTv8.7.0) (2026-10-15)
2
+
3
+ ### Features
4
+
5
+ * **cli:** add Codex and Copilot CLI user placements (ATK-327) ([0b86e3f](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/0b86e3f6269944ff09aa966dba6b5728dc050e07))
6
+ * **cli:** fill in Copilot's required MCP tools list (ATK-327) ([dd3baef](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/dd3baef9dff3f9a93475cc0f5b274870133eea41))
7
+ * **cli:** move an install between the project and user scope (ATK-334) ([62ca125](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/62ca125c40e3170176039335179defc48a64352a))
8
+ * **cli:** name the scope in atk browse output (ATK-475) ([7a939ad](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/7a939ad070870362943a85384f6dabfe2af5ee42))
9
+ * **cli:** name the scope in install, uninstall, update and friends ([40d5307](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/40d5307e228a4745061bce2fede7104332085dac))
10
+ * **cli:** place user-scope assets with per-scope adapter placements ([44d8990](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/44d89907b5aad63aa2483962fd29c4a08e37fbc2))
11
+ * **cli:** show user installs beside the project in list and outdated ([7d6af83](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/7d6af8355f94824387440466d4736699373c9274))
12
+ * **cli:** warn when an asset is already installed at the other scope ([340136e](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/340136ef832353e7bbdf19a11d958124fc24695c))
13
+
14
+ ### Bug Fixes
15
+
16
+ * **cli:** base the cross-scope warning on what was installed ([99e12bb](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/99e12bbcb21ddd72d978349a69da38670bda27ba))
17
+ * **cli:** carry the user scope in fix-it hints and doctor ([5bda3f5](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/5bda3f58f866c099cb072ff50ff5ceaacfa59600))
18
+ * **cli:** create a new .claude.json private to its owner ([ad94489](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/ad944893acd45e58ec5eada111688ad6848373a3))
19
+ * **cli:** give Copilot user MCP stdio servers an empty args list (ATK-486) ([bd40014](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/bd4001458d11b4a0530e8212ae87e953b46abf88))
20
+ * **cli:** give doctor's hook-script check the scope root ([5b5dbd3](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/5b5dbd3dc3c4bbca55fed4d3a6f887ad356fb160))
21
+ * **cli:** give live sync the install hint for an empty lockfile ([216eb1b](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/216eb1b4399c45ad36a2ba164f1a0ca6bcfa2e02))
22
+ * **cli:** harden the .claude.json write and pass the scope from list ([d665ea3](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/d665ea31af4c54bb8707412252a2892a25b59cf1))
23
+ * **cli:** keep a moved MCP entry when the new file fails to merge (ATK-410) ([72044cd](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/72044cd6c16b92a7f9c1e45b12b764ae7610cf92))
24
+ * **cli:** keep a stale-command hook installed for rollback (ATK-501) ([aabcfa0](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/aabcfa0ca8101d160f32b1bda5fa987000ce5379))
25
+ * **cli:** keep a TOML config that only comments remain in ([9f27841](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/9f278410e1c9d2139d3baa4305189665d9959172))
26
+ * **cli:** keep config entries and tool names the user owns (ATK-487) ([39f59ec](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/39f59ec9102a7fb15f6a481e2ee5f3ac1275388d))
27
+ * **cli:** keep every tool's copy of an asset tracked (ATK-487) ([12d60f0](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/12d60f05bf7c9f8ea8dd49d796b3ac18ca4b828b))
28
+ * **cli:** keep list --json config-free and name the scope in prompts ([1667de1](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/1667de13d6c1ec0f785df42c000f2912a152a8e9))
29
+ * **cli:** keep the list cursor on its row after a two-scope refresh ([cd768ae](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/cd768ae3717705cda95509e3267fb6dcd351f0ee))
30
+ * **cli:** keep the user's comments when merging into a TOML config ([1cc1e1d](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/1cc1e1da8088c0af9c24414a27647b5ad0bbf985))
31
+ * **cli:** match browse's install line to its prompt (ATK-475) ([ebc1ee1](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/ebc1ee1218383069e4ac7561451cb75f0d04d967))
32
+ * **cli:** move a user-scope copy only when its placement moved (ATK-483) ([470554b](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/470554ba6186f2c9253c73097eacb7be54f3d825))
33
+ * **cli:** name atk setup --user in the remaining setup hints ([8dca428](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/8dca4280114a25dca20d362f5bcad3b458dc1f3d))
34
+ * **cli:** name no clash rule when the other scope has no tools ([755bd40](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/755bd40e7c46eabc8dc12f4bdae48a57fc7adaa4))
35
+ * **cli:** name the scope in the uninstall and prune prompts ([3f5570c](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/3f5570cddd2f9a35a13b7e23ad70aa449aacd41e))
36
+ * **cli:** name the scope when sync finds nothing installed ([825ac8b](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/825ac8b4d0f36b2112f0d8782e1b735d1f33ba9f))
37
+ * **cli:** name the variable's own value in the other-drive error (ATK-482) ([5a261bc](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/5a261bcc5bf1562cc91921ec3b666eb85ae3180c))
38
+ * **cli:** pass the scope from browse installs to the pin refusals ([87b66fb](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/87b66fb3a5e9081dc5a6772492fee1ca17c7c63e))
39
+ * **cli:** place Claude Code user assets in CLAUDE_CONFIG_DIR (ATK-470) ([ccf4890](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/ccf4890c191f47f481ecdd2d360eb9bbd0a34e4f))
40
+ * **cli:** place Codex and Copilot user assets in CODEX_HOME and XDG_CONFIG_HOME (ATK-482) ([ccd2b0a](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/ccd2b0a16c1df3695dafa50e122e122baf0f8bbd))
41
+ * **cli:** place Copilot MCP servers in .vscode/mcp.json (ATK-410) ([a2d981b](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/a2d981b5d91e03f2ad17d8aaecbae100839740d6))
42
+ * **cli:** place user assets in a config dir on another drive ([bbd61b7](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/bbd61b742582e61e6584fab4feff7b3713a40c2d))
43
+ * **cli:** plan the move under its locks and roll back per tool (ATK-334) ([e815fa9](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/e815fa9e61f27bac0cc25d4bcdca6d59f8e0f1e2))
44
+ * **cli:** re-place a hook placed with another scope's command (ATK-501) ([ef6f8d7](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/ef6f8d7a51be9349daf27d0309602d9cb5792ade))
45
+ * **cli:** read init's setup command only when a fork fails ([d7d20e6](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/d7d20e6efb0de164382f91399f69fc179387d7a1))
46
+ * **cli:** read VS Code-shaped MCP assets at Copilot's user scope (ATK-327) ([40cdca0](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/40cdca0b1f4fd3907863a1a5deac29838d9b1dc7))
47
+ * **cli:** refuse a network share config dir and fold drive case ([a6b8056](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/a6b8056ea00c2f7a2b1d9f2440bba954930a75d2))
48
+ * **cli:** refuse a relative CLAUDE_CONFIG_DIR (ATK-470) ([60c67dd](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/60c67ddc9b33becd1f83c8230dcff52982e702c4))
49
+ * **cli:** remove a moved user-scope copy only once the plan is in (ATK-483) ([7b533ea](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/7b533ea32feb8fc2e1e5581b8e97e6dd09accd25))
50
+ * **cli:** remove only ATK's files for the other tools an uninstall finds ([5a3b3ed](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/5a3b3eddc7e1b249da28ca8c068f153069ea5208))
51
+ * **cli:** remove user-scope copies where they were placed (ATK-483) ([5711cf8](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/5711cf81dc8416cf3e64909d0aa56de847e7b681))
52
+
53
+ ### Refactoring
54
+
55
+ * **cli:** build the stdio entry defaults once per merge (ATK-486) ([b3178a3](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/b3178a37f060283ea109a63e5e202748e98d6f57))
56
+
57
+ ### Documentation
58
+
59
+ * **cli:** document user-level installs in the README (ATK-332) ([ec7ccd6](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/ec7ccd640d630b29cb8b9cabafc388c528ce56fc))
60
+ * **cli:** say what sync does with moved config entries (ATK-410) ([eeb9855](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/eeb98558c746b264fc0ca0028e3c69667a6fe452))
61
+
62
+ ## [8.7.0-dev.13](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv8.7.0-dev.12&targetVersion=GTv8.7.0-dev.13) (2026-10-15)
63
+
64
+ ### Bug Fixes
65
+
66
+ * **cli:** give live sync the install hint for an empty lockfile ([216eb1b](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/216eb1b4399c45ad36a2ba164f1a0ca6bcfa2e02))
67
+ * **cli:** keep a stale-command hook installed for rollback (ATK-501) ([aabcfa0](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/aabcfa0ca8101d160f32b1bda5fa987000ce5379))
68
+ * **cli:** re-place a hook placed with another scope's command (ATK-501) ([ef6f8d7](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/ef6f8d7a51be9349daf27d0309602d9cb5792ade))
69
+
70
+ ## [8.7.0-dev.12](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv8.7.0-dev.11&targetVersion=GTv8.7.0-dev.12) (2026-10-15)
71
+
72
+ ### Documentation
73
+
74
+ * **cli:** document user-level installs in the README (ATK-332) ([ec7ccd6](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/ec7ccd640d630b29cb8b9cabafc388c528ce56fc))
75
+
76
+ ## [8.7.0-dev.11](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv8.7.0-dev.10&targetVersion=GTv8.7.0-dev.11) (2026-10-15)
77
+
78
+ ### Bug Fixes
79
+
80
+ * **cli:** keep config entries and tool names the user owns (ATK-487) ([39f59ec](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/39f59ec9102a7fb15f6a481e2ee5f3ac1275388d))
81
+ * **cli:** keep every tool's copy of an asset tracked (ATK-487) ([12d60f0](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/12d60f05bf7c9f8ea8dd49d796b3ac18ca4b828b))
82
+ * **cli:** remove only ATK's files for the other tools an uninstall finds ([5a3b3ed](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/5a3b3eddc7e1b249da28ca8c068f153069ea5208))
83
+
84
+ ## [8.7.0-dev.10](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv8.7.0-dev.9&targetVersion=GTv8.7.0-dev.10) (2026-10-15)
85
+
86
+ ### Bug Fixes
87
+
88
+ * **cli:** place user assets in a config dir on another drive ([bbd61b7](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/bbd61b742582e61e6584fab4feff7b3713a40c2d))
89
+ * **cli:** refuse a network share config dir and fold drive case ([a6b8056](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/a6b8056ea00c2f7a2b1d9f2440bba954930a75d2))
90
+
91
+ ## [8.7.0-dev.9](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv8.7.0-dev.8&targetVersion=GTv8.7.0-dev.9) (2026-10-15)
92
+
93
+ ### Features
94
+
95
+ * **cli:** warn when an asset is already installed at the other scope ([340136e](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/340136ef832353e7bbdf19a11d958124fc24695c))
96
+
97
+ ### Bug Fixes
98
+
99
+ * **cli:** base the cross-scope warning on what was installed ([99e12bb](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/99e12bbcb21ddd72d978349a69da38670bda27ba))
100
+ * **cli:** give Copilot user MCP stdio servers an empty args list (ATK-486) ([bd40014](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/bd4001458d11b4a0530e8212ae87e953b46abf88))
101
+ * **cli:** name no clash rule when the other scope has no tools ([755bd40](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/755bd40e7c46eabc8dc12f4bdae48a57fc7adaa4))
102
+
103
+ ### Refactoring
104
+
105
+ * **cli:** build the stdio entry defaults once per merge (ATK-486) ([b3178a3](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/b3178a37f060283ea109a63e5e202748e98d6f57))
106
+
1
107
  ## [8.7.0-dev.8](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv8.7.0-dev.7&targetVersion=GTv8.7.0-dev.8) (2026-10-15)
2
108
 
3
109
  ### Bug Fixes
package/README.md CHANGED
@@ -79,6 +79,7 @@ atk update
79
79
  | `atk list` | List all installed assets |
80
80
  | `atk login` | Sign in with your Emergent (Microsoft Entra) account |
81
81
  | `atk logout` | Sign out of your Emergent account |
82
+ | `atk move <asset>` | Move an installed asset between the project and the user scope |
82
83
  | `atk outdated` | Show assets with available updates |
83
84
  | `atk pin <asset>` | Pin an asset to its current version |
84
85
  | `atk promote <name>` | Promote an org-scoped asset or bundle to global via PR |
@@ -257,6 +258,35 @@ This lets teams override global assets with org-specific versions while still in
257
258
 
258
259
  There is no separate "create org" step. Publishing the first asset with an `org` value creates the namespace automatically. Org assets are stored under `assets/<type>s/@<org>/<name>/` in the registry.
259
260
 
261
+ ## User Scope
262
+
263
+ Assets you want in every project, such as a skill you always use, go in your **user scope** instead of a project. Add `--user` to a command to work there from any directory:
264
+
265
+ ```bash
266
+ # Once: pick the tools for your user scope
267
+ atk setup --user
268
+
269
+ # Install for yourself (~/.claude/skills/my-skill/ for Claude Code)
270
+ atk install my-skill --user
271
+
272
+ # Your user installs, and their updates
273
+ atk list --user
274
+ atk outdated --user
275
+ atk update --user
276
+
277
+ # Move a project install to your user scope, or back
278
+ atk move my-skill --to user
279
+ atk move my-skill --to project
280
+ ```
281
+
282
+ - The user scope has its own lockfile, `~/.atk-lock.json`, and keeps its tools in the `user` section of `~/.atkrc.json`. Each tool's assets go in its own user directory (`~/.claude/`, `~/.codex/`, `~/.copilot/`), which follows `CLAUDE_CONFIG_DIR`, `CODEX_HOME` and `XDG_CONFIG_HOME` when they are set.
283
+ - **Read both, write one.** In a project, `atk list` and `atk outdated` show your user installs beside the project's, each with its scope (`--project` hides them). Commands that change installs touch one scope: a project `atk update` never changes your user installs. `atk install` warns when the other scope already has the asset, and says which copy each tool uses.
284
+ - **The user root** is your home directory unless the `userRoot` config key or the `ATK_USER_ROOT` environment variable says otherwise. A command run in the user root works in the user scope even without `--user`.
285
+ - **A new machine:** commit `~/.atk-lock.json` to your dotfiles, then run `atk setup --user` and `atk sync --user`; or publish a personal bundle and run `atk install <bundle> --user`.
286
+ - An existing home-directory install (`atk setup` run in `~` before CLI 8.6.0) is adopted by the first `atk setup --user`.
287
+
288
+ `--user` arrived in CLI 8.6.0; user-level placements, the both-scope views, the cross-scope warning and `atk move` in 8.7.0. The full reference is the `atk-guide` skill's `references/user-scope.md` (`atk install atk-guide`).
289
+
260
290
  ## Configuration
261
291
 
262
292
  Manage user-level settings stored in `~/.atkrc.json`:
@@ -277,21 +307,23 @@ atk config org --reset
277
307
 
278
308
  ### Available Keys
279
309
 
280
- | Key | Default | Description |
281
- | ----------------- | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
282
- | `apiUrl` | `https://func-atk-prod.azurewebsites.net` | ATK API base URL. The `ATK_API_URL` environment variable overrides it (e.g. to point at dev). |
283
- | `cacheDir` | `~/.atk/cache/` | Override cache directory |
284
- | `cacheTtlMinutes` | `5` | Cache TTL in minutes for registry data |
285
- | `checkUpdates` | `true` | Show a banner when a newer ATK version is available (in `--json` output, an `update-available` entry in `notices`) |
286
- | `org` | _(not set)_ | Default organization scope for asset resolution |
310
+ | Key | Default | Description |
311
+ | ----------------- | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
312
+ | `apiUrl` | `https://func-atk-prod.azurewebsites.net` | ATK API base URL. The `ATK_API_URL` environment variable overrides it (e.g. to point at dev). |
313
+ | `cacheDir` | `~/.atk/cache/` | Override cache directory |
314
+ | `cacheTtlMinutes` | `5` | Cache TTL in minutes for registry data |
315
+ | `checkUpdates` | `true` | Show a banner when a newer ATK version is available (in `--json` output, an `update-available` entry in `notices`) |
316
+ | `org` | _(not set)_ | Default organization scope for asset resolution |
317
+ | `userRoot` | _(home directory)_ | Root of the user scope (`--user`). A relative or `~/` path is under the home directory. `ATK_USER_ROOT` overrides it. |
287
318
 
288
319
  ### Environment Variables
289
320
 
290
- | Variable | Description |
291
- | -------------- | ------------------------------------------------------------------------------------------------------------ |
292
- | `ATK_API_URL` | Overrides `apiUrl` (e.g. `https://func-atk-dev.azurewebsites.net` to target the dev API). |
293
- | `ATK_WEB_URL` | Overrides the ATK web app base URL used for the `Web:` links in `info`, `browse`, `list` and `search`. |
294
- | `ATK_TOKEN` | A raw Entra access token for the ATK API, for CI and agents. Wins over the `atk login` session. |
321
+ | Variable | Description |
322
+ | --------------- | ------------------------------------------------------------------------------------------------------ |
323
+ | `ATK_API_URL` | Overrides `apiUrl` (e.g. `https://func-atk-dev.azurewebsites.net` to target the dev API). |
324
+ | `ATK_WEB_URL` | Overrides the ATK web app base URL used for the `Web:` links in `info`, `browse`, `list` and `search`. |
325
+ | `ATK_TOKEN` | A raw Entra access token for the ATK API, for CI and agents. Wins over the `atk login` session. |
326
+ | `ATK_USER_ROOT` | Overrides `userRoot`: the root of the user scope, where `--user` puts its lockfile and placements. |
295
327
 
296
328
  ## Development
297
329
 
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoBxB,eAAO,MAAM,WAAW,mDAAmD,CAAC;AAE5E,eAAO,MAAM,OAAO;;;;;iBAoClB,CAAC;AAuCH,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAOF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,2CAkUlF"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0BxB,eAAO,MAAM,WAAW,mDAAmD,CAAC;AAE5E,eAAO,MAAM,OAAO;;;;;iBAoClB,CAAC;AAuCH,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAOF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,2CA2UlF"}
@@ -1,20 +1,20 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text } from 'ink';
3
3
  import { existsSync } from 'node:fs';
4
- import { join } from 'node:path';
5
4
  import { option } from 'pastel';
6
5
  import { z } from 'zod';
7
6
  import { ErrorView, FileStatusIcon, Spinner } from '../components/index.js';
8
7
  import { useCommand } from '../hooks/useCommand.js';
9
8
  import { adapterAsPlaced, configDirMove, resolveInstalledPaths, userConfigDirPath } from '../lib/adapter.js';
10
9
  import { declarationAllows, isExcludedAtVersion } from '../lib/asset-tools.js';
11
- import { getConfigEntriesForTool, needsConfigRegistration, normalizeConfigPath } from '../lib/config-entries.js';
10
+ import { getConfigEntriesForTool, needsConfigRegistration, normalizeConfigPath, staleHookCommandEntries, } from '../lib/config-entries.js';
12
11
  import { isFrozenInConfig } from '../lib/config.js';
13
12
  import { identityKey, readLockfile } from '../lib/lockfile.js';
14
13
  import { formatOrgName } from '../lib/org.js';
15
14
  import { renderJson, useNonInteractive } from '../lib/output.js';
16
15
  import { verifyOwnConfigEntries, verifyOwnFiles } from '../lib/owned-paths.js';
17
16
  import { fetchRegistry, versionTools } from '../lib/registry.js';
17
+ import { fromRoot } from '../lib/root-path.js';
18
18
  import { loadScopeConfig, resolveScope, scopedCommand } from '../lib/scope.js';
19
19
  import { resolveTools } from '../lib/tool-resolver.js';
20
20
  export const description = 'Verify asset integrity via checksum validation';
@@ -87,7 +87,7 @@ export default function Audit({ options: { json, projectRoot, tool, user } }) {
87
87
  const lockedTools = registry && asset.type === 'hook' ? versionTools(registry, asset, asset.version) : null;
88
88
  if (isExcludedAtVersion(asset, toolName, lockedTools) ||
89
89
  !declarationAllows(asset.type, lockedTools ?? undefined, toolName)) {
90
- const stillOnDisk = resolvedPaths.files.some((f) => existsSync(join(projectDir, f.installedPath)));
90
+ const stillOnDisk = resolvedPaths.files.some((f) => existsSync(fromRoot(projectDir, f.installedPath)));
91
91
  entries.push({
92
92
  asset,
93
93
  configFailures: [],
@@ -99,7 +99,7 @@ export default function Audit({ options: { json, projectRoot, tool, user } }) {
99
99
  }
100
100
  const filesToCheck = resolvedPaths.files.map((f) => ({
101
101
  checksum: f.checksum,
102
- path: join(projectDir, f.installedPath),
102
+ path: fromRoot(projectDir, f.installedPath),
103
103
  }));
104
104
  // A file holding the content of another asset that places it is not drift.
105
105
  const failures = await verifyOwnFiles(filesToCheck, asset, lockfile, placedAdapter, projectDir);
@@ -137,6 +137,15 @@ export default function Audit({ options: { json, projectRoot, tool, user } }) {
137
137
  reason: 'CONFIG_KEY_NOT_FOUND',
138
138
  });
139
139
  }
140
+ // A hook placed with another scope's rules: the group under each of these keys runs another
141
+ // command, so the one the placement registers isn't there (`atk sync` places it).
142
+ for (const stale of staleHookCommandEntries(asset, toolAdapter)) {
143
+ configFailures.push({
144
+ file: normalizeConfigPath(stale.file),
145
+ key: stale.key,
146
+ reason: 'CONFIG_KEY_NOT_FOUND',
147
+ });
148
+ }
140
149
  // Determine overall asset status with priority:
141
150
  // modified > config-modified > missing > config-missing > ok
142
151
  let assetStatus = 'ok';
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsCxB,eAAO,MAAM,WAAW,6DAA6D,CAAC;AAEtF,eAAO,MAAM,OAAO;;;;;;;;;;;;iBAoGlB,CAAC;AAEH,eAAO,MAAM,IAAI,gDAEf,CAAC;AAgCH,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAMF,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,IAAI,EAAE,CAAC,OAAO,CAAC,EACf,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GACvF,EAAE,KAAK,2CAqCP"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgDxB,eAAO,MAAM,WAAW,6DAA6D,CAAC;AAEtF,eAAO,MAAM,OAAO;;;;;;;;;;;;iBAoGlB,CAAC;AAEH,eAAO,MAAM,IAAI,gDAEf,CAAC;AAgDH,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAMF,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,IAAI,EAAE,CAAC,OAAO,CAAC,EACf,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GACvF,EAAE,KAAK,2CAqCP"}
@@ -3,22 +3,24 @@ import { Box, Text, useApp, useStdin } from 'ink';
3
3
  import { option } from 'pastel';
4
4
  import { useCallback, useEffect, useRef, useState } from 'react';
5
5
  import { z } from 'zod';
6
- import { DryRunBanner, ErrorView, InstallSummary, MultiSelectList, Spinner } from '../components/index.js';
6
+ import { CrossScopeWarning, DryRunBanner, ErrorView, InstallSummary, MultiSelectList, Spinner, } from '../components/index.js';
7
7
  import { useCommand } from '../hooks/useCommand.js';
8
8
  import { useResolvedScope } from '../hooks/useResolvedScope.js';
9
9
  import { placesAsset } from '../lib/asset-tools.js';
10
10
  import { resolveBundleVersion } from '../lib/bundle-version.js';
11
11
  import { loadConfig } from '../lib/config.js';
12
+ import { crossScopeNotice, findCrossScopeInstalls } from '../lib/cross-scope.js';
12
13
  import { errorGuidance, errorMessage } from '../lib/errors.js';
13
14
  import { isInstalledForTool } from '../lib/installed-for-tool.js';
14
15
  import { findInstalledAsset, identityKey, readLockfile, upgradeToDirectInstall, withLockfileErrorHandling, writeLockfile, } from '../lib/lockfile.js';
15
16
  import { executeInstallPlanForTools, withoutKeptDependencies } from '../lib/multi-tool-install.js';
17
+ import { addNotice } from '../lib/notices.js';
16
18
  import { formatOrgName, isBareOrgScope, parseBundleSpec, resolveActiveOrg } from '../lib/org.js';
17
19
  import { renderJson, useNonInteractive } from '../lib/output.js';
18
20
  import { fetchRegistry, findAsset, findBundle, getAssetsByOrg, isDeprecated, isLatestAlias } from '../lib/registry.js';
19
21
  import { resolveBundleInstallPlan, resolveInstallPlan, resolveMultipleInstallPlans, } from '../lib/resolver.js';
20
22
  import { scopeLabel } from '../lib/scope.js';
21
- import { resolveTools } from '../lib/tool-resolver.js';
23
+ import { resolvePlacingTools } from '../lib/tool-resolver.js';
22
24
  import { parseNameVersion } from '../lib/version.js';
23
25
  import Sync from './sync.js';
24
26
  export const description = 'Install an asset or bundle (no args syncs from lockfile)';
@@ -130,6 +132,32 @@ async function bundleAtRequestedVersion(entry, requested, progress) {
130
132
  }
131
133
  return resolution.bundle;
132
134
  }
135
+ /**
136
+ * The plan's assets (the asset, a bundle's members, their dependencies) that the other scope already
137
+ * has, as the outcome's `crossScope`. A dry run passes the whole resolved plan, so it warns about the
138
+ * same assets the install will. After an install, `installedAt` is the scope's root: the entries are
139
+ * read back from its lockfile, so an asset that failed or went to no tool is left out, and the tools
140
+ * it was skipped for (`excludedTools`) get no rule. In JSON mode it also records the `cross-scope`
141
+ * notice; a TTY run shows `CrossScopeWarning` under its summary instead. It never fails the install.
142
+ */
143
+ async function crossScopeOf(plan, { installedAt, json, scope, tools }) {
144
+ try {
145
+ let assets = plan.entries.map((entry) => entry.asset);
146
+ if (installedAt !== undefined) {
147
+ const byKey = new Map(((await readLockfile(installedAt)).assets ?? []).map((a) => [identityKey(a), a]));
148
+ assets = assets.flatMap((asset) => byKey.get(identityKey(asset)) ?? []);
149
+ }
150
+ const [first, ...rest] = await findCrossScopeInstalls(assets, { scope, tools });
151
+ if (!first)
152
+ return {};
153
+ if (json)
154
+ addNotice(crossScopeNotice([first, ...rest]));
155
+ return { crossScope: [first, ...rest] };
156
+ }
157
+ catch {
158
+ return {};
159
+ }
160
+ }
133
161
  function InstallAsset({ dryRun, force, json, org: cliOrg, pin, projectRoot, rawName, tool, user, }) {
134
162
  const { json: effectiveJson } = useNonInteractive(json);
135
163
  const { name: parsedName, version: requestedVersion } = parseNameVersion(rawName);
@@ -143,7 +171,7 @@ function InstallAsset({ dryRun, force, json, org: cliOrg, pin, projectRoot, rawN
143
171
  const { root: projectDir, scope: installScope } = await resolve();
144
172
  progress('Loading configuration...');
145
173
  const config = await loadConfig();
146
- const tools = await resolveTools(tool, projectDir);
174
+ const tools = await resolvePlacingTools(tool, projectDir);
147
175
  const toolNames = tools.map((t) => t.tool);
148
176
  progress('Fetching registry...');
149
177
  const registry = await fetchRegistry({ force: true });
@@ -152,6 +180,7 @@ function InstallAsset({ dryRun, force, json, org: cliOrg, pin, projectRoot, rawN
152
180
  // Resolve active org: inline @org/name takes priority over --org flag
153
181
  const org = resolveActiveOrg(inlineOrg ?? cliOrg, currentLockfile.org, config.org);
154
182
  const effectiveVersion = requestedVersion;
183
+ const crossScope = (plan, installedAt) => crossScopeOf(plan, { installedAt, json: effectiveJson, scope: installScope, tools: toolNames });
155
184
  // Check if the name matches a bundle. Bundle identity is (name, org) with
156
185
  // exact matching — an @org/name spec never falls back to a global bundle
157
186
  // and a bare name never resolves to an org-scoped one.
@@ -200,19 +229,25 @@ function InstallAsset({ dryRun, force, json, org: cliOrg, pin, projectRoot, rawN
200
229
  });
201
230
  if (bundle) {
202
231
  progress('Resolving bundle assets...');
203
- const plan = asInstalled(resolveBundleInstallPlan(registry, bundle));
232
+ const resolved = resolveBundleInstallPlan(registry, bundle);
204
233
  return {
205
234
  bundleName: bundle.name,
206
235
  outcome: 'dry-run-bundle',
207
- plan,
236
+ plan: asInstalled(resolved),
208
237
  tools: toolNames,
209
238
  version: bundle.version,
239
+ ...(await crossScope(resolved)),
210
240
  };
211
241
  }
212
242
  const versionLabel = effectiveVersion ? `@${effectiveVersion}` : '';
213
243
  progress(`Resolving dependencies${versionLabel}...`);
214
- const plan = asInstalled(resolveInstallPlan(registry, name, undefined, effectiveVersion, org));
215
- return { outcome: 'dry-run-install', plan, tools: toolNames };
244
+ const resolved = resolveInstallPlan(registry, name, undefined, effectiveVersion, org);
245
+ return {
246
+ outcome: 'dry-run-install',
247
+ plan: asInstalled(resolved),
248
+ tools: toolNames,
249
+ ...(await crossScope(resolved)),
250
+ };
216
251
  }
217
252
  return await withLockfileErrorHandling(projectDir, async () => {
218
253
  if (bundle) {
@@ -269,7 +304,13 @@ function InstallAsset({ dryRun, force, json, org: cliOrg, pin, projectRoot, rawN
269
304
  projectDir: projectDir,
270
305
  scope: installScope,
271
306
  });
272
- return { bundleName: bundle.name, outcome: 'bundle-installed', toolResults, version: bundle.version };
307
+ return {
308
+ bundleName: bundle.name,
309
+ outcome: 'bundle-installed',
310
+ toolResults,
311
+ version: bundle.version,
312
+ ...(await crossScope(plan, projectDir)),
313
+ };
273
314
  }
274
315
  // Single asset installation flow
275
316
  if (!force) {
@@ -318,7 +359,7 @@ function InstallAsset({ dryRun, force, json, org: cliOrg, pin, projectRoot, rawN
318
359
  projectDir: projectDir,
319
360
  scope: installScope,
320
361
  });
321
- return { outcome: 'installed', toolResults };
362
+ return { outcome: 'installed', toolResults, ...(await crossScope(plan, projectDir)) };
322
363
  });
323
364
  }, [cliOrg, dryRun, force, inlineOrg, name, pin, requestedVersion, tool]);
324
365
  if (state.status === 'loading') {
@@ -347,7 +388,7 @@ function InstallAsset({ dryRun, force, json, org: cliOrg, pin, projectRoot, rawN
347
388
  return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { children: [_jsx(Text, { color: 'yellow', children: "!" }), " Bundle ", _jsx(Text, { bold: true, children: data.bundleName }), " is already fully installed (v", data.version, ")", where, "."] }), _jsx(Text, { dimColor: true, children: "Use --force to reinstall." })] }));
348
389
  }
349
390
  if (data.outcome === 'bundle-installed') {
350
- return (_jsx(Box, { flexDirection: 'column', children: data.toolResults.map(({ results, skipped, tool: toolName, warnings }) => (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { color: 'green', children: ["\u2713 Bundle ", _jsx(Text, { bold: true, children: data.bundleName }), " v", data.version, " \u2014 ", results.length, " asset", results.length !== 1 ? 's' : ''] }), _jsx(InstallSummary, { results: results, skipped: skipped, tools: [toolName], warnings: warnings, where: label })] }, toolName))) }));
391
+ return (_jsxs(Box, { flexDirection: 'column', children: [data.toolResults.map(({ results, skipped, tool: toolName, warnings }) => (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { color: 'green', children: ["\u2713 Bundle ", _jsx(Text, { bold: true, children: data.bundleName }), " v", data.version, " \u2014 ", results.length, " asset", results.length !== 1 ? 's' : ''] }), _jsx(InstallSummary, { results: results, skipped: skipped, tools: [toolName], warnings: warnings, where: label })] }, toolName))), _jsx(CrossScopeWarning, { installs: data.crossScope ?? [] })] }));
351
392
  }
352
393
  if (data.outcome === 'already-installed') {
353
394
  return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { children: [_jsx(Text, { color: 'yellow', children: "!" }), " ", _jsx(Text, { bold: true, children: data.name }), " is already installed (v", data.version, ")", where, "."] }), _jsx(Text, { dimColor: true, children: "Use --force to reinstall." })] }));
@@ -356,15 +397,15 @@ function InstallAsset({ dryRun, force, json, org: cliOrg, pin, projectRoot, rawN
356
397
  return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { color: 'green', children: ["\u2713 ", _jsx(Text, { bold: true, children: data.name }), " (v", data.version, ") is now a direct install", where, "."] }), _jsx(Text, { dimColor: true, children: "It will no longer be auto-removed when its parent is uninstalled." })] }));
357
398
  }
358
399
  if (data.outcome === 'dry-run-install') {
359
- return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(DryRunBanner, { action: 'install', count: data.plan.totalCount, tools: data.tools, where: label }), _jsx(Text, { children: " " }), data.plan.entries.map((entry) => (_jsxs(Text, { children: [' ', entry.reason === 'dependency' ? (_jsxs(Text, { color: 'cyan', children: [formatOrgName(entry.asset.org, entry.asset.name), ' ', _jsxs(Text, { dimColor: true, children: ["(", entry.asset.type, ") v", entry.version, " \u2014 dependency"] })] })) : (_jsxs(Text, { children: [_jsx(Text, { bold: true, children: formatOrgName(entry.asset.org, entry.asset.name) }), _jsxs(Text, { dimColor: true, children: [' ', "(", entry.asset.type, ") v", entry.version] })] }))] }, identityKey(entry.asset))))] }));
400
+ return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(DryRunBanner, { action: 'install', count: data.plan.totalCount, tools: data.tools, where: label }), _jsx(Text, { children: " " }), data.plan.entries.map((entry) => (_jsxs(Text, { children: [' ', entry.reason === 'dependency' ? (_jsxs(Text, { color: 'cyan', children: [formatOrgName(entry.asset.org, entry.asset.name), ' ', _jsxs(Text, { dimColor: true, children: ["(", entry.asset.type, ") v", entry.version, " \u2014 dependency"] })] })) : (_jsxs(Text, { children: [_jsx(Text, { bold: true, children: formatOrgName(entry.asset.org, entry.asset.name) }), _jsxs(Text, { dimColor: true, children: [' ', "(", entry.asset.type, ") v", entry.version] })] }))] }, identityKey(entry.asset)))), _jsx(CrossScopeWarning, { installs: data.crossScope ?? [] })] }));
360
401
  }
361
402
  if (data.outcome === 'dry-run-bundle') {
362
- return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(DryRunBanner, { action: 'install', count: data.plan.totalCount, tools: data.tools, where: label }), _jsx(Text, { children: " " }), _jsxs(Text, { children: [_jsxs(Text, { bold: true, color: 'magenta', children: ["Bundle: ", data.bundleName] }), _jsxs(Text, { dimColor: true, children: [" v", data.version] })] }), _jsx(Text, { children: " " }), data.plan.entries.map((entry) => (_jsxs(Text, { children: [' ', entry.reason === 'dependency' ? (_jsxs(Text, { color: 'cyan', children: [formatOrgName(entry.asset.org, entry.asset.name), ' ', _jsxs(Text, { dimColor: true, children: ["(", entry.asset.type, ") v", entry.version, " \u2014 dependency"] })] })) : (_jsxs(Text, { children: [_jsx(Text, { bold: true, children: formatOrgName(entry.asset.org, entry.asset.name) }), _jsxs(Text, { dimColor: true, children: [' ', "(", entry.asset.type, ") v", entry.version] })] }))] }, identityKey(entry.asset))))] }));
403
+ return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(DryRunBanner, { action: 'install', count: data.plan.totalCount, tools: data.tools, where: label }), _jsx(Text, { children: " " }), _jsxs(Text, { children: [_jsxs(Text, { bold: true, color: 'magenta', children: ["Bundle: ", data.bundleName] }), _jsxs(Text, { dimColor: true, children: [" v", data.version] })] }), _jsx(Text, { children: " " }), data.plan.entries.map((entry) => (_jsxs(Text, { children: [' ', entry.reason === 'dependency' ? (_jsxs(Text, { color: 'cyan', children: [formatOrgName(entry.asset.org, entry.asset.name), ' ', _jsxs(Text, { dimColor: true, children: ["(", entry.asset.type, ") v", entry.version, " \u2014 dependency"] })] })) : (_jsxs(Text, { children: [_jsx(Text, { bold: true, children: formatOrgName(entry.asset.org, entry.asset.name) }), _jsxs(Text, { dimColor: true, children: [' ', "(", entry.asset.type, ") v", entry.version] })] }))] }, identityKey(entry.asset)))), _jsx(CrossScopeWarning, { installs: data.crossScope ?? [] })] }));
363
404
  }
364
405
  if (data.outcome === 'deprecated') {
365
406
  return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { color: 'yellow', children: ["Warning: \"", data.name, "\" is deprecated \u2014 ", data.reason] }), data.replacement && (_jsxs(Text, { children: ["Consider using", ' ', _jsx(Text, { bold: true, color: 'cyan', children: data.replacement }), ' ', "instead."] })), _jsx(Text, { dimColor: true, children: "Use --force to install anyway." })] }));
366
407
  }
367
- return (_jsx(Box, { flexDirection: 'column', children: data.toolResults.map(({ results, skipped, tool: toolName, warnings }) => (_jsx(InstallSummary, { results: results, skipped: skipped, tools: [toolName], warnings: warnings, where: label }, toolName))) }));
408
+ return (_jsxs(Box, { flexDirection: 'column', children: [data.toolResults.map(({ results, skipped, tool: toolName, warnings }) => (_jsx(InstallSummary, { results: results, skipped: skipped, tools: [toolName], warnings: warnings, where: label }, toolName))), _jsx(CrossScopeWarning, { installs: data.crossScope ?? [] })] }));
368
409
  }
369
410
  function InstallOrg({ cliOrg, dryRun, force, json, orgName, pin, projectRoot, skipPicker, tool, user, }) {
370
411
  const { exit } = useApp();
@@ -397,7 +438,7 @@ function InstallOrg({ cliOrg, dryRun, force, json, orgName, pin, projectRoot, sk
397
438
  const { root: projectDir, scope } = await resolve();
398
439
  setProgress('Loading configuration...');
399
440
  const config = await loadConfig();
400
- const tools = await resolveTools(tool, projectDir);
441
+ const tools = await resolvePlacingTools(tool, projectDir);
401
442
  const toolNames = tools.map((t) => t.tool);
402
443
  setProgress('Fetching registry...');
403
444
  const registry = await fetchRegistry({ force: true });
@@ -446,13 +487,15 @@ function InstallOrg({ cliOrg, dryRun, force, json, orgName, pin, projectRoot, sk
446
487
  const ctx = contextRef.current;
447
488
  const refs = assetsToInstall.map((a) => ({ name: a.name, type: a.type }));
448
489
  const plan = resolveMultipleInstallPlans(ctx.registry, refs, ctx.activeOrg);
490
+ const crossScope = (resolved, installedAt) => crossScopeOf(resolved, { installedAt, json: effectiveJson, scope: ctx.scope, tools: ctx.toolNames });
449
491
  if (dryRun) {
450
492
  const kept = withoutKeptDependencies(plan, ctx.lockfile, ctx.tools, {
451
493
  projectDir: ctx.projectDir,
452
494
  scope: ctx.scope,
453
495
  });
496
+ const field = await crossScope(plan);
454
497
  if (!cancelled)
455
- setState({ phase: 'dry-run', plan: kept, tools: ctx.toolNames });
498
+ setState({ phase: 'dry-run', plan: kept, tools: ctx.toolNames, ...field });
456
499
  return;
457
500
  }
458
501
  if (!cancelled)
@@ -471,8 +514,9 @@ function InstallOrg({ cliOrg, dryRun, force, json, orgName, pin, projectRoot, sk
471
514
  projectDir: ctx.projectDir,
472
515
  scope: ctx.scope,
473
516
  }));
517
+ const field = await crossScope(plan, ctx.projectDir);
474
518
  if (!cancelled)
475
- setState({ phase: 'done', toolResults });
519
+ setState({ phase: 'done', toolResults, ...field });
476
520
  }
477
521
  catch (err) {
478
522
  showError(err);
@@ -577,15 +621,28 @@ function InstallOrg({ cliOrg, dryRun, force, json, orgName, pin, projectRoot, sk
577
621
  }
578
622
  if (state.phase === 'dry-run') {
579
623
  if (effectiveJson) {
580
- return renderJson({ org: orgName, outcome: 'dry-run-org', plan: state.plan, tools: state.tools, ...fields });
624
+ return renderJson({
625
+ crossScope: state.crossScope,
626
+ org: orgName,
627
+ outcome: 'dry-run-org',
628
+ plan: state.plan,
629
+ tools: state.tools,
630
+ ...fields,
631
+ });
581
632
  }
582
- return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(DryRunBanner, { action: 'install', count: state.plan.totalCount, tools: state.tools, where: label }), _jsx(Text, { children: " " }), _jsx(Text, { children: _jsxs(Text, { bold: true, color: 'magenta', children: ["Org: @", orgName] }) }), _jsx(Text, { children: " " }), state.plan.entries.map((entry) => (_jsxs(Text, { children: [' ', entry.reason === 'dependency' ? (_jsxs(Text, { color: 'cyan', children: [formatOrgName(entry.asset.org, entry.asset.name), ' ', _jsxs(Text, { dimColor: true, children: ["(", entry.asset.type, ") v", entry.version, " \u2014 dependency"] })] })) : (_jsxs(Text, { children: [_jsx(Text, { bold: true, children: formatOrgName(entry.asset.org, entry.asset.name) }), _jsxs(Text, { dimColor: true, children: [' ', "(", entry.asset.type, ") v", entry.version] })] }))] }, identityKey(entry.asset))))] }));
633
+ return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(DryRunBanner, { action: 'install', count: state.plan.totalCount, tools: state.tools, where: label }), _jsx(Text, { children: " " }), _jsx(Text, { children: _jsxs(Text, { bold: true, color: 'magenta', children: ["Org: @", orgName] }) }), _jsx(Text, { children: " " }), state.plan.entries.map((entry) => (_jsxs(Text, { children: [' ', entry.reason === 'dependency' ? (_jsxs(Text, { color: 'cyan', children: [formatOrgName(entry.asset.org, entry.asset.name), ' ', _jsxs(Text, { dimColor: true, children: ["(", entry.asset.type, ") v", entry.version, " \u2014 dependency"] })] })) : (_jsxs(Text, { children: [_jsx(Text, { bold: true, children: formatOrgName(entry.asset.org, entry.asset.name) }), _jsxs(Text, { dimColor: true, children: [' ', "(", entry.asset.type, ") v", entry.version] })] }))] }, identityKey(entry.asset)))), _jsx(CrossScopeWarning, { installs: state.crossScope ?? [] })] }));
583
634
  }
584
635
  if (state.phase === 'done') {
585
636
  if (effectiveJson) {
586
- return renderJson({ org: orgName, outcome: 'org-installed', toolResults: state.toolResults, ...fields });
637
+ return renderJson({
638
+ crossScope: state.crossScope,
639
+ org: orgName,
640
+ outcome: 'org-installed',
641
+ toolResults: state.toolResults,
642
+ ...fields,
643
+ });
587
644
  }
588
- return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { color: 'green', children: ["\u2713 Installed from ", _jsxs(Text, { bold: true, children: ["@", orgName] })] }), state.toolResults.map(({ results, skipped, tool: toolName, warnings }) => (_jsx(InstallSummary, { results: results, skipped: skipped, tools: [toolName], warnings: warnings, where: label }, toolName)))] }));
645
+ return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { color: 'green', children: ["\u2713 Installed from ", _jsxs(Text, { bold: true, children: ["@", orgName] })] }), state.toolResults.map(({ results, skipped, tool: toolName, warnings }) => (_jsx(InstallSummary, { results: results, skipped: skipped, tools: [toolName], warnings: warnings, where: label }, toolName))), _jsx(CrossScopeWarning, { installs: state.crossScope ?? [] })] }));
589
646
  }
590
647
  return null;
591
648
  }