@intutic/cli 2.0.0 → 2.2.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 (225) hide show
  1. package/dist/cli.js +131 -130
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/attenuate.d.ts.map +1 -1
  4. package/dist/commands/attenuate.js +4 -2
  5. package/dist/commands/attenuate.js.map +1 -1
  6. package/dist/commands/budget.d.ts.map +1 -1
  7. package/dist/commands/budget.js +2 -2
  8. package/dist/commands/budget.js.map +1 -1
  9. package/dist/commands/connect.d.ts.map +1 -1
  10. package/dist/commands/connect.js +138 -49
  11. package/dist/commands/connect.js.map +1 -1
  12. package/dist/commands/disconnect.d.ts +25 -0
  13. package/dist/commands/disconnect.d.ts.map +1 -0
  14. package/dist/commands/disconnect.js +252 -0
  15. package/dist/commands/disconnect.js.map +1 -0
  16. package/dist/commands/doctor.d.ts +19 -1
  17. package/dist/commands/doctor.d.ts.map +1 -1
  18. package/dist/commands/doctor.js +33 -41
  19. package/dist/commands/doctor.js.map +1 -1
  20. package/dist/commands/enforce.d.ts +10 -0
  21. package/dist/commands/enforce.d.ts.map +1 -1
  22. package/dist/commands/enforce.js +36 -0
  23. package/dist/commands/enforce.js.map +1 -1
  24. package/dist/commands/env.d.ts +1 -1
  25. package/dist/commands/env.d.ts.map +1 -1
  26. package/dist/commands/env.js +2 -7
  27. package/dist/commands/env.js.map +1 -1
  28. package/dist/commands/exec.d.ts +7 -8
  29. package/dist/commands/exec.d.ts.map +1 -1
  30. package/dist/commands/exec.js +59 -60
  31. package/dist/commands/exec.js.map +1 -1
  32. package/dist/commands/gateway.d.ts +2 -0
  33. package/dist/commands/gateway.d.ts.map +1 -1
  34. package/dist/commands/gateway.js +16 -3
  35. package/dist/commands/gateway.js.map +1 -1
  36. package/dist/commands/guardrails.d.ts.map +1 -1
  37. package/dist/commands/guardrails.js +18 -1
  38. package/dist/commands/guardrails.js.map +1 -1
  39. package/dist/commands/init.d.ts +5 -2
  40. package/dist/commands/init.d.ts.map +1 -1
  41. package/dist/commands/init.js +38 -22
  42. package/dist/commands/init.js.map +1 -1
  43. package/dist/commands/install-daemon.d.ts +1 -1
  44. package/dist/commands/install-daemon.d.ts.map +1 -1
  45. package/dist/commands/install-daemon.js +5 -3
  46. package/dist/commands/install-daemon.js.map +1 -1
  47. package/dist/commands/integrity.d.ts +31 -2
  48. package/dist/commands/integrity.d.ts.map +1 -1
  49. package/dist/commands/integrity.js +116 -3
  50. package/dist/commands/integrity.js.map +1 -1
  51. package/dist/commands/judge.d.ts +8 -4
  52. package/dist/commands/judge.d.ts.map +1 -1
  53. package/dist/commands/judge.js +41 -21
  54. package/dist/commands/judge.js.map +1 -1
  55. package/dist/commands/login.d.ts +1 -0
  56. package/dist/commands/login.d.ts.map +1 -1
  57. package/dist/commands/login.js +16 -1
  58. package/dist/commands/login.js.map +1 -1
  59. package/dist/commands/predict-cost.d.ts +1 -2
  60. package/dist/commands/predict-cost.d.ts.map +1 -1
  61. package/dist/commands/predict-cost.js +1 -4
  62. package/dist/commands/predict-cost.js.map +1 -1
  63. package/dist/commands/setup.d.ts +1 -2
  64. package/dist/commands/setup.d.ts.map +1 -1
  65. package/dist/commands/setup.js +11 -68
  66. package/dist/commands/setup.js.map +1 -1
  67. package/dist/commands/skill.d.ts +1 -0
  68. package/dist/commands/skill.d.ts.map +1 -1
  69. package/dist/commands/skill.js +17 -3
  70. package/dist/commands/skill.js.map +1 -1
  71. package/dist/commands/start.d.ts.map +1 -1
  72. package/dist/commands/start.js +5 -1
  73. package/dist/commands/start.js.map +1 -1
  74. package/dist/commands/syncContext.d.ts.map +1 -1
  75. package/dist/commands/syncContext.js +15 -5
  76. package/dist/commands/syncContext.js.map +1 -1
  77. package/dist/config/paths.d.ts +25 -3
  78. package/dist/config/paths.d.ts.map +1 -1
  79. package/dist/config/paths.js +47 -7
  80. package/dist/config/paths.js.map +1 -1
  81. package/dist/harness/agentFramework.d.ts +25 -0
  82. package/dist/harness/agentFramework.d.ts.map +1 -0
  83. package/dist/harness/agentFramework.js +37 -0
  84. package/dist/harness/agentFramework.js.map +1 -0
  85. package/dist/harness/agentcore.d.ts +6 -3
  86. package/dist/harness/agentcore.d.ts.map +1 -1
  87. package/dist/harness/agentcore.js +7 -4
  88. package/dist/harness/agentcore.js.map +1 -1
  89. package/dist/harness/agenticOrchestrator.d.ts +3 -5
  90. package/dist/harness/agenticOrchestrator.d.ts.map +1 -1
  91. package/dist/harness/agenticOrchestrator.js +3 -5
  92. package/dist/harness/agenticOrchestrator.js.map +1 -1
  93. package/dist/harness/aiSdkHarness.d.ts +1 -1
  94. package/dist/harness/aiSdkHarness.js +1 -1
  95. package/dist/harness/aiSdkWorkflow.d.ts +1 -1
  96. package/dist/harness/aiSdkWorkflow.d.ts.map +1 -1
  97. package/dist/harness/aiSdkWorkflow.js +5 -3
  98. package/dist/harness/aiSdkWorkflow.js.map +1 -1
  99. package/dist/harness/aider.d.ts +4 -3
  100. package/dist/harness/aider.d.ts.map +1 -1
  101. package/dist/harness/aider.js +7 -6
  102. package/dist/harness/aider.js.map +1 -1
  103. package/dist/harness/antigravity.d.ts +4 -2
  104. package/dist/harness/antigravity.d.ts.map +1 -1
  105. package/dist/harness/antigravity.js +15 -12
  106. package/dist/harness/antigravity.js.map +1 -1
  107. package/dist/harness/base.d.ts +5 -1
  108. package/dist/harness/base.d.ts.map +1 -1
  109. package/dist/harness/base.js +9 -8
  110. package/dist/harness/base.js.map +1 -1
  111. package/dist/harness/cline.d.ts +10 -4
  112. package/dist/harness/cline.d.ts.map +1 -1
  113. package/dist/harness/cline.js +40 -32
  114. package/dist/harness/cline.js.map +1 -1
  115. package/dist/harness/codex.d.ts +10 -4
  116. package/dist/harness/codex.d.ts.map +1 -1
  117. package/dist/harness/codex.js +30 -32
  118. package/dist/harness/codex.js.map +1 -1
  119. package/dist/harness/continue.d.ts +8 -5
  120. package/dist/harness/continue.d.ts.map +1 -1
  121. package/dist/harness/continue.js +27 -63
  122. package/dist/harness/continue.js.map +1 -1
  123. package/dist/harness/cursor.d.ts.map +1 -1
  124. package/dist/harness/cursor.js +2 -6
  125. package/dist/harness/cursor.js.map +1 -1
  126. package/dist/harness/detector.d.ts +1 -1
  127. package/dist/harness/detector.d.ts.map +1 -1
  128. package/dist/harness/detector.js +3 -1
  129. package/dist/harness/detector.js.map +1 -1
  130. package/dist/harness/dsh.d.ts +2 -2
  131. package/dist/harness/dsh.js +3 -3
  132. package/dist/harness/dsh.js.map +1 -1
  133. package/dist/harness/eve.d.ts +1 -1
  134. package/dist/harness/eve.js +1 -1
  135. package/dist/harness/githubCopilot.d.ts +4 -2
  136. package/dist/harness/githubCopilot.d.ts.map +1 -1
  137. package/dist/harness/githubCopilot.js +13 -8
  138. package/dist/harness/githubCopilot.js.map +1 -1
  139. package/dist/harness/grok.d.ts.map +1 -1
  140. package/dist/harness/grok.js +4 -6
  141. package/dist/harness/grok.js.map +1 -1
  142. package/dist/harness/jsSdkGatedAdapter.d.ts.map +1 -1
  143. package/dist/harness/jsSdkGatedAdapter.js +8 -9
  144. package/dist/harness/jsSdkGatedAdapter.js.map +1 -1
  145. package/dist/harness/langgraph.d.ts.map +1 -1
  146. package/dist/harness/langgraph.js +8 -10
  147. package/dist/harness/langgraph.js.map +1 -1
  148. package/dist/harness/muse.d.ts.map +1 -1
  149. package/dist/harness/muse.js +4 -6
  150. package/dist/harness/muse.js.map +1 -1
  151. package/dist/harness/n8n.d.ts +12 -2
  152. package/dist/harness/n8n.d.ts.map +1 -1
  153. package/dist/harness/n8n.js +66 -3
  154. package/dist/harness/n8n.js.map +1 -1
  155. package/dist/harness/openWebUI.d.ts +7 -2
  156. package/dist/harness/openWebUI.d.ts.map +1 -1
  157. package/dist/harness/openWebUI.js +15 -4
  158. package/dist/harness/openWebUI.js.map +1 -1
  159. package/dist/harness/openaiAgents.d.ts.map +1 -1
  160. package/dist/harness/openaiAgents.js +4 -1
  161. package/dist/harness/openaiAgents.js.map +1 -1
  162. package/dist/harness/opencode.d.ts +3 -2
  163. package/dist/harness/opencode.d.ts.map +1 -1
  164. package/dist/harness/opencode.js +7 -8
  165. package/dist/harness/opencode.js.map +1 -1
  166. package/dist/harness/openhands.d.ts +3 -2
  167. package/dist/harness/openhands.d.ts.map +1 -1
  168. package/dist/harness/openhands.js +40 -27
  169. package/dist/harness/openhands.js.map +1 -1
  170. package/dist/harness/rooCode.d.ts +6 -5
  171. package/dist/harness/rooCode.d.ts.map +1 -1
  172. package/dist/harness/rooCode.js +13 -18
  173. package/dist/harness/rooCode.js.map +1 -1
  174. package/dist/harness/sdkGatedAdapter.d.ts.map +1 -1
  175. package/dist/harness/sdkGatedAdapter.js +8 -9
  176. package/dist/harness/sdkGatedAdapter.js.map +1 -1
  177. package/dist/harness/trueforge.js +2 -2
  178. package/dist/harness/trueforge.js.map +1 -1
  179. package/dist/harness/types.d.ts.map +1 -1
  180. package/dist/harness/types.js +4 -1
  181. package/dist/harness/types.js.map +1 -1
  182. package/dist/harness/windsurf.d.ts +4 -2
  183. package/dist/harness/windsurf.d.ts.map +1 -1
  184. package/dist/harness/windsurf.js +14 -11
  185. package/dist/harness/windsurf.js.map +1 -1
  186. package/dist/harness/xirp.d.ts +5 -7
  187. package/dist/harness/xirp.d.ts.map +1 -1
  188. package/dist/harness/xirp.js +5 -7
  189. package/dist/harness/xirp.js.map +1 -1
  190. package/dist/lib/envInjector.d.ts +16 -6
  191. package/dist/lib/envInjector.d.ts.map +1 -1
  192. package/dist/lib/envInjector.js +99 -88
  193. package/dist/lib/envInjector.js.map +1 -1
  194. package/dist/lib/localProxy.d.ts +19 -0
  195. package/dist/lib/localProxy.d.ts.map +1 -0
  196. package/dist/lib/localProxy.js +33 -0
  197. package/dist/lib/localProxy.js.map +1 -0
  198. package/dist/lib/onboarding.d.ts +1 -1
  199. package/dist/lib/onboarding.d.ts.map +1 -1
  200. package/dist/lib/onboarding.js +21 -27
  201. package/dist/lib/onboarding.js.map +1 -1
  202. package/dist/lib/otelPropagation.d.ts +1 -1
  203. package/dist/lib/otelPropagation.js +1 -1
  204. package/dist/lib/policySnapshot.d.ts +2 -1
  205. package/dist/lib/policySnapshot.d.ts.map +1 -1
  206. package/dist/lib/policySnapshot.js +11 -4
  207. package/dist/lib/policySnapshot.js.map +1 -1
  208. package/dist/lib/sandbox/image.d.ts +27 -0
  209. package/dist/lib/sandbox/image.d.ts.map +1 -0
  210. package/dist/lib/sandbox/image.js +54 -0
  211. package/dist/lib/sandbox/image.js.map +1 -0
  212. package/dist/lib/sandbox/oci.d.ts +1 -0
  213. package/dist/lib/sandbox/oci.d.ts.map +1 -1
  214. package/dist/lib/sandbox/oci.js +4 -0
  215. package/dist/lib/sandbox/oci.js.map +1 -1
  216. package/dist/lib/sandbox/types.d.ts +5 -0
  217. package/dist/lib/sandbox/types.d.ts.map +1 -1
  218. package/package.json +6 -5
  219. package/resources/sandbox/Dockerfile +30 -0
  220. package/resources/sandbox/entrypoint.sh +108 -0
  221. package/resources/sandbox/firecracker-launch.sh +120 -0
  222. package/dist/harness/vscodeSettingsWriter.d.ts +0 -40
  223. package/dist/harness/vscodeSettingsWriter.d.ts.map +0 -1
  224. package/dist/harness/vscodeSettingsWriter.js +0 -116
  225. package/dist/harness/vscodeSettingsWriter.js.map +0 -1
@@ -1,15 +1,15 @@
1
1
  /**
2
- * Environment Variable Injector (TD-041 graduation)
2
+ * Environment Variable Injector
3
3
  *
4
4
  * Injects ANTHROPIC_BASE_URL and OPENAI_BASE_URL as persistent
5
- * system-level environment variables that survive terminal restarts.
5
+ * environment variables that new terminals and applications pick up, and
6
+ * removes them again.
6
7
  *
7
8
  * Platform support:
8
- * macOS: launchctl setenv <KEY> <VALUE>
9
- * Linux: ~/.bashrc append (user-level; system /etc/environment requires sudo)
9
+ * macOS: launchctl setenv <KEY> <VALUE> (until logout)
10
+ * Linux: /etc/environment when writable (root), else ~/.bashrc
10
11
  * Windows: setx <KEY> <VALUE> (user-level, no /M)
11
12
  *
12
- * LLD #30: Multi-Region Preparation, WS-5MR (TD-041)
13
13
  * @module
14
14
  */
15
15
  import { execSync } from 'node:child_process';
@@ -19,80 +19,87 @@ import os from 'node:os';
19
19
  import { createLogger } from '@intutic/logger';
20
20
  const logger = createLogger('envInjector');
21
21
  const ENV_VARS = ['ANTHROPIC_BASE_URL', 'OPENAI_BASE_URL'];
22
+ function resolveTarget(t = {}) {
23
+ return {
24
+ platform: t.platform ?? os.platform(),
25
+ bashrc: t.bashrc ?? path.join(os.homedir(), '.bashrc'),
26
+ etcEnvironment: t.etcEnvironment ?? '/etc/environment',
27
+ exec: t.exec ?? ((command) => { execSync(command, { stdio: 'pipe' }); }),
28
+ };
29
+ }
22
30
  export class PlatformNotSupportedError extends Error {
23
31
  constructor(platform) {
24
32
  super(`Platform not supported for env injection: ${platform}`);
25
33
  this.name = 'PlatformNotSupportedError';
26
34
  }
27
35
  }
28
- export class ElevationRequiredError extends Error {
29
- constructor(path) {
30
- super(`System-level write requires root access to ${path}. Falling back to user-level.`);
31
- this.name = 'ElevationRequiredError';
32
- }
33
- }
34
36
  function sanitizeShellValue(val) {
35
37
  return val.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/`/g, '\\`').replace(/\$/g, '\\$');
36
38
  }
37
- function macosInject(key, value) {
38
- execSync(`launchctl setenv ${key} "${sanitizeShellValue(value)}"`, { stdio: 'pipe' });
39
+ function bashrcMarker(key) {
40
+ return `# intutic-env-${key}`;
41
+ }
42
+ /** `text` without the lines `drop` matches, and otherwise byte for byte. */
43
+ function withoutLines(text, drop) {
44
+ return text.split('\n').filter((l) => !drop(l)).join('\n');
39
45
  }
40
- function macosRemove(key) {
46
+ function isWritable(file) {
41
47
  try {
42
- execSync(`launchctl unsetenv ${key}`, { stdio: 'pipe' });
48
+ fs.accessSync(file, fs.constants.W_OK);
49
+ return true;
43
50
  }
44
51
  catch {
45
- // Removal is idempotent by contract: `launchctl unsetenv` exits non-zero when
46
- // the key was never set (or the user session has no launchd domain, e.g. over
47
- // ssh). Both mean "already absent", which is the state the caller asked for.
52
+ return false;
48
53
  }
49
54
  }
50
- function linuxInjectUser(key, value) {
51
- const rcFile = path.join(os.homedir(), '.bashrc');
52
- const marker = `# intutic-env-${key}`;
53
- const line = `export ${key}="${sanitizeShellValue(value)}" ${marker}`;
55
+ function linuxInjectUser(bashrc, value) {
54
56
  let content = '';
55
57
  try {
56
- content = fs.readFileSync(rcFile, 'utf8');
57
- }
58
- catch {
59
- // A missing ~/.bashrc is the normal first-run case: `content` stays '' and the
60
- // write below creates the file.
61
- // CAUTION: this also swallows non-ENOENT read failures (EACCES, EISDIR, a
62
- // symlink loop), and the write below then replaces the user's .bashrc with the
63
- // single export line. Narrowing this to ENOENT would be a behaviour change, so
64
- // it is deliberately left alone here rather than fixed as lint cleanup.
65
- }
66
- // Remove existing entry for this key
67
- const lines = content.split('\n').filter(l => !l.includes(marker));
68
- lines.push(line);
69
- fs.writeFileSync(rcFile, lines.join('\n') + '\n', { mode: 0o644 });
58
+ content = fs.readFileSync(bashrc, 'utf8');
59
+ }
60
+ catch (err) {
61
+ // A missing ~/.bashrc is the normal first-run case; the write below
62
+ // creates it. Any other read failure must not end in the file being
63
+ // replaced by our two lines.
64
+ if (err.code !== 'ENOENT')
65
+ throw err;
66
+ }
67
+ let next = withoutLines(content, (l) => ENV_VARS.some((key) => l.includes(bashrcMarker(key))));
68
+ if (next !== '' && !next.endsWith('\n'))
69
+ next += '\n';
70
+ for (const key of ENV_VARS)
71
+ next += `export ${key}="${sanitizeShellValue(value)}" ${bashrcMarker(key)}\n`;
72
+ fs.writeFileSync(bashrc, next, { mode: 0o644 });
70
73
  }
71
- function linuxRemoveUser(key) {
72
- const rcFile = path.join(os.homedir(), '.bashrc');
73
- const marker = `# intutic-env-${key}`;
74
+ /** Removes exactly the marked lines `linuxInjectUser` added. */
75
+ function linuxRemoveUser(bashrc) {
76
+ let content;
74
77
  try {
75
- const content = fs.readFileSync(rcFile, 'utf8');
76
- const filtered = content.split('\n').filter(l => !l.includes(marker)).join('\n');
77
- fs.writeFileSync(rcFile, filtered + '\n', { mode: 0o644 });
78
+ content = fs.readFileSync(bashrc, 'utf8');
78
79
  }
79
80
  catch {
80
- // Nothing to remove if ~/.bashrc does not exist, and an unwritable rc file must
81
- // not fail an uninstall: the marker line is inert shell state, so leaving it in
82
- // place is strictly better than aborting the rest of the removal sequence.
81
+ return; // Nothing to remove.
83
82
  }
83
+ const next = withoutLines(content, (l) => ENV_VARS.some((key) => l.includes(bashrcMarker(key))));
84
+ if (next !== content)
85
+ fs.writeFileSync(bashrc, next);
84
86
  }
85
- function windowsInject(key, value) {
86
- execSync(`setx ${key} "${sanitizeShellValue(value)}"`, { stdio: 'pipe' });
87
- }
88
- function windowsRemove(key) {
89
- try {
90
- execSync(`reg delete HKCU\\Environment /v ${key} /f`, { stdio: 'pipe' });
91
- }
92
- catch {
93
- // `reg delete` exits 1 with "unable to find the specified registry key or value"
94
- // when the value is already gone. Removal is idempotent, so absence is success.
87
+ /**
88
+ * pam_env reads /etc/environment and has no trailing comments, so these
89
+ * lines carry no marker: `KEY=` lines for the two variables are ours to
90
+ * replace and to remove, the same as on the way in.
91
+ */
92
+ function linuxSetSystem(etcEnvironment, value) {
93
+ const content = fs.readFileSync(etcEnvironment, 'utf8');
94
+ let next = withoutLines(content, (l) => ENV_VARS.some((key) => l.startsWith(`${key}=`)));
95
+ if (value !== null) {
96
+ if (next !== '' && !next.endsWith('\n'))
97
+ next += '\n';
98
+ for (const key of ENV_VARS)
99
+ next += `${key}="${sanitizeShellValue(value)}"\n`;
95
100
  }
101
+ if (next !== content)
102
+ fs.writeFileSync(etcEnvironment, next);
96
103
  }
97
104
  /**
98
105
  * Injects ANTHROPIC_BASE_URL and OPENAI_BASE_URL as persistent env vars.
@@ -100,66 +107,70 @@ function windowsRemove(key) {
100
107
  * @param proxyUrl - The Intutic proxy URL (e.g. https://proxy.acme.intutic.ai)
101
108
  * @returns InjectionResult describing what was done
102
109
  */
103
- export async function injectBaseUrlEnvVars(proxyUrl) {
104
- const platform = os.platform();
110
+ export async function injectBaseUrlEnvVars(proxyUrl, target) {
111
+ const t = resolveTarget(target);
112
+ const platform = t.platform;
105
113
  logger.info({ platform, proxyUrl }, 'envInjector.inject_start');
106
114
  if (platform === 'darwin') {
107
115
  for (const key of ENV_VARS)
108
- macosInject(key, proxyUrl);
116
+ t.exec(`launchctl setenv ${key} "${sanitizeShellValue(proxyUrl)}"`);
109
117
  logger.info({ platform, vars: ENV_VARS }, 'envInjector.macos_launchctl_set');
110
118
  return { platform, scope: 'system', vars: [...ENV_VARS], method: 'launchctl setenv' };
111
119
  }
112
120
  if (platform === 'linux') {
113
- // Attempt system-level first; fall back to user-level
114
- let scope = 'user';
115
- try {
116
- const etcEnv = '/etc/environment';
117
- // Only attempt if writable (i.e., running as root)
118
- fs.accessSync(etcEnv, fs.constants.W_OK);
119
- for (const key of ENV_VARS) {
120
- let content = fs.readFileSync(etcEnv, 'utf8');
121
- content = content.split('\n').filter(l => !l.startsWith(`${key}=`)).join('\n');
122
- content += `\n${key}="${sanitizeShellValue(proxyUrl)}"`;
123
- fs.writeFileSync(etcEnv, content.trim() + '\n', { mode: 0o644 });
124
- }
125
- scope = 'system';
121
+ if (isWritable(t.etcEnvironment)) {
122
+ linuxSetSystem(t.etcEnvironment, proxyUrl);
126
123
  logger.info({ platform, vars: ENV_VARS }, 'envInjector.linux_etc_environment_set');
124
+ return { platform, scope: 'system', vars: [...ENV_VARS], method: '/etc/environment' };
127
125
  }
128
- catch {
129
- // Not root \u2014 user-level fallback
130
- for (const key of ENV_VARS)
131
- linuxInjectUser(key, proxyUrl);
132
- logger.info({ platform, vars: ENV_VARS }, 'envInjector.linux_bashrc_set');
133
- }
134
- return { platform, scope, vars: [...ENV_VARS], method: scope === 'system' ? '/etc/environment' : '~/.bashrc' };
126
+ linuxInjectUser(t.bashrc, proxyUrl);
127
+ logger.info({ platform, vars: ENV_VARS }, 'envInjector.linux_bashrc_set');
128
+ return { platform, scope: 'user', vars: [...ENV_VARS], method: '~/.bashrc' };
135
129
  }
136
130
  if (platform === 'win32') {
137
131
  for (const key of ENV_VARS)
138
- windowsInject(key, proxyUrl);
132
+ t.exec(`setx ${key} "${sanitizeShellValue(proxyUrl)}"`);
139
133
  logger.info({ platform, vars: ENV_VARS }, 'envInjector.windows_setx_set');
140
134
  return { platform, scope: 'user', vars: [...ENV_VARS], method: 'setx' };
141
135
  }
142
136
  throw new PlatformNotSupportedError(platform);
143
137
  }
144
138
  /**
145
- * Removes the injected base URL env vars.
139
+ * Removes the injected base URL env vars: from wherever `injectBaseUrlEnvVars`
140
+ * can have put them, so a removal is idempotent and complete.
146
141
  */
147
- export async function removeBaseUrlEnvVars() {
148
- const platform = os.platform();
142
+ export async function removeBaseUrlEnvVars(target) {
143
+ const t = resolveTarget(target);
144
+ const platform = t.platform;
149
145
  logger.info({ platform }, 'envInjector.remove_start');
150
146
  if (platform === 'darwin') {
151
- for (const key of ENV_VARS)
152
- macosRemove(key);
147
+ for (const key of ENV_VARS) {
148
+ try {
149
+ t.exec(`launchctl unsetenv ${key}`);
150
+ }
151
+ catch {
152
+ // `launchctl unsetenv` exits non-zero when the key was never set (or the
153
+ // session has no launchd domain, e.g. over ssh): already absent.
154
+ }
155
+ }
153
156
  return;
154
157
  }
155
158
  if (platform === 'linux') {
156
- for (const key of ENV_VARS)
157
- linuxRemoveUser(key);
159
+ linuxRemoveUser(t.bashrc);
160
+ // Persist wrote here instead when it ran as root.
161
+ if (isWritable(t.etcEnvironment))
162
+ linuxSetSystem(t.etcEnvironment, null);
158
163
  return;
159
164
  }
160
165
  if (platform === 'win32') {
161
- for (const key of ENV_VARS)
162
- windowsRemove(key);
166
+ for (const key of ENV_VARS) {
167
+ try {
168
+ t.exec(`reg delete HKCU\\Environment /v ${key} /f`);
169
+ }
170
+ catch {
171
+ // `reg delete` exits 1 when the value is already gone: absence is success.
172
+ }
173
+ }
163
174
  return;
164
175
  }
165
176
  throw new PlatformNotSupportedError(platform);
@@ -1 +1 @@
1
- {"version":3,"file":"envInjector.js","sourceRoot":"","sources":["../../src/lib/envInjector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"envInjector.js","sourceRoot":"","sources":["../../src/lib/envInjector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Where the local proxy listens, for every command that talks to it.
3
+ *
4
+ * One source: `INTUTIC_PROXY_URL` (default `http://localhost:4000`), the
5
+ * variable `intutic exec` already points agents at. `connect` used to take its
6
+ * port from `PORT` while `budget` and `doctor` hardcoded 4000, so moving the
7
+ * proxy left them probing a port nothing listened on. `PORT` is not read: in a
8
+ * developer's shell it usually belongs to some other server.
9
+ *
10
+ * @module
11
+ */
12
+ /** The local proxy's port, from `INTUTIC_PROXY_URL` (an empty value means unset). */
13
+ export declare function localProxyPort(): number;
14
+ /**
15
+ * `http://127.0.0.1:<port>`: the loopback address, not `localhost`, so a probe
16
+ * cannot resolve to `::1` while the proxy listens on IPv4 only.
17
+ */
18
+ export declare function localProxyProbeBase(): string;
19
+ //# sourceMappingURL=localProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localProxy.d.ts","sourceRoot":"","sources":["../../src/lib/localProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,qFAAqF;AACrF,wBAAgB,cAAc,IAAI,MAAM,CASvC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Where the local proxy listens, for every command that talks to it.
3
+ *
4
+ * One source: `INTUTIC_PROXY_URL` (default `http://localhost:4000`), the
5
+ * variable `intutic exec` already points agents at. `connect` used to take its
6
+ * port from `PORT` while `budget` and `doctor` hardcoded 4000, so moving the
7
+ * proxy left them probing a port nothing listened on. `PORT` is not read: in a
8
+ * developer's shell it usually belongs to some other server.
9
+ *
10
+ * @module
11
+ */
12
+ const DEFAULT_PROXY_PORT = 4000;
13
+ /** The local proxy's port, from `INTUTIC_PROXY_URL` (an empty value means unset). */
14
+ export function localProxyPort() {
15
+ const raw = process.env.INTUTIC_PROXY_URL;
16
+ if (!raw)
17
+ return DEFAULT_PROXY_PORT;
18
+ try {
19
+ const port = Number(new URL(raw).port);
20
+ return port > 0 ? port : DEFAULT_PROXY_PORT;
21
+ }
22
+ catch {
23
+ return DEFAULT_PROXY_PORT;
24
+ }
25
+ }
26
+ /**
27
+ * `http://127.0.0.1:<port>`: the loopback address, not `localhost`, so a probe
28
+ * cannot resolve to `::1` while the proxy listens on IPv4 only.
29
+ */
30
+ export function localProxyProbeBase() {
31
+ return `http://127.0.0.1:${localProxyPort()}`;
32
+ }
33
+ //# sourceMappingURL=localProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localProxy.js","sourceRoot":"","sources":["../../src/lib/localProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,kBAAkB,GAAG,IAAI,CAAA;AAE/B,qFAAqF;AACrF,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAA;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,kBAAkB,CAAA;IACnC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAA;QACtC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,kBAAkB,CAAA;IAC3B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,oBAAoB,cAAc,EAAE,EAAE,CAAA;AAC/C,CAAC"}
@@ -6,5 +6,5 @@
6
6
  * LLD #8 — Sync Daemon / CLI
7
7
  * @module
8
8
  */
9
- export declare function printOnboardingGuide(harnesses: string[], userAuthToken?: string, devMode?: boolean): void;
9
+ export declare function printOnboardingGuide(harnesses: string[], userAuthToken?: string): void;
10
10
  //# sourceMappingURL=onboarding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyCH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,IAAI,CA2NvG"}
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6BH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAgOtF"}
@@ -8,30 +8,18 @@
8
8
  */
9
9
  import pc from 'picocolors';
10
10
  import { log } from './logger.js';
11
+ import { anthropicBaseUrl, openaiBaseUrl } from '@intutic/shared-types';
11
12
  /**
12
13
  * Print tailored setup instructions for a list of harnesses.
13
14
  *
14
15
  * @param harnesses - List of harness types (e.g. ['cursor', 'aider'])
15
16
  * @param apiKey - Optional API key to display in the instructions
16
- * @param devMode - retained for call-site compatibility; the proxy is always local
17
17
  */
18
18
  function maskUserToken(tokenVal) {
19
19
  if (!tokenVal)
20
- return '<YOUR_INTUTIC_API_KEY>';
20
+ return '<YOUR_PROVIDER_API_KEY>';
21
21
  return `${tokenVal.substring(0, 4)}...${tokenVal.substring(tokenVal.length - 4)}`;
22
22
  }
23
- /**
24
- * Trims trailing `/` characters without a regex — see the identical helper
25
- * in `commands/exec.ts` for why: `/\/+$/` is flagged by static analysis as a
26
- * polynomial-time pattern on external input, and a loop sidesteps the whole
27
- * category rather than needing an exemption.
28
- */
29
- function trimTrailingSlashes(s) {
30
- let end = s.length;
31
- while (end > 0 && s.charCodeAt(end - 1) === 47 /* '/' */)
32
- end--;
33
- return s.slice(0, end);
34
- }
35
23
  function writeCliOutput(line) {
36
24
  process.stdout.write(line + '\n');
37
25
  }
@@ -41,15 +29,14 @@ function printEnvVar(envName, envVal) {
41
29
  function printYamlKey(keyName, keyVal, spaces = 5) {
42
30
  writeCliOutput(`${' '.repeat(spaces)}${keyName}: ${keyVal}`);
43
31
  }
44
- export function printOnboardingGuide(harnesses, userAuthToken, devMode = false) {
32
+ export function printOnboardingGuide(harnesses, userAuthToken) {
45
33
  const safeDisplayValue = maskUserToken(userAuthToken);
46
34
  // Always the local proxy. This used to branch to a remote host when devMode
47
35
  // was false, which meant the onboarding instructions we print told people to
48
36
  // send their agent traffic somewhere other than the proxy they had just
49
37
  // started. Set INTUTIC_PROXY_URL to override.
50
- void devMode;
51
- const proxyHost = trimTrailingSlashes(process.env.INTUTIC_PROXY_URL ?? 'http://localhost:4000');
52
- const proxyUrl = `${proxyHost}/v1`;
38
+ const proxyHost = anthropicBaseUrl(process.env.INTUTIC_PROXY_URL);
39
+ const proxyUrl = openaiBaseUrl(process.env.INTUTIC_PROXY_URL);
53
40
  writeCliOutput('');
54
41
  log.header('Intutic — Setup & Integration Instructions');
55
42
  writeCliOutput(`To route your agent traffic through the Intutic proxy, follow the setup below.`);
@@ -57,10 +44,15 @@ export function printOnboardingGuide(harnesses, userAuthToken, devMode = false)
57
44
  if (userAuthToken) {
58
45
  writeCliOutput(`Your Intutic API Key is: ${pc.green(safeDisplayValue)}`);
59
46
  }
47
+ else {
48
+ // Standalone, the proxy forwards the agent's own provider key upstream;
49
+ // there is no Intutic key to hand out.
50
+ writeCliOutput('Not logged in: wherever a key is asked for below, use your own provider API key.');
51
+ }
60
52
  if (harnesses.length === 0) {
61
53
  writeCliOutput('');
62
54
  log.info('No harnesses were automatically detected in this workspace.');
63
- writeCliOutput(`Please refer to the full integration guide at: ${pc.bold('user.md')}`);
55
+ writeCliOutput(`See the integration guides at: ${pc.bold('https://docs.intutic.ai/integrations/')}`);
64
56
  writeCliOutput('Or use the general subprocess wrapper to launch any CLI agent:');
65
57
  writeCliOutput(` ${pc.bold(`intutic exec -- <your-agent-command>`)}`);
66
58
  return;
@@ -71,7 +63,7 @@ export function printOnboardingGuide(harnesses, userAuthToken, devMode = false)
71
63
  case 'cursor':
72
64
  writeCliOutput(` 1. Open Cursor Settings (Cmd+, or Ctrl+,).`);
73
65
  writeCliOutput(` 2. Navigate to the ${pc.bold('Models')} tab.`);
74
- writeCliOutput(` 3. Under ${pc.bold('OpenAI API Key')}, enter your Intutic API Key:`);
66
+ writeCliOutput(` 3. Under ${pc.bold('OpenAI API Key')}, enter your API key:`);
75
67
  writeCliOutput(` ${pc.green(safeDisplayValue)}`);
76
68
  writeCliOutput(` 4. Enable the ${pc.bold('"Override OpenAI Base URL"')} toggle.`);
77
69
  writeCliOutput(` 5. Set the override URL to:`);
@@ -113,7 +105,7 @@ export function printOnboardingGuide(harnesses, userAuthToken, devMode = false)
113
105
  writeCliOutput(` 2. Click the settings gear icon (⚙️).`);
114
106
  writeCliOutput(` 3. Set ${pc.bold('API Provider')} to: OpenAI Compatible`);
115
107
  writeCliOutput(` 4. Set ${pc.bold('Base URL')} to: ${pc.cyan(proxyUrl)}`);
116
- writeCliOutput(` 5. Set ${pc.bold('API Key')} to your Intutic API Key:`);
108
+ writeCliOutput(` 5. Set ${pc.bold('API Key')} to your API key:`);
117
109
  writeCliOutput(` ${pc.green(safeDisplayValue)}`);
118
110
  writeCliOutput(` 6. Enter the target Model ID (e.g. gpt-4o) and save.`);
119
111
  break;
@@ -176,19 +168,21 @@ export function printOnboardingGuide(harnesses, userAuthToken, devMode = false)
176
168
  writeCliOutput(` In your OpenAI Chat Model node inside n8n:`);
177
169
  writeCliOutput(` 1. Expand "Parameters" and set ${pc.bold('Base URL')} to:`);
178
170
  writeCliOutput(` ${pc.cyan(proxyUrl)}`);
179
- writeCliOutput(` 2. Select/Create a custom credential set and use your Intutic API Key.`);
171
+ writeCliOutput(` 2. Select/Create a custom credential set and use your API key.`);
180
172
  break;
181
173
  case 'windsurf':
182
- writeCliOutput(` Set the custom API base URL and key in the Windsurf settings tab.`);
174
+ writeCliOutput(` Windsurf has no base-URL setting. intutic connect routes Cascade through the`);
175
+ writeCliOutput(` proxy's TLS interception (http.proxy in Windsurf's user settings.json).`);
183
176
  break;
184
177
  case 'dsh':
185
178
  writeCliOutput(` Every sync registers the Intutic gate into each EXISTING dsh profile`);
186
179
  writeCliOutput(` (${pc.bold('cordis.patch.yml')} + the ${pc.bold('@intutic/gate')} package.json dependency) and`);
187
- writeCliOutput(` redirects both the llm-deepseek (default) and llm-pi-ai (selectable) LLM`);
188
- writeCliOutput(` routes in ${pc.bold('settings.yaml')} through the Intutic proxy — no manual config edit.`);
180
+ writeCliOutput(` points dsh's default LLM route (the ${pc.bold('llm-deepseek')} entry, in that same`);
181
+ writeCliOutput(` ${pc.bold('cordis.patch.yml')}) at the Intutic proxy — no manual config edit.`);
189
182
  writeCliOutput(` `);
190
- writeCliOutput(` One manual step remains, PER PROFILE: this daemon cannot run a package`);
191
- writeCliOutput(` manager in a directory it does not own, so finish activation with:`);
183
+ writeCliOutput(` One manual step remains, PER PROFILE — until it runs, dsh only warns and`);
184
+ writeCliOutput(` runs UNGOVERNED. This daemon cannot run a package manager in a directory`);
185
+ writeCliOutput(` it does not own, so finish activation with:`);
192
186
  writeCliOutput(` ${pc.bold('dsh plugin --profile <name> add @intutic/gate')}`);
193
187
  writeCliOutput(` See ${pc.cyan('$DSH_HOME/INSTALL.md')} (auto-generated, lists your current profiles).`);
194
188
  writeCliOutput(` `);
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * OpenTelemetry trace-context propagation for outbound CLI HTTP calls.
3
3
  *
4
4
  * Deliberately lighter than the NodeSDK instrumentation used by
5
- * control-plane/gateway-daemon/mcp-daemon: `intutic connect` is a daemon
5
+ * control-plane/mcp-daemon: `intutic connect` is a daemon
6
6
  * every open-core user installs, and the auto-instrumentations-node
7
7
  * meta-package is heavy (dozens of instrumented libraries the CLI doesn't
8
8
  * use) for a benefit only the minority who run a collector would see.
@@ -2,7 +2,7 @@
2
2
  * OpenTelemetry trace-context propagation for outbound CLI HTTP calls.
3
3
  *
4
4
  * Deliberately lighter than the NodeSDK instrumentation used by
5
- * control-plane/gateway-daemon/mcp-daemon: `intutic connect` is a daemon
5
+ * control-plane/mcp-daemon: `intutic connect` is a daemon
6
6
  * every open-core user installs, and the auto-instrumentations-node
7
7
  * meta-package is heavy (dozens of instrumented libraries the CLI doesn't
8
8
  * use) for a benefit only the minority who run a collector would see.
@@ -18,7 +18,8 @@
18
18
  * wait" would be a supported way to disarm governance.
19
19
  * empty — parsed, but no rules. The writer always ships the destructive
20
20
  * tier, so zero rules means the compile produced nothing.
21
- * invalid — digest or workspace mismatch. The gates drop the dynamic tier.
21
+ * invalid — digest or workspace mismatch. The gates drop the dynamic tier,
22
+ * keeping only its SSO-group refusals.
22
23
  * absent — no file. The compiled floor still applies; nothing else does.
23
24
  *
24
25
  * Kept deliberately faithful rather than improved: a reader that disagrees with
@@ -1 +1 @@
1
- {"version":3,"file":"policySnapshot.d.ts","sourceRoot":"","sources":["../../src/lib/policySnapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAOH;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAE1C,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,0BAA0B,CAAA;AAE1D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAA;AAE3E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,CAAA;IACpB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAA;IACd,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAA;IACf,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;IACjB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAA;IACpB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,oBAAoB,CAiFtB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,GAAE;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GACtD,oBAAoB,CAkBtB"}
1
+ {"version":3,"file":"policySnapshot.d.ts","sourceRoot":"","sources":["../../src/lib/policySnapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAOH;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAE1C,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,0BAA0B,CAAA;AAE1D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAA;AAE3E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,CAAA;IACpB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAA;IACd,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAA;IACf,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;IACjB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAA;IACpB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,oBAAoB,CAsFtB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,GAAE;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GACtD,oBAAoB,CAkBtB"}
@@ -18,7 +18,8 @@
18
18
  * wait" would be a supported way to disarm governance.
19
19
  * empty — parsed, but no rules. The writer always ships the destructive
20
20
  * tier, so zero rules means the compile produced nothing.
21
- * invalid — digest or workspace mismatch. The gates drop the dynamic tier.
21
+ * invalid — digest or workspace mismatch. The gates drop the dynamic tier,
22
+ * keeping only its SSO-group refusals.
22
23
  * absent — no file. The compiled floor still applies; nothing else does.
23
24
  *
24
25
  * Kept deliberately faithful rather than improved: a reader that disagrees with
@@ -75,6 +76,9 @@ export function parsePolicySnapshot(text, opts = {}) {
75
76
  droppedRules: 0,
76
77
  path: opts.path ?? resolveSnapshotRulesPath(),
77
78
  };
79
+ // The SSO-group refusals the gates keep when they drop the rest of an
80
+ // invalid snapshot's dynamic tier.
81
+ let ssoGroupRefusals = 0;
78
82
  const lines = text.split('\n');
79
83
  for (const line of lines) {
80
84
  if (line.startsWith('#digest ')) {
@@ -109,6 +113,8 @@ export function parsePolicySnapshot(text, opts = {}) {
109
113
  continue;
110
114
  }
111
115
  out.ruleCount += 1;
116
+ if (f[0].startsWith('sso_group.') && f[1] === 'block')
117
+ ssoGroupRefusals += 1;
112
118
  }
113
119
  // Integrity, cheapest failure first. A digest nobody recomputes is a comment;
114
120
  // a workspace id nobody compares means workspace A's rules get enforced on B's
@@ -126,10 +132,11 @@ export function parsePolicySnapshot(text, opts = {}) {
126
132
  if (out.state === 'ok' && out.ruleCount === 0)
127
133
  out.state = 'empty';
128
134
  // The dynamic tier is additive, so dropping it returns to yesterday's
129
- // behaviour rather than opening a hole. Reported as zero rules because zero is
130
- // what the gates will have.
135
+ // behaviour rather than opening a hole — except the SSO-group refusals,
136
+ // which the gates keep because they only ever refuse. Reported as what the
137
+ // gates will have.
131
138
  if (out.state === 'invalid')
132
- out.ruleCount = 0;
139
+ out.ruleCount = ssoGroupRefusals;
133
140
  if (out.state === 'ok' && out.generatedAt) {
134
141
  const t = Date.parse(out.generatedAt);
135
142
  if (!Number.isNaN(t)) {