watashi-db 0.0.13 → 0.0.15
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.
- package/CLAUDE.md +36 -0
- package/LICENSE +1 -1
- package/README.md +64 -2
- package/cowork-plugin/skills/groom/SKILL.md +51 -15
- package/cowork-plugin/skills/recall/SKILL.md +5 -6
- package/cowork-plugin/skills/reflect/SKILL.md +4 -4
- package/cowork-plugin/skills/remember/SKILL.md +3 -3
- package/cowork-plugin/skills/session-start/SKILL.md +3 -3
- package/dist/auth/token.d.ts +7 -0
- package/dist/auth/token.js +14 -0
- package/dist/auth/token.js.map +1 -0
- package/dist/config/schema.js +1 -1
- package/dist/constants.d.ts +9 -9
- package/dist/constants.js +29 -43
- package/dist/constants.js.map +1 -1
- package/dist/database/archive.js +6 -6
- package/dist/database/groom.js +5 -5
- package/dist/database/groom.js.map +1 -1
- package/dist/database/queries-core.d.ts +109 -5
- package/dist/database/queries-core.js +546 -186
- package/dist/database/queries-core.js.map +1 -1
- package/dist/database/queries.d.ts +85 -5
- package/dist/database/queries.js +33 -0
- package/dist/database/queries.js.map +1 -1
- package/dist/database/schema.d.ts +1 -0
- package/dist/database/schema.js +2299 -406
- package/dist/database/schema.js.map +1 -1
- package/dist/embedding/embed-on-write.d.ts +7 -1
- package/dist/embedding/embed-on-write.js +8 -3
- package/dist/embedding/embed-on-write.js.map +1 -1
- package/dist/hook.js +17 -9
- package/dist/hook.js.map +1 -1
- package/dist/http-server.d.ts +6 -0
- package/dist/http-server.js +235 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/resources/config-guide-content.d.ts +1 -1
- package/dist/resources/config-guide-content.js +2 -2
- package/dist/server-core.d.ts +15 -0
- package/dist/server-core.js +113 -0
- package/dist/server-core.js.map +1 -0
- package/dist/server-instructions.js +27 -24
- package/dist/server-instructions.js.map +1 -1
- package/dist/server.d.ts +4 -1
- package/dist/server.js +9 -103
- package/dist/server.js.map +1 -1
- package/dist/setup.js +5 -6
- package/dist/setup.js.map +1 -1
- package/dist/store/federation.d.ts +12 -1
- package/dist/store/federation.js +38 -0
- package/dist/store/federation.js.map +1 -1
- package/dist/store/sync-manager.d.ts +1 -1
- package/dist/store/sync-manager.js +9 -9
- package/dist/tools/claim-tools.d.ts +1 -1
- package/dist/tools/claim-tools.js +30 -17
- package/dist/tools/claim-tools.js.map +1 -1
- package/dist/tools/decision-tools.d.ts +1 -1
- package/dist/tools/decision-tools.js +23 -7
- package/dist/tools/decision-tools.js.map +1 -1
- package/dist/tools/episode-tools.d.ts +1 -1
- package/dist/tools/episode-tools.js +28 -7
- package/dist/tools/episode-tools.js.map +1 -1
- package/dist/tools/file-tools.d.ts +3 -0
- package/dist/tools/file-tools.js +350 -0
- package/dist/tools/file-tools.js.map +1 -0
- package/dist/tools/get-tools.d.ts +1 -1
- package/dist/tools/get-tools.js +39 -5
- package/dist/tools/get-tools.js.map +1 -1
- package/dist/tools/helpers.d.ts +40 -0
- package/dist/tools/helpers.js +69 -0
- package/dist/tools/helpers.js.map +1 -1
- package/dist/tools/knowledge-tools.d.ts +1 -1
- package/dist/tools/knowledge-tools.js +38 -6
- package/dist/tools/knowledge-tools.js.map +1 -1
- package/dist/tools/maintenance-tools.d.ts +1 -1
- package/dist/tools/maintenance-tools.js +95 -52
- package/dist/tools/maintenance-tools.js.map +1 -1
- package/dist/tools/memo-tools.d.ts +7 -11
- package/dist/tools/memo-tools.js +509 -309
- package/dist/tools/memo-tools.js.map +1 -1
- package/dist/tools/query-tools.d.ts +1 -1
- package/dist/tools/query-tools.js +266 -242
- package/dist/tools/query-tools.js.map +1 -1
- package/dist/types.d.ts +513 -76
- package/dist/types.js +185 -33
- package/dist/types.js.map +1 -1
- package/misc/20260316_110841_groom-recipe.md +483 -0
- package/misc/20260316_xaml-testing-library-recipe.md +817 -0
- package/misc/20260331_remote-transport-recipe.md +316 -0
- package/package.json +4 -2
- package/scripts/update-license-version.sh +7 -0
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# リリース手順
|
|
2
|
+
|
|
3
|
+
**重要: 順番を厳守すること。push 前にタグを remote に送らない。**
|
|
4
|
+
|
|
5
|
+
1. `npm version patch` — package.json 更新 + コミット + **ローカルタグ自動作成**
|
|
6
|
+
2. `git push origin main` — コミットを先に push(ここで失敗したらタグは送らない)
|
|
7
|
+
3. `git push origin v<version>` — push 成功を確認してからタグを push
|
|
8
|
+
4. GitHub Actions (publish.yml) が tag push → npm publish を自動実行
|
|
9
|
+
|
|
10
|
+
### なぜこの順番か
|
|
11
|
+
|
|
12
|
+
- `npm version` はタグも自動作成するので `git tag` は不要
|
|
13
|
+
- コミットの push が失敗した場合、タグだけ remote にある不整合を防ぐため、push を2段階にする
|
|
14
|
+
- タグ番号は package.json の version と一致させる(真実の源泉は package.json)
|
|
15
|
+
|
|
16
|
+
### タグの打ち直しが必要になった場合
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
git tag -d v<version> # ローカルタグ削除
|
|
20
|
+
git push origin :refs/tags/v<version> # リモートタグ削除(push済みの場合のみ)
|
|
21
|
+
# 修正後、再度 npm version で打ち直す
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### ライセンス
|
|
25
|
+
|
|
26
|
+
BSL 1.1。リリース時に LICENSE の `Licensed Work` バージョンも更新すること。
|
|
27
|
+
|
|
28
|
+
# バージョンアップ時の LICENSE 更新
|
|
29
|
+
|
|
30
|
+
LICENSE ファイルの `Licensed Work:` 行を新バージョンに合わせて更新する:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
Licensed Work: watashi-db <new-version>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Change Date は各バージョンのリリース日から3年後に設定する。
|
package/LICENSE
CHANGED
|
@@ -3,7 +3,7 @@ Business Source License 1.1
|
|
|
3
3
|
Parameters
|
|
4
4
|
|
|
5
5
|
Licensor: bareforge
|
|
6
|
-
Licensed Work: watashi-db 0.0.
|
|
6
|
+
Licensed Work: watashi-db 0.0.15
|
|
7
7
|
The Licensed Work is (c) 2026 bareforge
|
|
8
8
|
Additional Use Grant: You may make use of the Licensed Work, provided that
|
|
9
9
|
you may not use the Licensed Work for a Commercial
|
package/README.md
CHANGED
|
@@ -99,6 +99,31 @@ Claude Code を再起動すれば使えます。
|
|
|
99
99
|
> watashi-db への記録・活用は server instructions 経由の LLM 任せとなります。
|
|
100
100
|
> 背景: [#31](https://github.com/bareforge/watashi-db/issues/31), [#32](https://github.com/bareforge/watashi-db/issues/32)
|
|
101
101
|
|
|
102
|
+
### ステップ 2': Codex CLI 向け推奨設定(オプション)
|
|
103
|
+
|
|
104
|
+
Codex CLI で使う場合、デフォルトは全許可(読み書き両方可能)で、そのまま使えます。
|
|
105
|
+
書き込みを制限したい場合は、`~/.watashi-db/config.json` の `client_policies` で制御できます:
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"client_policies": {
|
|
110
|
+
"codex": {
|
|
111
|
+
"read": {
|
|
112
|
+
"categories": ["skill", "workflow", "knowledge", "preference"],
|
|
113
|
+
"scopes": ["global", "project:*"]
|
|
114
|
+
},
|
|
115
|
+
"write": "none"
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Embedding(意味検索)を使う場合は、MCP 登録時に環境変数を渡してください:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
codex mcp add watashi-db --env OPENAI_API_KEY=$OPENAI_API_KEY -- npx -y watashi-db@latest
|
|
125
|
+
```
|
|
126
|
+
|
|
102
127
|
### Claude Code Cowork プラグイン
|
|
103
128
|
|
|
104
129
|
リポジトリの `cowork-plugin/` ディレクトリに Cowork 用プラグインが含まれています。
|
|
@@ -128,6 +153,37 @@ MCP 設定で `watashi-db@latest` を指定していれば、Claude の再起動
|
|
|
128
153
|
npm install -g watashi-db@latest
|
|
129
154
|
```
|
|
130
155
|
|
|
156
|
+
### Embedding — 意味検索(オプション)
|
|
157
|
+
|
|
158
|
+
Embedding を設定すると、キーワード一致だけでなく意味の近さで検索できるようになります。
|
|
159
|
+
未設定でも FTS5(全文検索)のみで動作します。
|
|
160
|
+
|
|
161
|
+
開発時点(2026-03)では、以下の3つのプロバイダーが組み込まれています。
|
|
162
|
+
それぞれの環境と判断に基づいて使用するモデルを選択してください。
|
|
163
|
+
|
|
164
|
+
| プロバイダー | 費用 | 特徴 | 設定例 |
|
|
165
|
+
|-------------|------|------|--------|
|
|
166
|
+
| Transformers.js | 無料 | ローカル実行。初回に約 80MB のモデルダウンロードが発生し、常駐メモリが約 100〜150MB 増加する | `"provider": "transformers"`, `"model": "Xenova/all-MiniLM-L6-v2"`, `"dimensions": 384` |
|
|
167
|
+
| Ollama | 無料 | 別途 [Ollama](https://ollama.com) サーバーを起動する必要がある。より高精度なモデルも選択可能 | `"provider": "ollama"`, `"model": "nomic-embed-text"`, `"dimensions": 768`, `"base_url": "http://localhost:11434"` |
|
|
168
|
+
| OpenAI | 有料 | 高精度。環境変数 `OPENAI_API_KEY` が必要 | `"provider": "openai"`, `"model": "text-embedding-3-small"`, `"dimensions": 1536` |
|
|
169
|
+
|
|
170
|
+
`~/.watashi-db/config.json` に `embedding` セクションを追加してください:
|
|
171
|
+
|
|
172
|
+
```json
|
|
173
|
+
// Transformers.js(無料・ローカル)
|
|
174
|
+
{ "embedding": { "provider": "transformers", "model": "Xenova/all-MiniLM-L6-v2", "dimensions": 384 } }
|
|
175
|
+
|
|
176
|
+
// Ollama(無料・要サーバー)
|
|
177
|
+
{ "embedding": { "provider": "ollama", "model": "nomic-embed-text", "dimensions": 768, "base_url": "http://localhost:11434" } }
|
|
178
|
+
|
|
179
|
+
// OpenAI(有料・高精度)
|
|
180
|
+
{ "embedding": { "provider": "openai", "model": "text-embedding-3-small", "dimensions": 1536 } }
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
> [!WARNING]
|
|
184
|
+
> プロバイダーやモデルを切り替えると、既存の全レコードのベクトル値を更新する必要があります。
|
|
185
|
+
> 更新は `watashi_maintain(action="backfill_embeddings")` で行えますが、有料モデルを選択した場合はこの作業でまとまった API 課金が発生します。
|
|
186
|
+
|
|
131
187
|
### バックアップ・同期・マルチStore(オプション)
|
|
132
188
|
|
|
133
189
|
`~/.watashi-db/config.json` を作成すると、以下の機能が使えます。
|
|
@@ -273,8 +329,14 @@ watashi_log_decision:
|
|
|
273
329
|
| `watashi_log_decision` | 意思決定を構造的に記録 |
|
|
274
330
|
| `watashi_log_episode` | エピソード(問題→決定→結果→教訓)を記録 |
|
|
275
331
|
| `watashi_store_knowledge` | Theory/Insight/Model を記録 |
|
|
276
|
-
| `watashi_store_user_memo` |
|
|
277
|
-
| `watashi_update_user_memo` |
|
|
332
|
+
| `watashi_store_user_memo` | 参照用メモを記録 |
|
|
333
|
+
| `watashi_update_user_memo` | メモを更新 |
|
|
334
|
+
| `watashi_store_user_plan` | チェックリスト型の作業計画を記録 |
|
|
335
|
+
| `watashi_update_user_plan` | 作業計画のメタ情報を更新 |
|
|
336
|
+
| `watashi_check_user_plan` | チェックリスト項目を済にする(全項目済で自動完了) |
|
|
337
|
+
| `watashi_store_user_issue` | 課題・議論を記録 |
|
|
338
|
+
| `watashi_update_user_issue` | 課題のメタ情報を更新 |
|
|
339
|
+
| `watashi_comment_user_issue` | 課題にタイムスタンプ付きコメントを追記 |
|
|
278
340
|
| `watashi_maintain` | DB保守(統計・バックアップ・エクスポート・棚卸・Store管理) |
|
|
279
341
|
|
|
280
342
|
---
|
|
@@ -17,34 +17,68 @@ description: >
|
|
|
17
17
|
- `watashi_search(entity_types=["decision"], limit=50)`: active Decision一覧
|
|
18
18
|
- `watashi_search(entity_types=["insight"], limit=20)`: 既存Insight(重複回避用)
|
|
19
19
|
|
|
20
|
-
### Step 2:
|
|
20
|
+
### Step 2: クラスタリング
|
|
21
21
|
収集したEpisode/Decisionから以下を分析:
|
|
22
22
|
|
|
23
|
-
1.
|
|
24
|
-
2.
|
|
25
|
-
3. **既存Insightとの照合**:
|
|
23
|
+
1. **類似Episodeのグループ化**: トピック・問題パターンが共通するEpisodeをクラスタにまとめる
|
|
24
|
+
2. **各クラスタに仮タイトルを付ける**: 「〜に関する問題群」のように命名
|
|
25
|
+
3. **既存Insightとの照合**: 既にカバーされているクラスタは除外
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
- **Insight**: 具体的で再利用可能な知見(1つのパターン)
|
|
29
|
-
→ `watashi_store_knowledge(kind='insight', supporting_episode_ids=[...])`
|
|
30
|
-
- **Theory**: 体系的なフレームワーク(複数パターンの統合)
|
|
31
|
-
→ `watashi_store_knowledge(kind='theory', supporting_episode_ids=[...])`
|
|
27
|
+
素材が5件未満、またはクラスタが形成できない場合は蒸留を見送り、蓄積を促す。
|
|
32
28
|
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
### Step 3: 探索軸による分析(蒸留の核心)
|
|
30
|
+
各クラスタに対して、以下の観点で**すべて検討**する:
|
|
35
31
|
|
|
36
|
-
|
|
32
|
+
| 探索軸 | 問い | 例 |
|
|
33
|
+
|--------|------|----|
|
|
34
|
+
| **手順化** | チェックリストで防げるか? | 「カラム追加時の確認事項」 |
|
|
35
|
+
| **自動化** | コード・ツール・lintで検出できるか? | 「CI でカラム順チェック」 |
|
|
36
|
+
| **ルール化** | 制約・規約として定義できるか? | 「命名規則: device = デバイス」 |
|
|
37
|
+
| **検出強化** | テスト・レビューで拾えるか? | 「スキーマテストに含める」 |
|
|
38
|
+
| **不要** | 個別対応で十分か? | 「再発可能性が低い一過性の問題」 |
|
|
39
|
+
|
|
40
|
+
各軸について「適用可能」か「不要(理由)」を判定する。
|
|
41
|
+
**同じ種類の発想を繰り返さない**こと。各軸は異なる視点からのアプローチ。
|
|
42
|
+
|
|
43
|
+
### Step 4: Insight/Theory 案の構成と提案
|
|
44
|
+
分析結果から最適な形を選び、以下の形式でユーザーに提案する。
|
|
45
|
+
**書き込む前に必ずユーザーの確認を得ること。**
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
### 蒸留提案 #1
|
|
49
|
+
**種別**: Insight / Theory
|
|
50
|
+
**タイトル**: [具体的で検索しやすいタイトル]
|
|
51
|
+
**出典Episode**: [ID一覧 + 各タイトル]
|
|
52
|
+
**探索結果**:
|
|
53
|
+
- 手順化: [適用可能 — 理由] / [不要 — 理由]
|
|
54
|
+
- 自動化: [適用可能 — 理由] / [不要 — 理由]
|
|
55
|
+
- ルール化: [適用可能 — 理由] / [不要 — 理由]
|
|
56
|
+
- 検出強化: [適用可能 — 理由] / [不要 — 理由]
|
|
57
|
+
**採用した形式**: [手順化] ← なぜこれが最適かを一言で
|
|
58
|
+
**l2_trigger_conditions**: [いつ適用するか]
|
|
59
|
+
**l2_principles**: [行動可能な教訓 1〜3個]
|
|
60
|
+
**l2_resolution_steps**: [具体的な手順]
|
|
61
|
+
|
|
62
|
+
→ このまま書き込みますか?修正がありますか?
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
ユーザーが承認したら `watashi_store_knowledge` で書き込む。
|
|
66
|
+
修正指示があれば反映してから書き込む。
|
|
67
|
+
|
|
68
|
+
「まとめただけ」にならないよう、**「次に同じ状況になったときの行動が変わる」**レベルの知見を目指す。
|
|
69
|
+
|
|
70
|
+
### Step 5: グルーミング済みマーク
|
|
37
71
|
蒸留に使用したEpisodeをマーク:
|
|
38
72
|
- `watashi_maintain(action='mark_groomed', episode_ids=[...])`
|
|
39
73
|
|
|
40
|
-
### Step
|
|
74
|
+
### Step 6: アーカイブ(ユーザー承認制)
|
|
41
75
|
蒸留済みの古いレコードをアーカイブ(最新20件は維持):
|
|
42
76
|
1. `watashi_maintain(action='archive_episodes', archive_keep_latest=20, dry_run=true)` でプレビュー
|
|
43
77
|
2. 件数と対象をユーザーに提示し、承認を得る
|
|
44
78
|
3. 承認後 `dry_run=false` で実行
|
|
45
79
|
4. Decision も同様に実行
|
|
46
80
|
|
|
47
|
-
### Step
|
|
81
|
+
### Step 7: サマリー報告
|
|
48
82
|
|
|
49
83
|
## 出力形式
|
|
50
84
|
|
|
@@ -54,6 +88,7 @@ l2_trigger_conditions(いつ適用するか)と l2_resolution_steps(具体
|
|
|
54
88
|
### 分析した素材
|
|
55
89
|
- Episode: X件(うち未グルーミング: Y件)
|
|
56
90
|
- Decision: Z件
|
|
91
|
+
- クラスタ: N個
|
|
57
92
|
|
|
58
93
|
### 蒸留結果
|
|
59
94
|
- 新規Insight: N件
|
|
@@ -68,5 +103,6 @@ l2_trigger_conditions(いつ適用するか)と l2_resolution_steps(具体
|
|
|
68
103
|
## 注意事項
|
|
69
104
|
- 素材が5件未満の場合は蒸留を見送り、蓄積を促す
|
|
70
105
|
- アーカイブは必ず dry_run でプレビュー → ユーザー承認後に実行
|
|
71
|
-
- supporting_episode_ids
|
|
106
|
+
- supporting_episode_ids を必ず設定する(2件以上で行動制約候補に昇格)
|
|
72
107
|
- 既存のInsight/Theoryと重複する場合は統合を提案する
|
|
108
|
+
- **Insight/Theory/Model の書き込みは必ずユーザー確認後に行う**(通常記録と異なる)
|
|
@@ -15,15 +15,14 @@ watashi-db から過去のコンテキストを検索・参照します。
|
|
|
15
15
|
|
|
16
16
|
## 手順
|
|
17
17
|
|
|
18
|
-
1. **概要確認**: 引数なし、または初回利用時はまず `
|
|
18
|
+
1. **概要確認**: 引数なし、または初回利用時はまず `watashi_get(entity_type='profile')` でプロファイルの全体像を確認する
|
|
19
19
|
|
|
20
20
|
2. **トピック特定**: $ARGUMENTS または会話の文脈から検索キーワードを抽出
|
|
21
21
|
|
|
22
|
-
3. **検索実行**:
|
|
23
|
-
- `
|
|
24
|
-
- `
|
|
25
|
-
- `
|
|
26
|
-
- `watashi_get_context_pack`: トークン予算を指定した効率的な検索
|
|
22
|
+
3. **検索実行**: `watashi_search` で全エンティティ横断検索を行う:
|
|
23
|
+
- `query`: 検索キーワード(自然言語可)
|
|
24
|
+
- `entity_types`: 絞り込む場合は `["claim"]`, `["episode"]` 等を指定
|
|
25
|
+
- `category`: Claim のカテゴリで絞り込む場合に指定(skill, preference 等)
|
|
27
26
|
|
|
28
27
|
4. **結果の活用**:
|
|
29
28
|
- 検索結果が0件なら何も報告しない(ユーザーの邪魔をしない)
|
|
@@ -9,10 +9,10 @@ description: 記録されたエピソードや意思決定を振り返り、パ
|
|
|
9
9
|
|
|
10
10
|
## 手順
|
|
11
11
|
|
|
12
|
-
1. **データ収集**:
|
|
13
|
-
- `
|
|
14
|
-
- `
|
|
15
|
-
- `
|
|
12
|
+
1. **データ収集**: 以下の検索を並行して実行し、記録済みデータを取得する:
|
|
13
|
+
- `watashi_search(entity_types=['episode'], query=...)`: エピソード一覧(引数があればキーワードで絞り込み)
|
|
14
|
+
- `watashi_search(entity_types=['decision'], query=...)`: 意思決定一覧(引数があればキーワードで絞り込み)
|
|
15
|
+
- `watashi_search(entity_types=['claim'], category='value', query=...)`: 関連するClaim(value, workflow を優先)
|
|
16
16
|
|
|
17
17
|
2. **パターン分析**: 取得したデータから以下のパターンを抽出する:
|
|
18
18
|
- **繰り返し現れるテーマ**: 複数のエピソードに共通するトピック
|
|
@@ -10,15 +10,15 @@ description: ユーザーの好み・スキル・知識・価値観などをわ
|
|
|
10
10
|
## 手順
|
|
11
11
|
|
|
12
12
|
1. **引数の解析**: `$ARGUMENTS` の内容を分析し、記録の種類を判別する:
|
|
13
|
-
- **好み(preference)**: 「〜が好き」「〜を使いたい」→ `
|
|
13
|
+
- **好み(preference)**: 「〜が好き」「〜を使いたい」→ `watashi_store_claim` を使用(category: preference)
|
|
14
14
|
- **スキル(skill)**: 「〜ができる」「〜を学んだ」→ `watashi_store_claim` を使用(category: skill)
|
|
15
15
|
- **知識(knowledge)**: 「〜について知っている」→ `watashi_store_claim` を使用(category: knowledge)
|
|
16
16
|
- **価値観(value)**: 「〜を大切にしている」→ `watashi_store_claim` を使用(category: value)
|
|
17
17
|
- **ワークフロー(workflow)**: 「〜の手順で作業する」→ `watashi_store_claim` を使用(category: workflow)
|
|
18
18
|
- **アイデンティティ(identity)**: 「〜として活動している」→ `watashi_store_claim` を使用(category: identity)
|
|
19
19
|
|
|
20
|
-
2. **重複チェック**: `
|
|
21
|
-
- 類似Claimが見つかった場合、更新(`watashi_update_claim
|
|
20
|
+
2. **重複チェック**: `watashi_search(entity_types=['claim'], query=...)` で類似する既存Claimがないか確認する。
|
|
21
|
+
- 類似Claimが見つかった場合、更新(`watashi_update_claim`)を提案する。
|
|
22
22
|
|
|
23
23
|
3. **記録実行**: 適切なツールで記録を行う。
|
|
24
24
|
- `subject`: 通常は "user"
|
|
@@ -6,13 +6,13 @@ description: セッション開始時にユーザーのプロファイルとコ
|
|
|
6
6
|
|
|
7
7
|
## 手順
|
|
8
8
|
|
|
9
|
-
1. **プロファイル読み込み**: `
|
|
9
|
+
1. **プロファイル読み込み**: `watashi_get(entity_type='profile')` を呼び出して、ユーザーの好み・スキル・価値観の全体像を取得する。
|
|
10
10
|
|
|
11
|
-
2. **関連コンテキスト取得**: `
|
|
11
|
+
2. **関連コンテキスト取得**: `watashi_search` を呼び出して、現在のプロジェクトや作業に関連する直近のコンテキストを取得する。
|
|
12
12
|
- scopeパラメータがあれば、プロジェクトスコープで絞り込む(例: `project:watashi-db`)
|
|
13
13
|
- なければ `global` スコープで取得
|
|
14
14
|
|
|
15
|
-
3. **直近のエピソード確認**: `
|
|
15
|
+
3. **直近のエピソード確認**: `watashi_search(entity_types=['episode'], limit=3)` を呼び出して、最近記録されたエピソード(思考パターン・意思決定)を2〜3件取得する。
|
|
16
16
|
|
|
17
17
|
4. **コンテキスト要約の提供**: 取得した情報をもとに、以下を含む簡潔な挨拶を行う:
|
|
18
18
|
- ユーザーの主要な好み・作業スタイルの認識
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bearer Token 認証
|
|
3
|
+
* 環境変数 WATASHI_AUTH_TOKEN が設定されている場合のみ有効。
|
|
4
|
+
* 未設定時は認証なし(ローカル開発用)。
|
|
5
|
+
*/
|
|
6
|
+
export function validateRequest(authHeader) {
|
|
7
|
+
const expected = process.env.WATASHI_AUTH_TOKEN;
|
|
8
|
+
if (!expected)
|
|
9
|
+
return true; // トークン未設定 = 認証なし
|
|
10
|
+
if (!authHeader?.startsWith("Bearer "))
|
|
11
|
+
return false;
|
|
12
|
+
return authHeader.slice(7) === expected;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/auth/token.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,UAAU,eAAe,CAAC,UAA8B;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAChD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,iBAAiB;IAC7C,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;AAC1C,CAAC"}
|
package/dist/config/schema.js
CHANGED
|
@@ -7,7 +7,7 @@ import { z } from "zod";
|
|
|
7
7
|
/** 同期モード: read-write(双方向)/ write-only(バックアップ専用)/ read-only(受信専用) */
|
|
8
8
|
export const SyncModeSchema = z.enum(["read-write", "write-only", "read-only"]);
|
|
9
9
|
/** 同期設定 */
|
|
10
|
-
// 2026-03-05 修正: generations を削除(B案移行によりスナップショットは
|
|
10
|
+
// 2026-03-05 修正: generations を削除(B案移行によりスナップショットはdevice_id別1ファイル上書き方式になり、世代管理は不要になった)
|
|
11
11
|
// 2026-03-13 追加: mode フィールド(read-write / write-only / read-only)
|
|
12
12
|
export const SyncConfigSchema = z.object({
|
|
13
13
|
enabled: z.boolean().default(true),
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
export declare const DB_DIR: string;
|
|
2
2
|
export declare const DB_PATH: string;
|
|
3
|
+
export declare const DEV_DB_PATH: string;
|
|
3
4
|
export declare const LEGACY_DB_PATH: string;
|
|
4
5
|
export declare const CONFIG_PATH: string;
|
|
5
6
|
export declare const BUSY_TIMEOUT_MS = 5000;
|
|
6
7
|
export declare const SERVER_NAME = "watashi-db";
|
|
7
|
-
export declare const SERVER_VERSION
|
|
8
|
+
export declare const SERVER_VERSION: string;
|
|
8
9
|
export declare const CLAIM_CATEGORIES: readonly ["preference", "identity", "skill", "value", "workflow", "knowledge", "custom"];
|
|
9
10
|
export declare const CLAIM_SCOPES: readonly ["global", "persona", "project", "tool", "temporal"];
|
|
10
|
-
export declare const
|
|
11
|
-
export declare const
|
|
12
|
-
export declare const THEORY_STATUSES: readonly ["active", "archived", "promoted"];
|
|
13
|
-
export declare const INSIGHT_STATUSES: readonly ["active", "archived", "promoted"];
|
|
14
|
-
export declare const MODEL_STATUSES: readonly ["active", "archived", "promoted"];
|
|
15
|
-
export declare const USER_MEMO_STATUSES: readonly ["active", "archived"];
|
|
11
|
+
export declare const VALIDITY_STATUSES: readonly ["active", "invalidated", "superseded"];
|
|
12
|
+
export declare const USER_MEMO_STATUSES: readonly ["active"];
|
|
16
13
|
export declare const USER_MEMO_USAGE_POLICIES: readonly ["auto", "on_request", "human_directed"];
|
|
17
|
-
export declare const USER_PLAN_STATUSES: readonly ["active", "completed"
|
|
18
|
-
export declare const USER_ISSUE_STATUSES: readonly ["open", "closed"
|
|
14
|
+
export declare const USER_PLAN_STATUSES: readonly ["active", "completed"];
|
|
15
|
+
export declare const USER_ISSUE_STATUSES: readonly ["open", "closed"];
|
|
19
16
|
export declare const USER_ISSUE_PRIORITIES: readonly ["low", "medium", "high", "critical"];
|
|
17
|
+
export declare const USER_FILE_STATUSES: readonly ["active"];
|
|
18
|
+
export declare const USER_TOPIC_STATUSES: readonly ["active", "closed"];
|
|
19
|
+
export declare const USER_TOPIC_PRIORITIES: readonly ["low", "medium", "high", "critical"];
|
|
20
20
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import os from "node:os";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
3
4
|
// DBファイル配置: ~/.watashi-db/default.db(ユーザーホーム配下、プロジェクト非依存)
|
|
4
5
|
export const DB_DIR = path.join(os.homedir(), ".watashi-db");
|
|
5
6
|
export const DB_PATH = path.join(DB_DIR, "default.db");
|
|
7
|
+
export const DEV_DB_PATH = path.join(DB_DIR, "develop.db");
|
|
6
8
|
// 旧デフォルトDB名(自動リネームマイグレーション用)
|
|
7
9
|
export const LEGACY_DB_PATH = path.join(DB_DIR, "watashi.db");
|
|
8
10
|
// マルチStore設定ファイル
|
|
@@ -11,9 +13,10 @@ export const CONFIG_PATH = path.join(DB_DIR, "config.json");
|
|
|
11
13
|
export const BUSY_TIMEOUT_MS = 5000;
|
|
12
14
|
// MCPサーバー情報
|
|
13
15
|
export const SERVER_NAME = "watashi-db";
|
|
14
|
-
// 2026-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
// 2026-03-19 修正: package.json から動的取得に変更(Codexレビュー指摘: バージョン不整合防止)
|
|
17
|
+
const _require = createRequire(import.meta.url);
|
|
18
|
+
const _pkg = _require("../package.json");
|
|
19
|
+
export const SERVER_VERSION = _pkg.version;
|
|
17
20
|
// Claimのカテゴリ一覧
|
|
18
21
|
export const CLAIM_CATEGORIES = [
|
|
19
22
|
"preference", // 好み・設定
|
|
@@ -35,47 +38,21 @@ export const CLAIM_SCOPES = [
|
|
|
35
38
|
"tool", // 特定ツールに適用(tool:<name>)
|
|
36
39
|
"temporal", // 一時的に適用
|
|
37
40
|
];
|
|
38
|
-
//
|
|
39
|
-
|
|
41
|
+
// === Status正規化 (Issue #58) ===
|
|
42
|
+
// 原則: 1 status = 1 lifecycle。直交する概念は別カラムに分離。
|
|
43
|
+
// - validity_status: 有効性ライフサイクル (Knowledge系)
|
|
44
|
+
// - xxx_status: ドメイン固有ライフサイクル (User系)
|
|
45
|
+
// - is_archived: 可視性 (全テーブル共通、別カラム)
|
|
46
|
+
// - promoted_to: データ所在 (Knowledge系、別カラム)
|
|
47
|
+
// Knowledge系 共通の有効性ステータス
|
|
48
|
+
export const VALIDITY_STATUSES = [
|
|
40
49
|
"active", // 有効
|
|
41
|
-
"
|
|
50
|
+
"invalidated", // 無効化(人間の判断で撤回)
|
|
42
51
|
"superseded", // 後続に置き換え済み
|
|
43
|
-
"promoted", // 別Storeへ昇格済み
|
|
44
52
|
];
|
|
45
|
-
//
|
|
46
|
-
export const DECISION_STATUSES = [
|
|
47
|
-
"active", // 有効
|
|
48
|
-
"reversed", // 撤回済み
|
|
49
|
-
"obsolete", // 廃止
|
|
50
|
-
"archived", // アーカイブ済み(蒸留済み)
|
|
51
|
-
"promoted", // 別Storeへ昇格済み
|
|
52
|
-
];
|
|
53
|
-
// Theoryのステータス
|
|
54
|
-
export const THEORY_STATUSES = [
|
|
55
|
-
"active", // 有効
|
|
56
|
-
"archived", // アーカイブ済み
|
|
57
|
-
"promoted", // 別Storeへ昇格済み
|
|
58
|
-
];
|
|
59
|
-
// 2026-02-23 追加 (Issue #40): Insightのステータス
|
|
60
|
-
// Theoryから non_goals, open_questions を除外した軽量な知見エンティティ
|
|
61
|
-
export const INSIGHT_STATUSES = [
|
|
62
|
-
"active", // 有効
|
|
63
|
-
"archived", // アーカイブ済み
|
|
64
|
-
"promoted", // 別Storeへ昇格済み
|
|
65
|
-
];
|
|
66
|
-
// 2026-02-23 追加 (Issue #40): Modelのステータス
|
|
67
|
-
// 抽象的思考フレームワーク・メンタルモデルを記録するエンティティ
|
|
68
|
-
export const MODEL_STATUSES = [
|
|
69
|
-
"active", // 有効
|
|
70
|
-
"archived", // アーカイブ済み
|
|
71
|
-
"promoted", // 別Storeへ昇格済み
|
|
72
|
-
];
|
|
73
|
-
// Issue #45: UserMemoのステータス
|
|
74
|
-
// 2026-02-25 リネーム: MEMO_* → USER_MEMO_* (Issue #45 Phase 1)
|
|
75
|
-
// 元の実装: MEMO_STATUSES / MEMO_USAGE_POLICIES として定義されていた
|
|
53
|
+
// UserMemoのドメインステータス
|
|
76
54
|
export const USER_MEMO_STATUSES = [
|
|
77
55
|
"active", // 有効
|
|
78
|
-
"archived", // アーカイブ済み
|
|
79
56
|
];
|
|
80
57
|
// Issue #45: UserMemoの可視性ポリシー
|
|
81
58
|
export const USER_MEMO_USAGE_POLICIES = [
|
|
@@ -83,17 +60,15 @@ export const USER_MEMO_USAGE_POLICIES = [
|
|
|
83
60
|
"on_request", // 検索時のみ表示
|
|
84
61
|
"human_directed", // ユーザーが明示的に指示した場合のみ
|
|
85
62
|
];
|
|
86
|
-
//
|
|
63
|
+
// UserPlanのドメインステータス
|
|
87
64
|
export const USER_PLAN_STATUSES = [
|
|
88
65
|
"active", // 有効(進行中)
|
|
89
66
|
"completed", // 完了
|
|
90
|
-
"archived", // アーカイブ済み
|
|
91
67
|
];
|
|
92
|
-
//
|
|
68
|
+
// UserIssueのドメインステータス
|
|
93
69
|
export const USER_ISSUE_STATUSES = [
|
|
94
70
|
"open", // オープン
|
|
95
71
|
"closed", // クローズ
|
|
96
|
-
"archived", // アーカイブ済み
|
|
97
72
|
];
|
|
98
73
|
// Issue #57: UserIssueの優先度
|
|
99
74
|
export const USER_ISSUE_PRIORITIES = [
|
|
@@ -102,4 +77,15 @@ export const USER_ISSUE_PRIORITIES = [
|
|
|
102
77
|
"high", // 高
|
|
103
78
|
"critical", // 緊急
|
|
104
79
|
];
|
|
80
|
+
// UserFileのドメインステータス
|
|
81
|
+
export const USER_FILE_STATUSES = [
|
|
82
|
+
"active", // 有効
|
|
83
|
+
];
|
|
84
|
+
// UserTopicのドメインステータス
|
|
85
|
+
export const USER_TOPIC_STATUSES = [
|
|
86
|
+
"active", // 活動中
|
|
87
|
+
"closed", // クローズ(議論完了)
|
|
88
|
+
];
|
|
89
|
+
// UserTopicの優先度(USER_ISSUE_PRIORITIESと同一)
|
|
90
|
+
export const USER_TOPIC_PRIORITIES = USER_ISSUE_PRIORITIES;
|
|
105
91
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/database/archive.js
CHANGED
|
@@ -58,7 +58,7 @@ export function initializeArchiveDb(archivePath, cutoffDate) {
|
|
|
58
58
|
session_id TEXT,
|
|
59
59
|
source_tool TEXT,
|
|
60
60
|
created_at TEXT NOT NULL,
|
|
61
|
-
|
|
61
|
+
device_id TEXT
|
|
62
62
|
);
|
|
63
63
|
CREATE INDEX IF NOT EXISTS idx_archive_audit_created ON audit_log(created_at);
|
|
64
64
|
|
|
@@ -115,8 +115,8 @@ export function executeArchive(db, archivePath, cutoffDate, tables, provenance)
|
|
|
115
115
|
const auditId = ulid();
|
|
116
116
|
const now = new Date().toISOString();
|
|
117
117
|
db.prepare(`
|
|
118
|
-
INSERT INTO main.audit_log (id, operation, entity_type, entity_id, summary, details, client_name, client_version, session_id, source_tool,
|
|
119
|
-
VALUES (@id, @operation, @entity_type, @entity_id, @summary, @details, @client_name, @client_version, @session_id, @source_tool, @
|
|
118
|
+
INSERT INTO main.audit_log (id, operation, entity_type, entity_id, summary, details, client_name, client_version, session_id, source_tool, device_id, created_at)
|
|
119
|
+
VALUES (@id, @operation, @entity_type, @entity_id, @summary, @details, @client_name, @client_version, @session_id, @source_tool, @device_id, @created_at)
|
|
120
120
|
`).run({
|
|
121
121
|
id: auditId,
|
|
122
122
|
operation: "archive",
|
|
@@ -132,10 +132,10 @@ export function executeArchive(db, archivePath, cutoffDate, tables, provenance)
|
|
|
132
132
|
client_version: provenance?.client_version ?? null,
|
|
133
133
|
session_id: provenance?.session_id ?? null,
|
|
134
134
|
source_tool: "watashi_archive_logs",
|
|
135
|
-
// 2026-03-03 追加 (V21):
|
|
136
|
-
|
|
135
|
+
// 2026-03-03 追加 (V21): device_id
|
|
136
|
+
device_id: (() => {
|
|
137
137
|
try {
|
|
138
|
-
const row = db.prepare("SELECT value FROM store_meta WHERE key = '
|
|
138
|
+
const row = db.prepare("SELECT value FROM store_meta WHERE key = 'device_id'").get();
|
|
139
139
|
return row?.value ?? null;
|
|
140
140
|
}
|
|
141
141
|
catch {
|
package/dist/database/groom.js
CHANGED
|
@@ -5,7 +5,7 @@ import { computeClaimScore } from "../scoring.js";
|
|
|
5
5
|
* ただし全Claimを返す(score=0の健全なClaimも含む)。
|
|
6
6
|
*/
|
|
7
7
|
export function getGroomingClaims(db, params) {
|
|
8
|
-
const conditions = ["c.
|
|
8
|
+
const conditions = ["c.validity_status = 'active'", "c.is_archived = 0", "c.promoted_to IS NULL"];
|
|
9
9
|
const values = {};
|
|
10
10
|
if (params.scope) {
|
|
11
11
|
conditions.push("c.scope = @scope");
|
|
@@ -155,8 +155,8 @@ export function getGroomingClaims(db, params) {
|
|
|
155
155
|
*/
|
|
156
156
|
export function detectConflicts(db, params) {
|
|
157
157
|
const conditions = [
|
|
158
|
-
"c1.
|
|
159
|
-
"c2.
|
|
158
|
+
"c1.validity_status = 'active'", "c1.is_archived = 0",
|
|
159
|
+
"c2.validity_status = 'active'", "c2.is_archived = 0",
|
|
160
160
|
"c1.l2_subject = c2.l2_subject",
|
|
161
161
|
"c1.l2_predicate = c2.l2_predicate",
|
|
162
162
|
"c1.l2_object != c2.l2_object",
|
|
@@ -185,7 +185,7 @@ export function detectConflicts(db, params) {
|
|
|
185
185
|
AND (SELECT COUNT(*) FROM claims c3
|
|
186
186
|
WHERE c3.l2_subject = c1.l2_subject
|
|
187
187
|
AND c3.l2_predicate = c1.l2_predicate
|
|
188
|
-
AND c3.
|
|
188
|
+
AND c3.validity_status = 'active' AND c3.is_archived = 0) = 2
|
|
189
189
|
`).all(values);
|
|
190
190
|
}
|
|
191
191
|
/**
|
|
@@ -211,7 +211,7 @@ export function analyzeRetractImpact(db, claimId, maxDepth = 10) {
|
|
|
211
211
|
c.l2_subject, c.l2_predicate, c.l2_object, c.category, c.scope, c.confidence
|
|
212
212
|
FROM downstream d
|
|
213
213
|
JOIN claims c ON c.id = d.claim_id
|
|
214
|
-
WHERE c.
|
|
214
|
+
WHERE c.validity_status = 'active' AND c.is_archived = 0
|
|
215
215
|
AND d.claim_id != @claim_id -- 循環依存でターゲット自身が含まれるのを防止
|
|
216
216
|
ORDER BY d.depth, c.l2_subject
|
|
217
217
|
`).all({ claim_id: claimId, max_depth: maxDepth });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groom.js","sourceRoot":"","sources":["../../src/database/groom.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAqB,EACrB,MAA6C;IAE7C,MAAM,UAAU,GAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"groom.js","sourceRoot":"","sources":["../../src/database/groom.ts"],"names":[],"mappings":"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"}
|