watashi-db 0.0.13 → 0.0.14
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 +33 -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/config/schema.js +1 -1
- package/dist/constants.d.ts +5 -1
- package/dist/constants.js +19 -3
- package/dist/constants.js.map +1 -1
- package/dist/database/archive.js +6 -6
- package/dist/database/queries-core.d.ts +75 -1
- package/dist/database/queries-core.js +283 -12
- package/dist/database/queries-core.js.map +1 -1
- package/dist/database/queries.d.ts +71 -1
- package/dist/database/queries.js +29 -0
- package/dist/database/queries.js.map +1 -1
- package/dist/database/schema.d.ts +1 -0
- package/dist/database/schema.js +1915 -214
- 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 +9 -6
- package/dist/hook.js.map +1 -1
- package/dist/index.js +3 -2
- 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-instructions.js +16 -17
- package/dist/server-instructions.js.map +1 -1
- package/dist/server.d.ts +4 -1
- package/dist/server.js +42 -18
- 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 +7 -7
- package/dist/tools/claim-tools.js.map +1 -1
- package/dist/tools/decision-tools.d.ts +1 -1
- package/dist/tools/decision-tools.js +2 -2
- package/dist/tools/decision-tools.js.map +1 -1
- package/dist/tools/episode-tools.d.ts +1 -1
- package/dist/tools/episode-tools.js +2 -2
- package/dist/tools/episode-tools.js.map +1 -1
- package/dist/tools/file-tools.d.ts +3 -0
- package/dist/tools/file-tools.js +347 -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/knowledge-tools.d.ts +1 -1
- package/dist/tools/knowledge-tools.js +2 -2
- package/dist/tools/knowledge-tools.js.map +1 -1
- package/dist/tools/maintenance-tools.d.ts +1 -1
- package/dist/tools/maintenance-tools.js +38 -6
- package/dist/tools/maintenance-tools.js.map +1 -1
- package/dist/tools/memo-tools.d.ts +7 -11
- package/dist/tools/memo-tools.js +499 -307
- package/dist/tools/memo-tools.js.map +1 -1
- package/dist/tools/query-tools.d.ts +1 -1
- package/dist/tools/query-tools.js +28 -5
- package/dist/tools/query-tools.js.map +1 -1
- package/dist/types.d.ts +370 -48
- package/dist/types.js +124 -16
- 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/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.14
|
|
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 用プラグインが含まれています。
|
|
@@ -273,8 +298,14 @@ watashi_log_decision:
|
|
|
273
298
|
| `watashi_log_decision` | 意思決定を構造的に記録 |
|
|
274
299
|
| `watashi_log_episode` | エピソード(問題→決定→結果→教訓)を記録 |
|
|
275
300
|
| `watashi_store_knowledge` | Theory/Insight/Model を記録 |
|
|
276
|
-
| `watashi_store_user_memo` |
|
|
277
|
-
| `watashi_update_user_memo` |
|
|
301
|
+
| `watashi_store_user_memo` | 参照用メモを記録 |
|
|
302
|
+
| `watashi_update_user_memo` | メモを更新 |
|
|
303
|
+
| `watashi_store_user_plan` | チェックリスト型の作業計画を記録 |
|
|
304
|
+
| `watashi_update_user_plan` | 作業計画のメタ情報を更新 |
|
|
305
|
+
| `watashi_check_user_plan` | チェックリスト項目を済にする(全項目済で自動完了) |
|
|
306
|
+
| `watashi_store_user_issue` | 課題・議論を記録 |
|
|
307
|
+
| `watashi_update_user_issue` | 課題のメタ情報を更新 |
|
|
308
|
+
| `watashi_comment_user_issue` | 課題にタイムスタンプ付きコメントを追記 |
|
|
278
309
|
| `watashi_maintain` | DB保守(統計・バックアップ・エクスポート・棚卸・Store管理) |
|
|
279
310
|
|
|
280
311
|
---
|
|
@@ -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
|
- ユーザーの主要な好み・作業スタイルの認識
|
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,10 +1,11 @@
|
|
|
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
11
|
export declare const CLAIM_STATUSES: readonly ["active", "retracted", "superseded", "promoted"];
|
|
@@ -17,4 +18,7 @@ export declare const USER_MEMO_USAGE_POLICIES: readonly ["auto", "on_request", "
|
|
|
17
18
|
export declare const USER_PLAN_STATUSES: readonly ["active", "completed", "archived"];
|
|
18
19
|
export declare const USER_ISSUE_STATUSES: readonly ["open", "closed", "archived"];
|
|
19
20
|
export declare const USER_ISSUE_PRIORITIES: readonly ["low", "medium", "high", "critical"];
|
|
21
|
+
export declare const USER_FILE_STATUSES: readonly ["active", "archived"];
|
|
22
|
+
export declare const USER_TOPIC_STATUSES: readonly ["active", "closed", "archived"];
|
|
23
|
+
export declare const USER_TOPIC_PRIORITIES: readonly ["low", "medium", "high", "critical"];
|
|
20
24
|
//# 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", // 好み・設定
|
|
@@ -102,4 +105,17 @@ export const USER_ISSUE_PRIORITIES = [
|
|
|
102
105
|
"high", // 高
|
|
103
106
|
"critical", // 緊急
|
|
104
107
|
];
|
|
108
|
+
// UserFileのステータス(File Vault機能)
|
|
109
|
+
export const USER_FILE_STATUSES = [
|
|
110
|
+
"active", // 有効
|
|
111
|
+
"archived", // アーカイブ済み
|
|
112
|
+
];
|
|
113
|
+
// UserTopicのステータス
|
|
114
|
+
export const USER_TOPIC_STATUSES = [
|
|
115
|
+
"active", // 活動中
|
|
116
|
+
"closed", // クローズ(議論完了)
|
|
117
|
+
"archived", // アーカイブ済み
|
|
118
|
+
];
|
|
119
|
+
// UserTopicの優先度(USER_ISSUE_PRIORITIESと同一)
|
|
120
|
+
export const USER_TOPIC_PRIORITIES = USER_ISSUE_PRIORITIES;
|
|
105
121
|
//# 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 {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* 後方互換ラッパーは queries.ts を参照。
|
|
5
5
|
*/
|
|
6
6
|
import type Database from "better-sqlite3";
|
|
7
|
-
import type { ClaimRow, ClaimHistoryRow, ClaimRelationRow, ClaimEvidenceRow, ClaimCheckRow, DecisionRow, AuditLogRow, EpisodeRow, TheoryRow, InsightRow, ModelRow, TopicSummary, StaleClaimRow, GroomingEpisodeRow } from "../types.js";
|
|
7
|
+
import type { ClaimRow, ClaimHistoryRow, ClaimRelationRow, ClaimEvidenceRow, ClaimCheckRow, DecisionRow, AuditLogRow, EpisodeRow, TheoryRow, InsightRow, ModelRow, TopicSummary, StaleClaimRow, GroomingEpisodeRow, UserFileRow } from "../types.js";
|
|
8
8
|
import type { ProvenanceData } from "../provenance.js";
|
|
9
9
|
/**
|
|
10
10
|
* FTS5クエリのサニタイズ
|
|
@@ -483,6 +483,7 @@ export declare function updateUserIssue(db: Database.Database, id: string, updat
|
|
|
483
483
|
title?: string;
|
|
484
484
|
l1_content?: string;
|
|
485
485
|
entries?: string;
|
|
486
|
+
l1_embedding?: Buffer | null;
|
|
486
487
|
priority?: string;
|
|
487
488
|
usage_policy?: string;
|
|
488
489
|
tags?: string[];
|
|
@@ -502,6 +503,45 @@ export declare function listUserIssues(db: Database.Database, params: {
|
|
|
502
503
|
export declare function updateUserIssueL1Embedding(db: Database.Database, id: string, l1_embedding: Buffer): void;
|
|
503
504
|
export declare function getUserIssuesWithoutL1Embedding(db: Database.Database, limit: number): UserIssueRow[];
|
|
504
505
|
export declare function getUserIssuesWithL1Embedding(db: Database.Database, scope?: string, limit?: number): UserIssueRow[];
|
|
506
|
+
import type { UserTopicRow } from "../types.js";
|
|
507
|
+
export declare function insertUserTopic(db: Database.Database, params: {
|
|
508
|
+
title: string;
|
|
509
|
+
summary: string;
|
|
510
|
+
device_id?: string | null;
|
|
511
|
+
cwd?: string | null;
|
|
512
|
+
conversation_id?: string | null;
|
|
513
|
+
priority?: string;
|
|
514
|
+
tags: string[];
|
|
515
|
+
scope?: string;
|
|
516
|
+
search_summary?: string;
|
|
517
|
+
l1_embedding?: Buffer | null;
|
|
518
|
+
source_tool?: string;
|
|
519
|
+
client_name?: string | null;
|
|
520
|
+
client_version?: string | null;
|
|
521
|
+
}): UserTopicRow;
|
|
522
|
+
export declare function getUserTopicById(db: Database.Database, id: string): UserTopicRow | undefined;
|
|
523
|
+
export declare function updateUserTopic(db: Database.Database, id: string, updates: {
|
|
524
|
+
title?: string;
|
|
525
|
+
summary?: string;
|
|
526
|
+
conversation_id?: string;
|
|
527
|
+
cwd?: string;
|
|
528
|
+
priority?: string;
|
|
529
|
+
tags?: string[];
|
|
530
|
+
scope?: string;
|
|
531
|
+
search_summary?: string;
|
|
532
|
+
status?: string;
|
|
533
|
+
}): UserTopicRow | undefined;
|
|
534
|
+
export declare function listUserTopics(db: Database.Database, params: {
|
|
535
|
+
query?: string;
|
|
536
|
+
tag?: string;
|
|
537
|
+
priority?: string;
|
|
538
|
+
scope?: string;
|
|
539
|
+
status?: string;
|
|
540
|
+
limit?: number;
|
|
541
|
+
}): UserTopicRow[];
|
|
542
|
+
export declare function updateUserTopicL1Embedding(db: Database.Database, id: string, l1_embedding: Buffer): void;
|
|
543
|
+
export declare function getUserTopicsWithoutL1Embedding(db: Database.Database, limit: number): UserTopicRow[];
|
|
544
|
+
export declare function getUserTopicsWithL1Embedding(db: Database.Database, scope?: string, limit?: number): UserTopicRow[];
|
|
505
545
|
import type { UnifiedSearchRow } from "../types.js";
|
|
506
546
|
/**
|
|
507
547
|
* 横断検索(FTS5 + LIKEフォールバック)
|
|
@@ -565,4 +605,38 @@ export declare function insertTombstone(db: Database.Database, entityType: strin
|
|
|
565
605
|
* @returns 削除された件数
|
|
566
606
|
*/
|
|
567
607
|
export declare function applyTombstones(db: Database.Database): number;
|
|
608
|
+
export declare function insertUserFile(db: Database.Database, params: {
|
|
609
|
+
title: string;
|
|
610
|
+
description?: string | null;
|
|
611
|
+
original_filename: string;
|
|
612
|
+
original_encoding?: string;
|
|
613
|
+
file_data: string;
|
|
614
|
+
file_hash: string;
|
|
615
|
+
file_size: number;
|
|
616
|
+
tags: string[];
|
|
617
|
+
scope?: string;
|
|
618
|
+
search_summary?: string;
|
|
619
|
+
l1_embedding?: Buffer | null;
|
|
620
|
+
source_tool?: string;
|
|
621
|
+
client_name?: string | null;
|
|
622
|
+
client_version?: string | null;
|
|
623
|
+
}): UserFileRow;
|
|
624
|
+
export declare function getUserFileById(db: Database.Database, id: string): UserFileRow | undefined;
|
|
625
|
+
export declare function getUserFileByTitle(db: Database.Database, title: string): UserFileRow | undefined;
|
|
626
|
+
export declare function updateUserFile(db: Database.Database, id: string, updates: {
|
|
627
|
+
title?: string;
|
|
628
|
+
description?: string;
|
|
629
|
+
file_data?: string;
|
|
630
|
+
file_hash?: string;
|
|
631
|
+
file_size?: number;
|
|
632
|
+
tags?: string[];
|
|
633
|
+
scope?: string;
|
|
634
|
+
search_summary?: string;
|
|
635
|
+
status?: string;
|
|
636
|
+
}): UserFileRow | undefined;
|
|
637
|
+
export declare function listUserFiles(db: Database.Database, params: {
|
|
638
|
+
scope?: string;
|
|
639
|
+
tags?: string[];
|
|
640
|
+
status?: string;
|
|
641
|
+
}): Omit<UserFileRow, "file_data" | "l1_embedding">[];
|
|
568
642
|
//# sourceMappingURL=queries-core.d.ts.map
|