@aligndottech/cli 0.47.0 → 0.48.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 (125) hide show
  1. package/dist/commands/agents.d.ts +20 -0
  2. package/dist/commands/agents.d.ts.map +1 -0
  3. package/dist/commands/agents.js +60 -0
  4. package/dist/commands/agents.js.map +1 -0
  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 +15 -5
  8. package/dist/commands/connect-agents.js.map +1 -1
  9. package/dist/commands/registry.d.ts.map +1 -1
  10. package/dist/commands/registry.js +3 -0
  11. package/dist/commands/registry.js.map +1 -1
  12. package/dist/commands/setup.d.ts +1 -0
  13. package/dist/commands/setup.d.ts.map +1 -1
  14. package/dist/commands/setup.js +10 -5
  15. package/dist/commands/setup.js.map +1 -1
  16. package/dist/commands/use.js +1 -1
  17. package/dist/commands/use.js.map +1 -1
  18. package/dist/lib/foreign-env.d.ts +11 -0
  19. package/dist/lib/foreign-env.d.ts.map +1 -1
  20. package/dist/lib/foreign-env.js +23 -0
  21. package/dist/lib/foreign-env.js.map +1 -1
  22. package/dist/lib/launch/adapters/claude-code.d.ts +8 -0
  23. package/dist/lib/launch/adapters/claude-code.d.ts.map +1 -1
  24. package/dist/lib/launch/adapters/claude-code.js.map +1 -1
  25. package/dist/lib/launch/adapters/codex.d.ts +17 -0
  26. package/dist/lib/launch/adapters/codex.d.ts.map +1 -0
  27. package/dist/lib/launch/adapters/codex.js +44 -0
  28. package/dist/lib/launch/adapters/codex.js.map +1 -0
  29. package/dist/lib/launch/adapters/copilot.d.ts +17 -0
  30. package/dist/lib/launch/adapters/copilot.d.ts.map +1 -0
  31. package/dist/lib/launch/adapters/copilot.js +29 -0
  32. package/dist/lib/launch/adapters/copilot.js.map +1 -0
  33. package/dist/lib/launch/adapters/gemini-cli.d.ts +25 -0
  34. package/dist/lib/launch/adapters/gemini-cli.d.ts.map +1 -0
  35. package/dist/lib/launch/adapters/gemini-cli.js +73 -0
  36. package/dist/lib/launch/adapters/gemini-cli.js.map +1 -0
  37. package/dist/lib/launch/agents.d.ts +12 -2
  38. package/dist/lib/launch/agents.d.ts.map +1 -1
  39. package/dist/lib/launch/agents.js +18 -8
  40. package/dist/lib/launch/agents.js.map +1 -1
  41. package/dist/lib/launch/codex-state.d.ts +31 -0
  42. package/dist/lib/launch/codex-state.d.ts.map +1 -0
  43. package/dist/lib/launch/codex-state.js +92 -0
  44. package/dist/lib/launch/codex-state.js.map +1 -0
  45. package/dist/lib/launch/copilot-state.d.ts +19 -0
  46. package/dist/lib/launch/copilot-state.d.ts.map +1 -0
  47. package/dist/lib/launch/copilot-state.js +51 -0
  48. package/dist/lib/launch/copilot-state.js.map +1 -0
  49. package/dist/lib/launch/gemini-state.d.ts +32 -0
  50. package/dist/lib/launch/gemini-state.d.ts.map +1 -0
  51. package/dist/lib/launch/gemini-state.js +59 -0
  52. package/dist/lib/launch/gemini-state.js.map +1 -0
  53. package/dist/lib/launch/gemini-trust.d.ts +26 -0
  54. package/dist/lib/launch/gemini-trust.d.ts.map +1 -0
  55. package/dist/lib/launch/gemini-trust.js +103 -0
  56. package/dist/lib/launch/gemini-trust.js.map +1 -0
  57. package/dist/lib/launch/install.d.ts +33 -0
  58. package/dist/lib/launch/install.d.ts.map +1 -0
  59. package/dist/lib/launch/install.js +48 -0
  60. package/dist/lib/launch/install.js.map +1 -0
  61. package/dist/lib/launch/launch-files.d.ts +15 -0
  62. package/dist/lib/launch/launch-files.d.ts.map +1 -1
  63. package/dist/lib/launch/launch-files.js +64 -4
  64. package/dist/lib/launch/launch-files.js.map +1 -1
  65. package/dist/lib/launch/launch.d.ts +32 -7
  66. package/dist/lib/launch/launch.d.ts.map +1 -1
  67. package/dist/lib/launch/launch.js +66 -40
  68. package/dist/lib/launch/launch.js.map +1 -1
  69. package/dist/lib/launch/pick-agent.d.ts +12 -5
  70. package/dist/lib/launch/pick-agent.d.ts.map +1 -1
  71. package/dist/lib/launch/pick-agent.js +46 -19
  72. package/dist/lib/launch/pick-agent.js.map +1 -1
  73. package/dist/lib/launch/picker-options.d.ts +30 -0
  74. package/dist/lib/launch/picker-options.d.ts.map +1 -0
  75. package/dist/lib/launch/picker-options.js +42 -0
  76. package/dist/lib/launch/picker-options.js.map +1 -0
  77. package/dist/lib/launch/prompts.d.ts +11 -0
  78. package/dist/lib/launch/prompts.d.ts.map +1 -0
  79. package/dist/lib/launch/prompts.js +27 -0
  80. package/dist/lib/launch/prompts.js.map +1 -0
  81. package/dist/lib/launch/registry/agents/claude-code.d.ts +3 -0
  82. package/dist/lib/launch/registry/agents/claude-code.d.ts.map +1 -0
  83. package/dist/lib/launch/registry/agents/claude-code.js +11 -0
  84. package/dist/lib/launch/registry/agents/claude-code.js.map +1 -0
  85. package/dist/lib/launch/registry/agents/codex.d.ts +3 -0
  86. package/dist/lib/launch/registry/agents/codex.d.ts.map +1 -0
  87. package/dist/lib/launch/registry/agents/codex.js +11 -0
  88. package/dist/lib/launch/registry/agents/codex.js.map +1 -0
  89. package/dist/lib/launch/registry/agents/copilot.d.ts +3 -0
  90. package/dist/lib/launch/registry/agents/copilot.d.ts.map +1 -0
  91. package/dist/lib/launch/registry/agents/copilot.js +11 -0
  92. package/dist/lib/launch/registry/agents/copilot.js.map +1 -0
  93. package/dist/lib/launch/registry/agents/cursor.d.ts +3 -0
  94. package/dist/lib/launch/registry/agents/cursor.d.ts.map +1 -0
  95. package/dist/lib/launch/registry/agents/cursor.js +11 -0
  96. package/dist/lib/launch/registry/agents/cursor.js.map +1 -0
  97. package/dist/lib/launch/registry/agents/gemini-cli.d.ts +3 -0
  98. package/dist/lib/launch/registry/agents/gemini-cli.d.ts.map +1 -0
  99. package/dist/lib/launch/registry/agents/gemini-cli.js +11 -0
  100. package/dist/lib/launch/registry/agents/gemini-cli.js.map +1 -0
  101. package/dist/lib/launch/registry/agents/opencode.d.ts +3 -0
  102. package/dist/lib/launch/registry/agents/opencode.d.ts.map +1 -0
  103. package/dist/lib/launch/registry/agents/opencode.js +11 -0
  104. package/dist/lib/launch/registry/agents/opencode.js.map +1 -0
  105. package/dist/lib/launch/registry/agents/pi.d.ts +3 -0
  106. package/dist/lib/launch/registry/agents/pi.d.ts.map +1 -0
  107. package/dist/lib/launch/registry/agents/pi.js +11 -0
  108. package/dist/lib/launch/registry/agents/pi.js.map +1 -0
  109. package/dist/lib/launch/registry/index.d.ts +5 -0
  110. package/dist/lib/launch/registry/index.d.ts.map +1 -0
  111. package/dist/lib/launch/registry/index.js +13 -0
  112. package/dist/lib/launch/registry/index.js.map +1 -0
  113. package/dist/lib/launch/registry/types.d.ts +31 -0
  114. package/dist/lib/launch/registry/types.d.ts.map +1 -0
  115. package/dist/lib/launch/registry/types.js +2 -0
  116. package/dist/lib/launch/registry/types.js.map +1 -0
  117. package/dist/lib/launch/run-agent.d.ts +4 -0
  118. package/dist/lib/launch/run-agent.d.ts.map +1 -1
  119. package/dist/lib/launch/run-agent.js +1 -1
  120. package/dist/lib/launch/run-agent.js.map +1 -1
  121. package/dist/lib/launch/strict-entry.d.ts +49 -0
  122. package/dist/lib/launch/strict-entry.d.ts.map +1 -0
  123. package/dist/lib/launch/strict-entry.js +106 -0
  124. package/dist/lib/launch/strict-entry.js.map +1 -0
  125. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../../../src/lib/launch/registry/agents/cursor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,MAAM,EAAE,SAQpB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { buildCursorLaunch } from '../../adapters/cursor.js';
2
+ export const cursor = {
3
+ name: 'cursor',
4
+ label: 'Cursor',
5
+ bin: 'cursor-agent',
6
+ injection: 'written-once',
7
+ supported: true,
8
+ install: { kind: 'docs', url: 'https://cursor.com/cli' },
9
+ build: (d, base) => buildCursorLaunch({ ...base, ...d.readCursorState(d.cwd, d.home) }),
10
+ };
11
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../../../src/lib/launch/registry/agents/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,MAAM,CAAC,MAAM,MAAM,GAAc;IAC/B,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,GAAG,EAAE,cAAc;IACnB,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,wBAAwB,EAAE;IACxD,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;CACxF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentSpec } from '../types.js';
2
+ export declare const geminiCli: AgentSpec;
3
+ //# sourceMappingURL=gemini-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-cli.d.ts","sourceRoot":"","sources":["../../../../../src/lib/launch/registry/agents/gemini-cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,SAAS,EAAE,SAQvB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { buildGeminiLaunch } from '../../adapters/gemini-cli.js';
2
+ export const geminiCli = {
3
+ name: 'gemini-cli',
4
+ label: 'Gemini CLI',
5
+ bin: 'gemini',
6
+ injection: 'per-session',
7
+ supported: true,
8
+ install: { kind: 'npm', argv: ['npm', 'i', '-g', '@google/gemini-cli'] },
9
+ build: (d, base) => buildGeminiLaunch({ ...base, env: d.env, platform: d.platform, ...d.readGeminiState(d.cwd, d.home, d.env, d.platform) }),
10
+ };
11
+ //# sourceMappingURL=gemini-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-cli.js","sourceRoot":"","sources":["../../../../../src/lib/launch/registry/agents/gemini-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGjE,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,YAAY;IACnB,GAAG,EAAE,QAAQ;IACb,SAAS,EAAE,aAAa;IACxB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,oBAAoB,CAAC,EAAE;IACxE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;CAC7I,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentSpec } from '../types.js';
2
+ export declare const opencode: AgentSpec;
3
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../../../src/lib/launch/registry/agents/opencode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,QAAQ,EAAE,SAQtB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { buildOpenCodeLaunch } from '../../adapters/opencode.js';
2
+ export const opencode = {
3
+ name: 'opencode',
4
+ label: 'OpenCode',
5
+ bin: 'opencode',
6
+ injection: 'per-session',
7
+ supported: true,
8
+ install: { kind: 'npm', argv: ['npm', 'i', '-g', 'opencode-ai'] },
9
+ build: (d, base) => buildOpenCodeLaunch({ ...base, env: d.env, ...d.readOpenCodeState(d.cwd, d.home) }),
10
+ };
11
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../../../src/lib/launch/registry/agents/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,MAAM,CAAC,MAAM,QAAQ,GAAc;IACjC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,UAAU;IACf,SAAS,EAAE,aAAa;IACxB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE;IACjE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;CACxG,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentSpec } from '../types.js';
2
+ export declare const pi: AgentSpec;
3
+ //# sourceMappingURL=pi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../../../../src/lib/launch/registry/agents/pi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,EAAE,EAAE,SAQhB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { buildPiLaunch } from '../../adapters/pi.js';
2
+ export const pi = {
3
+ name: 'pi',
4
+ label: 'pi',
5
+ bin: 'pi',
6
+ injection: 'written-once',
7
+ supported: true,
8
+ install: { kind: 'docs', url: 'https://pi.dev' },
9
+ build: (d, base) => buildPiLaunch({ ...base, ...d.readPiState(d.cwd, d.home, d.env) }),
10
+ };
11
+ //# sourceMappingURL=pi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.js","sourceRoot":"","sources":["../../../../../src/lib/launch/registry/agents/pi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,CAAC,MAAM,EAAE,GAAc;IAC3B,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,IAAI;IACT,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE;IAChD,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;CACvF,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AgentSpec } from './types.js';
2
+ /** Picker order: the order `LAUNCH_AGENTS` always had, with Copilot in its alphabetical place. */
3
+ export declare const AGENT_REGISTRY: readonly AgentSpec[];
4
+ export declare function specByName(name: string | undefined): AgentSpec | undefined;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/launch/registry/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,kGAAkG;AAClG,eAAO,MAAM,cAAc,EAAE,SAAS,SAAS,EAAkE,CAAC;AAElH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAE1E"}
@@ -0,0 +1,13 @@
1
+ import { claudeCode } from './agents/claude-code.js';
2
+ import { codex } from './agents/codex.js';
3
+ import { copilot } from './agents/copilot.js';
4
+ import { cursor } from './agents/cursor.js';
5
+ import { geminiCli } from './agents/gemini-cli.js';
6
+ import { opencode } from './agents/opencode.js';
7
+ import { pi } from './agents/pi.js';
8
+ /** Picker order: the order `LAUNCH_AGENTS` always had, with Copilot in its alphabetical place. */
9
+ export const AGENT_REGISTRY = [claudeCode, codex, copilot, cursor, geminiCli, opencode, pi];
10
+ export function specByName(name) {
11
+ return AGENT_REGISTRY.find((a) => a.name === name);
12
+ }
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/launch/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAGpC,kGAAkG;AAClG,MAAM,CAAC,MAAM,cAAc,GAAyB,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AAElH,MAAM,UAAU,UAAU,CAAC,IAAwB;IACjD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { AgentName } from '../../sessions/types.js';
2
+ import type { LaunchSpec } from '../adapters/claude-code.js';
3
+ import type { AgentInstall } from '../install.js';
4
+ import type { BuildInput, LaunchDeps } from '../launch.js';
5
+ /**
6
+ * Every agent the launcher knows. Wider than the session parsers' AgentName: an agent can be a
7
+ * launch target before align reads its session history (Copilot), and widening AgentName would
8
+ * reach every parser's exhaustive switch for nothing.
9
+ */
10
+ export type LaunchAgentId = AgentName | 'copilot';
11
+ /**
12
+ * One launchable (or planned) coding agent. R1 carries today's `LaunchAgent` fields plus the
13
+ * adapter that builds its launch; later phases replace adapters with data.
14
+ */
15
+ export interface AgentSpec {
16
+ name: LaunchAgentId;
17
+ label: string;
18
+ bin: string;
19
+ /** per-session: nothing written to the user's config. written-once: later phases. */
20
+ injection: 'per-session' | 'written-once';
21
+ /** A launch target today. Later phases flip more entries to true; nothing else changes. */
22
+ supported: boolean;
23
+ /**
24
+ * How a user installs it. `npm`: one argv the picker may offer to run after an explicit yes.
25
+ * `docs`: a script or URL installer, which Align only ever prints (plan Decision 4).
26
+ */
27
+ install: AgentInstall;
28
+ /** The adapter. Absent for agents that are not launch targets yet. */
29
+ build?: (d: LaunchDeps, base: BuildInput) => LaunchSpec;
30
+ }
31
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/launch/registry/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE3D;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,qFAAqF;IACrF,SAAS,EAAE,aAAa,GAAG,cAAc,CAAC;IAC1C,2FAA2F;IAC3F,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,OAAO,EAAE,YAAY,CAAC;IACtB,sEAAsE;IACtE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC;CACzD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/launch/registry/types.ts"],"names":[],"mappings":""}
@@ -6,6 +6,10 @@ export interface RunDeps {
6
6
  /** The process whose signals are forwarded. A parameter so tests need not signal themselves. */
7
7
  proc: Pick<typeof process, 'on' | 'off'>;
8
8
  }
9
+ export declare function winShimCommand(spec: Pick<LaunchSpec, 'bin' | 'args'>): {
10
+ command: string;
11
+ args: string[];
12
+ };
9
13
  /**
10
14
  * Run the agent with the terminal handed to it and resolve with the exit code align should
11
15
  * leave with. align stays alive until the child is gone:
@@ -1 +1 @@
1
- {"version":3,"file":"run-agent.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/run-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,KAAK,YAAY,CAAC;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,gGAAgG;IAChG,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;CAC1C;AAqBD;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,GAAE,OAAO,CAAC,OAAO,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC7F"}
1
+ {"version":3,"file":"run-agent.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/run-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,KAAK,YAAY,CAAC;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,gGAAgG;IAChG,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;CAC1C;AAQD,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAW1G;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,GAAE,OAAO,CAAC,OAAO,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC7F"}
@@ -5,7 +5,7 @@ import path from 'node:path';
5
5
  const WIN_SHELL_CHARS = /[&|<>^%"]/;
6
6
  /** One CRT-quoted argument: trailing backslashes are doubled so they cannot escape the closing quote. */
7
7
  const winQuote = (a) => `"${a.replace(/(\\+)$/, '$1$1')}"`;
8
- function winShimCommand(spec) {
8
+ export function winShimCommand(spec) {
9
9
  const binHit = WIN_SHELL_CHARS.exec(spec.bin);
10
10
  if (binHit)
11
11
  throw new Error(`the path to ${path.win32.basename(spec.bin)} (${spec.bin}) holds the shell character ${binHit[0]}, which cmd.exe would interpret. Move or reinstall the agent to a path without it.`);
@@ -1 +1 @@
1
- {"version":3,"file":"run-agent.js","sourceRoot":"","sources":["../../../src/lib/launch/run-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-agent.js","sourceRoot":"","sources":["../../../src/lib/launch/run-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * The strict "Align is already here" test for the wave A agents (Codex, Gemini CLI, Copilot).
3
+ * Project and workspace files are untrusted input, so an entry stands in for the injected
4
+ * `align-local` only when it is EXACTLY align's own local server: the command, the args, and
5
+ * no other key that could change what runs (env, cwd, url, envFile, a timeout, a filter...).
6
+ *
7
+ * Deliberately separate from project-state.ts's isLocalAlignServer (Claude Code, pi, Cursor),
8
+ * which matches any command line that mentions align and mcp.
9
+ */
10
+ export type StrictHost = 'mcpServers' | 'codex' | 'copilot';
11
+ export interface CanonicalOptions {
12
+ /** Whether a bare `align mcp` reads the local graph on this machine. */
13
+ localIsDefault: boolean;
14
+ platform: string;
15
+ host: StrictHost;
16
+ }
17
+ type Json = Record<string, unknown>;
18
+ export declare function isCanonicalLocalEntry(entry: unknown, o: CanonicalOptions): boolean;
19
+ /**
20
+ * JSON with `//` and block comments removed, the way Gemini reads its settings and
21
+ * trustedFolders.json (strip-json-comments). Comment markers inside strings are kept. Comments
22
+ * become spaces, so line and column numbers in a parse error still point at the right place.
23
+ */
24
+ export declare function stripJsonComments(text: string): string;
25
+ /** JSON or JSONC as an object; null when it is not one. */
26
+ export declare function parseJsonc(text: string | null): Json | null;
27
+ /** What the agent's loaded config layers already hold for Align, decided by the strict test above. */
28
+ export interface AlignLocalState {
29
+ /** A layer the agent loads already runs align's own local server (align-local or align). */
30
+ present: boolean;
31
+ /** Files whose `align-local` this launch replaces whole with align's own. */
32
+ overridden: string[];
33
+ /** A file whose `align-local` cannot be replaced whole: no graph this session. */
34
+ conflict?: string;
35
+ }
36
+ /** One config layer the agent loads, and its servers object (absent when the file has none). */
37
+ export interface Layer {
38
+ file: string;
39
+ servers: unknown;
40
+ }
41
+ /**
42
+ * Fold the loaded layers, in the agent's merge order, into an AlignLocalState.
43
+ * `replaceable(entry)`: whether this launch's injection overwrites EVERY key of a non-canonical
44
+ * align-local (Gemini: always, its system tier replaces the entry whole; Codex: only when it
45
+ * carries nothing beyond command/args/enabled; Copilot: never known, so never).
46
+ */
47
+ export declare function foldLayers(layers: Layer[], o: CanonicalOptions, replaceable: (entry: unknown) => boolean): AlignLocalState;
48
+ export {};
49
+ //# sourceMappingURL=strict-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strict-entry.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/strict-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAepC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAelF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0BtD;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAQ3D;AAED,sGAAsG;AACtG,MAAM,WAAW,eAAe;IAC9B,4FAA4F;IAC5F,OAAO,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,gGAAgG;AAChG,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,eAAe,CAY1H"}
@@ -0,0 +1,106 @@
1
+ const isObject = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
2
+ const sameArgs = (a, b) => Array.isArray(a) && a.length === b.length && a.every((x, i) => x === b[i]);
3
+ /** The keys each host's canonical entry may carry, beyond command and args, and what they must hold. */
4
+ const EXTRA = {
5
+ mcpServers: {},
6
+ // `enabled = false` leaves the server configured and not started: not doing our job.
7
+ codex: { enabled: (v) => v === true },
8
+ // Copilot needs `type`, and a `tools` allowlist: without '*' the tools are not callable.
9
+ copilot: { type: (v) => v === 'local' || v === 'stdio', tools: (v) => sameArgs(v, ['*']) },
10
+ };
11
+ const REQUIRED = { mcpServers: [], codex: [], copilot: ['type', 'tools'] };
12
+ export function isCanonicalLocalEntry(entry, o) {
13
+ if (!isObject(entry))
14
+ return false;
15
+ const extra = EXTRA[o.host];
16
+ for (const key of Object.keys(entry)) {
17
+ if (key === 'command' || key === 'args')
18
+ continue;
19
+ // Own keys of the allowlist only: an entry's `constructor`, `toString` or an own `__proto__`
20
+ // (JSON.parse and smol-toml both return one) must not reach Object.prototype's members.
21
+ if (!Object.hasOwn(extra, key) || !extra[key](entry[key]))
22
+ return false;
23
+ }
24
+ if (!REQUIRED[o.host].every((k) => Object.hasOwn(entry, k)))
25
+ return false;
26
+ // On win32 an npm global install is align.cmd, which only cmd can spawn (mcp-setup.ts, ALI-1135).
27
+ const [command, prefix] = o.platform === 'win32' ? ['cmd', ['/c', 'align']] : ['align', []];
28
+ if (entry['command'] !== command)
29
+ return false;
30
+ const accepted = o.localIsDefault ? [['mcp'], ['mcp', '--env', 'local']] : [['mcp', '--env', 'local']];
31
+ return accepted.some((a) => sameArgs(entry['args'], [...prefix, ...a]));
32
+ }
33
+ /**
34
+ * JSON with `//` and block comments removed, the way Gemini reads its settings and
35
+ * trustedFolders.json (strip-json-comments). Comment markers inside strings are kept. Comments
36
+ * become spaces, so line and column numbers in a parse error still point at the right place.
37
+ */
38
+ export function stripJsonComments(text) {
39
+ let out = '';
40
+ let i = 0;
41
+ while (i < text.length) {
42
+ const c = text[i];
43
+ if (c === '"') {
44
+ let j = i + 1;
45
+ while (j < text.length && text[j] !== '"')
46
+ j += text[j] === '\\' ? 2 : 1;
47
+ out += text.slice(i, j + 1);
48
+ i = j + 1;
49
+ }
50
+ else if (c === '/' && text[i + 1] === '/') {
51
+ const end = text.indexOf('\n', i);
52
+ const stop = end < 0 ? text.length : end;
53
+ out += ' '.repeat(stop - i);
54
+ i = stop;
55
+ }
56
+ else if (c === '/' && text[i + 1] === '*') {
57
+ const end = text.indexOf('*/', i + 2);
58
+ const stop = end < 0 ? text.length : end + 2;
59
+ out += text.slice(i, stop).replace(/[^\n]/g, ' ');
60
+ i = stop;
61
+ }
62
+ else {
63
+ out += c;
64
+ i += 1;
65
+ }
66
+ }
67
+ return out;
68
+ }
69
+ /** JSON or JSONC as an object; null when it is not one. */
70
+ export function parseJsonc(text) {
71
+ if (text === null)
72
+ return null;
73
+ try {
74
+ const parsed = JSON.parse(stripJsonComments(text));
75
+ return isObject(parsed) ? parsed : null;
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ }
81
+ /**
82
+ * Fold the loaded layers, in the agent's merge order, into an AlignLocalState.
83
+ * `replaceable(entry)`: whether this launch's injection overwrites EVERY key of a non-canonical
84
+ * align-local (Gemini: always, its system tier replaces the entry whole; Codex: only when it
85
+ * carries nothing beyond command/args/enabled; Copilot: never known, so never).
86
+ */
87
+ export function foldLayers(layers, o, replaceable) {
88
+ const state = { present: false, overridden: [] };
89
+ for (const { file, servers } of layers) {
90
+ if (!isObject(servers))
91
+ continue;
92
+ if (isCanonicalLocalEntry(servers['align'], o))
93
+ state.present = true;
94
+ if (!('align-local' in servers))
95
+ continue;
96
+ const ours = servers['align-local'];
97
+ if (isCanonicalLocalEntry(ours, o))
98
+ state.present = true;
99
+ else if (replaceable(ours))
100
+ state.overridden.push(file);
101
+ else
102
+ state.conflict ??= file;
103
+ }
104
+ return state;
105
+ }
106
+ //# sourceMappingURL=strict-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strict-entry.js","sourceRoot":"","sources":["../../../src/lib/launch/strict-entry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aligndottech/cli",
3
- "version": "0.47.0",
3
+ "version": "0.48.0",
4
4
  "mcpName": "io.github.aligndottech/cli",
5
5
  "type": "module",
6
6
  "description": "Align CLI - capture decisions, check alignment, and manage connectors",
@@ -46,7 +46,8 @@
46
46
  "eventsource": "^3.0.2",
47
47
  "execa": "^9.5.2",
48
48
  "open": "^10.1.0",
49
- "ora": "^8.1.1"
49
+ "ora": "^8.1.1",
50
+ "smol-toml": "1.9.0"
50
51
  },
51
52
  "devDependencies": {
52
53
  "@eslint/js": "^9.0.0",