watashi-db 0.0.5
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/LICENSE +21 -0
- package/README.md +239 -0
- package/cowork-plugin/.claude-plugin/plugin.json +12 -0
- package/cowork-plugin/.mcp.json +8 -0
- package/cowork-plugin/agents/memory-keeper.md +48 -0
- package/cowork-plugin/skills/reflect/SKILL.md +58 -0
- package/cowork-plugin/skills/remember/SKILL.md +54 -0
- package/cowork-plugin/skills/session-start/SKILL.md +38 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.js +43 -0
- package/dist/constants.js.map +1 -0
- package/dist/database/connection.d.ts +16 -0
- package/dist/database/connection.js +42 -0
- package/dist/database/connection.js.map +1 -0
- package/dist/database/queries.d.ts +227 -0
- package/dist/database/queries.js +730 -0
- package/dist/database/queries.js.map +1 -0
- package/dist/database/schema.d.ts +6 -0
- package/dist/database/schema.js +335 -0
- package/dist/database/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/bootstrap-prompts.d.ts +6 -0
- package/dist/prompts/bootstrap-prompts.js +69 -0
- package/dist/prompts/bootstrap-prompts.js.map +1 -0
- package/dist/provenance.d.ts +29 -0
- package/dist/provenance.js +33 -0
- package/dist/provenance.js.map +1 -0
- package/dist/resources/context-resources.d.ts +6 -0
- package/dist/resources/context-resources.js +102 -0
- package/dist/resources/context-resources.js.map +1 -0
- package/dist/tools/claim-tools.d.ts +6 -0
- package/dist/tools/claim-tools.js +176 -0
- package/dist/tools/claim-tools.js.map +1 -0
- package/dist/tools/decision-tools.d.ts +6 -0
- package/dist/tools/decision-tools.js +117 -0
- package/dist/tools/decision-tools.js.map +1 -0
- package/dist/tools/episode-tools.d.ts +7 -0
- package/dist/tools/episode-tools.js +128 -0
- package/dist/tools/episode-tools.js.map +1 -0
- package/dist/tools/export-tools.d.ts +6 -0
- package/dist/tools/export-tools.js +104 -0
- package/dist/tools/export-tools.js.map +1 -0
- package/dist/tools/profile-tools.d.ts +6 -0
- package/dist/tools/profile-tools.js +108 -0
- package/dist/tools/profile-tools.js.map +1 -0
- package/dist/tools/query-tools.d.ts +6 -0
- package/dist/tools/query-tools.js +96 -0
- package/dist/tools/query-tools.js.map +1 -0
- package/dist/types.d.ts +444 -0
- package/dist/types.js +191 -0
- package/dist/types.js.map +1 -0
- package/package.json +47 -0
- package/watashi-db-cowork-plugin.zip +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { DB_PATH, DB_DIR } from "../constants.js";
|
|
5
|
+
import { getAllActiveClaims, searchClaims, listDecisions, getStats, } from "../database/queries.js";
|
|
6
|
+
/**
|
|
7
|
+
* エクスポート・バックアップ関連ツールを登録
|
|
8
|
+
*/
|
|
9
|
+
export function registerExportTools(server) {
|
|
10
|
+
// watashi_backup_db: SQLiteファイルのバックアップ
|
|
11
|
+
server.tool("watashi_backup_db", "わたしDBのSQLiteファイルをバックアップする。タイムスタンプ付きのコピーを作成する。", {
|
|
12
|
+
destination: z.string().optional().describe("バックアップ先ディレクトリ(省略時はDBと同じディレクトリ)"),
|
|
13
|
+
}, async (params) => {
|
|
14
|
+
if (!fs.existsSync(DB_PATH)) {
|
|
15
|
+
return {
|
|
16
|
+
content: [{
|
|
17
|
+
type: "text",
|
|
18
|
+
text: JSON.stringify({ success: false, error: "DBファイルが見つかりません" }),
|
|
19
|
+
}],
|
|
20
|
+
isError: true,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const destDir = params.destination ?? DB_DIR;
|
|
24
|
+
if (!fs.existsSync(destDir)) {
|
|
25
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 19);
|
|
28
|
+
const backupName = `watashi_backup_${timestamp}.db`;
|
|
29
|
+
const backupPath = path.join(destDir, backupName);
|
|
30
|
+
fs.copyFileSync(DB_PATH, backupPath);
|
|
31
|
+
const stats = fs.statSync(backupPath);
|
|
32
|
+
return {
|
|
33
|
+
content: [{
|
|
34
|
+
type: "text",
|
|
35
|
+
text: JSON.stringify({
|
|
36
|
+
success: true,
|
|
37
|
+
message: `バックアップを作成しました`,
|
|
38
|
+
backup_path: backupPath,
|
|
39
|
+
size_bytes: stats.size,
|
|
40
|
+
}, null, 2),
|
|
41
|
+
}],
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
// watashi_export_json: 全データのJSONエクスポート
|
|
45
|
+
server.tool("watashi_export_json", "わたしDBの全アクティブデータをJSON形式でエクスポートする。Claim・Decision・統計情報を含む。", {
|
|
46
|
+
destination: z.string().optional().describe("出力先ファイルパス(省略時はDBディレクトリに保存)"),
|
|
47
|
+
include_retracted: z.boolean().default(false).describe("撤回済みClaimも含めるか"),
|
|
48
|
+
}, async (params) => {
|
|
49
|
+
const stats = getStats();
|
|
50
|
+
// Claims取得
|
|
51
|
+
const activeClaims = getAllActiveClaims();
|
|
52
|
+
let allClaims = activeClaims;
|
|
53
|
+
if (params.include_retracted) {
|
|
54
|
+
const retracted = searchClaims({ status: "retracted", limit: 10000 });
|
|
55
|
+
const superseded = searchClaims({ status: "superseded", limit: 10000 });
|
|
56
|
+
allClaims = [...activeClaims, ...retracted, ...superseded];
|
|
57
|
+
}
|
|
58
|
+
// Decisions取得
|
|
59
|
+
const activeDecisions = listDecisions({ status: "active", limit: 10000 });
|
|
60
|
+
let allDecisions = activeDecisions;
|
|
61
|
+
if (params.include_retracted) {
|
|
62
|
+
const reversed = listDecisions({ status: "reversed", limit: 10000 });
|
|
63
|
+
const obsolete = listDecisions({ status: "obsolete", limit: 10000 });
|
|
64
|
+
allDecisions = [...activeDecisions, ...reversed, ...obsolete];
|
|
65
|
+
}
|
|
66
|
+
const exportData = {
|
|
67
|
+
exported_at: new Date().toISOString(),
|
|
68
|
+
version: "0.1.0",
|
|
69
|
+
stats,
|
|
70
|
+
claims: allClaims.map(c => ({
|
|
71
|
+
...c,
|
|
72
|
+
})),
|
|
73
|
+
decisions: allDecisions.map(d => ({
|
|
74
|
+
...d,
|
|
75
|
+
alternatives: JSON.parse(d.alternatives),
|
|
76
|
+
related_claim_ids: JSON.parse(d.related_claim_ids),
|
|
77
|
+
})),
|
|
78
|
+
};
|
|
79
|
+
// ファイルに保存する場合
|
|
80
|
+
if (params.destination !== undefined || true) {
|
|
81
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 19);
|
|
82
|
+
const defaultPath = path.join(DB_DIR, `watashi_export_${timestamp}.json`);
|
|
83
|
+
const destPath = params.destination ?? defaultPath;
|
|
84
|
+
const destDir2 = path.dirname(destPath);
|
|
85
|
+
if (!fs.existsSync(destDir2)) {
|
|
86
|
+
fs.mkdirSync(destDir2, { recursive: true });
|
|
87
|
+
}
|
|
88
|
+
fs.writeFileSync(destPath, JSON.stringify(exportData, null, 2), "utf-8");
|
|
89
|
+
return {
|
|
90
|
+
content: [{
|
|
91
|
+
type: "text",
|
|
92
|
+
text: JSON.stringify({
|
|
93
|
+
success: true,
|
|
94
|
+
message: `JSONエクスポートを保存しました`,
|
|
95
|
+
export_path: destPath,
|
|
96
|
+
claims_count: allClaims.length,
|
|
97
|
+
decisions_count: allDecisions.length,
|
|
98
|
+
}, null, 2),
|
|
99
|
+
}],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=export-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-tools.js","sourceRoot":"","sources":["../../src/tools/export-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { GetProfileSummarySchema, StorePreferenceSchema, } from "../types.js";
|
|
2
|
+
import { searchClaims, insertClaim, getStats, insertAuditLog, } from "../database/queries.js";
|
|
3
|
+
import { CLAIM_CATEGORIES } from "../constants.js";
|
|
4
|
+
import { buildProvenance } from "../provenance.js";
|
|
5
|
+
/**
|
|
6
|
+
* プロファイル関連ツール(get_profile_summary / store_preference)を登録
|
|
7
|
+
*/
|
|
8
|
+
export function registerProfileTools(server) {
|
|
9
|
+
// watashi_get_profile_summary: プロファイル全体像(セッション開始時に推奨)
|
|
10
|
+
server.tool("watashi_get_profile_summary", "ユーザーのプロファイル全体像をMarkdown形式で取得する。新しいセッション開始時に呼び出すことで、ユーザーの好み・スキル・価値観を把握できる。", GetProfileSummarySchema.shape, async (params) => {
|
|
11
|
+
const stats = getStats();
|
|
12
|
+
// カテゴリごとにClaimを取得
|
|
13
|
+
const sections = [];
|
|
14
|
+
sections.push("# わたしプロファイル\n");
|
|
15
|
+
if (stats.active_claims === 0) {
|
|
16
|
+
sections.push("まだプロファイル情報が登録されていません。");
|
|
17
|
+
sections.push("`watashi_store_claim` または `watashi_store_preference` でユーザー情報を登録してください。\n");
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
for (const category of CLAIM_CATEGORIES) {
|
|
21
|
+
const claims = searchClaims({
|
|
22
|
+
category,
|
|
23
|
+
scope: params.scope,
|
|
24
|
+
status: "active",
|
|
25
|
+
limit: 100,
|
|
26
|
+
});
|
|
27
|
+
if (claims.length === 0)
|
|
28
|
+
continue;
|
|
29
|
+
// カテゴリ名を日本語に変換
|
|
30
|
+
const categoryLabel = getCategoryLabel(category);
|
|
31
|
+
sections.push(`## ${categoryLabel}\n`);
|
|
32
|
+
for (const claim of claims) {
|
|
33
|
+
const scopeTag = claim.scope !== "global" ? ` [${claim.scope}]` : "";
|
|
34
|
+
const confidenceTag = claim.confidence < 0.8 ? ` (確信度: ${claim.confidence})` : "";
|
|
35
|
+
sections.push(`- **${claim.subject}** ${claim.predicate} ${claim.object}${scopeTag}${confidenceTag}`);
|
|
36
|
+
}
|
|
37
|
+
sections.push("");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// 統計情報
|
|
41
|
+
sections.push("## 統計\n");
|
|
42
|
+
sections.push(`- アクティブClaim数: ${stats.active_claims}`);
|
|
43
|
+
sections.push(`- 撤回済み: ${stats.retracted_claims}`);
|
|
44
|
+
sections.push(`- 意思決定ログ: ${stats.active_decisions}`);
|
|
45
|
+
sections.push(`- 変更履歴: ${stats.total_history_entries}`);
|
|
46
|
+
return {
|
|
47
|
+
content: [
|
|
48
|
+
{
|
|
49
|
+
type: "text",
|
|
50
|
+
text: sections.join("\n"),
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
// watashi_store_preference: 好みの簡易登録ショートカット
|
|
56
|
+
server.tool("watashi_store_preference", "ユーザーの好みを簡易登録する。自然言語のpreference文を'user prefers <内容>'のClaim形式で自動記録する。", StorePreferenceSchema.shape, async (params, extra) => {
|
|
57
|
+
// 2026-02-11 追加: サーバー側でProvenance(来歴)を自動付与
|
|
58
|
+
const provenance = buildProvenance(extra.sessionId);
|
|
59
|
+
const claim = insertClaim({
|
|
60
|
+
subject: "user",
|
|
61
|
+
predicate: "prefers",
|
|
62
|
+
object: params.preference,
|
|
63
|
+
category: "preference",
|
|
64
|
+
scope: params.scope ?? "global",
|
|
65
|
+
confidence: 0.9,
|
|
66
|
+
source_tool: params.source_tool,
|
|
67
|
+
client_name: provenance.client_name,
|
|
68
|
+
client_version: provenance.client_version,
|
|
69
|
+
});
|
|
70
|
+
// 監査ログ記録
|
|
71
|
+
insertAuditLog({
|
|
72
|
+
operation: "create",
|
|
73
|
+
entity_type: "claim",
|
|
74
|
+
entity_id: claim.id,
|
|
75
|
+
summary: `user prefers ${params.preference}`,
|
|
76
|
+
provenance,
|
|
77
|
+
source_tool: params.source_tool,
|
|
78
|
+
});
|
|
79
|
+
return {
|
|
80
|
+
content: [
|
|
81
|
+
{
|
|
82
|
+
type: "text",
|
|
83
|
+
text: JSON.stringify({
|
|
84
|
+
success: true,
|
|
85
|
+
message: `好みを登録しました: ${params.preference}`,
|
|
86
|
+
claim,
|
|
87
|
+
}, null, 2),
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* カテゴリの日本語ラベルを取得
|
|
95
|
+
*/
|
|
96
|
+
function getCategoryLabel(category) {
|
|
97
|
+
const labels = {
|
|
98
|
+
preference: "好み・設定 (Preference)",
|
|
99
|
+
identity: "アイデンティティ (Identity)",
|
|
100
|
+
skill: "スキル・能力 (Skill)",
|
|
101
|
+
value: "価値観・信条 (Value)",
|
|
102
|
+
workflow: "ワークフロー (Workflow)",
|
|
103
|
+
knowledge: "知識 (Knowledge)",
|
|
104
|
+
custom: "カスタム (Custom)",
|
|
105
|
+
};
|
|
106
|
+
return labels[category] ?? category;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=profile-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-tools.js","sourceRoot":"","sources":["../../src/tools/profile-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { QueryContextSchema, SearchClaimsSchema, GetClaimSchema, } from "../types.js";
|
|
2
|
+
import { queryContext, searchClaims, getClaimById, getClaimHistory, } from "../database/queries.js";
|
|
3
|
+
/**
|
|
4
|
+
* クエリ関連ツール(query_context / search / get)を登録
|
|
5
|
+
*/
|
|
6
|
+
export function registerQueryTools(server) {
|
|
7
|
+
// watashi_query_context: トピックに関連するコンテキスト取得
|
|
8
|
+
server.tool("watashi_query_context", "トピックに関連するユーザーコンテキストをFTS5全文検索で取得する。セッション開始時やトピック変更時に呼び出す。", QueryContextSchema.shape, async (params) => {
|
|
9
|
+
const claims = queryContext(params.topic, params.scope, params.limit ?? 20);
|
|
10
|
+
if (claims.length === 0) {
|
|
11
|
+
return {
|
|
12
|
+
content: [
|
|
13
|
+
{
|
|
14
|
+
type: "text",
|
|
15
|
+
text: JSON.stringify({
|
|
16
|
+
topic: params.topic,
|
|
17
|
+
results: [],
|
|
18
|
+
message: `'${params.topic}' に関連するコンテキストは見つかりませんでした`,
|
|
19
|
+
}, null, 2),
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
content: [
|
|
26
|
+
{
|
|
27
|
+
type: "text",
|
|
28
|
+
text: JSON.stringify({
|
|
29
|
+
topic: params.topic,
|
|
30
|
+
count: claims.length,
|
|
31
|
+
results: claims.map((c) => ({
|
|
32
|
+
id: c.id,
|
|
33
|
+
claim: `${c.subject} ${c.predicate} ${c.object}`,
|
|
34
|
+
category: c.category,
|
|
35
|
+
scope: c.scope,
|
|
36
|
+
confidence: c.confidence,
|
|
37
|
+
evidence: c.evidence,
|
|
38
|
+
})),
|
|
39
|
+
}, null, 2),
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
// watashi_search_claims: Claim条件検索
|
|
45
|
+
server.tool("watashi_search_claims", "Claimをカテゴリ・スコープ・ステータス・テキストで条件検索する。", SearchClaimsSchema.shape, async (params) => {
|
|
46
|
+
const claims = searchClaims({
|
|
47
|
+
category: params.category,
|
|
48
|
+
scope: params.scope,
|
|
49
|
+
status: params.status ?? "active",
|
|
50
|
+
query: params.query,
|
|
51
|
+
limit: params.limit ?? 50,
|
|
52
|
+
});
|
|
53
|
+
return {
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
type: "text",
|
|
57
|
+
text: JSON.stringify({
|
|
58
|
+
count: claims.length,
|
|
59
|
+
results: claims,
|
|
60
|
+
}, null, 2),
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
// watashi_get_claim: 特定Claim詳細+変更履歴
|
|
66
|
+
server.tool("watashi_get_claim", "特定のClaimの詳細情報と変更履歴を取得する。", GetClaimSchema.shape, async (params) => {
|
|
67
|
+
const claim = getClaimById(params.id);
|
|
68
|
+
if (!claim) {
|
|
69
|
+
return {
|
|
70
|
+
content: [
|
|
71
|
+
{
|
|
72
|
+
type: "text",
|
|
73
|
+
text: JSON.stringify({
|
|
74
|
+
success: false,
|
|
75
|
+
error: `Claim ID '${params.id}' が見つかりません`,
|
|
76
|
+
}),
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
isError: true,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const history = getClaimHistory(params.id);
|
|
83
|
+
return {
|
|
84
|
+
content: [
|
|
85
|
+
{
|
|
86
|
+
type: "text",
|
|
87
|
+
text: JSON.stringify({
|
|
88
|
+
claim,
|
|
89
|
+
history,
|
|
90
|
+
}, null, 2),
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=query-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-tools.js","sourceRoot":"","sources":["../../src/tools/query-tools.ts"],"names":[],"mappings":"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"}
|