@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.
- package/dist/agents/context-builder.d.ts +11 -0
- package/dist/agents/context-builder.d.ts.map +1 -0
- package/dist/agents/context-builder.js +62 -0
- package/dist/agents/context-builder.js.map +1 -0
- package/dist/agents/loader.d.ts +3 -0
- package/dist/agents/loader.d.ts.map +1 -0
- package/dist/agents/loader.js +54 -0
- package/dist/agents/loader.js.map +1 -0
- package/dist/agents/registry.d.ts +10 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +35 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/types.d.ts +20 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cli/agent.d.ts +2 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +101 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/config.d.ts +2 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +100 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +123 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +94 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +7 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +177 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/run.d.ts +4 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +191 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/search.d.ts +2 -0
- package/dist/cli/search.d.ts.map +1 -0
- package/dist/cli/search.js +75 -0
- package/dist/cli/search.js.map +1 -0
- package/dist/cli/serve.d.ts +2 -0
- package/dist/cli/serve.d.ts.map +1 -0
- package/dist/cli/serve.js +34 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/status.d.ts +2 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +89 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/task.d.ts +2 -0
- package/dist/cli/task.d.ts.map +1 -0
- package/dist/cli/task.js +153 -0
- package/dist/cli/task.js.map +1 -0
- package/dist/cli/vault-io.d.ts +3 -0
- package/dist/cli/vault-io.d.ts.map +1 -0
- package/dist/cli/vault-io.js +75 -0
- package/dist/cli/vault-io.js.map +1 -0
- package/dist/hooks/post-edit.d.ts +3 -0
- package/dist/hooks/post-edit.d.ts.map +1 -0
- package/dist/hooks/post-edit.js +43 -0
- package/dist/hooks/post-edit.js.map +1 -0
- package/dist/hooks/post-task.d.ts +3 -0
- package/dist/hooks/post-task.d.ts.map +1 -0
- package/dist/hooks/post-task.js +25 -0
- package/dist/hooks/post-task.js.map +1 -0
- package/dist/hooks/pre-compact.d.ts +7 -0
- package/dist/hooks/pre-compact.d.ts.map +1 -0
- package/dist/hooks/pre-compact.js +34 -0
- package/dist/hooks/pre-compact.js.map +1 -0
- package/dist/hooks/session-end.d.ts +3 -0
- package/dist/hooks/session-end.d.ts.map +1 -0
- package/dist/hooks/session-end.js +80 -0
- package/dist/hooks/session-end.js.map +1 -0
- package/dist/hooks/session-start.d.ts +3 -0
- package/dist/hooks/session-start.d.ts.map +1 -0
- package/dist/hooks/session-start.js +108 -0
- package/dist/hooks/session-start.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/intelligence/collector.d.ts +12 -0
- package/dist/intelligence/collector.d.ts.map +1 -0
- package/dist/intelligence/collector.js +93 -0
- package/dist/intelligence/collector.js.map +1 -0
- package/dist/intelligence/ranker.d.ts +5 -0
- package/dist/intelligence/ranker.d.ts.map +1 -0
- package/dist/intelligence/ranker.js +107 -0
- package/dist/intelligence/ranker.js.map +1 -0
- package/dist/intelligence/store.d.ts +17 -0
- package/dist/intelligence/store.d.ts.map +1 -0
- package/dist/intelligence/store.js +75 -0
- package/dist/intelligence/store.js.map +1 -0
- package/dist/intelligence/sync.d.ts +3 -0
- package/dist/intelligence/sync.d.ts.map +1 -0
- package/dist/intelligence/sync.js +83 -0
- package/dist/intelligence/sync.js.map +1 -0
- package/dist/intelligence/types.d.ts +35 -0
- package/dist/intelligence/types.d.ts.map +1 -0
- package/dist/intelligence/types.js +2 -0
- package/dist/intelligence/types.js.map +1 -0
- package/dist/lib/context.d.ts +3 -0
- package/dist/lib/context.d.ts.map +1 -0
- package/dist/lib/context.js +56 -0
- package/dist/lib/context.js.map +1 -0
- package/dist/lib/conventions-detect.d.ts +12 -0
- package/dist/lib/conventions-detect.d.ts.map +1 -0
- package/dist/lib/conventions-detect.js +337 -0
- package/dist/lib/conventions-detect.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +7 -0
- package/dist/lib/frontmatter.d.ts.map +1 -0
- package/dist/lib/frontmatter.js +45 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/fs-helpers.d.ts +6 -0
- package/dist/lib/fs-helpers.d.ts.map +1 -0
- package/dist/lib/fs-helpers.js +24 -0
- package/dist/lib/fs-helpers.js.map +1 -0
- package/dist/lib/interpolate.d.ts +2 -0
- package/dist/lib/interpolate.d.ts.map +1 -0
- package/dist/lib/interpolate.js +4 -0
- package/dist/lib/interpolate.js.map +1 -0
- package/dist/lib/output.d.ts +27 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +85 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/reader.d.ts +14 -0
- package/dist/lib/reader.d.ts.map +1 -0
- package/dist/lib/reader.js +75 -0
- package/dist/lib/reader.js.map +1 -0
- package/dist/lib/stack-detect.d.ts +12 -0
- package/dist/lib/stack-detect.d.ts.map +1 -0
- package/dist/lib/stack-detect.js +302 -0
- package/dist/lib/stack-detect.js.map +1 -0
- package/dist/lib/statusline.d.ts +3 -0
- package/dist/lib/statusline.d.ts.map +1 -0
- package/dist/lib/statusline.js +40 -0
- package/dist/lib/statusline.js.map +1 -0
- package/dist/lib/templates.d.ts +3 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +174 -0
- package/dist/lib/templates.js.map +1 -0
- package/dist/lib/types.d.ts +44 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/writer.d.ts +13 -0
- package/dist/lib/writer.d.ts.map +1 -0
- package/dist/lib/writer.js +97 -0
- package/dist/lib/writer.js.map +1 -0
- package/dist/mcp/handlers.d.ts +34 -0
- package/dist/mcp/handlers.d.ts.map +1 -0
- package/dist/mcp/handlers.js +256 -0
- package/dist/mcp/handlers.js.map +1 -0
- package/dist/mcp/server.d.ts +20 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +89 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +11 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +148 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/tasks/manager.d.ts +14 -0
- package/dist/tasks/manager.d.ts.map +1 -0
- package/dist/tasks/manager.js +151 -0
- package/dist/tasks/manager.js.map +1 -0
- package/dist/tasks/tracker.d.ts +11 -0
- package/dist/tasks/tracker.d.ts.map +1 -0
- package/dist/tasks/tracker.js +31 -0
- package/dist/tasks/tracker.js.map +1 -0
- package/dist/tasks/types.d.ts +19 -0
- package/dist/tasks/types.d.ts.map +1 -0
- package/dist/tasks/types.js +2 -0
- package/dist/tasks/types.js.map +1 -0
- package/dist/workflow/builtin.d.ts +4 -0
- package/dist/workflow/builtin.d.ts.map +1 -0
- package/dist/workflow/builtin.js +93 -0
- package/dist/workflow/builtin.js.map +1 -0
- package/dist/workflow/engine.d.ts +38 -0
- package/dist/workflow/engine.d.ts.map +1 -0
- package/dist/workflow/engine.js +217 -0
- package/dist/workflow/engine.js.map +1 -0
- package/dist/workflow/loader.d.ts +4 -0
- package/dist/workflow/loader.d.ts.map +1 -0
- package/dist/workflow/loader.js +106 -0
- package/dist/workflow/loader.js.map +1 -0
- package/dist/workflow/state.d.ts +11 -0
- package/dist/workflow/state.d.ts.map +1 -0
- package/dist/workflow/state.js +49 -0
- package/dist/workflow/state.js.map +1 -0
- package/dist/workflow/types.d.ts +36 -0
- package/dist/workflow/types.d.ts.map +1 -0
- package/dist/workflow/types.js +2 -0
- package/dist/workflow/types.js.map +1 -0
- package/package.json +54 -0
- package/templates/agents/architect.md +46 -0
- package/templates/agents/coder.md +46 -0
- package/templates/agents/committer.md +29 -0
- package/templates/agents/debugger.md +54 -0
- package/templates/agents/planner.md +45 -0
- package/templates/agents/reader.md +48 -0
- package/templates/agents/reviewer.md +48 -0
- package/templates/agents/tester.md +41 -0
- package/templates/claude/agents/researcher.md +47 -0
- package/templates/claude/agents/writer.md +29 -0
- package/templates/claude/commands/git/changelog.md +41 -0
- package/templates/claude/commands/git/merge.md +37 -0
- package/templates/claude/commands/git/new-branch.md +34 -0
- package/templates/claude/commands/git/pr-review.md +64 -0
- package/templates/claude/commands/session/handover.md +49 -0
- package/templates/claude/commands/session/resume.md +43 -0
- package/templates/claude/commands/session/review.md +81 -0
- package/templates/claude/commands/task.md +52 -0
- package/templates/claude/commands/vault/adr.md +39 -0
- package/templates/claude/commands/vault/analyze.md +110 -0
- package/templates/claude/commands/vault/bug.md +31 -0
- package/templates/claude/commands/vault/debt.md +28 -0
- package/templates/claude/commands/vault/deps.md +36 -0
- package/templates/claude/commands/vault/from-spec.md +306 -0
- package/templates/claude/commands/vault/search.md +31 -0
- package/templates/claude/commands/vault/security-scan.md +50 -0
- package/templates/claude/commands/vault/test-gaps.md +38 -0
- package/templates/claude/commands/workflow/dev.md +913 -0
- package/templates/claude/commands/workflow.md +47 -0
- package/templates/claude/settings.json +52 -0
- package/templates/claude/skills/obsidian-markdown/SKILL.md +196 -0
- package/templates/claude/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
- package/templates/claude/skills/obsidian-markdown/references/EMBEDS.md +63 -0
- package/templates/claude/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
- package/templates/workflows/deploy.yaml +21 -0
- package/templates/workflows/release.yaml +26 -0
- 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 @@
|
|
|
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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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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"}
|