@ekkos/cli 1.3.2 → 1.3.5

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 (119) hide show
  1. package/dist/capture/jsonl-rewriter.d.ts +1 -1
  2. package/dist/capture/jsonl-rewriter.js +3 -3
  3. package/dist/capture/transcript-repair.d.ts +2 -2
  4. package/dist/capture/transcript-repair.js +2 -2
  5. package/dist/commands/claw.d.ts +13 -0
  6. package/dist/commands/claw.js +253 -0
  7. package/dist/commands/dashboard.js +617 -83
  8. package/dist/commands/doctor.d.ts +3 -3
  9. package/dist/commands/doctor.js +6 -79
  10. package/dist/commands/gemini.d.ts +19 -0
  11. package/dist/commands/gemini.js +193 -0
  12. package/dist/commands/init.js +2 -25
  13. package/dist/commands/run.d.ts +0 -1
  14. package/dist/commands/run.js +147 -241
  15. package/dist/commands/scan.d.ts +21 -0
  16. package/dist/commands/scan.js +386 -0
  17. package/dist/commands/swarm-dashboard.js +156 -28
  18. package/dist/commands/swarm.d.ts +1 -1
  19. package/dist/commands/swarm.js +1 -1
  20. package/dist/commands/test-claude.d.ts +2 -2
  21. package/dist/commands/test-claude.js +3 -3
  22. package/dist/deploy/index.d.ts +0 -2
  23. package/dist/deploy/index.js +0 -2
  24. package/dist/deploy/settings.d.ts +2 -2
  25. package/dist/deploy/settings.js +42 -4
  26. package/dist/deploy/skills.js +1 -2
  27. package/dist/index.js +79 -19
  28. package/dist/lib/usage-parser.js +4 -3
  29. package/dist/utils/proxy-url.d.ts +12 -1
  30. package/dist/utils/proxy-url.js +16 -1
  31. package/dist/utils/templates.js +1 -1
  32. package/package.json +4 -6
  33. package/templates/CLAUDE.md +49 -107
  34. package/dist/agent/daemon.d.ts +0 -130
  35. package/dist/agent/daemon.js +0 -606
  36. package/dist/agent/health-check.d.ts +0 -35
  37. package/dist/agent/health-check.js +0 -243
  38. package/dist/agent/pty-runner.d.ts +0 -53
  39. package/dist/agent/pty-runner.js +0 -190
  40. package/dist/commands/agent.d.ts +0 -50
  41. package/dist/commands/agent.js +0 -544
  42. package/dist/commands/setup-remote.d.ts +0 -20
  43. package/dist/commands/setup-remote.js +0 -582
  44. package/dist/commands/synk.d.ts +0 -7
  45. package/dist/commands/synk.js +0 -339
  46. package/dist/synk/api.d.ts +0 -22
  47. package/dist/synk/api.js +0 -133
  48. package/dist/synk/auth.d.ts +0 -7
  49. package/dist/synk/auth.js +0 -30
  50. package/dist/synk/config.d.ts +0 -18
  51. package/dist/synk/config.js +0 -37
  52. package/dist/synk/daemon/control-client.d.ts +0 -11
  53. package/dist/synk/daemon/control-client.js +0 -101
  54. package/dist/synk/daemon/control-server.d.ts +0 -24
  55. package/dist/synk/daemon/control-server.js +0 -91
  56. package/dist/synk/daemon/run.d.ts +0 -14
  57. package/dist/synk/daemon/run.js +0 -338
  58. package/dist/synk/encryption.d.ts +0 -17
  59. package/dist/synk/encryption.js +0 -133
  60. package/dist/synk/index.d.ts +0 -13
  61. package/dist/synk/index.js +0 -36
  62. package/dist/synk/machine-client.d.ts +0 -42
  63. package/dist/synk/machine-client.js +0 -218
  64. package/dist/synk/persistence.d.ts +0 -51
  65. package/dist/synk/persistence.js +0 -211
  66. package/dist/synk/qr.d.ts +0 -5
  67. package/dist/synk/qr.js +0 -33
  68. package/dist/synk/session-bridge.d.ts +0 -58
  69. package/dist/synk/session-bridge.js +0 -171
  70. package/dist/synk/session-client.d.ts +0 -46
  71. package/dist/synk/session-client.js +0 -240
  72. package/dist/synk/types.d.ts +0 -574
  73. package/dist/synk/types.js +0 -74
  74. package/dist/utils/verify-remote-terminal.d.ts +0 -10
  75. package/dist/utils/verify-remote-terminal.js +0 -415
  76. package/templates/README.md +0 -378
  77. package/templates/claude-plugins/PHASE2_COMPLETION.md +0 -346
  78. package/templates/claude-plugins/PLUGIN_PROPOSALS.md +0 -1776
  79. package/templates/claude-plugins/README.md +0 -587
  80. package/templates/claude-plugins/agents/code-reviewer.json +0 -14
  81. package/templates/claude-plugins/agents/debug-detective.json +0 -15
  82. package/templates/claude-plugins/agents/git-companion.json +0 -14
  83. package/templates/claude-plugins/blog-manager/.claude-plugin/plugin.json +0 -8
  84. package/templates/claude-plugins/blog-manager/commands/blog.md +0 -691
  85. package/templates/claude-plugins/golden-loop-monitor/.claude-plugin/plugin.json +0 -8
  86. package/templates/claude-plugins/golden-loop-monitor/commands/loop-status.md +0 -434
  87. package/templates/claude-plugins/learning-tracker/.claude-plugin/plugin.json +0 -8
  88. package/templates/claude-plugins/learning-tracker/commands/my-patterns.md +0 -282
  89. package/templates/claude-plugins/memory-lens/.claude-plugin/plugin.json +0 -8
  90. package/templates/claude-plugins/memory-lens/commands/memory-search.md +0 -181
  91. package/templates/claude-plugins/pattern-coach/.claude-plugin/plugin.json +0 -8
  92. package/templates/claude-plugins/pattern-coach/commands/forge.md +0 -365
  93. package/templates/claude-plugins/project-schema-validator/.claude-plugin/plugin.json +0 -8
  94. package/templates/claude-plugins/project-schema-validator/commands/validate-schema.md +0 -582
  95. package/templates/commands/continue.md +0 -47
  96. package/templates/cursor-rules/ekkos-memory.md +0 -127
  97. package/templates/ekkos-manifest.json +0 -223
  98. package/templates/helpers/json-parse.cjs +0 -101
  99. package/templates/plan-template.md +0 -306
  100. package/templates/shared/hooks-enabled.json +0 -22
  101. package/templates/shared/session-words.json +0 -45
  102. package/templates/skills/ekkOS_Deep_Recall/Skill.md +0 -282
  103. package/templates/skills/ekkOS_Learn/Skill.md +0 -265
  104. package/templates/skills/ekkOS_Memory_First/Skill.md +0 -206
  105. package/templates/skills/ekkOS_Plan_Assist/Skill.md +0 -302
  106. package/templates/skills/ekkOS_Preferences/Skill.md +0 -247
  107. package/templates/skills/ekkOS_Reflect/Skill.md +0 -257
  108. package/templates/skills/ekkOS_Safety/Skill.md +0 -265
  109. package/templates/skills/ekkOS_Schema/Skill.md +0 -251
  110. package/templates/skills/ekkOS_Summary/Skill.md +0 -257
  111. package/templates/spec-template.md +0 -159
  112. package/templates/windsurf-rules/ekkos-memory.md +0 -127
  113. package/templates/windsurf-skills/README.md +0 -58
  114. package/templates/windsurf-skills/ekkos-continue/SKILL.md +0 -81
  115. package/templates/windsurf-skills/ekkos-golden-loop/SKILL.md +0 -225
  116. package/templates/windsurf-skills/ekkos-insights/SKILL.md +0 -138
  117. package/templates/windsurf-skills/ekkos-recall/SKILL.md +0 -96
  118. package/templates/windsurf-skills/ekkos-safety/SKILL.md +0 -89
  119. package/templates/windsurf-skills/ekkos-vault/SKILL.md +0 -86
@@ -2,11 +2,11 @@
2
2
  * ekkOS CLI: doctor command
3
3
  * Checks system prerequisites for ekkOS
4
4
  *
5
- * Per ekkOS Onboarding Spec v1.2 + Addendum:
5
+ * Gates:
6
6
  * - Node gate: Node >= 18 required (FAIL if missing)
7
+ * - Claude gate: Claude CLI installed
7
8
  * - PTY gate: WARN on Windows if missing (monitor-only mode available)
8
- * - Hooks gate: Verifies hook installation
9
- * - NO jq checks (jq dependency eliminated)
9
+ * - MCP gate: ekkOS MCP server configured
10
10
  */
11
11
  type GateStatus = 'PASS' | 'FAIL' | 'WARN';
12
12
  interface Check {
@@ -3,11 +3,11 @@
3
3
  * ekkOS CLI: doctor command
4
4
  * Checks system prerequisites for ekkOS
5
5
  *
6
- * Per ekkOS Onboarding Spec v1.2 + Addendum:
6
+ * Gates:
7
7
  * - Node gate: Node >= 18 required (FAIL if missing)
8
+ * - Claude gate: Claude CLI installed
8
9
  * - PTY gate: WARN on Windows if missing (monitor-only mode available)
9
- * - Hooks gate: Verifies hook installation
10
- * - NO jq checks (jq dependency eliminated)
10
+ * - MCP gate: ekkOS MCP server configured
11
11
  */
12
12
  var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -20,7 +20,6 @@ const path_1 = require("path");
20
20
  const fs_1 = require("fs");
21
21
  const child_process_1 = require("child_process");
22
22
  const chalk_1 = __importDefault(require("chalk"));
23
- const hooks_1 = require("./hooks");
24
23
  // ekkOS-managed Claude installation path (same as run.ts)
25
24
  const EKKOS_CLAUDE_BIN = (0, path_1.join)((0, os_1.homedir)(), '.ekkos', 'claude-code', 'node_modules', '.bin', 'claude');
26
25
  /**
@@ -139,44 +138,6 @@ function parseMcpOutput(output) {
139
138
  output.toLowerCase().includes('memory');
140
139
  return { configured: hasEkkos, servers };
141
140
  }
142
- /**
143
- * Check hooks installation status
144
- */
145
- function checkHooksInstallation() {
146
- const isWindows = (0, os_1.platform)() === 'win32';
147
- const manifestData = (0, hooks_1.loadManifest)();
148
- if (!manifestData) {
149
- return { installed: false, details: 'Source manifest not found' };
150
- }
151
- const platformConfig = manifestData.manifest.platforms[(0, os_1.platform)()];
152
- const globalHooksDir = (0, hooks_1.expandPath)(platformConfig.globalHooksDir);
153
- const configDir = (0, hooks_1.expandPath)(platformConfig.configDir);
154
- // Check installed manifest
155
- const installedManifestPath = (0, path_1.join)(globalHooksDir, '.ekkos-manifest.json');
156
- if (!(0, fs_1.existsSync)(installedManifestPath)) {
157
- return { installed: false, details: 'No installed manifest found' };
158
- }
159
- // Check helper
160
- const helperPath = (0, path_1.join)(configDir, '.helpers', 'json-parse.cjs');
161
- if (!(0, fs_1.existsSync)(helperPath)) {
162
- return { installed: false, details: 'json-parse.cjs helper missing' };
163
- }
164
- // Check defaults
165
- const defaultsPath = (0, path_1.join)(configDir, '.defaults', 'session-words.json');
166
- if (!(0, fs_1.existsSync)(defaultsPath)) {
167
- return { installed: false, details: 'Default session words missing' };
168
- }
169
- // Check required hooks
170
- const hookExt = isWindows ? '.ps1' : '.sh';
171
- const requiredHooks = ['user-prompt-submit', 'stop', 'session-start'];
172
- for (const hookName of requiredHooks) {
173
- const hookPath = (0, path_1.join)(globalHooksDir, `${hookName}${hookExt}`);
174
- if (!(0, fs_1.existsSync)(hookPath)) {
175
- return { installed: false, details: `${hookName}${hookExt} missing` };
176
- }
177
- }
178
- return { installed: true, details: 'All hooks and helpers installed' };
179
- }
180
141
  /**
181
142
  * Run diagnostic checks and return report
182
143
  */
@@ -266,7 +227,7 @@ function runDiagnostics() {
266
227
  ptyChecks.push({
267
228
  name: 'Monitor-only mode',
268
229
  passed: true,
269
- detail: 'Auto-continue disabled; manual /clear + /continue required'
230
+ detail: 'PTY not available on Windows; using spawn pass-through'
270
231
  });
271
232
  }
272
233
  else {
@@ -285,32 +246,11 @@ function runDiagnostics() {
285
246
  status: ptyGateStatus,
286
247
  checks: ptyChecks,
287
248
  fix: ptyGateStatus === 'WARN'
288
- ? 'npm install node-pty-prebuilt-multiarch (optional for auto-continue)'
249
+ ? 'npm install node-pty-prebuilt-multiarch (optional for terminal monitoring)'
289
250
  : undefined
290
251
  });
291
252
  // ═══════════════════════════════════════════════════════════════════════════
292
- // GATE 4: Hooks Installation (per spec v1.2)
293
- // ═══════════════════════════════════════════════════════════════════════════
294
- const hooksChecks = [];
295
- let hooksGateStatus = 'PASS';
296
- const hooksResult = checkHooksInstallation();
297
- hooksChecks.push({
298
- name: 'ekkOS hooks installed',
299
- passed: hooksResult.installed,
300
- detail: hooksResult.details
301
- });
302
- if (!hooksResult.installed) {
303
- hooksGateStatus = 'WARN';
304
- }
305
- gates.push({
306
- id: 'hooks',
307
- title: 'ekkOS Hooks',
308
- status: hooksGateStatus,
309
- checks: hooksChecks,
310
- fix: hooksGateStatus === 'WARN' ? 'ekkos hooks install --global' : undefined
311
- });
312
- // ═══════════════════════════════════════════════════════════════════════════
313
- // GATE 5: MCP Works
253
+ // GATE 4: MCP Works
314
254
  // ═══════════════════════════════════════════════════════════════════════════
315
255
  const mcpChecks = [];
316
256
  let mcpGatePass = true;
@@ -449,19 +389,6 @@ async function attemptAutoFixes(report) {
449
389
  manual.push('If that fails: Install VS Build Tools, then: npm rebuild node-pty');
450
390
  }
451
391
  break;
452
- case 'hooks':
453
- // Try to install hooks
454
- console.log(chalk_1.default.yellow('\nAttempting to install hooks...'));
455
- try {
456
- // Import and call directly
457
- const { hooksInstall } = require('./hooks');
458
- await hooksInstall({ global: true, verbose: false });
459
- fixed.push('Hooks installed');
460
- }
461
- catch {
462
- manual.push('ekkos hooks install --global');
463
- }
464
- break;
465
392
  case 'mcp':
466
393
  // Try to configure MCP (safe)
467
394
  console.log(chalk_1.default.yellow('\nAttempting to configure MCP...'));
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ekkOS Gemini CLI Launcher
3
+ *
4
+ * Spawns Gemini CLI with GOOGLE_GEMINI_BASE_URL pointing at the ekkOS proxy.
5
+ * The @google/genai SDK appends /v1beta/models/{model}:generateContent to the
6
+ * base URL, which the proxy routes through IPC compression + pattern injection.
7
+ *
8
+ * Minimal wrapper — Gemini CLI handles its own terminal UX.
9
+ * Gemini CLI handles its own terminal UX.
10
+ */
11
+ export interface GeminiOptions {
12
+ verbose?: boolean;
13
+ noProxy?: boolean;
14
+ session?: string;
15
+ }
16
+ /**
17
+ * Launch Gemini CLI with ekkOS proxy integration.
18
+ */
19
+ export declare function gemini(options?: GeminiOptions): Promise<void>;
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * ekkOS Gemini CLI Launcher
4
+ *
5
+ * Spawns Gemini CLI with GOOGLE_GEMINI_BASE_URL pointing at the ekkOS proxy.
6
+ * The @google/genai SDK appends /v1beta/models/{model}:generateContent to the
7
+ * base URL, which the proxy routes through IPC compression + pattern injection.
8
+ *
9
+ * Minimal wrapper — Gemini CLI handles its own terminal UX.
10
+ * Gemini CLI handles its own terminal UX.
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.gemini = gemini;
50
+ const chalk_1 = __importDefault(require("chalk"));
51
+ const crypto = __importStar(require("crypto"));
52
+ const path = __importStar(require("path"));
53
+ const os = __importStar(require("os"));
54
+ const fs = __importStar(require("fs"));
55
+ const child_process_1 = require("child_process");
56
+ const state_1 = require("../utils/state");
57
+ const proxy_url_1 = require("../utils/proxy-url");
58
+ // Session state — set once at startup
59
+ let cliSessionName = null;
60
+ let cliSessionId = null;
61
+ const isWindows = process.platform === 'win32';
62
+ /**
63
+ * Resolve Gemini CLI binary path.
64
+ * Checks common locations then falls back to PATH lookup.
65
+ */
66
+ function resolveGeminiPath() {
67
+ if (!isWindows) {
68
+ const pathsToCheck = [
69
+ '/opt/homebrew/bin/gemini',
70
+ '/usr/local/bin/gemini',
71
+ path.join(os.homedir(), '.local', 'bin', 'gemini'),
72
+ path.join(os.homedir(), '.npm-global', 'bin', 'gemini'),
73
+ ];
74
+ for (const p of pathsToCheck) {
75
+ if (fs.existsSync(p))
76
+ return p;
77
+ }
78
+ }
79
+ // PATH lookup
80
+ const whichCmd = isWindows ? 'where gemini' : 'which gemini';
81
+ try {
82
+ const result = (0, child_process_1.execSync)(whichCmd, { encoding: 'utf-8', stdio: 'pipe' }).trim();
83
+ if (result)
84
+ return result.split('\n')[0];
85
+ }
86
+ catch { /* not found */ }
87
+ // Fallback — let spawn resolve it (will error with helpful message)
88
+ return 'gemini';
89
+ }
90
+ /**
91
+ * Build environment for Gemini CLI with proxy routing.
92
+ */
93
+ function buildGeminiEnv(options) {
94
+ const env = { ...process.env };
95
+ if (options.noProxy) {
96
+ return env;
97
+ }
98
+ // Generate session identity (same pattern as run.ts getEkkosEnv)
99
+ if (!cliSessionName) {
100
+ cliSessionId = crypto.randomUUID();
101
+ cliSessionName = options.session || (0, state_1.uuidToWords)(cliSessionId);
102
+ console.log(chalk_1.default.gray(` 📂 Session: ${cliSessionName}`));
103
+ }
104
+ // Resolve userId from config or auth token
105
+ const ekkosConfig = (0, state_1.getConfig)();
106
+ let userId = ekkosConfig?.userId || 'anonymous';
107
+ if (userId === 'anonymous') {
108
+ const authToken = (0, state_1.getAuthToken)();
109
+ if (authToken?.startsWith('ekk_')) {
110
+ const parts = authToken.split('_');
111
+ if (parts.length >= 2 && parts[1])
112
+ userId = parts[1];
113
+ }
114
+ }
115
+ // Build proxy URL — no query params (SDK concatenates baseUrl + path as strings).
116
+ // Format: /gproxy/{userId}/{session}/{sid}/{project64}
117
+ // Proxy extracts params from path, then routes /v1beta or /v1beta1 to googleRouter.
118
+ const proxyUrl = (0, proxy_url_1.buildGeminiProxyUrl)(userId, cliSessionName, process.cwd(), cliSessionId);
119
+ env.GOOGLE_GEMINI_BASE_URL = proxyUrl;
120
+ env.GOOGLE_VERTEX_BASE_URL = proxyUrl;
121
+ // User must bring their own Gemini API key — ekkOS just proxies the traffic
122
+ // for IPC compression and pattern injection (same model as Claude).
123
+ if (!env.GEMINI_API_KEY && !env.GOOGLE_API_KEY) {
124
+ console.warn(chalk_1.default.yellow(' ⚠ GEMINI_API_KEY not set.'));
125
+ console.warn(chalk_1.default.gray(' Get one at: https://aistudio.google.com/apikey'));
126
+ console.warn(chalk_1.default.gray(' Then: export GEMINI_API_KEY=your_key'));
127
+ }
128
+ if (options.verbose) {
129
+ // Redact userId from log
130
+ const safeUrl = proxyUrl.replace(/\/proxy\/[^/]+\//, '/proxy/[user]/');
131
+ console.log(chalk_1.default.gray(` 🔗 Proxy: ${safeUrl}`));
132
+ }
133
+ return env;
134
+ }
135
+ /**
136
+ * Launch Gemini CLI with ekkOS proxy integration.
137
+ */
138
+ async function gemini(options = {}) {
139
+ (0, state_1.ensureEkkosDir)();
140
+ console.log('');
141
+ console.log(chalk_1.default.cyan(' 🧠 ekkOS_') + chalk_1.default.gray(' + ') + chalk_1.default.blue('Gemini CLI'));
142
+ // Resolve binary
143
+ const geminiPath = resolveGeminiPath();
144
+ if (options.verbose) {
145
+ console.log(chalk_1.default.gray(` 📦 Binary: ${geminiPath}`));
146
+ }
147
+ // Build env with proxy routing
148
+ const env = buildGeminiEnv(options);
149
+ // Register session for multi-session awareness
150
+ const sessionId = cliSessionId || crypto.randomUUID();
151
+ const sessionName = cliSessionName || 'gemini-session';
152
+ (0, state_1.registerActiveSession)(sessionId, sessionName, process.cwd());
153
+ if (!options.noProxy) {
154
+ console.log(chalk_1.default.cyan(' 🧠 ekkOS_Continuum Loaded!'));
155
+ }
156
+ console.log('');
157
+ // Spawn Gemini CLI — stdio: inherit for full terminal passthrough
158
+ const child = (0, child_process_1.spawn)(geminiPath, [], {
159
+ stdio: 'inherit',
160
+ env,
161
+ cwd: process.cwd(),
162
+ shell: isWindows,
163
+ });
164
+ const cleanup = () => {
165
+ (0, state_1.unregisterActiveSession)();
166
+ };
167
+ child.on('exit', (code) => {
168
+ cleanup();
169
+ if (code !== null && code !== 0) {
170
+ process.exit(code);
171
+ }
172
+ });
173
+ child.on('error', (err) => {
174
+ cleanup();
175
+ if (err.code === 'ENOENT') {
176
+ console.error('');
177
+ console.error(chalk_1.default.red(' ✘ Gemini CLI not found'));
178
+ console.error('');
179
+ console.error(chalk_1.default.white(' Install:'));
180
+ console.error(chalk_1.default.cyan(' npm install -g @google/gemini-cli'));
181
+ console.error('');
182
+ console.error(chalk_1.default.white(' Docs: ') + chalk_1.default.cyan('https://github.com/google-gemini/gemini-cli'));
183
+ console.error('');
184
+ }
185
+ else {
186
+ console.error(chalk_1.default.red(`\n ✘ Failed to launch Gemini CLI: ${err.message}\n`));
187
+ }
188
+ process.exit(1);
189
+ });
190
+ // Forward signals for clean shutdown
191
+ process.on('SIGINT', () => { child.kill('SIGINT'); });
192
+ process.on('SIGTERM', () => { child.kill('SIGTERM'); });
193
+ }
@@ -15,8 +15,6 @@ const settings_1 = require("../deploy/settings");
15
15
  // DEPRECATED: Hooks removed in hookless architecture migration
16
16
  // import { deployHooks } from '../deploy/hooks';
17
17
  const skills_1 = require("../deploy/skills");
18
- const agents_1 = require("../deploy/agents");
19
- const plugins_1 = require("../deploy/plugins");
20
18
  const instructions_1 = require("../deploy/instructions");
21
19
  const templates_1 = require("../utils/templates");
22
20
  // ═══════════════════════════════════════════════════════════════════════════
@@ -250,10 +248,7 @@ async function deployForClaude(apiKey, userId, options) {
250
248
  const result = {
251
249
  mcp: false,
252
250
  settings: false,
253
- hooks: { count: 0, files: [] },
254
251
  skills: { count: 0, skills: [] },
255
- agents: { count: 0, agents: [] },
256
- plugins: { count: 0, plugins: [] },
257
252
  instructions: false
258
253
  };
259
254
  // MCP configuration
@@ -277,7 +272,7 @@ async function deployForClaude(apiKey, userId, options) {
277
272
  spinner.fail('Claude Code settings failed');
278
273
  result.settings = true; // Non-critical — don't block init
279
274
  }
280
- // Skills
275
+ // Skills (only continue, ekkOS_Vault, permissions — rest handled by proxy injection)
281
276
  if (!options.skipSkills) {
282
277
  spinner = (0, ora_1.default)('Deploying skills...').start();
283
278
  try {
@@ -288,24 +283,6 @@ async function deployForClaude(apiKey, userId, options) {
288
283
  spinner.fail('Skills deployment failed');
289
284
  }
290
285
  }
291
- // Agents
292
- spinner = (0, ora_1.default)('Deploying agents...').start();
293
- try {
294
- result.agents = (0, agents_1.deployAgents)();
295
- spinner.succeed(`Agents (${result.agents.count} files)`);
296
- }
297
- catch (error) {
298
- spinner.fail('Agents deployment failed');
299
- }
300
- // Plugins
301
- spinner = (0, ora_1.default)('Deploying plugins...').start();
302
- try {
303
- result.plugins = (0, plugins_1.deployPlugins)();
304
- spinner.succeed(`Plugins (${result.plugins.count} folders)`);
305
- }
306
- catch (error) {
307
- spinner.fail('Plugins deployment failed');
308
- }
309
286
  // CLAUDE.md
310
287
  spinner = (0, ora_1.default)('Deploying global instructions...').start();
311
288
  try {
@@ -437,7 +414,7 @@ async function init(options) {
437
414
  for (const ide of selectedIDEs) {
438
415
  if (ide === 'claude') {
439
416
  const result = await deployForClaude(auth.apiKey, auth.userId, options);
440
- if (result.mcp || result.hooks.count > 0) {
417
+ if (result.mcp) {
441
418
  installedIDEs.push('claude');
442
419
  }
443
420
  }
@@ -5,7 +5,6 @@ interface RunOptions {
5
5
  doctor?: boolean;
6
6
  noInject?: boolean;
7
7
  research?: boolean;
8
- noDna?: boolean;
9
8
  noProxy?: boolean;
10
9
  dashboard?: boolean;
11
10
  addDirs?: string[];