@intutic/cli 1.3.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.
- package/LICENSE +21 -0
- package/README.md +107 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +348 -0
- package/dist/cli.js.map +1 -0
- 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/budget.d.ts +7 -0
- package/dist/commands/budget.d.ts.map +1 -0
- package/dist/commands/budget.js +68 -0
- package/dist/commands/budget.js.map +1 -0
- package/dist/commands/budgetCompatibility.test.d.ts +2 -0
- package/dist/commands/budgetCompatibility.test.d.ts.map +1 -0
- package/dist/commands/budgetCompatibility.test.js +19 -0
- package/dist/commands/budgetCompatibility.test.js.map +1 -0
- package/dist/commands/connect.d.ts +20 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +1010 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/doctor.d.ts +23 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +429 -0
- package/dist/commands/doctor.js.map +1 -0
- 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 +13 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +110 -0
- package/dist/commands/init.js.map +1 -0
- 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 +696 -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.d.ts +14 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +121 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +8 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +13 -0
- package/dist/commands/logout.js.map +1 -0
- 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/policy.d.ts +19 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +232 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/prompt.d.ts +11 -0
- package/dist/commands/prompt.d.ts.map +1 -0
- package/dist/commands/prompt.js +71 -0
- package/dist/commands/prompt.js.map +1 -0
- package/dist/commands/skill.d.ts +31 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +349 -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/sops.d.ts +4 -0
- package/dist/commands/sops.d.ts.map +1 -0
- package/dist/commands/sops.js +88 -0
- package/dist/commands/sops.js.map +1 -0
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +107 -0
- package/dist/commands/status.js.map +1 -0
- 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 +32 -0
- package/dist/commands/traces.d.ts.map +1 -0
- package/dist/commands/traces.js +207 -0
- package/dist/commands/traces.js.map +1 -0
- package/dist/commands/whoami.d.ts +12 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +34 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config/keychain.d.ts +28 -0
- package/dist/config/keychain.d.ts.map +1 -0
- package/dist/config/keychain.js +98 -0
- package/dist/config/keychain.js.map +1 -0
- package/dist/config/paths.d.ts +30 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +53 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/store.d.ts +25 -0
- package/dist/config/store.d.ts.map +1 -0
- package/dist/config/store.js +93 -0
- package/dist/config/store.js.map +1 -0
- package/dist/harness/aider.d.ts +13 -0
- package/dist/harness/aider.d.ts.map +1 -0
- package/dist/harness/aider.js +48 -0
- package/dist/harness/aider.js.map +1 -0
- package/dist/harness/antigravity.d.ts +12 -0
- package/dist/harness/antigravity.d.ts.map +1 -0
- package/dist/harness/antigravity.js +69 -0
- package/dist/harness/antigravity.js.map +1 -0
- package/dist/harness/base.d.ts +20 -0
- package/dist/harness/base.d.ts.map +1 -0
- package/dist/harness/base.js +73 -0
- package/dist/harness/base.js.map +1 -0
- package/dist/harness/claudeCode.d.ts +2 -0
- package/dist/harness/claudeCode.d.ts.map +1 -0
- package/dist/harness/claudeCode.js +9 -0
- package/dist/harness/claudeCode.js.map +1 -0
- 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 +13 -0
- package/dist/harness/codex.d.ts.map +1 -0
- package/dist/harness/codex.js +86 -0
- package/dist/harness/codex.js.map +1 -0
- 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 +14 -0
- package/dist/harness/cursor.d.ts.map +1 -0
- package/dist/harness/cursor.js +65 -0
- package/dist/harness/cursor.js.map +1 -0
- package/dist/harness/detector.d.ts +29 -0
- package/dist/harness/detector.d.ts.map +1 -0
- package/dist/harness/detector.js +81 -0
- package/dist/harness/detector.js.map +1 -0
- package/dist/harness/githubCopilot.d.ts +12 -0
- package/dist/harness/githubCopilot.d.ts.map +1 -0
- package/dist/harness/githubCopilot.js +54 -0
- package/dist/harness/githubCopilot.js.map +1 -0
- 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/hermes.d.ts +12 -0
- package/dist/harness/hermes.d.ts.map +1 -0
- package/dist/harness/hermes.js +51 -0
- package/dist/harness/hermes.js.map +1 -0
- package/dist/harness/n8n.d.ts +17 -0
- package/dist/harness/n8n.d.ts.map +1 -0
- package/dist/harness/n8n.js +125 -0
- package/dist/harness/n8n.js.map +1 -0
- 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/openclaw.d.ts +12 -0
- package/dist/harness/openclaw.d.ts.map +1 -0
- package/dist/harness/openclaw.js +51 -0
- package/dist/harness/openclaw.js.map +1 -0
- package/dist/harness/openhands.d.ts +12 -0
- package/dist/harness/openhands.d.ts.map +1 -0
- package/dist/harness/openhands.js +67 -0
- package/dist/harness/openhands.js.map +1 -0
- package/dist/harness/pi.d.ts +12 -0
- package/dist/harness/pi.d.ts.map +1 -0
- package/dist/harness/pi.js +51 -0
- package/dist/harness/pi.js.map +1 -0
- 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 +30 -0
- package/dist/harness/types.d.ts.map +1 -0
- package/dist/harness/types.js +32 -0
- package/dist/harness/types.js.map +1 -0
- 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 +14 -0
- package/dist/harness/windsurf.d.ts.map +1 -0
- package/dist/harness/windsurf.js +64 -0
- package/dist/harness/windsurf.js.map +1 -0
- package/dist/lib/api.d.ts +48 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +128 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/envInjector.d.ts +24 -0
- package/dist/lib/envInjector.d.ts.map +1 -0
- package/dist/lib/envInjector.js +149 -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/hash.d.ts +11 -0
- package/dist/lib/hash.d.ts.map +1 -0
- package/dist/lib/hash.js +18 -0
- package/dist/lib/hash.js.map +1 -0
- package/dist/lib/logger.d.ts +18 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +33 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/onboarding.d.ts +10 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +178 -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 +55 -0
|
@@ -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":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAY7C;;;;GAIG;AACH,MAAM,kBAAkB,GAInB;IACH;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,oCAAoC,CAAC;KACrE;IACD;QACE,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,CAAC,8BAA8B,EAAE,6BAA6B,CAAC;KAC1E;IACD;QACE,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,CAAC,6BAA6B,CAAC;KAC1C;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC;KAC7C;IACD;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;IACD;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;IACD;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,CAAC,8BAA8B,CAAC;KAC3C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,CAAC,eAAe,CAAC;KAC5B;IACD;QACE,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;KAChD;IACD;QACE,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,CAAC,mEAAmE,CAAC;KAChF;IACD;QACE,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,CAAC,gBAAgB,CAAC;KAC7B;IACD;QACE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC;KAClD;IACD;QACE,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,CAAC,kBAAkB,CAAC;KAC/B;CACF,CAAA;AAED;;;;GAIG;AACH;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,QAAgB;IACjE,MAAM,SAAS,GAAG,QAAQ,KAAK,OAAO,CAAA;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACzE,MAAM,OAAO,GAA4C,EAAE,CAAA;IAE3D,IAAI,SAAS,EAAE,CAAC;QACd,uEAAuE;QACvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;YAC7C,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAClE,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;YAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACrC,IAAI,QAAQ,KAAK,CAAC,CAAC;gBAAE,SAAQ;YAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAA;YAChD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;YAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;IAE9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS;YACtB,CAAC,CAAC,QAAQ,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACxE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAExE,OAAO,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;QAC7D,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAA;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,OAAO,GAAoB,EAAE,CAAA;IAEnC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAQ;YAChC,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACnC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBAClB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,GAAG,EAAE,IAAI,CAAC,GAAG;wBACb,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,uBAAuB;qBAC7D,CAAC,CAAA;oBACF,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAA;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAA;IAC9B,MAAM,WAAW,GAAG,6CAA6C,CAAA;IAEjE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,KAAK,UAAU;YAAE,SAAQ;QACrC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -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
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@intutic/cli",
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"description": "Intutic CLI — sync daemon, harness detection, and workspace management",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"intutic": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"dev": "tsc -w",
|
|
12
|
+
"typecheck": "tsc --noEmit",
|
|
13
|
+
"test": "vitest run",
|
|
14
|
+
"prepublishOnly": "npm run build"
|
|
15
|
+
},
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist/",
|
|
21
|
+
"README.md"
|
|
22
|
+
],
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/intutic/intutic"
|
|
26
|
+
},
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"homepage": "https://intutic.ai",
|
|
29
|
+
"keywords": [
|
|
30
|
+
"ai",
|
|
31
|
+
"governance",
|
|
32
|
+
"agent",
|
|
33
|
+
"sop",
|
|
34
|
+
"cli"
|
|
35
|
+
],
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@intutic/shared-types": "workspace:*",
|
|
41
|
+
"@intutic/id": "workspace:*",
|
|
42
|
+
"@intutic/logger": "workspace:*",
|
|
43
|
+
"@intutic/sync-daemon": "workspace:*",
|
|
44
|
+
"chokidar": "^5.0.0",
|
|
45
|
+
"commander": "^13",
|
|
46
|
+
"ioredis": "^5.11.1",
|
|
47
|
+
"picocolors": "^1"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"typescript": "^5.5",
|
|
51
|
+
"tsx": "^4",
|
|
52
|
+
"@types/node": "^22",
|
|
53
|
+
"vitest": "^3"
|
|
54
|
+
}
|
|
55
|
+
}
|