promptkaizen-agent 0.2.0 → 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 (176) hide show
  1. package/README.md +5 -1
  2. package/dist/backfill/run.d.ts +15 -0
  3. package/dist/backfill/run.d.ts.map +1 -0
  4. package/dist/backfill/run.js +33 -0
  5. package/dist/backfill/run.js.map +1 -0
  6. package/dist/backfill/scanner.d.ts +82 -0
  7. package/dist/backfill/scanner.d.ts.map +1 -0
  8. package/dist/backfill/scanner.js +271 -0
  9. package/dist/backfill/scanner.js.map +1 -0
  10. package/dist/cli/detect.d.ts +2 -0
  11. package/dist/cli/detect.d.ts.map +1 -0
  12. package/dist/cli/detect.js +40 -0
  13. package/dist/cli/detect.js.map +1 -0
  14. package/dist/cli/disable.d.ts +2 -0
  15. package/dist/cli/disable.d.ts.map +1 -0
  16. package/dist/cli/disable.js +44 -0
  17. package/dist/cli/disable.js.map +1 -0
  18. package/dist/cli/enable.d.ts +2 -0
  19. package/dist/cli/enable.d.ts.map +1 -0
  20. package/dist/cli/enable.js +105 -0
  21. package/dist/cli/enable.js.map +1 -0
  22. package/dist/cli/hook.d.ts +2 -0
  23. package/dist/cli/hook.d.ts.map +1 -0
  24. package/dist/cli/hook.js +406 -0
  25. package/dist/cli/hook.js.map +1 -0
  26. package/dist/cli/init.d.ts.map +1 -1
  27. package/dist/cli/init.js +70 -8
  28. package/dist/cli/init.js.map +1 -1
  29. package/dist/cli/install-hooks.d.ts +5 -0
  30. package/dist/cli/install-hooks.d.ts.map +1 -0
  31. package/dist/cli/install-hooks.js +132 -0
  32. package/dist/cli/install-hooks.js.map +1 -0
  33. package/dist/cli/install-task.d.ts +28 -0
  34. package/dist/cli/install-task.d.ts.map +1 -0
  35. package/dist/cli/install-task.js +119 -0
  36. package/dist/cli/install-task.js.map +1 -0
  37. package/dist/cli/mcp.d.ts +2 -0
  38. package/dist/cli/mcp.d.ts.map +1 -0
  39. package/dist/cli/mcp.js +148 -0
  40. package/dist/cli/mcp.js.map +1 -0
  41. package/dist/cli/metrics.d.ts +2 -0
  42. package/dist/cli/metrics.d.ts.map +1 -0
  43. package/dist/cli/metrics.js +103 -0
  44. package/dist/cli/metrics.js.map +1 -0
  45. package/dist/cli/report.d.ts +2 -0
  46. package/dist/cli/report.d.ts.map +1 -0
  47. package/dist/cli/report.js +211 -0
  48. package/dist/cli/report.js.map +1 -0
  49. package/dist/cli/scan.d.ts +2 -0
  50. package/dist/cli/scan.d.ts.map +1 -0
  51. package/dist/cli/scan.js +171 -0
  52. package/dist/cli/scan.js.map +1 -0
  53. package/dist/cli/start.d.ts.map +1 -1
  54. package/dist/cli/start.js +70 -17
  55. package/dist/cli/start.js.map +1 -1
  56. package/dist/cli/status.d.ts.map +1 -1
  57. package/dist/cli/status.js +82 -18
  58. package/dist/cli/status.js.map +1 -1
  59. package/dist/cli/uninstall-task.d.ts +8 -0
  60. package/dist/cli/uninstall-task.d.ts.map +1 -0
  61. package/dist/cli/uninstall-task.js +44 -0
  62. package/dist/cli/uninstall-task.js.map +1 -0
  63. package/dist/config.d.ts +172 -6
  64. package/dist/config.d.ts.map +1 -1
  65. package/dist/config.js +114 -2
  66. package/dist/config.js.map +1 -1
  67. package/dist/console-safe.d.ts +21 -0
  68. package/dist/console-safe.d.ts.map +1 -0
  69. package/dist/console-safe.js +71 -0
  70. package/dist/console-safe.js.map +1 -0
  71. package/dist/detection-secret.d.ts.map +1 -1
  72. package/dist/detection-secret.js +12 -0
  73. package/dist/detection-secret.js.map +1 -1
  74. package/dist/env-detect.d.ts +44 -0
  75. package/dist/env-detect.d.ts.map +1 -0
  76. package/dist/env-detect.js +151 -0
  77. package/dist/env-detect.js.map +1 -0
  78. package/dist/exec/executor.d.ts +42 -0
  79. package/dist/exec/executor.d.ts.map +1 -0
  80. package/dist/exec/executor.js +135 -0
  81. package/dist/exec/executor.js.map +1 -0
  82. package/dist/exec/pk-execute.d.ts +30 -0
  83. package/dist/exec/pk-execute.d.ts.map +1 -0
  84. package/dist/exec/pk-execute.js +174 -0
  85. package/dist/exec/pk-execute.js.map +1 -0
  86. package/dist/exec/policy-fetcher.d.ts +9 -0
  87. package/dist/exec/policy-fetcher.d.ts.map +1 -0
  88. package/dist/exec/policy-fetcher.js +46 -0
  89. package/dist/exec/policy-fetcher.js.map +1 -0
  90. package/dist/exec/policy.d.ts +32 -0
  91. package/dist/exec/policy.d.ts.map +1 -0
  92. package/dist/exec/policy.js +88 -0
  93. package/dist/exec/policy.js.map +1 -0
  94. package/dist/hooks/block-store.d.ts +14 -0
  95. package/dist/hooks/block-store.d.ts.map +1 -0
  96. package/dist/hooks/block-store.js +26 -0
  97. package/dist/hooks/block-store.js.map +1 -0
  98. package/dist/hooks/claude-hook.d.ts +55 -0
  99. package/dist/hooks/claude-hook.d.ts.map +1 -0
  100. package/dist/hooks/claude-hook.js +122 -0
  101. package/dist/hooks/claude-hook.js.map +1 -0
  102. package/dist/hooks/continuity.d.ts +48 -0
  103. package/dist/hooks/continuity.d.ts.map +1 -0
  104. package/dist/hooks/continuity.js +92 -0
  105. package/dist/hooks/continuity.js.map +1 -0
  106. package/dist/hooks/observation.d.ts +27 -0
  107. package/dist/hooks/observation.d.ts.map +1 -0
  108. package/dist/hooks/observation.js +0 -0
  109. package/dist/hooks/observation.js.map +1 -0
  110. package/dist/hooks/platforms.d.ts +24 -0
  111. package/dist/hooks/platforms.d.ts.map +1 -0
  112. package/dist/hooks/platforms.js +57 -0
  113. package/dist/hooks/platforms.js.map +1 -0
  114. package/dist/hooks/read-cache.d.ts +71 -0
  115. package/dist/hooks/read-cache.d.ts.map +1 -0
  116. package/dist/hooks/read-cache.js +166 -0
  117. package/dist/hooks/read-cache.js.map +1 -0
  118. package/dist/hooks/reduction.d.ts +78 -0
  119. package/dist/hooks/reduction.d.ts.map +1 -0
  120. package/dist/hooks/reduction.js +111 -0
  121. package/dist/hooks/reduction.js.map +1 -0
  122. package/dist/hooks/settings-merge.d.ts +32 -0
  123. package/dist/hooks/settings-merge.d.ts.map +1 -0
  124. package/dist/hooks/settings-merge.js +74 -0
  125. package/dist/hooks/settings-merge.js.map +1 -0
  126. package/dist/hooks/snapshot.d.ts +37 -0
  127. package/dist/hooks/snapshot.d.ts.map +1 -0
  128. package/dist/hooks/snapshot.js +180 -0
  129. package/dist/hooks/snapshot.js.map +1 -0
  130. package/dist/index.js +51 -0
  131. package/dist/index.js.map +1 -1
  132. package/dist/mcp/server.d.ts +118 -0
  133. package/dist/mcp/server.d.ts.map +1 -0
  134. package/dist/mcp/server.js +240 -0
  135. package/dist/mcp/server.js.map +1 -0
  136. package/dist/onboarding-report.d.ts +66 -0
  137. package/dist/onboarding-report.d.ts.map +1 -0
  138. package/dist/onboarding-report.js +152 -0
  139. package/dist/onboarding-report.js.map +1 -0
  140. package/dist/onboarding.d.ts +55 -0
  141. package/dist/onboarding.d.ts.map +1 -0
  142. package/dist/onboarding.js +98 -0
  143. package/dist/onboarding.js.map +1 -0
  144. package/dist/pii-masker.d.ts +7 -0
  145. package/dist/pii-masker.d.ts.map +1 -1
  146. package/dist/pii-masker.js +27 -51
  147. package/dist/pii-masker.js.map +1 -1
  148. package/dist/privacy.d.ts +13 -0
  149. package/dist/privacy.d.ts.map +1 -0
  150. package/dist/privacy.js +67 -0
  151. package/dist/privacy.js.map +1 -0
  152. package/dist/residency.d.ts +21 -0
  153. package/dist/residency.d.ts.map +1 -0
  154. package/dist/residency.js +68 -0
  155. package/dist/residency.js.map +1 -0
  156. package/dist/secret-detector.d.ts +19 -0
  157. package/dist/secret-detector.d.ts.map +1 -1
  158. package/dist/secret-detector.js +116 -0
  159. package/dist/secret-detector.js.map +1 -1
  160. package/dist/store/local-store.d.ts +167 -0
  161. package/dist/store/local-store.d.ts.map +1 -0
  162. package/dist/store/local-store.js +538 -0
  163. package/dist/store/local-store.js.map +1 -0
  164. package/dist/store/schema.d.ts +38 -0
  165. package/dist/store/schema.d.ts.map +1 -0
  166. package/dist/store/schema.js +189 -0
  167. package/dist/store/schema.js.map +1 -0
  168. package/dist/types.d.ts +13 -2
  169. package/dist/types.d.ts.map +1 -1
  170. package/dist/version.d.ts +1 -1
  171. package/dist/version.js +1 -1
  172. package/dist/watcher.d.ts +6 -0
  173. package/dist/watcher.d.ts.map +1 -1
  174. package/dist/watcher.js +13 -2
  175. package/dist/watcher.js.map +1 -1
  176. package/package.json +4 -2
package/dist/cli/init.js CHANGED
@@ -8,7 +8,12 @@ const promises_1 = __importDefault(require("fs/promises"));
8
8
  const os_1 = __importDefault(require("os"));
9
9
  const path_1 = __importDefault(require("path"));
10
10
  const readline_1 = __importDefault(require("readline"));
11
+ const env_detect_1 = require("../env-detect");
12
+ const onboarding_1 = require("../onboarding");
13
+ const version_1 = require("../version");
11
14
  const CONFIG_PATH = path_1.default.join(os_1.default.homedir(), '.promptkaizen', 'agent.config.json');
15
+ // 検出 0 件 / スキップ時の既定 watchPaths (後でログが現れたら拾えるよう標準パスを残す)。
16
+ const DEFAULT_WATCH_PATHS = ['~/.claude/projects/**/*.jsonl', '~/.codex/sessions/**/*.jsonl'];
12
17
  const ENDPOINTS = {
13
18
  stg: 'https://asia-northeast1-promptkaizen-stg.cloudfunctions.net/receiveObservations',
14
19
  prod: 'https://asia-northeast1-promptkaizen-prod.cloudfunctions.net/receiveObservations',
@@ -25,12 +30,16 @@ const ENDPOINTS = {
25
30
  */
26
31
  async function runInit(argv) {
27
32
  const flags = parseFlags(argv);
33
+ // オンボーディング・ファネルの起点 (#109): TTV の計測開始点。
34
+ await (0, onboarding_1.recordStage)('init', { agentVersion: version_1.AGENT_VERSION });
28
35
  const isYes = flags.yes;
29
36
  const envApiKey = process.env.PK_API_KEY?.trim() || '';
30
37
  const apiKeyFromFlag = (flags.apiKey ?? envApiKey).trim();
31
38
  const envFromFlag = (flags.env ?? '').trim().toLowerCase();
32
39
  const maskEmailsFromFlag = flags.maskEmails;
33
- const nonInteractive = isYes || (apiKeyFromFlag && envFromFlag);
40
+ // Issue #68: 完全ローカル動作。apiKey/apiEndpoint なしの config を書き、送信ゼロにする。
41
+ const localOnly = flags.localOnly;
42
+ const nonInteractive = isYes || localOnly || (apiKeyFromFlag && envFromFlag);
34
43
  const rl = nonInteractive
35
44
  ? null
36
45
  : readline_1.default.createInterface({ input: process.stdin, output: process.stdout });
@@ -49,6 +58,27 @@ async function runInit(argv) {
49
58
  return;
50
59
  }
51
60
  }
61
+ // 環境オートディテクト (#105): 質問なしで解析対象 (Claude Code / Codex) を確定する。
62
+ // 手入力フォールバックは検出 0 件のときだけに限定し、最初の摩擦を消す。
63
+ const watchPaths = await resolveWatchPaths(ask, Boolean(nonInteractive));
64
+ // Issue #68: 完全ローカル動作なら endpoint/apiKey を尋ねずローカル専用 config を書く。
65
+ if (localOnly) {
66
+ const maskEmails = maskEmailsFromFlag;
67
+ const config = {
68
+ watchPaths,
69
+ exclude: [],
70
+ localStore: { enabled: true },
71
+ privacy: { sendPromptBody: false },
72
+ agent: { skipInitialBacklog: true },
73
+ pii: { maskFilePaths: true, maskApiKeys: true, maskEmails, customPatterns: [], syncOrgRules: false },
74
+ telemetry: { level: 'info' },
75
+ };
76
+ await promises_1.default.mkdir(path_1.default.dirname(CONFIG_PATH), { recursive: true });
77
+ await promises_1.default.writeFile(CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600 });
78
+ console.log(`✅ Local-only config written to ${CONFIG_PATH} (no cloud send)`);
79
+ console.log('🔒 解析はこのマシン内で完結します(クラウドへの送信なし/秘密情報はマスク)');
80
+ return;
81
+ }
52
82
  // 1. environment
53
83
  const envAns = envFromFlag ||
54
84
  (await ask('Environment? [stg / prod / custom] (default: stg): ', 'stg')) ||
@@ -85,7 +115,7 @@ async function runInit(argv) {
85
115
  const config = {
86
116
  apiEndpoint,
87
117
  apiKey,
88
- watchPaths: ['~/.claude/projects/**/*.jsonl', '~/.codex/sessions/**/*.jsonl'],
118
+ watchPaths,
89
119
  exclude: [],
90
120
  batch: { intervalMs: 5000, maxEntries: 50 },
91
121
  agent: { skipInitialBacklog: true },
@@ -100,13 +130,13 @@ async function runInit(argv) {
100
130
  await promises_1.default.mkdir(path_1.default.dirname(CONFIG_PATH), { recursive: true });
101
131
  await promises_1.default.writeFile(CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600 });
102
132
  console.log(`✅ Config written to ${CONFIG_PATH}`);
133
+ // ローカル完結の訴求 (#104)。online でも解析は端末内で行い、送信はマスク後メタのみ。
134
+ console.log('🔒 解析はこのマシン内で実行されます。秘密情報はマスクしてから扱い、生の秘密はローカルにも残しません');
103
135
  if (!nonInteractive) {
104
- const installCmd = process.platform === 'linux'
105
- ? ' promptkaizen-agent install-systemd # auto-start on Linux (systemd user unit)'
106
- : ' promptkaizen-agent install-launchd # auto-start on macOS';
107
136
  console.log('\nNext steps:');
108
- console.log(installCmd);
109
- console.log(' promptkaizen-agent start # manual foreground run');
137
+ console.log(' promptkaizen-agent report # 初回レポート(スコア付きサマリ)を表示 ← まずこれ');
138
+ console.log(' promptkaizen-agent enable # 今後のセッションを自動チェック(hooks + 常駐監視)');
139
+ console.log(' promptkaizen-agent scan # 検出ヒットの詳細一覧');
110
140
  console.log(' promptkaizen-agent status # health check');
111
141
  }
112
142
  }
@@ -114,8 +144,38 @@ async function runInit(argv) {
114
144
  rl?.close();
115
145
  }
116
146
  }
147
+ /**
148
+ * 環境オートディテクト (#105) で watchPaths を確定する。
149
+ * - 検出あり: 質問なしで検出ツールの glob を採用。
150
+ * - 検出 0 件 (対話時のみ): カスタムパス/glob を 1 度だけ尋ねる。glob でなければ
151
+ * ディレクトリとみなして `/**​/*.jsonl` を補う。空入力 / 非対話なら標準パスを既定にする。
152
+ */
153
+ async function resolveWatchPaths(ask, nonInteractive) {
154
+ const env = await (0, env_detect_1.detectEnvironment)();
155
+ if (!nonInteractive) {
156
+ console.log('検出された環境:');
157
+ for (const line of (0, env_detect_1.formatDetectionSummary)(env))
158
+ console.log(line);
159
+ console.log('');
160
+ }
161
+ if (env.anyDetected) {
162
+ if (!nonInteractive) {
163
+ console.log(`✅ 解析対象を自動確定しました(${env.detected.map((t) => t.label).join(' + ')})\n`);
164
+ }
165
+ return env.watchPaths;
166
+ }
167
+ // 検出 0 件のときだけ手入力フォールバック。
168
+ const custom = (await ask('履歴が見つかりませんでした。監視するログのパス/glob を入力(空でスキップ): ', '')).trim();
169
+ if (custom) {
170
+ return [custom.includes('*') ? custom : `${custom.replace(/\/+$/, '')}/**/*.jsonl`];
171
+ }
172
+ if (!nonInteractive) {
173
+ console.log('標準パス(~/.claude, ~/.codex)を監視対象に設定しました。\n');
174
+ }
175
+ return DEFAULT_WATCH_PATHS;
176
+ }
117
177
  function parseFlags(argv) {
118
- const out = { maskEmails: false, yes: false };
178
+ const out = { maskEmails: false, yes: false, localOnly: false };
119
179
  for (let i = 0; i < argv.length; i++) {
120
180
  const a = argv[i];
121
181
  if (a === '--api-key' && i + 1 < argv.length)
@@ -126,6 +186,8 @@ function parseFlags(argv) {
126
186
  out.maskEmails = true;
127
187
  else if (a === '--yes' || a === '-y')
128
188
  out.yes = true;
189
+ else if (a === '--local-only')
190
+ out.localOnly = true;
129
191
  }
130
192
  return out;
131
193
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** 後方互換: Claude Code の settings.json パス。 */
2
+ export declare function settingsPath(): string;
3
+ export declare function runInstallHooks(argv: string[]): Promise<void>;
4
+ export declare function runUninstallHooks(argv: string[]): Promise<void>;
5
+ //# sourceMappingURL=install-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-hooks.d.ts","sourceRoot":"","sources":["../../src/cli/install-hooks.ts"],"names":[],"mappings":"AAeA,4CAA4C;AAC5C,wBAAgB,YAAY,IAAI,MAAM,CAErC;AA4BD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCnE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBrE"}
@@ -0,0 +1,132 @@
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.settingsPath = settingsPath;
7
+ exports.runInstallHooks = runInstallHooks;
8
+ exports.runUninstallHooks = runUninstallHooks;
9
+ const promises_1 = __importDefault(require("fs/promises"));
10
+ const os_1 = __importDefault(require("os"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const settings_merge_1 = require("../hooks/settings-merge");
13
+ const platforms_1 = require("../hooks/platforms");
14
+ // =============================================
15
+ // `promptkaizen-agent install-hooks [--platform claude-code|codex]` / `uninstall-hooks` (Issue #67 / #70)
16
+ // =============================================
17
+ //
18
+ // 対象プラットフォームの hooks 設定ファイルに PromptKaizen の hooks を登録/解除する。
19
+ // claude-code: ~/.claude/settings.json
20
+ // codex: ~/.codex/hooks.json (+ config.toml の [features] hooks = true が別途必要)
21
+ // 既存設定は破壊せずマージ (settings-merge.ts の純粋関数)。OS 非依存。
22
+ /** 後方互換: Claude Code の settings.json パス。 */
23
+ function settingsPath() {
24
+ return (0, platforms_1.getPlatformConfig)('claude-code').settingsFile;
25
+ }
26
+ function parsePlatform(argv) {
27
+ const idx = argv.indexOf('--platform');
28
+ if (idx >= 0 && idx + 1 < argv.length && (0, platforms_1.isHookPlatform)(argv[idx + 1])) {
29
+ return argv[idx + 1];
30
+ }
31
+ return 'claude-code';
32
+ }
33
+ async function readSettings(p) {
34
+ try {
35
+ const raw = await promises_1.default.readFile(p, 'utf8');
36
+ const parsed = JSON.parse(raw);
37
+ return parsed && typeof parsed === 'object' ? parsed : {};
38
+ }
39
+ catch (e) {
40
+ const code = e.code;
41
+ if (code === 'ENOENT')
42
+ return {};
43
+ // JSON 壊れ等は上書きすると危険なので中断する。
44
+ throw new Error(`設定ファイルを読めません (${p}): ${e.message}`);
45
+ }
46
+ }
47
+ async function writeSettings(p, data) {
48
+ await promises_1.default.mkdir(path_1.default.dirname(p), { recursive: true });
49
+ await promises_1.default.writeFile(p, JSON.stringify(data, null, 2) + '\n', 'utf8');
50
+ }
51
+ async function runInstallHooks(argv) {
52
+ const platform = parsePlatform(argv);
53
+ const cfg = (0, platforms_1.getPlatformConfig)(platform);
54
+ const p = cfg.settingsFile;
55
+ let settings;
56
+ try {
57
+ settings = await readSettings(p);
58
+ }
59
+ catch (e) {
60
+ console.error(e.message);
61
+ console.error('壊れた設定ファイルは手動で確認してください。');
62
+ process.exit(1);
63
+ }
64
+ // 既存ファイルがあればバックアップ。
65
+ try {
66
+ await promises_1.default.access(p);
67
+ await promises_1.default.copyFile(p, `${p}.promptkaizen.bak`);
68
+ }
69
+ catch {
70
+ /* ファイルなし or バックアップ失敗は無視 */
71
+ }
72
+ const merged = (0, settings_merge_1.mergeHooks)(settings, cfg.registrations, cfg.commandMarker);
73
+ await writeSettings(p, merged);
74
+ const label = platform === 'codex' ? 'Codex CLI' : 'Claude Code';
75
+ console.log(`✅ ${label} hooks を登録しました: ${p}`);
76
+ console.log(' PreToolUse で機密情報を含むツール実行を事前ブロックします。');
77
+ if (platform === 'codex') {
78
+ await printCodexFeatureGuidance();
79
+ }
80
+ console.log('\nVerify:');
81
+ console.log(` ${label} を再起動し、ダミーキーを含むツール実行が拒否されることを確認`);
82
+ console.log(` 解除: promptkaizen-agent uninstall-hooks${platform === 'codex' ? ' --platform codex' : ''}`);
83
+ }
84
+ async function runUninstallHooks(argv) {
85
+ const platform = parsePlatform(argv);
86
+ const cfg = (0, platforms_1.getPlatformConfig)(platform);
87
+ const p = cfg.settingsFile;
88
+ let settings;
89
+ try {
90
+ settings = await readSettings(p);
91
+ }
92
+ catch (e) {
93
+ console.error(e.message);
94
+ process.exit(1);
95
+ }
96
+ const label = platform === 'codex' ? 'Codex CLI' : 'Claude Code';
97
+ if (!(0, settings_merge_1.hasOurHooks)(settings, cfg.commandMarker)) {
98
+ console.log(`PromptKaizen の ${label} hooks は登録されていません。`);
99
+ return;
100
+ }
101
+ const next = (0, settings_merge_1.removeHooks)(settings, cfg.commandMarker);
102
+ await writeSettings(p, next);
103
+ console.log(`✅ ${label} hooks を解除しました: ${p} (他の hooks は保持)`);
104
+ }
105
+ /**
106
+ * Codex は ~/.codex/config.toml に [features] hooks = true が必要。自動書き換えはせず、
107
+ * 現状を確認して不足していれば追記内容を案内する (config.toml は手で触る運用が安全)。
108
+ */
109
+ async function printCodexFeatureGuidance() {
110
+ const tomlPath = path_1.default.join(os_1.default.homedir(), '.codex', 'config.toml');
111
+ let enabled = false;
112
+ let exists = false;
113
+ try {
114
+ const raw = await promises_1.default.readFile(tomlPath, 'utf8');
115
+ exists = true;
116
+ // [features] セクション内の hooks = true を素朴に判定 (厳密な toml パースは不要)。
117
+ enabled = /\[features\][^[]*?\bhooks\s*=\s*true/s.test(raw);
118
+ }
119
+ catch {
120
+ /* 無ければ未設定扱い */
121
+ }
122
+ if (enabled) {
123
+ console.log(` config.toml の [features] hooks = true は設定済みです (${tomlPath})`);
124
+ return;
125
+ }
126
+ console.log('\n⚠️ Codex CLI は hooks を有効化する設定が別途必要です。');
127
+ console.log(` ${tomlPath} に以下を追記してください:`);
128
+ console.log('\n [features]');
129
+ console.log(' hooks = true\n');
130
+ console.log(exists ? ' (既存の config.toml に [features] セクションがあれば hooks = true を足すだけ)' : ' (config.toml が無ければ新規作成)');
131
+ }
132
+ //# sourceMappingURL=install-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-hooks.js","sourceRoot":"","sources":["../../src/cli/install-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export declare const TASK_NAME = "PromptKaizenAgent";
2
+ export interface TaskXmlOptions {
3
+ nodeBin: string;
4
+ agentScript: string;
5
+ logDir: string;
6
+ }
7
+ /**
8
+ * Task Scheduler のタスク定義 XML を組み立て (Issue #61)。
9
+ * テスト容易性のため引数で外部依存を受ける (install-launchd / install-systemd と同パターン)。
10
+ *
11
+ * 設計:
12
+ * - LogonTrigger + Repetition (PT5M): launchd KeepAlive / systemd Restart=always の代替。
13
+ * Task Scheduler に「クラッシュ時再起動」は無いため、5 分ごとの再実行 +
14
+ * MultipleInstancesPolicy=IgnoreNew (稼働中なら何もしない) で watchdog にする。
15
+ * - 出力リダイレクト: Task Scheduler は stdout を拾えないため cmd /c 経由で
16
+ * ~/.promptkaizen/agent.log へ追記 (launchd/systemd とログの場所を揃える)。
17
+ * - ExecutionTimeLimit=PT0S (常駐のため無制限) / バッテリー時も起動。
18
+ */
19
+ export declare function buildTaskXml(opts: TaskXmlOptions): string;
20
+ export declare function escapeXml(s: string): string;
21
+ /**
22
+ * `promptkaizen-agent install-task`
23
+ *
24
+ * Windows の Task Scheduler に agent を登録 (ログオン時自動起動 + 5 分間隔の
25
+ * watchdog 再実行)。既存タスクは /F で上書き。
26
+ */
27
+ export declare function runInstallTask(_argv: string[]): Promise<void>;
28
+ //# sourceMappingURL=install-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-task.d.ts","sourceRoot":"","sources":["../../src/cli/install-task.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,SAAS,sBAAsB,CAAA;AAE5C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAqCzD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CnE"}
@@ -0,0 +1,119 @@
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.TASK_NAME = void 0;
7
+ exports.buildTaskXml = buildTaskXml;
8
+ exports.escapeXml = escapeXml;
9
+ exports.runInstallTask = runInstallTask;
10
+ const child_process_1 = require("child_process");
11
+ const promises_1 = __importDefault(require("fs/promises"));
12
+ const os_1 = __importDefault(require("os"));
13
+ const path_1 = __importDefault(require("path"));
14
+ exports.TASK_NAME = 'PromptKaizenAgent';
15
+ /**
16
+ * Task Scheduler のタスク定義 XML を組み立て (Issue #61)。
17
+ * テスト容易性のため引数で外部依存を受ける (install-launchd / install-systemd と同パターン)。
18
+ *
19
+ * 設計:
20
+ * - LogonTrigger + Repetition (PT5M): launchd KeepAlive / systemd Restart=always の代替。
21
+ * Task Scheduler に「クラッシュ時再起動」は無いため、5 分ごとの再実行 +
22
+ * MultipleInstancesPolicy=IgnoreNew (稼働中なら何もしない) で watchdog にする。
23
+ * - 出力リダイレクト: Task Scheduler は stdout を拾えないため cmd /c 経由で
24
+ * ~/.promptkaizen/agent.log へ追記 (launchd/systemd とログの場所を揃える)。
25
+ * - ExecutionTimeLimit=PT0S (常駐のため無制限) / バッテリー時も起動。
26
+ */
27
+ function buildTaskXml(opts) {
28
+ // Windows 専用 XML のため、実行 OS に関わらず backslash で結合する
29
+ // (posix 環境でのビルド/テストでも出力を不変にする)。
30
+ const logFile = path_1.default.win32.join(opts.logDir, 'agent.log');
31
+ // cmd /c "<node> <script> start >> <log> 2>&1" — 各パスは二重引用符で空白対応
32
+ const command = `"${opts.nodeBin}" "${opts.agentScript}" start >> "${logFile}" 2>&1`;
33
+ return `<?xml version="1.0" encoding="UTF-16"?>
34
+ <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
35
+ <RegistrationInfo>
36
+ <Description>PromptKaizen local observability agent (Claude Code / Codex CLI)</Description>
37
+ </RegistrationInfo>
38
+ <Triggers>
39
+ <LogonTrigger>
40
+ <Enabled>true</Enabled>
41
+ <Repetition>
42
+ <Interval>PT5M</Interval>
43
+ <StopAtDurationEnd>false</StopAtDurationEnd>
44
+ </Repetition>
45
+ </LogonTrigger>
46
+ </Triggers>
47
+ <Settings>
48
+ <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
49
+ <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
50
+ <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
51
+ <StartWhenAvailable>true</StartWhenAvailable>
52
+ <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
53
+ <Hidden>true</Hidden>
54
+ </Settings>
55
+ <Actions Context="Author">
56
+ <Exec>
57
+ <Command>C:\\Windows\\System32\\cmd.exe</Command>
58
+ <Arguments>/c ${escapeXml(command)}</Arguments>
59
+ <WorkingDirectory>${escapeXml(opts.logDir)}</WorkingDirectory>
60
+ </Exec>
61
+ </Actions>
62
+ </Task>
63
+ `;
64
+ }
65
+ function escapeXml(s) {
66
+ return s
67
+ .replaceAll('&', '&amp;')
68
+ .replaceAll('<', '&lt;')
69
+ .replaceAll('>', '&gt;')
70
+ .replaceAll('"', '&quot;');
71
+ }
72
+ /**
73
+ * `promptkaizen-agent install-task`
74
+ *
75
+ * Windows の Task Scheduler に agent を登録 (ログオン時自動起動 + 5 分間隔の
76
+ * watchdog 再実行)。既存タスクは /F で上書き。
77
+ */
78
+ async function runInstallTask(_argv) {
79
+ if (process.platform !== 'win32') {
80
+ console.error('install-task is Windows only. Use install-launchd (macOS) / install-systemd (Linux).');
81
+ process.exit(1);
82
+ }
83
+ const agentScript = path_1.default.resolve(__dirname, '..', 'index.js');
84
+ try {
85
+ await promises_1.default.access(agentScript);
86
+ }
87
+ catch {
88
+ console.error(`Agent script not found. Did you run \`npm run build\`? (looked for ${agentScript})`);
89
+ process.exit(1);
90
+ }
91
+ const logDir = path_1.default.join(os_1.default.homedir(), '.promptkaizen');
92
+ await promises_1.default.mkdir(logDir, { recursive: true });
93
+ const xml = buildTaskXml({
94
+ nodeBin: process.execPath,
95
+ agentScript,
96
+ logDir,
97
+ });
98
+ // schtasks /XML は UTF-16LE (BOM 付き) を要求する。
99
+ const xmlPath = path_1.default.join(logDir, 'task.xml');
100
+ await promises_1.default.writeFile(xmlPath, '\uFEFF' + xml, { encoding: 'utf16le' });
101
+ console.log(`✅ Wrote task XML: ${xmlPath}`);
102
+ try {
103
+ (0, child_process_1.execFileSync)('schtasks', ['/Create', '/TN', exports.TASK_NAME, '/XML', xmlPath, '/F'], {
104
+ stdio: 'inherit',
105
+ });
106
+ // 登録直後に即時起動 (LogonTrigger は次回ログオンまで発火しないため)。
107
+ (0, child_process_1.execFileSync)('schtasks', ['/Run', '/TN', exports.TASK_NAME], { stdio: 'ignore' });
108
+ }
109
+ catch (e) {
110
+ console.error(`schtasks failed: ${e.message}`);
111
+ process.exit(1);
112
+ }
113
+ console.log(`✅ Task Scheduler task registered: ${exports.TASK_NAME}`);
114
+ console.log('\nVerify with:');
115
+ console.log(` schtasks /Query /TN ${exports.TASK_NAME}`);
116
+ console.log(' type %USERPROFILE%\\.promptkaizen\\agent.log');
117
+ console.log(' promptkaizen-agent status');
118
+ }
119
+ //# sourceMappingURL=install-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-task.js","sourceRoot":"","sources":["../../src/cli/install-task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runMcp(): Promise<void>;
2
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/cli/mcp.ts"],"names":[],"mappings":"AAwBA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CA8H5C"}
@@ -0,0 +1,148 @@
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.runMcp = runMcp;
7
+ const readline_1 = __importDefault(require("readline"));
8
+ const config_1 = require("../config");
9
+ const policy_fetcher_1 = require("../exec/policy-fetcher");
10
+ const pk_execute_1 = require("../exec/pk-execute");
11
+ const server_1 = require("../mcp/server");
12
+ const pii_masker_1 = require("../pii-masker");
13
+ const privacy_1 = require("../privacy");
14
+ const sender_1 = require("../sender");
15
+ const local_store_1 = require("../store/local-store");
16
+ const version_1 = require("../version");
17
+ // =============================================
18
+ // `promptkaizen-agent mcp` — ローカル MCP サーバー起動 (Issue #93 / #94)
19
+ // =============================================
20
+ //
21
+ // Claude Code / Codex CLI が stdio transport で接続する。1 行 1 JSON-RPC。
22
+ // stdout はプロトコル専用 — ログ・診断は stderr にのみ出すこと。
23
+ // セットアップ手順は docs/local-mcp-setup.md。
24
+ /** 組織実行ポリシーの再取得間隔 (mask rules の 30 分同期と同じ周期)。 */
25
+ const POLICY_REFRESH_MS = 30 * 60 * 1000;
26
+ async function runMcp() {
27
+ let config;
28
+ try {
29
+ config = await (0, config_1.loadConfig)();
30
+ }
31
+ catch (e) {
32
+ process.stderr.write(`promptkaizen-agent mcp: config error: ${e.message}\n`);
33
+ process.exit(1);
34
+ return;
35
+ }
36
+ if (!config.localStore.enabled) {
37
+ process.stderr.write('promptkaizen-agent mcp: localStore.enabled=false のため pk_fetch は使えません\n');
38
+ process.exit(1);
39
+ return;
40
+ }
41
+ const dbPath = config.localStore.path;
42
+ // プロジェクトルート: Claude Code は stdio MCP サーバに CLAUDE_PROJECT_DIR を渡す。
43
+ // Codex 等で未設定なら起動時の cwd (クライアントがプロジェクトで起動する前提)。
44
+ const projectRoot = process.env.CLAUDE_PROJECT_DIR || process.cwd();
45
+ // 組織実行ポリシー (#44): 起動時 + 30 分ごとに再取得。オフラインなら null
46
+ // (ビルトイン禁止リストのみで動作)。
47
+ let executionPolicy = null;
48
+ if ((0, config_1.hasCloudToken)(config)) {
49
+ const refresh = async () => {
50
+ const fetched = await (0, policy_fetcher_1.fetchExecutionPolicy)({
51
+ apiEndpoint: config.apiEndpoint,
52
+ apiKey: config.apiKey,
53
+ });
54
+ if (fetched)
55
+ executionPolicy = fetched;
56
+ };
57
+ await refresh().catch(() => { });
58
+ const timer = setInterval(() => void refresh().catch(() => { }), POLICY_REFRESH_MS);
59
+ timer.unref();
60
+ }
61
+ const masker = new pii_masker_1.PiiMasker(config.pii);
62
+ const maskText = (text) => {
63
+ const masked = masker.mask({
64
+ filepath: 'mcp://pk_execute',
65
+ lineNumber: 0,
66
+ raw: text,
67
+ parsedAt: new Date().toISOString(),
68
+ source: 'hook',
69
+ });
70
+ return typeof masked.raw === 'string' ? masked.raw : text;
71
+ };
72
+ /** 実行ログ entry を SQLite に記録し、トークンがあれば送信する (#68 経路)。 */
73
+ const recordEntry = async (entry) => {
74
+ try {
75
+ const store = new local_store_1.LocalStore(dbPath);
76
+ store.recordEvent(entry);
77
+ store.close();
78
+ }
79
+ catch {
80
+ /* ローカル保存失敗は致命ではない */
81
+ }
82
+ if ((0, config_1.hasCloudToken)(config)) {
83
+ const [outgoing] = (0, privacy_1.applyPrivacyGate)([entry], { sendPromptBody: config.privacy.sendPromptBody });
84
+ const sender = new sender_1.Sender({
85
+ apiEndpoint: config.apiEndpoint,
86
+ apiKey: config.apiKey,
87
+ agentVersion: version_1.AGENT_VERSION,
88
+ });
89
+ await sender.send([outgoing]).catch(() => { });
90
+ }
91
+ };
92
+ const pkExecute = config.execute.enabled
93
+ ? (args) => (0, pk_execute_1.runPkExecute)({
94
+ maskText,
95
+ storeRef: (ref) => {
96
+ const store = new local_store_1.LocalStore(dbPath);
97
+ try {
98
+ store.recordToolOutputRef(ref);
99
+ }
100
+ finally {
101
+ store.close();
102
+ }
103
+ },
104
+ recordEntry,
105
+ getPolicy: () => executionPolicy,
106
+ projectRoot,
107
+ timeoutMs: config.execute.timeoutMs,
108
+ maxReturnBytes: config.execute.maxReturnBytes,
109
+ }, args)
110
+ : null;
111
+ const rl = readline_1.default.createInterface({ input: process.stdin, terminal: false });
112
+ // 応答順序を保証するため、行ごとの処理を直列化する (pk_execute は数十秒かかりうる)。
113
+ let chain = Promise.resolve();
114
+ rl.on('line', (line) => {
115
+ const trimmed = line.trim();
116
+ if (!trimmed)
117
+ return;
118
+ chain = chain.then(async () => {
119
+ let req;
120
+ try {
121
+ req = JSON.parse(trimmed);
122
+ }
123
+ catch {
124
+ process.stdout.write(JSON.stringify({ jsonrpc: '2.0', id: null, error: { code: -32700, message: 'Parse error' } }) + '\n');
125
+ return;
126
+ }
127
+ const res = await (0, server_1.dispatchRpc)(req, {
128
+ withStore: (fn) => {
129
+ const store = new local_store_1.LocalStore(dbPath);
130
+ try {
131
+ return fn(store);
132
+ }
133
+ finally {
134
+ store.close();
135
+ }
136
+ },
137
+ pkExecute,
138
+ projectRoot,
139
+ });
140
+ if (res)
141
+ process.stdout.write(JSON.stringify(res) + '\n');
142
+ });
143
+ });
144
+ // stdin が閉じたら終了 (クライアント側の切断)。
145
+ await new Promise((resolve) => rl.on('close', resolve));
146
+ await chain;
147
+ }
148
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/cli/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runMetrics(argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=metrics.d.ts.map