@nex-ai/nex 0.1.7 → 0.1.9
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/README.md +5 -1
- package/dist/commands/register.js +1 -1
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/setup.d.ts +2 -1
- package/dist/commands/setup.js +67 -12
- package/dist/commands/setup.js.map +1 -1
- package/dist/lib/installers.d.ts +2 -2
- package/dist/lib/installers.js +55 -56
- package/dist/lib/installers.js.map +1 -1
- package/dist/lib/prompt.d.ts +1 -0
- package/dist/lib/prompt.js +17 -0
- package/dist/lib/prompt.js.map +1 -1
- package/dist/plugin/auto-capture.d.ts +11 -0
- package/dist/plugin/auto-capture.js +135 -0
- package/dist/plugin/auto-capture.js.map +1 -0
- package/dist/plugin/auto-recall.d.ts +11 -0
- package/dist/plugin/auto-recall.js +111 -0
- package/dist/plugin/auto-recall.js.map +1 -0
- package/dist/plugin/auto-register.d.ts +10 -0
- package/dist/plugin/auto-register.js +53 -0
- package/dist/plugin/auto-register.js.map +1 -0
- package/dist/plugin/auto-scan.d.ts +10 -0
- package/dist/plugin/auto-scan.js +49 -0
- package/dist/plugin/auto-scan.js.map +1 -0
- package/dist/plugin/auto-session-start.d.ts +14 -0
- package/dist/plugin/auto-session-start.js +146 -0
- package/dist/plugin/auto-session-start.js.map +1 -0
- package/dist/plugin/capture-filter.d.ts +21 -0
- package/dist/plugin/capture-filter.js +32 -0
- package/dist/plugin/capture-filter.js.map +1 -0
- package/dist/plugin/config.d.ts +54 -0
- package/dist/plugin/config.js +166 -0
- package/dist/plugin/config.js.map +1 -0
- package/dist/plugin/context-files.d.ts +23 -0
- package/dist/plugin/context-files.js +103 -0
- package/dist/plugin/context-files.js.map +1 -0
- package/dist/plugin/context-format.d.ts +18 -0
- package/dist/plugin/context-format.js +34 -0
- package/dist/plugin/context-format.js.map +1 -0
- package/dist/plugin/file-manifest.d.ts +21 -0
- package/dist/plugin/file-manifest.js +48 -0
- package/dist/plugin/file-manifest.js.map +1 -0
- package/dist/plugin/file-scanner.d.ts +19 -0
- package/dist/plugin/file-scanner.js +90 -0
- package/dist/plugin/file-scanner.js.map +1 -0
- package/dist/plugin/nex-client.d.ts +50 -0
- package/dist/plugin/nex-client.js +129 -0
- package/dist/plugin/nex-client.js.map +1 -0
- package/dist/plugin/rate-limiter.d.ts +26 -0
- package/dist/plugin/rate-limiter.js +65 -0
- package/dist/plugin/rate-limiter.js.map +1 -0
- package/dist/plugin/recall-filter.d.ts +23 -0
- package/dist/plugin/recall-filter.js +94 -0
- package/dist/plugin/recall-filter.js.map +1 -0
- package/dist/plugin/session-store.d.ts +23 -0
- package/dist/plugin/session-store.js +74 -0
- package/dist/plugin/session-store.js.map +1 -0
- package/package.json +2 -1
- package/plugin-commands/entities.md +18 -0
- package/plugin-commands/integrate.md +34 -0
- package/plugin-commands/recall.md +5 -0
- package/plugin-commands/register.md +28 -0
- package/plugin-commands/remember.md +5 -0
- package/plugin-commands/scan.md +8 -0
package/README.md
CHANGED
|
@@ -57,19 +57,23 @@ All MCP-based platforms use the same server entry:
|
|
|
57
57
|
## Setup Command
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
|
-
nex setup # Auto-detect platforms, install
|
|
60
|
+
nex setup # Auto-detect platforms, install plugin, scan files, create .nex.toml
|
|
61
61
|
nex setup --with-mcp # Also write MCP config to all detected platforms
|
|
62
62
|
nex setup --platform cursor # Install for a specific platform only
|
|
63
63
|
nex setup --no-plugin # Only create config files, skip hooks/commands
|
|
64
|
+
nex setup --no-scan # Skip file scanning during setup
|
|
64
65
|
nex setup status # Show all platforms, install status, and connections
|
|
65
66
|
```
|
|
66
67
|
|
|
67
68
|
**Default behavior** (no flags):
|
|
68
69
|
- Claude Code: installs hooks + slash commands (no MCP — avoids filling context windows)
|
|
69
70
|
- Other platforms: detected but MCP not written until `--with-mcp` is passed
|
|
71
|
+
- Scans current directory and ingests new/changed files into Nex
|
|
70
72
|
- Creates `.nex.toml` project config with commented defaults
|
|
71
73
|
- Syncs API key to `~/.nex-mcp.json` (shared config)
|
|
72
74
|
|
|
75
|
+
**Single install**: `npm install -g @nex-ai/nex` bundles everything — the Claude Code plugin hooks, slash commands, and MCP server are all included. No separate packages needed.
|
|
76
|
+
|
|
73
77
|
> **Tip:** AI agents don't automatically know about Nex. Explicitly tell your agent to "use Nex for context and memory" in your prompts or CLAUDE.md instructions.
|
|
74
78
|
|
|
75
79
|
## Project Config: `.nex.toml`
|
|
@@ -8,7 +8,7 @@ import { printOutput } from "../lib/output.js";
|
|
|
8
8
|
import { resolveFormat } from "../lib/config.js";
|
|
9
9
|
program
|
|
10
10
|
.command("register")
|
|
11
|
-
.description("Register a new Nex
|
|
11
|
+
.description("Register a new Nex workspace and get an API key")
|
|
12
12
|
.requiredOption("--email <email>", "Email address")
|
|
13
13
|
.option("--name <name>", "Your name")
|
|
14
14
|
.option("--company <company>", "Company name")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,cAAc,CAAC,iBAAiB,EAAE,eAAe,CAAC;KAClD,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC;KACpC,MAAM,CAAC,qBAAqB,EAAE,cAAc,CAAC;KAC7C,MAAM,CAAC,KAAK,EAAE,IAAwD,EAAE,EAAE;IACzE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAW,CAAC;IAE1D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC"}
|
package/dist/commands/setup.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `nex setup` command — detect platforms, install plugin/MCP, create .nex.toml.
|
|
3
3
|
*
|
|
4
|
-
* nex setup Interactive: detect → install plugin + config
|
|
4
|
+
* nex setup Interactive: detect → install plugin + scan files + config
|
|
5
5
|
* nex setup --platform <name> Direct install for specific platform
|
|
6
6
|
* nex setup --with-mcp Also install MCP server
|
|
7
7
|
* nex setup --no-plugin Skip hooks/commands, only config files
|
|
8
|
+
* nex setup --no-scan Skip file scanning during setup
|
|
8
9
|
* nex setup status Show install status + integration connections
|
|
9
10
|
*/
|
|
10
11
|
export {};
|
package/dist/commands/setup.js
CHANGED
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `nex setup` command — detect platforms, install plugin/MCP, create .nex.toml.
|
|
3
3
|
*
|
|
4
|
-
* nex setup Interactive: detect → install plugin + config
|
|
4
|
+
* nex setup Interactive: detect → install plugin + scan files + config
|
|
5
5
|
* nex setup --platform <name> Direct install for specific platform
|
|
6
6
|
* nex setup --with-mcp Also install MCP server
|
|
7
7
|
* nex setup --no-plugin Skip hooks/commands, only config files
|
|
8
|
+
* nex setup --no-scan Skip file scanning during setup
|
|
8
9
|
* nex setup status Show install status + integration connections
|
|
9
10
|
*/
|
|
10
11
|
import { existsSync } from "node:fs";
|
|
11
12
|
import { join } from "node:path";
|
|
12
13
|
import { program } from "../cli.js";
|
|
13
|
-
import { resolveApiKey, resolveFormat, resolveTimeout } from "../lib/config.js";
|
|
14
|
+
import { resolveApiKey, resolveFormat, resolveTimeout, persistRegistration } from "../lib/config.js";
|
|
14
15
|
import { NexClient } from "../lib/client.js";
|
|
15
16
|
import { printOutput, printError } from "../lib/output.js";
|
|
17
|
+
import { confirm, ask } from "../lib/prompt.js";
|
|
16
18
|
import { detectPlatforms, getPlatformById, VALID_PLATFORM_IDS } from "../lib/platform-detect.js";
|
|
17
19
|
import { installMcpServer, installClaudeCodePlugin, syncApiKeyToMcpConfig } from "../lib/installers.js";
|
|
18
20
|
import { writeDefaultProjectConfig } from "../lib/project-config.js";
|
|
21
|
+
import { scanFiles, loadScanConfig, isScanEnabled } from "../lib/file-scanner.js";
|
|
19
22
|
function getClient() {
|
|
20
23
|
const opts = program.opts();
|
|
21
24
|
const client = new NexClient(resolveApiKey(opts.apiKey), resolveTimeout(opts.timeout));
|
|
@@ -118,11 +121,36 @@ async function showStatus(format) {
|
|
|
118
121
|
// --- Main setup flow ---
|
|
119
122
|
async function runSetup(opts) {
|
|
120
123
|
const globalOpts = program.opts();
|
|
121
|
-
|
|
122
|
-
// 1.
|
|
124
|
+
let apiKey = resolveApiKey(globalOpts.apiKey);
|
|
125
|
+
// 1. Register if no API key
|
|
123
126
|
if (!apiKey) {
|
|
124
|
-
|
|
125
|
-
|
|
127
|
+
process.stderr.write("\nNo API key found. Let's set up your Nex account.\n\n");
|
|
128
|
+
const wantsRegister = await confirm("Register a new Nex workspace?");
|
|
129
|
+
if (!wantsRegister) {
|
|
130
|
+
process.stderr.write("\nSetup complete, but no API key configured.\n\n");
|
|
131
|
+
process.stderr.write("To use Nex, set your API key in one of these locations:\n");
|
|
132
|
+
process.stderr.write(' 1. Environment variable: export NEX_API_KEY="sk-..."\n');
|
|
133
|
+
process.stderr.write(' 2. Global config: ~/.nex-mcp.json → {"api_key": "sk-..."}\n');
|
|
134
|
+
process.stderr.write(' 3. Project config: .nex.toml → [auth] api_key = "sk-..."\n');
|
|
135
|
+
process.stderr.write("\nGet an API key: nex register --email you@company.com\n\n");
|
|
136
|
+
// Still install plugin hooks/commands (they'll gracefully degrade without a key)
|
|
137
|
+
const platforms = detectPlatforms().filter((p) => p.detected);
|
|
138
|
+
for (const platform of platforms) {
|
|
139
|
+
if (platform.id === "claude-code" && !opts.noPlugin) {
|
|
140
|
+
installClaudeCodePlugin();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
writeDefaultProjectConfig();
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const email = await ask("Email (required):", true);
|
|
147
|
+
const name = await ask("Name (optional):");
|
|
148
|
+
process.stderr.write("\nRegistering...\n");
|
|
149
|
+
const client = new NexClient(undefined, resolveTimeout(globalOpts.timeout));
|
|
150
|
+
const data = await client.register(email, name || undefined);
|
|
151
|
+
persistRegistration(data);
|
|
152
|
+
apiKey = data.api_key;
|
|
153
|
+
process.stderr.write(`\n ✓ Workspace created! API key: ${maskKey(apiKey)}\n`);
|
|
126
154
|
}
|
|
127
155
|
// 2. Sync API key to shared config
|
|
128
156
|
syncApiKeyToMcpConfig(apiKey);
|
|
@@ -157,12 +185,12 @@ async function runSetup(opts) {
|
|
|
157
185
|
else {
|
|
158
186
|
results.push("Claude Code: hooks already configured");
|
|
159
187
|
}
|
|
160
|
-
if (result.
|
|
161
|
-
results.push(`Claude Code: commands
|
|
188
|
+
if (result.commandsCopied.length > 0) {
|
|
189
|
+
results.push(`Claude Code: commands installed (${result.commandsCopied.join(", ")})`);
|
|
162
190
|
}
|
|
163
191
|
}
|
|
164
192
|
else {
|
|
165
|
-
results.push("Claude Code: plugin
|
|
193
|
+
results.push("Claude Code: bundled plugin not found — reinstall @nex-ai/nex");
|
|
166
194
|
}
|
|
167
195
|
}
|
|
168
196
|
// MCP server — only with --with-mcp
|
|
@@ -191,7 +219,32 @@ async function runSetup(opts) {
|
|
|
191
219
|
else {
|
|
192
220
|
results.push(".nex.toml already exists");
|
|
193
221
|
}
|
|
194
|
-
// 6.
|
|
222
|
+
// 6. Scan and ingest project files (requires API key)
|
|
223
|
+
if (!opts.noScan && apiKey && isScanEnabled()) {
|
|
224
|
+
if (opts.format !== "json") {
|
|
225
|
+
process.stderr.write("\nScanning project files...\n");
|
|
226
|
+
}
|
|
227
|
+
const scanOpts = loadScanConfig();
|
|
228
|
+
const client = new NexClient(apiKey, resolveTimeout(globalOpts.timeout));
|
|
229
|
+
try {
|
|
230
|
+
const scanResult = await scanFiles(process.cwd(), scanOpts, async (content, context) => {
|
|
231
|
+
return client.post("/v1/context/text", { content, context });
|
|
232
|
+
});
|
|
233
|
+
if (scanResult.scanned > 0) {
|
|
234
|
+
results.push(`File scan: ${scanResult.scanned} files ingested, ${scanResult.skipped} skipped, ${scanResult.errors} errors`);
|
|
235
|
+
}
|
|
236
|
+
else if (scanResult.skipped > 0) {
|
|
237
|
+
results.push(`File scan: all ${scanResult.skipped} files already up to date`);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
results.push("File scan: no eligible files found in current directory");
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (err) {
|
|
244
|
+
results.push(`File scan: failed — ${err instanceof Error ? err.message : String(err)}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// 7. Output results
|
|
195
248
|
if (opts.format === "json") {
|
|
196
249
|
printOutput({
|
|
197
250
|
platforms: targetPlatforms.map((p) => ({
|
|
@@ -209,7 +262,7 @@ async function runSetup(opts) {
|
|
|
209
262
|
}
|
|
210
263
|
process.stderr.write("\n");
|
|
211
264
|
}
|
|
212
|
-
//
|
|
265
|
+
// 8. Show status
|
|
213
266
|
if (opts.format !== "json") {
|
|
214
267
|
await showStatus(opts.format);
|
|
215
268
|
}
|
|
@@ -233,13 +286,15 @@ const setup = program
|
|
|
233
286
|
.option("--platform <name>", `Target platform: ${VALID_PLATFORM_IDS.join(", ")}`)
|
|
234
287
|
.option("--with-mcp", "Also install MCP server for detected platforms", false)
|
|
235
288
|
.option("--no-plugin", "Skip plugin (hooks/commands), only update config files")
|
|
289
|
+
.option("--no-scan", "Skip file scanning during setup")
|
|
236
290
|
.action(async (cmdOpts) => {
|
|
237
291
|
const globalOpts = program.opts();
|
|
238
292
|
const format = resolveFormat(globalOpts.format);
|
|
239
293
|
await runSetup({
|
|
240
294
|
platform: cmdOpts.platform,
|
|
241
295
|
withMcp: cmdOpts.withMcp,
|
|
242
|
-
noPlugin: cmdOpts.
|
|
296
|
+
noPlugin: cmdOpts.plugin === false,
|
|
297
|
+
noScan: cmdOpts.scan === false,
|
|
243
298
|
format,
|
|
244
299
|
});
|
|
245
300
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/installers.d.ts
CHANGED
|
@@ -11,9 +11,9 @@ export declare function installMcpServer(platform: Platform, apiKey: string): {
|
|
|
11
11
|
installed: boolean;
|
|
12
12
|
configPath: string;
|
|
13
13
|
};
|
|
14
|
-
export declare function installClaudeCodePlugin(
|
|
14
|
+
export declare function installClaudeCodePlugin(): {
|
|
15
15
|
installed: boolean;
|
|
16
16
|
hooksAdded: string[];
|
|
17
|
-
|
|
17
|
+
commandsCopied: string[];
|
|
18
18
|
};
|
|
19
19
|
export declare function syncApiKeyToMcpConfig(apiKey: string): void;
|
package/dist/lib/installers.js
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* - Zed installer uses context_servers instead of mcpServers
|
|
7
7
|
* - Continue.dev writes YAML config
|
|
8
8
|
*/
|
|
9
|
-
import { readFileSync, writeFileSync, mkdirSync, existsSync,
|
|
10
|
-
import { join, dirname
|
|
9
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync, unlinkSync, copyFileSync } from "node:fs";
|
|
10
|
+
import { join, dirname } from "node:path";
|
|
11
11
|
import { homedir } from "node:os";
|
|
12
12
|
import { fileURLToPath } from "node:url";
|
|
13
13
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -77,14 +77,30 @@ function installContinueMcp(configPath, apiKey) {
|
|
|
77
77
|
writeJsonFile(mcpPath, config);
|
|
78
78
|
return { installed: true, configPath: mcpPath };
|
|
79
79
|
}
|
|
80
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Resolve bundled plugin paths.
|
|
82
|
+
* Plugin source is compiled into dist/plugin/ alongside the CLI.
|
|
83
|
+
* Slash commands are at plugin-commands/ in the package root.
|
|
84
|
+
*
|
|
85
|
+
* From dist/lib/installers.js:
|
|
86
|
+
* __dirname = <pkg>/dist/lib/
|
|
87
|
+
* dist/plugin/ = __dirname/../plugin/
|
|
88
|
+
* plugin-commands/ = __dirname/../../plugin-commands/
|
|
89
|
+
*/
|
|
90
|
+
function getPluginDistDir() {
|
|
91
|
+
return join(__dirname, "..", "plugin");
|
|
92
|
+
}
|
|
93
|
+
function getPluginCommandsDir() {
|
|
94
|
+
return join(__dirname, "..", "..", "plugin-commands");
|
|
95
|
+
}
|
|
96
|
+
export function installClaudeCodePlugin() {
|
|
81
97
|
const home = homedir();
|
|
82
98
|
const claudeDir = join(home, ".claude");
|
|
83
99
|
const settingsPath = join(claudeDir, "settings.json");
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if (!
|
|
87
|
-
return { installed: false, hooksAdded: [],
|
|
100
|
+
const distDir = getPluginDistDir();
|
|
101
|
+
// Verify bundled plugin exists
|
|
102
|
+
if (!existsSync(join(distDir, "auto-recall.js"))) {
|
|
103
|
+
return { installed: false, hooksAdded: [], commandsCopied: [] };
|
|
88
104
|
}
|
|
89
105
|
// 1. Read existing settings.json
|
|
90
106
|
let settings = {};
|
|
@@ -99,8 +115,7 @@ export function installClaudeCodePlugin(pluginDir) {
|
|
|
99
115
|
settings.hooks = {};
|
|
100
116
|
}
|
|
101
117
|
const hooksAdded = [];
|
|
102
|
-
|
|
103
|
-
// 2. Add hooks (idempotent — check if nex hooks already exist)
|
|
118
|
+
// 2. Add hooks (idempotent — remove stale nex hooks, then add fresh ones)
|
|
104
119
|
const hookDefs = [
|
|
105
120
|
{
|
|
106
121
|
event: "SessionStart",
|
|
@@ -126,28 +141,28 @@ export function installClaudeCodePlugin(pluginDir) {
|
|
|
126
141
|
settings.hooks[def.event] = [];
|
|
127
142
|
}
|
|
128
143
|
const groups = settings.hooks[def.event];
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
144
|
+
// Remove any existing nex hook entries (handles path updates on upgrade)
|
|
145
|
+
const filtered = groups.filter((g) => !g.hooks.some((h) => h.command.includes("auto-recall") || h.command.includes("auto-capture") || h.command.includes("auto-session-start")));
|
|
146
|
+
const hookEntry = {
|
|
147
|
+
type: "command",
|
|
148
|
+
command: `node ${def.script}`,
|
|
149
|
+
timeout: def.timeout,
|
|
150
|
+
};
|
|
151
|
+
if (def.statusMessage)
|
|
152
|
+
hookEntry.statusMessage = def.statusMessage;
|
|
153
|
+
if (def.async)
|
|
154
|
+
hookEntry.async = true;
|
|
155
|
+
filtered.push({ matcher: "", hooks: [hookEntry] });
|
|
156
|
+
settings.hooks[def.event] = filtered;
|
|
157
|
+
hooksAdded.push(def.event);
|
|
143
158
|
}
|
|
144
159
|
// 3. Write settings.json
|
|
145
160
|
mkdirSync(claudeDir, { recursive: true });
|
|
146
161
|
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + "\n", "utf-8");
|
|
147
|
-
// 4.
|
|
148
|
-
const
|
|
162
|
+
// 4. Copy slash commands (copy, not symlink — survives npm updates)
|
|
163
|
+
const commandsCopied = [];
|
|
149
164
|
const commandsDir = join(claudeDir, "commands");
|
|
150
|
-
const sourceCommandsDir =
|
|
165
|
+
const sourceCommandsDir = getPluginCommandsDir();
|
|
151
166
|
if (existsSync(sourceCommandsDir)) {
|
|
152
167
|
mkdirSync(commandsDir, { recursive: true });
|
|
153
168
|
try {
|
|
@@ -157,14 +172,19 @@ export function installClaudeCodePlugin(pluginDir) {
|
|
|
157
172
|
continue;
|
|
158
173
|
const target = join(commandsDir, entry);
|
|
159
174
|
const source = join(sourceCommandsDir, entry);
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
175
|
+
// Remove stale symlink or existing file, then copy fresh
|
|
176
|
+
try {
|
|
177
|
+
unlinkSync(target);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
// File didn't exist — fine
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
copyFileSync(source, target);
|
|
184
|
+
commandsCopied.push(entry);
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// Copy failed — non-critical
|
|
168
188
|
}
|
|
169
189
|
}
|
|
170
190
|
}
|
|
@@ -172,28 +192,7 @@ export function installClaudeCodePlugin(pluginDir) {
|
|
|
172
192
|
// Commands dir read failed — non-critical
|
|
173
193
|
}
|
|
174
194
|
}
|
|
175
|
-
return { installed: true, hooksAdded,
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Find the claude-code-plugin directory relative to the CLI install.
|
|
179
|
-
* Looks for it as a sibling package in the monorepo.
|
|
180
|
-
*/
|
|
181
|
-
function findPluginDir() {
|
|
182
|
-
// Try common locations
|
|
183
|
-
const candidates = [
|
|
184
|
-
// Sibling in monorepo (development)
|
|
185
|
-
resolve(__dirname, "..", "..", "..", "claude-code-plugin"),
|
|
186
|
-
// npm global install (node_modules sibling)
|
|
187
|
-
resolve(__dirname, "..", "..", "..", "..", "@nex-crm", "claude-code-nex-plugin"),
|
|
188
|
-
// Relative to cli package
|
|
189
|
-
resolve(__dirname, "..", "..", "claude-code-plugin"),
|
|
190
|
-
];
|
|
191
|
-
for (const candidate of candidates) {
|
|
192
|
-
if (existsSync(join(candidate, "package.json"))) {
|
|
193
|
-
return candidate;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
return undefined;
|
|
195
|
+
return { installed: true, hooksAdded, commandsCopied };
|
|
197
196
|
}
|
|
198
197
|
// --- Sync API key to ~/.nex-mcp.json ---
|
|
199
198
|
export function syncApiKeyToMcpConfig(apiKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installers.js","sourceRoot":"","sources":["../../src/lib/installers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"installers.js","sourceRoot":"","sources":["../../src/lib/installers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,gBAAgB,GAAG;IACvB,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACnC,GAAG,EAAE,EAA4B;CAClC,CAAC;AAEF,gCAAgC;AAEhC,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,IAA6B;IAChE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAkB,EAClB,MAAc;IAEd,MAAM,KAAK,GAAG;QACZ,GAAG,gBAAgB;QACnB,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;KAC7B,CAAC;IAEF,IAAI,QAAQ,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;QACpC,OAAO,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,QAAQ,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QACzC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,+FAA+F;IAC/F,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;IACzB,CAAC;IACA,MAAM,CAAC,UAAsC,CAAC,GAAG,GAAG,KAAK,CAAC;IAE3D,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,aAAa,CACpB,UAAkB,EAClB,KAA8B;IAE9B,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC1E,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC;IAC9B,CAAC;IACA,MAAM,CAAC,eAA2C,CAAC,GAAG,GAAG;QACxD,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;KACnE,CAAC;IAEF,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAClC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAkB,EAClB,MAAc;IAEd,oEAAoE;IACpE,8CAA8C;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAErC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;IACzB,CAAC;IACA,MAAM,CAAC,UAAsC,CAAC,GAAG,GAAG;QACnD,GAAG,gBAAgB;QACnB,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;KAC7B,CAAC;IAEF,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAClD,CAAC;AAsBD;;;;;;;;;GASG;AACH,SAAS,gBAAgB;IACvB,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,uBAAuB;IAKrC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,+BAA+B;IAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IAClE,CAAC;IAED,iCAAiC;IACjC,IAAI,QAAQ,GAAiB,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,0EAA0E;IAC1E,MAAM,QAAQ,GAMT;QACH;YACE,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC;YAC9C,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,8BAA8B;SAC9C;QACD;YACE,KAAK,EAAE,kBAAkB;YACzB,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;YACvC,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,gCAAgC;SAChD;QACD;YACE,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;YACxC,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI;SACZ;KACF,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,KAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE1C,yEAAyE;QACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACnC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAC1I,CAAC;QAEF,MAAM,SAAS,GAAc;YAC3B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE;YAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC;QACF,IAAI,GAAG,CAAC,aAAa;YAAE,SAAS,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;QACnE,IAAI,GAAG,CAAC,KAAK;YAAE,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;QAEtC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnD,QAAQ,CAAC,KAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;QACtC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,yBAAyB;IACzB,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAE/E,oEAAoE;IACpE,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;IAEjD,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAClC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;YAC/C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACrC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBACxC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;gBAE9C,yDAAyD;gBACzD,IAAI,CAAC;oBACH,UAAU,CAAC,MAAM,CAAC,CAAC;gBACrB,CAAC;gBAAC,MAAM,CAAC;oBACP,2BAA2B;gBAC7B,CAAC;gBAED,IAAI,CAAC;oBACH,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC7B,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBAAC,MAAM,CAAC;oBACP,6BAA6B;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AACzD,CAAC;AAED,0CAA0C;AAE1C,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,aAAa,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/lib/prompt.d.ts
CHANGED
package/dist/lib/prompt.js
CHANGED
|
@@ -18,4 +18,21 @@ export async function confirm(message, defaultYes = true) {
|
|
|
18
18
|
});
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
+
export async function ask(message, required = false) {
|
|
22
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
23
|
+
return new Promise((resolve) => {
|
|
24
|
+
const prompt = () => {
|
|
25
|
+
rl.question(`${message} `, (answer) => {
|
|
26
|
+
const trimmed = answer.trim();
|
|
27
|
+
if (required && !trimmed) {
|
|
28
|
+
prompt();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
rl.close();
|
|
32
|
+
resolve(trimmed);
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
prompt();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
21
38
|
//# sourceMappingURL=prompt.js.map
|
package/dist/lib/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/lib/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,UAAU,GAAG,IAAI;IAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;YAC9C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,KAAK,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/lib/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,UAAU,GAAG,IAAI;IAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;YAC9C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,KAAK,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAe,EAAE,QAAQ,GAAG,KAAK;IACzD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;gBACpC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;oBACzB,MAAM,EAAE,CAAC;oBACT,OAAO;gBACT,CAAC;gBACD,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Claude Code Stop hook — auto-capture conversation to Nex + plan file ingestion.
|
|
4
|
+
*
|
|
5
|
+
* Reads { last_assistant_message, session_id } from stdin,
|
|
6
|
+
* filters and sends to Nex for ingestion. Also checks .claude/plans/
|
|
7
|
+
* for changed plan files and ingests up to 2.
|
|
8
|
+
*
|
|
9
|
+
* On ANY error: outputs {} and exits 0 (graceful degradation).
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Claude Code Stop hook — auto-capture conversation to Nex + plan file ingestion.
|
|
4
|
+
*
|
|
5
|
+
* Reads { last_assistant_message, session_id } from stdin,
|
|
6
|
+
* filters and sends to Nex for ingestion. Also checks .claude/plans/
|
|
7
|
+
* for changed plan files and ingests up to 2.
|
|
8
|
+
*
|
|
9
|
+
* On ANY error: outputs {} and exits 0 (graceful degradation).
|
|
10
|
+
*/
|
|
11
|
+
import { readdirSync, statSync, readFileSync } from "node:fs";
|
|
12
|
+
import { join, extname } from "node:path";
|
|
13
|
+
import { loadConfig, loadScanConfig, isHookEnabled } from "./config.js";
|
|
14
|
+
import { NexClient } from "./nex-client.js";
|
|
15
|
+
import { captureFilter } from "./capture-filter.js";
|
|
16
|
+
import { RateLimiter } from "./rate-limiter.js";
|
|
17
|
+
import { readManifest, writeManifest, isChanged, markIngested } from "./file-manifest.js";
|
|
18
|
+
/** Ingest timeout — 3s leaves buffer within hook timeout */
|
|
19
|
+
const INGEST_TIMEOUT_MS = 3_000;
|
|
20
|
+
const MAX_PLAN_FILES = 2;
|
|
21
|
+
const rateLimiter = new RateLimiter();
|
|
22
|
+
/**
|
|
23
|
+
* Scan .claude/plans/ for changed .md files and ingest up to MAX_PLAN_FILES.
|
|
24
|
+
*/
|
|
25
|
+
async function ingestPlanFiles(client) {
|
|
26
|
+
const scanConfig = loadScanConfig();
|
|
27
|
+
if (!scanConfig.enabled)
|
|
28
|
+
return;
|
|
29
|
+
const plansDir = join(process.cwd(), ".claude", "plans");
|
|
30
|
+
let entries;
|
|
31
|
+
try {
|
|
32
|
+
entries = readdirSync(plansDir, { withFileTypes: true });
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return; // No .claude/plans/ dir — normal, skip silently
|
|
36
|
+
}
|
|
37
|
+
const manifest = readManifest();
|
|
38
|
+
let ingested = 0;
|
|
39
|
+
for (const entry of entries) {
|
|
40
|
+
if (ingested >= MAX_PLAN_FILES)
|
|
41
|
+
break;
|
|
42
|
+
if (!entry.isFile())
|
|
43
|
+
continue;
|
|
44
|
+
if (extname(entry.name).toLowerCase() !== ".md")
|
|
45
|
+
continue;
|
|
46
|
+
const fullPath = join(plansDir, entry.name);
|
|
47
|
+
try {
|
|
48
|
+
const stat = statSync(fullPath);
|
|
49
|
+
if (!isChanged(fullPath, stat, manifest))
|
|
50
|
+
continue;
|
|
51
|
+
if (!rateLimiter.canProceed()) {
|
|
52
|
+
process.stderr.write("[nex-capture] Rate limited — skipping plan file ingest\n");
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
let content = readFileSync(fullPath, "utf-8");
|
|
56
|
+
if (content.length > 100_000) {
|
|
57
|
+
content = content.slice(0, 100_000) + "\n[...truncated]";
|
|
58
|
+
}
|
|
59
|
+
const context = `claude-code-plan:${entry.name}`;
|
|
60
|
+
await client.ingest(content, context, INGEST_TIMEOUT_MS);
|
|
61
|
+
markIngested(fullPath, stat, context, manifest);
|
|
62
|
+
ingested++;
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
process.stderr.write(`[nex-capture] Plan file ingest failed (${entry.name}): ${err instanceof Error ? err.message : String(err)}\n`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (ingested > 0) {
|
|
69
|
+
writeManifest(manifest);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function main() {
|
|
73
|
+
try {
|
|
74
|
+
// Read stdin
|
|
75
|
+
const chunks = [];
|
|
76
|
+
for await (const chunk of process.stdin) {
|
|
77
|
+
chunks.push(chunk);
|
|
78
|
+
}
|
|
79
|
+
const raw = Buffer.concat(chunks).toString("utf-8");
|
|
80
|
+
// Check .nex.toml kill switch
|
|
81
|
+
if (!isHookEnabled("capture")) {
|
|
82
|
+
process.stdout.write("{}");
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
let input;
|
|
86
|
+
try {
|
|
87
|
+
input = JSON.parse(raw);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
process.stdout.write("{}");
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
let cfg;
|
|
94
|
+
try {
|
|
95
|
+
cfg = loadConfig();
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
process.stdout.write("{}");
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const client = new NexClient(cfg.apiKey, cfg.baseUrl);
|
|
102
|
+
// --- Conversation capture (existing behavior) ---
|
|
103
|
+
const message = input.last_assistant_message?.trim();
|
|
104
|
+
if (message) {
|
|
105
|
+
const filterResult = captureFilter(message);
|
|
106
|
+
if (!filterResult.skipped) {
|
|
107
|
+
if (rateLimiter.canProceed()) {
|
|
108
|
+
try {
|
|
109
|
+
await client.ingest(filterResult.text, "claude-code-conversation", INGEST_TIMEOUT_MS);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
process.stderr.write(`[nex-capture] Ingest failed: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
process.stderr.write("[nex-capture] Rate limited — skipping conversation ingest\n");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// --- Plan file ingestion ---
|
|
121
|
+
try {
|
|
122
|
+
await ingestPlanFiles(client);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
process.stderr.write(`[nex-capture] Plan file scan error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
126
|
+
}
|
|
127
|
+
process.stdout.write("{}");
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
process.stderr.write(`[nex-capture] Unexpected error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
131
|
+
process.stdout.write("{}");
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
main().then(() => process.exit(0)).catch(() => process.exit(0));
|
|
135
|
+
//# sourceMappingURL=auto-capture.js.map
|