@aligndottech/cli 0.47.1 → 0.49.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 (220) hide show
  1. package/README.md +6 -5
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +9 -18
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/agents.d.ts +20 -0
  6. package/dist/commands/agents.d.ts.map +1 -0
  7. package/dist/commands/agents.js +62 -0
  8. package/dist/commands/agents.js.map +1 -0
  9. package/dist/commands/ai.d.ts +11 -0
  10. package/dist/commands/ai.d.ts.map +1 -0
  11. package/dist/commands/ai.js +121 -0
  12. package/dist/commands/ai.js.map +1 -0
  13. package/dist/commands/default-action.js +2 -2
  14. package/dist/commands/default-action.js.map +1 -1
  15. package/dist/commands/registry.d.ts.map +1 -1
  16. package/dist/commands/registry.js +7 -0
  17. package/dist/commands/registry.js.map +1 -1
  18. package/dist/commands/setup.d.ts.map +1 -1
  19. package/dist/commands/setup.js +53 -191
  20. package/dist/commands/setup.js.map +1 -1
  21. package/dist/commands/use.js +1 -1
  22. package/dist/commands/use.js.map +1 -1
  23. package/dist/commands/why.d.ts.map +1 -1
  24. package/dist/commands/why.js +21 -0
  25. package/dist/commands/why.js.map +1 -1
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/lib/ask-key-offer.d.ts +38 -0
  31. package/dist/lib/ask-key-offer.d.ts.map +1 -0
  32. package/dist/lib/ask-key-offer.js +130 -0
  33. package/dist/lib/ask-key-offer.js.map +1 -0
  34. package/dist/lib/config.d.ts +25 -24
  35. package/dist/lib/config.d.ts.map +1 -1
  36. package/dist/lib/config.js +37 -45
  37. package/dist/lib/config.js.map +1 -1
  38. package/dist/lib/launch/adapters/amp.d.ts +18 -0
  39. package/dist/lib/launch/adapters/amp.d.ts.map +1 -0
  40. package/dist/lib/launch/adapters/amp.js +29 -0
  41. package/dist/lib/launch/adapters/amp.js.map +1 -0
  42. package/dist/lib/launch/adapters/claude-code.d.ts +8 -0
  43. package/dist/lib/launch/adapters/claude-code.d.ts.map +1 -1
  44. package/dist/lib/launch/adapters/claude-code.js.map +1 -1
  45. package/dist/lib/launch/adapters/codex.d.ts +17 -0
  46. package/dist/lib/launch/adapters/codex.d.ts.map +1 -0
  47. package/dist/lib/launch/adapters/codex.js +44 -0
  48. package/dist/lib/launch/adapters/codex.js.map +1 -0
  49. package/dist/lib/launch/adapters/copilot.d.ts +17 -0
  50. package/dist/lib/launch/adapters/copilot.d.ts.map +1 -0
  51. package/dist/lib/launch/adapters/copilot.js +29 -0
  52. package/dist/lib/launch/adapters/copilot.js.map +1 -0
  53. package/dist/lib/launch/adapters/droid.d.ts +19 -0
  54. package/dist/lib/launch/adapters/droid.d.ts.map +1 -0
  55. package/dist/lib/launch/adapters/droid.js +38 -0
  56. package/dist/lib/launch/adapters/droid.js.map +1 -0
  57. package/dist/lib/launch/adapters/gemini-cli.d.ts +25 -0
  58. package/dist/lib/launch/adapters/gemini-cli.d.ts.map +1 -0
  59. package/dist/lib/launch/adapters/gemini-cli.js +73 -0
  60. package/dist/lib/launch/adapters/gemini-cli.js.map +1 -0
  61. package/dist/lib/launch/adapters/grok-build.d.ts +16 -0
  62. package/dist/lib/launch/adapters/grok-build.d.ts.map +1 -0
  63. package/dist/lib/launch/adapters/grok-build.js +25 -0
  64. package/dist/lib/launch/adapters/grok-build.js.map +1 -0
  65. package/dist/lib/launch/adapters/kiro.d.ts +17 -0
  66. package/dist/lib/launch/adapters/kiro.d.ts.map +1 -0
  67. package/dist/lib/launch/adapters/kiro.js +25 -0
  68. package/dist/lib/launch/adapters/kiro.js.map +1 -0
  69. package/dist/lib/launch/adapters/qwen.d.ts +25 -0
  70. package/dist/lib/launch/adapters/qwen.d.ts.map +1 -0
  71. package/dist/lib/launch/adapters/qwen.js +67 -0
  72. package/dist/lib/launch/adapters/qwen.js.map +1 -0
  73. package/dist/lib/launch/agents.d.ts +16 -3
  74. package/dist/lib/launch/agents.d.ts.map +1 -1
  75. package/dist/lib/launch/agents.js +26 -4
  76. package/dist/lib/launch/agents.js.map +1 -1
  77. package/dist/lib/launch/amp-state.d.ts +21 -0
  78. package/dist/lib/launch/amp-state.d.ts.map +1 -0
  79. package/dist/lib/launch/amp-state.js +61 -0
  80. package/dist/lib/launch/amp-state.js.map +1 -0
  81. package/dist/lib/launch/codex-state.d.ts +31 -0
  82. package/dist/lib/launch/codex-state.d.ts.map +1 -0
  83. package/dist/lib/launch/codex-state.js +92 -0
  84. package/dist/lib/launch/codex-state.js.map +1 -0
  85. package/dist/lib/launch/config-writes.d.ts +7 -1
  86. package/dist/lib/launch/config-writes.d.ts.map +1 -1
  87. package/dist/lib/launch/config-writes.js +60 -7
  88. package/dist/lib/launch/config-writes.js.map +1 -1
  89. package/dist/lib/launch/copilot-state.d.ts +19 -0
  90. package/dist/lib/launch/copilot-state.d.ts.map +1 -0
  91. package/dist/lib/launch/copilot-state.js +51 -0
  92. package/dist/lib/launch/copilot-state.js.map +1 -0
  93. package/dist/lib/launch/detect.d.ts.map +1 -1
  94. package/dist/lib/launch/detect.js +2 -1
  95. package/dist/lib/launch/detect.js.map +1 -1
  96. package/dist/lib/launch/droid-state.d.ts +24 -0
  97. package/dist/lib/launch/droid-state.d.ts.map +1 -0
  98. package/dist/lib/launch/droid-state.js +74 -0
  99. package/dist/lib/launch/droid-state.js.map +1 -0
  100. package/dist/lib/launch/gemini-state.d.ts +32 -0
  101. package/dist/lib/launch/gemini-state.d.ts.map +1 -0
  102. package/dist/lib/launch/gemini-state.js +59 -0
  103. package/dist/lib/launch/gemini-state.js.map +1 -0
  104. package/dist/lib/launch/gemini-trust.d.ts +26 -0
  105. package/dist/lib/launch/gemini-trust.d.ts.map +1 -0
  106. package/dist/lib/launch/gemini-trust.js +103 -0
  107. package/dist/lib/launch/gemini-trust.js.map +1 -0
  108. package/dist/lib/launch/grok-state.d.ts +42 -0
  109. package/dist/lib/launch/grok-state.d.ts.map +1 -0
  110. package/dist/lib/launch/grok-state.js +128 -0
  111. package/dist/lib/launch/grok-state.js.map +1 -0
  112. package/dist/lib/launch/install.d.ts +33 -0
  113. package/dist/lib/launch/install.d.ts.map +1 -0
  114. package/dist/lib/launch/install.js +48 -0
  115. package/dist/lib/launch/install.js.map +1 -0
  116. package/dist/lib/launch/kiro-state.d.ts +22 -0
  117. package/dist/lib/launch/kiro-state.d.ts.map +1 -0
  118. package/dist/lib/launch/kiro-state.js +59 -0
  119. package/dist/lib/launch/kiro-state.js.map +1 -0
  120. package/dist/lib/launch/launch-files.d.ts +15 -0
  121. package/dist/lib/launch/launch-files.d.ts.map +1 -1
  122. package/dist/lib/launch/launch-files.js +64 -4
  123. package/dist/lib/launch/launch-files.js.map +1 -1
  124. package/dist/lib/launch/launch.d.ts +61 -6
  125. package/dist/lib/launch/launch.d.ts.map +1 -1
  126. package/dist/lib/launch/launch.js +98 -31
  127. package/dist/lib/launch/launch.js.map +1 -1
  128. package/dist/lib/launch/layer-files.d.ts +12 -0
  129. package/dist/lib/launch/layer-files.d.ts.map +1 -0
  130. package/dist/lib/launch/layer-files.js +43 -0
  131. package/dist/lib/launch/layer-files.js.map +1 -0
  132. package/dist/lib/launch/pick-agent.d.ts +12 -5
  133. package/dist/lib/launch/pick-agent.d.ts.map +1 -1
  134. package/dist/lib/launch/pick-agent.js +47 -19
  135. package/dist/lib/launch/pick-agent.js.map +1 -1
  136. package/dist/lib/launch/picker-options.d.ts +30 -0
  137. package/dist/lib/launch/picker-options.d.ts.map +1 -0
  138. package/dist/lib/launch/picker-options.js +42 -0
  139. package/dist/lib/launch/picker-options.js.map +1 -0
  140. package/dist/lib/launch/prompts.d.ts +11 -0
  141. package/dist/lib/launch/prompts.d.ts.map +1 -0
  142. package/dist/lib/launch/prompts.js +27 -0
  143. package/dist/lib/launch/prompts.js.map +1 -0
  144. package/dist/lib/launch/qwen-state.d.ts +30 -0
  145. package/dist/lib/launch/qwen-state.d.ts.map +1 -0
  146. package/dist/lib/launch/qwen-state.js +57 -0
  147. package/dist/lib/launch/qwen-state.js.map +1 -0
  148. package/dist/lib/launch/qwen-trust.d.ts +24 -0
  149. package/dist/lib/launch/qwen-trust.d.ts.map +1 -0
  150. package/dist/lib/launch/qwen-trust.js +100 -0
  151. package/dist/lib/launch/qwen-trust.js.map +1 -0
  152. package/dist/lib/launch/registry/agents/amp.d.ts +3 -0
  153. package/dist/lib/launch/registry/agents/amp.d.ts.map +1 -0
  154. package/dist/lib/launch/registry/agents/amp.js +14 -0
  155. package/dist/lib/launch/registry/agents/amp.js.map +1 -0
  156. package/dist/lib/launch/registry/agents/claude-code.js +1 -1
  157. package/dist/lib/launch/registry/agents/claude-code.js.map +1 -1
  158. package/dist/lib/launch/registry/agents/codex.d.ts.map +1 -1
  159. package/dist/lib/launch/registry/agents/codex.js +4 -2
  160. package/dist/lib/launch/registry/agents/codex.js.map +1 -1
  161. package/dist/lib/launch/registry/agents/copilot.d.ts +3 -0
  162. package/dist/lib/launch/registry/agents/copilot.d.ts.map +1 -0
  163. package/dist/lib/launch/registry/agents/copilot.js +11 -0
  164. package/dist/lib/launch/registry/agents/copilot.js.map +1 -0
  165. package/dist/lib/launch/registry/agents/cursor.js +1 -1
  166. package/dist/lib/launch/registry/agents/cursor.js.map +1 -1
  167. package/dist/lib/launch/registry/agents/droid.d.ts +3 -0
  168. package/dist/lib/launch/registry/agents/droid.d.ts.map +1 -0
  169. package/dist/lib/launch/registry/agents/droid.js +13 -0
  170. package/dist/lib/launch/registry/agents/droid.js.map +1 -0
  171. package/dist/lib/launch/registry/agents/gemini-cli.d.ts.map +1 -1
  172. package/dist/lib/launch/registry/agents/gemini-cli.js +4 -2
  173. package/dist/lib/launch/registry/agents/gemini-cli.js.map +1 -1
  174. package/dist/lib/launch/registry/agents/grok-build.d.ts +3 -0
  175. package/dist/lib/launch/registry/agents/grok-build.d.ts.map +1 -0
  176. package/dist/lib/launch/registry/agents/grok-build.js +14 -0
  177. package/dist/lib/launch/registry/agents/grok-build.js.map +1 -0
  178. package/dist/lib/launch/registry/agents/kiro.d.ts +3 -0
  179. package/dist/lib/launch/registry/agents/kiro.d.ts.map +1 -0
  180. package/dist/lib/launch/registry/agents/kiro.js +11 -0
  181. package/dist/lib/launch/registry/agents/kiro.js.map +1 -0
  182. package/dist/lib/launch/registry/agents/opencode.js +1 -1
  183. package/dist/lib/launch/registry/agents/opencode.js.map +1 -1
  184. package/dist/lib/launch/registry/agents/pi.js +1 -1
  185. package/dist/lib/launch/registry/agents/pi.js.map +1 -1
  186. package/dist/lib/launch/registry/agents/qwen.d.ts +3 -0
  187. package/dist/lib/launch/registry/agents/qwen.d.ts.map +1 -0
  188. package/dist/lib/launch/registry/agents/qwen.js +11 -0
  189. package/dist/lib/launch/registry/agents/qwen.js.map +1 -0
  190. package/dist/lib/launch/registry/index.d.ts +4 -1
  191. package/dist/lib/launch/registry/index.d.ts.map +1 -1
  192. package/dist/lib/launch/registry/index.js +11 -2
  193. package/dist/lib/launch/registry/index.js.map +1 -1
  194. package/dist/lib/launch/registry/types.d.ts +18 -2
  195. package/dist/lib/launch/registry/types.d.ts.map +1 -1
  196. package/dist/lib/launch/run-agent.d.ts +15 -0
  197. package/dist/lib/launch/run-agent.d.ts.map +1 -1
  198. package/dist/lib/launch/run-agent.js +23 -2
  199. package/dist/lib/launch/run-agent.js.map +1 -1
  200. package/dist/lib/launch/strict-entry.d.ts +49 -0
  201. package/dist/lib/launch/strict-entry.d.ts.map +1 -0
  202. package/dist/lib/launch/strict-entry.js +108 -0
  203. package/dist/lib/launch/strict-entry.js.map +1 -0
  204. package/dist/lib/llm-providers.d.ts +66 -0
  205. package/dist/lib/llm-providers.d.ts.map +1 -0
  206. package/dist/lib/llm-providers.js +150 -0
  207. package/dist/lib/llm-providers.js.map +1 -0
  208. package/dist/lib/local-llm.d.ts +63 -12
  209. package/dist/lib/local-llm.d.ts.map +1 -1
  210. package/dist/lib/local-llm.js +229 -104
  211. package/dist/lib/local-llm.js.map +1 -1
  212. package/dist/lib/safe-config-write.d.ts +12 -1
  213. package/dist/lib/safe-config-write.d.ts.map +1 -1
  214. package/dist/lib/safe-config-write.js +123 -7
  215. package/dist/lib/safe-config-write.js.map +1 -1
  216. package/dist/lib/startup-env.d.ts +8 -0
  217. package/dist/lib/startup-env.d.ts.map +1 -0
  218. package/dist/lib/startup-env.js +8 -0
  219. package/dist/lib/startup-env.js.map +1 -0
  220. package/package.json +3 -2
@@ -0,0 +1,22 @@
1
+ import { type AlignLocalState } from './strict-entry.js';
2
+ export interface KiroProjectState extends AlignLocalState {
3
+ /** $KIRO_HOME/settings/mcp.json, else ~/.kiro/settings/mcp.json: the file align adds to. */
4
+ mcpFile: string;
5
+ }
6
+ /** KIRO_HOME "Override default ~/.kiro directory" (kiro.dev CLI reference). */
7
+ export declare function kiroDir(home: string, env: Record<string, string | undefined>): string;
8
+ /**
9
+ * What Kiro CLI would already load for align, FROM ITS DOCS ONLY (agent configs included, below) (no binary was run; kiro.dev
10
+ * docs/mcp/configuration): the global `~/.kiro/settings/mcp.json` and a workspace
11
+ * `.kiro/settings/mcp.json`, merged "with workspace settings taking precedence", a higher
12
+ * priority config "completely overrides lower ones for that specific server". So:
13
+ * - a canonical `align` or align-local in either file: present, nothing to add;
14
+ * - a non-canonical align-local in a workspace file (any directory from the cwd up, a superset
15
+ * of where Kiro looks) would replace ours: a conflict, nothing is written;
16
+ * - a non-canonical align-local in the global file: the writer never edits an existing entry,
17
+ * so that is a conflict too.
18
+ */
19
+ export declare function readKiroState(cwd: string, home: string, opts: {
20
+ localIsDefault: boolean;
21
+ }, env: Record<string, string | undefined>, platform: string): KiroProjectState;
22
+ //# sourceMappingURL=kiro-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiro-state.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/kiro-state.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,eAAe,EAAqC,MAAM,mBAAmB,CAAC;AAE5F,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,4FAA4F;IAC5F,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD,+EAA+E;AAC/E,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAErF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAwBvK"}
@@ -0,0 +1,59 @@
1
+ import { readdirSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { ancestors, readText } from './layer-files.js';
4
+ import { isCanonicalLocalEntry, parseJsonc } from './strict-entry.js';
5
+ const isObject = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
6
+ /** The `.json` files in a directory, sorted; none when it is missing or unreadable. */
7
+ function jsonFiles(dir) {
8
+ try {
9
+ return readdirSync(dir).filter((n) => n.endsWith('.json')).sort().map((n) => path.join(dir, n));
10
+ }
11
+ catch {
12
+ return [];
13
+ }
14
+ }
15
+ /** KIRO_HOME "Override default ~/.kiro directory" (kiro.dev CLI reference). */
16
+ export function kiroDir(home, env) {
17
+ return env['KIRO_HOME'] ? path.resolve(env['KIRO_HOME']) : path.join(home, '.kiro');
18
+ }
19
+ /**
20
+ * What Kiro CLI would already load for align, FROM ITS DOCS ONLY (agent configs included, below) (no binary was run; kiro.dev
21
+ * docs/mcp/configuration): the global `~/.kiro/settings/mcp.json` and a workspace
22
+ * `.kiro/settings/mcp.json`, merged "with workspace settings taking precedence", a higher
23
+ * priority config "completely overrides lower ones for that specific server". So:
24
+ * - a canonical `align` or align-local in either file: present, nothing to add;
25
+ * - a non-canonical align-local in a workspace file (any directory from the cwd up, a superset
26
+ * of where Kiro looks) would replace ours: a conflict, nothing is written;
27
+ * - a non-canonical align-local in the global file: the writer never edits an existing entry,
28
+ * so that is a conflict too.
29
+ */
30
+ export function readKiroState(cwd, home, opts, env, platform) {
31
+ const o = { ...opts, platform, host: 'mcpServers' };
32
+ const mcpFile = path.join(kiroDir(home, env), 'settings', 'mcp.json');
33
+ const files = [mcpFile, ...ancestors(cwd).map((d) => path.join(d, '.kiro', 'settings', 'mcp.json')).filter((f) => f !== mcpFile)];
34
+ const state = { present: false, overridden: [], mcpFile };
35
+ for (const file of files) {
36
+ const servers = parseJsonc(readText(file))?.['mcpServers'];
37
+ if (!isObject(servers))
38
+ continue;
39
+ if (isCanonicalLocalEntry(servers['align'], o) || isCanonicalLocalEntry(servers['align-local'], o))
40
+ state.present = true;
41
+ else if ('align-local' in servers)
42
+ state.conflict ??= file;
43
+ }
44
+ // Agent configs outrank both mcp.json files ("Agent Config - mcpServers field in agent JSON",
45
+ // a same-named server is "completely" overridden). Every agent file in a workspace
46
+ // .kiro/agents/ (cwd up) and the global agents dir is read, so whichever agent the user
47
+ // selects (`--agent <name>`, or a default set with `kiro-cli agent set-default`) is covered.
48
+ // A canonical entry there is no conflict, but it serves only that agent, so it is not "present".
49
+ const agentDirs = [...ancestors(cwd).map((d) => path.join(d, '.kiro', 'agents')), path.join(kiroDir(home, env), 'agents')];
50
+ for (const dir of agentDirs) {
51
+ for (const file of jsonFiles(dir)) {
52
+ const servers = parseJsonc(readText(file))?.['mcpServers'];
53
+ if (isObject(servers) && 'align-local' in servers && !isCanonicalLocalEntry(servers['align-local'], o))
54
+ state.conflict ??= file;
55
+ }
56
+ }
57
+ return state;
58
+ }
59
+ //# sourceMappingURL=kiro-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiro-state.js","sourceRoot":"","sources":["../../../src/lib/launch/kiro-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAwB,qBAAqB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQ5F,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAa,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAErG,uFAAuF;AACvF,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,GAAuC;IAC3E,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,IAAY,EAAE,IAAiC,EAAE,GAAuC,EAAE,QAAgB;IACnJ,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAqB,EAAE,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;IAClI,MAAM,KAAK,GAAqB,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IAC5E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACjC,IAAI,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,qBAAqB,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;aACpH,IAAI,aAAa,IAAI,OAAO;YAAE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC7D,CAAC;IACD,8FAA8F;IAC9F,mFAAmF;IACnF,wFAAwF;IACxF,6FAA6F;IAC7F,iGAAiG;IACjG,MAAM,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3H,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;YAC3D,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,aAAa,IAAI,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAAE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;QAClI,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -11,5 +11,20 @@ export declare function launchCacheDir(env: Record<string, string | undefined>):
11
11
  */
12
12
  export declare function writeIfChanged(dir: string, name: string, content: string, opts?: {
13
13
  uid?: number;
14
+ mode?: number;
14
15
  }): boolean;
16
+ /** How long a copy nobody launched with is kept: long enough for any session still reading it to have started. */
17
+ export declare const STALE_AFTER_MS: number;
18
+ /**
19
+ * Tidy launch files named `<prefix>...` without pulling one from under a concurrent session:
20
+ * - `keep`: the file this launch uses; its mtime is refreshed, so it is never aged out while in use;
21
+ * - `remove`: this launch's own file when it is NOT used (its source no longer injects);
22
+ * - any other `<prefix>` file untouched for longer than STALE_AFTER_MS.
23
+ * A missing dir is fine.
24
+ */
25
+ export declare function pruneLaunchFiles(dir: string, prefix: string, opts?: {
26
+ keep?: string;
27
+ remove?: string;
28
+ now?: number;
29
+ }): void;
15
30
  //# sourceMappingURL=launch-files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch-files.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/launch-files.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAG9E;AAgBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAmB/G"}
1
+ {"version":3,"file":"launch-files.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/launch-files.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAG9E;AAgBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAqC9H;AAED,kHAAkH;AAClH,eAAO,MAAM,cAAc,QAAsB,CAAC;AAElD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,IAAI,CAuB/H"}
@@ -1,5 +1,5 @@
1
1
  import envPaths from 'env-paths';
2
- import { mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from 'node:fs';
2
+ import { chmodSync, lstatSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, statSync, utimesSync, writeFileSync } from 'node:fs';
3
3
  import path from 'node:path';
4
4
  /**
5
5
  * $XDG_CACHE_HOME/align-cli/launch, honoured on every platform; else the OS cache dir.
@@ -33,24 +33,84 @@ function defaultCacheDir() {
33
33
  export function writeIfChanged(dir, name, content, opts = {}) {
34
34
  mkdirSync(dir, { recursive: true, mode: 0o700 });
35
35
  const uid = 'uid' in opts ? opts.uid : process.getuid?.();
36
- if (uid !== undefined && process.platform !== 'win32' && statSync(dir).uid !== uid) {
36
+ const posix = process.platform !== 'win32';
37
+ const st = statSync(dir);
38
+ if (uid !== undefined && posix && st.uid !== uid) {
37
39
  throw new Error(`${dir} is owned by another user; refusing to use it for launch files`);
38
40
  }
41
+ // A dir made before mkdir's 0700 (or by hand) can be looser; it is ours, so tighten it.
42
+ if (posix && (st.mode & 0o077) !== 0)
43
+ chmodSync(dir, 0o700);
39
44
  const target = path.join(dir, name);
40
45
  // A name may carry sub-directories (OpenCode loads plugins/align.js from a config dir).
41
46
  const targetDir = path.dirname(target);
42
47
  if (targetDir !== dir)
43
48
  mkdirSync(targetDir, { recursive: true, mode: 0o700 });
44
49
  try {
45
- if (readFileSync(target, 'utf8') === content)
50
+ // Only a regular file counts as up to date: a link here (planted, or left by hand) is replaced.
51
+ if (lstatSync(target).isFile() && readFileSync(target, 'utf8') === content) {
52
+ if (opts.mode !== undefined && posix && (statSync(target).mode & 0o777) !== opts.mode)
53
+ chmodSync(target, opts.mode);
46
54
  return false;
55
+ }
47
56
  }
48
57
  catch {
49
58
  // missing: write it
50
59
  }
51
60
  const tmp = path.join(targetDir, `.${path.basename(name)}.${process.pid}.tmp`);
52
- writeFileSync(tmp, content, 'utf8');
61
+ // Never through whatever sits at the temp path: create it exclusively (wx), with the mode from
62
+ // the first byte (a umask only removes bits). Something already there (a crashed launch's
63
+ // leftover, or a planted link) is removed, not followed, and the exclusive create is retried.
64
+ const create = () => writeFileSync(tmp, content, { encoding: 'utf8', flag: 'wx', ...(opts.mode === undefined ? {} : { mode: opts.mode }) });
65
+ try {
66
+ create();
67
+ }
68
+ catch (e) {
69
+ if (e.code !== 'EEXIST')
70
+ throw e;
71
+ rmSync(tmp, { force: true });
72
+ create();
73
+ }
53
74
  renameSync(tmp, target);
54
75
  return true;
55
76
  }
77
+ /** How long a copy nobody launched with is kept: long enough for any session still reading it to have started. */
78
+ export const STALE_AFTER_MS = 24 * 60 * 60 * 1000;
79
+ /**
80
+ * Tidy launch files named `<prefix>...` without pulling one from under a concurrent session:
81
+ * - `keep`: the file this launch uses; its mtime is refreshed, so it is never aged out while in use;
82
+ * - `remove`: this launch's own file when it is NOT used (its source no longer injects);
83
+ * - any other `<prefix>` file untouched for longer than STALE_AFTER_MS.
84
+ * A missing dir is fine.
85
+ */
86
+ export function pruneLaunchFiles(dir, prefix, opts = {}) {
87
+ const now = opts.now ?? Date.now();
88
+ let names;
89
+ try {
90
+ names = readdirSync(dir);
91
+ }
92
+ catch {
93
+ return;
94
+ }
95
+ for (const n of names) {
96
+ if (!n.startsWith(prefix))
97
+ continue;
98
+ const file = path.join(dir, n);
99
+ if (n === opts.keep) {
100
+ utimesSync(file, new Date(now), new Date(now));
101
+ }
102
+ else if (n === opts.remove) {
103
+ rmSync(file, { force: true });
104
+ }
105
+ else {
106
+ try {
107
+ if (now - lstatSync(file).mtimeMs > STALE_AFTER_MS)
108
+ rmSync(file, { force: true });
109
+ }
110
+ catch {
111
+ // gone already
112
+ }
113
+ }
114
+ }
115
+ }
56
116
  //# sourceMappingURL=launch-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch-files.js","sourceRoot":"","sources":["../../../src/lib/launch/launch-files.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAuC;IACpE,MAAM,GAAG,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC5G,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe;IACtB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;IACrD,CAAC;YAAS,CAAC;QACT,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,IAAY,EAAE,OAAe,EAAE,OAAyB,EAAE;IACpG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAC1D,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,gEAAgE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACpC,wFAAwF;IACxF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,GAAG;QAAE,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IAC/E,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"launch-files.js","sourceRoot":"","sources":["../../../src/lib/launch/launch-files.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,20 @@
1
- import type { AgentName } from '../sessions/types.js';
2
- import { type LaunchAgent } from './agents.js';
3
1
  import type { LaunchSpec } from './adapters/claude-code.js';
4
2
  import { type ConfigWrite } from './config-writes.js';
3
+ import { type CodexProjectState } from './codex-state.js';
4
+ import { type CopilotProjectState } from './copilot-state.js';
5
5
  import { type CursorProjectState } from './cursor-state.js';
6
+ import { type InstallOfferDeps } from './install.js';
7
+ import { type PickerOption } from './picker-options.js';
8
+ import { type GeminiProjectState } from './gemini-state.js';
9
+ import { type AmpProjectState } from './amp-state.js';
10
+ import { type DroidProjectState } from './droid-state.js';
11
+ import { type GrokProjectState } from './grok-state.js';
12
+ import { type KiroProjectState } from './kiro-state.js';
13
+ import { type QwenProjectState } from './qwen-state.js';
6
14
  import { type OpenCodeProjectState } from './opencode-state.js';
7
15
  import { type PiProjectState } from './pi-state.js';
8
16
  import { type ProjectState } from './project-state.js';
17
+ import type { LaunchAgentId } from './registry/types.js';
9
18
  export interface LaunchDeps {
10
19
  env: Record<string, string | undefined>;
11
20
  argv: string[];
@@ -26,15 +35,42 @@ export interface LaunchDeps {
26
35
  readPiState(cwd: string, home: string, env: Record<string, string | undefined>): PiProjectState;
27
36
  /** What Cursor would already read. */
28
37
  readCursorState(cwd: string, home: string): CursorProjectState;
38
+ /** What Codex would already load (/etc/codex, $CODEX_HOME or ~/.codex, a -p profile in the user's args, every ancestor .codex/). */
39
+ readCodexState(cwd: string, home: string, env: Record<string, string | undefined>, platform: string, passthrough: string[]): CodexProjectState;
40
+ /** What Gemini CLI would already load, the system settings file it reads, and folder trust. */
41
+ readGeminiState(cwd: string, home: string, env: Record<string, string | undefined>, platform: string): GeminiProjectState;
42
+ /** What Copilot CLI would already load ($COPILOT_HOME or ~/.copilot, and the workspace). */
43
+ readCopilotState(cwd: string, home: string, env: Record<string, string | undefined>, platform: string): CopilotProjectState;
44
+ /** What Qwen Code would already load, the system settings file it reads, and folder trust. */
45
+ readQwenState?(cwd: string, home: string, env: Record<string, string | undefined>, platform: string): QwenProjectState;
46
+ /** What Factory Droid would already load, and whether the user brings their own runtime settings. */
47
+ readDroidState?(cwd: string, home: string, env: Record<string, string | undefined>, platform: string, passthrough: string[]): DroidProjectState;
48
+ /** What Amp would already load (its settings file, workspace files), and the user's own --mcp-config. */
49
+ readAmpState?(cwd: string, home: string, env: Record<string, string | undefined>, platform: string, passthrough: string[]): AmpProjectState;
50
+ /** What Kiro CLI would already load, and the global mcp.json align adds to. */
51
+ readKiroState?(cwd: string, home: string, env: Record<string, string | undefined>, platform: string): KiroProjectState;
52
+ /** What Grok Build would already load, and the config.toml align adds to. */
53
+ readGrokState?(cwd: string, home: string, env: Record<string, string | undefined>, platform: string, passthrough: string[]): GrokProjectState;
29
54
  /** Add to a file in the user's own agent config, once (C4). Lines go to `note`. */
30
55
  applyConfigWrite(w: ConfigWrite, note: (line: string) => void): void;
31
56
  cacheDir(env: Record<string, string | undefined>): string;
32
- writeIfChanged(dir: string, name: string, content: string): boolean;
57
+ writeIfChanged(dir: string, name: string, content: string, opts?: {
58
+ mode?: number;
59
+ }): boolean;
60
+ /** Tidy launch files from earlier launches without removing one a concurrent session uses. */
61
+ pruneLaunchFiles(dir: string, prefix: string, opts: {
62
+ keep?: string;
63
+ remove?: string;
64
+ }): void;
33
65
  runAgent(spec: LaunchSpec): Promise<number>;
34
66
  /** Fire and forget: the caller never awaits what this returns. */
35
- record(agent: AgentName): void;
36
- /** Ask which agent. Only called on a TTY with more than one supported agent installed. */
37
- pick(candidates: LaunchAgent[]): Promise<AgentName | null>;
67
+ record(agent: LaunchAgentId): void;
68
+ /** Ask which agent. Only called on a TTY with no stored agent. `initial` is preselected. */
69
+ pick(options: PickerOption[], initial?: LaunchAgentId): Promise<LaunchAgentId | null>;
70
+ /** Default-No question: true on yes, false on no, null on Ctrl-C. Only asked on a TTY (Decision 4). */
71
+ confirm(message: string): Promise<boolean | null>;
72
+ /** Runs an install argv the user approved. Never reached without a TTY and a yes. */
73
+ spawnInstall: InstallOfferDeps['spawn'];
38
74
  /** Every line align itself writes on this path. stderr only: stdout belongs to the agent (`align -- -p ... | jq`). */
39
75
  err(line: string): void;
40
76
  now(): number;
@@ -45,6 +81,25 @@ export type LaunchResult = {
45
81
  handled: true;
46
82
  code: number;
47
83
  };
84
+ /**
85
+ * ALIGN_WRAPPED (we are already inside a launched agent) or ALIGN_NO_LAUNCH turns launching
86
+ * off. One writer, read by launchIfChosen and by the wizard's outro, which must not say an
87
+ * agent is opening when this says it will not.
88
+ */
89
+ export declare function launchSuppressed(env?: Record<string, string | undefined>): boolean;
90
+ /**
91
+ * Whether bare `align` opens the agent once the first-run wizard ends. default-action.ts gates
92
+ * its post-wizard launch on this, and setup.ts's outro reads it to choose between "Opening
93
+ * <Agent>. Ask it: ..." and the run-align instruction - one predicate, so the outro says
94
+ * "Opening" exactly when the launch happens. The terminal and suppression checks mirror the
95
+ * ones launchIfChosen applies itself.
96
+ */
97
+ export declare function launchesAfterWizard(o: {
98
+ localGraph: boolean;
99
+ agent: string | null | undefined;
100
+ env?: Record<string, string | undefined>;
101
+ isTTY: boolean;
102
+ }): boolean;
48
103
  /**
49
104
  * Whether an align command with no --env reads the local graph: the CLI's own resolver, so
50
105
  * ALIGN_ENV, the signed-in rule and the demo-mode rule all apply exactly as they do for `align ask`.
@@ -1 +1 @@
1
- {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/launch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/launch.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,48 @@
1
+ import { spawn as nodeSpawn } from 'node:child_process';
1
2
  import os from 'node:os';
2
3
  import { performance } from 'node:perf_hooks';
3
4
  import { createConfigStore } from '../config.js';
4
5
  import { resolveEnv } from '../resolve-env.js';
5
- import { agentByName, resolveAgentBin, supportedAgents } from './agents.js';
6
+ import { agentByName, byPriority, resolveAgentBin, supportedAgents } from './agents.js';
6
7
  import { applyConfigWrite } from './config-writes.js';
8
+ import { readCodexState } from './codex-state.js';
9
+ import { readCopilotState } from './copilot-state.js';
7
10
  import { readCursorState } from './cursor-state.js';
8
11
  import { findOnPath } from './detect.js';
9
- import { launchCacheDir, writeIfChanged } from './launch-files.js';
12
+ import { offerInstall } from './install.js';
13
+ import { chooseAgent } from './picker-options.js';
14
+ import { confirmDefaultNo, selectAgent } from './prompts.js';
15
+ import { readGeminiState } from './gemini-state.js';
16
+ import { readAmpState } from './amp-state.js';
17
+ import { readDroidState } from './droid-state.js';
18
+ import { readGrokState } from './grok-state.js';
19
+ import { readKiroState } from './kiro-state.js';
20
+ import { readQwenState } from './qwen-state.js';
21
+ import { launchCacheDir, pruneLaunchFiles, writeIfChanged } from './launch-files.js';
10
22
  import { readOpenCodeState } from './opencode-state.js';
11
23
  import { readPiState } from './pi-state.js';
12
24
  import { readProjectState } from './project-state.js';
13
25
  import { specByName } from './registry/index.js';
14
26
  import { runAgent } from './run-agent.js';
15
27
  const set = (v) => v !== undefined && v !== '';
28
+ /**
29
+ * ALIGN_WRAPPED (we are already inside a launched agent) or ALIGN_NO_LAUNCH turns launching
30
+ * off. One writer, read by launchIfChosen and by the wizard's outro, which must not say an
31
+ * agent is opening when this says it will not.
32
+ */
33
+ export function launchSuppressed(env = process.env) {
34
+ return set(env['ALIGN_WRAPPED']) || set(env['ALIGN_NO_LAUNCH']);
35
+ }
36
+ /**
37
+ * Whether bare `align` opens the agent once the first-run wizard ends. default-action.ts gates
38
+ * its post-wizard launch on this, and setup.ts's outro reads it to choose between "Opening
39
+ * <Agent>. Ask it: ..." and the run-align instruction - one predicate, so the outro says
40
+ * "Opening" exactly when the launch happens. The terminal and suppression checks mirror the
41
+ * ones launchIfChosen applies itself.
42
+ */
43
+ export function launchesAfterWizard(o) {
44
+ return o.localGraph && Boolean(o.agent) && !launchSuppressed(o.env ?? process.env) && o.isTTY;
45
+ }
16
46
  /**
17
47
  * Whether an align command with no --env reads the local graph: the CLI's own resolver, so
18
48
  * ALIGN_ENV, the signed-in rule and the demo-mode rule all apply exactly as they do for `align ask`.
@@ -35,9 +65,18 @@ function defaultDeps() {
35
65
  readOpenCodeState: (cwd, home) => readOpenCodeState(cwd, home, { localIsDefault: isLocalDefault() }, process.env),
36
66
  readPiState: (cwd, home, env) => readPiState(cwd, home, { localIsDefault: isLocalDefault() }, env),
37
67
  readCursorState: (cwd, home) => readCursorState(cwd, home, { localIsDefault: isLocalDefault() }),
68
+ readCodexState: (cwd, home, env, platform, passthrough) => readCodexState(cwd, home, { localIsDefault: isLocalDefault() }, env, platform, passthrough),
69
+ readGeminiState: (cwd, home, env, platform) => readGeminiState(cwd, home, { localIsDefault: isLocalDefault() }, env, platform),
70
+ readCopilotState: (cwd, home, env, platform) => readCopilotState(cwd, home, { localIsDefault: isLocalDefault() }, env, platform),
71
+ readQwenState: (cwd, home, env, platform) => readQwenState(cwd, home, { localIsDefault: isLocalDefault() }, env, platform),
72
+ readDroidState: (cwd, home, env, platform, passthrough) => readDroidState(cwd, home, { localIsDefault: isLocalDefault() }, env, platform, passthrough),
73
+ readAmpState: (cwd, home, env, platform, passthrough) => readAmpState(cwd, home, { localIsDefault: isLocalDefault() }, env, platform, passthrough),
74
+ readKiroState: (cwd, home, env, platform) => readKiroState(cwd, home, { localIsDefault: isLocalDefault() }, env, platform),
75
+ readGrokState: (cwd, home, env, platform, passthrough) => readGrokState(cwd, home, { localIsDefault: isLocalDefault() }, env, platform, passthrough),
38
76
  applyConfigWrite: (w, note) => applyConfigWrite(w, note, { has: (f) => config.wasWriteRefused(f), add: (f) => config.markWriteRefused(f), remove: (f) => config.unmarkWriteRefused(f) }),
39
77
  cacheDir: launchCacheDir,
40
78
  writeIfChanged,
79
+ pruneLaunchFiles,
41
80
  runAgent: (spec) => runAgent(spec),
42
81
  record: (agent) => {
43
82
  // Dynamic and un-awaited: telemetry consent rules live in recordFunnelStage, and none of
@@ -46,14 +85,9 @@ function defaultDeps() {
46
85
  .then((m) => m.recordFunnelStage(config.getEnvironment('local'), 'agent_launched', 'align', { agent }))
47
86
  .catch(() => undefined);
48
87
  },
49
- pick: async (candidates) => {
50
- const clack = await import('@clack/prompts');
51
- const answer = await clack.select({
52
- message: 'Which coding agent should `align` open?',
53
- options: candidates.map((a) => ({ value: a.name, label: a.label })),
54
- });
55
- return clack.isCancel(answer) ? null : answer;
56
- },
88
+ pick: (options, initial) => selectAgent(options, initial, process.stderr),
89
+ confirm: (message) => confirmDefaultNo(message, process.stderr),
90
+ spawnInstall: (command, args, options) => nodeSpawn(command, args, options),
57
91
  err: (l) => console.error(l),
58
92
  now: () => performance.now(),
59
93
  };
@@ -72,7 +106,7 @@ function splitArgv(argv) {
72
106
  */
73
107
  export async function launchIfChosen(overrides = {}) {
74
108
  const d = { ...defaultDeps(), ...overrides };
75
- if (set(d.env['ALIGN_WRAPPED']) || set(d.env['ALIGN_NO_LAUNCH']))
109
+ if (launchSuppressed(d.env))
76
110
  return { handled: false };
77
111
  const { operands, passthrough } = splitArgv(d.argv);
78
112
  if (operands.length > 0) {
@@ -96,30 +130,45 @@ export async function launchIfChosen(overrides = {}) {
96
130
  const stored = agent !== undefined;
97
131
  let announce;
98
132
  if (!agent) {
99
- const installed = supportedAgents().filter((a) => resolveAgentBin(a, d.findOnPath, d.env, d.platform) !== null);
100
- if (installed.length === 0) {
101
- const works = supportedAgents();
133
+ const works = supportedAgents();
134
+ const isInstalled = (a) => resolveAgentBin(a, d.findOnPath, d.env, d.platform) !== null;
135
+ const installed = works.filter(isInstalled);
136
+ if (d.isTTY) {
137
+ // Every agent Align supports, installed ones first; a missing one can be installed from
138
+ // here. Always asked on a terminal: with one installed it is preselected, so Enter keeps it.
139
+ const chosen = await chooseAgent(works, {
140
+ isInstalled,
141
+ select: (options, initial) => d.pick(options, initial),
142
+ offer: (a) => offerInstall(specByName(a.name), {
143
+ isTTY: d.isTTY,
144
+ platform: d.platform,
145
+ confirm: (m) => d.confirm(m),
146
+ spawn: d.spawnInstall,
147
+ onPath: (bin) => d.findOnPath(bin, d.env, d.platform),
148
+ say: d.err,
149
+ }),
150
+ say: d.err,
151
+ });
152
+ if (!chosen)
153
+ return { handled: true, code: 1 };
154
+ agent = chosen;
155
+ }
156
+ else if (installed.length === 0) {
102
157
  d.err(`No coding agent that Align can open was found on your PATH. Align works with: ${works.map((a) => a.label).join(', ')}.`);
103
158
  for (const a of works)
104
159
  d.err(`Install ${a.label}: ${a.install}`);
105
- d.err('Then run `align` again.');
160
+ d.err('Then run `align` again. `align agents` lists them all.');
106
161
  return { handled: true, code: 1 };
107
162
  }
108
- if (installed.length === 1) {
163
+ else if (installed.length === 1) {
109
164
  agent = installed[0];
110
165
  announce = `Opening ${agent.label}. Switch any time with \`align use\`.`;
111
166
  }
112
- else if (d.isTTY) {
113
- const choice = await d.pick(installed);
114
- agent = installed.find((a) => a.name === choice);
115
- if (!agent)
116
- return { handled: true, code: 1 };
117
- }
118
167
  else {
119
- d.err(`More than one coding agent is installed (${installed.map((a) => a.label).join(', ')}) and there is no terminal to ask in.`);
120
- d.err(`Choose one: align use <agent> (${installed.map((a) => a.name).join(' | ')})`);
121
- d.err('Then run `align` again.');
122
- return { handled: true, code: 2 };
168
+ // An explicit `align -- ...` with no terminal (a script's first run). Take the old order, so
169
+ // what a script opened before wave A it still opens, and say which one.
170
+ agent = byPriority(installed)[0];
171
+ announce = `Opening ${agent.label}: more than one coding agent is installed and there is no terminal to ask. Change it with: align use <agent>`;
123
172
  }
124
173
  }
125
174
  const build = specByName(agent.name)?.build;
@@ -137,21 +186,39 @@ export async function launchIfChosen(overrides = {}) {
137
186
  return explicit ? { handled: true, code: 127 } : { handled: false };
138
187
  }
139
188
  const dir = d.cacheDir(d.env);
140
- const built = build(d, { passthrough, cachePath: (name) => `${dir}/${name}` });
189
+ let built;
190
+ try {
191
+ built = build(d, { passthrough, cachePath: (name) => `${dir}/${name}` });
192
+ }
193
+ catch (e) {
194
+ // Reading the user's or a repo's config is reading untrusted input. Whatever it does to the
195
+ // reader, the user still gets their agent, without Align, and one line instead of a trace.
196
+ d.err(`Could not prepare Align for ${agent.label} (${e.message}). Opening it without Align's graph.`);
197
+ built = { bin: agent.bin, args: [...passthrough], env: { ALIGN_WRAPPED: '1' }, files: [] };
198
+ }
141
199
  // The adapter names the agent's usual binary; run whichever name is actually installed.
142
200
  const spec = resolved && resolved.bin !== built.bin ? { ...built, bin: resolved.bin } : built;
143
201
  try {
144
- for (const f of spec.files)
145
- d.writeIfChanged(dir, f.name, f.content);
202
+ for (const f of spec.files) {
203
+ if (f.mode === undefined)
204
+ d.writeIfChanged(dir, f.name, f.content);
205
+ else
206
+ d.writeIfChanged(dir, f.name, f.content, { mode: f.mode });
207
+ }
208
+ if (spec.prune)
209
+ d.pruneLaunchFiles(dir, spec.prune.prefix, { keep: spec.prune.keep, remove: spec.prune.remove });
146
210
  }
147
211
  catch (e) {
148
212
  d.err(`Could not write launch files (${e.message}). Showing your graph instead.`);
149
213
  return { handled: false };
150
214
  }
151
- // On win32 the resolved path is what tells runAgent it holds a .cmd shim.
152
215
  for (const n of spec.notes ?? [])
153
216
  d.err(n);
154
- const toRun = d.platform === 'win32' ? { ...spec, bin: found } : spec;
217
+ // Spawn the path the PATH scan found, never the bare name, on every platform. findOnPath skips
218
+ // an empty PATH element, but a bare-name spawn reads one as the cwd: a `grok` in the repo would
219
+ // run in place of the binary that `acceptsBin` checked. On win32 the path is also what tells
220
+ // runAgent it holds a .cmd shim.
221
+ const toRun = { ...spec, bin: found };
155
222
  if (set(d.env['ALIGN_LAUNCH_TRACE']))
156
223
  d.err(`align-overhead-ms=${Math.round(d.now())}`);
157
224
  // A dry run measures; it must not change the machine, so nothing is persisted before this.
@@ -1 +1 @@
1
- {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/lib/launch/launch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/lib/launch/launch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** A file's text, or null when it is missing or unreadable (a directory, no permission). */
2
+ export declare function readText(file: string): string | null;
3
+ /** cwd and every directory above it, to the filesystem root, nearest first. */
4
+ export declare function ancestors(cwd: string): string[];
5
+ /** The file carries the managed align block (`align setup`'s instructions). */
6
+ export declare function fileHasBlock(file: string): boolean;
7
+ /**
8
+ * The value of a root option in the user's own args, before any `--` (`--opt v` or `--opt=v`).
9
+ * The last one wins, as a CLI parser reads it. undefined when absent.
10
+ */
11
+ export declare function optionValue(passthrough: string[], name: string): string | undefined;
12
+ //# sourceMappingURL=layer-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-files.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/layer-files.ts"],"names":[],"mappings":"AAIA,4FAA4F;AAC5F,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMpD;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAM/C;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASnF"}