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.
- package/README.md +107 -5
- package/dist/bin/agent-dir.js +262 -12
- package/dist/bin/agent-dir.js.map +1 -1
- package/dist/src/auth.d.ts.map +1 -1
- package/dist/src/auth.js +10 -2
- package/dist/src/auth.js.map +1 -1
- package/dist/src/codegraph.d.ts +33 -0
- package/dist/src/codegraph.d.ts.map +1 -0
- package/dist/src/codegraph.js +265 -0
- package/dist/src/codegraph.js.map +1 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +14 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/logging.d.ts +2 -0
- package/dist/src/logging.d.ts.map +1 -1
- package/dist/src/logging.js +36 -10
- package/dist/src/logging.js.map +1 -1
- package/dist/src/mcp.d.ts +4 -1
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +1021 -98
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/server.d.ts +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +7 -10
- package/dist/src/server.js.map +1 -1
- package/dist/src/setup.d.ts +9 -0
- package/dist/src/setup.d.ts.map +1 -0
- package/dist/src/setup.js +215 -0
- package/dist/src/setup.js.map +1 -0
- package/dist/src/telemetry/aggregate.d.ts +58 -0
- package/dist/src/telemetry/aggregate.d.ts.map +1 -0
- package/dist/src/telemetry/aggregate.js +184 -0
- package/dist/src/telemetry/aggregate.js.map +1 -0
- package/dist/src/telemetry/config.d.ts +5 -0
- package/dist/src/telemetry/config.d.ts.map +1 -0
- package/dist/src/telemetry/config.js +16 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/format.d.ts +3 -0
- package/dist/src/telemetry/format.d.ts.map +1 -0
- package/dist/src/telemetry/format.js +87 -0
- package/dist/src/telemetry/format.js.map +1 -0
- package/dist/src/telemetry/privacy.d.ts +4 -0
- package/dist/src/telemetry/privacy.d.ts.map +1 -0
- package/dist/src/telemetry/privacy.js +145 -0
- package/dist/src/telemetry/privacy.js.map +1 -0
- package/dist/src/telemetry/recorder.d.ts +30 -0
- package/dist/src/telemetry/recorder.d.ts.map +1 -0
- package/dist/src/telemetry/recorder.js +98 -0
- package/dist/src/telemetry/recorder.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +74 -0
- package/dist/src/telemetry/types.d.ts.map +1 -0
- package/dist/src/telemetry/types.js +2 -0
- package/dist/src/telemetry/types.js.map +1 -0
- package/dist/src/tools/code.d.ts +7 -7
- package/dist/src/tools/code.d.ts.map +1 -1
- package/dist/src/tools/code.js +49 -16
- package/dist/src/tools/code.js.map +1 -1
- package/dist/src/tools/commands.d.ts +2 -1
- package/dist/src/tools/commands.d.ts.map +1 -1
- package/dist/src/tools/commands.js +10 -1
- package/dist/src/tools/commands.js.map +1 -1
- package/dist/src/tools/files.d.ts +19 -0
- package/dist/src/tools/files.d.ts.map +1 -1
- package/dist/src/tools/files.js +119 -0
- package/dist/src/tools/files.js.map +1 -1
- package/dist/src/types.d.ts +7 -0
- package/dist/src/types.d.ts.map +1 -1
- 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,
|
|
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
|
|
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 `
|
|
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
|
|
package/dist/bin/agent-dir.js
CHANGED
|
@@ -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
|
-
|
|
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(`✓
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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|
|
|
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({
|
|
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(
|
|
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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"}
|
package/dist/src/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
-
|
|
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" }), {
|
package/dist/src/auth.js.map
CHANGED
|
@@ -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,
|
|
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
|