intent-log 0.1.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 (71) hide show
  1. package/README.md +64 -0
  2. package/dist/adapter/__tests__/claude-code-log-reader.test.d.ts +1 -0
  3. package/dist/adapter/__tests__/claude-code-log-reader.test.js +197 -0
  4. package/dist/adapter/__tests__/claude-code-log-reader.test.js.map +1 -0
  5. package/dist/adapter/__tests__/filesystem-repository.test.d.ts +1 -0
  6. package/dist/adapter/__tests__/filesystem-repository.test.js +152 -0
  7. package/dist/adapter/__tests__/filesystem-repository.test.js.map +1 -0
  8. package/dist/adapter/__tests__/privacy-filter.test.d.ts +1 -0
  9. package/dist/adapter/__tests__/privacy-filter.test.js +61 -0
  10. package/dist/adapter/__tests__/privacy-filter.test.js.map +1 -0
  11. package/dist/adapter/claude-code-log-reader.d.ts +11 -0
  12. package/dist/adapter/claude-code-log-reader.js +133 -0
  13. package/dist/adapter/claude-code-log-reader.js.map +1 -0
  14. package/dist/adapter/claude-code-summarizer.d.ts +6 -0
  15. package/dist/adapter/claude-code-summarizer.js +93 -0
  16. package/dist/adapter/claude-code-summarizer.js.map +1 -0
  17. package/dist/adapter/filesystem-repository.d.ts +39 -0
  18. package/dist/adapter/filesystem-repository.js +98 -0
  19. package/dist/adapter/filesystem-repository.js.map +1 -0
  20. package/dist/adapter/privacy-filter.d.ts +8 -0
  21. package/dist/adapter/privacy-filter.js +58 -0
  22. package/dist/adapter/privacy-filter.js.map +1 -0
  23. package/dist/cli/collect.d.ts +1 -0
  24. package/dist/cli/collect.js +19 -0
  25. package/dist/cli/collect.js.map +1 -0
  26. package/dist/cli/init.d.ts +1 -0
  27. package/dist/cli/init.js +39 -0
  28. package/dist/cli/init.js.map +1 -0
  29. package/dist/cli/log.d.ts +1 -0
  30. package/dist/cli/log.js +15 -0
  31. package/dist/cli/log.js.map +1 -0
  32. package/dist/cli/reset.d.ts +1 -0
  33. package/dist/cli/reset.js +7 -0
  34. package/dist/cli/reset.js.map +1 -0
  35. package/dist/cli/rm.d.ts +1 -0
  36. package/dist/cli/rm.js +7 -0
  37. package/dist/cli/rm.js.map +1 -0
  38. package/dist/cli/show.d.ts +1 -0
  39. package/dist/cli/show.js +21 -0
  40. package/dist/cli/show.js.map +1 -0
  41. package/dist/domain/__tests__/session.test.d.ts +1 -0
  42. package/dist/domain/__tests__/session.test.js +80 -0
  43. package/dist/domain/__tests__/session.test.js.map +1 -0
  44. package/dist/domain/__tests__/step.test.d.ts +1 -0
  45. package/dist/domain/__tests__/step.test.js +65 -0
  46. package/dist/domain/__tests__/step.test.js.map +1 -0
  47. package/dist/domain/session.d.ts +51 -0
  48. package/dist/domain/session.js +49 -0
  49. package/dist/domain/session.js.map +1 -0
  50. package/dist/domain/step.d.ts +13 -0
  51. package/dist/domain/step.js +98 -0
  52. package/dist/domain/step.js.map +1 -0
  53. package/dist/index.d.ts +2 -0
  54. package/dist/index.js +106 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/port/agent-log-reader.d.ts +6 -0
  57. package/dist/port/agent-log-reader.js +2 -0
  58. package/dist/port/agent-log-reader.js.map +1 -0
  59. package/dist/port/step-repository.d.ts +7 -0
  60. package/dist/port/step-repository.js +2 -0
  61. package/dist/port/step-repository.js.map +1 -0
  62. package/dist/port/summarizer.d.ts +13 -0
  63. package/dist/port/summarizer.js +2 -0
  64. package/dist/port/summarizer.js.map +1 -0
  65. package/dist/usecase/__tests__/collect.test.d.ts +1 -0
  66. package/dist/usecase/__tests__/collect.test.js +135 -0
  67. package/dist/usecase/__tests__/collect.test.js.map +1 -0
  68. package/dist/usecase/collect.d.ts +16 -0
  69. package/dist/usecase/collect.js +190 -0
  70. package/dist/usecase/collect.js.map +1 -0
  71. package/package.json +41 -0
@@ -0,0 +1,190 @@
1
+ export class CollectUseCase {
2
+ reader;
3
+ summarizer;
4
+ filter;
5
+ repository;
6
+ constructor(reader, summarizer, filter, repository) {
7
+ this.reader = reader;
8
+ this.summarizer = summarizer;
9
+ this.filter = filter;
10
+ this.repository = repository;
11
+ }
12
+ async collectAll() {
13
+ const sessions = await this.reader.listSessions();
14
+ if (sessions.length === 0) {
15
+ console.log("このプロジェクトにClaude Codeのセッションが見つかりません。");
16
+ return;
17
+ }
18
+ let collected = 0;
19
+ let skipped = 0;
20
+ for (const sessionId of sessions) {
21
+ if (await this.repository.isSessionCollected(sessionId)) {
22
+ skipped++;
23
+ continue;
24
+ }
25
+ try {
26
+ const result = await this.collectSession(sessionId);
27
+ if (result)
28
+ collected++;
29
+ }
30
+ catch (e) {
31
+ console.error(`セッション '${sessionId}' の収集に失敗: ${e instanceof Error ? e.message : e}`);
32
+ }
33
+ }
34
+ console.log(`\n完了: ${collected}個収集, ${skipped}個スキップ(収集済み), ${sessions.length}個合計`);
35
+ }
36
+ async collectSession(sessionId) {
37
+ if (await this.repository.isSessionCollected(sessionId)) {
38
+ console.log(`セッション '${sessionId}' は既に収集済みです。スキップします。`);
39
+ return false;
40
+ }
41
+ console.log(`セッション '${sessionId}' を読み込み中...`);
42
+ const turns = await this.reader.readSession(sessionId);
43
+ if (turns.length === 0) {
44
+ console.log(" → 会話ターンなし。スキップ。");
45
+ return false;
46
+ }
47
+ if (turns[0].userPrompt.startsWith("Implement the following plan:")) {
48
+ const planDraft = parsePlanText(turns[0].userPrompt);
49
+ if (!planDraft) {
50
+ console.log(" → プラン自動実行セッション(Context なし)。通常フローへ。");
51
+ }
52
+ else {
53
+ console.log(" → プラン実行セッションから意図を抽出。");
54
+ const stepNumber = await this.repository.nextStepNumber();
55
+ const timestamp = await this.reader.getSessionTimestamp(sessionId);
56
+ const step = {
57
+ number: stepNumber,
58
+ title: planDraft.title,
59
+ session: sessionId,
60
+ timestamp,
61
+ tags: planDraft.tags ?? [],
62
+ prompt: planDraft.prompt,
63
+ reasoning: planDraft.reasoning,
64
+ outcome: planDraft.outcome,
65
+ friction: "",
66
+ };
67
+ await this.repository.saveStep(step);
68
+ await this.repository.recordSession(sessionId);
69
+ console.log(` → ステップ ${String(step.number).padStart(3, "0")} を生成: ${step.title}`);
70
+ return true;
71
+ }
72
+ }
73
+ const skillDraft = parseSkillSession(turns);
74
+ if (skillDraft) {
75
+ console.log(` → スキル実行セッションから意図を抽出。`);
76
+ const stepNumber = await this.repository.nextStepNumber();
77
+ const timestamp = await this.reader.getSessionTimestamp(sessionId);
78
+ const step = {
79
+ number: stepNumber,
80
+ title: skillDraft.title,
81
+ session: sessionId,
82
+ timestamp,
83
+ tags: skillDraft.tags ?? [],
84
+ prompt: skillDraft.prompt,
85
+ reasoning: skillDraft.reasoning,
86
+ outcome: skillDraft.outcome,
87
+ friction: "",
88
+ };
89
+ await this.repository.saveStep(step);
90
+ await this.repository.recordSession(sessionId);
91
+ console.log(` → ステップ ${String(step.number).padStart(3, "0")} を生成: ${step.title}`);
92
+ return true;
93
+ }
94
+ console.log(` → ${turns.length}個の会話ターンを検出`);
95
+ const filtered = this.filter.filterTurns(turns);
96
+ if (filtered.length === 0) {
97
+ console.log(" → フィルタ後、有効なターンなし。スキップ。");
98
+ await this.repository.recordSession(sessionId);
99
+ return false;
100
+ }
101
+ console.log(` → フィルタ後: ${filtered.length}個のターン。claude で要約を生成中...`);
102
+ const previousSteps = await this.repository.listSteps();
103
+ const draft = await this.summarizer.summarize(filtered, previousSteps);
104
+ if (!draft) {
105
+ console.log(" → 人間の意図が読み取れないセッション。スキップ。");
106
+ await this.repository.recordSession(sessionId);
107
+ return false;
108
+ }
109
+ const stepNumber = await this.repository.nextStepNumber();
110
+ const timestamp = await this.reader.getSessionTimestamp(sessionId);
111
+ const step = {
112
+ number: stepNumber,
113
+ title: draft.title,
114
+ session: sessionId,
115
+ timestamp,
116
+ tags: draft.tags ?? [],
117
+ prompt: draft.prompt,
118
+ reasoning: draft.reasoning,
119
+ outcome: draft.outcome,
120
+ friction: "",
121
+ };
122
+ await this.repository.saveStep(step);
123
+ await this.repository.recordSession(sessionId);
124
+ console.log(` → ステップ ${String(step.number).padStart(3, "0")} を生成: ${step.title}`);
125
+ return true;
126
+ }
127
+ }
128
+ export function parseSkillSession(turns) {
129
+ // 全ターンからスキル名を収集
130
+ const skills = [];
131
+ for (const turn of turns) {
132
+ skills.push(...turn.skills);
133
+ }
134
+ if (skills.length === 0)
135
+ return null;
136
+ // スキル名を正規化(namespaced の場合は後半を使用: "commit-commands:commit" → "commit")
137
+ const names = skills.map((s) => {
138
+ const parts = s.split(":");
139
+ return parts[parts.length - 1];
140
+ });
141
+ const unique = [...new Set(names)];
142
+ const label = unique.join(", ");
143
+ return {
144
+ title: `/${unique[0]} スキル実行`,
145
+ prompt: turns[0].userPrompt || `/${unique[0]}`,
146
+ reasoning: unique.length > 1 ? `実行スキル: ${label}` : "",
147
+ outcome: `${label} を実行完了`,
148
+ tags: ["skill"],
149
+ };
150
+ }
151
+ export function parsePlanText(prompt) {
152
+ const body = prompt.replace(/^Implement the following plan:\s*/, "").trim();
153
+ if (!body)
154
+ return null;
155
+ // # タイトル を抽出
156
+ const titleMatch = body.match(/^#\s+(.+)/m);
157
+ if (!titleMatch)
158
+ return null;
159
+ let title = titleMatch[1].trim();
160
+ if (title.length > 30) {
161
+ title = title.slice(0, 30);
162
+ }
163
+ // ## Context セクションを抽出
164
+ const contextMatch = body.match(/##\s*Context\s*\n([\s\S]*?)(?=\n##\s|$)/);
165
+ if (!contextMatch)
166
+ return null;
167
+ const context = contextMatch[1].trim();
168
+ if (!context)
169
+ return null;
170
+ // 変更セクションからファイル一覧を抽出
171
+ const files = [];
172
+ const changeSection = body.match(/##\s*変更\s*\n([\s\S]*?)(?=\n##\s*検証|$)/);
173
+ if (changeSection) {
174
+ const fileMatches = changeSection[1].matchAll(/###\s*\d+\.\s*`([^`]+)`/g);
175
+ for (const m of fileMatches) {
176
+ files.push(m[1]);
177
+ }
178
+ }
179
+ const reasoning = files.length > 0
180
+ ? `変更対象: ${files.join(", ")}`
181
+ : "";
182
+ return {
183
+ title,
184
+ prompt: context,
185
+ reasoning,
186
+ outcome: `${title}の実装完了`,
187
+ tags: ["plan"],
188
+ };
189
+ }
190
+ //# sourceMappingURL=collect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect.js","sourceRoot":"","sources":["../../src/usecase/collect.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "intent-log",
3
+ "version": "0.1.0",
4
+ "description": "Version control for intent — extract and structure the evolution of human intent from AI coding sessions",
5
+ "type": "module",
6
+ "bin": {
7
+ "intent": "./dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/gunubin/intent.git"
15
+ },
16
+ "homepage": "https://github.com/gunubin/intent",
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "dev": "tsx src/index.ts",
20
+ "test": "vitest run"
21
+ },
22
+ "keywords": [
23
+ "cli",
24
+ "intent",
25
+ "vibe-coding",
26
+ "ai",
27
+ "claude-code"
28
+ ],
29
+ "license": "MIT",
30
+ "dependencies": {
31
+ "@iarna/toml": "^2.2.5",
32
+ "commander": "^14.0.3",
33
+ "zod": "^4.3.6"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^25.2.3",
37
+ "tsx": "^4.21.0",
38
+ "typescript": "^5.9.3",
39
+ "vitest": "^4.0.18"
40
+ }
41
+ }