@engramm/dev-workflow 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 (234) hide show
  1. package/dist/agents/context-builder.d.ts +11 -0
  2. package/dist/agents/context-builder.d.ts.map +1 -0
  3. package/dist/agents/context-builder.js +62 -0
  4. package/dist/agents/context-builder.js.map +1 -0
  5. package/dist/agents/loader.d.ts +3 -0
  6. package/dist/agents/loader.d.ts.map +1 -0
  7. package/dist/agents/loader.js +54 -0
  8. package/dist/agents/loader.js.map +1 -0
  9. package/dist/agents/registry.d.ts +10 -0
  10. package/dist/agents/registry.d.ts.map +1 -0
  11. package/dist/agents/registry.js +35 -0
  12. package/dist/agents/registry.js.map +1 -0
  13. package/dist/agents/types.d.ts +20 -0
  14. package/dist/agents/types.d.ts.map +1 -0
  15. package/dist/agents/types.js +2 -0
  16. package/dist/agents/types.js.map +1 -0
  17. package/dist/cli/agent.d.ts +2 -0
  18. package/dist/cli/agent.d.ts.map +1 -0
  19. package/dist/cli/agent.js +101 -0
  20. package/dist/cli/agent.js.map +1 -0
  21. package/dist/cli/config.d.ts +2 -0
  22. package/dist/cli/config.d.ts.map +1 -0
  23. package/dist/cli/config.js +100 -0
  24. package/dist/cli/config.js.map +1 -0
  25. package/dist/cli/doctor.d.ts +2 -0
  26. package/dist/cli/doctor.d.ts.map +1 -0
  27. package/dist/cli/doctor.js +123 -0
  28. package/dist/cli/doctor.js.map +1 -0
  29. package/dist/cli/index.d.ts +3 -0
  30. package/dist/cli/index.d.ts.map +1 -0
  31. package/dist/cli/index.js +94 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/cli/init.d.ts +7 -0
  34. package/dist/cli/init.d.ts.map +1 -0
  35. package/dist/cli/init.js +177 -0
  36. package/dist/cli/init.js.map +1 -0
  37. package/dist/cli/run.d.ts +4 -0
  38. package/dist/cli/run.d.ts.map +1 -0
  39. package/dist/cli/run.js +191 -0
  40. package/dist/cli/run.js.map +1 -0
  41. package/dist/cli/search.d.ts +2 -0
  42. package/dist/cli/search.d.ts.map +1 -0
  43. package/dist/cli/search.js +75 -0
  44. package/dist/cli/search.js.map +1 -0
  45. package/dist/cli/serve.d.ts +2 -0
  46. package/dist/cli/serve.d.ts.map +1 -0
  47. package/dist/cli/serve.js +34 -0
  48. package/dist/cli/serve.js.map +1 -0
  49. package/dist/cli/status.d.ts +2 -0
  50. package/dist/cli/status.d.ts.map +1 -0
  51. package/dist/cli/status.js +89 -0
  52. package/dist/cli/status.js.map +1 -0
  53. package/dist/cli/task.d.ts +2 -0
  54. package/dist/cli/task.d.ts.map +1 -0
  55. package/dist/cli/task.js +153 -0
  56. package/dist/cli/task.js.map +1 -0
  57. package/dist/cli/vault-io.d.ts +3 -0
  58. package/dist/cli/vault-io.d.ts.map +1 -0
  59. package/dist/cli/vault-io.js +75 -0
  60. package/dist/cli/vault-io.js.map +1 -0
  61. package/dist/hooks/post-edit.d.ts +3 -0
  62. package/dist/hooks/post-edit.d.ts.map +1 -0
  63. package/dist/hooks/post-edit.js +43 -0
  64. package/dist/hooks/post-edit.js.map +1 -0
  65. package/dist/hooks/post-task.d.ts +3 -0
  66. package/dist/hooks/post-task.d.ts.map +1 -0
  67. package/dist/hooks/post-task.js +25 -0
  68. package/dist/hooks/post-task.js.map +1 -0
  69. package/dist/hooks/pre-compact.d.ts +7 -0
  70. package/dist/hooks/pre-compact.d.ts.map +1 -0
  71. package/dist/hooks/pre-compact.js +34 -0
  72. package/dist/hooks/pre-compact.js.map +1 -0
  73. package/dist/hooks/session-end.d.ts +3 -0
  74. package/dist/hooks/session-end.d.ts.map +1 -0
  75. package/dist/hooks/session-end.js +80 -0
  76. package/dist/hooks/session-end.js.map +1 -0
  77. package/dist/hooks/session-start.d.ts +3 -0
  78. package/dist/hooks/session-start.d.ts.map +1 -0
  79. package/dist/hooks/session-start.js +108 -0
  80. package/dist/hooks/session-start.js.map +1 -0
  81. package/dist/index.d.ts +33 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +27 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/intelligence/collector.d.ts +12 -0
  86. package/dist/intelligence/collector.d.ts.map +1 -0
  87. package/dist/intelligence/collector.js +93 -0
  88. package/dist/intelligence/collector.js.map +1 -0
  89. package/dist/intelligence/ranker.d.ts +5 -0
  90. package/dist/intelligence/ranker.d.ts.map +1 -0
  91. package/dist/intelligence/ranker.js +107 -0
  92. package/dist/intelligence/ranker.js.map +1 -0
  93. package/dist/intelligence/store.d.ts +17 -0
  94. package/dist/intelligence/store.d.ts.map +1 -0
  95. package/dist/intelligence/store.js +75 -0
  96. package/dist/intelligence/store.js.map +1 -0
  97. package/dist/intelligence/sync.d.ts +3 -0
  98. package/dist/intelligence/sync.d.ts.map +1 -0
  99. package/dist/intelligence/sync.js +83 -0
  100. package/dist/intelligence/sync.js.map +1 -0
  101. package/dist/intelligence/types.d.ts +35 -0
  102. package/dist/intelligence/types.d.ts.map +1 -0
  103. package/dist/intelligence/types.js +2 -0
  104. package/dist/intelligence/types.js.map +1 -0
  105. package/dist/lib/context.d.ts +3 -0
  106. package/dist/lib/context.d.ts.map +1 -0
  107. package/dist/lib/context.js +56 -0
  108. package/dist/lib/context.js.map +1 -0
  109. package/dist/lib/conventions-detect.d.ts +12 -0
  110. package/dist/lib/conventions-detect.d.ts.map +1 -0
  111. package/dist/lib/conventions-detect.js +337 -0
  112. package/dist/lib/conventions-detect.js.map +1 -0
  113. package/dist/lib/frontmatter.d.ts +7 -0
  114. package/dist/lib/frontmatter.d.ts.map +1 -0
  115. package/dist/lib/frontmatter.js +45 -0
  116. package/dist/lib/frontmatter.js.map +1 -0
  117. package/dist/lib/fs-helpers.d.ts +6 -0
  118. package/dist/lib/fs-helpers.d.ts.map +1 -0
  119. package/dist/lib/fs-helpers.js +24 -0
  120. package/dist/lib/fs-helpers.js.map +1 -0
  121. package/dist/lib/interpolate.d.ts +2 -0
  122. package/dist/lib/interpolate.d.ts.map +1 -0
  123. package/dist/lib/interpolate.js +4 -0
  124. package/dist/lib/interpolate.js.map +1 -0
  125. package/dist/lib/output.d.ts +27 -0
  126. package/dist/lib/output.d.ts.map +1 -0
  127. package/dist/lib/output.js +85 -0
  128. package/dist/lib/output.js.map +1 -0
  129. package/dist/lib/reader.d.ts +14 -0
  130. package/dist/lib/reader.d.ts.map +1 -0
  131. package/dist/lib/reader.js +75 -0
  132. package/dist/lib/reader.js.map +1 -0
  133. package/dist/lib/stack-detect.d.ts +12 -0
  134. package/dist/lib/stack-detect.d.ts.map +1 -0
  135. package/dist/lib/stack-detect.js +302 -0
  136. package/dist/lib/stack-detect.js.map +1 -0
  137. package/dist/lib/statusline.d.ts +3 -0
  138. package/dist/lib/statusline.d.ts.map +1 -0
  139. package/dist/lib/statusline.js +40 -0
  140. package/dist/lib/statusline.js.map +1 -0
  141. package/dist/lib/templates.d.ts +3 -0
  142. package/dist/lib/templates.d.ts.map +1 -0
  143. package/dist/lib/templates.js +174 -0
  144. package/dist/lib/templates.js.map +1 -0
  145. package/dist/lib/types.d.ts +44 -0
  146. package/dist/lib/types.d.ts.map +1 -0
  147. package/dist/lib/types.js +2 -0
  148. package/dist/lib/types.js.map +1 -0
  149. package/dist/lib/writer.d.ts +13 -0
  150. package/dist/lib/writer.d.ts.map +1 -0
  151. package/dist/lib/writer.js +97 -0
  152. package/dist/lib/writer.js.map +1 -0
  153. package/dist/mcp/handlers.d.ts +34 -0
  154. package/dist/mcp/handlers.d.ts.map +1 -0
  155. package/dist/mcp/handlers.js +256 -0
  156. package/dist/mcp/handlers.js.map +1 -0
  157. package/dist/mcp/server.d.ts +20 -0
  158. package/dist/mcp/server.d.ts.map +1 -0
  159. package/dist/mcp/server.js +89 -0
  160. package/dist/mcp/server.js.map +1 -0
  161. package/dist/mcp/tools.d.ts +11 -0
  162. package/dist/mcp/tools.d.ts.map +1 -0
  163. package/dist/mcp/tools.js +148 -0
  164. package/dist/mcp/tools.js.map +1 -0
  165. package/dist/tasks/manager.d.ts +14 -0
  166. package/dist/tasks/manager.d.ts.map +1 -0
  167. package/dist/tasks/manager.js +151 -0
  168. package/dist/tasks/manager.js.map +1 -0
  169. package/dist/tasks/tracker.d.ts +11 -0
  170. package/dist/tasks/tracker.d.ts.map +1 -0
  171. package/dist/tasks/tracker.js +31 -0
  172. package/dist/tasks/tracker.js.map +1 -0
  173. package/dist/tasks/types.d.ts +19 -0
  174. package/dist/tasks/types.d.ts.map +1 -0
  175. package/dist/tasks/types.js +2 -0
  176. package/dist/tasks/types.js.map +1 -0
  177. package/dist/workflow/builtin.d.ts +4 -0
  178. package/dist/workflow/builtin.d.ts.map +1 -0
  179. package/dist/workflow/builtin.js +93 -0
  180. package/dist/workflow/builtin.js.map +1 -0
  181. package/dist/workflow/engine.d.ts +38 -0
  182. package/dist/workflow/engine.d.ts.map +1 -0
  183. package/dist/workflow/engine.js +217 -0
  184. package/dist/workflow/engine.js.map +1 -0
  185. package/dist/workflow/loader.d.ts +4 -0
  186. package/dist/workflow/loader.d.ts.map +1 -0
  187. package/dist/workflow/loader.js +106 -0
  188. package/dist/workflow/loader.js.map +1 -0
  189. package/dist/workflow/state.d.ts +11 -0
  190. package/dist/workflow/state.d.ts.map +1 -0
  191. package/dist/workflow/state.js +49 -0
  192. package/dist/workflow/state.js.map +1 -0
  193. package/dist/workflow/types.d.ts +36 -0
  194. package/dist/workflow/types.d.ts.map +1 -0
  195. package/dist/workflow/types.js +2 -0
  196. package/dist/workflow/types.js.map +1 -0
  197. package/package.json +54 -0
  198. package/templates/agents/architect.md +46 -0
  199. package/templates/agents/coder.md +46 -0
  200. package/templates/agents/committer.md +29 -0
  201. package/templates/agents/debugger.md +54 -0
  202. package/templates/agents/planner.md +45 -0
  203. package/templates/agents/reader.md +48 -0
  204. package/templates/agents/reviewer.md +48 -0
  205. package/templates/agents/tester.md +41 -0
  206. package/templates/claude/agents/researcher.md +47 -0
  207. package/templates/claude/agents/writer.md +29 -0
  208. package/templates/claude/commands/git/changelog.md +41 -0
  209. package/templates/claude/commands/git/merge.md +37 -0
  210. package/templates/claude/commands/git/new-branch.md +34 -0
  211. package/templates/claude/commands/git/pr-review.md +64 -0
  212. package/templates/claude/commands/session/handover.md +49 -0
  213. package/templates/claude/commands/session/resume.md +43 -0
  214. package/templates/claude/commands/session/review.md +81 -0
  215. package/templates/claude/commands/task.md +52 -0
  216. package/templates/claude/commands/vault/adr.md +39 -0
  217. package/templates/claude/commands/vault/analyze.md +110 -0
  218. package/templates/claude/commands/vault/bug.md +31 -0
  219. package/templates/claude/commands/vault/debt.md +28 -0
  220. package/templates/claude/commands/vault/deps.md +36 -0
  221. package/templates/claude/commands/vault/from-spec.md +306 -0
  222. package/templates/claude/commands/vault/search.md +31 -0
  223. package/templates/claude/commands/vault/security-scan.md +50 -0
  224. package/templates/claude/commands/vault/test-gaps.md +38 -0
  225. package/templates/claude/commands/workflow/dev.md +913 -0
  226. package/templates/claude/commands/workflow.md +47 -0
  227. package/templates/claude/settings.json +52 -0
  228. package/templates/claude/skills/obsidian-markdown/SKILL.md +196 -0
  229. package/templates/claude/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
  230. package/templates/claude/skills/obsidian-markdown/references/EMBEDS.md +63 -0
  231. package/templates/claude/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
  232. package/templates/workflows/deploy.yaml +21 -0
  233. package/templates/workflows/release.yaml +26 -0
  234. package/templates/workflows/spike.yaml +14 -0
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env node
2
+ import { execFileSync } from "node:child_process";
3
+ import { detectContext } from "../lib/context.js";
4
+ import { VaultReader } from "../lib/reader.js";
5
+ import { VaultWriter } from "../lib/writer.js";
6
+ import { WorkflowState } from "../workflow/state.js";
7
+ import { IntelligenceStore } from "../intelligence/store.js";
8
+ import { Collector } from "../intelligence/collector.js";
9
+ function git(args, cwd) {
10
+ try {
11
+ return execFileSync("git", args, { cwd, encoding: "utf-8" }).trim();
12
+ }
13
+ catch {
14
+ return "";
15
+ }
16
+ }
17
+ function run() {
18
+ const context = detectContext();
19
+ if (!context) {
20
+ output({ status: "ok", message: "Not a git repository, skipping." });
21
+ return;
22
+ }
23
+ const reader = new VaultReader(context);
24
+ if (!reader.exists()) {
25
+ output({ status: "ok", message: "No vault found, skipping." });
26
+ return;
27
+ }
28
+ const writer = new VaultWriter(context);
29
+ const today = new Date().toISOString().slice(0, 10);
30
+ const time = new Date().toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit" });
31
+ const markerLines = [
32
+ `---`,
33
+ `date: ${today}`,
34
+ `projects: [${context.projectName}]`,
35
+ `branches: [${context.branch}]`,
36
+ `tags: [session-log, auto]`,
37
+ `---`,
38
+ `# Auto-save — ${today} ${time}`,
39
+ ``,
40
+ `**Project:** ${context.projectName}`,
41
+ `**Branch:** ${context.branch}`,
42
+ ``,
43
+ `> Session auto-saved. Use /handover for detailed session notes.`,
44
+ ];
45
+ const diffStat = git(["diff", "--stat", "HEAD"], context.projectRoot);
46
+ if (diffStat) {
47
+ markerLines.push("", "## Changes", "```", diffStat, "```");
48
+ }
49
+ const statusShort = git(["status", "-s"], context.projectRoot);
50
+ if (statusShort) {
51
+ markerLines.push("", "## Uncommitted", "```", statusShort, "```");
52
+ }
53
+ const marker = markerLines.join("\n");
54
+ const dailyPath = writer.writeDailyLog(marker, today);
55
+ const intelligenceStore = new IntelligenceStore(context.vaultPath);
56
+ const collector = new Collector(intelligenceStore);
57
+ const changedFiles = statusShort
58
+ ? statusShort.split("\n").map((line) => line.slice(3).trim()).filter(Boolean)
59
+ : [];
60
+ if (changedFiles.length > 0) {
61
+ collector.recordSession(context.branch, changedFiles);
62
+ collector.recordCoEditedFiles(changedFiles);
63
+ intelligenceStore.save();
64
+ }
65
+ const workflowState = new WorkflowState(context.vaultPath);
66
+ const currentRun = workflowState.loadCurrent();
67
+ if (currentRun && currentRun.status === "running") {
68
+ currentRun.status = "paused";
69
+ workflowState.save(currentRun);
70
+ }
71
+ output({
72
+ status: "ok",
73
+ message: `Session saved → ${dailyPath}`,
74
+ });
75
+ }
76
+ function output(result) {
77
+ process.stdout.write(JSON.stringify(result));
78
+ }
79
+ run();
80
+ //# sourceMappingURL=session-end.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../src/hooks/session-end.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=session-start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":""}
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+ import { detectContext } from "../lib/context.js";
3
+ import { VaultReader } from "../lib/reader.js";
4
+ import { TaskManager } from "../tasks/manager.js";
5
+ import { TaskTracker } from "../tasks/tracker.js";
6
+ import { WorkflowState } from "../workflow/state.js";
7
+ import { IntelligenceStore } from "../intelligence/store.js";
8
+ import { syncFromVault } from "../intelligence/sync.js";
9
+ import { topN, formatRelevantContext } from "../intelligence/ranker.js";
10
+ async function run() {
11
+ const context = detectContext();
12
+ if (!context) {
13
+ output({ status: "ok", message: "Not a git repository, skipping vault resume." });
14
+ return;
15
+ }
16
+ const reader = new VaultReader(context);
17
+ if (!reader.exists()) {
18
+ output({ status: "ok", message: `No .dev-vault/ found in ${context.projectName}. Run 'dev-workflow init' to set up.` });
19
+ return;
20
+ }
21
+ const vaultData = reader.readAll(context.branch);
22
+ const sections = [];
23
+ sections.push(`# Dev Vault: ${context.projectName}`);
24
+ sections.push(`**Branch:** ${context.branch} (parent: ${context.parentBranch})`);
25
+ if (vaultData.stack) {
26
+ sections.push("\n## Stack\n" + truncate(vaultData.stack, 2000));
27
+ }
28
+ if (vaultData.knowledge) {
29
+ sections.push("\n## Knowledge\n" + truncate(vaultData.knowledge, 3000));
30
+ }
31
+ if (vaultData.gameplan) {
32
+ sections.push("\n## Gameplan\n" + truncate(vaultData.gameplan, 2000));
33
+ }
34
+ if (vaultData.conventions) {
35
+ sections.push("\n## Conventions\n" + truncate(vaultData.conventions, 1500));
36
+ }
37
+ if (vaultData.branch) {
38
+ sections.push(`\n## Branch Context: ${vaultData.branch.branch}\n` +
39
+ `Status: ${vaultData.branch.status}\n\n` +
40
+ truncate(vaultData.branch.raw, 2000));
41
+ }
42
+ else if (context.branch !== context.parentBranch) {
43
+ const { VaultWriter } = await import("../lib/writer.js");
44
+ const { renderTemplate } = await import("../lib/templates.js");
45
+ const writer = new VaultWriter(context);
46
+ const branchContent = renderTemplate("records/branch", {
47
+ projectName: context.projectName,
48
+ branch: context.branch,
49
+ parent: context.parentBranch,
50
+ goal: "",
51
+ });
52
+ writer.writeBranch(context.branch, branchContent);
53
+ sections.push(`\n## Branch Context: ${context.branch}\n> Auto-created. Fill in the goal.`);
54
+ }
55
+ if (vaultData.recentDailyLogs.length > 0) {
56
+ const latest = vaultData.recentDailyLogs[0];
57
+ if (latest) {
58
+ sections.push(`\n## Last Session (${latest.date})\n` + truncate(latest.content, 1500));
59
+ }
60
+ }
61
+ const taskManager = new TaskManager(context.vaultPath);
62
+ const tracker = new TaskTracker(context.projectRoot, taskManager);
63
+ const currentTask = tracker.findByBranch(context.branch);
64
+ if (currentTask) {
65
+ sections.push(`\n## Current Task: ${currentTask.title}\n` +
66
+ `Status: ${currentTask.status}\n` +
67
+ `ID: ${currentTask.id}\n\n` +
68
+ currentTask.description);
69
+ }
70
+ const workflowState = new WorkflowState(context.vaultPath);
71
+ const pausedRun = workflowState.loadCurrent();
72
+ if (pausedRun && pausedRun.status === "paused") {
73
+ sections.push(`\n## Paused Workflow: ${pausedRun.workflowName}\n` +
74
+ `Step: ${pausedRun.currentStep}\n` +
75
+ `Run: ${pausedRun.id}\n\n` +
76
+ `> Resume with: dev-workflow resume`);
77
+ }
78
+ const intelligenceStore = new IntelligenceStore(context.vaultPath);
79
+ syncFromVault(intelligenceStore, context.vaultPath);
80
+ const scoringContext = {
81
+ branch: context.branch,
82
+ taskTitle: currentTask?.title ?? null,
83
+ recentFiles: [],
84
+ query: null,
85
+ };
86
+ const ranked = topN(intelligenceStore.allNodes(), scoringContext, 15);
87
+ const relevantContext = formatRelevantContext(ranked);
88
+ if (relevantContext) {
89
+ sections.push("\n" + relevantContext);
90
+ }
91
+ output({
92
+ status: "ok",
93
+ message: sections.join("\n"),
94
+ context: vaultData,
95
+ });
96
+ }
97
+ function truncate(text, maxLength) {
98
+ if (text.length <= maxLength)
99
+ return text;
100
+ return text.slice(0, maxLength) + "\n\n... (truncated)";
101
+ }
102
+ function output(result) {
103
+ process.stdout.write(JSON.stringify(result));
104
+ }
105
+ run().catch(() => {
106
+ process.stdout.write(JSON.stringify({ status: "error", message: "Session start hook failed" }));
107
+ });
108
+ //# sourceMappingURL=session-start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export { detectContext } from "./lib/context.js";
2
+ export { VaultReader } from "./lib/reader.js";
3
+ export { VaultWriter } from "./lib/writer.js";
4
+ export { renderTemplate } from "./lib/templates.js";
5
+ export { interpolate } from "./lib/interpolate.js";
6
+ export { parseFrontmatter, serializeFrontmatter } from "./lib/frontmatter.js";
7
+ export { readFileOrNull, writeFileSafe, slugify, todayDate } from "./lib/fs-helpers.js";
8
+ export { icon, table, progressBar, box, section, statusIcon, stepLine, keyValue, divider } from "./lib/output.js";
9
+ export { detectStack, renderStackMarkdown } from "./lib/stack-detect.js";
10
+ export { detectConventions, renderConventionsMarkdown } from "./lib/conventions-detect.js";
11
+ export { AgentRegistry } from "./agents/registry.js";
12
+ export { AgentContextBuilder } from "./agents/context-builder.js";
13
+ export { parseAgentFile } from "./agents/loader.js";
14
+ export { TaskManager } from "./tasks/manager.js";
15
+ export { TaskTracker } from "./tasks/tracker.js";
16
+ export { WorkflowEngine } from "./workflow/engine.js";
17
+ export type { StepExecutor, GateChecker, WorkflowResolver } from "./workflow/engine.js";
18
+ export { WorkflowState } from "./workflow/state.js";
19
+ export { getBuiltinWorkflows, getBuiltinWorkflow } from "./workflow/builtin.js";
20
+ export { parseWorkflowYaml, loadCustomWorkflows } from "./workflow/loader.js";
21
+ export { McpServer } from "./mcp/server.js";
22
+ export { ToolHandlers } from "./mcp/handlers.js";
23
+ export { getToolDefinitions } from "./mcp/tools.js";
24
+ export { IntelligenceStore } from "./intelligence/store.js";
25
+ export { Collector } from "./intelligence/collector.js";
26
+ export { scoreNodes, topN, formatRelevantContext } from "./intelligence/ranker.js";
27
+ export { syncFromVault } from "./intelligence/sync.js";
28
+ export type { ProjectContext, VaultData, DailyLog, BranchContext } from "./lib/types.js";
29
+ export type { Frontmatter } from "./lib/frontmatter.js";
30
+ export type { AgentDefinition, PreparedAgent, AgentPermissions, VaultSection, GitOperation } from "./agents/types.js";
31
+ export type { Task, TaskStatus, TaskPriority, TaskFilter } from "./tasks/types.js";
32
+ export type { WorkflowDefinition, WorkflowRun, StepDefinition, WorkflowStatus, StepState, GateType } from "./workflow/types.js";
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACzF,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtH,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnF,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ export { detectContext } from "./lib/context.js";
2
+ export { VaultReader } from "./lib/reader.js";
3
+ export { VaultWriter } from "./lib/writer.js";
4
+ export { renderTemplate } from "./lib/templates.js";
5
+ export { interpolate } from "./lib/interpolate.js";
6
+ export { parseFrontmatter, serializeFrontmatter } from "./lib/frontmatter.js";
7
+ export { readFileOrNull, writeFileSafe, slugify, todayDate } from "./lib/fs-helpers.js";
8
+ export { icon, table, progressBar, box, section, statusIcon, stepLine, keyValue, divider } from "./lib/output.js";
9
+ export { detectStack, renderStackMarkdown } from "./lib/stack-detect.js";
10
+ export { detectConventions, renderConventionsMarkdown } from "./lib/conventions-detect.js";
11
+ export { AgentRegistry } from "./agents/registry.js";
12
+ export { AgentContextBuilder } from "./agents/context-builder.js";
13
+ export { parseAgentFile } from "./agents/loader.js";
14
+ export { TaskManager } from "./tasks/manager.js";
15
+ export { TaskTracker } from "./tasks/tracker.js";
16
+ export { WorkflowEngine } from "./workflow/engine.js";
17
+ export { WorkflowState } from "./workflow/state.js";
18
+ export { getBuiltinWorkflows, getBuiltinWorkflow } from "./workflow/builtin.js";
19
+ export { parseWorkflowYaml, loadCustomWorkflows } from "./workflow/loader.js";
20
+ export { McpServer } from "./mcp/server.js";
21
+ export { ToolHandlers } from "./mcp/handlers.js";
22
+ export { getToolDefinitions } from "./mcp/tools.js";
23
+ export { IntelligenceStore } from "./intelligence/store.js";
24
+ export { Collector } from "./intelligence/collector.js";
25
+ export { scoreNodes, topN, formatRelevantContext } from "./intelligence/ranker.js";
26
+ export { syncFromVault } from "./intelligence/sync.js";
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { IntelligenceStore } from "./store.js";
2
+ import type { PatternCategory } from "./types.js";
3
+ export declare class Collector {
4
+ private readonly store;
5
+ constructor(store: IntelligenceStore);
6
+ recordFileEdit(filepath: string): void;
7
+ recordCoEditedFiles(files: string[]): void;
8
+ recordPattern(category: PatternCategory, content: string, source: string): void;
9
+ recordSession(branch: string, filesChanged: string[]): void;
10
+ recordTaskCompletion(taskTitle: string, agent: string): void;
11
+ }
12
+ //# sourceMappingURL=collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/intelligence/collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAelD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;gBAE9B,KAAK,EAAE,iBAAiB;IAIpC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IActC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAe1C,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAc/E,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI;IAwB3D,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAa7D"}
@@ -0,0 +1,93 @@
1
+ function makeId(category, content) {
2
+ const slug = content
3
+ .toLowerCase()
4
+ .replace(/[^a-z0-9]+/g, "-")
5
+ .slice(0, 40)
6
+ .replace(/-$/, "");
7
+ return `${category}:${slug}`;
8
+ }
9
+ function now() {
10
+ return new Date().toISOString();
11
+ }
12
+ export class Collector {
13
+ store;
14
+ constructor(store) {
15
+ this.store = store;
16
+ }
17
+ recordFileEdit(filepath) {
18
+ const id = makeId("file", filepath);
19
+ this.store.upsertNode({
20
+ id,
21
+ category: "file",
22
+ content: filepath,
23
+ source: "auto:edit",
24
+ confidence: 0.5,
25
+ accessCount: 1,
26
+ lastAccessed: now(),
27
+ createdAt: now(),
28
+ });
29
+ }
30
+ recordCoEditedFiles(files) {
31
+ for (let i = 0; i < files.length; i++) {
32
+ for (let j = i + 1; j < files.length; j++) {
33
+ const fromId = makeId("file", files[i]);
34
+ const toId = makeId("file", files[j]);
35
+ this.store.addEdge({
36
+ from: fromId,
37
+ to: toId,
38
+ relation: "co-edited",
39
+ weight: 0.5,
40
+ });
41
+ }
42
+ }
43
+ }
44
+ recordPattern(category, content, source) {
45
+ const id = makeId(category, content);
46
+ this.store.upsertNode({
47
+ id,
48
+ category,
49
+ content,
50
+ source,
51
+ confidence: 0.6,
52
+ accessCount: 0,
53
+ lastAccessed: now(),
54
+ createdAt: now(),
55
+ });
56
+ }
57
+ recordSession(branch, filesChanged) {
58
+ const sessionId = makeId("session", `${branch}-${new Date().toISOString().slice(0, 10)}`);
59
+ this.store.upsertNode({
60
+ id: sessionId,
61
+ category: "session",
62
+ content: `Session on ${branch}: ${filesChanged.length} files changed`,
63
+ source: "auto:session",
64
+ confidence: 0.5,
65
+ accessCount: 0,
66
+ lastAccessed: now(),
67
+ createdAt: now(),
68
+ });
69
+ for (const file of filesChanged) {
70
+ const fileId = makeId("file", file);
71
+ this.store.addEdge({
72
+ from: sessionId,
73
+ to: fileId,
74
+ relation: "related",
75
+ weight: 0.3,
76
+ });
77
+ }
78
+ }
79
+ recordTaskCompletion(taskTitle, agent) {
80
+ const id = makeId("task", taskTitle);
81
+ this.store.upsertNode({
82
+ id,
83
+ category: "task",
84
+ content: `Task: ${taskTitle} (completed by ${agent})`,
85
+ source: "auto:task",
86
+ confidence: 0.7,
87
+ accessCount: 0,
88
+ lastAccessed: now(),
89
+ createdAt: now(),
90
+ });
91
+ }
92
+ }
93
+ //# sourceMappingURL=collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/intelligence/collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { PatternNode, ScoringContext, ScoredNode } from "./types.js";
2
+ export declare function scoreNodes(nodes: PatternNode[], context: ScoringContext): ScoredNode[];
3
+ export declare function topN(nodes: PatternNode[], context: ScoringContext, count?: number): ScoredNode[];
4
+ export declare function formatRelevantContext(scored: ScoredNode[]): string;
5
+ //# sourceMappingURL=ranker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranker.d.ts","sourceRoot":"","sources":["../../src/intelligence/ranker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAoE1E,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,UAAU,EAAE,CActF;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE,CAIpG;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAgClE"}
@@ -0,0 +1,107 @@
1
+ const DAY_MS = 86_400_000;
2
+ const RECENCY_HALF_LIFE_DAYS = 7;
3
+ function recencyScore(lastAccessed) {
4
+ const ageMs = Date.now() - new Date(lastAccessed).getTime();
5
+ const ageDays = ageMs / DAY_MS;
6
+ return Math.exp(-ageDays / RECENCY_HALF_LIFE_DAYS);
7
+ }
8
+ function frequencyScore(accessCount, maxAccess) {
9
+ if (maxAccess === 0)
10
+ return 0;
11
+ return accessCount / maxAccess;
12
+ }
13
+ function contextMatchScore(node, context) {
14
+ const contentLower = node.content.toLowerCase();
15
+ let matches = 0;
16
+ let checks = 0;
17
+ if (context.branch) {
18
+ checks++;
19
+ const branchWords = context.branch.toLowerCase().replace(/[/_-]/g, " ").split(" ");
20
+ for (const word of branchWords) {
21
+ if (word.length > 2 && contentLower.includes(word)) {
22
+ matches++;
23
+ break;
24
+ }
25
+ }
26
+ }
27
+ if (context.taskTitle) {
28
+ checks++;
29
+ const taskWords = context.taskTitle.toLowerCase().split(/\s+/);
30
+ for (const word of taskWords) {
31
+ if (word.length > 2 && contentLower.includes(word)) {
32
+ matches++;
33
+ break;
34
+ }
35
+ }
36
+ }
37
+ if (context.recentFiles.length > 0) {
38
+ checks++;
39
+ for (const file of context.recentFiles) {
40
+ const fileName = file.split("/").pop()?.replace(/\.\w+$/, "").toLowerCase() ?? "";
41
+ if (fileName.length > 2 && contentLower.includes(fileName)) {
42
+ matches++;
43
+ break;
44
+ }
45
+ }
46
+ }
47
+ if (context.query) {
48
+ checks++;
49
+ const queryWords = context.query.toLowerCase().split(/\s+/);
50
+ for (const word of queryWords) {
51
+ if (word.length > 2 && contentLower.includes(word)) {
52
+ matches++;
53
+ break;
54
+ }
55
+ }
56
+ }
57
+ return checks === 0 ? 0 : matches / checks;
58
+ }
59
+ export function scoreNodes(nodes, context) {
60
+ const maxAccess = Math.max(1, ...nodes.map((n) => n.accessCount));
61
+ return nodes.map((node) => {
62
+ const confidence = node.confidence * 0.3;
63
+ const recency = recencyScore(node.lastAccessed) * 0.3;
64
+ const frequency = frequencyScore(node.accessCount, maxAccess) * 0.2;
65
+ const contextMatch = contextMatchScore(node, context) * 0.2;
66
+ return {
67
+ node,
68
+ score: confidence + recency + frequency + contextMatch,
69
+ };
70
+ });
71
+ }
72
+ export function topN(nodes, context, count = 20) {
73
+ return scoreNodes(nodes, context)
74
+ .sort((a, b) => b.score - a.score)
75
+ .slice(0, count);
76
+ }
77
+ export function formatRelevantContext(scored) {
78
+ if (scored.length === 0)
79
+ return "";
80
+ const lines = ["## Relevant Context (auto-ranked)"];
81
+ const grouped = {};
82
+ for (const item of scored) {
83
+ const cat = item.node.category;
84
+ if (!grouped[cat])
85
+ grouped[cat] = [];
86
+ grouped[cat].push(item);
87
+ }
88
+ const categoryLabels = {
89
+ convention: "Conventions",
90
+ pattern: "Patterns",
91
+ gotcha: "Gotchas",
92
+ decision: "Decisions",
93
+ file: "Recent files",
94
+ task: "Tasks",
95
+ session: "Sessions",
96
+ };
97
+ for (const [category, items] of Object.entries(grouped)) {
98
+ const label = categoryLabels[category] ?? category;
99
+ lines.push(`\n### ${label}`);
100
+ for (const item of items.slice(0, 5)) {
101
+ const score = (item.score * 100).toFixed(0);
102
+ lines.push(`- ${item.node.content} (${score}%)`);
103
+ }
104
+ }
105
+ return lines.join("\n");
106
+ }
107
+ //# sourceMappingURL=ranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranker.js","sourceRoot":"","sources":["../../src/intelligence/ranker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { IntelligenceGraph, PatternNode, PatternEdge } from "./types.js";
2
+ export declare class IntelligenceStore {
3
+ private readonly filepath;
4
+ private graph;
5
+ constructor(vaultPath: string);
6
+ private load;
7
+ save(): void;
8
+ getGraph(): IntelligenceGraph;
9
+ getNode(id: string): PatternNode | undefined;
10
+ upsertNode(node: PatternNode): void;
11
+ addEdge(edge: PatternEdge): void;
12
+ recordAccess(nodeId: string): void;
13
+ nodeCount(): number;
14
+ edgeCount(): number;
15
+ allNodes(): PatternNode[];
16
+ }
17
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/intelligence/store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAa9E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,KAAK,CAAoB;gBAErB,SAAS,EAAE,MAAM;IAK7B,OAAO,CAAC,IAAI;IASZ,IAAI,IAAI,IAAI;IAKZ,QAAQ,IAAI,iBAAiB;IAI7B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI5C,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAWnC,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAShC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASlC,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,MAAM;IAInB,QAAQ,IAAI,WAAW,EAAE;CAG1B"}
@@ -0,0 +1,75 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { writeFileSafe } from "../lib/fs-helpers.js";
4
+ const GRAPH_FILE = ".intelligence.json";
5
+ function emptyGraph() {
6
+ return {
7
+ version: 1,
8
+ updatedAt: new Date().toISOString(),
9
+ nodes: {},
10
+ edges: [],
11
+ };
12
+ }
13
+ export class IntelligenceStore {
14
+ filepath;
15
+ graph;
16
+ constructor(vaultPath) {
17
+ this.filepath = join(vaultPath, GRAPH_FILE);
18
+ this.graph = this.load();
19
+ }
20
+ load() {
21
+ if (!existsSync(this.filepath))
22
+ return emptyGraph();
23
+ try {
24
+ return JSON.parse(readFileSync(this.filepath, "utf-8"));
25
+ }
26
+ catch {
27
+ return emptyGraph();
28
+ }
29
+ }
30
+ save() {
31
+ this.graph.updatedAt = new Date().toISOString();
32
+ writeFileSafe(this.filepath, JSON.stringify(this.graph, null, 2));
33
+ }
34
+ getGraph() {
35
+ return this.graph;
36
+ }
37
+ getNode(id) {
38
+ return this.graph.nodes[id];
39
+ }
40
+ upsertNode(node) {
41
+ const existing = this.graph.nodes[node.id];
42
+ if (existing) {
43
+ existing.content = node.content;
44
+ existing.confidence = Math.min(1, existing.confidence + 0.05);
45
+ existing.lastAccessed = new Date().toISOString();
46
+ }
47
+ else {
48
+ this.graph.nodes[node.id] = node;
49
+ }
50
+ }
51
+ addEdge(edge) {
52
+ const exists = this.graph.edges.some((e) => e.from === edge.from && e.to === edge.to && e.relation === edge.relation);
53
+ if (!exists) {
54
+ this.graph.edges.push(edge);
55
+ }
56
+ }
57
+ recordAccess(nodeId) {
58
+ const node = this.graph.nodes[nodeId];
59
+ if (node) {
60
+ node.accessCount++;
61
+ node.lastAccessed = new Date().toISOString();
62
+ node.confidence = Math.min(1, node.confidence + 0.02);
63
+ }
64
+ }
65
+ nodeCount() {
66
+ return Object.keys(this.graph.nodes).length;
67
+ }
68
+ edgeCount() {
69
+ return this.graph.edges.length;
70
+ }
71
+ allNodes() {
72
+ return Object.values(this.graph.nodes);
73
+ }
74
+ }
75
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/intelligence/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { IntelligenceStore } from "./store.js";
2
+ export declare function syncFromVault(store: IntelligenceStore, vaultPath: string): number;
3
+ //# sourceMappingURL=sync.d.ts.map