@harnesskit/collector 0.1.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 (44) hide show
  1. package/README.md +123 -0
  2. package/dist/cli-lib.d.ts +6 -0
  3. package/dist/cli-lib.js +232 -0
  4. package/dist/cli-lib.js.map +1 -0
  5. package/dist/cli.d.ts +1 -0
  6. package/dist/cli.js +6 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/hooks/claude-code-transform.d.ts +1 -0
  9. package/dist/hooks/claude-code-transform.js +361 -0
  10. package/dist/hooks/claude-code-transform.js.map +1 -0
  11. package/dist/hooks/claude-code.d.ts +1 -0
  12. package/dist/hooks/claude-code.js +7 -0
  13. package/dist/hooks/claude-code.js.map +1 -0
  14. package/dist/hooks/codex-transform.d.ts +1 -0
  15. package/dist/hooks/codex-transform.js +239 -0
  16. package/dist/hooks/codex-transform.js.map +1 -0
  17. package/dist/hooks/codex.d.ts +1 -0
  18. package/dist/hooks/codex.js +7 -0
  19. package/dist/hooks/codex.js.map +1 -0
  20. package/dist/hooks/opencode-transform.d.ts +1 -0
  21. package/dist/hooks/opencode-transform.js +198 -0
  22. package/dist/hooks/opencode-transform.js.map +1 -0
  23. package/dist/hooks/opencode.d.ts +1 -0
  24. package/dist/hooks/opencode.js +7 -0
  25. package/dist/hooks/opencode.js.map +1 -0
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.js +2 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/lib/buffer.d.ts +10 -0
  30. package/dist/lib/buffer.js +55 -0
  31. package/dist/lib/buffer.js.map +1 -0
  32. package/dist/lib/collector.d.ts +31 -0
  33. package/dist/lib/collector.js +266 -0
  34. package/dist/lib/collector.js.map +1 -0
  35. package/dist/lib/config.d.ts +24 -0
  36. package/dist/lib/config.js +63 -0
  37. package/dist/lib/config.js.map +1 -0
  38. package/dist/lib/io.d.ts +2 -0
  39. package/dist/lib/io.js +34 -0
  40. package/dist/lib/io.js.map +1 -0
  41. package/dist/lib/redaction.d.ts +13 -0
  42. package/dist/lib/redaction.js +131 -0
  43. package/dist/lib/redaction.js.map +1 -0
  44. package/package.json +40 -0
package/README.md ADDED
@@ -0,0 +1,123 @@
1
+ # HarnessKit Collector
2
+
3
+ CLI for forwarding ingestion events to the API.
4
+
5
+ ## Quickstart
6
+
7
+ Build the CLI:
8
+
9
+ ```bash
10
+ pnpm --filter @harnesskit/collector build
11
+ ```
12
+
13
+ One-time install (writes `~/.harnesskit/config.json` and enables the OpenCode plugin):
14
+
15
+ ```bash
16
+ curl -sSL http://localhost:3001/install/opencode | bash -s -- \
17
+ --api-key $API_KEY \
18
+ --project-id $PROJECT_ID
19
+ ```
20
+
21
+ Claude Code install (writes config and adds hooks to `~/.claude/settings.json`):
22
+
23
+ ```bash
24
+ curl -sSL http://localhost:3001/install/claude-code | bash -s -- \
25
+ --api-key $API_KEY \
26
+ --project-id $PROJECT_ID
27
+ ```
28
+
29
+ Send events (JSON array or NDJSON):
30
+
31
+ ```bash
32
+ cat events.json | pnpm --filter @harnesskit/collector dev -- ingest
33
+ ```
34
+
35
+ Hook usage (streams JSON array or NDJSON):
36
+
37
+ ```bash
38
+ harnesskit-opencode-hook
39
+ ```
40
+
41
+ From this repo without installing a global bin:
42
+
43
+ ```bash
44
+ pnpm --filter @harnesskit/collector exec harnesskit-opencode-hook
45
+ ```
46
+
47
+ Environment variables:
48
+
49
+ - `HARNESSKIT_API_URL`
50
+ - `HARNESSKIT_API_KEY`
51
+ - `HARNESSKIT_PROJECT_ID`
52
+ - `HARNESSKIT_TOOL_SOURCE`
53
+ - `HARNESSKIT_VERSION`
54
+ - `HARNESSKIT_BUFFER_PATH`
55
+ - `HARNESSKIT_MAX_RETRIES`
56
+ - `HARNESSKIT_RETRY_BASE_MS`
57
+ - `HARNESSKIT_RETRY_MAX_MS`
58
+ - `HARNESSKIT_REDACT_ALLOWLIST`
59
+ - `HARNESSKIT_REDACT_DENYLIST`
60
+ - `HARNESSKIT_REDACT_KEYS`
61
+ - `HARNESSKIT_REDACT_MAX_STRING`
62
+ - `HARNESSKIT_REDACT_MAX_DEPTH`
63
+
64
+ Config file: `~/.harnesskit/config.json`
65
+
66
+ ```json
67
+ {
68
+ "apiUrl": "http://localhost:3001",
69
+ "apiKey": "...",
70
+ "projectId": "...",
71
+ "toolSource": "claude_code"
72
+ }
73
+ ```
74
+
75
+ ## Hook Wrappers
76
+
77
+ The hook entrypoints set `tool_source` when it is missing on events:
78
+
79
+ - `harnesskit-claude-hook`
80
+ - `harnesskit-codex-hook`
81
+ - `harnesskit-opencode-hook`
82
+
83
+ Pipe event JSON into the hook binary and it will forward to the API.
84
+
85
+ OpenCode example (pipe the OpenCode JSON event stream):
86
+
87
+ ```bash
88
+ opencode <your args> | harnesskit-opencode-hook
89
+ ```
90
+
91
+ ## OpenCode plugin (recommended)
92
+
93
+ OpenCode can load an npm plugin that streams events directly to HarnessKit.
94
+ The installer above adds it automatically. To do it manually, add this to your
95
+ OpenCode config (`~/.config/opencode/opencode.json`):
96
+
97
+ ```json
98
+ {
99
+ "$schema": "https://opencode.ai/config.json",
100
+ "plugin": ["@harnesskit/opencode"]
101
+ }
102
+ ```
103
+
104
+ Make sure `~/.harnesskit/config.json` contains `apiUrl`, `apiKey`, and `projectId`,
105
+ or export `HARNESSKIT_API_URL`, `HARNESSKIT_API_KEY`, and `HARNESSKIT_PROJECT_ID`.
106
+
107
+ ## Buffering & Retry
108
+
109
+ When the API is unavailable, batches are buffered to disk and retried on the next run.
110
+ The default buffer file is `~/.harnesskit/queue.ndjson`.
111
+
112
+ ## Redaction
113
+
114
+ Client-side redaction applies to action payloads before sending. It can:
115
+
116
+ - Denylist or allowlist file paths
117
+ - Redact values by key names (e.g., secrets/tokens)
118
+ - Truncate long strings and deep payloads
119
+ Print redacted events without sending:
120
+
121
+ ```bash
122
+ pnpm --filter @harnesskit/collector dev -- --file events.json --dry-run --print-redacted
123
+ ```
@@ -0,0 +1,6 @@
1
+ import { type CollectorOptions } from './lib/collector.js';
2
+ type TransformFn = (input: unknown[]) => unknown[];
3
+ export declare const runCollectorCli: (defaults?: Partial<CollectorOptions> & {
4
+ transform?: TransformFn;
5
+ }) => Promise<void>;
6
+ export {};
@@ -0,0 +1,232 @@
1
+ import { loadConfig, resolveConfig, writeConfig } from './lib/config.js';
2
+ import { runCollector } from './lib/collector.js';
3
+ import { parseInput, readInput } from './lib/io.js';
4
+ const parseArgs = (argv) => {
5
+ const args = {
6
+ command: argv[0] === 'hook' ? 'hook' : argv[0] === 'init' ? 'init' : 'ingest',
7
+ mode: 'auto',
8
+ batchSize: 50,
9
+ dryRun: false,
10
+ failOnError: false,
11
+ force: false,
12
+ };
13
+ const addList = (existing, value) => {
14
+ if (!value) {
15
+ return existing;
16
+ }
17
+ const items = value
18
+ .split(',')
19
+ .map((item) => item.trim())
20
+ .filter(Boolean);
21
+ return existing ? [...existing, ...items] : items;
22
+ };
23
+ const startIndex = ['hook', 'ingest', 'init'].includes(argv[0] ?? '') ? 1 : 0;
24
+ for (let index = startIndex; index < argv.length; index += 1) {
25
+ const key = argv[index];
26
+ const value = argv[index + 1];
27
+ if (!key || !key.startsWith('--')) {
28
+ continue;
29
+ }
30
+ switch (key) {
31
+ case '--api-url':
32
+ args.apiUrl = value;
33
+ index += 1;
34
+ break;
35
+ case '--api-key':
36
+ args.apiKey = value;
37
+ index += 1;
38
+ break;
39
+ case '--project-id':
40
+ args.projectId = value;
41
+ index += 1;
42
+ break;
43
+ case '--tool-source':
44
+ args.toolSource = value;
45
+ index += 1;
46
+ break;
47
+ case '--version':
48
+ args.version = value;
49
+ index += 1;
50
+ break;
51
+ case '--file':
52
+ args.file = value;
53
+ index += 1;
54
+ break;
55
+ case '--mode':
56
+ args.mode = value ?? 'auto';
57
+ index += 1;
58
+ break;
59
+ case '--batch-size':
60
+ args.batchSize = value ? Number(value) : 50;
61
+ index += 1;
62
+ break;
63
+ case '--buffer-path':
64
+ args.bufferPath = value;
65
+ index += 1;
66
+ break;
67
+ case '--max-retries':
68
+ args.maxRetries = value ? Number(value) : undefined;
69
+ index += 1;
70
+ break;
71
+ case '--retry-base-ms':
72
+ args.retryBaseMs = value ? Number(value) : undefined;
73
+ index += 1;
74
+ break;
75
+ case '--retry-max-ms':
76
+ args.retryMaxMs = value ? Number(value) : undefined;
77
+ index += 1;
78
+ break;
79
+ case '--redact-allowlist':
80
+ args.redactAllowlist = addList(args.redactAllowlist, value);
81
+ index += 1;
82
+ break;
83
+ case '--redact-denylist':
84
+ args.redactDenylist = addList(args.redactDenylist, value);
85
+ index += 1;
86
+ break;
87
+ case '--redact-key':
88
+ args.redactKeys = addList(args.redactKeys, value);
89
+ index += 1;
90
+ break;
91
+ case '--redact-max-string':
92
+ args.redactMaxString = value ? Number(value) : undefined;
93
+ index += 1;
94
+ break;
95
+ case '--redact-max-depth':
96
+ args.redactMaxDepth = value ? Number(value) : undefined;
97
+ index += 1;
98
+ break;
99
+ case '--print-redacted':
100
+ args.printRedacted = true;
101
+ break;
102
+ case '--dry-run':
103
+ args.dryRun = true;
104
+ break;
105
+ case '--fail-on-error':
106
+ args.failOnError = true;
107
+ break;
108
+ case '--force':
109
+ args.force = true;
110
+ break;
111
+ case '--config':
112
+ args.configPath = value;
113
+ index += 1;
114
+ break;
115
+ case '--help':
116
+ printHelp();
117
+ process.exit(0);
118
+ default:
119
+ break;
120
+ }
121
+ }
122
+ return args;
123
+ };
124
+ const printHelp = () => {
125
+ console.log(`
126
+ Usage:
127
+ harnesskit-collector ingest [options]
128
+ harnesskit-collector hook [options]
129
+ harnesskit-collector init [options]
130
+
131
+ Options:
132
+ --api-url <url> API base URL
133
+ --api-key <key> API key
134
+ --project-id <id> Project ID (applied if missing on events)
135
+ --tool-source <tool> claude_code | codex | opencode
136
+ --version <v> Event version (default v1)
137
+ --file <path> Read events from file (JSON array or NDJSON)
138
+ --mode <mode> auto | sessions | actions
139
+ --batch-size <n> Batch size (default 50)
140
+ --buffer-path <path> Buffer file path (default ~/.harnesskit/queue.ndjson)
141
+ --max-retries <n> Retry attempts for API calls (default 3)
142
+ --retry-base-ms <n> Base backoff delay in ms (default 500)
143
+ --retry-max-ms <n> Max backoff delay in ms (default 5000)
144
+ --redact-allowlist <pattern[,..]> Allowlist file path patterns
145
+ --redact-denylist <pattern[,..]> Denylist file path patterns
146
+ --redact-key <key[,..]> Keys to redact in payloads
147
+ --redact-max-string <n> Max string length before truncation
148
+ --redact-max-depth <n> Max payload depth before truncation
149
+ --print-redacted Print redacted events to stdout
150
+ --dry-run Validate only, no network calls
151
+ --fail-on-error Exit with code 1 on validation errors
152
+ --config <path> Config file path (default ~/.harnesskit/config.json)
153
+ --force Overwrite config file when using init
154
+ --help Show help
155
+ `);
156
+ };
157
+ export const runCollectorCli = async (defaults) => {
158
+ const args = parseArgs(process.argv.slice(2));
159
+ const config = resolveConfig(await loadConfig(args.configPath));
160
+ if (args.command === 'init') {
161
+ const nextConfig = {
162
+ apiUrl: args.apiUrl ?? config.apiUrl,
163
+ apiKey: args.apiKey ?? config.apiKey,
164
+ projectId: args.projectId ?? config.projectId,
165
+ toolSource: args.toolSource ?? config.toolSource,
166
+ version: args.version ?? config.version,
167
+ bufferPath: args.bufferPath ?? config.bufferPath,
168
+ maxRetries: args.maxRetries ?? config.maxRetries,
169
+ retryBaseMs: args.retryBaseMs ?? config.retryBaseMs,
170
+ retryMaxMs: args.retryMaxMs ?? config.retryMaxMs,
171
+ redactAllowlist: args.redactAllowlist ?? config.redactAllowlist,
172
+ redactDenylist: args.redactDenylist ?? config.redactDenylist,
173
+ redactKeys: args.redactKeys ?? config.redactKeys,
174
+ redactMaxString: args.redactMaxString ?? config.redactMaxString,
175
+ redactMaxDepth: args.redactMaxDepth ?? config.redactMaxDepth,
176
+ };
177
+ if (!nextConfig.apiUrl || !nextConfig.apiKey) {
178
+ throw new Error('Missing apiUrl or apiKey. Provide --api-url and --api-key for init.');
179
+ }
180
+ const savedPath = await writeConfig(nextConfig, args.configPath, { force: args.force });
181
+ console.log(`Config saved to ${savedPath}`);
182
+ return;
183
+ }
184
+ const merged = {
185
+ apiUrl: args.apiUrl ?? config.apiUrl ?? defaults?.apiUrl,
186
+ apiKey: args.apiKey ?? config.apiKey ?? defaults?.apiKey,
187
+ projectId: args.projectId ?? config.projectId ?? defaults?.projectId,
188
+ toolSource: args.toolSource ?? config.toolSource ?? defaults?.toolSource,
189
+ version: args.version ?? config.version ?? defaults?.version,
190
+ bufferPath: args.bufferPath ?? config.bufferPath ?? defaults?.bufferPath,
191
+ maxRetries: args.maxRetries ?? config.maxRetries ?? defaults?.maxRetries,
192
+ retryBaseMs: args.retryBaseMs ?? config.retryBaseMs ?? defaults?.retryBaseMs,
193
+ retryMaxMs: args.retryMaxMs ?? config.retryMaxMs ?? defaults?.retryMaxMs,
194
+ redaction: {
195
+ allowlistPaths: args.redactAllowlist ?? config.redactAllowlist,
196
+ denylistPaths: args.redactDenylist ?? config.redactDenylist,
197
+ redactKeys: args.redactKeys ?? config.redactKeys,
198
+ maxStringLength: args.redactMaxString ?? config.redactMaxString,
199
+ maxDepth: args.redactMaxDepth ?? config.redactMaxDepth,
200
+ },
201
+ printRedacted: args.printRedacted ?? defaults?.printRedacted ?? false,
202
+ mode: args.mode ?? defaults?.mode ?? 'auto',
203
+ batchSize: args.batchSize ?? defaults?.batchSize ?? 50,
204
+ dryRun: args.dryRun ?? defaults?.dryRun ?? false,
205
+ failOnError: args.failOnError ?? defaults?.failOnError ?? false,
206
+ };
207
+ const input = await readInput(args.file);
208
+ const events = parseInput(input);
209
+ const transformed = defaults?.transform ? defaults.transform(events) : events;
210
+ const result = await runCollector(transformed, merged);
211
+ if (merged.printRedacted && result.events?.length) {
212
+ result.events.forEach((event) => {
213
+ console.log(JSON.stringify(event));
214
+ });
215
+ }
216
+ if (result.errors.length) {
217
+ result.errors.forEach((error) => {
218
+ console.error(`[${error.index}] ${error.message}`);
219
+ });
220
+ if (merged.failOnError) {
221
+ process.exit(1);
222
+ }
223
+ }
224
+ const summary = `accepted=${result.accepted} rejected=${result.rejected}`;
225
+ if (merged.printRedacted) {
226
+ console.error(summary);
227
+ }
228
+ else {
229
+ console.log(summary);
230
+ }
231
+ };
232
+ //# sourceMappingURL=cli-lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-lib.js","sourceRoot":"","sources":["../src/cli-lib.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,6 @@
1
+ import { runCollectorCli } from './cli-lib.js';
2
+ runCollectorCli().catch((error) => {
3
+ console.error(error instanceof Error ? error.message : error);
4
+ process.exit(1);
5
+ });
6
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAChC,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const transformClaudeCodeEvents: (input: unknown[]) => unknown[];