@intutic/cli 0.1.1 → 1.0.4
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.
- package/dist/cli.js +376 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/benchmark.d.ts +31 -0
- package/dist/commands/benchmark.d.ts.map +1 -0
- package/dist/commands/benchmark.js +211 -0
- package/dist/commands/benchmark.js.map +1 -0
- package/dist/commands/connect.d.ts +8 -6
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +414 -80
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/enterprise-install.d.ts +36 -0
- package/dist/commands/enterprise-install.d.ts.map +1 -0
- package/dist/commands/enterprise-install.js +289 -0
- package/dist/commands/enterprise-install.js.map +1 -0
- package/dist/commands/eval.d.ts +13 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +67 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/exec.d.ts +34 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +114 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/exec.test.d.ts +2 -0
- package/dist/commands/exec.test.d.ts.map +1 -0
- package/dist/commands/exec.test.js +29 -0
- package/dist/commands/exec.test.js.map +1 -0
- package/dist/commands/export.d.ts +21 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +116 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +28 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install-daemon.d.ts +61 -0
- package/dist/commands/install-daemon.d.ts.map +1 -0
- package/dist/commands/install-daemon.js +691 -0
- package/dist/commands/install-daemon.js.map +1 -0
- package/dist/commands/install-daemon.test.d.ts +2 -0
- package/dist/commands/install-daemon.test.d.ts.map +1 -0
- package/dist/commands/install-daemon.test.js +93 -0
- package/dist/commands/install-daemon.test.js.map +1 -0
- package/dist/commands/login.js +2 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +1 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/mdm.d.ts +23 -0
- package/dist/commands/mdm.d.ts.map +1 -0
- package/dist/commands/mdm.js +134 -0
- package/dist/commands/mdm.js.map +1 -0
- package/dist/commands/skill.d.ts +27 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +289 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/sop-audit.d.ts +17 -0
- package/dist/commands/sop-audit.d.ts.map +1 -0
- package/dist/commands/sop-audit.js +136 -0
- package/dist/commands/sop-audit.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +53 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/syncContext.d.ts +18 -0
- package/dist/commands/syncContext.d.ts.map +1 -0
- package/dist/commands/syncContext.js +37 -0
- package/dist/commands/syncContext.js.map +1 -0
- package/dist/commands/traces.d.ts +13 -0
- package/dist/commands/traces.d.ts.map +1 -1
- package/dist/commands/traces.js +96 -2
- package/dist/commands/traces.js.map +1 -1
- package/dist/commands/whoami.js +1 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config/keychain.d.ts +28 -0
- package/dist/config/keychain.d.ts.map +1 -0
- package/dist/config/keychain.js +99 -0
- package/dist/config/keychain.js.map +1 -0
- package/dist/config/store.d.ts +3 -3
- package/dist/config/store.d.ts.map +1 -1
- package/dist/config/store.js +30 -6
- package/dist/config/store.js.map +1 -1
- package/dist/harness/aider.d.ts +4 -3
- package/dist/harness/aider.d.ts.map +1 -1
- package/dist/harness/aider.js +13 -27
- package/dist/harness/aider.js.map +1 -1
- package/dist/harness/claudeDesktop.d.ts +18 -0
- package/dist/harness/claudeDesktop.d.ts.map +1 -0
- package/dist/harness/claudeDesktop.js +69 -0
- package/dist/harness/claudeDesktop.js.map +1 -0
- package/dist/harness/cline.d.ts +13 -0
- package/dist/harness/cline.d.ts.map +1 -0
- package/dist/harness/cline.js +75 -0
- package/dist/harness/cline.js.map +1 -0
- package/dist/harness/codex.d.ts +4 -4
- package/dist/harness/codex.d.ts.map +1 -1
- package/dist/harness/codex.js +33 -21
- package/dist/harness/codex.js.map +1 -1
- package/dist/harness/continue.d.ts +14 -0
- package/dist/harness/continue.d.ts.map +1 -0
- package/dist/harness/continue.js +97 -0
- package/dist/harness/continue.js.map +1 -0
- package/dist/harness/cursor.d.ts +13 -1
- package/dist/harness/cursor.d.ts.map +1 -1
- package/dist/harness/cursor.js +59 -3
- package/dist/harness/cursor.js.map +1 -1
- package/dist/harness/detector.d.ts +1 -1
- package/dist/harness/detector.d.ts.map +1 -1
- package/dist/harness/detector.js +13 -1
- package/dist/harness/detector.js.map +1 -1
- package/dist/harness/goose.d.ts +13 -0
- package/dist/harness/goose.d.ts.map +1 -0
- package/dist/harness/goose.js +45 -0
- package/dist/harness/goose.js.map +1 -0
- package/dist/harness/n8n.d.ts +8 -4
- package/dist/harness/n8n.d.ts.map +1 -1
- package/dist/harness/n8n.js +108 -13
- package/dist/harness/n8n.js.map +1 -1
- package/dist/harness/openWebUI.d.ts +13 -0
- package/dist/harness/openWebUI.d.ts.map +1 -0
- package/dist/harness/openWebUI.js +25 -0
- package/dist/harness/openWebUI.js.map +1 -0
- package/dist/harness/openhands.d.ts +3 -3
- package/dist/harness/openhands.d.ts.map +1 -1
- package/dist/harness/openhands.js +13 -9
- package/dist/harness/openhands.js.map +1 -1
- package/dist/harness/rooCode.d.ts +14 -0
- package/dist/harness/rooCode.d.ts.map +1 -0
- package/dist/harness/rooCode.js +77 -0
- package/dist/harness/rooCode.js.map +1 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js +6 -0
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/vscodeSettingsWriter.d.ts +40 -0
- package/dist/harness/vscodeSettingsWriter.d.ts.map +1 -0
- package/dist/harness/vscodeSettingsWriter.js +116 -0
- package/dist/harness/vscodeSettingsWriter.js.map +1 -0
- package/dist/harness/windsurf.d.ts +13 -1
- package/dist/harness/windsurf.d.ts.map +1 -1
- package/dist/harness/windsurf.js +58 -3
- package/dist/harness/windsurf.js.map +1 -1
- package/dist/lib/api.d.ts +2 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +71 -1
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/envInjector.d.ts +24 -0
- package/dist/lib/envInjector.d.ts.map +1 -0
- package/dist/lib/envInjector.js +146 -0
- package/dist/lib/envInjector.js.map +1 -0
- package/dist/lib/envInjector.test.d.ts +2 -0
- package/dist/lib/envInjector.test.d.ts.map +1 -0
- package/dist/lib/envInjector.test.js +32 -0
- package/dist/lib/envInjector.test.js.map +1 -0
- package/dist/lib/gitHooks.d.ts +19 -0
- package/dist/lib/gitHooks.d.ts.map +1 -0
- package/dist/lib/gitHooks.js +58 -0
- package/dist/lib/gitHooks.js.map +1 -0
- package/dist/lib/onboarding.d.ts +17 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +164 -0
- package/dist/lib/onboarding.js.map +1 -0
- package/dist/lib/process.d.ts +53 -0
- package/dist/lib/process.d.ts.map +1 -0
- package/dist/lib/process.js +181 -0
- package/dist/lib/process.js.map +1 -0
- package/dist/lib/process.test.d.ts +2 -0
- package/dist/lib/process.test.d.ts.map +1 -0
- package/dist/lib/process.test.js +44 -0
- package/dist/lib/process.test.js.map +1 -0
- package/package.json +22 -33
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Onboarding setup guide generator.
|
|
3
|
+
*
|
|
4
|
+
* Prints tailored, step-by-step setup guides for each detected harness.
|
|
5
|
+
*
|
|
6
|
+
* LLD #8 — Sync Daemon / CLI
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import pc from 'picocolors';
|
|
10
|
+
import { log } from './logger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Print tailored setup instructions for a list of harnesses.
|
|
13
|
+
*
|
|
14
|
+
* @param harnesses - List of harness types (e.g. ['cursor', 'aider'])
|
|
15
|
+
* @param apiKey - Optional API key to display in the instructions
|
|
16
|
+
* @param devMode - If true, use localhost:4000; otherwise use remote proxy
|
|
17
|
+
*/
|
|
18
|
+
export function printOnboardingGuide(harnesses, apiKey, devMode = false) {
|
|
19
|
+
const displayKey = apiKey || 'your-intutic-api-key';
|
|
20
|
+
const proxyUrl = devMode ? 'http://localhost:4000/v1' : 'https://proxy.intutic.ai/v1';
|
|
21
|
+
const proxyHost = devMode ? 'http://localhost:4000' : 'https://proxy.intutic.ai';
|
|
22
|
+
console.log('');
|
|
23
|
+
log.header('Intutic — Setup & Integration Instructions');
|
|
24
|
+
console.log(`To route your agent traffic through the Intutic proxy, follow the setup below.`);
|
|
25
|
+
console.log(`Your local gateway endpoint is: ${pc.cyan(proxyUrl)}`);
|
|
26
|
+
if (apiKey) {
|
|
27
|
+
console.log(`Your Intutic API Key is: ${pc.green(apiKey)}`);
|
|
28
|
+
}
|
|
29
|
+
if (harnesses.length === 0) {
|
|
30
|
+
console.log('');
|
|
31
|
+
log.info('No harnesses were automatically detected in this workspace.');
|
|
32
|
+
console.log(`Please refer to the full integration guide at: ${pc.bold('user.md')}`);
|
|
33
|
+
console.log('Or use the general subprocess wrapper to launch any CLI agent:');
|
|
34
|
+
console.log(` ${pc.bold(`intutic exec -- <your-agent-command>`)}`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
for (const h of harnesses) {
|
|
38
|
+
console.log('\n' + pc.bold(pc.magenta(`👉 Setup instructions for ${h.toUpperCase()}:`)));
|
|
39
|
+
switch (h) {
|
|
40
|
+
case 'cursor':
|
|
41
|
+
console.log(` 1. Open Cursor Settings (Cmd+, or Ctrl+,).`);
|
|
42
|
+
console.log(` 2. Navigate to the ${pc.bold('Models')} tab.`);
|
|
43
|
+
console.log(` 3. Under ${pc.bold('OpenAI API Key')}, enter your Intutic API Key:`);
|
|
44
|
+
console.log(` ${pc.green(displayKey)}`);
|
|
45
|
+
console.log(` 4. Enable the ${pc.bold('"Override OpenAI Base URL"')} toggle.`);
|
|
46
|
+
console.log(` 5. Set the override URL to:`);
|
|
47
|
+
console.log(` ${pc.cyan(proxyUrl)}`);
|
|
48
|
+
console.log(` 6. Click "Verify" to save and test the connection.`);
|
|
49
|
+
break;
|
|
50
|
+
case 'claude-code':
|
|
51
|
+
console.log(` We recommend running Claude Code using the Intutic wrapper:`);
|
|
52
|
+
console.log(` ${pc.bold('intutic exec -- claude')}`);
|
|
53
|
+
console.log(` `);
|
|
54
|
+
console.log(` Alternatively, manually export the environment variables before starting:`);
|
|
55
|
+
console.log(` export ANTHROPIC_BASE_URL="${pc.cyan(proxyHost)}"`);
|
|
56
|
+
console.log(` export ANTHROPIC_API_KEY="${pc.green(displayKey)}"`);
|
|
57
|
+
break;
|
|
58
|
+
case 'aider':
|
|
59
|
+
console.log(` We recommend running Aider using the Intutic wrapper:`);
|
|
60
|
+
console.log(` ${pc.bold(`intutic exec -- aider --model openai/gpt-4o`)}`);
|
|
61
|
+
console.log(` `);
|
|
62
|
+
console.log(` Alternatively, add this to your ${pc.bold('.aider.conf.yml')} in the workspace:`);
|
|
63
|
+
console.log(` openai-api-base: ${proxyUrl}`);
|
|
64
|
+
console.log(` openai-api-key: ${displayKey}`);
|
|
65
|
+
console.log(` model: openai/gpt-4o`);
|
|
66
|
+
console.log(` `);
|
|
67
|
+
console.log(` Or export the environment variables manually:`);
|
|
68
|
+
console.log(` export OPENAI_API_BASE="${proxyUrl}"`);
|
|
69
|
+
console.log(` export OPENAI_API_KEY="${displayKey}"`);
|
|
70
|
+
break;
|
|
71
|
+
case 'continue':
|
|
72
|
+
console.log(` Add this model block to your ${pc.bold('~/.continue/config.yaml')}:`);
|
|
73
|
+
console.log(` models:`);
|
|
74
|
+
console.log(` - name: Intutic Gateway`);
|
|
75
|
+
console.log(` provider: openai`);
|
|
76
|
+
console.log(` model: gpt-4o`);
|
|
77
|
+
console.log(` apiBase: ${proxyUrl}`);
|
|
78
|
+
console.log(` apiKey: ${displayKey}`);
|
|
79
|
+
break;
|
|
80
|
+
case 'cline':
|
|
81
|
+
console.log(` 1. Open the ${pc.bold('Cline')} panel in VS Code.`);
|
|
82
|
+
console.log(` 2. Click the settings gear icon (⚙️).`);
|
|
83
|
+
console.log(` 3. Set ${pc.bold('API Provider')} to: OpenAI Compatible`);
|
|
84
|
+
console.log(` 4. Set ${pc.bold('Base URL')} to: ${pc.cyan(proxyUrl)}`);
|
|
85
|
+
console.log(` 5. Set ${pc.bold('API Key')} to your Intutic API Key:`);
|
|
86
|
+
console.log(` ${pc.green(displayKey)}`);
|
|
87
|
+
console.log(` 6. Enter the target Model ID (e.g. gpt-4o) and save.`);
|
|
88
|
+
break;
|
|
89
|
+
case 'roo-code':
|
|
90
|
+
console.log(` 1. Open the ${pc.bold('Roo Code')} panel in VS Code.`);
|
|
91
|
+
console.log(` 2. Click the settings gear icon (⚙️).`);
|
|
92
|
+
console.log(` 3. Under API Settings, set ${pc.bold('Provider')} to: OpenAI Compatible`);
|
|
93
|
+
console.log(` 4. Set ${pc.bold('Base URL')} to: ${pc.cyan(proxyUrl)}`);
|
|
94
|
+
console.log(` 5. Set ${pc.bold('API Key')} to:`);
|
|
95
|
+
console.log(` ${pc.green(displayKey)}`);
|
|
96
|
+
console.log(` 6. Enter the target Model ID (e.g. gpt-4o) and save.`);
|
|
97
|
+
break;
|
|
98
|
+
case 'goose':
|
|
99
|
+
console.log(` We recommend running Goose using the Intutic wrapper:`);
|
|
100
|
+
console.log(` ${pc.bold('intutic exec -- goose run')}`);
|
|
101
|
+
console.log(` `);
|
|
102
|
+
console.log(` Alternatively, manually export:`);
|
|
103
|
+
console.log(` export OPENAI_HOST="${pc.cyan(proxyHost)}"`);
|
|
104
|
+
console.log(` export OPENAI_API_KEY="${displayKey}"`);
|
|
105
|
+
break;
|
|
106
|
+
case 'openclaw':
|
|
107
|
+
console.log(` Add the custom provider config to ${pc.bold('~/.openclaw/openclaw.json')}:`);
|
|
108
|
+
console.log(` {`);
|
|
109
|
+
console.log(` "models": {`);
|
|
110
|
+
console.log(` "providers": {`);
|
|
111
|
+
console.log(` "intutic": {`);
|
|
112
|
+
console.log(` "baseUrl": "${proxyUrl}",`);
|
|
113
|
+
console.log(` "apiKey": "${displayKey}",`);
|
|
114
|
+
console.log(` "api": "openai-completions",`);
|
|
115
|
+
console.log(` "models": [{ "id": "gpt-4o", "name": "GPT-4o via Intutic" }]`);
|
|
116
|
+
console.log(` }`);
|
|
117
|
+
console.log(` }`);
|
|
118
|
+
console.log(` }`);
|
|
119
|
+
console.log(` }`);
|
|
120
|
+
break;
|
|
121
|
+
case 'codex':
|
|
122
|
+
console.log(` Add the custom provider config to ${pc.bold('~/.codex/config.toml')}:`);
|
|
123
|
+
console.log(` model = "gpt-4o"`);
|
|
124
|
+
console.log(` model_provider = "intutic"`);
|
|
125
|
+
console.log(` [model_providers.intutic]`);
|
|
126
|
+
console.log(` name = "Intutic Gateway"`);
|
|
127
|
+
console.log(` base_url = "${proxyUrl}"`);
|
|
128
|
+
console.log(` env_key = "INTUTIC_API_KEY"`);
|
|
129
|
+
console.log(` wire_api = "responses"`);
|
|
130
|
+
console.log(` `);
|
|
131
|
+
console.log(` And set the API key in ${pc.bold('~/.codex/.env')}:`);
|
|
132
|
+
console.log(` INTUTIC_API_KEY=${displayKey}`);
|
|
133
|
+
break;
|
|
134
|
+
case 'claude-desktop':
|
|
135
|
+
console.log(` To override Claude Desktop inference routing:`);
|
|
136
|
+
console.log(` Configure custom third-party inference settings in your config:`);
|
|
137
|
+
console.log(` ~/Library/Application Support/Claude/claude_desktop_config.json`);
|
|
138
|
+
break;
|
|
139
|
+
case 'open-webui':
|
|
140
|
+
console.log(` Configure the OpenAI connection env vars in your Docker command:`);
|
|
141
|
+
console.log(` -e OPENAI_API_BASE_URL="${proxyUrl}"`);
|
|
142
|
+
console.log(` -e OPENAI_API_KEY="${displayKey}"`);
|
|
143
|
+
break;
|
|
144
|
+
case 'n8n':
|
|
145
|
+
console.log(` In your OpenAI Chat Model node inside n8n:`);
|
|
146
|
+
console.log(` 1. Expand "Parameters" and set ${pc.bold('Base URL')} to:`);
|
|
147
|
+
console.log(` ${pc.cyan(proxyUrl)}`);
|
|
148
|
+
console.log(` 2. Select/Create a custom credential set and use your Intutic API Key.`);
|
|
149
|
+
break;
|
|
150
|
+
case 'windsurf':
|
|
151
|
+
console.log(` Set the custom API base URL and key in the Windsurf settings tab.`);
|
|
152
|
+
break;
|
|
153
|
+
default:
|
|
154
|
+
console.log(` Launch your agent using the Intutic exec wrapper:`);
|
|
155
|
+
console.log(` ${pc.bold(`intutic exec -- <your-agent-command>`)}`);
|
|
156
|
+
console.log(` This automatically routes LLM calls to ${pc.cyan(proxyUrl)}.`);
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
console.log('');
|
|
161
|
+
log.info(`Start the sync daemon using: ${pc.bold('intutic connect')}`);
|
|
162
|
+
console.log('');
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=onboarding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Active process detection — detect running AI agent processes.
|
|
3
|
+
*
|
|
4
|
+
* Uses native platform commands (`ps` on macOS/Linux, `tasklist` on Windows)
|
|
5
|
+
* to find running agent processes. No external dependencies.
|
|
6
|
+
*
|
|
7
|
+
* LLD #8 — Sync Daemon / CLI
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
/** A detected running agent process. */
|
|
11
|
+
export interface ActiveProcess {
|
|
12
|
+
/** Display name of the agent (e.g. "Cursor", "Claude Code") */
|
|
13
|
+
name: string;
|
|
14
|
+
/** Process ID */
|
|
15
|
+
pid: number;
|
|
16
|
+
/** Raw command/arguments from the process list */
|
|
17
|
+
command: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get the raw process list from the operating system.
|
|
21
|
+
*
|
|
22
|
+
* @returns Array of { pid, command } tuples
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Parse the output of system process commands.
|
|
26
|
+
*
|
|
27
|
+
* @param output - Raw stdout from ps or tasklist
|
|
28
|
+
* @param platform - OS platform ('win32' or others)
|
|
29
|
+
* @returns parsed list of { pid, command }
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseProcessOutput(output: string, platform: string): Array<{
|
|
32
|
+
pid: number;
|
|
33
|
+
command: string;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* Detect currently running AI agent processes.
|
|
37
|
+
*
|
|
38
|
+
* Scans the system process list and matches against known agent signatures.
|
|
39
|
+
* De-duplicates by agent name (reports only the first matching PID per agent).
|
|
40
|
+
*
|
|
41
|
+
* @returns Array of detected active processes
|
|
42
|
+
*/
|
|
43
|
+
export declare function getActiveAgentProcesses(): ActiveProcess[];
|
|
44
|
+
/**
|
|
45
|
+
* Check if the Intutic sync daemon is currently running.
|
|
46
|
+
*
|
|
47
|
+
* Scans the process list for a running 'intutic connect' process,
|
|
48
|
+
* excluding the current process PID.
|
|
49
|
+
*
|
|
50
|
+
* @returns boolean
|
|
51
|
+
*/
|
|
52
|
+
export declare function isSyncDaemonRunning(): boolean;
|
|
53
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/lib/process.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAA;IACZ,iBAAiB;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAA;CAChB;AAsED;;;;GAIG;AACH;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B5G;AAiBD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,IAAI,aAAa,EAAE,CAuBzD;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAY7C"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Active process detection — detect running AI agent processes.
|
|
3
|
+
*
|
|
4
|
+
* Uses native platform commands (`ps` on macOS/Linux, `tasklist` on Windows)
|
|
5
|
+
* to find running agent processes. No external dependencies.
|
|
6
|
+
*
|
|
7
|
+
* LLD #8 — Sync Daemon / CLI
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { execSync } from 'node:child_process';
|
|
11
|
+
/**
|
|
12
|
+
* Process signature definitions.
|
|
13
|
+
* Each entry maps a human-readable name to regex patterns that match
|
|
14
|
+
* against the process command line.
|
|
15
|
+
*/
|
|
16
|
+
const PROCESS_SIGNATURES = [
|
|
17
|
+
{
|
|
18
|
+
name: 'Cursor',
|
|
19
|
+
patterns: [/\/Cursor\.app\//i, /\bCursor\b.*--type=.*extensionHost/],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'VS Code',
|
|
23
|
+
patterns: [/\/Visual Studio Code\.app\//i, /\bcode\b.*--extensions-dir/i],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'Claude Code',
|
|
27
|
+
patterns: [/\bclaude\b(?!.*Claude\.app)/],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'Claude Desktop',
|
|
31
|
+
patterns: [/\/Claude\.app\//i, /\bClaude\s/],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Aider',
|
|
35
|
+
patterns: [/\baider\b/],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Codex',
|
|
39
|
+
patterns: [/\bcodex\b/],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'Goose',
|
|
43
|
+
patterns: [/\bgoose\b.*\b(run|session)\b/],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'OpenClaw',
|
|
47
|
+
patterns: [/\bopenclaw\b/i],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'OpenWebUI',
|
|
51
|
+
patterns: [/\bopen-webui\b/i, /\bopenwebui\b/i],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'JetBrains IDE',
|
|
55
|
+
patterns: [/\b(idea|pycharm|webstorm|goland|rider|phpstorm|clion|rubymine)\b/i],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'OpenHands',
|
|
59
|
+
patterns: [/\bopenhands\b/i],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'n8n',
|
|
63
|
+
patterns: [/\bn8n\b/],
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'Windsurf',
|
|
67
|
+
patterns: [/\bwindsurf\b/i, /\/Windsurf\.app\//i],
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'Antigravity',
|
|
71
|
+
patterns: [/\bantigravity\b/i],
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
/**
|
|
75
|
+
* Get the raw process list from the operating system.
|
|
76
|
+
*
|
|
77
|
+
* @returns Array of { pid, command } tuples
|
|
78
|
+
*/
|
|
79
|
+
/**
|
|
80
|
+
* Parse the output of system process commands.
|
|
81
|
+
*
|
|
82
|
+
* @param output - Raw stdout from ps or tasklist
|
|
83
|
+
* @param platform - OS platform ('win32' or others)
|
|
84
|
+
* @returns parsed list of { pid, command }
|
|
85
|
+
*/
|
|
86
|
+
export function parseProcessOutput(output, platform) {
|
|
87
|
+
const isWindows = platform === 'win32';
|
|
88
|
+
const lines = output.split('\n').filter((line) => line.trim().length > 0);
|
|
89
|
+
const results = [];
|
|
90
|
+
if (isWindows) {
|
|
91
|
+
// CSV format: "Image Name","PID","Session Name","Session#","Mem Usage"
|
|
92
|
+
for (const line of lines) {
|
|
93
|
+
const match = line.match(/"([^"]+)","(\d+)"/);
|
|
94
|
+
if (match) {
|
|
95
|
+
results.push({ pid: parseInt(match[2], 10), command: match[1] });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Format: <PID> <ARGS>
|
|
101
|
+
for (const line of lines) {
|
|
102
|
+
const trimmed = line.trim();
|
|
103
|
+
const spaceIdx = trimmed.indexOf(' ');
|
|
104
|
+
if (spaceIdx === -1)
|
|
105
|
+
continue;
|
|
106
|
+
const pidStr = trimmed.slice(0, spaceIdx).trim();
|
|
107
|
+
const command = trimmed.slice(spaceIdx + 1).trim();
|
|
108
|
+
const pid = parseInt(pidStr, 10);
|
|
109
|
+
if (!isNaN(pid) && command) {
|
|
110
|
+
results.push({ pid, command });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return results;
|
|
115
|
+
}
|
|
116
|
+
function getRawProcessList() {
|
|
117
|
+
const isWindows = process.platform === 'win32';
|
|
118
|
+
try {
|
|
119
|
+
const output = isWindows
|
|
120
|
+
? execSync('tasklist /FO CSV /NH', { encoding: 'utf-8', timeout: 5000 })
|
|
121
|
+
: execSync('ps -ax -o pid,args', { encoding: 'utf-8', timeout: 5000 });
|
|
122
|
+
return parseProcessOutput(output, process.platform);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Command failed (e.g. timeout, or no ps/tasklist available)
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Detect currently running AI agent processes.
|
|
131
|
+
*
|
|
132
|
+
* Scans the system process list and matches against known agent signatures.
|
|
133
|
+
* De-duplicates by agent name (reports only the first matching PID per agent).
|
|
134
|
+
*
|
|
135
|
+
* @returns Array of detected active processes
|
|
136
|
+
*/
|
|
137
|
+
export function getActiveAgentProcesses() {
|
|
138
|
+
const rawProcesses = getRawProcessList();
|
|
139
|
+
const seen = new Set();
|
|
140
|
+
const results = [];
|
|
141
|
+
for (const proc of rawProcesses) {
|
|
142
|
+
for (const sig of PROCESS_SIGNATURES) {
|
|
143
|
+
if (seen.has(sig.name))
|
|
144
|
+
continue;
|
|
145
|
+
for (const pattern of sig.patterns) {
|
|
146
|
+
if (pattern.test(proc.command)) {
|
|
147
|
+
seen.add(sig.name);
|
|
148
|
+
results.push({
|
|
149
|
+
name: sig.name,
|
|
150
|
+
pid: proc.pid,
|
|
151
|
+
command: proc.command.slice(0, 120), // Truncate for display
|
|
152
|
+
});
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return results;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check if the Intutic sync daemon is currently running.
|
|
162
|
+
*
|
|
163
|
+
* Scans the process list for a running 'intutic connect' process,
|
|
164
|
+
* excluding the current process PID.
|
|
165
|
+
*
|
|
166
|
+
* @returns boolean
|
|
167
|
+
*/
|
|
168
|
+
export function isSyncDaemonRunning() {
|
|
169
|
+
const rawProcesses = getRawProcessList();
|
|
170
|
+
const currentPid = process.pid;
|
|
171
|
+
const daemonRegex = /\b(intutic|cli\.js|cli\.ts)\b.*\bconnect\b/i;
|
|
172
|
+
for (const proc of rawProcesses) {
|
|
173
|
+
if (proc.pid === currentPid)
|
|
174
|
+
continue;
|
|
175
|
+
if (daemonRegex.test(proc.command)) {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/lib/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.test.d.ts","sourceRoot":"","sources":["../../src/lib/process.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { parseProcessOutput } from './process.js';
|
|
3
|
+
describe('Process Parser', () => {
|
|
4
|
+
it('correctly parses Unix/macOS ps output format', () => {
|
|
5
|
+
const psOutput = `
|
|
6
|
+
PID ARGS
|
|
7
|
+
1234 /Applications/Cursor.app/Contents/MacOS/Cursor
|
|
8
|
+
5678 aider --model openai/gpt-4o
|
|
9
|
+
99999 node /usr/local/bin/claude
|
|
10
|
+
`;
|
|
11
|
+
const results = parseProcessOutput(psOutput, 'darwin');
|
|
12
|
+
expect(results).toHaveLength(3); // 3 parsed processes (header skipped since PID is NaN)
|
|
13
|
+
// Actually let's look at results:
|
|
14
|
+
const cursorProc = results.find(r => r.pid === 1234);
|
|
15
|
+
expect(cursorProc).toBeDefined();
|
|
16
|
+
expect(cursorProc?.command).toBe('/Applications/Cursor.app/Contents/MacOS/Cursor');
|
|
17
|
+
const aiderProc = results.find(r => r.pid === 5678);
|
|
18
|
+
expect(aiderProc).toBeDefined();
|
|
19
|
+
expect(aiderProc?.command).toBe('aider --model openai/gpt-4o');
|
|
20
|
+
const claudeProc = results.find(r => r.pid === 99999);
|
|
21
|
+
expect(claudeProc).toBeDefined();
|
|
22
|
+
expect(claudeProc?.command).toBe('node /usr/local/bin/claude');
|
|
23
|
+
});
|
|
24
|
+
it('correctly parses Windows tasklist CSV output format', () => {
|
|
25
|
+
const tasklistOutput = `
|
|
26
|
+
"System Idle Process","0","Services","0","8 K"
|
|
27
|
+
"System","4","Services","0","3,816 K"
|
|
28
|
+
"Cursor.exe","12345","Console","1","150,000 K"
|
|
29
|
+
"goose.exe","54321","Console","1","50,000 K"
|
|
30
|
+
`;
|
|
31
|
+
const results = parseProcessOutput(tasklistOutput, 'win32');
|
|
32
|
+
expect(results).toHaveLength(4);
|
|
33
|
+
const systemProc = results.find(r => r.pid === 4);
|
|
34
|
+
expect(systemProc).toBeDefined();
|
|
35
|
+
expect(systemProc?.command).toBe('System');
|
|
36
|
+
const cursorProc = results.find(r => r.pid === 12345);
|
|
37
|
+
expect(cursorProc).toBeDefined();
|
|
38
|
+
expect(cursorProc?.command).toBe('Cursor.exe');
|
|
39
|
+
const gooseProc = results.find(r => r.pid === 54321);
|
|
40
|
+
expect(gooseProc).toBeDefined();
|
|
41
|
+
expect(gooseProc?.command).toBe('goose.exe');
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=process.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.test.js","sourceRoot":"","sources":["../../src/lib/process.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,QAAQ,GAAG;;;;;KAKhB,CAAA;QACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAEtD,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA,CAAC,uDAAuD;QAEvF,kCAAkC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAA;QACpD,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAA;QAChC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;QAElF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAA;QACnD,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;QAC/B,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;QAE9D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,CAAA;QACrD,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAA;QAChC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,cAAc,GAAG;;;;;CAK1B,CAAA;QACG,MAAM,OAAO,GAAG,kBAAkB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;QAE3D,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAE/B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;QACjD,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAA;QAChC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE1C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,CAAA;QACrD,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAA;QAChC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAE9C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,CAAA;QACpD,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;QAC/B,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,48 +1,37 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intutic/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Intutic CLI — sync daemon, harness detection, and workspace management",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"dist/",
|
|
14
|
-
"README.md"
|
|
15
|
-
],
|
|
16
|
-
"repository": {
|
|
17
|
-
"type": "git",
|
|
18
|
-
"url": "https://github.com/intutic/intutic"
|
|
6
|
+
"bin": { "intutic": "./dist/cli.js" },
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"dev": "tsc -w",
|
|
10
|
+
"typecheck": "tsc --noEmit",
|
|
11
|
+
"test": "vitest run",
|
|
12
|
+
"prepublishOnly": "npm run build"
|
|
19
13
|
},
|
|
14
|
+
"publishConfig": { "access": "public" },
|
|
15
|
+
"files": ["dist/", "README.md"],
|
|
16
|
+
"repository": { "type": "git", "url": "https://github.com/intutic/intutic" },
|
|
20
17
|
"license": "Proprietary",
|
|
21
18
|
"homepage": "https://intutic.ai",
|
|
22
|
-
"keywords": [
|
|
23
|
-
|
|
24
|
-
"governance",
|
|
25
|
-
"agent",
|
|
26
|
-
"sop",
|
|
27
|
-
"cli"
|
|
28
|
-
],
|
|
29
|
-
"engines": {
|
|
30
|
-
"node": ">=18"
|
|
31
|
-
},
|
|
19
|
+
"keywords": ["ai", "governance", "agent", "sop", "cli"],
|
|
20
|
+
"engines": { "node": ">=18" },
|
|
32
21
|
"dependencies": {
|
|
22
|
+
"@intutic/shared-types": "workspace:*",
|
|
23
|
+
"@intutic/id": "workspace:*",
|
|
24
|
+
"@intutic/logger": "workspace:*",
|
|
25
|
+
"@intutic/sync-daemon": "workspace:*",
|
|
33
26
|
"commander": "^13",
|
|
34
27
|
"picocolors": "^1",
|
|
35
|
-
"
|
|
36
|
-
|
|
28
|
+
"chokidar": "^5.0.0"
|
|
29
|
+
|
|
37
30
|
},
|
|
38
31
|
"devDependencies": {
|
|
39
32
|
"typescript": "^5.5",
|
|
40
33
|
"tsx": "^4",
|
|
41
|
-
"@types/node": "^22"
|
|
42
|
-
|
|
43
|
-
"scripts": {
|
|
44
|
-
"build": "tsc",
|
|
45
|
-
"dev": "tsx src/cli.ts",
|
|
46
|
-
"typecheck": "tsc --noEmit"
|
|
34
|
+
"@types/node": "^22",
|
|
35
|
+
"vitest": "^3"
|
|
47
36
|
}
|
|
48
|
-
}
|
|
37
|
+
}
|