@aligndottech/cli 0.46.1 → 0.47.1

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 (163) hide show
  1. package/README.md +10 -8
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +14 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/connect-agents.d.ts +3 -1
  6. package/dist/commands/connect-agents.d.ts.map +1 -1
  7. package/dist/commands/connect-agents.js +24 -4
  8. package/dist/commands/connect-agents.js.map +1 -1
  9. package/dist/commands/default-action.d.ts +5 -5
  10. package/dist/commands/default-action.d.ts.map +1 -1
  11. package/dist/commands/default-action.js +40 -13
  12. package/dist/commands/default-action.js.map +1 -1
  13. package/dist/commands/mcp.d.ts.map +1 -1
  14. package/dist/commands/mcp.js +12 -4
  15. package/dist/commands/mcp.js.map +1 -1
  16. package/dist/commands/registry.d.ts.map +1 -1
  17. package/dist/commands/registry.js +2 -0
  18. package/dist/commands/registry.js.map +1 -1
  19. package/dist/commands/setup.d.ts +3 -1
  20. package/dist/commands/setup.d.ts.map +1 -1
  21. package/dist/commands/setup.js +91 -116
  22. package/dist/commands/setup.js.map +1 -1
  23. package/dist/commands/use.d.ts +32 -0
  24. package/dist/commands/use.d.ts.map +1 -0
  25. package/dist/commands/use.js +94 -0
  26. package/dist/commands/use.js.map +1 -0
  27. package/dist/lib/agent-rules.d.ts +18 -5
  28. package/dist/lib/agent-rules.d.ts.map +1 -1
  29. package/dist/lib/agent-rules.js +81 -22
  30. package/dist/lib/agent-rules.js.map +1 -1
  31. package/dist/lib/config.d.ts +14 -10
  32. package/dist/lib/config.d.ts.map +1 -1
  33. package/dist/lib/config.js +64 -17
  34. package/dist/lib/config.js.map +1 -1
  35. package/dist/lib/foreign-env.d.ts +34 -0
  36. package/dist/lib/foreign-env.d.ts.map +1 -0
  37. package/dist/lib/foreign-env.js +50 -0
  38. package/dist/lib/foreign-env.js.map +1 -0
  39. package/dist/lib/gateway-client.d.ts +5 -1
  40. package/dist/lib/gateway-client.d.ts.map +1 -1
  41. package/dist/lib/gateway-client.js +10 -2
  42. package/dist/lib/gateway-client.js.map +1 -1
  43. package/dist/lib/launch/adapters/args.d.ts +7 -0
  44. package/dist/lib/launch/adapters/args.d.ts.map +1 -0
  45. package/dist/lib/launch/adapters/args.js +10 -0
  46. package/dist/lib/launch/adapters/args.js.map +1 -0
  47. package/dist/lib/launch/adapters/claude-code.d.ts +39 -0
  48. package/dist/lib/launch/adapters/claude-code.d.ts.map +1 -0
  49. package/dist/lib/launch/adapters/claude-code.js +39 -0
  50. package/dist/lib/launch/adapters/claude-code.js.map +1 -0
  51. package/dist/lib/launch/adapters/cursor.d.ts +18 -0
  52. package/dist/lib/launch/adapters/cursor.d.ts.map +1 -0
  53. package/dist/lib/launch/adapters/cursor.js +27 -0
  54. package/dist/lib/launch/adapters/cursor.js.map +1 -0
  55. package/dist/lib/launch/adapters/opencode.d.ts +21 -0
  56. package/dist/lib/launch/adapters/opencode.d.ts.map +1 -0
  57. package/dist/lib/launch/adapters/opencode.js +64 -0
  58. package/dist/lib/launch/adapters/opencode.js.map +1 -0
  59. package/dist/lib/launch/adapters/pi.d.ts +23 -0
  60. package/dist/lib/launch/adapters/pi.d.ts.map +1 -0
  61. package/dist/lib/launch/adapters/pi.js +35 -0
  62. package/dist/lib/launch/adapters/pi.js.map +1 -0
  63. package/dist/lib/launch/agents.d.ts +24 -0
  64. package/dist/lib/launch/agents.d.ts.map +1 -0
  65. package/dist/lib/launch/agents.js +16 -0
  66. package/dist/lib/launch/agents.js.map +1 -0
  67. package/dist/lib/launch/config-writes.d.ts +37 -0
  68. package/dist/lib/launch/config-writes.d.ts.map +1 -0
  69. package/dist/lib/launch/config-writes.js +26 -0
  70. package/dist/lib/launch/config-writes.js.map +1 -0
  71. package/dist/lib/launch/cursor-state.d.ts +14 -0
  72. package/dist/lib/launch/cursor-state.d.ts.map +1 -0
  73. package/dist/lib/launch/cursor-state.js +26 -0
  74. package/dist/lib/launch/cursor-state.js.map +1 -0
  75. package/dist/lib/launch/detect.d.ts +7 -0
  76. package/dist/lib/launch/detect.d.ts.map +1 -0
  77. package/dist/lib/launch/detect.js +34 -0
  78. package/dist/lib/launch/detect.js.map +1 -0
  79. package/dist/lib/launch/launch-files.d.ts +15 -0
  80. package/dist/lib/launch/launch-files.d.ts.map +1 -0
  81. package/dist/lib/launch/launch-files.js +56 -0
  82. package/dist/lib/launch/launch-files.js.map +1 -0
  83. package/dist/lib/launch/launch.d.ts +63 -0
  84. package/dist/lib/launch/launch.d.ts.map +1 -0
  85. package/dist/lib/launch/launch.js +188 -0
  86. package/dist/lib/launch/launch.js.map +1 -0
  87. package/dist/lib/launch/opencode-state.d.ts +16 -0
  88. package/dist/lib/launch/opencode-state.d.ts.map +1 -0
  89. package/dist/lib/launch/opencode-state.js +103 -0
  90. package/dist/lib/launch/opencode-state.js.map +1 -0
  91. package/dist/lib/launch/pi-state.d.ts +23 -0
  92. package/dist/lib/launch/pi-state.d.ts.map +1 -0
  93. package/dist/lib/launch/pi-state.js +112 -0
  94. package/dist/lib/launch/pi-state.js.map +1 -0
  95. package/dist/lib/launch/pick-agent.d.ts +28 -0
  96. package/dist/lib/launch/pick-agent.d.ts.map +1 -0
  97. package/dist/lib/launch/pick-agent.js +63 -0
  98. package/dist/lib/launch/pick-agent.js.map +1 -0
  99. package/dist/lib/launch/project-state.d.ts +21 -0
  100. package/dist/lib/launch/project-state.d.ts.map +1 -0
  101. package/dist/lib/launch/project-state.js +100 -0
  102. package/dist/lib/launch/project-state.js.map +1 -0
  103. package/dist/lib/launch/registry/agents/claude-code.d.ts +3 -0
  104. package/dist/lib/launch/registry/agents/claude-code.d.ts.map +1 -0
  105. package/dist/lib/launch/registry/agents/claude-code.js +11 -0
  106. package/dist/lib/launch/registry/agents/claude-code.js.map +1 -0
  107. package/dist/lib/launch/registry/agents/codex.d.ts +3 -0
  108. package/dist/lib/launch/registry/agents/codex.d.ts.map +1 -0
  109. package/dist/lib/launch/registry/agents/codex.js +9 -0
  110. package/dist/lib/launch/registry/agents/codex.js.map +1 -0
  111. package/dist/lib/launch/registry/agents/cursor.d.ts +3 -0
  112. package/dist/lib/launch/registry/agents/cursor.d.ts.map +1 -0
  113. package/dist/lib/launch/registry/agents/cursor.js +11 -0
  114. package/dist/lib/launch/registry/agents/cursor.js.map +1 -0
  115. package/dist/lib/launch/registry/agents/gemini-cli.d.ts +3 -0
  116. package/dist/lib/launch/registry/agents/gemini-cli.d.ts.map +1 -0
  117. package/dist/lib/launch/registry/agents/gemini-cli.js +9 -0
  118. package/dist/lib/launch/registry/agents/gemini-cli.js.map +1 -0
  119. package/dist/lib/launch/registry/agents/opencode.d.ts +3 -0
  120. package/dist/lib/launch/registry/agents/opencode.d.ts.map +1 -0
  121. package/dist/lib/launch/registry/agents/opencode.js +11 -0
  122. package/dist/lib/launch/registry/agents/opencode.js.map +1 -0
  123. package/dist/lib/launch/registry/agents/pi.d.ts +3 -0
  124. package/dist/lib/launch/registry/agents/pi.d.ts.map +1 -0
  125. package/dist/lib/launch/registry/agents/pi.js +11 -0
  126. package/dist/lib/launch/registry/agents/pi.js.map +1 -0
  127. package/dist/lib/launch/registry/index.d.ts +5 -0
  128. package/dist/lib/launch/registry/index.d.ts.map +1 -0
  129. package/dist/lib/launch/registry/index.js +12 -0
  130. package/dist/lib/launch/registry/index.js.map +1 -0
  131. package/dist/lib/launch/registry/types.d.ts +20 -0
  132. package/dist/lib/launch/registry/types.d.ts.map +1 -0
  133. package/dist/lib/launch/registry/types.js +2 -0
  134. package/dist/lib/launch/registry/types.js.map +1 -0
  135. package/dist/lib/launch/run-agent.d.ts +21 -0
  136. package/dist/lib/launch/run-agent.d.ts.map +1 -0
  137. package/dist/lib/launch/run-agent.js +69 -0
  138. package/dist/lib/launch/run-agent.js.map +1 -0
  139. package/dist/lib/local-gateway-client.d.ts +4 -4
  140. package/dist/lib/local-gateway-client.d.ts.map +1 -1
  141. package/dist/lib/local-gateway-client.js +3 -1
  142. package/dist/lib/local-gateway-client.js.map +1 -1
  143. package/dist/lib/mcp-setup.d.ts +9 -2
  144. package/dist/lib/mcp-setup.d.ts.map +1 -1
  145. package/dist/lib/mcp-setup.js +104 -28
  146. package/dist/lib/mcp-setup.js.map +1 -1
  147. package/dist/lib/safe-config-write.d.ts +140 -0
  148. package/dist/lib/safe-config-write.d.ts.map +1 -0
  149. package/dist/lib/safe-config-write.js +701 -0
  150. package/dist/lib/safe-config-write.js.map +1 -0
  151. package/dist/lib/setup-route.d.ts +26 -0
  152. package/dist/lib/setup-route.d.ts.map +1 -0
  153. package/dist/lib/setup-route.js +36 -0
  154. package/dist/lib/setup-route.js.map +1 -0
  155. package/dist/lib/usage-telemetry.d.ts +6 -2
  156. package/dist/lib/usage-telemetry.d.ts.map +1 -1
  157. package/dist/lib/usage-telemetry.js +6 -2
  158. package/dist/lib/usage-telemetry.js.map +1 -1
  159. package/dist/lib/user-hooks.d.ts +2 -1
  160. package/dist/lib/user-hooks.d.ts.map +1 -1
  161. package/dist/lib/user-hooks.js +42 -10
  162. package/dist/lib/user-hooks.js.map +1 -1
  163. package/package.json +1 -1
@@ -0,0 +1,94 @@
1
+ import { agentByName, LAUNCH_AGENTS, resolveAgentBin } from '../lib/launch/agents.js';
2
+ import { findOnPath } from '../lib/launch/detect.js';
3
+ import { undoWrittenConfigs } from '../lib/safe-config-write.js';
4
+ /**
5
+ * `align use [agent]`: switch which coding agent bare `align` opens. Nobody has to run it
6
+ * first - bare `align` picks the one agent it finds - so this is only for changing later.
7
+ * Returns the exit code.
8
+ */
9
+ export async function runUse(name, d, opts = {}) {
10
+ if (opts.undo) {
11
+ if (name !== undefined || opts.none) {
12
+ d.err('error: --undo takes no agent name and cannot be combined with --none.');
13
+ return 2;
14
+ }
15
+ const manifest = d.writtenConfigs.get();
16
+ if (Object.keys(manifest).length === 0) {
17
+ d.log('Nothing to undo: align has not written to any agent config.');
18
+ return 0;
19
+ }
20
+ const report = undoWrittenConfigs(manifest);
21
+ for (const f of report.restored)
22
+ d.log(`Restored ${f} from its backup.`);
23
+ for (const f of report.removed)
24
+ d.log(`Removed ${f} (align created it).`);
25
+ for (const f of report.cleaned)
26
+ d.log(`Took align's own entries out of ${f}. Your entries are kept; the file was reformatted.`);
27
+ for (const line of report.skipped)
28
+ d.err(`Left alone: ${line}`);
29
+ // Only the finished files are forgotten: a skipped one keeps its record (and its backup).
30
+ d.writtenConfigs.drop(report.done);
31
+ // Without this, the next bare `align` would auto-pick the one installed agent and write
32
+ // the same entries back.
33
+ d.config.clearAgent();
34
+ d.config.setLaunchOff(true);
35
+ d.config.clearRefusedWrites();
36
+ const n = report.done.length;
37
+ d.log(`Restored ${n} ${n === 1 ? 'file' : 'files'}. align will not open an agent until you run \`align use <agent>\`.`);
38
+ return report.skipped.length > 0 ? 1 : 0;
39
+ }
40
+ if (opts.none) {
41
+ if (name !== undefined) {
42
+ d.err('error: --none takes no agent name.');
43
+ return 2;
44
+ }
45
+ d.config.clearAgent();
46
+ d.config.setLaunchOff(false); // `--none` means "pick again", which launching being off would contradict
47
+ d.log('Choice cleared. Bare `align` will pick an agent again.');
48
+ return 0;
49
+ }
50
+ if (name === undefined) {
51
+ const current = agentByName(d.config.getAgent());
52
+ d.log(current ? `Agent: ${current.name} (${current.label})` : 'No agent chosen yet. Bare `align` picks one automatically when it finds a supported agent on your PATH.');
53
+ return 0;
54
+ }
55
+ const agent = agentByName(name);
56
+ if (!agent) {
57
+ d.err(`error: unknown agent '${name}'. Choose one of: ${LAUNCH_AGENTS.map((a) => a.name).join(', ')}`);
58
+ return 1;
59
+ }
60
+ if (!agent.supported) {
61
+ d.err(`${agent.label} launching is coming soon. Nothing changed.`);
62
+ return 1;
63
+ }
64
+ if (!resolveAgentBin(agent, d.findOnPath, d.env, d.platform)) {
65
+ d.err(`${agent.bin} is not on your PATH. Install it (${agent.install}), then run this again. Nothing changed.`);
66
+ return 1;
67
+ }
68
+ d.config.setAgent(agent.name);
69
+ d.log(`Bare \`align\` now opens ${agent.label}.`);
70
+ return 0;
71
+ }
72
+ export function registerUseCommand(program) {
73
+ program
74
+ .command('use [agent]')
75
+ .option('--none', 'Clear the choice, so bare `align` picks again')
76
+ .option('--undo', 'Put back every agent config file align wrote (restores each from its .align-backup)')
77
+ .description('Choose the coding agent bare `align` opens (no argument shows the current one)')
78
+ .action(async (agent, opts) => {
79
+ const { createConfigStore } = await import('../lib/config.js');
80
+ const config = createConfigStore();
81
+ const code = await runUse(agent, {
82
+ config,
83
+ writtenConfigs: { get: () => config.getWrittenConfigs(), drop: (files) => config.dropWrittenConfigs(files) },
84
+ findOnPath,
85
+ env: process.env,
86
+ platform: process.platform,
87
+ log: (l) => console.log(l),
88
+ err: (l) => console.error(l),
89
+ }, opts);
90
+ if (code !== 0)
91
+ process.exit(code);
92
+ });
93
+ }
94
+ //# sourceMappingURL=use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../src/commands/use.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,29 @@
1
+ import { type OnForeign } from './foreign-env.js';
1
2
  export declare const ALIGN_NUDGE_START = "<!-- align:start (managed by `align setup` - do not edit) -->";
2
3
  export declare const ALIGN_NUDGE_END = "<!-- align:end -->";
3
- export declare function writeClaudeCodeHook(cwd: string, env?: string): void;
4
+ export declare function isAlignHookGroup(group: unknown): boolean;
5
+ export declare function isAlignSessionHookGroup(group: unknown): boolean;
6
+ /**
7
+ * The Pre/PostToolUse hook groups Claude Code gets, as one shape for both writers: the
8
+ * committed project file (writeClaudeCodeHook) and the per-session launch file (C1).
9
+ */
10
+ export declare function alignClaudeHooks(env?: string): Record<'PreToolUse' | 'PostToolUse', unknown[]>;
11
+ export declare function writeClaudeCodeHook(cwd: string, env?: string, onForeign?: OnForeign): boolean;
4
12
  export declare function writeClaudeCodeSessionHook(cwd: string): void;
13
+ /** The managed CLAUDE.md block as text, for per-session injection (C1). */
14
+ export declare function alignNudgeBody(): string;
5
15
  export declare function writeManagedNudge(cwd: string): void;
6
16
  export declare function writeAgentsNudge(cwd: string): void;
7
17
  export declare function writeCursorRule(cwd: string): void;
8
- export declare function writeProjectMcpConfig(cwd: string, env?: string): void;
9
- export declare function writePiExtension(cwd: string, env?: string): void;
10
- export declare function writeGeminiHooks(cwd: string, env?: string): void;
11
- export declare function writeOpenCodePlugin(cwd: string, env?: string): void;
18
+ export declare function writeProjectMcpConfig(cwd: string, env?: string, onForeign?: OnForeign): boolean;
19
+ export declare function piExtensionBody(env?: string): string;
20
+ export declare function writePiExtension(cwd: string, env?: string, onForeign?: OnForeign): boolean;
21
+ export declare function writeGeminiHooks(cwd: string, env?: string, onForeign?: OnForeign): boolean;
22
+ export declare function openCodePluginBody(env?: string): string;
23
+ export declare function writeOpenCodePlugin(cwd: string, env?: string, onForeign?: OnForeign): boolean;
12
24
  export declare function setupAgentAlignment(opts: {
13
25
  cwd: string;
14
26
  env?: string;
27
+ onForeign?: OnForeign;
15
28
  }): string[];
16
29
  //# sourceMappingURL=agent-rules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-rules.d.ts","sourceRoot":"","sources":["../../src/lib/agent-rules.ts"],"names":[],"mappings":"AAwCA,eAAO,MAAM,iBAAiB,kEAAkE,CAAC;AACjG,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAoBpD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CA+BnE;AAWD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAyB5D;AAoDD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEnD;AAID,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAElD;AAyBD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIjD;AAMD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CA4BrE;AA2GD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAIhE;AA0BD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAiChE;AA4ED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAInE;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EAAE,CAuBjF"}
1
+ {"version":3,"file":"agent-rules.d.ts","sourceRoot":"","sources":["../../src/lib/agent-rules.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAuCnE,eAAO,MAAM,iBAAiB,kEAAkE,CAAC;AACjG,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAOpD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGxD;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG/D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,YAAY,GAAG,aAAa,EAAE,OAAO,EAAE,CAAC,CAM9F;AAKD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAoC7F;AAWD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAyB5D;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAoDD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEnD;AAID,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAElD;AAyBD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIjD;AAMD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAkC/F;AA6CD,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CA2DpD;AAGD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAU1F;AAmCD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAuC1F;AAYD,wBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CA6DvD;AAGD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAU7F;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,EAAE,CA6BxG"}
@@ -1,5 +1,6 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import path from 'node:path';
3
+ import { carriesLocalEnv } from './foreign-env.js';
3
4
  import { alignServerEntry } from './mcp-setup.js';
4
5
  // ALI-121: the deterministic auto-alignment layer. ALI-120 gave the MCP server
5
6
  // instructions (model discretion); these project-local, committed files make the
@@ -39,18 +40,29 @@ function advisoryCommand(env) {
39
40
  // prod is the default env, so leave it off to keep the committed command portable.
40
41
  return env && env !== 'prod' ? `align check --advisory --env ${env}` : 'align check --advisory';
41
42
  }
42
- function isAlignHookGroup(group) {
43
+ export function isAlignHookGroup(group) {
43
44
  const hooks = group?.hooks;
44
45
  return Array.isArray(hooks) && hooks.some((h) => String(h?.command ?? '').includes('align check --advisory'));
45
46
  }
46
- function isAlignSessionHookGroup(group) {
47
+ export function isAlignSessionHookGroup(group) {
47
48
  const hooks = group?.hooks;
48
49
  return Array.isArray(hooks) && hooks.some((h) => String(h?.command ?? '').includes(SESSION_INJECT_COMMAND));
49
50
  }
51
+ /**
52
+ * The Pre/PostToolUse hook groups Claude Code gets, as one shape for both writers: the
53
+ * committed project file (writeClaudeCodeHook) and the per-session launch file (C1).
54
+ */
55
+ export function alignClaudeHooks(env) {
56
+ const group = () => ({
57
+ matcher: 'Write|Edit',
58
+ hooks: [{ type: 'command', command: advisoryCommand(env), timeout: HOOK_TIMEOUT_SECONDS }],
59
+ });
60
+ return { PreToolUse: [group()], PostToolUse: [group()] };
61
+ }
50
62
  // Merge a PostToolUse (Write|Edit) hook into the project .claude/settings.json. The
51
63
  // file is committed so the whole team gets it; Claude Code shows a one-time "approve
52
64
  // hooks" prompt the first time it loads a committed hook (documented in setup output).
53
- export function writeClaudeCodeHook(cwd, env) {
65
+ export function writeClaudeCodeHook(cwd, env, onForeign) {
54
66
  const dir = path.join(cwd, '.claude');
55
67
  const file = path.join(dir, 'settings.json');
56
68
  let settings = {};
@@ -63,23 +75,27 @@ export function writeClaudeCodeHook(cwd, env) {
63
75
  }
64
76
  }
65
77
  const hooks = (settings['hooks'] ?? {});
78
+ // The local wizard never replaces a hook that checks against a team env.
79
+ if (onForeign && env === 'local' && ['PreToolUse', 'PostToolUse'].some((event) => (Array.isArray(hooks[event]) ? hooks[event] : []).some((g) => isAlignHookGroup(g) && !carriesLocalEnv(JSON.stringify(g))))) {
80
+ onForeign('.claude/settings.json');
81
+ return false;
82
+ }
66
83
  // The same advisory command goes in both events; it self-detects Pre vs Post from the
67
84
  // hook payload on stdin. PreToolUse catches a conflict before the edit is written
68
85
  // (ALI-122); PostToolUse is the backstop on the landed change (ALI-121). Strip any
69
86
  // prior align-managed group from each so re-runs stay idempotent and pick up env changes.
87
+ const alignGroups = alignClaudeHooks(env);
70
88
  for (const event of ['PreToolUse', 'PostToolUse']) {
71
89
  const existing = (Array.isArray(hooks[event]) ? hooks[event] : []);
72
90
  const preserved = existing.filter((g) => !isAlignHookGroup(g));
73
- preserved.push({
74
- matcher: 'Write|Edit',
75
- hooks: [{ type: 'command', command: advisoryCommand(env), timeout: HOOK_TIMEOUT_SECONDS }],
76
- });
91
+ preserved.push(...alignGroups[event]);
77
92
  hooks[event] = preserved;
78
93
  }
79
94
  settings['hooks'] = hooks;
80
95
  if (!existsSync(dir))
81
96
  mkdirSync(dir, { recursive: true });
82
97
  writeFileSync(file, `${JSON.stringify(settings, null, 2)}\n`, 'utf8');
98
+ return true;
83
99
  }
84
100
  // Merge a SessionStart hook into the project .claude/settings.json (ALI-933) - the
85
101
  // read-path counterpart to writeClaudeCodeHook above. Separate function, separate merge:
@@ -115,6 +131,10 @@ export function writeClaudeCodeSessionHook(cwd) {
115
131
  mkdirSync(dir, { recursive: true });
116
132
  writeFileSync(file, `${JSON.stringify(settings, null, 2)}\n`, 'utf8');
117
133
  }
134
+ /** The managed CLAUDE.md block as text, for per-session injection (C1). */
135
+ export function alignNudgeBody() {
136
+ return managedNudgeBlock({ claudeHooks: true });
137
+ }
118
138
  // The nudge body. `claudeHooks` adds the Claude-Code-specific line about the
119
139
  // Pre/PostToolUse hook - true for CLAUDE.md, false for the agent-neutral AGENTS.md.
120
140
  function managedNudgeBlock(opts) {
@@ -205,7 +225,7 @@ export function writeCursorRule(cwd) {
205
225
  // pi-mcp-adapter), so does Claude Code, and it is committed, so one write covers the
206
226
  // whole team rather than each person's per-host config. Deliberately host-NEUTRAL: pi's
207
227
  // `directTools` goes in the Pi-owned override that mcp-setup.ts writes, never here.
208
- export function writeProjectMcpConfig(cwd, env) {
228
+ export function writeProjectMcpConfig(cwd, env, onForeign) {
209
229
  const file = path.join(cwd, '.mcp.json');
210
230
  let raw = '';
211
231
  try {
@@ -225,6 +245,11 @@ export function writeProjectMcpConfig(cwd, env) {
225
245
  }
226
246
  }
227
247
  const servers = (config['mcpServers'] ?? {});
248
+ // A committed entry that targets a team env is the team's, not ours to replace.
249
+ if (onForeign && env === 'local' && servers['align'] !== undefined && !carriesLocalEnv(JSON.stringify(servers['align']))) {
250
+ onForeign('.mcp.json');
251
+ return false;
252
+ }
228
253
  // `committed: true` keeps the Windows `cmd /c` wrapper OUT of this file (ALI-1135). It is
229
254
  // the one MCP config that travels: a wrapper written here by a Windows machine would be
230
255
  // committed and then fail to spawn for every teammate on macOS or Linux. Windows readers
@@ -232,6 +257,7 @@ export function writeProjectMcpConfig(cwd, env) {
232
257
  servers['align'] = alignServerEntry('mcpServers', env, { committed: true });
233
258
  config['mcpServers'] = servers;
234
259
  writeFileSync(file, `${JSON.stringify(config, null, 2)}\n`, 'utf8');
260
+ return true;
235
261
  }
236
262
  // ---------------------------------------------------------------------------
237
263
  // Per-host hook shims (the agent-agnostic guardrail)
@@ -274,7 +300,7 @@ const PLUGIN_SPAWN_PREAMBLE = `// npm installs align.cmd on Windows, which a pro
274
300
  const ALIGN_IS_WIN = process.platform === "win32";
275
301
  const ALIGN_BIN = ALIGN_IS_WIN ? "cmd" : "align";
276
302
  const ALIGN_PRE = ALIGN_IS_WIN ? ["/c", "align"] : [];`;
277
- function piExtensionBody(env) {
303
+ export function piExtensionBody(env) {
278
304
  const envArgs = env && env !== 'prod' ? `, "--env", "${env}"` : '';
279
305
  return `// Align decision graph - managed by \`align setup\`, do not edit.
280
306
  // Checks each proposed edit against your team's prior decisions and feeds any
@@ -335,11 +361,26 @@ export default function (pi: { on: (e: string, h: (ev: PiEvent) => unknown) => v
335
361
  `;
336
362
  }
337
363
  // pi extension. Fully managed - overwritten each run.
338
- export function writePiExtension(cwd, env) {
364
+ export function writePiExtension(cwd, env, onForeign) {
339
365
  const dir = path.join(cwd, '.pi', 'extensions');
366
+ const file = path.join(dir, 'align.ts');
367
+ if (onForeign && env === 'local' && isForeignPlugin(file)) {
368
+ onForeign('.pi/extensions/align.ts');
369
+ return false;
370
+ }
340
371
  if (!existsSync(dir))
341
372
  mkdirSync(dir, { recursive: true });
342
- writeFileSync(path.join(dir, 'align.ts'), piExtensionBody(env), 'utf8');
373
+ writeFileSync(file, piExtensionBody(env), 'utf8');
374
+ return true;
375
+ }
376
+ /** A generated plugin that already exists and is not pointed at the local graph. */
377
+ function isForeignPlugin(file) {
378
+ try {
379
+ return !carriesLocalEnv(readFileSync(file, 'utf8'));
380
+ }
381
+ catch {
382
+ return false;
383
+ }
343
384
  }
344
385
  // Gemini CLI hooks. BeforeTool can only deny (no additionalContext channel), so the
345
386
  // non-blocking finding is carried by AfterTool - the same split as pi, for the same
@@ -362,7 +403,7 @@ function isAlignGeminiHook(group) {
362
403
  const hooks = group?.hooks;
363
404
  return Array.isArray(hooks) && hooks.some((h) => String(h?.command ?? '').includes('align check --advisory'));
364
405
  }
365
- export function writeGeminiHooks(cwd, env) {
406
+ export function writeGeminiHooks(cwd, env, onForeign) {
366
407
  const dir = path.join(cwd, '.gemini');
367
408
  const file = path.join(dir, 'settings.json');
368
409
  let raw = '';
@@ -383,6 +424,10 @@ export function writeGeminiHooks(cwd, env) {
383
424
  }
384
425
  }
385
426
  const hooks = (settings['hooks'] ?? {});
427
+ if (onForeign && env === 'local' && ['BeforeTool', 'AfterTool'].some((event) => (Array.isArray(hooks[event]) ? hooks[event] : []).some((g) => isAlignGeminiHook(g) && !carriesLocalEnv(JSON.stringify(g))))) {
428
+ onForeign('.gemini/settings.json');
429
+ return false;
430
+ }
386
431
  // Strip any prior align-managed group from each event first, so a re-run replaces
387
432
  // it (and picks up an env change) instead of stacking a second one.
388
433
  for (const event of ['BeforeTool', 'AfterTool']) {
@@ -395,6 +440,7 @@ export function writeGeminiHooks(cwd, env) {
395
440
  if (!existsSync(dir))
396
441
  mkdirSync(dir, { recursive: true });
397
442
  writeFileSync(file, `${JSON.stringify(settings, null, 2)}\n`, 'utf8');
443
+ return true;
398
444
  }
399
445
  // OpenCode discovers project plugins at .opencode/plugins/*.{js,ts} and loads them at
400
446
  // startup. Ships as plain JS so nothing depends on a type package resolving.
@@ -406,7 +452,7 @@ export function writeGeminiHooks(cwd, env) {
406
452
  // tool.execute.after is handed the result object and the caller does `return output`
407
453
  // on the next line, so mutating output.output reaches the model.
408
454
  // Both hooks are declared `=> Promise<void>`; mutation is in place, not by return value.
409
- function openCodePluginBody(env) {
455
+ export function openCodePluginBody(env) {
410
456
  const envArgs = env && env !== 'prod' ? `, "--env", "${env}"` : '';
411
457
  return `// Align decision graph - managed by \`align setup\`, do not edit.
412
458
  // Checks each proposed edit against your team's prior decisions and feeds any conflict
@@ -469,27 +515,40 @@ export const AlignPlugin = async () => ({
469
515
  `;
470
516
  }
471
517
  // OpenCode plugin. Fully managed - overwritten each run.
472
- export function writeOpenCodePlugin(cwd, env) {
518
+ export function writeOpenCodePlugin(cwd, env, onForeign) {
473
519
  const dir = path.join(cwd, '.opencode', 'plugins');
520
+ const file = path.join(dir, 'align.js');
521
+ if (onForeign && env === 'local' && isForeignPlugin(file)) {
522
+ onForeign('.opencode/plugins/align.js');
523
+ return false;
524
+ }
474
525
  if (!existsSync(dir))
475
526
  mkdirSync(dir, { recursive: true });
476
- writeFileSync(path.join(dir, 'align.js'), openCodePluginBody(env), 'utf8');
527
+ writeFileSync(file, openCodePluginBody(env), 'utf8');
528
+ return true;
477
529
  }
478
530
  // Write every deterministic-alignment artifact into the project. Returns the
479
531
  // repo-relative paths written, for the caller to report.
480
532
  export function setupAgentAlignment(opts) {
481
- writeClaudeCodeHook(opts.cwd, opts.env);
482
- writeClaudeCodeSessionHook(opts.cwd);
533
+ const skipped = new Set();
534
+ // Opt-in: with no callback every writer overwrites, exactly as before.
535
+ const onForeign = opts.onForeign
536
+ ? (f) => { skipped.add(f); opts.onForeign(f); }
537
+ : undefined;
538
+ // When the project's hooks belong to a team env the whole file is left as found, so the
539
+ // session hook (which lives in the same file) is not added either.
540
+ if (writeClaudeCodeHook(opts.cwd, opts.env, onForeign))
541
+ writeClaudeCodeSessionHook(opts.cwd);
483
542
  writeManagedNudge(opts.cwd);
484
543
  writeAgentsNudge(opts.cwd);
485
544
  writeCursorRule(opts.cwd);
486
545
  // prod is the default env, so leave it off to keep the committed file portable -
487
546
  // the same rule advisoryCommand() applies to the hook.
488
547
  const env = opts.env === 'prod' ? undefined : opts.env;
489
- writeProjectMcpConfig(opts.cwd, env);
490
- writePiExtension(opts.cwd, env);
491
- writeGeminiHooks(opts.cwd, env);
492
- writeOpenCodePlugin(opts.cwd, env);
548
+ writeProjectMcpConfig(opts.cwd, env, onForeign);
549
+ writePiExtension(opts.cwd, env, onForeign);
550
+ writeGeminiHooks(opts.cwd, env, onForeign);
551
+ writeOpenCodePlugin(opts.cwd, env, onForeign);
493
552
  return [
494
553
  '.claude/settings.json',
495
554
  'CLAUDE.md',
@@ -499,6 +558,6 @@ export function setupAgentAlignment(opts) {
499
558
  '.pi/extensions/align.ts',
500
559
  '.gemini/settings.json',
501
560
  '.opencode/plugins/align.js',
502
- ];
561
+ ].filter((f) => !skipped.has(f));
503
562
  }
504
563
  //# sourceMappingURL=agent-rules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-rules.js","sourceRoot":"","sources":["../../src/lib/agent-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-rules.js","sourceRoot":"","sources":["../../src/lib/agent-rules.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type WrittenConfig } from './safe-config-write.js';
1
2
  export type EnvName = 'local' | 'preview' | 'prod';
2
3
  export interface EnvironmentConfig {
3
4
  gatewayUrl: string;
@@ -7,16 +8,6 @@ export interface EnvironmentConfig {
7
8
  mode: 'demo' | 'auth' | 'local-embedded';
8
9
  localDbPath?: string;
9
10
  }
10
- /**
11
- * The fork point for ALI-794's value-first onboarding order: nothing configured
12
- * yet on this machine, in either mode. A returning user (they already have a
13
- * local graph, or they are logged in to cloud) keeps the existing
14
- * mode-question-first `align setup` flow - this only widens the door for a
15
- * genuinely first run.
16
- */
17
- export declare function isFreshInstall(config: {
18
- getEnvironment(env: EnvName): EnvironmentConfig;
19
- }): boolean;
20
11
  /**
21
12
  * ALI-618: local-embedded mode never makes an HTTP call for its own operations (it reads a
22
13
  * local embedded DB - see gateway-client.ts's `createLocalGatewayClient` branch), so the
@@ -116,6 +107,19 @@ export declare function createConfigStore(): {
116
107
  clearLocalMode(): void;
117
108
  clear(env: EnvName): void;
118
109
  getInstallId(): string;
110
+ getAgent(): string | undefined;
111
+ setAgent(agent: string): void;
112
+ isLaunchOff(): boolean;
113
+ setLaunchOff(off: boolean): void;
114
+ clearAgent(): void;
115
+ getWrittenConfigs(): Record<string, WrittenConfig>;
116
+ recordWrittenConfig(file: string, entry: WrittenConfig): void;
117
+ /** Forget only the files whose undo finished; a skipped file keeps its record. */
118
+ dropWrittenConfigs(files: string[]): void;
119
+ wasWriteRefused(file: string): boolean;
120
+ unmarkWriteRefused(file: string): void;
121
+ clearRefusedWrites(): void;
122
+ markWriteRefused(file: string): void;
119
123
  getTelemetryConsent(): TelemetryConsent | undefined;
120
124
  setTelemetryConsent(value: TelemetryConsent): void;
121
125
  getProviderKey(provider: GuidedProviderKey): string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAAC;CACjD,GAAG,OAAO,CASV;AAQD;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,QAA2B,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,QAA4B,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;AAE9D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAM3E;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAoBlD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE;IAAE,cAAc,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAAA;CAAE,EACtE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,IAAI,CAMN;AAED,wBAAgB,iBAAiB;wBAkCT,OAAO,GAAG,iBAAiB;sBAc7B,OAAO,SAAS,MAAM;qBAIvB,OAAO,YAAY,MAAM;qBAIzB,MAAM;uBAIJ,OAAO;qBACT,OAAO;2BACD,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;2BAI7C,OAAO,gBAAgB,MAAM,SAAS,MAAM;IAInE;;;;;OAKG;4BACqB,OAAO,gBAAgB,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;6BAY5D,OAAO,gBAAgB,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAYtF,iGAAiG;yBAC5E,OAAO,gBAAgB,MAAM;IAOlD,6FAA6F;6BACpE,OAAO;6BAMP,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;6BAI7C,OAAO,gBAAgB,MAAM,WAAW,MAAM;8BAI7C,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;8BAI7C,OAAO,gBAAgB,MAAM,YAAY,MAAM;yBAIpD,MAAM;;eAWhB,OAAO;oBAQF,MAAM;2BAOC,gBAAgB,GAAG,SAAS;+BAGxB,gBAAgB;6BAOlB,iBAAiB,GAAG,MAAM,GAAG,IAAI;6BAGjC,iBAAiB,OAAO,MAAM;+BAQ5B,iBAAiB;kCAQd,MAAM,GAAG,OAAO;mCAGf,MAAM,GAAG,IAAI;EAK/C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAQD;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,QAA2B,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,QAA4B,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;AAE9D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAM3E;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAoBlD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE;IAAE,cAAc,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAAA;CAAE,EACtE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,IAAI,CAMN;AAED,wBAAgB,iBAAiB;wBAsCT,OAAO,GAAG,iBAAiB;sBAc7B,OAAO,SAAS,MAAM;qBAIvB,OAAO,YAAY,MAAM;qBAIzB,MAAM;uBAIJ,OAAO;qBACT,OAAO;2BACD,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;2BAI7C,OAAO,gBAAgB,MAAM,SAAS,MAAM;IAInE;;;;;OAKG;4BACqB,OAAO,gBAAgB,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;6BAY5D,OAAO,gBAAgB,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAYtF,iGAAiG;yBAC5E,OAAO,gBAAgB,MAAM;IAOlD,6FAA6F;6BACpE,OAAO;6BAMP,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;6BAI7C,OAAO,gBAAgB,MAAM,WAAW,MAAM;8BAI7C,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;8BAI7C,OAAO,gBAAgB,MAAM,YAAY,MAAM;yBAIpD,MAAM;;eAWhB,OAAO;oBAQF,MAAM;gBASV,MAAM,GAAG,SAAS;oBAGd,MAAM;mBAOP,OAAO;sBAGJ,OAAO;;yBAUJ,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;8BAKxB,MAAM,SAAS,aAAa;IAItD,kFAAkF;8BACxD,MAAM,EAAE;0BAQZ,MAAM,GAAG,OAAO;6BAGb,MAAM;;2BAOR,MAAM;2BAIN,gBAAgB,GAAG,SAAS;+BAGxB,gBAAgB;6BAOlB,iBAAiB,GAAG,MAAM,GAAG,IAAI;6BAGjC,iBAAiB,OAAO,MAAM;+BAQ5B,iBAAiB;kCAQd,MAAM,GAAG,OAAO;mCAGf,MAAM,GAAG,IAAI;EAK/C"}
@@ -2,23 +2,7 @@ import Conf from 'conf';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import fs from 'node:fs';
4
4
  import path from 'node:path';
5
- /**
6
- * The fork point for ALI-794's value-first onboarding order: nothing configured
7
- * yet on this machine, in either mode. A returning user (they already have a
8
- * local graph, or they are logged in to cloud) keeps the existing
9
- * mode-question-first `align setup` flow - this only widens the door for a
10
- * genuinely first run.
11
- */
12
- export function isFreshInstall(config) {
13
- const hasLocal = config.getEnvironment('local').mode === 'local-embedded';
14
- // Every env, not just the default one (Copilot, PR #224): a user who logged into a
15
- // non-default env (e.g. `align login --env preview`) while defaultEnv is still 'prod'
16
- // is a returning user, and checking only getDefaultEnv() would misclassify them as
17
- // fresh and route them into the value-first flow a second time.
18
- const ALL_ENVS = ['local', 'preview', 'prod'];
19
- const hasCloud = ALL_ENVS.some((e) => Boolean(config.getEnvironment(e).authToken));
20
- return !hasLocal && !hasCloud;
21
- }
5
+ import { mergeWrittenConfig } from './safe-config-write.js';
22
6
  const DEFAULTS = {
23
7
  local: { gatewayUrl: 'http://localhost:8080', authToken: null, tenantId: null, mode: 'demo' },
24
8
  preview: { gatewayUrl: 'https://api.preview.align.tech', authToken: null, tenantId: null, mode: 'auth' },
@@ -255,6 +239,69 @@ export function createConfigStore() {
255
239
  store.set('installId', id);
256
240
  return id;
257
241
  },
242
+ // C1: the coding agent bare `align` launches. Stored as a plain string; the launcher
243
+ // validates it against its closed list, so a stale value from a newer CLI is ignored.
244
+ getAgent() {
245
+ return store.get('agent');
246
+ },
247
+ setAgent(agent) {
248
+ store.set('agent', agent);
249
+ // Choosing an agent is the way back on after `align use --undo`.
250
+ store.delete('launchOff');
251
+ },
252
+ // C4: set by `align use --undo` so bare `align` stops opening an agent (and re-adding the
253
+ // configs just restored) until the user picks one again.
254
+ isLaunchOff() {
255
+ return store.get('launchOff') === true;
256
+ },
257
+ setLaunchOff(off) {
258
+ if (off)
259
+ store.set('launchOff', true);
260
+ else
261
+ store.delete('launchOff');
262
+ },
263
+ clearAgent() {
264
+ store.delete('agent');
265
+ },
266
+ // C4: every other-product config file align wrote (safe-config-write.ts), so
267
+ // `align use --undo` can put each one back. Keyed by absolute path; the whole map is
268
+ // read and set as one value because conf treats a dot in a key as a path separator.
269
+ getWrittenConfigs() {
270
+ return store.get('writtenConfigs') ?? {};
271
+ },
272
+ // `entry` is what ONE write added; mergeWrittenConfig folds it into what is already here
273
+ // (the first write's `created` and backup stay, owned entries accumulate).
274
+ recordWrittenConfig(file, entry) {
275
+ const all = store.get('writtenConfigs') ?? {};
276
+ store.set('writtenConfigs', { ...all, [file]: mergeWrittenConfig(all[file], entry) });
277
+ },
278
+ /** Forget only the files whose undo finished; a skipped file keeps its record. */
279
+ dropWrittenConfigs(files) {
280
+ const all = { ...(store.get('writtenConfigs') ?? {}) };
281
+ for (const f of files)
282
+ delete all[f];
283
+ if (Object.keys(all).length === 0)
284
+ store.delete('writtenConfigs');
285
+ else
286
+ store.set('writtenConfigs', all);
287
+ },
288
+ // Refused writes (a symlinked agent config): remembered so the one-line notice is printed
289
+ // once, not on every launch.
290
+ wasWriteRefused(file) {
291
+ return (store.get('refusedWrites') ?? []).includes(file);
292
+ },
293
+ unmarkWriteRefused(file) {
294
+ const all = store.get('refusedWrites') ?? [];
295
+ store.set('refusedWrites', all.filter((f) => f !== file));
296
+ },
297
+ clearRefusedWrites() {
298
+ store.delete('refusedWrites');
299
+ },
300
+ markWriteRefused(file) {
301
+ const all = store.get('refusedWrites') ?? [];
302
+ if (!all.includes(file))
303
+ store.set('refusedWrites', [...all, file]);
304
+ },
258
305
  getTelemetryConsent() {
259
306
  return store.get('telemetryConsent');
260
307
  },