agent-dir 0.1.4 → 0.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.
Files changed (68) hide show
  1. package/README.md +107 -5
  2. package/dist/bin/agent-dir.js +262 -12
  3. package/dist/bin/agent-dir.js.map +1 -1
  4. package/dist/src/auth.d.ts.map +1 -1
  5. package/dist/src/auth.js +10 -2
  6. package/dist/src/auth.js.map +1 -1
  7. package/dist/src/codegraph.d.ts +33 -0
  8. package/dist/src/codegraph.d.ts.map +1 -0
  9. package/dist/src/codegraph.js +265 -0
  10. package/dist/src/codegraph.js.map +1 -0
  11. package/dist/src/config.d.ts.map +1 -1
  12. package/dist/src/config.js +14 -0
  13. package/dist/src/config.js.map +1 -1
  14. package/dist/src/logging.d.ts +2 -0
  15. package/dist/src/logging.d.ts.map +1 -1
  16. package/dist/src/logging.js +36 -10
  17. package/dist/src/logging.js.map +1 -1
  18. package/dist/src/mcp.d.ts +4 -1
  19. package/dist/src/mcp.d.ts.map +1 -1
  20. package/dist/src/mcp.js +1021 -98
  21. package/dist/src/mcp.js.map +1 -1
  22. package/dist/src/server.d.ts +1 -1
  23. package/dist/src/server.d.ts.map +1 -1
  24. package/dist/src/server.js +7 -10
  25. package/dist/src/server.js.map +1 -1
  26. package/dist/src/setup.d.ts +9 -0
  27. package/dist/src/setup.d.ts.map +1 -0
  28. package/dist/src/setup.js +215 -0
  29. package/dist/src/setup.js.map +1 -0
  30. package/dist/src/telemetry/aggregate.d.ts +58 -0
  31. package/dist/src/telemetry/aggregate.d.ts.map +1 -0
  32. package/dist/src/telemetry/aggregate.js +184 -0
  33. package/dist/src/telemetry/aggregate.js.map +1 -0
  34. package/dist/src/telemetry/config.d.ts +5 -0
  35. package/dist/src/telemetry/config.d.ts.map +1 -0
  36. package/dist/src/telemetry/config.js +16 -0
  37. package/dist/src/telemetry/config.js.map +1 -0
  38. package/dist/src/telemetry/format.d.ts +3 -0
  39. package/dist/src/telemetry/format.d.ts.map +1 -0
  40. package/dist/src/telemetry/format.js +87 -0
  41. package/dist/src/telemetry/format.js.map +1 -0
  42. package/dist/src/telemetry/privacy.d.ts +4 -0
  43. package/dist/src/telemetry/privacy.d.ts.map +1 -0
  44. package/dist/src/telemetry/privacy.js +145 -0
  45. package/dist/src/telemetry/privacy.js.map +1 -0
  46. package/dist/src/telemetry/recorder.d.ts +30 -0
  47. package/dist/src/telemetry/recorder.d.ts.map +1 -0
  48. package/dist/src/telemetry/recorder.js +98 -0
  49. package/dist/src/telemetry/recorder.js.map +1 -0
  50. package/dist/src/telemetry/types.d.ts +74 -0
  51. package/dist/src/telemetry/types.d.ts.map +1 -0
  52. package/dist/src/telemetry/types.js +2 -0
  53. package/dist/src/telemetry/types.js.map +1 -0
  54. package/dist/src/tools/code.d.ts +7 -7
  55. package/dist/src/tools/code.d.ts.map +1 -1
  56. package/dist/src/tools/code.js +49 -16
  57. package/dist/src/tools/code.js.map +1 -1
  58. package/dist/src/tools/commands.d.ts +2 -1
  59. package/dist/src/tools/commands.d.ts.map +1 -1
  60. package/dist/src/tools/commands.js +10 -1
  61. package/dist/src/tools/commands.js.map +1 -1
  62. package/dist/src/tools/files.d.ts +19 -0
  63. package/dist/src/tools/files.d.ts.map +1 -1
  64. package/dist/src/tools/files.js +119 -0
  65. package/dist/src/tools/files.js.map +1 -1
  66. package/dist/src/types.d.ts +7 -0
  67. package/dist/src/types.d.ts.map +1 -1
  68. package/package.json +5 -3
package/README.md CHANGED
@@ -47,9 +47,33 @@ The Wormhole URL is only the transport endpoint. `agent-dir` authentication is e
47
47
  >
48
48
  > A subdomain can remain registered while another `wormhole` process is still running, so stop unused Wormhole tunnels before creating another one. If a configured subdomain is unavailable, `agent-dir` will report the Wormhole registration failure instead of silently starting without a tunnel.
49
49
 
50
+ ## First-run setup
51
+
52
+ On the first interactive run, when no `agent-dir` config exists, the CLI walks you through creating your first saved profile. It asks for the profile name, directory, port, tunnel, optional Wormhole subdomain, optional npm scripts, optional allowed commands, and telemetry preference. The generated authentication token is saved with the profile.
53
+
54
+ Telemetry is optional and stays local. During setup, `agent-dir` explains the available levels: **none**, **anonymous**, **basic**, and **detailed**. Telemetry is disabled by default if you choose the default option. The same choices can later be changed with `agent-dir telemetry enable|disable`.
55
+
56
+ You can also run the setup wizard explicitly at any time:
57
+
58
+ ```bash
59
+ agent-dir setup
60
+ ```
61
+
62
+ This is useful for creating another profile or replacing an existing profile. The wizard saves the profile and exits without starting a tunnel.
63
+
64
+ You can skip setup completely when you only want a temporary random Wormhole URL:
65
+
66
+ ```bash
67
+ agent-dir . --random --tunnel wormhole
68
+ ```
69
+
70
+ If you answer **No** at the setup prompt, `agent-dir` automatically starts that temporary random tunnel and does not create a config file.
71
+
72
+ Non-interactive invocations and invocations with explicit launch options do not start the setup wizard.
73
+
50
74
  ## Profiles
51
75
 
52
- Profiles save settings you use repeatedly: project directory, tunnel, Wormhole subdomain, port, npm scripts, and allowed non-npm commands.
76
+ Profiles save settings you use repeatedly: project directory, tunnel, Wormhole subdomain, port, npm scripts, allowed non-npm commands, blocked command prefixes, and whether dedicated Git MCP tools are enabled. Dedicated Git tools are enabled automatically when `git` is in the allowed command list, or explicitly with `--git`; use `--no-git` to disable them for a run.
53
77
 
54
78
  ```bash
55
79
  agent-dir config add my-project \
@@ -57,7 +81,8 @@ agent-dir config add my-project \
57
81
  --tunnel wormhole \
58
82
  --subdomain my-project-x7k4m2 \
59
83
  --npm typecheck,lint,format,test,build \
60
- --command grep,find,rg,git
84
+ --command grep,find,rg,git \
85
+ --blacklist "git commit,git push --force"
61
86
  ```
62
87
 
63
88
  Then:
@@ -71,11 +96,63 @@ Manage profiles with:
71
96
  ```bash
72
97
  agent-dir config list
73
98
  agent-dir config show my-project
74
- agent-dir config remove my-project
99
+ agent-dir config delete my-project
100
+ agent-dir config delete --all
101
+ ```
102
+
103
+ Deletion asks for confirmation by default. Use `--yes` for automation:
104
+
105
+ ```bash
106
+ agent-dir config delete my-project --yes
107
+ agent-dir config delete --all --yes
108
+ ```
109
+
110
+ The older `config remove <name>` command remains an alias for `config delete <name>`.
111
+
112
+ Retrieve or rotate a profile's authentication token with:
113
+
114
+ ```bash
115
+ agent-dir config token my-project
116
+ agent-dir config token my-project --rotate
75
117
  ```
76
118
 
119
+ The token command prints the secret intentionally; avoid sharing or committing its output.
120
+
77
121
  Profiles are stored per-user at `~/.config/agent-dir/config.json`, not in the project repository. The config directory and file are written with user-only permissions. Command-line options can override saved values for one run.
78
122
 
123
+ ## Telemetry
124
+
125
+ Telemetry is **disabled by default** and is local-only. When enabled, events are stored in `~/.config/agent-dir/telemetry.jsonl` with user-only permissions; no telemetry is sent to a remote service.
126
+
127
+ Enable a privacy level with:
128
+
129
+ ```bash
130
+ agent-dir telemetry enable anonymous
131
+ agent-dir telemetry enable basic
132
+ agent-dir telemetry enable detailed
133
+ ```
134
+
135
+ Levels add bounded operational context:
136
+
137
+ - **anonymous** — MCP methods, tool/command families, success, duration, sizes, result counts, truncation/pagination, and safe error categories.
138
+ - **basic** — anonymous data plus bounded Agent Dir/Node/platform and MCP client version information.
139
+ - **detailed** — basic data plus coarse project classification such as language, package manager, Git/CodeGraph availability, and project size.
140
+
141
+ Telemetry never records file contents, command arguments, authentication tokens, environment variables, or project paths. Session telemetry separates wall-clock session lifetime from active MCP request time and the gaps between requests; those gaps may include agent reasoning, network delay, or other idle time and are not presented as agent thinking time. Persistence failures do not affect MCP requests.
142
+
143
+ Manage telemetry with:
144
+
145
+ ```bash
146
+ agent-dir telemetry status
147
+ agent-dir telemetry schema
148
+ agent-dir telemetry show [--follow]
149
+ agent-dir telemetry summary
150
+ agent-dir telemetry disable
151
+ agent-dir telemetry reset
152
+ ```
153
+
154
+ For the event model, metric definitions, privacy levels, and guidance for interpreting raw and aggregated telemetry, see [Telemetry interpretation](docs/telemetry.md).
155
+
79
156
  ## MCP transport and compatibility
80
157
 
81
158
  The HTTP MCP endpoint is `POST /mcp`. The implementation supports two protocol compatibility paths:
@@ -153,11 +230,36 @@ The server log distinguishes protocol/header validation from MCP handler errors.
153
230
  | `diagnostics` | Project-independent diagnostics; does not run tests, lint, or typecheck |
154
231
  | `run_npm_batch` | Run one or more explicitly allowlisted npm scripts sequentially |
155
232
  | `run_command_batch` | Run one or more explicitly allowlisted executables sequentially without a shell |
233
+ | `codegraph_explore` | Optional CodeGraph structural code intelligence when the project is indexed |
156
234
 
157
235
  Batch operations execute sequentially and stop on the first failed command. Tool calls return modern `structuredContent` alongside a serialized text representation, and tools that return structured data advertise an `outputSchema`. List-style protocol methods use opaque cursors when more than 50 entries are available.
158
236
 
159
237
  Modern `subscriptions/listen` replaces the legacy GET/SSE notification model. Clients can subscribe to tool, prompt, resource-list, and resource-specific change events; filesystem mutations publish resource-change events to active subscribers.
160
238
 
239
+ ### Optional CodeGraph integration
240
+
241
+ Agent Dir can optionally bridge the CodeGraph MCP server into the same Agent Dir MCP endpoint. CodeGraph remains an independent tool and dependency; Agent Dir only exposes its `codegraph_explore` capability when the current project has a readable `.codegraph/codegraph.db` index and the `codegraph` executable is available on `PATH`. Agent Dir does not start CodeGraph until `codegraph_explore` is actually called.
242
+
243
+ Install CodeGraph separately if you want this capability:
244
+
245
+ ```bash
246
+ npm install -g @colbymchenry/codegraph
247
+ codegraph init
248
+ ```
249
+
250
+ CodeGraph exposes `codegraph_explore` as its primary/default MCP tool. Agent Dir forwards its request and structured result without reimplementing graph analysis, and launches CodeGraph with the Agent Dir project root fixed as `--path`; callers cannot select another project through the forwarded tool. Agent Dir intentionally exposes only `codegraph_explore`, even if a CodeGraph installation enables additional MCP tools.
251
+
252
+ The integration distinguishes these states in `server/discover`:
253
+
254
+ - `not_installed` — CodeGraph is unavailable on `PATH`.
255
+ - `not_indexed` — CodeGraph is installed, but this project has no readable `.codegraph/codegraph.db`.
256
+ - `available` — CodeGraph is installed and this project is indexed.
257
+ - `startup_failed` / `runtime_failed` — CodeGraph could not initialize or later terminated; Agent Dir remains available and reports the failure locally.
258
+
259
+ The CodeGraph child process is reused for subsequent calls and is terminated with Agent Dir shutdown. Agent Dir passes a deliberately limited environment to the child and does not forward arbitrary `projectPath` values, credentials, or unrelated filesystem paths.
260
+
261
+ CodeGraph is optional: without it, the normal Agent Dir tool surface and behavior are unchanged.
262
+
161
263
  ### Command permissions
162
264
 
163
265
  npm scripts must be explicitly enabled:
@@ -172,7 +274,7 @@ Normal executables use a separate allowlist:
172
274
  --command grep,find,rg,git
173
275
  ```
174
276
 
175
- Commands are launched with `shell: false`; the MCP client supplies the executable and arguments separately. An executable that is not in the allowlist is rejected.
277
+ Commands are launched with `shell: false`; the MCP client supplies the executable and arguments separately. Dedicated Git MCP tools are separately capability-gated; they are exposed only when Git is enabled for the active profile. If Git is disabled, direct calls to Git tools are rejected even if a client attempts to invoke them by name. An executable that is not in the allowlist is rejected. A configured `blacklistedCommands` entry overrides the allowlist and blocks matching command prefixes, so `git` can be allowed while `git commit` is blocked and `git status` remains available. Entries are whitespace-separated command/argument prefixes, for example `git commit` or `git push --force`.
176
278
 
177
279
  Avoid allowing `sh`, `bash`, `zsh`, `cmd`, `node`, or `python` unless you intentionally want to grant a much broader execution capability.
178
280
 
@@ -187,7 +289,7 @@ agent-dir://instructions
187
289
  agent-dir://capabilities
188
290
  ```
189
291
 
190
- The instructions emphasize efficient tool selection: targeted search before reading, bounded ranges before whole-file reads, dedicated tools before generic commands, batched related operations, narrow validation before full checks, and scoped Git inspection before full diffs. The execution policy is generated from the active profile, so changing `allowedScripts` or `commands` automatically changes what the agent is told it can execute.
292
+ The instructions emphasize efficient tool selection: targeted search before reading, bounded ranges before whole-file reads, dedicated tools before generic commands, batched related operations, narrow validation before full checks, and scoped Git inspection before full diffs. The execution policy is generated from the active profile, so changing `allowedScripts`, `commands`, or `blacklistedCommands` automatically changes what the agent is told it can execute.
191
293
 
192
294
  The capabilities resource is machine-readable and includes the running Agent Dir version, registered tool names, execution policy, and preferred/avoid tool-selection patterns. This keeps the MCP server itself as the source of truth; client-specific instruction files do not need to be maintained when Agent Dir changes.
193
295
 
@@ -1,11 +1,17 @@
1
1
  #!/usr/bin/env node
2
- import { randomBytes } from "node:crypto";
2
+ import { createHash, randomBytes } from "node:crypto";
3
+ import { mkdirSync, readFileSync, unlinkSync, watch, writeFileSync } from "node:fs";
3
4
  import { createRequire } from "node:module";
4
5
  import { resolve } from "node:path";
6
+ import { createInterface } from "node:readline/promises";
5
7
  import { parseArgs } from "node:util";
6
8
  import { configPath, loadConfig, mergeProfile, saveConfig } from "../src/config.js";
7
9
  import { printBanner, printHelp, printRequestHeader } from "../src/logging.js";
8
10
  import { startServer } from "../src/server.js";
11
+ import { hasConfigFile, runFirstTimeSetup, shouldOfferSetup } from "../src/setup.js";
12
+ import { summarizeTelemetry } from "../src/telemetry/aggregate.js";
13
+ import { isTelemetryLevel } from "../src/telemetry/config.js";
14
+ import { formatTelemetrySummary } from "../src/telemetry/format.js";
9
15
  import { startTunnel } from "../src/tunnel.js";
10
16
  const require = createRequire(import.meta.url);
11
17
  const packageVersion = require("../../package.json").version;
@@ -38,11 +44,18 @@ const { values, positionals } = parseArgs({
38
44
  subdomain: { type: "string", short: "s" },
39
45
  npm: { type: "string" },
40
46
  command: { type: "string" },
47
+ blacklist: { type: "string" },
41
48
  token: { type: "string" },
49
+ git: { type: "boolean" },
50
+ rotate: { type: "boolean" },
42
51
  "no-tunnel": { type: "boolean" },
43
52
  random: { type: "boolean" },
53
+ follow: { type: "boolean" },
54
+ all: { type: "boolean" },
55
+ yes: { type: "boolean", short: "y" },
44
56
  },
45
57
  allowPositionals: true,
58
+ allowNegative: true,
46
59
  strict: true,
47
60
  });
48
61
  if (values.help) {
@@ -54,7 +67,147 @@ if (values.version) {
54
67
  process.exit(0);
55
68
  }
56
69
  const config = await loadConfig();
57
- const command = positionals[0];
70
+ let command = positionals[0];
71
+ if (command === "setup") {
72
+ await runFirstTimeSetup(config, positionals[1] ?? ".");
73
+ process.exit(0);
74
+ }
75
+ if (shouldOfferSetup(await hasConfigFile(), {
76
+ random: values.random,
77
+ noTunnel: values["no-tunnel"],
78
+ tunnel: values.tunnel,
79
+ }) &&
80
+ command !== "config" &&
81
+ command !== "telemetry") {
82
+ const profileName = await runFirstTimeSetup(config, positionals[0] ?? ".");
83
+ if (profileName)
84
+ command = profileName;
85
+ else if (profileName === undefined) {
86
+ values.random = true;
87
+ values.tunnel = "wormhole";
88
+ }
89
+ }
90
+ if (command === "telemetry") {
91
+ const action = positionals[1];
92
+ const currentLevel = config.telemetry?.level ?? "none";
93
+ const telemetryFile = resolve(`${process.env.HOME ?? "."}/.config/agent-dir/telemetry.jsonl`);
94
+ if (action === "status") {
95
+ console.log(`Telemetry: ${currentLevel === "none" ? "disabled" : "enabled"}`);
96
+ console.log(`Level: ${currentLevel}`);
97
+ console.log(`Config: ${configPath()}`);
98
+ process.exit(0);
99
+ }
100
+ if (action === "enable") {
101
+ const level = positionals[2];
102
+ if (!level || !isTelemetryLevel(level) || level === "none")
103
+ fail("Usage: agent-dir telemetry enable <anonymous|basic|detailed>");
104
+ config.telemetry = { level };
105
+ await saveConfig(config);
106
+ console.log(`✓ Telemetry enabled at ${level} level.`);
107
+ process.exit(0);
108
+ }
109
+ if (action === "disable") {
110
+ config.telemetry = { level: "none" };
111
+ await saveConfig(config);
112
+ console.log("✓ Telemetry disabled.");
113
+ process.exit(0);
114
+ }
115
+ if (action === "schema") {
116
+ console.log(JSON.stringify({
117
+ schemaVersion: 1,
118
+ session: [
119
+ "event",
120
+ "wallClockDurationMs",
121
+ "activeRequestDurationMs",
122
+ "idleGapDurationMs",
123
+ "requestCount",
124
+ "toolCallCount",
125
+ "commandCallCount",
126
+ ],
127
+ envelope: ["configId", "sessionId", "timestamp", "level", "event"],
128
+ events: ["mcp_request", "tool_call", "command_call", "session"],
129
+ successMetrics: {
130
+ mcp: "successful mcp_request events / mcp_request events",
131
+ tool: "successful tool_call events / tool_call events",
132
+ command: "successful command_call events / command_call events",
133
+ overall: "not defined; MCP and tool events are related and must not be combined",
134
+ },
135
+ aggregation: "agent-dir telemetry summary",
136
+ }, null, 2));
137
+ process.exit(0);
138
+ }
139
+ if (action === "summary") {
140
+ console.log(formatTelemetrySummary(summarizeTelemetry(readTelemetryEvents(telemetryFile)), currentLevel));
141
+ process.exit(0);
142
+ }
143
+ if (action === "show") {
144
+ const printEvents = () => {
145
+ const events = readTelemetryEvents(telemetryFile);
146
+ const grouped = new Map();
147
+ for (const event of events) {
148
+ const configId = isRecord(event) && typeof event.configId === "string" ? event.configId : "unknown";
149
+ const sessions = grouped.get(configId) ?? new Map();
150
+ const sessionId = isRecord(event) && typeof event.sessionId === "string" ? event.sessionId : "unknown";
151
+ sessions.set(sessionId, [...(sessions.get(sessionId) ?? []), event]);
152
+ grouped.set(configId, sessions);
153
+ }
154
+ console.log(JSON.stringify({
155
+ enabled: currentLevel !== "none",
156
+ level: currentLevel,
157
+ configCount: grouped.size,
158
+ configs: Object.fromEntries([...grouped.entries()].map(([configId, sessions]) => [
159
+ configId,
160
+ {
161
+ sessionCount: sessions.size,
162
+ sessions: Object.fromEntries([...sessions.entries()].map(([sessionId, sessionEvents]) => [
163
+ sessionId,
164
+ { count: sessionEvents.length, events: sessionEvents },
165
+ ])),
166
+ },
167
+ ])),
168
+ }, null, 2));
169
+ };
170
+ printEvents();
171
+ if (values.follow) {
172
+ mkdirSync(resolve(`${process.env.HOME ?? "."}/.config/agent-dir`), {
173
+ recursive: true,
174
+ mode: 0o700,
175
+ });
176
+ try {
177
+ readFileSync(telemetryFile);
178
+ }
179
+ catch {
180
+ writeFileSync(telemetryFile, "", { encoding: "utf8", mode: 0o600 });
181
+ }
182
+ const watcher = watch(telemetryFile, () => {
183
+ process.stdout.write("\x1b[2J\x1b[H");
184
+ printEvents();
185
+ });
186
+ const close = () => {
187
+ watcher.close();
188
+ process.exit(0);
189
+ };
190
+ process.on("SIGINT", close);
191
+ process.on("SIGTERM", close);
192
+ await new Promise(() => { });
193
+ }
194
+ process.exit(0);
195
+ }
196
+ if (action === "reset") {
197
+ delete config.telemetry;
198
+ await saveConfig(config);
199
+ try {
200
+ unlinkSync(telemetryFile);
201
+ }
202
+ catch (error) {
203
+ if (isRecord(error) && error.code !== "ENOENT")
204
+ throw error;
205
+ }
206
+ console.log("✓ Telemetry reset to defaults and all recorded data was cleared.");
207
+ process.exit(0);
208
+ }
209
+ fail("Usage: agent-dir telemetry {status|enable|disable|schema|show|summary|reset}");
210
+ }
58
211
  if (command === "config") {
59
212
  const action = positionals[1];
60
213
  if (action === "list") {
@@ -72,23 +225,55 @@ if (command === "config") {
72
225
  console.log(JSON.stringify(profile, null, 2));
73
226
  process.exit(0);
74
227
  }
75
- if (action === "remove") {
228
+ if (action === "delete" || action === "remove") {
76
229
  const name = positionals[2];
230
+ const deleteAll = values.all === true;
231
+ if (deleteAll && name)
232
+ fail("Do not combine --all with a profile name.");
233
+ if (!deleteAll && !name)
234
+ fail("Usage: agent-dir config delete <profile> | --all");
235
+ const names = Object.keys(config.profiles);
236
+ if (deleteAll) {
237
+ if (names.length === 0) {
238
+ console.log("No profiles configured.");
239
+ process.exit(0);
240
+ }
241
+ const confirmed = await confirmConfigDelete(`Delete all ${names.length} configured profile${names.length === 1 ? "" : "s"}?`, values.yes === true);
242
+ if (!confirmed) {
243
+ console.log("Deletion cancelled.");
244
+ process.exit(0);
245
+ }
246
+ for (const profileName of names)
247
+ delete config.profiles[profileName];
248
+ await saveConfig(config);
249
+ console.log(`✓ Deleted ${names.length} profile${names.length === 1 ? "" : "s"}.`);
250
+ process.exit(0);
251
+ }
77
252
  if (!name || !config.profiles[name])
78
253
  fail(`Profile not found: ${name}`);
254
+ const confirmed = await confirmConfigDelete(`Delete profile '${name}'?`, values.yes === true);
255
+ if (!confirmed) {
256
+ console.log("Deletion cancelled.");
257
+ process.exit(0);
258
+ }
79
259
  delete config.profiles[name];
80
260
  await saveConfig(config);
81
- console.log(`✓ Removed profile '${name}'.`);
261
+ console.log(`✓ Deleted profile '${name}'.`);
82
262
  process.exit(0);
83
263
  }
84
264
  if (action === "token") {
85
265
  const name = positionals[2];
86
266
  if (!name || !config.profiles[name])
87
267
  fail(`Profile not found: ${name}`);
88
- config.profiles[name].token = randomBytes(24).toString("hex");
89
- await saveConfig(config);
90
- console.log(`✓ Rotated token for '${name}'.`);
91
- console.log(` Config: ${configPath()}`);
268
+ if (values.rotate === true) {
269
+ config.profiles[name].token = randomBytes(24).toString("hex");
270
+ await saveConfig(config);
271
+ console.log(`✓ Rotated token for '${name}'.`);
272
+ }
273
+ if (!config.profiles[name].token) {
274
+ fail(`Profile '${name}' does not have an authentication token.`);
275
+ }
276
+ console.log(config.profiles[name].token);
92
277
  process.exit(0);
93
278
  }
94
279
  if (action === "add") {
@@ -114,6 +299,11 @@ if (command === "config") {
114
299
  const commands = parseList(values.command);
115
300
  if (commands !== undefined)
116
301
  profile.commands = commands;
302
+ const blacklist = parseList(values.blacklist);
303
+ if (blacklist !== undefined)
304
+ profile.blacklistedCommands = blacklist;
305
+ if (values.git !== undefined)
306
+ profile.git = values.git;
117
307
  if (profile.tunnel === "wormhole" && !profile.subdomain && !values.random) {
118
308
  fail("Wormhole profiles require --subdomain <name>, or use --random.");
119
309
  }
@@ -123,7 +313,7 @@ if (command === "config") {
123
313
  console.log(` Config: ${configPath()}`);
124
314
  process.exit(0);
125
315
  }
126
- fail("Usage: agent-dir config {add|list|show|remove|token}");
316
+ fail("Usage: agent-dir config {add|list|show|delete|token}");
127
317
  }
128
318
  const profile = command ? config.profiles[command] : undefined;
129
319
  if (command && command !== "config" && !profile && command.startsWith("-")) {
@@ -148,17 +338,37 @@ if (randomTunnel && tunnel === "none") {
148
338
  const token = values.token ?? profile?.token ?? randomBytes(24).toString("hex");
149
339
  const npm = parseList(values.npm);
150
340
  const commands = parseList(values.command);
341
+ const blacklist = parseList(values.blacklist);
151
342
  const overrides = {};
152
343
  if (npm !== undefined)
153
344
  overrides.npm = { allowedScripts: npm };
154
345
  if (commands !== undefined)
155
346
  overrides.commands = commands;
347
+ if (blacklist !== undefined)
348
+ overrides.blacklistedCommands = blacklist;
349
+ if (values.git !== undefined)
350
+ overrides.git = values.git;
156
351
  const commandConfig = mergeProfile(profile ?? { directory, port, tunnel }, overrides);
352
+ const telemetryConfigId = profile
353
+ ? command
354
+ : createHash("sha256")
355
+ .update(JSON.stringify({
356
+ directory,
357
+ port,
358
+ tunnel,
359
+ subdomain,
360
+ randomTunnel,
361
+ npm: commandConfig.npm?.allowedScripts ?? [],
362
+ commands: commandConfig.commands ?? [],
363
+ blacklistedCommands: commandConfig.blacklistedCommands ?? [],
364
+ git: commandConfig.git ?? commandConfig.commands?.includes("git") ?? false,
365
+ }))
366
+ .digest("hex")
367
+ .slice(0, 12);
157
368
  const bannerOptions = {
158
369
  root: directory,
159
370
  port,
160
371
  tunnel,
161
- token,
162
372
  };
163
373
  const npmScripts = commandConfig.npm?.allowedScripts;
164
374
  const allowedCommands = commandConfig.commands;
@@ -170,13 +380,27 @@ if (npmScripts)
170
380
  bannerOptions.npmScripts = npmScripts;
171
381
  if (allowedCommands)
172
382
  bannerOptions.commands = allowedCommands;
383
+ if (commandConfig.blacklistedCommands?.length) {
384
+ bannerOptions.blacklistedCommands = commandConfig.blacklistedCommands;
385
+ }
386
+ bannerOptions.gitEnabled = commandConfig.git ?? commandConfig.commands?.includes("git") ?? false;
173
387
  printBanner(bannerOptions);
174
- const server = await startServer({ root: directory, port, token, commandConfig });
388
+ const server = await startServer({
389
+ root: directory,
390
+ port,
391
+ token,
392
+ commandConfig,
393
+ telemetry: {
394
+ ...(config.telemetry ?? { level: "none" }),
395
+ ...(telemetryConfigId ? { configId: telemetryConfigId } : {}),
396
+ persist: true,
397
+ },
398
+ });
175
399
  let tunnelResult;
176
400
  console.log(" ✓ SERVER ONLINE");
177
401
  console.log(` Local target : http://127.0.0.1:${port}`);
178
402
  console.log(" Auth : Bearer token");
179
- console.log(` Token : ${token}`);
403
+ console.log(" Token : <configured>");
180
404
  if (tunnel !== "none") {
181
405
  try {
182
406
  tunnelResult = await startTunnel({
@@ -206,4 +430,30 @@ const shutdown = async () => {
206
430
  };
207
431
  process.on("SIGINT", shutdown);
208
432
  process.on("SIGTERM", shutdown);
433
+ async function confirmConfigDelete(message, skipPrompt) {
434
+ if (skipPrompt)
435
+ return true;
436
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
437
+ try {
438
+ const answer = (await rl.question(`⚠ ${message} [y/N]: `)).trim().toLowerCase();
439
+ return answer === "y" || answer === "yes";
440
+ }
441
+ finally {
442
+ rl.close();
443
+ }
444
+ }
445
+ function isRecord(value) {
446
+ return typeof value === "object" && value !== null && !Array.isArray(value);
447
+ }
448
+ function readTelemetryEvents(path) {
449
+ try {
450
+ return readFileSync(path, "utf8")
451
+ .split("\n")
452
+ .filter(Boolean)
453
+ .map((line) => JSON.parse(line));
454
+ }
455
+ catch {
456
+ return [];
457
+ }
458
+ }
209
459
  //# sourceMappingURL=agent-dir.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-dir.js","sourceRoot":"","sources":["../../bin/agent-dir.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-dir.js","sourceRoot":"","sources":["../../bin/agent-dir.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAMrE;AAED,wBAAgB,YAAY,IAAI,QAAQ,CASvC"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAQrE;AAQD,wBAAgB,YAAY,IAAI,QAAQ,CASvC"}
package/dist/src/auth.js CHANGED
@@ -1,9 +1,17 @@
1
+ import { createHash, timingSafeEqual } from "node:crypto";
1
2
  export function authenticate(request, token) {
2
3
  const authorization = request.headers.get("authorization");
3
- if (authorization === `Bearer ${token}`)
4
+ const bearer = authorization?.startsWith("Bearer ") ? authorization.slice(7) : undefined;
5
+ if (bearer && secureCompare(bearer, token))
4
6
  return true;
5
7
  const url = new URL(request.url);
6
- return url.searchParams.get("token") === token;
8
+ const queryToken = url.searchParams.get("token");
9
+ return queryToken !== null && secureCompare(queryToken, token);
10
+ }
11
+ function secureCompare(left, right) {
12
+ const leftHash = createHash("sha256").update(left).digest();
13
+ const rightHash = createHash("sha256").update(right).digest();
14
+ return timingSafeEqual(leftHash, rightHash);
7
15
  }
8
16
  export function unauthorized() {
9
17
  return new Response(JSON.stringify({ error: "Unauthorized" }), {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,KAAa;IAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC3D,IAAI,aAAa,KAAK,UAAU,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAErD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE;QAC7D,MAAM,EAAE,GAAG;QACX,OAAO,EAAE;YACP,cAAc,EAAE,iCAAiC;YACjD,kBAAkB,EAAE,QAAQ;YAC5B,eAAe,EAAE,UAAU;SAC5B;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,KAAa;IAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,IAAI,MAAM,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,UAAU,KAAK,IAAI,IAAI,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,KAAa;IAChD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9D,OAAO,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE;QAC7D,MAAM,EAAE,GAAG;QACX,OAAO,EAAE;YACP,cAAc,EAAE,iCAAiC;YACjD,kBAAkB,EAAE,QAAQ;YAC5B,eAAe,EAAE,UAAU;SAC5B;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,33 @@
1
+ export type CodeGraphStatus = "not_installed" | "not_indexed" | "available" | "startup_failed" | "runtime_failed" | "stopped";
2
+ export interface CodeGraphCapability {
3
+ status: CodeGraphStatus;
4
+ installed: boolean;
5
+ indexed: boolean;
6
+ tool: "codegraph_explore" | null;
7
+ detail?: string;
8
+ }
9
+ export declare class CodeGraphIntegration {
10
+ private readonly root;
11
+ private capabilityPromise?;
12
+ private process;
13
+ private buffer;
14
+ private nextId;
15
+ private initialized;
16
+ private closed;
17
+ private runtimeFailure;
18
+ private readonly pending;
19
+ constructor(root: string);
20
+ capability(): Promise<CodeGraphCapability>;
21
+ explore(query: string, maxFiles?: number): Promise<Record<string, unknown>>;
22
+ close(): Promise<void>;
23
+ private detect;
24
+ private hasIndex;
25
+ private isInstalled;
26
+ private ensureStarted;
27
+ private request;
28
+ private notify;
29
+ private consume;
30
+ private handleProcessFailure;
31
+ private rejectPending;
32
+ }
33
+ //# sourceMappingURL=codegraph.d.ts.map