vemora 0.1.0-alpha.15
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/README.md +851 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +682 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/ask.d.ts +14 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +137 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/audit.d.ts +17 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +398 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/brief.d.ts +16 -0
- package/dist/commands/brief.d.ts.map +1 -0
- package/dist/commands/brief.js +84 -0
- package/dist/commands/brief.js.map +1 -0
- package/dist/commands/chat.d.ts +7 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +155 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/context.d.ts +63 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +794 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/dead-code.d.ts +15 -0
- package/dist/commands/dead-code.d.ts.map +1 -0
- package/dist/commands/dead-code.js +206 -0
- package/dist/commands/dead-code.js.map +1 -0
- package/dist/commands/deps.d.ts +20 -0
- package/dist/commands/deps.d.ts.map +1 -0
- package/dist/commands/deps.js +138 -0
- package/dist/commands/deps.js.map +1 -0
- package/dist/commands/focus.d.ts +8 -0
- package/dist/commands/focus.d.ts.map +1 -0
- package/dist/commands/focus.js +310 -0
- package/dist/commands/focus.js.map +1 -0
- package/dist/commands/index.d.ts +10 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +366 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init-agent.d.ts +23 -0
- package/dist/commands/init-agent.d.ts.map +1 -0
- package/dist/commands/init-agent.js +384 -0
- package/dist/commands/init-agent.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +122 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/knowledge.d.ts +14 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +115 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/plan.d.ts +24 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +867 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/query.d.ts +39 -0
- package/dist/commands/query.d.ts.map +1 -0
- package/dist/commands/query.js +392 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/remember.d.ts +11 -0
- package/dist/commands/remember.d.ts.map +1 -0
- package/dist/commands/remember.js +267 -0
- package/dist/commands/remember.js.map +1 -0
- package/dist/commands/report.d.ts +10 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +243 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +127 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/summarize.d.ts +14 -0
- package/dist/commands/summarize.d.ts.map +1 -0
- package/dist/commands/summarize.js +170 -0
- package/dist/commands/summarize.js.map +1 -0
- package/dist/commands/triage.d.ts +33 -0
- package/dist/commands/triage.d.ts.map +1 -0
- package/dist/commands/triage.js +419 -0
- package/dist/commands/triage.js.map +1 -0
- package/dist/commands/usages.d.ts +14 -0
- package/dist/commands/usages.d.ts.map +1 -0
- package/dist/commands/usages.js +236 -0
- package/dist/commands/usages.js.map +1 -0
- package/dist/core/config.d.ts +35 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +159 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/types.d.ts +287 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +4 -0
- package/dist/core/types.js.map +1 -0
- package/dist/embeddings/factory.d.ts +9 -0
- package/dist/embeddings/factory.d.ts.map +1 -0
- package/dist/embeddings/factory.js +26 -0
- package/dist/embeddings/factory.js.map +1 -0
- package/dist/embeddings/noop.d.ts +17 -0
- package/dist/embeddings/noop.d.ts.map +1 -0
- package/dist/embeddings/noop.js +22 -0
- package/dist/embeddings/noop.js.map +1 -0
- package/dist/embeddings/ollama.d.ts +11 -0
- package/dist/embeddings/ollama.d.ts.map +1 -0
- package/dist/embeddings/ollama.js +49 -0
- package/dist/embeddings/ollama.js.map +1 -0
- package/dist/embeddings/openai.d.ts +10 -0
- package/dist/embeddings/openai.d.ts.map +1 -0
- package/dist/embeddings/openai.js +67 -0
- package/dist/embeddings/openai.js.map +1 -0
- package/dist/embeddings/provider.d.ts +19 -0
- package/dist/embeddings/provider.d.ts.map +1 -0
- package/dist/embeddings/provider.js +3 -0
- package/dist/embeddings/provider.js.map +1 -0
- package/dist/indexer/callgraph.d.ts +16 -0
- package/dist/indexer/callgraph.d.ts.map +1 -0
- package/dist/indexer/callgraph.js +154 -0
- package/dist/indexer/callgraph.js.map +1 -0
- package/dist/indexer/chunkBySlidingWindow.d.ts +6 -0
- package/dist/indexer/chunkBySlidingWindow.d.ts.map +1 -0
- package/dist/indexer/chunkBySlidingWindow.js +30 -0
- package/dist/indexer/chunkBySlidingWindow.js.map +1 -0
- package/dist/indexer/chunkBySymbols.d.ts +7 -0
- package/dist/indexer/chunkBySymbols.d.ts.map +1 -0
- package/dist/indexer/chunkBySymbols.js +57 -0
- package/dist/indexer/chunkBySymbols.js.map +1 -0
- package/dist/indexer/chunker.d.ts +15 -0
- package/dist/indexer/chunker.d.ts.map +1 -0
- package/dist/indexer/chunker.js +26 -0
- package/dist/indexer/chunker.js.map +1 -0
- package/dist/indexer/classHeader.d.ts +7 -0
- package/dist/indexer/classHeader.d.ts.map +1 -0
- package/dist/indexer/classHeader.js +37 -0
- package/dist/indexer/classHeader.js.map +1 -0
- package/dist/indexer/deps.d.ts +66 -0
- package/dist/indexer/deps.d.ts.map +1 -0
- package/dist/indexer/deps.js +412 -0
- package/dist/indexer/deps.js.map +1 -0
- package/dist/indexer/hasher.d.ts +17 -0
- package/dist/indexer/hasher.d.ts.map +1 -0
- package/dist/indexer/hasher.js +38 -0
- package/dist/indexer/hasher.js.map +1 -0
- package/dist/indexer/parser.d.ts +18 -0
- package/dist/indexer/parser.d.ts.map +1 -0
- package/dist/indexer/parser.js +355 -0
- package/dist/indexer/parser.js.map +1 -0
- package/dist/indexer/scanner.d.ts +18 -0
- package/dist/indexer/scanner.d.ts.map +1 -0
- package/dist/indexer/scanner.js +37 -0
- package/dist/indexer/scanner.js.map +1 -0
- package/dist/indexer/strategy.d.ts +11 -0
- package/dist/indexer/strategy.d.ts.map +1 -0
- package/dist/indexer/strategy.js +15 -0
- package/dist/indexer/strategy.js.map +1 -0
- package/dist/indexer/tests.d.ts +15 -0
- package/dist/indexer/tests.d.ts.map +1 -0
- package/dist/indexer/tests.js +68 -0
- package/dist/indexer/tests.js.map +1 -0
- package/dist/indexer/todos.d.ts +9 -0
- package/dist/indexer/todos.d.ts.map +1 -0
- package/dist/indexer/todos.js +29 -0
- package/dist/indexer/todos.js.map +1 -0
- package/dist/llm/anthropic.d.ts +8 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +76 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/claude-code.d.ts +37 -0
- package/dist/llm/claude-code.d.ts.map +1 -0
- package/dist/llm/claude-code.js +97 -0
- package/dist/llm/claude-code.js.map +1 -0
- package/dist/llm/factory.d.ts +7 -0
- package/dist/llm/factory.d.ts.map +1 -0
- package/dist/llm/factory.js +47 -0
- package/dist/llm/factory.js.map +1 -0
- package/dist/llm/ollama.d.ts +8 -0
- package/dist/llm/ollama.d.ts.map +1 -0
- package/dist/llm/ollama.js +83 -0
- package/dist/llm/ollama.js.map +1 -0
- package/dist/llm/openai.d.ts +8 -0
- package/dist/llm/openai.d.ts.map +1 -0
- package/dist/llm/openai.js +68 -0
- package/dist/llm/openai.js.map +1 -0
- package/dist/llm/provider.d.ts +35 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +3 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/search/bm25.d.ts +3 -0
- package/dist/search/bm25.d.ts.map +1 -0
- package/dist/search/bm25.js +104 -0
- package/dist/search/bm25.js.map +1 -0
- package/dist/search/formatter.d.ts +43 -0
- package/dist/search/formatter.d.ts.map +1 -0
- package/dist/search/formatter.js +208 -0
- package/dist/search/formatter.js.map +1 -0
- package/dist/search/hybrid.d.ts +10 -0
- package/dist/search/hybrid.d.ts.map +1 -0
- package/dist/search/hybrid.js +53 -0
- package/dist/search/hybrid.js.map +1 -0
- package/dist/search/merge.d.ts +33 -0
- package/dist/search/merge.d.ts.map +1 -0
- package/dist/search/merge.js +158 -0
- package/dist/search/merge.js.map +1 -0
- package/dist/search/mmr.d.ts +23 -0
- package/dist/search/mmr.d.ts.map +1 -0
- package/dist/search/mmr.js +95 -0
- package/dist/search/mmr.js.map +1 -0
- package/dist/search/rerank.d.ts +12 -0
- package/dist/search/rerank.d.ts.map +1 -0
- package/dist/search/rerank.js +113 -0
- package/dist/search/rerank.js.map +1 -0
- package/dist/search/signature.d.ts +42 -0
- package/dist/search/signature.d.ts.map +1 -0
- package/dist/search/signature.js +112 -0
- package/dist/search/signature.js.map +1 -0
- package/dist/search/vector.d.ts +41 -0
- package/dist/search/vector.d.ts.map +1 -0
- package/dist/search/vector.js +185 -0
- package/dist/search/vector.js.map +1 -0
- package/dist/storage/cache.d.ts +30 -0
- package/dist/storage/cache.d.ts.map +1 -0
- package/dist/storage/cache.js +160 -0
- package/dist/storage/cache.js.map +1 -0
- package/dist/storage/knowledge.d.ts +23 -0
- package/dist/storage/knowledge.d.ts.map +1 -0
- package/dist/storage/knowledge.js +81 -0
- package/dist/storage/knowledge.js.map +1 -0
- package/dist/storage/planSession.d.ts +39 -0
- package/dist/storage/planSession.d.ts.map +1 -0
- package/dist/storage/planSession.js +78 -0
- package/dist/storage/planSession.js.map +1 -0
- package/dist/storage/repository.d.ts +27 -0
- package/dist/storage/repository.d.ts.map +1 -0
- package/dist/storage/repository.js +95 -0
- package/dist/storage/repository.js.map +1 -0
- package/dist/storage/session.d.ts +38 -0
- package/dist/storage/session.d.ts.map +1 -0
- package/dist/storage/session.js +100 -0
- package/dist/storage/session.js.map +1 -0
- package/dist/storage/summaries.d.ts +19 -0
- package/dist/storage/summaries.d.ts.map +1 -0
- package/dist/storage/summaries.js +66 -0
- package/dist/storage/summaries.js.map +1 -0
- package/dist/storage/usage.d.ts +39 -0
- package/dist/storage/usage.d.ts.map +1 -0
- package/dist/storage/usage.js +55 -0
- package/dist/storage/usage.js.map +1 -0
- package/dist/utils/git.d.ts +20 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +49 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/tokenizer.d.ts +32 -0
- package/dist/utils/tokenizer.d.ts.map +1 -0
- package/dist/utils/tokenizer.js +66 -0
- package/dist/utils/tokenizer.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_INSTRUCTIONS = exports.MARKER_END = exports.MARKER_START = void 0;
|
|
7
|
+
exports.runInitAgent = runInitAgent;
|
|
8
|
+
exports.buildGeneratedBlock = buildGeneratedBlock;
|
|
9
|
+
exports.detectNpmScripts = detectNpmScripts;
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const config_1 = require("../core/config");
|
|
14
|
+
const deps_1 = require("../indexer/deps");
|
|
15
|
+
const repository_1 = require("../storage/repository");
|
|
16
|
+
const summaries_1 = require("../storage/summaries");
|
|
17
|
+
// ─── Markers ──────────────────────────────────────────────────────────────────
|
|
18
|
+
exports.MARKER_START = "<!-- vemora:generated:start -->";
|
|
19
|
+
exports.MARKER_END = "<!-- vemora:generated:end -->";
|
|
20
|
+
// ─── Default instructions ─────────────────────────────────────────────────────
|
|
21
|
+
exports.DEFAULT_INSTRUCTIONS = `## Working with this codebase
|
|
22
|
+
|
|
23
|
+
- **Before reading any file**, check the Key Exports table to locate the symbol.
|
|
24
|
+
- **Before querying**, try \`vemora query\` first — open a file only if context is insufficient.
|
|
25
|
+
- **Before deep-diving a file or symbol**, use \`vemora focus\` — aggregates impl, deps, callers, tests, and knowledge in one call.
|
|
26
|
+
- **Before modifying a file**, check blast radius: \`vemora deps <file> --root . --reverse-depth 2\`.
|
|
27
|
+
- **Before renaming a symbol**, check callers: \`vemora usages <SymbolName> --root .\` (add \`--callers-only\` for methods).
|
|
28
|
+
- **After changes**, run the build/test command before declaring done.
|
|
29
|
+
- **Scope discipline**: only change what was asked. No refactoring, comments, or improvements beyond the request.
|
|
30
|
+
- **Save non-obvious findings** with \`vemora remember\` — decisions, gotchas, patterns. Skip what's obvious from reading the code.
|
|
31
|
+
|
|
32
|
+
## Session setup
|
|
33
|
+
|
|
34
|
+
\`\`\`bash
|
|
35
|
+
vemora brief --root . # start of session: project overview + critical knowledge
|
|
36
|
+
vemora index --root . --watch # background terminal: live re-index on file save
|
|
37
|
+
vemora index --root . --no-embed # or: re-index manually after significant changes
|
|
38
|
+
\`\`\`
|
|
39
|
+
|
|
40
|
+
## Quick reference
|
|
41
|
+
|
|
42
|
+
| Need | Command |
|
|
43
|
+
|---|---|
|
|
44
|
+
| Session start | \`brief --root .\` |
|
|
45
|
+
| File or symbol deep-dive | \`focus <target> --root .\` |
|
|
46
|
+
| Concept / how-does-X question | \`context --root . --query "<question>"\` |
|
|
47
|
+
| Fix / refactor / add code | \`context --root . --query "<task>" --keyword\` |
|
|
48
|
+
| Scope to recent changes | \`context --root . --query "..." --since HEAD~5\` |
|
|
49
|
+
| Complex multi-step task | \`plan "<task>" --root . --confirm --synthesize\` |
|
|
50
|
+
| LLM audit (security/bugs/perf) | \`audit --root . --type security,bugs\` |
|
|
51
|
+
| Zero-LLM static scan | \`triage --root . --type bugs,security\` |
|
|
52
|
+
| Find unused code | \`dead-code --root .\` |
|
|
53
|
+
| Output too long | add \`--budget 2000\` to any command |
|
|
54
|
+
| No embeddings / fast search | add \`--keyword\` to \`query\` or \`context\` |
|
|
55
|
+
| Who imports a file | \`deps <file> --root .\` |
|
|
56
|
+
| Blast radius of a change | \`deps <file> --root . --reverse-depth 3\` |
|
|
57
|
+
| Who uses a symbol | \`usages <SymbolName> --root .\` |
|
|
58
|
+
| Who calls a method | \`usages <Method> --root . --callers-only\` |
|
|
59
|
+
| Save a finding | \`remember "text" --root .\` |
|
|
60
|
+
`;
|
|
61
|
+
// ─── Main command ─────────────────────────────────────────────────────────────
|
|
62
|
+
async function runInitAgent(rootDir, options = {}) {
|
|
63
|
+
const ALL_AGENTS = ["claude", "copilot", "cursor", "windsurf", "gemini"];
|
|
64
|
+
const targets = options.agents ?? ALL_AGENTS;
|
|
65
|
+
const force = options.force ?? false;
|
|
66
|
+
const config = (0, config_1.loadConfig)(rootDir);
|
|
67
|
+
const repo = new repository_1.RepositoryStorage(rootDir);
|
|
68
|
+
const summaryStorage = new summaries_1.SummaryStorage(rootDir);
|
|
69
|
+
// ── Load index data ──────────────────────────────────────────────────────────
|
|
70
|
+
const symbols = repo.loadSymbols();
|
|
71
|
+
const depGraph = repo.loadDeps();
|
|
72
|
+
const fileSummaries = summaryStorage.hasFileSummaries()
|
|
73
|
+
? summaryStorage.loadFileSummaries()
|
|
74
|
+
: {};
|
|
75
|
+
const projectSummary = summaryStorage.loadProjectSummary();
|
|
76
|
+
// ── Derived data ─────────────────────────────────────────────────────────────
|
|
77
|
+
// Entry points: files that import others but are not imported by anyone.
|
|
78
|
+
const importedByMap = (0, deps_1.computeImportedBy)(depGraph);
|
|
79
|
+
const entryPoints = Object.keys(depGraph)
|
|
80
|
+
.filter((f) => !importedByMap.has(f) && depGraph[f].imports.length > 0)
|
|
81
|
+
.slice(0, 10);
|
|
82
|
+
// Key exports: exported symbols from source files only (exclude docs/, tests/).
|
|
83
|
+
// Sort order: classes and functions first (most useful for lookup), constants last.
|
|
84
|
+
const TYPE_PRIORITY = { class: 0, function: 1, interface: 2, type: 3 };
|
|
85
|
+
const exportedSymbols = Object.entries(symbols)
|
|
86
|
+
.filter(([, s]) => s.exported && s.file.startsWith("src/"))
|
|
87
|
+
.sort((a, b) => {
|
|
88
|
+
const pa = TYPE_PRIORITY[a[1].type] ?? 4;
|
|
89
|
+
const pb = TYPE_PRIORITY[b[1].type] ?? 4;
|
|
90
|
+
return pa !== pb ? pa - pb : a[0].localeCompare(b[0]);
|
|
91
|
+
})
|
|
92
|
+
.slice(0, 40);
|
|
93
|
+
// npm scripts from package.json (build, test, dev commands).
|
|
94
|
+
const npmScripts = detectNpmScripts(rootDir);
|
|
95
|
+
// ── Build generated block ────────────────────────────────────────────────────
|
|
96
|
+
const block = buildGeneratedBlock(config.projectName, projectSummary?.overview ?? null, npmScripts, entryPoints, fileSummaries, exportedSymbols);
|
|
97
|
+
// ── Process each target ──────────────────────────────────────────────────────
|
|
98
|
+
for (const agent of targets) {
|
|
99
|
+
writeAgentFile(agent, rootDir, config.projectName, block, force);
|
|
100
|
+
}
|
|
101
|
+
// ── Claude Code hooks ────────────────────────────────────────────────────────
|
|
102
|
+
if (options.hooks && targets.includes("claude")) {
|
|
103
|
+
writeClaudeHooks(rootDir, force);
|
|
104
|
+
}
|
|
105
|
+
if (!projectSummary) {
|
|
106
|
+
console.log(chalk_1.default.gray(" Tip: run `vemora summarize` to add a project overview."));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// ─── Per-agent file writers ───────────────────────────────────────────────────
|
|
110
|
+
function writeAgentFile(agent, rootDir, projectName, block, force) {
|
|
111
|
+
switch (agent) {
|
|
112
|
+
case "claude":
|
|
113
|
+
writeClaudeFile(rootDir, projectName, block, force);
|
|
114
|
+
break;
|
|
115
|
+
case "copilot":
|
|
116
|
+
writeCopilotFile(rootDir, block, force);
|
|
117
|
+
break;
|
|
118
|
+
case "cursor":
|
|
119
|
+
writeCursorFile(rootDir, block, force);
|
|
120
|
+
break;
|
|
121
|
+
case "windsurf":
|
|
122
|
+
writeWindsurfFile(rootDir, block, force);
|
|
123
|
+
break;
|
|
124
|
+
case "gemini":
|
|
125
|
+
writeGeminiFile(rootDir, projectName, block, force);
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const CLAUDE_EXTRA_INSTRUCTIONS = `
|
|
130
|
+
## Claude Code memory
|
|
131
|
+
|
|
132
|
+
Use Claude Code's persistent memory alongside \`vemora remember\`:
|
|
133
|
+
- Save user preferences, working style, and feedback that go beyond the codebase.
|
|
134
|
+
- At session end, persist non-obvious discoveries not already captured by \`vemora remember\`.
|
|
135
|
+
`;
|
|
136
|
+
function writeClaudeFile(rootDir, projectName, block, force) {
|
|
137
|
+
const outputPath = path_1.default.join(rootDir, "CLAUDE.md");
|
|
138
|
+
const label = "Claude Code: CLAUDE.md";
|
|
139
|
+
const fullInstructions = exports.DEFAULT_INSTRUCTIONS + CLAUDE_EXTRA_INSTRUCTIONS;
|
|
140
|
+
if (!fs_1.default.existsSync(outputPath)) {
|
|
141
|
+
const content = `# ${projectName}\n\n${fullInstructions}\n\n${block}\n`;
|
|
142
|
+
fs_1.default.writeFileSync(outputPath, content, "utf-8");
|
|
143
|
+
console.log(chalk_1.default.green(`✓ ${label} created`));
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
const result = mergeOrOverwrite(outputPath, `# ${projectName}\n\n${fullInstructions}\n\n${block}\n`, block, force, label);
|
|
147
|
+
if (!result)
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function writeCopilotFile(rootDir, block, force) {
|
|
152
|
+
const outputPath = path_1.default.join(rootDir, ".github", "copilot-instructions.md");
|
|
153
|
+
const label = "Copilot: .github/copilot-instructions.md";
|
|
154
|
+
if (!fs_1.default.existsSync(outputPath)) {
|
|
155
|
+
fs_1.default.mkdirSync(path_1.default.dirname(outputPath), { recursive: true });
|
|
156
|
+
const content = `${exports.DEFAULT_INSTRUCTIONS}\n\n${block}\n`;
|
|
157
|
+
fs_1.default.writeFileSync(outputPath, content, "utf-8");
|
|
158
|
+
console.log(chalk_1.default.green(`✓ ${label} created`));
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
mergeOrOverwrite(outputPath, `${exports.DEFAULT_INSTRUCTIONS}\n\n${block}\n`, block, force, label);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function writeCursorFile(rootDir, block, force) {
|
|
165
|
+
const outputPath = path_1.default.join(rootDir, ".cursor", "rules", "vemora.mdc");
|
|
166
|
+
const label = "Cursor: .cursor/rules/vemora.mdc";
|
|
167
|
+
const frontmatter = "---\ndescription: vemora codebase context\nalwaysApply: true\n---";
|
|
168
|
+
if (!fs_1.default.existsSync(outputPath)) {
|
|
169
|
+
fs_1.default.mkdirSync(path_1.default.dirname(outputPath), { recursive: true });
|
|
170
|
+
const content = `${frontmatter}\n\n${exports.DEFAULT_INSTRUCTIONS}\n\n${block}\n`;
|
|
171
|
+
fs_1.default.writeFileSync(outputPath, content, "utf-8");
|
|
172
|
+
console.log(chalk_1.default.green(`✓ ${label} created`));
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
const existing = fs_1.default.readFileSync(outputPath, "utf-8");
|
|
176
|
+
const startIdx = existing.indexOf(exports.MARKER_START);
|
|
177
|
+
const endIdx = existing.indexOf(exports.MARKER_END);
|
|
178
|
+
if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {
|
|
179
|
+
// Preserve everything before markers (includes frontmatter)
|
|
180
|
+
const before = existing.slice(0, startIdx);
|
|
181
|
+
const after = existing.slice(endIdx + exports.MARKER_END.length);
|
|
182
|
+
fs_1.default.writeFileSync(outputPath, before + block + after, "utf-8");
|
|
183
|
+
console.log(chalk_1.default.green(`✓ ${label} updated (merged)`));
|
|
184
|
+
}
|
|
185
|
+
else if (force) {
|
|
186
|
+
const content = `${frontmatter}\n\n${exports.DEFAULT_INSTRUCTIONS}\n\n${block}\n`;
|
|
187
|
+
fs_1.default.writeFileSync(outputPath, content, "utf-8");
|
|
188
|
+
console.log(chalk_1.default.green(`✓ ${label} overwritten`));
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
printNoMarkersWarning(label);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function writeGeminiFile(rootDir, projectName, block, force) {
|
|
196
|
+
const outputPath = path_1.default.join(rootDir, "GEMINI.md");
|
|
197
|
+
const label = "Gemini: GEMINI.md";
|
|
198
|
+
if (!fs_1.default.existsSync(outputPath)) {
|
|
199
|
+
const content = `# ${projectName}\n\n${exports.DEFAULT_INSTRUCTIONS}\n\n${block}\n`;
|
|
200
|
+
fs_1.default.writeFileSync(outputPath, content, "utf-8");
|
|
201
|
+
console.log(chalk_1.default.green(`✓ ${label} created`));
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
mergeOrOverwrite(outputPath, `# ${projectName}\n\n${exports.DEFAULT_INSTRUCTIONS}\n\n${block}\n`, block, force, label);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function writeWindsurfFile(rootDir, block, force) {
|
|
208
|
+
const outputPath = path_1.default.join(rootDir, ".windsurfrules");
|
|
209
|
+
const label = "Windsurf: .windsurfrules";
|
|
210
|
+
if (!fs_1.default.existsSync(outputPath)) {
|
|
211
|
+
const content = `${exports.DEFAULT_INSTRUCTIONS}\n\n${block}\n`;
|
|
212
|
+
fs_1.default.writeFileSync(outputPath, content, "utf-8");
|
|
213
|
+
console.log(chalk_1.default.green(`✓ ${label} created`));
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
mergeOrOverwrite(outputPath, `${exports.DEFAULT_INSTRUCTIONS}\n\n${block}\n`, block, force, label);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// ─── Shared helpers ───────────────────────────────────────────────────────────
|
|
220
|
+
/**
|
|
221
|
+
* Merge block into existing file between markers, or overwrite/warn.
|
|
222
|
+
* Returns true if file was written, false if skipped.
|
|
223
|
+
*/
|
|
224
|
+
function mergeOrOverwrite(outputPath, newContent, block, force, label) {
|
|
225
|
+
const existing = fs_1.default.readFileSync(outputPath, "utf-8");
|
|
226
|
+
const startIdx = existing.indexOf(exports.MARKER_START);
|
|
227
|
+
const endIdx = existing.indexOf(exports.MARKER_END);
|
|
228
|
+
if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {
|
|
229
|
+
const before = existing.slice(0, startIdx);
|
|
230
|
+
const after = existing.slice(endIdx + exports.MARKER_END.length);
|
|
231
|
+
fs_1.default.writeFileSync(outputPath, before + block + after, "utf-8");
|
|
232
|
+
console.log(chalk_1.default.green(`✓ ${label} updated (merged)`));
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
if (force) {
|
|
236
|
+
fs_1.default.writeFileSync(outputPath, newContent, "utf-8");
|
|
237
|
+
console.log(chalk_1.default.green(`✓ ${label} overwritten`));
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
printNoMarkersWarning(label);
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
function printNoMarkersWarning(label) {
|
|
244
|
+
console.log(chalk_1.default.yellow(`${label} exists but has no vemora markers.\n` +
|
|
245
|
+
" • Run with --force to overwrite it entirely.\n" +
|
|
246
|
+
" • Or manually add the markers to enable future merges:\n" +
|
|
247
|
+
` ${exports.MARKER_START}\n` +
|
|
248
|
+
` ${exports.MARKER_END}`));
|
|
249
|
+
}
|
|
250
|
+
// ─── Claude Code hooks ────────────────────────────────────────────────────────
|
|
251
|
+
/**
|
|
252
|
+
* Writes (or merges) vemora hook entries into .claude/settings.json.
|
|
253
|
+
*
|
|
254
|
+
* Two hooks are registered:
|
|
255
|
+
* - PreCompact — emergency knowledge save before Claude compacts the context
|
|
256
|
+
* - Stop — brief reminder to run `vemora remember` after each session
|
|
257
|
+
*
|
|
258
|
+
* Existing hooks unrelated to vemora are preserved.
|
|
259
|
+
*/
|
|
260
|
+
function writeClaudeHooks(rootDir, force) {
|
|
261
|
+
const settingsPath = path_1.default.join(rootDir, ".claude", "settings.json");
|
|
262
|
+
const label = "Claude Code hooks: .claude/settings.json";
|
|
263
|
+
// The PreCompact hook pipes the most recent assistant message into
|
|
264
|
+
// `vemora remember` so that any decision mentioned just before compaction
|
|
265
|
+
// is persisted. We cap input to 1000 chars to stay within CLI limits.
|
|
266
|
+
const vemoraHooks = {
|
|
267
|
+
PreCompact: [
|
|
268
|
+
{
|
|
269
|
+
matcher: "",
|
|
270
|
+
hooks: [
|
|
271
|
+
{
|
|
272
|
+
type: "command",
|
|
273
|
+
command: "echo \"Pre-compact save: run 'vemora remember <decision> --root . --category decision' to preserve any key decision before context is compressed.\"",
|
|
274
|
+
},
|
|
275
|
+
],
|
|
276
|
+
},
|
|
277
|
+
],
|
|
278
|
+
};
|
|
279
|
+
let existing = {};
|
|
280
|
+
if (fs_1.default.existsSync(settingsPath)) {
|
|
281
|
+
if (!force) {
|
|
282
|
+
// Merge: add only the hooks that aren't already present
|
|
283
|
+
try {
|
|
284
|
+
existing = JSON.parse(fs_1.default.readFileSync(settingsPath, "utf-8"));
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
existing = {};
|
|
288
|
+
}
|
|
289
|
+
const existingHooks = (existing.hooks ?? {});
|
|
290
|
+
// Only add PreCompact if not already set
|
|
291
|
+
if (existingHooks.PreCompact) {
|
|
292
|
+
console.log(chalk_1.default.yellow(` ${label} — PreCompact hook already exists, skipping. Use --force to overwrite.`));
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
existing.hooks = { ...existingHooks, ...vemoraHooks };
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
try {
|
|
299
|
+
existing = JSON.parse(fs_1.default.readFileSync(settingsPath, "utf-8"));
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
existing = {};
|
|
303
|
+
}
|
|
304
|
+
existing.hooks = {
|
|
305
|
+
...(existing.hooks ?? {}),
|
|
306
|
+
...vemoraHooks,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
existing = { hooks: vemoraHooks };
|
|
312
|
+
}
|
|
313
|
+
fs_1.default.mkdirSync(path_1.default.dirname(settingsPath), { recursive: true });
|
|
314
|
+
const tmp = settingsPath + ".tmp";
|
|
315
|
+
fs_1.default.writeFileSync(tmp, JSON.stringify(existing, null, 2), "utf-8");
|
|
316
|
+
fs_1.default.renameSync(tmp, settingsPath);
|
|
317
|
+
console.log(chalk_1.default.green(`✓ ${label} updated`));
|
|
318
|
+
}
|
|
319
|
+
// ─── Block builder ────────────────────────────────────────────────────────────
|
|
320
|
+
function buildGeneratedBlock(_projectName, projectOverview, npmScripts, entryPoints, fileSummaries, exportedSymbols) {
|
|
321
|
+
const lines = [];
|
|
322
|
+
lines.push(exports.MARKER_START);
|
|
323
|
+
lines.push("");
|
|
324
|
+
// Project overview
|
|
325
|
+
lines.push("## Project Overview");
|
|
326
|
+
lines.push("");
|
|
327
|
+
lines.push(projectOverview ??
|
|
328
|
+
"_(Run `vemora summarize` to generate an AI-written project overview.)_");
|
|
329
|
+
lines.push("");
|
|
330
|
+
// Commands
|
|
331
|
+
if (Object.keys(npmScripts).length > 0) {
|
|
332
|
+
lines.push("## Commands");
|
|
333
|
+
lines.push("");
|
|
334
|
+
lines.push("```bash");
|
|
335
|
+
for (const [name, cmd] of Object.entries(npmScripts)) {
|
|
336
|
+
lines.push(`npm run ${name.padEnd(16)} # ${cmd}`);
|
|
337
|
+
}
|
|
338
|
+
lines.push("```");
|
|
339
|
+
lines.push("");
|
|
340
|
+
}
|
|
341
|
+
// Entry points
|
|
342
|
+
if (entryPoints.length > 0) {
|
|
343
|
+
lines.push("## Entry Points");
|
|
344
|
+
lines.push("");
|
|
345
|
+
for (const ep of entryPoints) {
|
|
346
|
+
const summary = fileSummaries[ep]?.summary;
|
|
347
|
+
lines.push(summary ? `- \`${ep}\` — ${summary}` : `- \`${ep}\``);
|
|
348
|
+
}
|
|
349
|
+
lines.push("");
|
|
350
|
+
}
|
|
351
|
+
// Key exports table
|
|
352
|
+
if (exportedSymbols.length > 0) {
|
|
353
|
+
lines.push("## Key Exports");
|
|
354
|
+
lines.push("");
|
|
355
|
+
lines.push("| Symbol | Type | File |");
|
|
356
|
+
lines.push("|---|---|---|");
|
|
357
|
+
for (const [name, sym] of exportedSymbols) {
|
|
358
|
+
lines.push(`| \`${name}\` | ${sym.type} | \`${sym.file}\` |`);
|
|
359
|
+
}
|
|
360
|
+
lines.push("");
|
|
361
|
+
}
|
|
362
|
+
lines.push(`_Generated by \`vemora init-agent\` — ${new Date().toISOString()}_`);
|
|
363
|
+
lines.push("");
|
|
364
|
+
lines.push(exports.MARKER_END);
|
|
365
|
+
return lines.join("\n");
|
|
366
|
+
}
|
|
367
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
368
|
+
/**
|
|
369
|
+
* Reads npm scripts from package.json in rootDir.
|
|
370
|
+
* Returns an empty object if no package.json or no scripts field.
|
|
371
|
+
*/
|
|
372
|
+
function detectNpmScripts(rootDir) {
|
|
373
|
+
try {
|
|
374
|
+
const pkgPath = path_1.default.join(rootDir, "package.json");
|
|
375
|
+
if (!fs_1.default.existsSync(pkgPath))
|
|
376
|
+
return {};
|
|
377
|
+
const pkg = JSON.parse(fs_1.default.readFileSync(pkgPath, "utf-8"));
|
|
378
|
+
return pkg.scripts ?? {};
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
return {};
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=init-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-agent.js","sourceRoot":"","sources":["../../src/commands/init-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAgBA,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6F5D"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.runInit = runInit;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const config_1 = require("../core/config");
|
|
11
|
+
async function runInit(rootDir) {
|
|
12
|
+
console.log(chalk_1.default.bold("Initializing vemora..."));
|
|
13
|
+
console.log(`Project root: ${chalk_1.default.cyan(rootDir)}`);
|
|
14
|
+
console.log();
|
|
15
|
+
const memoryDir = path_1.default.join(rootDir, config_1.AI_MEMORY_DIR);
|
|
16
|
+
const indexDir = path_1.default.join(memoryDir, config_1.INDEX_DIR);
|
|
17
|
+
const summariesDir = path_1.default.join(memoryDir, config_1.SUMMARIES_DIR);
|
|
18
|
+
// ── 1. Create directory structure ─────────────────────────────────────────
|
|
19
|
+
fs_1.default.mkdirSync(indexDir, { recursive: true });
|
|
20
|
+
fs_1.default.mkdirSync(summariesDir, { recursive: true });
|
|
21
|
+
console.log(chalk_1.default.green("✓") +
|
|
22
|
+
` Created ${chalk_1.default.gray(config_1.AI_MEMORY_DIR + "/index/")} and ${chalk_1.default.gray(config_1.AI_MEMORY_DIR + "/summaries/")}`);
|
|
23
|
+
// ── 2. config.json ────────────────────────────────────────────────────────
|
|
24
|
+
const configPath = path_1.default.join(memoryDir, config_1.CONFIG_FILE);
|
|
25
|
+
if (!fs_1.default.existsSync(configPath)) {
|
|
26
|
+
const projectName = detectProjectName(rootDir);
|
|
27
|
+
const config = (0, config_1.getDefaultConfig)(rootDir, projectName);
|
|
28
|
+
(0, config_1.saveConfig)(config);
|
|
29
|
+
console.log(chalk_1.default.green("✓") + ` Created ${chalk_1.default.gray(".vemora/config.json")}`);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.log(chalk_1.default.yellow("~") +
|
|
33
|
+
` ${chalk_1.default.gray(".vemora/config.json")} already exists, skipping`);
|
|
34
|
+
}
|
|
35
|
+
// ── 3. metadata.json ──────────────────────────────────────────────────────
|
|
36
|
+
const metaPath = path_1.default.join(memoryDir, config_1.METADATA_FILE);
|
|
37
|
+
if (!fs_1.default.existsSync(metaPath)) {
|
|
38
|
+
const config = (0, config_1.loadConfig)(rootDir);
|
|
39
|
+
const meta = {
|
|
40
|
+
projectId: config.projectId,
|
|
41
|
+
projectName: config.projectName,
|
|
42
|
+
lastIndexed: null,
|
|
43
|
+
indexedFiles: 0,
|
|
44
|
+
totalChunks: 0,
|
|
45
|
+
totalSymbols: 0,
|
|
46
|
+
totalDepEdges: 0,
|
|
47
|
+
embeddingProvider: config.embedding.provider,
|
|
48
|
+
embeddingModel: config.embedding.model,
|
|
49
|
+
};
|
|
50
|
+
fs_1.default.writeFileSync(metaPath, JSON.stringify(meta, null, 2));
|
|
51
|
+
console.log(chalk_1.default.green("✓") + ` Created ${chalk_1.default.gray(".vemora/metadata.json")}`);
|
|
52
|
+
}
|
|
53
|
+
// ── 4. Empty index files ──────────────────────────────────────────────────
|
|
54
|
+
const indexFiles = [
|
|
55
|
+
[path_1.default.join(indexDir, "files.json"), "{}"],
|
|
56
|
+
[path_1.default.join(indexDir, "chunks.json"), "[]"],
|
|
57
|
+
[path_1.default.join(indexDir, "symbols.json"), "{}"],
|
|
58
|
+
[path_1.default.join(indexDir, "callgraph.json"), "{}"],
|
|
59
|
+
];
|
|
60
|
+
for (const [filePath, emptyVal] of indexFiles) {
|
|
61
|
+
if (!fs_1.default.existsSync(filePath)) {
|
|
62
|
+
fs_1.default.writeFileSync(filePath, emptyVal, "utf-8");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
console.log(chalk_1.default.green("✓") +
|
|
66
|
+
` Created ${chalk_1.default.gray(".vemora/index/{files,chunks,symbols,callgraph}.json")}`);
|
|
67
|
+
// ── 5. .gitignore ─────────────────────────────────────────────────────────
|
|
68
|
+
await ensureGitignore(rootDir);
|
|
69
|
+
// ── Summary ───────────────────────────────────────────────────────────────
|
|
70
|
+
console.log();
|
|
71
|
+
console.log(chalk_1.default.bold.green("Done!"));
|
|
72
|
+
console.log();
|
|
73
|
+
console.log("Next steps:");
|
|
74
|
+
console.log(` 1. Review ${chalk_1.default.cyan(".vemora/config.json")} — adjust include/exclude patterns`);
|
|
75
|
+
console.log(` 2. Review embedding and LLM provider in ${chalk_1.default.cyan(".vemora/config.json")} (default: Ollama)`);
|
|
76
|
+
console.log(` 3. Run ${chalk_1.default.cyan("vemora index")} to build the index`);
|
|
77
|
+
console.log(` 4. Run ${chalk_1.default.cyan('vemora query "your question"')} to search`);
|
|
78
|
+
console.log();
|
|
79
|
+
console.log(chalk_1.default.gray(`Note: .vemora-cache/ is local-only and excluded from git.`));
|
|
80
|
+
}
|
|
81
|
+
function detectProjectName(rootDir) {
|
|
82
|
+
try {
|
|
83
|
+
const pkgPath = path_1.default.join(rootDir, "package.json");
|
|
84
|
+
if (fs_1.default.existsSync(pkgPath)) {
|
|
85
|
+
const pkg = JSON.parse(fs_1.default.readFileSync(pkgPath, "utf-8"));
|
|
86
|
+
if (pkg.name)
|
|
87
|
+
return pkg.name;
|
|
88
|
+
}
|
|
89
|
+
// Try pyproject.toml or Cargo.toml for non-JS projects
|
|
90
|
+
const pyproject = path_1.default.join(rootDir, "pyproject.toml");
|
|
91
|
+
if (fs_1.default.existsSync(pyproject)) {
|
|
92
|
+
const content = fs_1.default.readFileSync(pyproject, "utf-8");
|
|
93
|
+
const m = content.match(/^name\s*=\s*"([^"]+)"/m);
|
|
94
|
+
if (m)
|
|
95
|
+
return m[1];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// ignore
|
|
100
|
+
}
|
|
101
|
+
return path_1.default.basename(rootDir);
|
|
102
|
+
}
|
|
103
|
+
async function ensureGitignore(rootDir) {
|
|
104
|
+
const gitignorePath = path_1.default.join(rootDir, ".gitignore");
|
|
105
|
+
const entry = config_1.AI_MEMORY_CACHE_DIR + "/";
|
|
106
|
+
if (!fs_1.default.existsSync(gitignorePath)) {
|
|
107
|
+
fs_1.default.writeFileSync(gitignorePath, `# vemora local embedding cache\n${entry}\n`, "utf-8");
|
|
108
|
+
console.log(chalk_1.default.green("✓") +
|
|
109
|
+
` Created ${chalk_1.default.gray(".gitignore")} with ${chalk_1.default.gray(entry)}`);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const existing = fs_1.default.readFileSync(gitignorePath, "utf-8");
|
|
113
|
+
if (existing.includes(config_1.AI_MEMORY_CACHE_DIR)) {
|
|
114
|
+
console.log(chalk_1.default.yellow("~") +
|
|
115
|
+
` ${chalk_1.default.gray(".gitignore")} already excludes ${chalk_1.default.gray(entry)}`);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
fs_1.default.appendFileSync(gitignorePath, `\n# vemora local embedding cache\n${entry}\n`, "utf-8");
|
|
119
|
+
console.log(chalk_1.default.green("✓") +
|
|
120
|
+
` Added ${chalk_1.default.gray(entry)} to ${chalk_1.default.gray(".gitignore")}`);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface KnowledgeListOptions {
|
|
2
|
+
category?: string;
|
|
3
|
+
file?: string;
|
|
4
|
+
symbol?: string;
|
|
5
|
+
/** Show only entries valid at this ISO date (default: now) */
|
|
6
|
+
asOf?: string;
|
|
7
|
+
/** Show only entries with a validUntil in the past */
|
|
8
|
+
expired?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function runKnowledgeList(rootDir: string, options?: KnowledgeListOptions): Promise<void>;
|
|
11
|
+
export declare function runKnowledgeForget(rootDir: string, id: string, options?: {
|
|
12
|
+
invalidate?: boolean;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=knowledge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/commands/knowledge.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CA0Gf;AAID,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|