promptkaizen-agent 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 (70) hide show
  1. package/README.md +131 -0
  2. package/dist/batcher.d.ts +25 -0
  3. package/dist/batcher.d.ts.map +1 -0
  4. package/dist/batcher.js +117 -0
  5. package/dist/batcher.js.map +1 -0
  6. package/dist/cli/init.d.ts +12 -0
  7. package/dist/cli/init.d.ts.map +1 -0
  8. package/dist/cli/init.js +138 -0
  9. package/dist/cli/init.js.map +1 -0
  10. package/dist/cli/install-launchd.d.ts +17 -0
  11. package/dist/cli/install-launchd.d.ts.map +1 -0
  12. package/dist/cli/install-launchd.js +128 -0
  13. package/dist/cli/install-launchd.js.map +1 -0
  14. package/dist/cli/start.d.ts +8 -0
  15. package/dist/cli/start.d.ts.map +1 -0
  16. package/dist/cli/start.js +170 -0
  17. package/dist/cli/start.js.map +1 -0
  18. package/dist/cli/status.d.ts +12 -0
  19. package/dist/cli/status.d.ts.map +1 -0
  20. package/dist/cli/status.js +172 -0
  21. package/dist/cli/status.js.map +1 -0
  22. package/dist/cli/uninstall-launchd.d.ts +8 -0
  23. package/dist/cli/uninstall-launchd.d.ts.map +1 -0
  24. package/dist/cli/uninstall-launchd.js +55 -0
  25. package/dist/cli/uninstall-launchd.js.map +1 -0
  26. package/dist/config.d.ts +114 -0
  27. package/dist/config.d.ts.map +1 -0
  28. package/dist/config.js +78 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/index.d.ts +3 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +71 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/logger.d.ts +7 -0
  35. package/dist/logger.d.ts.map +1 -0
  36. package/dist/logger.js +33 -0
  37. package/dist/logger.js.map +1 -0
  38. package/dist/offset-store.d.ts +22 -0
  39. package/dist/offset-store.d.ts.map +1 -0
  40. package/dist/offset-store.js +76 -0
  41. package/dist/offset-store.js.map +1 -0
  42. package/dist/parser.d.ts +20 -0
  43. package/dist/parser.d.ts.map +1 -0
  44. package/dist/parser.js +118 -0
  45. package/dist/parser.js.map +1 -0
  46. package/dist/pii-masker.d.ts +19 -0
  47. package/dist/pii-masker.d.ts.map +1 -0
  48. package/dist/pii-masker.js +136 -0
  49. package/dist/pii-masker.js.map +1 -0
  50. package/dist/sender.d.ts +21 -0
  51. package/dist/sender.d.ts.map +1 -0
  52. package/dist/sender.js +69 -0
  53. package/dist/sender.js.map +1 -0
  54. package/dist/source.d.ts +3 -0
  55. package/dist/source.d.ts.map +1 -0
  56. package/dist/source.js +31 -0
  57. package/dist/source.js.map +1 -0
  58. package/dist/types.d.ts +20 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +3 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/version.d.ts +2 -0
  63. package/dist/version.d.ts.map +1 -0
  64. package/dist/version.js +6 -0
  65. package/dist/version.js.map +1 -0
  66. package/dist/watcher.d.ts +22 -0
  67. package/dist/watcher.d.ts.map +1 -0
  68. package/dist/watcher.js +63 -0
  69. package/dist/watcher.js.map +1 -0
  70. package/package.json +39 -0
package/dist/sender.js ADDED
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Sender = void 0;
4
+ const logger_1 = require("./logger");
5
+ class Sender {
6
+ opts;
7
+ maxRetries;
8
+ initialBackoffMs;
9
+ fetchImpl;
10
+ constructor(opts) {
11
+ this.opts = opts;
12
+ this.maxRetries = opts.maxRetries ?? 3;
13
+ this.initialBackoffMs = opts.initialBackoffMs ?? 1000;
14
+ this.fetchImpl = opts.fetchImpl ?? globalThis.fetch;
15
+ }
16
+ async send(observations) {
17
+ const batch = {
18
+ apiKey: this.opts.apiKey,
19
+ agentVersion: this.opts.agentVersion,
20
+ observations,
21
+ };
22
+ const body = JSON.stringify(batch);
23
+ let attempt = 0;
24
+ let lastError = null;
25
+ while (attempt <= this.maxRetries) {
26
+ try {
27
+ const res = await this.fetchImpl(this.opts.apiEndpoint, {
28
+ method: 'POST',
29
+ headers: {
30
+ 'Content-Type': 'application/json',
31
+ Authorization: `Bearer ${this.opts.apiKey}`,
32
+ },
33
+ body,
34
+ });
35
+ if (res.ok) {
36
+ const ack = (await res.json().catch(() => ({ received: observations.length, timestamp: new Date().toISOString() })));
37
+ return ack;
38
+ }
39
+ if (res.status >= 400 && res.status < 500) {
40
+ // 4xx は即 fail (apiKey 無効、payload 不正など)
41
+ const text = await res.text().catch(() => '');
42
+ throw new Error(`POST failed ${res.status}: ${text.slice(0, 200)}`);
43
+ }
44
+ // 5xx → リトライ
45
+ lastError = new Error(`POST ${res.status}`);
46
+ }
47
+ catch (e) {
48
+ // network error → リトライ
49
+ lastError = e;
50
+ // ただし「4xx として throw した」場合はリトライしない (上の throw)
51
+ if (lastError.message.startsWith('POST failed 4'))
52
+ throw lastError;
53
+ }
54
+ attempt++;
55
+ if (attempt > this.maxRetries)
56
+ break;
57
+ const backoff = this.initialBackoffMs * Math.pow(2, attempt - 1);
58
+ logger_1.logger.warn('Sender retry', {
59
+ attempt,
60
+ backoffMs: backoff,
61
+ error: lastError?.message,
62
+ });
63
+ await new Promise((r) => setTimeout(r, backoff));
64
+ }
65
+ throw lastError ?? new Error('Sender exhausted retries');
66
+ }
67
+ }
68
+ exports.Sender = Sender;
69
+ //# sourceMappingURL=sender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sender.js","sourceRoot":"","sources":["../src/sender.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ObservationSource } from './types';
2
+ export declare function detectSource(filepath: string): ObservationSource;
3
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAiBhD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAMhE"}
package/dist/source.js ADDED
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectSource = detectSource;
7
+ const path_1 = __importDefault(require("path"));
8
+ // =============================================
9
+ // source 判定
10
+ // =============================================
11
+ //
12
+ // agent は Claude Code (~/.claude/projects/**/*.jsonl) と
13
+ // OpenAI Codex CLI (~/.codex/sessions/**/rollout-*.jsonl) の両方を監視する。
14
+ // entry がどちらのツール由来かを filepath から判定する。
15
+ //
16
+ // 判定基準 (順に評価):
17
+ // 1. ファイル名が `rollout-` で始まる → codex (Codex の rollout JSONL 命名)
18
+ // 2. パスに `/.codex/` を含む (CODEX_HOME 既定) → codex
19
+ // 3. それ以外 → claude_code (既定)
20
+ //
21
+ // CODEX_HOME を変更しても rollout ファイル名は不変なので (1) で拾える。
22
+ function detectSource(filepath) {
23
+ const normalized = filepath.replace(/\\/g, '/');
24
+ const base = path_1.default.basename(normalized);
25
+ if (base.startsWith('rollout-'))
26
+ return 'codex';
27
+ if (normalized.includes('/.codex/'))
28
+ return 'codex';
29
+ return 'claude_code';
30
+ }
31
+ //# sourceMappingURL=source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":";;;;;AAkBA,oCAMC;AAxBD,gDAAuB;AAGvB,gDAAgD;AAChD,YAAY;AACZ,gDAAgD;AAChD,EAAE;AACF,wDAAwD;AACxD,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,eAAe;AACf,wEAAwE;AACxE,kDAAkD;AAClD,gEAAgE;AAChE,EAAE;AACF,kDAAkD;AAElD,SAAgB,YAAY,CAAC,QAAgB;IAC3C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC/C,MAAM,IAAI,GAAG,cAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IACtC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,OAAO,CAAA;IAC/C,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,OAAO,CAAA;IACnD,OAAO,aAAa,CAAA;AACtB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /** 観測対象の AI コーディングツール種別。filepath から判定する。 */
2
+ export type ObservationSource = 'claude_code' | 'codex';
3
+ export interface ParsedEntry {
4
+ filepath: string;
5
+ lineNumber: number;
6
+ raw: unknown;
7
+ parsedAt: string;
8
+ /** entry の発生元ツール。Claude Code / OpenAI Codex CLI を区別する。 */
9
+ source: ObservationSource;
10
+ }
11
+ export interface ObservationBatch {
12
+ apiKey: string;
13
+ agentVersion: string;
14
+ observations: ParsedEntry[];
15
+ }
16
+ export interface BatchAck {
17
+ received: number;
18
+ timestamp: string;
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,OAAO,CAAA;AAEvD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,OAAO,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,0DAA0D;IAC1D,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,WAAW,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const AGENT_VERSION = "0.1.0";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,UAAU,CAAA"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AGENT_VERSION = void 0;
4
+ // agent/package.json の version と同期。bump 時に手動更新。
5
+ exports.AGENT_VERSION = '0.1.0';
6
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,gDAAgD;AACnC,QAAA,aAAa,GAAG,OAAO,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { EventEmitter } from 'events';
2
+ export interface FileChangeEvent {
3
+ filepath: string;
4
+ type: 'add' | 'change';
5
+ }
6
+ export interface LogWatcherOptions {
7
+ watchPaths: string[];
8
+ exclude?: string[];
9
+ /** Phase B 推奨: 500ms。entry 間隔 35% が 500ms 以内に分布するので collapse 効果あり */
10
+ stabilityThresholdMs?: number;
11
+ /** macOS fsevents なら 100ms で十分 */
12
+ pollIntervalMs?: number;
13
+ }
14
+ export declare class LogWatcher extends EventEmitter {
15
+ private watcher;
16
+ private readonly opts;
17
+ constructor(opts: LogWatcherOptions);
18
+ start(): void;
19
+ stop(): Promise<void>;
20
+ private handle;
21
+ }
22
+ //# sourceMappingURL=watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAGrC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,qEAAqE;IACrE,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;gBAEtC,IAAI,EAAE,iBAAiB;IAUnC,KAAK,IAAI,IAAI;IA+BP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,OAAO,CAAC,MAAM;CAIf"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LogWatcher = void 0;
7
+ const chokidar_1 = __importDefault(require("chokidar"));
8
+ const events_1 = require("events");
9
+ const logger_1 = require("./logger");
10
+ class LogWatcher extends events_1.EventEmitter {
11
+ watcher = null;
12
+ opts;
13
+ constructor(opts) {
14
+ super();
15
+ this.opts = {
16
+ watchPaths: opts.watchPaths,
17
+ exclude: opts.exclude ?? [],
18
+ stabilityThresholdMs: opts.stabilityThresholdMs ?? 500,
19
+ pollIntervalMs: opts.pollIntervalMs ?? 100,
20
+ };
21
+ }
22
+ start() {
23
+ if (this.watcher) {
24
+ throw new Error('LogWatcher already started');
25
+ }
26
+ this.watcher = chokidar_1.default.watch(this.opts.watchPaths, {
27
+ persistent: true,
28
+ ignored: this.opts.exclude.length > 0 ? this.opts.exclude : undefined,
29
+ awaitWriteFinish: {
30
+ stabilityThreshold: this.opts.stabilityThresholdMs,
31
+ pollInterval: this.opts.pollIntervalMs,
32
+ },
33
+ ignoreInitial: false,
34
+ atomic: true,
35
+ });
36
+ this.watcher
37
+ .on('add', (filepath) => this.handle(filepath, 'add'))
38
+ .on('change', (filepath) => this.handle(filepath, 'change'))
39
+ .on('error', (error) => {
40
+ logger_1.logger.error('LogWatcher error', { error: error.message });
41
+ this.emit('error', error);
42
+ })
43
+ .on('ready', () => {
44
+ logger_1.logger.info('LogWatcher ready', {
45
+ watchPaths: this.opts.watchPaths,
46
+ stabilityThresholdMs: this.opts.stabilityThresholdMs,
47
+ });
48
+ this.emit('ready');
49
+ });
50
+ }
51
+ async stop() {
52
+ if (this.watcher) {
53
+ await this.watcher.close();
54
+ this.watcher = null;
55
+ }
56
+ }
57
+ handle(filepath, type) {
58
+ const event = { filepath, type };
59
+ this.emit('fileChange', event);
60
+ }
61
+ }
62
+ exports.LogWatcher = LogWatcher;
63
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA8C;AAC9C,mCAAqC;AACrC,qCAAiC;AAgBjC,MAAa,UAAW,SAAQ,qBAAY;IAClC,OAAO,GAAqB,IAAI,CAAA;IACvB,IAAI,CAA6B;IAElD,YAAY,IAAuB;QACjC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,IAAI,GAAG;YACV,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,IAAI,GAAG;YACtD,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,GAAG;SAC3C,CAAA;IACH,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAC/C,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,kBAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClD,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACrE,gBAAgB,EAAE;gBAChB,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAoB;gBAClD,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc;aACvC;YACD,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,IAAI;SACb,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO;aACT,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;aACrD,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAC3D,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACrB,eAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA;YACrE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC3B,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAChB,eAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC9B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;gBAChC,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAoB;aACrD,CAAC,CAAA;YACF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;YAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACrB,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,QAAgB,EAAE,IAAsB;QACrD,MAAM,KAAK,GAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QACjD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;IAChC,CAAC;CACF;AAxDD,gCAwDC"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "promptkaizen-agent",
3
+ "version": "0.1.0",
4
+ "description": "PromptKaizen local observability agent for Claude Code & OpenAI Codex CLI",
5
+ "license": "UNLICENSED",
6
+ "main": "./dist/index.js",
7
+ "bin": {
8
+ "promptkaizen-agent": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "scripts": {
17
+ "dev": "tsx watch src/index.ts",
18
+ "build": "tsc",
19
+ "prepublishOnly": "npm run build",
20
+ "start": "node dist/index.js",
21
+ "lint": "eslint src/**/*.ts",
22
+ "type-check": "tsc --noEmit",
23
+ "test": "vitest --run",
24
+ "test:watch": "vitest"
25
+ },
26
+ "dependencies": {
27
+ "chokidar": "^3.6.0",
28
+ "zod": "^3.22.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^20.0.0",
32
+ "tsx": "^4.6.0",
33
+ "typescript": "^5.3.0",
34
+ "vitest": "^1.0.0"
35
+ },
36
+ "engines": {
37
+ "node": ">=20"
38
+ }
39
+ }