grounder 0.0.1 → 0.0.2
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/LICENSE +21 -0
- package/README.md +169 -2
- package/dist/agents/claude.d.ts +7 -0
- package/dist/agents/claude.d.ts.map +1 -0
- package/dist/agents/claude.js +46 -0
- package/dist/agents/claude.js.map +1 -0
- package/dist/agents/cursor.d.ts +7 -0
- package/dist/agents/cursor.d.ts.map +1 -0
- package/dist/agents/cursor.js +46 -0
- package/dist/agents/cursor.js.map +1 -0
- package/dist/agents/index.d.ts +11 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +23 -0
- package/dist/agents/index.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.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +95 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/handoff/list.d.ts +23 -0
- package/dist/commands/handoff/list.d.ts.map +1 -0
- package/dist/commands/handoff/list.js +64 -0
- package/dist/commands/handoff/list.js.map +1 -0
- package/dist/commands/handoff.d.ts +25 -0
- package/dist/commands/handoff.d.ts.map +1 -0
- package/dist/commands/handoff.js +47 -0
- package/dist/commands/handoff.js.map +1 -0
- package/dist/commands/note.d.ts +10 -0
- package/dist/commands/note.d.ts.map +1 -0
- package/dist/commands/note.js +33 -0
- package/dist/commands/note.js.map +1 -0
- package/dist/commands/path/logs.d.ts +7 -0
- package/dist/commands/path/logs.d.ts.map +1 -0
- package/dist/commands/path/logs.js +17 -0
- package/dist/commands/path/logs.js.map +1 -0
- package/dist/commands/path/notes.d.ts +7 -0
- package/dist/commands/path/notes.d.ts.map +1 -0
- package/dist/commands/path/notes.js +17 -0
- package/dist/commands/path/notes.js.map +1 -0
- package/dist/commands/repo/init.d.ts +11 -0
- package/dist/commands/repo/init.d.ts.map +1 -0
- package/dist/commands/repo/init.js +78 -0
- package/dist/commands/repo/init.js.map +1 -0
- package/dist/commands/require-linked.d.ts +7 -0
- package/dist/commands/require-linked.d.ts.map +1 -0
- package/dist/commands/require-linked.js +19 -0
- package/dist/commands/require-linked.js.map +1 -0
- package/dist/commands/vault/init.d.ts +11 -0
- package/dist/commands/vault/init.d.ts.map +1 -0
- package/dist/commands/vault/init.js +73 -0
- package/dist/commands/vault/init.js.map +1 -0
- package/dist/connector/git.d.ts +12 -0
- package/dist/connector/git.d.ts.map +1 -0
- package/dist/connector/git.js +53 -0
- package/dist/connector/git.js.map +1 -0
- package/dist/connector/home.d.ts +13 -0
- package/dist/connector/home.d.ts.map +1 -0
- package/dist/connector/home.js +52 -0
- package/dist/connector/home.js.map +1 -0
- package/dist/connector/linked.d.ts +25 -0
- package/dist/connector/linked.d.ts.map +1 -0
- package/dist/connector/linked.js +24 -0
- package/dist/connector/linked.js.map +1 -0
- package/dist/connector/project-id.d.ts +17 -0
- package/dist/connector/project-id.d.ts.map +1 -0
- package/dist/connector/project-id.js +102 -0
- package/dist/connector/project-id.js.map +1 -0
- package/dist/connector/repo.d.ts +9 -0
- package/dist/connector/repo.d.ts.map +1 -0
- package/dist/connector/repo.js +41 -0
- package/dist/connector/repo.js.map +1 -0
- package/dist/connector/vault.d.ts +12 -0
- package/dist/connector/vault.d.ts.map +1 -0
- package/dist/connector/vault.js +27 -0
- package/dist/connector/vault.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/util/fs.d.ts +8 -0
- package/dist/util/fs.d.ts.map +1 -0
- package/dist/util/fs.js +36 -0
- package/dist/util/fs.js.map +1 -0
- package/dist/util/parse-args.d.ts +12 -0
- package/dist/util/parse-args.d.ts.map +1 -0
- package/dist/util/parse-args.js +49 -0
- package/dist/util/parse-args.js.map +1 -0
- package/dist/util/path.d.ts +10 -0
- package/dist/util/path.d.ts.map +1 -0
- package/dist/util/path.js +22 -0
- package/dist/util/path.js.map +1 -0
- package/dist/util/project-id.d.ts +2 -0
- package/dist/util/project-id.d.ts.map +1 -0
- package/dist/util/project-id.js +8 -0
- package/dist/util/project-id.js.map +1 -0
- package/dist/util/prompt.d.ts +2 -0
- package/dist/util/prompt.d.ts.map +1 -0
- package/dist/util/prompt.js +19 -0
- package/dist/util/prompt.js.map +1 -0
- package/dist/util/timestamp-slug.d.ts +38 -0
- package/dist/util/timestamp-slug.d.ts.map +1 -0
- package/dist/util/timestamp-slug.js +66 -0
- package/dist/util/timestamp-slug.js.map +1 -0
- package/dist/util/yaml.d.ts +6 -0
- package/dist/util/yaml.d.ts.map +1 -0
- package/dist/util/yaml.js +13 -0
- package/dist/util/yaml.js.map +1 -0
- package/dist/vault/layout.d.ts +13 -0
- package/dist/vault/layout.d.ts.map +1 -0
- package/dist/vault/layout.js +22 -0
- package/dist/vault/layout.js.map +1 -0
- package/dist/vault/list-handoffs.d.ts +10 -0
- package/dist/vault/list-handoffs.d.ts.map +1 -0
- package/dist/vault/list-handoffs.js +30 -0
- package/dist/vault/list-handoffs.js.map +1 -0
- package/dist/vault/write-handoff.d.ts +21 -0
- package/dist/vault/write-handoff.d.ts.map +1 -0
- package/dist/vault/write-handoff.js +40 -0
- package/dist/vault/write-handoff.js.map +1 -0
- package/dist/vault/write-note.d.ts +11 -0
- package/dist/vault/write-note.d.ts.map +1 -0
- package/dist/vault/write-note.js +15 -0
- package/dist/vault/write-note.js.map +1 -0
- package/package.json +45 -10
- package/templates/agents/claude/commands/grounder-note.md +11 -0
- package/templates/agents/claude/commands/grounder-task-handoff.md +54 -0
- package/templates/agents/claude/commands/grounder-task.md +20 -0
- package/templates/agents/cursor/commands/grounder-note.md +11 -0
- package/templates/agents/cursor/commands/grounder-task-handoff.md +54 -0
- package/templates/agents/cursor/commands/grounder-task.md +20 -0
- package/templates/vault/session-handoff.md +19 -0
- package/index.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked.js","sourceRoot":"","sources":["../../src/connector/linked.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAmB,cAAc,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAmB,cAAc,EAAE,MAAM,WAAW,CAAC;AAkBhF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAW;IACpD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type ProjectIdSource = "flag" | "package.json" | "git-remote" | "basename";
|
|
2
|
+
export interface DetectedProjectId {
|
|
3
|
+
id: string;
|
|
4
|
+
source: ProjectIdSource;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Detects the project id for a given link root.
|
|
8
|
+
* Tries to detect it from the package.json, git remote, and folder name.
|
|
9
|
+
*
|
|
10
|
+
* @param linkRoot - The root directory of the link.
|
|
11
|
+
* @param override - An optional project id to use instead of detecting one.
|
|
12
|
+
* @param gitRoot - An optional git root to use instead of detecting one.
|
|
13
|
+
* @returns The detected project id.
|
|
14
|
+
*/
|
|
15
|
+
export declare function detectProjectId(linkRoot: string, override?: string, gitRoot?: string | null): Promise<DetectedProjectId>;
|
|
16
|
+
export declare function formatProjectIdSource(source: ProjectIdSource): string;
|
|
17
|
+
//# sourceMappingURL=project-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-id.d.ts","sourceRoot":"","sources":["../../src/connector/project-id.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,cAAc,GAAG,YAAY,GAAG,UAAU,CAAC;AAElF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,eAAe,CAAC;CACzB;AAkDD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAmC5B;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAWrE"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { sanitizeProjectId } from "../util/project-id.js";
|
|
4
|
+
async function readPackageName(repoRoot) {
|
|
5
|
+
const packagePath = path.join(repoRoot, "package.json");
|
|
6
|
+
try {
|
|
7
|
+
const raw = JSON.parse(await readFile(packagePath, "utf8"));
|
|
8
|
+
return typeof raw.name === "string" && raw.name.length > 0 ? raw.name : null;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function parseRemoteSlug(url) {
|
|
15
|
+
const trimmed = url.trim();
|
|
16
|
+
const scpMatch = /^[^@]+@[^:]+:(.+)$/.exec(trimmed);
|
|
17
|
+
const rawPath = scpMatch ? scpMatch[1] : trimmed.replace(/^[^:]+:\/\//, "");
|
|
18
|
+
const lastSegment = rawPath.split("/").filter(Boolean).pop();
|
|
19
|
+
if (!lastSegment) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return lastSegment.replace(/\.git$/i, "");
|
|
23
|
+
}
|
|
24
|
+
async function readGitRemoteSlug(repoRoot) {
|
|
25
|
+
const configPath = path.join(repoRoot, ".git", "config");
|
|
26
|
+
try {
|
|
27
|
+
const contents = await readFile(configPath, "utf8");
|
|
28
|
+
const lines = contents.split("\n");
|
|
29
|
+
let inOrigin = false;
|
|
30
|
+
for (const line of lines) {
|
|
31
|
+
const section = /^\[remote "(.+)"\]$/.exec(line.trim());
|
|
32
|
+
if (section) {
|
|
33
|
+
inOrigin = section[1] === "origin";
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (inOrigin) {
|
|
37
|
+
const urlMatch = /^\s*url\s*=\s*(.+)$/.exec(line);
|
|
38
|
+
if (urlMatch) {
|
|
39
|
+
return parseRemoteSlug(urlMatch[1]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Detects the project id for a given link root.
|
|
51
|
+
* Tries to detect it from the package.json, git remote, and folder name.
|
|
52
|
+
*
|
|
53
|
+
* @param linkRoot - The root directory of the link.
|
|
54
|
+
* @param override - An optional project id to use instead of detecting one.
|
|
55
|
+
* @param gitRoot - An optional git root to use instead of detecting one.
|
|
56
|
+
* @returns The detected project id.
|
|
57
|
+
*/
|
|
58
|
+
export async function detectProjectId(linkRoot, override, gitRoot) {
|
|
59
|
+
if (override) {
|
|
60
|
+
const id = sanitizeProjectId(override);
|
|
61
|
+
if (!id) {
|
|
62
|
+
throw new Error(`Invalid project id: ${override}`);
|
|
63
|
+
}
|
|
64
|
+
return { id, source: "flag" };
|
|
65
|
+
}
|
|
66
|
+
const packageName = await readPackageName(linkRoot);
|
|
67
|
+
if (packageName) {
|
|
68
|
+
const id = sanitizeProjectId(packageName);
|
|
69
|
+
if (id) {
|
|
70
|
+
return { id, source: "package.json" };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (gitRoot !== null) {
|
|
74
|
+
const remoteRoot = gitRoot ?? linkRoot;
|
|
75
|
+
const remoteSlug = await readGitRemoteSlug(remoteRoot);
|
|
76
|
+
if (remoteSlug) {
|
|
77
|
+
const id = sanitizeProjectId(remoteSlug);
|
|
78
|
+
if (id) {
|
|
79
|
+
return { id, source: "git-remote" };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const basename = path.basename(linkRoot);
|
|
84
|
+
const id = sanitizeProjectId(basename);
|
|
85
|
+
if (!id) {
|
|
86
|
+
throw new Error("Could not detect a valid project id");
|
|
87
|
+
}
|
|
88
|
+
return { id, source: "basename" };
|
|
89
|
+
}
|
|
90
|
+
export function formatProjectIdSource(source) {
|
|
91
|
+
switch (source) {
|
|
92
|
+
case "flag":
|
|
93
|
+
return "from --id";
|
|
94
|
+
case "package.json":
|
|
95
|
+
return "from package.json";
|
|
96
|
+
case "git-remote":
|
|
97
|
+
return "from git remote";
|
|
98
|
+
case "basename":
|
|
99
|
+
return "from folder name";
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=project-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-id.js","sourceRoot":"","sources":["../../src/connector/project-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface RepoConfig {
|
|
2
|
+
version: 1;
|
|
3
|
+
projectId: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function repoConfigPath(repoRoot: string): string;
|
|
6
|
+
export declare function findLinkedRepoRoot(cwd: string, gitRoot?: string | null): Promise<string | null>;
|
|
7
|
+
export declare function readRepoConfig(repoRoot: string): Promise<RepoConfig | null>;
|
|
8
|
+
export declare function writeRepoConfig(repoRoot: string, config: RepoConfig): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/connector/repo.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,GAAG,IAAW,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAYjF;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileExists } from "../util/fs.js";
|
|
4
|
+
const REPO_MARKER_FILE = ".grounder.json";
|
|
5
|
+
export function repoConfigPath(repoRoot) {
|
|
6
|
+
return path.join(repoRoot, REPO_MARKER_FILE);
|
|
7
|
+
}
|
|
8
|
+
export async function findLinkedRepoRoot(cwd, gitRoot = null) {
|
|
9
|
+
let current = path.resolve(cwd);
|
|
10
|
+
const stopAtGitRoot = gitRoot ? path.resolve(gitRoot) : null;
|
|
11
|
+
while (true) {
|
|
12
|
+
if (await fileExists(repoConfigPath(current))) {
|
|
13
|
+
return current;
|
|
14
|
+
}
|
|
15
|
+
if (stopAtGitRoot && current === stopAtGitRoot) {
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
const parent = path.dirname(current);
|
|
19
|
+
if (parent === current) {
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
current = parent;
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
export async function readRepoConfig(repoRoot) {
|
|
27
|
+
const configPath = repoConfigPath(repoRoot);
|
|
28
|
+
if (!(await fileExists(configPath))) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const raw = JSON.parse(await readFile(configPath, "utf8"));
|
|
32
|
+
if (raw.version !== 1 || typeof raw.projectId !== "string" || raw.projectId.length === 0) {
|
|
33
|
+
throw new Error(`Invalid repo config at ${configPath}`);
|
|
34
|
+
}
|
|
35
|
+
return { version: 1, projectId: raw.projectId };
|
|
36
|
+
}
|
|
37
|
+
export async function writeRepoConfig(repoRoot, config) {
|
|
38
|
+
const configPath = repoConfigPath(repoRoot);
|
|
39
|
+
await writeFile(configPath, `${JSON.stringify(config, null, 2)}\n`, "utf8");
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../src/connector/repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAO3C,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAE1C,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,UAAyB,IAAI;IAE7B,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7D,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,aAAa,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC/C,MAAM;QACR,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM;QACR,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAwB,CAAC;IAClF,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,MAAkB;IACxE,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HomeConfig } from "./home.js";
|
|
2
|
+
import type { RepoConfig } from "./repo.js";
|
|
3
|
+
/**
|
|
4
|
+
* Effective vault root, in order: explicit `override`, `GROUNDER_VAULT`, then home config.
|
|
5
|
+
* Expands a leading `~` so vault paths like `~/Documents/…` resolve to the user home.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveVaultRoot(home: HomeConfig, override?: string): string;
|
|
8
|
+
/** Project notes directory under the effective vault root. */
|
|
9
|
+
export declare function resolveNotesDir(home: HomeConfig, repo: RepoConfig, vaultOverride?: string): string;
|
|
10
|
+
/** Project logs (handoff) directory under the effective vault root. */
|
|
11
|
+
export declare function resolveLogsDir(home: HomeConfig, repo: RepoConfig, vaultOverride?: string): string;
|
|
12
|
+
//# sourceMappingURL=vault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/connector/vault.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAED,8DAA8D;AAC9D,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAGR;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Config-aware vault resolution: effective vault root and artifact paths from connector state.
|
|
2
|
+
import { resolveUserPath } from "../util/path.js";
|
|
3
|
+
import { logsDir, notesDir } from "../vault/layout.js";
|
|
4
|
+
/**
|
|
5
|
+
* Effective vault root, in order: explicit `override`, `GROUNDER_VAULT`, then home config.
|
|
6
|
+
* Expands a leading `~` so vault paths like `~/Documents/…` resolve to the user home.
|
|
7
|
+
*/
|
|
8
|
+
export function resolveVaultRoot(home, override) {
|
|
9
|
+
if (override) {
|
|
10
|
+
return resolveUserPath(override);
|
|
11
|
+
}
|
|
12
|
+
if (process.env.GROUNDER_VAULT) {
|
|
13
|
+
return resolveUserPath(process.env.GROUNDER_VAULT);
|
|
14
|
+
}
|
|
15
|
+
return resolveUserPath(home.vaultRoot);
|
|
16
|
+
}
|
|
17
|
+
/** Project notes directory under the effective vault root. */
|
|
18
|
+
export function resolveNotesDir(home, repo, vaultOverride) {
|
|
19
|
+
const vaultRoot = resolveVaultRoot(home, vaultOverride);
|
|
20
|
+
return notesDir(vaultRoot, repo.projectId);
|
|
21
|
+
}
|
|
22
|
+
/** Project logs (handoff) directory under the effective vault root. */
|
|
23
|
+
export function resolveLogsDir(home, repo, vaultOverride) {
|
|
24
|
+
const vaultRoot = resolveVaultRoot(home, vaultOverride);
|
|
25
|
+
return logsDir(vaultRoot, repo.projectId);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=vault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/connector/vault.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAE/F,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAIvD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAgB,EAAE,QAAiB;IAClE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,eAAe,CAC7B,IAAgB,EAChB,IAAgB,EAChB,aAAsB;IAEtB,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACxD,OAAO,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,IAAgB,EAAE,IAAgB,EAAE,aAAsB;IACvF,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACxD,OAAO,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,OAAO,QAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
const pkgRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
5
|
+
const pkg = JSON.parse(readFileSync(path.join(pkgRoot, "package.json"), "utf8"));
|
|
6
|
+
export const VERSION = pkg.version;
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACjF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAE9E,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function fileExists(filePath: string): Promise<boolean>;
|
|
2
|
+
/**
|
|
3
|
+
* Creates a new markdown file under `dir`; never overwrites.
|
|
4
|
+
* Tries `basename.md`, then `basename_02.md`, `_03`, … with `wx` (O_EXCL)
|
|
5
|
+
* so concurrent writers cannot clobber each other.
|
|
6
|
+
*/
|
|
7
|
+
export declare function writeUniqueMarkdown(dir: string, basename: string, content: string): Promise<string>;
|
|
8
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/util/fs.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAgBjB"}
|
package/dist/util/fs.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { access, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { collisionSuffix } from "./timestamp-slug.js";
|
|
4
|
+
export async function fileExists(filePath) {
|
|
5
|
+
try {
|
|
6
|
+
await access(filePath);
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates a new markdown file under `dir`; never overwrites.
|
|
15
|
+
* Tries `basename.md`, then `basename_02.md`, `_03`, … with `wx` (O_EXCL)
|
|
16
|
+
* so concurrent writers cannot clobber each other.
|
|
17
|
+
*/
|
|
18
|
+
export async function writeUniqueMarkdown(dir, basename, content) {
|
|
19
|
+
let n = 0;
|
|
20
|
+
for (;;) {
|
|
21
|
+
const stem = n === 0 ? basename : `${basename}${collisionSuffix(n)}`;
|
|
22
|
+
const filePath = path.join(dir, `${stem}.md`);
|
|
23
|
+
try {
|
|
24
|
+
await writeFile(filePath, content, { encoding: "utf8", flag: "wx" });
|
|
25
|
+
return filePath;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (error.code === "EEXIST") {
|
|
29
|
+
n = n === 0 ? 2 : n + 1;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/util/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAW,EACX,QAAgB,EAChB,OAAe;IAEf,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACrE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACxB,SAAS;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface ParsedArgs {
|
|
2
|
+
positional: string[];
|
|
3
|
+
flags: Map<string, string | boolean>;
|
|
4
|
+
/** Raw repeated flag values, e.g. --agent=cursor --agent=claude → ["cursor","claude"] */
|
|
5
|
+
repeated: Map<string, string[]>;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
8
|
+
export declare function flagBool(flags: Map<string, string | boolean>, ...keys: string[]): boolean;
|
|
9
|
+
export declare function flagString(flags: Map<string, string | boolean>, key: string): string | undefined;
|
|
10
|
+
/** Collect all values from a repeated flag, e.g. --agent cursor --agent claude → ["cursor","claude"]. */
|
|
11
|
+
export declare function flagStrings(repeated: Map<string, string[]>, key: string): string[];
|
|
12
|
+
//# sourceMappingURL=parse-args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../../src/util/parse-args.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACrC,yFAAyF;IACzF,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACjC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA6BpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAQzF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGhG;AAED,yGAAyG;AACzG,wBAAgB,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAElF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export function parseArgs(argv) {
|
|
2
|
+
const positional = [];
|
|
3
|
+
const flags = new Map();
|
|
4
|
+
const repeated = new Map();
|
|
5
|
+
for (let i = 0; i < argv.length; i++) {
|
|
6
|
+
const arg = argv[i];
|
|
7
|
+
if (arg.startsWith("--")) {
|
|
8
|
+
const key = arg.slice(2);
|
|
9
|
+
const next = argv[i + 1];
|
|
10
|
+
if (next !== undefined && !next.startsWith("-")) {
|
|
11
|
+
flags.set(key, next);
|
|
12
|
+
const arr = repeated.get(key) ?? [];
|
|
13
|
+
arr.push(next);
|
|
14
|
+
repeated.set(key, arr);
|
|
15
|
+
i++;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
flags.set(key, true);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else if (arg.startsWith("-") && arg.length > 1) {
|
|
22
|
+
for (const char of arg.slice(1)) {
|
|
23
|
+
flags.set(char, true);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
positional.push(arg);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return { positional, flags, repeated };
|
|
31
|
+
}
|
|
32
|
+
export function flagBool(flags, ...keys) {
|
|
33
|
+
for (const key of keys) {
|
|
34
|
+
const value = flags.get(key);
|
|
35
|
+
if (value === true || value === "true") {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
export function flagString(flags, key) {
|
|
42
|
+
const value = flags.get(key);
|
|
43
|
+
return typeof value === "string" ? value : undefined;
|
|
44
|
+
}
|
|
45
|
+
/** Collect all values from a repeated flag, e.g. --agent cursor --agent claude → ["cursor","claude"]. */
|
|
46
|
+
export function flagStrings(repeated, key) {
|
|
47
|
+
return repeated.get(key) ?? [];
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=parse-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-args.js","sourceRoot":"","sources":["../../src/util/parse-args.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACpC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACf,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACvB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAoC,EAAE,GAAG,IAAc;IAC9E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAoC,EAAE,GAAW;IAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,WAAW,CAAC,QAA+B,EAAE,GAAW;IACtE,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expand a leading `~` / `~/…` to the user home directory.
|
|
3
|
+
* Leaves other paths unchanged (including a mid-path `~`, which is not home).
|
|
4
|
+
*/
|
|
5
|
+
export declare function expandHome(input: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Expand a leading `~`, then resolve to an absolute path (relative to `cwd` if given).
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveUserPath(input: string, cwd?: string): string;
|
|
10
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/util/path.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAElF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Expand a leading `~` / `~/…` to the user home directory.
|
|
5
|
+
* Leaves other paths unchanged (including a mid-path `~`, which is not home).
|
|
6
|
+
*/
|
|
7
|
+
export function expandHome(input) {
|
|
8
|
+
if (input === "~") {
|
|
9
|
+
return os.homedir();
|
|
10
|
+
}
|
|
11
|
+
if (input.startsWith("~/") || input.startsWith(`~${path.sep}`)) {
|
|
12
|
+
return path.join(os.homedir(), input.slice(2));
|
|
13
|
+
}
|
|
14
|
+
return input;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Expand a leading `~`, then resolve to an absolute path (relative to `cwd` if given).
|
|
18
|
+
*/
|
|
19
|
+
export function resolveUserPath(input, cwd = process.cwd()) {
|
|
20
|
+
return path.resolve(cwd, expandHome(input));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/util/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IACxE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-id.d.ts","sourceRoot":"","sources":["../../src/util/project-id.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-id.js","sourceRoot":"","sources":["../../src/util/project-id.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,KAAK;SACT,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/util/prompt.ts"],"names":[],"mappings":"AAEA,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBlF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import readline from "node:readline/promises";
|
|
2
|
+
export async function confirm(message, defaultYes = true) {
|
|
3
|
+
const hint = defaultYes ? "[Y/n]" : "[y/N]";
|
|
4
|
+
const rl = readline.createInterface({
|
|
5
|
+
input: process.stdin,
|
|
6
|
+
output: process.stdout,
|
|
7
|
+
});
|
|
8
|
+
try {
|
|
9
|
+
const answer = (await rl.question(`${message} ${hint} `)).trim().toLowerCase();
|
|
10
|
+
if (answer === "") {
|
|
11
|
+
return defaultYes;
|
|
12
|
+
}
|
|
13
|
+
return answer === "y" || answer === "yes";
|
|
14
|
+
}
|
|
15
|
+
finally {
|
|
16
|
+
rl.close();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/util/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,UAAU,GAAG,IAAI;IAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/E,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAClB,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,KAAK,CAAC;IAC5C,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export declare const MAX_SLUG_LENGTH = 20;
|
|
2
|
+
/**
|
|
3
|
+
* Builds a short filesystem-safe slug from text.
|
|
4
|
+
* Uses only the first line, truncated to {@link MAX_SLUG_LENGTH}.
|
|
5
|
+
*/
|
|
6
|
+
export declare function slugifyText(text: string): string;
|
|
7
|
+
/** Local-time prefix `YYYY-MM-DD-HHmm` (legacy minute precision). */
|
|
8
|
+
export declare function dateMinutePrefix(date: Date): string;
|
|
9
|
+
/** Local-time prefix `YYYY-MM-DD-HHmmss` for sortable filenames. */
|
|
10
|
+
export declare function dateSecondPrefix(date: Date): string;
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated Prefer {@link dateSecondPrefix} (hyphenated date + time).
|
|
13
|
+
* Legacy `YYYY-MM-DD-HH-mm-ss` form.
|
|
14
|
+
*/
|
|
15
|
+
export declare function timestampSlug(date?: Date): string;
|
|
16
|
+
/**
|
|
17
|
+
* Filename stem: `YYYY-MM-DD-HHmmss` plus optional slug from `title`, else from `text`.
|
|
18
|
+
* Returns the date prefix alone when the slug is empty.
|
|
19
|
+
*/
|
|
20
|
+
export declare function timestampedBasename(text: string, options?: {
|
|
21
|
+
title?: string;
|
|
22
|
+
now?: Date;
|
|
23
|
+
}): string;
|
|
24
|
+
/**
|
|
25
|
+
* @deprecated Alias of {@link timestampedBasename} (always second precision).
|
|
26
|
+
*/
|
|
27
|
+
export declare function timestampedBasenameWithSeconds(text: string, options?: {
|
|
28
|
+
title?: string;
|
|
29
|
+
now?: Date;
|
|
30
|
+
}): string;
|
|
31
|
+
/**
|
|
32
|
+
* Numeric collision suffix for a basename that already exists.
|
|
33
|
+
* Uses `_` so `base_02.md` sorts after `base.md` lexicographically
|
|
34
|
+
* (`_` > `.`), keeping filename-desc “newest first” correct.
|
|
35
|
+
* Zero-padded to 2 digits so `_02` < `_10`.
|
|
36
|
+
*/
|
|
37
|
+
export declare function collisionSuffix(n: number): string;
|
|
38
|
+
//# sourceMappingURL=timestamp-slug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamp-slug.d.ts","sourceRoot":"","sources":["../../src/util/timestamp-slug.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,KAAK,CAAC;AAIlC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAUD,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEnD;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,OAAa,GAAG,MAAM,CASvD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GAC3C,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GAC3C,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { sanitizeProjectId } from "./project-id.js";
|
|
2
|
+
export const MAX_SLUG_LENGTH = 20;
|
|
3
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
4
|
+
/**
|
|
5
|
+
* Builds a short filesystem-safe slug from text.
|
|
6
|
+
* Uses only the first line, truncated to {@link MAX_SLUG_LENGTH}.
|
|
7
|
+
*/
|
|
8
|
+
export function slugifyText(text) {
|
|
9
|
+
const firstLine = text.trim().split(/\r?\n/)[0] ?? "";
|
|
10
|
+
return sanitizeProjectId(firstLine.trim().slice(0, MAX_SLUG_LENGTH));
|
|
11
|
+
}
|
|
12
|
+
function datePrefix(date, includeSeconds) {
|
|
13
|
+
const y = date.getFullYear();
|
|
14
|
+
const m = pad(date.getMonth() + 1);
|
|
15
|
+
const d = pad(date.getDate());
|
|
16
|
+
const time = `${pad(date.getHours())}${pad(date.getMinutes())}${includeSeconds ? pad(date.getSeconds()) : ""}`;
|
|
17
|
+
return `${y}-${m}-${d}-${time}`;
|
|
18
|
+
}
|
|
19
|
+
/** Local-time prefix `YYYY-MM-DD-HHmm` (legacy minute precision). */
|
|
20
|
+
export function dateMinutePrefix(date) {
|
|
21
|
+
return datePrefix(date, false);
|
|
22
|
+
}
|
|
23
|
+
/** Local-time prefix `YYYY-MM-DD-HHmmss` for sortable filenames. */
|
|
24
|
+
export function dateSecondPrefix(date) {
|
|
25
|
+
return datePrefix(date, true);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* @deprecated Prefer {@link dateSecondPrefix} (hyphenated date + time).
|
|
29
|
+
* Legacy `YYYY-MM-DD-HH-mm-ss` form.
|
|
30
|
+
*/
|
|
31
|
+
export function timestampSlug(date = new Date()) {
|
|
32
|
+
return [
|
|
33
|
+
date.getFullYear(),
|
|
34
|
+
pad(date.getMonth() + 1),
|
|
35
|
+
pad(date.getDate()),
|
|
36
|
+
pad(date.getHours()),
|
|
37
|
+
pad(date.getMinutes()),
|
|
38
|
+
pad(date.getSeconds()),
|
|
39
|
+
].join("-");
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Filename stem: `YYYY-MM-DD-HHmmss` plus optional slug from `title`, else from `text`.
|
|
43
|
+
* Returns the date prefix alone when the slug is empty.
|
|
44
|
+
*/
|
|
45
|
+
export function timestampedBasename(text, options = {}) {
|
|
46
|
+
const now = options.now ?? new Date();
|
|
47
|
+
const shortSlug = options.title ? slugifyText(options.title) : slugifyText(text);
|
|
48
|
+
const prefix = dateSecondPrefix(now);
|
|
49
|
+
return shortSlug ? `${prefix}-${shortSlug}` : prefix;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated Alias of {@link timestampedBasename} (always second precision).
|
|
53
|
+
*/
|
|
54
|
+
export function timestampedBasenameWithSeconds(text, options = {}) {
|
|
55
|
+
return timestampedBasename(text, options);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Numeric collision suffix for a basename that already exists.
|
|
59
|
+
* Uses `_` so `base_02.md` sorts after `base.md` lexicographically
|
|
60
|
+
* (`_` > `.`), keeping filename-desc “newest first” correct.
|
|
61
|
+
* Zero-padded to 2 digits so `_02` < `_10`.
|
|
62
|
+
*/
|
|
63
|
+
export function collisionSuffix(n) {
|
|
64
|
+
return `_${String(n).padStart(2, "0")}`;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=timestamp-slug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamp-slug.js","sourceRoot":"","sources":["../../src/util/timestamp-slug.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../src/util/yaml.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOtD"}
|