@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
@@ -0,0 +1,24 @@
1
+ export type CollectorConfig = {
2
+ apiUrl?: string;
3
+ apiKey?: string;
4
+ projectId?: string;
5
+ toolSource?: string;
6
+ version?: string;
7
+ bufferPath?: string;
8
+ maxRetries?: number;
9
+ retryBaseMs?: number;
10
+ retryMaxMs?: number;
11
+ redactAllowlist?: string[];
12
+ redactDenylist?: string[];
13
+ redactKeys?: string[];
14
+ redactMaxString?: number;
15
+ redactMaxDepth?: number;
16
+ };
17
+ export declare const defaultConfigPath: () => string;
18
+ export declare const loadConfig: (path?: string) => Promise<CollectorConfig>;
19
+ type WriteConfigOptions = {
20
+ force?: boolean;
21
+ };
22
+ export declare const writeConfig: (config: CollectorConfig, path?: string, options?: WriteConfigOptions) => Promise<string>;
23
+ export declare const resolveConfig: (config: CollectorConfig) => CollectorConfig;
24
+ export {};
@@ -0,0 +1,63 @@
1
+ import { mkdir, readFile, stat, writeFile } from 'node:fs/promises';
2
+ import { homedir } from 'node:os';
3
+ import { dirname, resolve } from 'node:path';
4
+ export const defaultConfigPath = () => resolve(homedir(), '.harnesskit', 'config.json');
5
+ export const loadConfig = async (path) => {
6
+ const configPath = path ?? defaultConfigPath();
7
+ try {
8
+ const raw = await readFile(configPath, 'utf8');
9
+ return JSON.parse(raw);
10
+ }
11
+ catch {
12
+ return {};
13
+ }
14
+ };
15
+ export const writeConfig = async (config, path, options) => {
16
+ const configPath = path ?? defaultConfigPath();
17
+ await mkdir(dirname(configPath), { recursive: true });
18
+ if (!options?.force) {
19
+ try {
20
+ await stat(configPath);
21
+ throw new Error(`Config already exists at ${configPath}. Use --force to overwrite.`);
22
+ }
23
+ catch (error) {
24
+ const code = error && typeof error === 'object' ? error.code : null;
25
+ if (code !== 'ENOENT') {
26
+ throw error;
27
+ }
28
+ }
29
+ }
30
+ const payload = JSON.stringify(config, null, 2);
31
+ await writeFile(configPath, `${payload}\n`, 'utf8');
32
+ return configPath;
33
+ };
34
+ const parseNumber = (value) => {
35
+ if (!value) {
36
+ return undefined;
37
+ }
38
+ const parsed = Number(value);
39
+ return Number.isFinite(parsed) ? parsed : undefined;
40
+ };
41
+ export const resolveConfig = (config) => ({
42
+ apiUrl: process.env.HARNESSKIT_API_URL ?? config.apiUrl,
43
+ apiKey: process.env.HARNESSKIT_API_KEY ?? config.apiKey,
44
+ projectId: process.env.HARNESSKIT_PROJECT_ID ?? config.projectId,
45
+ toolSource: process.env.HARNESSKIT_TOOL_SOURCE ?? config.toolSource,
46
+ version: process.env.HARNESSKIT_VERSION ?? config.version,
47
+ bufferPath: process.env.HARNESSKIT_BUFFER_PATH ?? config.bufferPath,
48
+ maxRetries: parseNumber(process.env.HARNESSKIT_MAX_RETRIES) ?? config.maxRetries,
49
+ retryBaseMs: parseNumber(process.env.HARNESSKIT_RETRY_BASE_MS) ?? config.retryBaseMs,
50
+ retryMaxMs: parseNumber(process.env.HARNESSKIT_RETRY_MAX_MS) ?? config.retryMaxMs,
51
+ redactAllowlist: process.env.HARNESSKIT_REDACT_ALLOWLIST
52
+ ? process.env.HARNESSKIT_REDACT_ALLOWLIST.split(',').map((item) => item.trim())
53
+ : config.redactAllowlist,
54
+ redactDenylist: process.env.HARNESSKIT_REDACT_DENYLIST
55
+ ? process.env.HARNESSKIT_REDACT_DENYLIST.split(',').map((item) => item.trim())
56
+ : config.redactDenylist,
57
+ redactKeys: process.env.HARNESSKIT_REDACT_KEYS
58
+ ? process.env.HARNESSKIT_REDACT_KEYS.split(',').map((item) => item.trim())
59
+ : config.redactKeys,
60
+ redactMaxString: parseNumber(process.env.HARNESSKIT_REDACT_MAX_STRING) ?? config.redactMaxString,
61
+ redactMaxDepth: parseNumber(process.env.HARNESSKIT_REDACT_MAX_DEPTH) ?? config.redactMaxDepth,
62
+ });
63
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const readInput: (filePath?: string) => Promise<string>;
2
+ export declare const parseInput: (input: string) => unknown[];
package/dist/lib/io.js ADDED
@@ -0,0 +1,34 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ export const readInput = async (filePath) => {
3
+ if (filePath) {
4
+ return readFile(filePath, 'utf8');
5
+ }
6
+ if (process.stdin.isTTY) {
7
+ throw new Error('No input provided. Use --file or pipe JSON to stdin.');
8
+ }
9
+ process.stdin.setEncoding('utf8');
10
+ let data = '';
11
+ for await (const chunk of process.stdin) {
12
+ data += chunk;
13
+ }
14
+ return data;
15
+ };
16
+ export const parseInput = (input) => {
17
+ const trimmed = input.trim();
18
+ if (!trimmed) {
19
+ return [];
20
+ }
21
+ if (trimmed.startsWith('[')) {
22
+ const parsed = JSON.parse(trimmed);
23
+ if (!Array.isArray(parsed)) {
24
+ throw new Error('Expected a JSON array.');
25
+ }
26
+ return parsed;
27
+ }
28
+ return trimmed
29
+ .split(/\r?\n/)
30
+ .map((line) => line.trim())
31
+ .filter(Boolean)
32
+ .map((line) => JSON.parse(line));
33
+ };
34
+ //# sourceMappingURL=io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"io.js","sourceRoot":"","sources":["../../src/lib/io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,QAAiB,EAAmB,EAAE;IACpE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,IAAI,KAAK,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAa,EAAE;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,OAAO;SACX,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { IngestionEvent } from '@harnesskit/shared';
2
+ export type RedactionConfig = {
3
+ allowlistPaths?: string[];
4
+ denylistPaths?: string[];
5
+ redactKeys?: string[];
6
+ maxStringLength?: number;
7
+ maxDepth?: number;
8
+ };
9
+ export declare const redactEvents: (events: IngestionEvent[], config: RedactionConfig) => {
10
+ events: IngestionEvent[];
11
+ truncated: boolean;
12
+ redacted: boolean;
13
+ };
@@ -0,0 +1,131 @@
1
+ const defaultDenylist = [
2
+ '**/.env',
3
+ '**/.env.*',
4
+ '**/.ssh/**',
5
+ '**/.gnupg/**',
6
+ '**/.aws/**',
7
+ '**/id_rsa',
8
+ '**/id_ed25519',
9
+ ];
10
+ const defaultRedactKeys = [
11
+ 'api_key',
12
+ 'apikey',
13
+ 'authorization',
14
+ 'access_token',
15
+ 'refresh_token',
16
+ 'session_token',
17
+ 'secret',
18
+ 'password',
19
+ 'env',
20
+ 'env_var',
21
+ 'env_vars',
22
+ 'prompt',
23
+ 'cwd',
24
+ 'transcript_path',
25
+ 'transcriptpath',
26
+ ];
27
+ const normalizePath = (value) => value.replace(/\\/g, '/');
28
+ const globToRegExp = (pattern) => {
29
+ const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
30
+ const regex = escaped.replace(/\*\*/g, '.*').replace(/\*/g, '[^/]*');
31
+ return new RegExp(`^${regex}$`, 'i');
32
+ };
33
+ const buildMatchers = (patterns) => patterns.map((pattern) => globToRegExp(pattern));
34
+ const matchesAny = (value, patterns) => {
35
+ if (!patterns.length) {
36
+ return false;
37
+ }
38
+ const normalized = normalizePath(value);
39
+ return buildMatchers(patterns).some((pattern) => pattern.test(normalized));
40
+ };
41
+ const shouldRedactPath = (path, config) => {
42
+ const denylist = config.denylistPaths ?? defaultDenylist;
43
+ const allowlist = config.allowlistPaths ?? [];
44
+ if (matchesAny(path, denylist)) {
45
+ return true;
46
+ }
47
+ if (allowlist.length > 0 && !matchesAny(path, allowlist)) {
48
+ return true;
49
+ }
50
+ return false;
51
+ };
52
+ const shouldRedactKey = (key, config) => {
53
+ const keys = config.redactKeys ?? defaultRedactKeys;
54
+ const lowered = key.toLowerCase();
55
+ return keys.some((entry) => lowered.includes(entry.toLowerCase()));
56
+ };
57
+ const redactValue = (value, config, state, depth, key) => {
58
+ const maxDepth = config.maxDepth ?? 6;
59
+ if (depth > maxDepth) {
60
+ state.truncated = true;
61
+ return '[truncated]';
62
+ }
63
+ if (key && shouldRedactKey(key, config)) {
64
+ state.redacted = true;
65
+ return '[redacted]';
66
+ }
67
+ if (typeof value === 'string') {
68
+ if (key && (key === 'file_path' || key === 'filePath' || key === 'path')) {
69
+ if (shouldRedactPath(value, config)) {
70
+ state.redacted = true;
71
+ return '[redacted]';
72
+ }
73
+ }
74
+ const maxLen = config.maxStringLength ?? 2000;
75
+ if (value.length > maxLen) {
76
+ state.truncated = true;
77
+ return `${value.slice(0, maxLen)}…`;
78
+ }
79
+ return value;
80
+ }
81
+ if (Array.isArray(value)) {
82
+ return value.map((item) => redactValue(item, config, state, depth + 1));
83
+ }
84
+ if (value && typeof value === 'object') {
85
+ const record = value;
86
+ const output = {};
87
+ Object.keys(record).forEach((entry) => {
88
+ output[entry] = redactValue(record[entry], config, state, depth + 1, entry);
89
+ });
90
+ return output;
91
+ }
92
+ return value;
93
+ };
94
+ export const redactEvents = (events, config) => {
95
+ let truncated = false;
96
+ let redacted = false;
97
+ const nextEvents = events.map((event) => {
98
+ if (event.event_type !== 'action') {
99
+ return event;
100
+ }
101
+ const state = { truncated: false, redacted: false };
102
+ const payload = event.payload;
103
+ const requestPayload = payload.request_payload
104
+ ? redactValue(payload.request_payload, config, state, 0, 'request_payload')
105
+ : payload.request_payload;
106
+ const responsePayload = payload.response_payload
107
+ ? redactValue(payload.response_payload, config, state, 0, 'response_payload')
108
+ : payload.response_payload;
109
+ const errorMessage = payload.error_message
110
+ ? redactValue(payload.error_message, config, state, 0, 'error_message')
111
+ : payload.error_message;
112
+ const filePath = payload.file_path
113
+ ? redactValue(payload.file_path, config, state, 0, 'file_path')
114
+ : payload.file_path;
115
+ truncated = truncated || state.truncated;
116
+ redacted = redacted || state.redacted;
117
+ return {
118
+ ...event,
119
+ payload: {
120
+ ...payload,
121
+ request_payload: requestPayload,
122
+ response_payload: responsePayload,
123
+ error_message: errorMessage,
124
+ file_path: filePath,
125
+ payload_truncated: payload.payload_truncated || state.truncated,
126
+ },
127
+ };
128
+ });
129
+ return { events: nextEvents, truncated, redacted };
130
+ };
131
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/lib/redaction.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@harnesskit/collector",
3
+ "private": false,
4
+ "version": "0.1.0",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "default": "./dist/index.js"
10
+ }
11
+ },
12
+ "main": "dist/index.js",
13
+ "types": "dist/index.d.ts",
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "bin": {
21
+ "harnesskit-collector": "dist/cli.js",
22
+ "harnesskit-claude-hook": "dist/hooks/claude-code.js",
23
+ "harnesskit-codex-hook": "dist/hooks/codex.js",
24
+ "harnesskit-opencode-hook": "dist/hooks/opencode.js"
25
+ },
26
+ "dependencies": {
27
+ "@harnesskit/shared": "^0.1.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^20.11.30",
31
+ "tsx": "^4.21.0"
32
+ },
33
+ "scripts": {
34
+ "build": "tsc -p tsconfig.build.json",
35
+ "dev": "tsx src/cli.ts",
36
+ "lint": "eslint \"src/**/*.{ts,tsx}\"",
37
+ "typecheck": "tsc -p tsconfig.json --noEmit",
38
+ "test": "node -e \"\""
39
+ }
40
+ }