kevlar-4u 1.0.1 → 1.2.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 (74) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +348 -0
  3. package/README.ko.md +348 -0
  4. package/README.md +15 -15
  5. package/README.zh.md +348 -0
  6. package/dist/__tests__/createPersonaWizard.test.js +6 -1
  7. package/dist/__tests__/createPersonaWizard.test.js.map +1 -1
  8. package/dist/__tests__/execution.test.js +1 -1
  9. package/dist/__tests__/helpTool.test.js +1 -1
  10. package/dist/__tests__/listPersonasTool.test.js +3 -3
  11. package/dist/__tests__/reviewContentWizard.test.js +1 -1
  12. package/dist/__tests__/sanitize.test.js +2 -1
  13. package/dist/__tests__/sanitize.test.js.map +1 -1
  14. package/dist/execution/aggregator.js +4 -4
  15. package/dist/execution/index.js +1 -1
  16. package/dist/execution/modes/orchestration.js +2 -2
  17. package/dist/execution/sampling.d.ts +21 -0
  18. package/dist/execution/sampling.d.ts.map +1 -0
  19. package/dist/execution/sampling.js +23 -0
  20. package/dist/execution/sampling.js.map +1 -0
  21. package/dist/server.d.ts.map +1 -1
  22. package/dist/server.js +92 -66
  23. package/dist/server.js.map +1 -1
  24. package/dist/tools/configureWizardTool.d.ts.map +1 -1
  25. package/dist/tools/configureWizardTool.js +19 -16
  26. package/dist/tools/configureWizardTool.js.map +1 -1
  27. package/dist/tools/createPersonaTool.d.ts +7 -1
  28. package/dist/tools/createPersonaTool.d.ts.map +1 -1
  29. package/dist/tools/createPersonaTool.js +213 -96
  30. package/dist/tools/createPersonaTool.js.map +1 -1
  31. package/dist/tools/createPersonaWizardTool.d.ts.map +1 -1
  32. package/dist/tools/createPersonaWizardTool.js +1078 -301
  33. package/dist/tools/createPersonaWizardTool.js.map +1 -1
  34. package/dist/tools/deletePersonaTool.js +6 -6
  35. package/dist/tools/deletePersonaTool.js.map +1 -1
  36. package/dist/tools/deletePersonaWizardTool.js +1 -1
  37. package/dist/tools/deletePersonaWizardTool.js.map +1 -1
  38. package/dist/tools/getModesTool.d.ts.map +1 -1
  39. package/dist/tools/getModesTool.js +76 -58
  40. package/dist/tools/getModesTool.js.map +1 -1
  41. package/dist/tools/helpTool.js +7 -7
  42. package/dist/tools/listPersonasTool.d.ts.map +1 -1
  43. package/dist/tools/listPersonasTool.js +35 -42
  44. package/dist/tools/listPersonasTool.js.map +1 -1
  45. package/dist/tools/reviewContentWizardTool.d.ts.map +1 -1
  46. package/dist/tools/reviewContentWizardTool.js +143 -93
  47. package/dist/tools/reviewContentWizardTool.js.map +1 -1
  48. package/dist/tools/reviewTool.d.ts.map +1 -1
  49. package/dist/tools/reviewTool.js +88 -80
  50. package/dist/tools/reviewTool.js.map +1 -1
  51. package/dist/tools/types.d.ts +2 -2
  52. package/dist/tools/types.d.ts.map +1 -1
  53. package/dist/utils/parser.d.ts +1 -1
  54. package/dist/utils/parser.d.ts.map +1 -1
  55. package/dist/utils/personaIdMaps.d.ts.map +1 -1
  56. package/dist/utils/personaIdMaps.js +0 -1
  57. package/dist/utils/personaIdMaps.js.map +1 -1
  58. package/package.json +2 -2
  59. package/skills/_template.md +26 -12
  60. package/skills/tmp/wizard-create-3mk79v9g_draft.json +35 -0
  61. package/skills/tmp/wizard-create-3mk79v9g_wizard.json +35 -0
  62. package/skills/tmp/wizard-create-yilbwzz6_draft.json +35 -0
  63. package/skills/tmp/wizard-create-yilbwzz6_wizard.json +35 -0
  64. package/skills/xiaohongshu/xiaohongshu_3.md +30 -0
  65. package/skills/tmp/wizard-create-cwzrrpim_draft.json +0 -26
  66. package/skills/tmp/wizard-create-cwzrrpim_wizard.json +0 -26
  67. package/skills/tmp/wizard-create-d81intme_draft.json +0 -26
  68. package/skills/tmp/wizard-create-d81intme_wizard.json +0 -26
  69. package/skills/tmp/wizard-create-g50jqzmh_draft.json +0 -8
  70. package/skills/tmp/wizard-create-g50jqzmh_wizard.json +0 -8
  71. package/skills/tmp/wizard-create-onupu9wb_draft.json +0 -8
  72. package/skills/tmp/wizard-create-onupu9wb_wizard.json +0 -8
  73. package/skills/tmp/wizard-review-fwbxe3d2_review_wizard.json +0 -9
  74. package/skills/tmp/wizard-review-sypg5e9d_review_wizard.json +0 -9
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Kevlar-4u
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.ja.md ADDED
@@ -0,0 +1,348 @@
1
+ # Kevlar — コメント欄シミュレーター
2
+
3
+ ![Release](https://img.shields.io/github/actions/workflow/status/9Churze/kevlar-4u/release.yml?label=Release&logo=github)
4
+ ![License](https://img.shields.io/badge/license-MIT-blue)
5
+ ![Version](https://img.shields.io/badge/version-1.0.0-blue)
6
+ ![Node](https://img.shields.io/badge/node-%3E%3D20-brightgreen)
7
+
8
+ 🌐 [English](README.md) · [中文](README.zh.md) · [日本語](README.ja.md) · [한국어](README.ko.md)
9
+
10
+ ---
11
+
12
+ > **カジュアルユーザー、口うるさいネット民、技術層、メディア関係者など、さまざまな立場のリアクションをシミュレーション。公開前に表現の問題、誤解、コミュニケーションリスクを洗い出します。**
13
+
14
+ ---
15
+
16
+ 公開予定のあらゆるコンテンツ — **記事、ツイート、動画スクリプト、プロダクト紹介、プレスリリース、告知、Redditの投稿、V2EXの投稿、Hacker Newsのヘッドライン** — をそのままKevlarに放り込んでください。「いいね」だけを返すツールではありません。実際のインターネットのように、**疑問を投げかけ、誤解し、こき下ろし、細かいツッコミを入れ、理解度をテスト**します。
17
+
18
+ 書き手は往々にして**「知識の呪い」**に苦しみます:
19
+ 「明確に書いたつもりなのに、相手に伝わらない」
20
+ 「重要なポイントは強調したはずなのに、読者は何が言いたいのかわからない」
21
+
22
+ しかも、多くのプラットフォームには本当の意味での**A/Bテスト**はありません。一度公開してしまうと、**最初のオーガニックトラフィックの波**が過ぎ去った頃には、修正するには遅すぎます。
23
+
24
+ **Kevlarは、公開前にこれらの問題を明らかにします。**
25
+
26
+ ## こんな方におすすめ
27
+
28
+ **インディーデベロッパー** / **コンテンツクリエイター** / **プロダクトチーム** / **PRチーム** / X、Reddit、V2EX、Hacker Newsをよく利用する方 / コンテンツの質とリーチを向上させたいすべての方
29
+
30
+ ---
31
+
32
+ ## コア機能
33
+
34
+ ### 1. 高度にカスタマイズ可能なレビュアー(ペルソナカスタマイズ)
35
+
36
+ 単一のAI視点からの脱却を、包括的なペルソナカスタマイズで実現:
37
+
38
+ - **コア属性**:年齢、興味関心、性格、立場。
39
+ - **認知と関係性**:盲点(例:特定ドメインに対するバイアス)や、作者との社会的関係(例:厳しいメンター、過激な反対者)を定義。
40
+ - **文化適応**:入力コンテンツの言語を自動検出し、それにマッチしたローカライズされた文化的コンテキストを推論。
41
+
42
+ ### 2. 完全自動化フィードバックパイプライン
43
+
44
+ - **スマートディスパッチ**:作成した作品を貼り付けると、AIディスパッチャーが自動的にコンテンツの特性を分析。
45
+ - **精密マッチング**:最も関連性の高いレビュアーを動的にフィルタリングしてスケジューリング。
46
+ - **多次元的衝突**:多様な立場や専門的な視点から、差別化されたコメントとフィードバックを生成。
47
+
48
+ ---
49
+
50
+ ## クイックスタート
51
+
52
+ **Node.js 20+** が必要です。
53
+
54
+ ```bash
55
+ npm install # 依存関係をインストール
56
+ npm run build # TypeScript をコンパイル
57
+ npm run setup # ゼロコンフィグセットアップ(MCPクライアントを自動検出して設定を書き込み)
58
+ npm run kevlar-4u # インタラクティブインストールCLI(クライアントを手動選択)
59
+ ```
60
+
61
+ インストール後、AIクライアントを再起動すればKevlarを使い始められます。以下のクライアントを自動設定に対応:
62
+
63
+ **Claude Desktop** / **Cursor** / **Windsurf** / **OpenCode** / **Codex** / **Antigravity** / **CodeBuddy CN** / **WorkBuddy**
64
+
65
+ ローカル開発:
66
+
67
+ ```bash
68
+ npm run dev
69
+ ```
70
+
71
+ 本番起動:
72
+
73
+ ```bash
74
+ npm start
75
+ ```
76
+
77
+ ---
78
+
79
+ ## 使い方ガイド
80
+
81
+ ### コアワークフロー
82
+
83
+ Kevlarのすべての主要操作は Wizard ツールを通じて行います — AIに対して自然言語でやりたいことを伝えるだけで、Kevlarがすべてを処理します。
84
+
85
+ ### 推奨ツールフロー
86
+
87
+ | Wizardツール | 目的 | 主要な動作 |
88
+ | --- | --- | --- |
89
+ | `review_content_wizard` | コンテンツをレビュー | コンテンツ提出 → レビュアー選択 → 確認 → 多次元フィードバック |
90
+ | `create_persona_wizard` | ペルソナを作成 | キャラクターを説明 → AIがフィールドを抽出 → 最終確認 → ペルソナ保存 |
91
+ | `delete_persona_wizard` | ペルソナを削除 | 対象を選択 → `confirm delete {ペルソナ名}` と返信 → 完了 |
92
+ | `configure_wizard` | 設定を変更 | 変更内容をプレビュー → `confirm config changes` と返信 → 書き込み |
93
+
94
+ 低レベルの直接ツール(自動化スクリプト向け):
95
+
96
+ | ツール | 目的 |
97
+ | --- | --- |
98
+ | `create_persona` | ペルソナを直接、または下書きから作成 |
99
+ | `delete_persona` | ペルソナを直接削除(`confirm: true` が必要) |
100
+ | `configure` | 設定を直接書き込み |
101
+ | `get_execution_modes` | 現在のモードと利用可能性を確認 |
102
+ | `list_personas` | ローカルのペルソナ一覧を表示 |
103
+ | `kevlar_help` | ヘルプを表示 |
104
+
105
+ ### コンテンツレビューフロー
106
+
107
+ `review_content_wizard` は「コンテンツ保存、レビュアー選択、実行確認」を安定したフローとして連結します。
108
+
109
+ ```mermaid
110
+ flowchart TD
111
+ A["Submit content for review"] --> B{"Number of local personas"}
112
+ B -->|0| C["Prompt to create a persona first, save current content state"]
113
+ B -->|1-2| D["Show all reviewers, ask user to confirm"]
114
+ B -->|3+| E["Sampling recommendation or heuristic recommendation of 1-3 reviewers"]
115
+ D --> F["Execute review internally"]
116
+ E --> F
117
+ ```
118
+
119
+ ### レビュアーペルソナの作成
120
+
121
+ `create_persona_wizard` はペルソナ作成をステップバイステップでガイドします。
122
+
123
+ ```mermaid
124
+ flowchart LR
125
+ A["Age range"] --> B["Interests"]
126
+ B --> C["Personality traits"]
127
+ C --> D["Platforms"]
128
+ D --> E["Final confirmation"]
129
+ E -->|Confirm creation| F["Save persona"]
130
+ E -->|Edit fields| E
131
+ ```
132
+
133
+ 作成後、Kevlarは自動的に文化的背景、作者との関係、立場、盲点を推論し、`skills/*.md` に保存します。
134
+
135
+ ---
136
+
137
+ ## 実行モード
138
+
139
+ Kevlarは3つの実行モードをサポートしています。デフォルトの `auto` は環境に基づいて最適なモードを選択します。
140
+
141
+ | モード | 識別子 | 説明 | 最適な用途 |
142
+ | --- | --- | --- | --- |
143
+ | MCP Sampling | `mcp_sampling` | 各レビュアーに独立したサンプリングリクエスト、最大分離 | Sampling対応クライアント、本格的な多視点レビューが必要な場合 |
144
+ | Direct API | `direct_api` | 外部モデルAPIを直接呼び出し | Sampling非対応クライアント、またはスクリプト自動化 |
145
+ | Orchestration(ホスト補助フォールバック) | `orchestration` | ホストAIが補完、低分離のフォールバック | SamplingもAPI Keyも利用できない場合の最終手段 |
146
+
147
+ `auto` モードの解決順序:
148
+
149
+ 1. `skills/kevlar-config.json` で指定されたモードを使用(設定されている場合)
150
+ 2. なければ `KEVLAR_MODE` 環境変数を読み取り
151
+ 3. なければ利用可能性に応じて自動選択:`mcp_sampling` → `direct_api` → `orchestration`
152
+
153
+ ---
154
+
155
+ ## 設定
156
+
157
+ ### 実行時設定
158
+
159
+ `configure_wizard` を使って実行時の設定を変更できます。設定は `skills/kevlar-config.json` に書き込まれます(ローカルのみ、リポジトリにはコミットされません)。
160
+
161
+ ```json
162
+ {
163
+ "mode": "auto",
164
+ "multiAgent": {
165
+ "maxConcurrency": 3
166
+ }
167
+ }
168
+ ```
169
+
170
+ ### 環境変数
171
+
172
+ | 変数 | デフォルト値 | 説明 |
173
+ | --- | --- | --- |
174
+ | `KEVLAR_MODE` | `auto` | `auto`, `orchestration`, `mcp_sampling`, `direct_api` |
175
+ | `KEVLAR_MAX_CONCURRENT` | `3` | 最大同時レビュアー数 |
176
+ | `KEVLAR_TOKEN_BUDGET_PER_TASK` | `50000` | レビュータスクあたりのトークン予算 |
177
+ | `KEVLAR_MIN_DELAY_MS` | `1000` | リクエスト間の最小遅延 |
178
+ | `KEVLAR_SKILLS_DIR` | `<repo>/skills` | カスタムペルソナと設定ディレクトリ |
179
+ | `KEVLAR_API_KEY` | — | 優先Direct APIキー |
180
+ | `ANTHROPIC_API_KEY` | — | Anthropic APIキー |
181
+ | `OPENAI_API_KEY` | — | OpenAI APIキー |
182
+ | `LOG_LEVEL` | `info` | `debug`, `info`, `warn`, `error` |
183
+
184
+ > APIキーは環境変数からのみ読み取られます — 設定ファイルに書き込まれることは決してありません。
185
+
186
+ ### MCPクライアントの手動設定
187
+
188
+ Claude Desktopの例:
189
+
190
+ ```json
191
+ {
192
+ "mcpServers": {
193
+ "kevlar": {
194
+ "command": "node",
195
+ "args": ["/ABSOLUTE/PATH/TO/kevlar/dist/index.js"],
196
+ "env": {
197
+ "KEVLAR_MODE": "auto",
198
+ "KEVLAR_MAX_CONCURRENT": "3"
199
+ }
200
+ }
201
+ }
202
+ }
203
+ ```
204
+
205
+ カスタムペルソナディレクトリ:
206
+
207
+ ```json
208
+ {
209
+ "env": {
210
+ "KEVLAR_SKILLS_DIR": "/ABSOLUTE/PATH/TO/skills"
211
+ }
212
+ }
213
+ ```
214
+
215
+ ---
216
+
217
+ ## セキュリティ境界
218
+
219
+ - `sessionId` は `[a-z0-9-]` のみ許可。
220
+ - ペルソナの書き込み・削除操作は、パスバリデーションにより `skills/` ディレクトリ内に制限。
221
+ - 実行中の下書きやウィザード状態は `skills/tmp/` に保存され、起動時に期限切れの下書きはクリーンアップ。
222
+ - ペルソナ削除には対象の選択と完全な確認フレーズの返信が必要。
223
+ - 設定変更は確認前にプレビューが必須。
224
+ - APIキーはツールパラメータ経由で渡されたり、ローカル設定に書き込まれることはありません。
225
+ - `orchestration` 以外のモードではレビューロックを使用し、複数の外部モデルタスク間のリソース競合を防止。
226
+
227
+ ---
228
+
229
+ ## アーキテクチャ概要
230
+
231
+ Kevlarは**サーバーサイドワークフロー+実行レイヤー**アーキテクチャを採用しています。
232
+
233
+ ```mermaid
234
+ flowchart TD
235
+ User["User"] --> Client["MCP Client / Host AI"]
236
+ Client --> Tools["Kevlar MCP Tools"]
237
+ Tools --> Wizards["Server-side State Machine Wizards"]
238
+ Tools --> Execution["Multi-mode Execution Layer"]
239
+ Wizards --> Tmp["skills/tmp Session State"]
240
+ Execution --> Personas["skills/*.md Reviewer Personas"]
241
+ Execution --> Report["Structured Review Report"]
242
+ ```
243
+
244
+ 設計原則:
245
+
246
+ - **ステートマシン駆動のワークフロー**:主要フローはツールのステートマシンによって維持され、ホストAIが長いプロンプトを記憶することに依存しない。
247
+ - **AIが理解と表現を担当**:AIは自然言語の抽出、洗練、レコメンデーションを処理し、結果はKevlarが検証可能な状態に書き込まれる。
248
+ - **適応的実行**:MCP Samplingが利用可能な場合はフィールド抽出とレビュアーレコメンデーションに使用し、そうでなければヒューリスティックロジックまたはホスト補助のオーケストレーションにフォールバック。
249
+ - **安全な確認**:削除、リセット、設定書き込みなどの高リスク操作は、すべて確認ウィザードを通過する。
250
+
251
+ ### ディレクトリ構造
252
+
253
+ ```text
254
+ kevlar/
255
+ ├── config/
256
+ │ └── mcp-config.json # MCP client config template
257
+ ├── docs/ # Architecture design, audit reports
258
+ ├── scripts/ # Install & config scripts
259
+ │ ├── cli.ts # Interactive install CLI
260
+ │ ├── registry.ts # MCP client detection
261
+ │ └── setup.ts # Zero-config setup script
262
+ ├── skills/ # Reviewer persona library
263
+ │ ├── _template.md # Persona template
264
+ │ └── tmp/ # Runtime wizard session state
265
+ ├── src/
266
+ │ ├── index.ts # stdio server entry
267
+ │ ├── server.ts # MCP server, DI, tool registration
268
+ │ ├── __tests__/ # Test suite
269
+ │ ├── execution/ # Multi-mode execution layer
270
+ │ │ ├── index.ts # Execution entry, mode resolution
271
+ │ │ ├── base.ts # Type definitions & interfaces
272
+ │ │ ├── client.ts # Client capability detection
273
+ │ │ ├── config.ts # Config read/write
274
+ │ │ ├── aggregator.ts # Review report aggregation
275
+ │ │ ├── limiter.ts # Concurrency limiting & retry
276
+ │ │ ├── lock.ts # Review lock
277
+ │ │ ├── parallel.ts # Shared parallel execution
278
+ │ │ └── modes/
279
+ │ │ ├── orchestration.ts
280
+ │ │ ├── sampling.ts
281
+ │ │ └── direct_api.ts
282
+ │ ├── tools/ # MCP tools
283
+ │ │ ├── index.ts # Tool registry
284
+ │ │ ├── listPersonasTool.ts
285
+ │ │ ├── createPersonaTool.ts # Create persona + draft management
286
+ │ │ ├── createPersonaWizardTool.ts
287
+ │ │ ├── deletePersonaTool.ts
288
+ │ │ ├── deletePersonaWizardTool.ts
289
+ │ │ ├── reviewTool.ts
290
+ │ │ ├── reviewContentWizardTool.ts
291
+ │ │ ├── configureTool.ts
292
+ │ │ ├── configureWizardTool.ts
293
+ │ │ ├── getModesTool.ts
294
+ │ │ └── helpTool.ts
295
+ │ ├── prompts/
296
+ │ │ └── reviewDispatcherPrompt.ts # Internal design reference
297
+ │ └── utils/
298
+ │ ├── errors.ts # Error codes & formatting
299
+ │ ├── logger.ts # Structured logging
300
+ │ ├── parser.ts # Persona file parsing & writing
301
+ │ ├── sanitize.ts # Credential scanning, prompt boundary handling
302
+ │ └── ...
303
+ └── package.json
304
+ ```
305
+
306
+ ---
307
+
308
+ ## レビューペルソナのコントリビュート
309
+
310
+ `skills/` 以下にプラットフォームごとにサブディレクトリと `.md` ファイルを追加するか、`skills/` 直下に配置してください。カスタムペルソナファイルはデフォルトで `.gitignore` により除外され、リポジトリにコミットされません。
311
+
312
+ テンプレート `skills/_template.md` を参照:
313
+
314
+ ```markdown
315
+ ---
316
+ id: your_persona_id
317
+ name: Display name
318
+ description: One-line description of what this reviewer focuses on
319
+ tags:
320
+ - Platform
321
+ - Interest
322
+ author: custom
323
+ ---
324
+
325
+ Age range:
326
+ Interests:
327
+ Platforms:
328
+ Personality traits:
329
+ - Trait → Behavior
330
+
331
+ Cultural background:
332
+ Relationship with author:
333
+ Stance:
334
+ Blind spots:
335
+ ```
336
+
337
+ カスタムペルソナはレビューに参加する前にフィールドの完全性バリデーションを受けます。最低でも、プラットフォーム、性格特性、盲点などの情報がパース可能であるか、descriptionに含まれている必要があります。
338
+
339
+ ---
340
+
341
+ ## リリース前チェックリスト
342
+
343
+ ```bash
344
+ npm run build
345
+ npm test
346
+ ```
347
+
348
+ リリース前には、[docs/PRE_RELEASE_AUDIT_REQUEST.md](docs/PRE_RELEASE_AUDIT_REQUEST.md) をローカルAIに渡して独立した監査を依頼することを推奨します。