grounder 0.4.0 → 0.6.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/README.md +150 -271
- package/dist/agents/claude.d.ts +4 -4
- package/dist/agents/claude.d.ts.map +1 -1
- package/dist/agents/claude.js +158 -178
- package/dist/agents/claude.js.map +1 -1
- package/dist/agents/cursor.d.ts +3 -3
- package/dist/agents/cursor.d.ts.map +1 -1
- package/dist/agents/cursor.js +97 -143
- package/dist/agents/cursor.js.map +1 -1
- package/dist/agents/home-skills.d.ts +46 -0
- package/dist/agents/home-skills.d.ts.map +1 -0
- package/dist/agents/home-skills.js +83 -0
- package/dist/agents/home-skills.js.map +1 -0
- package/dist/agents/hook-fragment.d.ts +52 -0
- package/dist/agents/hook-fragment.d.ts.map +1 -0
- package/dist/agents/hook-fragment.js +76 -0
- package/dist/agents/hook-fragment.js.map +1 -0
- package/dist/agents/hook-install.d.ts +62 -0
- package/dist/agents/hook-install.d.ts.map +1 -0
- package/dist/agents/hook-install.js +74 -0
- package/dist/agents/hook-install.js.map +1 -0
- package/dist/agents/hook-runtime.d.ts +80 -13
- package/dist/agents/hook-runtime.d.ts.map +1 -1
- package/dist/agents/hook-runtime.js +278 -74
- package/dist/agents/hook-runtime.js.map +1 -1
- package/dist/agents/index.d.ts +8 -14
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +13 -19
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/types.d.ts +56 -16
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/cli.js +15 -10
- package/dist/cli.js.map +1 -1
- package/dist/commands/apply.d.ts +69 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +238 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +197 -101
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/handoff/list.d.ts +23 -13
- package/dist/commands/handoff/list.d.ts.map +1 -1
- package/dist/commands/handoff/list.js +28 -16
- package/dist/commands/handoff/list.js.map +1 -1
- package/dist/commands/handoff/peek.d.ts +1 -1
- package/dist/commands/handoff/peek.d.ts.map +1 -1
- package/dist/commands/handoff/peek.js +28 -12
- package/dist/commands/handoff/peek.js.map +1 -1
- package/dist/commands/handoff.d.ts +2 -0
- package/dist/commands/handoff.d.ts.map +1 -1
- package/dist/commands/handoff.js +10 -1
- package/dist/commands/handoff.js.map +1 -1
- package/dist/commands/install-drift.d.ts +34 -0
- package/dist/commands/install-drift.d.ts.map +1 -0
- package/dist/commands/install-drift.js +72 -0
- package/dist/commands/install-drift.js.map +1 -0
- package/dist/commands/link.d.ts +12 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/{repo/init.js → link.js} +35 -27
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/migrate.d.ts +11 -3
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +66 -34
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/note/list.d.ts +17 -9
- package/dist/commands/note/list.d.ts.map +1 -1
- package/dist/commands/note/list.js +19 -14
- package/dist/commands/note/list.js.map +1 -1
- package/dist/commands/note.d.ts +2 -0
- package/dist/commands/note.d.ts.map +1 -1
- package/dist/commands/note.js +10 -1
- package/dist/commands/note.js.map +1 -1
- package/dist/commands/output.d.ts +22 -2
- package/dist/commands/output.d.ts.map +1 -1
- package/dist/commands/output.js +18 -6
- package/dist/commands/output.js.map +1 -1
- package/dist/commands/overview.d.ts +33 -0
- package/dist/commands/overview.d.ts.map +1 -0
- package/dist/commands/overview.js +150 -0
- package/dist/commands/overview.js.map +1 -0
- package/dist/commands/plan/list.d.ts +20 -12
- package/dist/commands/plan/list.d.ts.map +1 -1
- package/dist/commands/plan/list.js +22 -17
- package/dist/commands/plan/list.js.map +1 -1
- package/dist/commands/plan.d.ts +2 -0
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +12 -2
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/render-artifact-table.d.ts +85 -0
- package/dist/commands/render-artifact-table.d.ts.map +1 -0
- package/dist/commands/render-artifact-table.js +232 -0
- package/dist/commands/render-artifact-table.js.map +1 -0
- package/dist/commands/require-linked.js +2 -2
- package/dist/commands/require-linked.js.map +1 -1
- package/dist/commands/search.d.ts +23 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +288 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/{vault/init.d.ts → setup.d.ts} +5 -4
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +210 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +273 -83
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/upgrade-banner.d.ts +2 -2
- package/dist/commands/upgrade-banner.js +2 -2
- package/dist/connector/home.d.ts +12 -0
- package/dist/connector/home.d.ts.map +1 -1
- package/dist/connector/home.js +26 -2
- package/dist/connector/home.js.map +1 -1
- package/dist/connector/ledger-migrations.d.ts +55 -0
- package/dist/connector/ledger-migrations.d.ts.map +1 -0
- package/dist/connector/ledger-migrations.js +94 -0
- package/dist/connector/ledger-migrations.js.map +1 -0
- package/dist/connector/state.d.ts +97 -60
- package/dist/connector/state.d.ts.map +1 -1
- package/dist/connector/state.js +165 -107
- package/dist/connector/state.js.map +1 -1
- package/dist/connector/vault.d.ts +2 -0
- package/dist/connector/vault.d.ts.map +1 -1
- package/dist/connector/vault.js +6 -1
- package/dist/connector/vault.js.map +1 -1
- package/dist/help.d.ts +3 -3
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +97 -56
- package/dist/help.js.map +1 -1
- package/dist/reconcile/apply.d.ts +31 -0
- package/dist/reconcile/apply.d.ts.map +1 -0
- package/dist/reconcile/apply.js +97 -0
- package/dist/reconcile/apply.js.map +1 -0
- package/dist/reconcile/core.d.ts +82 -0
- package/dist/reconcile/core.d.ts.map +1 -0
- package/dist/reconcile/core.js +163 -0
- package/dist/reconcile/core.js.map +1 -0
- package/dist/reconcile/disk.d.ts +13 -0
- package/dist/reconcile/disk.d.ts.map +1 -0
- package/dist/reconcile/disk.js +28 -0
- package/dist/reconcile/disk.js.map +1 -0
- package/dist/util/frontmatter.d.ts +9 -7
- package/dist/util/frontmatter.d.ts.map +1 -1
- package/dist/util/frontmatter.js +29 -4
- package/dist/util/frontmatter.js.map +1 -1
- package/dist/util/fs.d.ts +14 -0
- package/dist/util/fs.d.ts.map +1 -1
- package/dist/util/fs.js +27 -1
- package/dist/util/fs.js.map +1 -1
- package/dist/util/merge-json.d.ts +13 -2
- package/dist/util/merge-json.d.ts.map +1 -1
- package/dist/util/merge-json.js +24 -10
- package/dist/util/merge-json.js.map +1 -1
- package/dist/util/path.d.ts +23 -0
- package/dist/util/path.d.ts.map +1 -1
- package/dist/util/path.js +39 -0
- package/dist/util/path.js.map +1 -1
- package/dist/vault/list-handoffs.d.ts +14 -2
- package/dist/vault/list-handoffs.d.ts.map +1 -1
- package/dist/vault/list-handoffs.js +40 -23
- package/dist/vault/list-handoffs.js.map +1 -1
- package/dist/vault/list-markdown.d.ts +8 -0
- package/dist/vault/list-markdown.d.ts.map +1 -0
- package/dist/vault/list-markdown.js +35 -0
- package/dist/vault/list-markdown.js.map +1 -0
- package/dist/vault/list-notes.d.ts +15 -6
- package/dist/vault/list-notes.d.ts.map +1 -1
- package/dist/vault/list-notes.js +23 -27
- package/dist/vault/list-notes.js.map +1 -1
- package/dist/vault/list-plans.d.ts +12 -3
- package/dist/vault/list-plans.d.ts.map +1 -1
- package/dist/vault/list-plans.js +20 -24
- package/dist/vault/list-plans.js.map +1 -1
- package/dist/vault/search.d.ts +55 -0
- package/dist/vault/search.d.ts.map +1 -0
- package/dist/vault/search.js +432 -0
- package/dist/vault/search.js.map +1 -0
- package/dist/vault/write-handoff.d.ts +2 -0
- package/dist/vault/write-handoff.d.ts.map +1 -1
- package/dist/vault/write-handoff.js +5 -0
- package/dist/vault/write-handoff.js.map +1 -1
- package/dist/vault/write-note.d.ts +2 -0
- package/dist/vault/write-note.d.ts.map +1 -1
- package/dist/vault/write-note.js +9 -1
- package/dist/vault/write-note.js.map +1 -1
- package/dist/vault/write-plan.d.ts +4 -0
- package/dist/vault/write-plan.d.ts.map +1 -1
- package/dist/vault/write-plan.js +14 -1
- package/dist/vault/write-plan.js.map +1 -1
- package/package.json +11 -4
- package/templates/agents/claude/skills/grounder-handoff/SKILL.md +73 -0
- package/templates/agents/claude/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +12 -2
- package/templates/agents/claude/skills/grounder-overview/SKILL.md +21 -0
- package/templates/agents/claude/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +13 -5
- package/templates/agents/claude/skills/grounder-recall/SKILL.md +34 -0
- package/templates/agents/claude/skills/grounder-search/SKILL.md +152 -0
- package/templates/agents/cursor/skills/grounder-handoff/SKILL.md +73 -0
- package/templates/agents/cursor/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +12 -2
- package/templates/agents/cursor/skills/grounder-overview/SKILL.md +21 -0
- package/templates/agents/cursor/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +13 -5
- package/templates/agents/cursor/skills/grounder-recall/SKILL.md +34 -0
- package/templates/agents/cursor/skills/grounder-search/SKILL.md +152 -0
- package/templates/vault/plan.md +1 -1
- package/templates/vault/session-handoff.md +2 -1
- package/dist/agents/install-command.d.ts +0 -35
- package/dist/agents/install-command.d.ts.map +0 -1
- package/dist/agents/install-command.js +0 -65
- package/dist/agents/install-command.js.map +0 -1
- package/dist/commands/apply-agent-installs.d.ts +0 -34
- package/dist/commands/apply-agent-installs.d.ts.map +0 -1
- package/dist/commands/apply-agent-installs.js +0 -137
- package/dist/commands/apply-agent-installs.js.map +0 -1
- package/dist/commands/repo/init.d.ts +0 -11
- package/dist/commands/repo/init.d.ts.map +0 -1
- package/dist/commands/repo/init.js.map +0 -1
- package/dist/commands/vault/init.d.ts.map +0 -1
- package/dist/commands/vault/init.js +0 -90
- package/dist/commands/vault/init.js.map +0 -1
- package/templates/agents/claude/commands/grounder-task-handoff.md +0 -54
- package/templates/agents/claude/commands/grounder-task.md +0 -22
- package/templates/agents/cursor/commands/grounder-task-handoff.md +0 -54
- package/templates/agents/cursor/commands/grounder-task.md +0 -22
|
@@ -1,30 +1,47 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { stat } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return [];
|
|
3
|
+
import { vaultRelativePath } from "../util/path.js";
|
|
4
|
+
import { listMarkdownFiles } from "./list-markdown.js";
|
|
5
|
+
function rankHandoffPaths(mdPaths, logsDir) {
|
|
6
|
+
const ranked = mdPaths.map((filePath) => ({
|
|
7
|
+
filePath,
|
|
8
|
+
name: path.basename(filePath),
|
|
9
|
+
rel: vaultRelativePath(logsDir, filePath),
|
|
10
|
+
}));
|
|
11
|
+
ranked.sort((a, b) => {
|
|
12
|
+
if (a.name !== b.name) {
|
|
13
|
+
return a.name < b.name ? 1 : -1;
|
|
15
14
|
}
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return paths;
|
|
15
|
+
return a.rel < b.rel ? 1 : a.rel > b.rel ? -1 : 0;
|
|
16
|
+
});
|
|
17
|
+
return ranked.map((entry) => entry.filePath);
|
|
18
|
+
}
|
|
19
|
+
function applyLimit(paths, limit) {
|
|
20
|
+
if (limit === undefined) {
|
|
21
|
+
return [...paths];
|
|
24
22
|
}
|
|
25
|
-
if (
|
|
23
|
+
if (limit <= 0) {
|
|
26
24
|
return [];
|
|
27
25
|
}
|
|
28
|
-
return paths.slice(0,
|
|
26
|
+
return paths.slice(0, limit);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Lists handoff markdown files under `logsDir` recursively, newest basename
|
|
30
|
+
* first (timestamp-prefixed names sort correctly), with each entry's mtime
|
|
31
|
+
* attached. Same basename in different subfolders ties break by
|
|
32
|
+
* vault-relative path descending. Missing or empty dirs yield `[]`.
|
|
33
|
+
*
|
|
34
|
+
* Ranking never reads mtime (filenames already sort correctly), so this
|
|
35
|
+
* stats only the paths a `limit` actually keeps, not the whole bucket.
|
|
36
|
+
*/
|
|
37
|
+
export async function listHandoffsDetailed(logsDir, options = {}) {
|
|
38
|
+
const mdPaths = await listMarkdownFiles(logsDir);
|
|
39
|
+
const paths = applyLimit(rankHandoffPaths(mdPaths, logsDir), options.limit);
|
|
40
|
+
return Promise.all(paths.map(async (filePath) => ({ path: filePath, mtimeMs: (await stat(filePath)).mtimeMs })));
|
|
41
|
+
}
|
|
42
|
+
/** Same ranking as {@link listHandoffsDetailed}, paths only (no stat calls). */
|
|
43
|
+
export async function listHandoffs(logsDir, options = {}) {
|
|
44
|
+
const mdPaths = await listMarkdownFiles(logsDir);
|
|
45
|
+
return applyLimit(rankHandoffPaths(mdPaths, logsDir), options.limit);
|
|
29
46
|
}
|
|
30
47
|
//# sourceMappingURL=list-handoffs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-handoffs.js","sourceRoot":"","sources":["../../src/vault/list-handoffs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-handoffs.js","sourceRoot":"","sources":["../../src/vault/list-handoffs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAavD,SAAS,gBAAgB,CAAC,OAA0B,EAAE,OAAe;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxC,QAAQ;QACR,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7B,GAAG,EAAE,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC;KAC1C,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU,CAAC,KAAwB,EAAE,KAAyB;IACrE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAe,EACf,UAA+B,EAAE;IAEjC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5E,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAC7F,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,UAA+B,EAAE;IAEjC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recursively lists `*.md` files under `rootDir` (absolute paths).
|
|
3
|
+
* Missing dirs yield `[]`. Does not follow directory symlinks (`Dirent`
|
|
4
|
+
* type checks); plain files that are symlinks to `.md` are included when
|
|
5
|
+
* `isFile()` reports true.
|
|
6
|
+
*/
|
|
7
|
+
export declare function listMarkdownFiles(rootDir: string): Promise<string[]>;
|
|
8
|
+
//# sourceMappingURL=list-markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-markdown.d.ts","sourceRoot":"","sources":["../../src/vault/list-markdown.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA0B1E"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { readdir } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Recursively lists `*.md` files under `rootDir` (absolute paths).
|
|
5
|
+
* Missing dirs yield `[]`. Does not follow directory symlinks (`Dirent`
|
|
6
|
+
* type checks); plain files that are symlinks to `.md` are included when
|
|
7
|
+
* `isFile()` reports true.
|
|
8
|
+
*/
|
|
9
|
+
export async function listMarkdownFiles(rootDir) {
|
|
10
|
+
const results = [];
|
|
11
|
+
async function walk(dir) {
|
|
12
|
+
let entries;
|
|
13
|
+
try {
|
|
14
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (error.code === "ENOENT") {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
for (const entry of entries) {
|
|
23
|
+
const full = path.join(dir, entry.name);
|
|
24
|
+
if (entry.isDirectory()) {
|
|
25
|
+
await walk(full);
|
|
26
|
+
}
|
|
27
|
+
else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
28
|
+
results.push(full);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
await walk(rootDir);
|
|
33
|
+
return results;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=list-markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-markdown.js","sourceRoot":"","sources":["../../src/vault/list-markdown.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe;IACrD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,UAAU,IAAI,CAAC,GAAW;QAC7B,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO;YACT,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -2,14 +2,23 @@ export interface ListNotesOptions {
|
|
|
2
2
|
/** Max paths to return (newest first). Omit to return all. */
|
|
3
3
|
limit?: number;
|
|
4
4
|
}
|
|
5
|
+
/** One note with the mtime already used to rank it (see {@link listNotesDetailed}). */
|
|
6
|
+
export interface NoteEntry {
|
|
7
|
+
path: string;
|
|
8
|
+
mtimeMs: number;
|
|
9
|
+
}
|
|
5
10
|
/**
|
|
6
|
-
* Lists note markdown files under `notesDir
|
|
7
|
-
*
|
|
8
|
-
*
|
|
11
|
+
* Lists note markdown files under `notesDir` recursively, newest mtime first,
|
|
12
|
+
* with each entry's mtime attached — the same stat this module already does
|
|
13
|
+
* internally to rank notes, just not thrown away after sorting. Missing or
|
|
14
|
+
* empty dirs yield `[]`. Ties break by vault-relative path descending for
|
|
15
|
+
* stable output.
|
|
9
16
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
17
|
+
* Matches {@link listPlans} sorting for consistency across list commands
|
|
18
|
+
* (filename-descending alone is viable for timestamp-prefixed notes, like
|
|
19
|
+
* {@link listHandoffs}).
|
|
13
20
|
*/
|
|
21
|
+
export declare function listNotesDetailed(notesDir: string, options?: ListNotesOptions): Promise<NoteEntry[]>;
|
|
22
|
+
/** Same ranking as {@link listNotesDetailed}, paths only. */
|
|
14
23
|
export declare function listNotes(notesDir: string, options?: ListNotesOptions): Promise<string[]>;
|
|
15
24
|
//# sourceMappingURL=list-notes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-notes.d.ts","sourceRoot":"","sources":["../../src/vault/list-notes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list-notes.d.ts","sourceRoot":"","sources":["../../src/vault/list-notes.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uFAAuF;AACvF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,EAAE,CAAC,CAyBtB;AAED,6DAA6D;AAC7D,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC,CAEnB"}
|
package/dist/vault/list-notes.js
CHANGED
|
@@ -1,44 +1,40 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { stat } from "node:fs/promises";
|
|
2
|
+
import { vaultRelativePath } from "../util/path.js";
|
|
3
|
+
import { listMarkdownFiles } from "./list-markdown.js";
|
|
3
4
|
/**
|
|
4
|
-
* Lists note markdown files under `notesDir
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Lists note markdown files under `notesDir` recursively, newest mtime first,
|
|
6
|
+
* with each entry's mtime attached — the same stat this module already does
|
|
7
|
+
* internally to rank notes, just not thrown away after sorting. Missing or
|
|
8
|
+
* empty dirs yield `[]`. Ties break by vault-relative path descending for
|
|
9
|
+
* stable output.
|
|
7
10
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
+
* Matches {@link listPlans} sorting for consistency across list commands
|
|
12
|
+
* (filename-descending alone is viable for timestamp-prefixed notes, like
|
|
13
|
+
* {@link listHandoffs}).
|
|
11
14
|
*/
|
|
12
|
-
export async function
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
entries = await readdir(notesDir);
|
|
16
|
-
}
|
|
17
|
-
catch (error) {
|
|
18
|
-
if (error.code === "ENOENT") {
|
|
19
|
-
return [];
|
|
20
|
-
}
|
|
21
|
-
throw error;
|
|
22
|
-
}
|
|
23
|
-
const mdNames = entries.filter((name) => name.endsWith(".md"));
|
|
24
|
-
const withMtime = await Promise.all(mdNames.map(async (name) => {
|
|
25
|
-
const filePath = path.join(notesDir, name);
|
|
15
|
+
export async function listNotesDetailed(notesDir, options = {}) {
|
|
16
|
+
const mdPaths = await listMarkdownFiles(notesDir);
|
|
17
|
+
const withMtime = await Promise.all(mdPaths.map(async (filePath) => {
|
|
26
18
|
const { mtimeMs } = await stat(filePath);
|
|
27
|
-
return { filePath,
|
|
19
|
+
return { filePath, rel: vaultRelativePath(notesDir, filePath), mtimeMs };
|
|
28
20
|
}));
|
|
29
21
|
withMtime.sort((a, b) => {
|
|
30
22
|
if (a.mtimeMs !== b.mtimeMs) {
|
|
31
23
|
return b.mtimeMs - a.mtimeMs;
|
|
32
24
|
}
|
|
33
|
-
return a.
|
|
25
|
+
return a.rel < b.rel ? 1 : a.rel > b.rel ? -1 : 0;
|
|
34
26
|
});
|
|
35
|
-
const
|
|
27
|
+
const entries = withMtime.map((entry) => ({ path: entry.filePath, mtimeMs: entry.mtimeMs }));
|
|
36
28
|
if (options.limit === undefined) {
|
|
37
|
-
return
|
|
29
|
+
return entries;
|
|
38
30
|
}
|
|
39
31
|
if (options.limit <= 0) {
|
|
40
32
|
return [];
|
|
41
33
|
}
|
|
42
|
-
return
|
|
34
|
+
return entries.slice(0, options.limit);
|
|
35
|
+
}
|
|
36
|
+
/** Same ranking as {@link listNotesDetailed}, paths only. */
|
|
37
|
+
export async function listNotes(notesDir, options = {}) {
|
|
38
|
+
return (await listNotesDetailed(notesDir, options)).map((entry) => entry.path);
|
|
43
39
|
}
|
|
44
40
|
//# sourceMappingURL=list-notes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-notes.js","sourceRoot":"","sources":["../../src/vault/list-notes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-notes.js","sourceRoot":"","sources":["../../src/vault/list-notes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAavD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,UAA4B,EAAE;IAE9B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC7B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IAC3E,CAAC,CAAC,CACH,CAAC;IAEF,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAE7F,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,UAA4B,EAAE;IAE9B,OAAO,CAAC,MAAM,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -2,10 +2,19 @@ export interface ListPlansOptions {
|
|
|
2
2
|
/** Max paths to return (newest first). Omit to return all. */
|
|
3
3
|
limit?: number;
|
|
4
4
|
}
|
|
5
|
+
/** One plan with the mtime already used to rank it (see {@link listPlansDetailed}). */
|
|
6
|
+
export interface PlanEntry {
|
|
7
|
+
path: string;
|
|
8
|
+
mtimeMs: number;
|
|
9
|
+
}
|
|
5
10
|
/**
|
|
6
|
-
* Lists plan markdown files under `plansDir
|
|
7
|
-
*
|
|
8
|
-
*
|
|
11
|
+
* Lists plan markdown files under `plansDir` recursively, newest mtime first,
|
|
12
|
+
* with each entry's mtime attached — the same stat this module already does
|
|
13
|
+
* internally to rank plans, just not thrown away after sorting. Missing or
|
|
14
|
+
* empty dirs yield `[]`. Ties break by vault-relative path descending for
|
|
15
|
+
* stable output.
|
|
9
16
|
*/
|
|
17
|
+
export declare function listPlansDetailed(plansDir: string, options?: ListPlansOptions): Promise<PlanEntry[]>;
|
|
18
|
+
/** Same ranking as {@link listPlansDetailed}, paths only. */
|
|
10
19
|
export declare function listPlans(plansDir: string, options?: ListPlansOptions): Promise<string[]>;
|
|
11
20
|
//# sourceMappingURL=list-plans.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-plans.d.ts","sourceRoot":"","sources":["../../src/vault/list-plans.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list-plans.d.ts","sourceRoot":"","sources":["../../src/vault/list-plans.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uFAAuF;AACvF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,EAAE,CAAC,CAyBtB;AAED,6DAA6D;AAC7D,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC,CAEnB"}
|
package/dist/vault/list-plans.js
CHANGED
|
@@ -1,40 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { stat } from "node:fs/promises";
|
|
2
|
+
import { vaultRelativePath } from "../util/path.js";
|
|
3
|
+
import { listMarkdownFiles } from "./list-markdown.js";
|
|
3
4
|
/**
|
|
4
|
-
* Lists plan markdown files under `plansDir
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Lists plan markdown files under `plansDir` recursively, newest mtime first,
|
|
6
|
+
* with each entry's mtime attached — the same stat this module already does
|
|
7
|
+
* internally to rank plans, just not thrown away after sorting. Missing or
|
|
8
|
+
* empty dirs yield `[]`. Ties break by vault-relative path descending for
|
|
9
|
+
* stable output.
|
|
7
10
|
*/
|
|
8
|
-
export async function
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
entries = await readdir(plansDir);
|
|
12
|
-
}
|
|
13
|
-
catch (error) {
|
|
14
|
-
if (error.code === "ENOENT") {
|
|
15
|
-
return [];
|
|
16
|
-
}
|
|
17
|
-
throw error;
|
|
18
|
-
}
|
|
19
|
-
const mdNames = entries.filter((name) => name.endsWith(".md"));
|
|
20
|
-
const withMtime = await Promise.all(mdNames.map(async (name) => {
|
|
21
|
-
const filePath = path.join(plansDir, name);
|
|
11
|
+
export async function listPlansDetailed(plansDir, options = {}) {
|
|
12
|
+
const mdPaths = await listMarkdownFiles(plansDir);
|
|
13
|
+
const withMtime = await Promise.all(mdPaths.map(async (filePath) => {
|
|
22
14
|
const { mtimeMs } = await stat(filePath);
|
|
23
|
-
return { filePath,
|
|
15
|
+
return { filePath, rel: vaultRelativePath(plansDir, filePath), mtimeMs };
|
|
24
16
|
}));
|
|
25
17
|
withMtime.sort((a, b) => {
|
|
26
18
|
if (a.mtimeMs !== b.mtimeMs) {
|
|
27
19
|
return b.mtimeMs - a.mtimeMs;
|
|
28
20
|
}
|
|
29
|
-
return a.
|
|
21
|
+
return a.rel < b.rel ? 1 : a.rel > b.rel ? -1 : 0;
|
|
30
22
|
});
|
|
31
|
-
const
|
|
23
|
+
const entries = withMtime.map((entry) => ({ path: entry.filePath, mtimeMs: entry.mtimeMs }));
|
|
32
24
|
if (options.limit === undefined) {
|
|
33
|
-
return
|
|
25
|
+
return entries;
|
|
34
26
|
}
|
|
35
27
|
if (options.limit <= 0) {
|
|
36
28
|
return [];
|
|
37
29
|
}
|
|
38
|
-
return
|
|
30
|
+
return entries.slice(0, options.limit);
|
|
31
|
+
}
|
|
32
|
+
/** Same ranking as {@link listPlansDetailed}, paths only. */
|
|
33
|
+
export async function listPlans(plansDir, options = {}) {
|
|
34
|
+
return (await listPlansDetailed(plansDir, options)).map((entry) => entry.path);
|
|
39
35
|
}
|
|
40
36
|
//# sourceMappingURL=list-plans.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-plans.js","sourceRoot":"","sources":["../../src/vault/list-plans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-plans.js","sourceRoot":"","sources":["../../src/vault/list-plans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAavD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,UAA4B,EAAE;IAE9B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC7B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IAC3E,CAAC,CAAC,CACH,CAAC;IAEF,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAE7F,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,UAA4B,EAAE;IAE9B,OAAO,CAAC,MAAM,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** One line-level match inside a markdown file. */
|
|
2
|
+
export interface SearchLineHit {
|
|
3
|
+
line: number;
|
|
4
|
+
matchedTerm: string;
|
|
5
|
+
snippet: string;
|
|
6
|
+
}
|
|
7
|
+
/** Matches grouped by file, after ranking and per-file dedupe. */
|
|
8
|
+
export interface SearchFileHit {
|
|
9
|
+
filePath: string;
|
|
10
|
+
mtimeMs: number;
|
|
11
|
+
topicsMatch: boolean;
|
|
12
|
+
hits: SearchLineHit[];
|
|
13
|
+
/** Distinct matching terms (original spelling), longest first. */
|
|
14
|
+
matchedTerms: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface SearchOptions {
|
|
17
|
+
/** Project vault root — searched recursively for `*.md`. */
|
|
18
|
+
rootDir: string;
|
|
19
|
+
/** Primary query phrase. */
|
|
20
|
+
query: string;
|
|
21
|
+
/** Extra keyword variants (deduped with query). */
|
|
22
|
+
terms?: readonly string[];
|
|
23
|
+
/** Max distinct files in the result (default 10). */
|
|
24
|
+
limit?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Cap stored line snippets per file during scan (default 50; hard-capped at
|
|
27
|
+
* 50). Does not abort the tree walk; ranking still uses full hit counts.
|
|
28
|
+
*/
|
|
29
|
+
maxHits?: number;
|
|
30
|
+
/** Context lines around each match (default 1). */
|
|
31
|
+
context?: number;
|
|
32
|
+
/** Max line hits kept per file after grouping (default 1). */
|
|
33
|
+
maxHitsPerFile?: number;
|
|
34
|
+
/** Exclude files with mtime before this date. */
|
|
35
|
+
since?: Date;
|
|
36
|
+
}
|
|
37
|
+
export interface SearchOutcome {
|
|
38
|
+
query: string;
|
|
39
|
+
terms: string[];
|
|
40
|
+
/** How many files each term matched (keyed by lowercased term). */
|
|
41
|
+
termHitCounts: Record<string, number>;
|
|
42
|
+
totalMatchCount: number;
|
|
43
|
+
totalFileCount: number;
|
|
44
|
+
files: SearchFileHit[];
|
|
45
|
+
truncated: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Case-insensitive markdown scan under `rootDir`.
|
|
49
|
+
* Frontmatter `topics:` matches boost file ranking; body and frontmatter lines
|
|
50
|
+
* both contribute line hits. Files rank by relevance (distinct terms, hit
|
|
51
|
+
* density, filename/path terms, topics; demotes search dogfood when query is
|
|
52
|
+
* unrelated), then archive, recency, folder. Pure fs — no index, no deps.
|
|
53
|
+
*/
|
|
54
|
+
export declare function searchVault(options: SearchOptions): Promise<SearchOutcome>;
|
|
55
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/vault/search.ts"],"names":[],"mappings":"AAKA,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,kEAAkE;IAClE,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,KAAK,CAAC,EAAE,IAAI,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAsUD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CA8LhF"}
|