grounder 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/README.md +179 -66
  2. package/dist/agents/claude.d.ts +1 -0
  3. package/dist/agents/claude.d.ts.map +1 -1
  4. package/dist/agents/claude.js +37 -13
  5. package/dist/agents/claude.js.map +1 -1
  6. package/dist/agents/cursor.d.ts +1 -0
  7. package/dist/agents/cursor.d.ts.map +1 -1
  8. package/dist/agents/cursor.js +37 -13
  9. package/dist/agents/cursor.js.map +1 -1
  10. package/dist/agents/hook-runtime.d.ts +65 -21
  11. package/dist/agents/hook-runtime.d.ts.map +1 -1
  12. package/dist/agents/hook-runtime.js +172 -31
  13. package/dist/agents/hook-runtime.js.map +1 -1
  14. package/dist/agents/index.d.ts +18 -0
  15. package/dist/agents/index.d.ts.map +1 -1
  16. package/dist/agents/index.js +27 -4
  17. package/dist/agents/index.js.map +1 -1
  18. package/dist/agents/install-command.d.ts +35 -0
  19. package/dist/agents/install-command.d.ts.map +1 -0
  20. package/dist/agents/install-command.js +65 -0
  21. package/dist/agents/install-command.js.map +1 -0
  22. package/dist/agents/types.d.ts +19 -1
  23. package/dist/agents/types.d.ts.map +1 -1
  24. package/dist/cli.js +62 -60
  25. package/dist/cli.js.map +1 -1
  26. package/dist/commands/apply-agent-installs.d.ts +34 -0
  27. package/dist/commands/apply-agent-installs.d.ts.map +1 -0
  28. package/dist/commands/apply-agent-installs.js +137 -0
  29. package/dist/commands/apply-agent-installs.js.map +1 -0
  30. package/dist/commands/doctor.d.ts.map +1 -1
  31. package/dist/commands/doctor.js +278 -60
  32. package/dist/commands/doctor.js.map +1 -1
  33. package/dist/commands/handoff/list.d.ts +15 -7
  34. package/dist/commands/handoff/list.d.ts.map +1 -1
  35. package/dist/commands/handoff/list.js +21 -13
  36. package/dist/commands/handoff/list.js.map +1 -1
  37. package/dist/commands/handoff/peek.d.ts +5 -2
  38. package/dist/commands/handoff/peek.d.ts.map +1 -1
  39. package/dist/commands/handoff/peek.js +47 -6
  40. package/dist/commands/handoff/peek.js.map +1 -1
  41. package/dist/commands/handoff.d.ts.map +1 -1
  42. package/dist/commands/handoff.js +5 -0
  43. package/dist/commands/handoff.js.map +1 -1
  44. package/dist/commands/migrate.d.ts +23 -0
  45. package/dist/commands/migrate.d.ts.map +1 -0
  46. package/dist/commands/migrate.js +104 -0
  47. package/dist/commands/migrate.js.map +1 -0
  48. package/dist/commands/note/list.d.ts +28 -0
  49. package/dist/commands/note/list.d.ts.map +1 -0
  50. package/dist/commands/note/list.js +72 -0
  51. package/dist/commands/note/list.js.map +1 -0
  52. package/dist/commands/note.d.ts.map +1 -1
  53. package/dist/commands/note.js +6 -1
  54. package/dist/commands/note.js.map +1 -1
  55. package/dist/commands/output.d.ts +27 -0
  56. package/dist/commands/output.d.ts.map +1 -0
  57. package/dist/commands/output.js +51 -0
  58. package/dist/commands/output.js.map +1 -0
  59. package/dist/commands/package-version-notice.d.ts +18 -0
  60. package/dist/commands/package-version-notice.d.ts.map +1 -0
  61. package/dist/commands/package-version-notice.js +39 -0
  62. package/dist/commands/package-version-notice.js.map +1 -0
  63. package/dist/commands/path/logs.d.ts +1 -1
  64. package/dist/commands/path/logs.d.ts.map +1 -1
  65. package/dist/commands/path/logs.js +6 -1
  66. package/dist/commands/path/logs.js.map +1 -1
  67. package/dist/commands/path/notes.d.ts +1 -1
  68. package/dist/commands/path/notes.d.ts.map +1 -1
  69. package/dist/commands/path/notes.js +6 -1
  70. package/dist/commands/path/notes.js.map +1 -1
  71. package/dist/commands/path/plans.d.ts +7 -0
  72. package/dist/commands/path/plans.d.ts.map +1 -0
  73. package/dist/commands/path/plans.js +22 -0
  74. package/dist/commands/path/plans.js.map +1 -0
  75. package/dist/commands/plan/list.d.ts +31 -0
  76. package/dist/commands/plan/list.d.ts.map +1 -0
  77. package/dist/commands/plan/list.js +75 -0
  78. package/dist/commands/plan/list.js.map +1 -0
  79. package/dist/commands/plan.d.ts +34 -0
  80. package/dist/commands/plan.d.ts.map +1 -0
  81. package/dist/commands/plan.js +121 -0
  82. package/dist/commands/plan.js.map +1 -0
  83. package/dist/commands/repo/init.d.ts.map +1 -1
  84. package/dist/commands/repo/init.js +12 -1
  85. package/dist/commands/repo/init.js.map +1 -1
  86. package/dist/commands/status.d.ts +1 -1
  87. package/dist/commands/status.d.ts.map +1 -1
  88. package/dist/commands/status.js +62 -18
  89. package/dist/commands/status.js.map +1 -1
  90. package/dist/commands/upgrade-banner.d.ts +9 -0
  91. package/dist/commands/upgrade-banner.d.ts.map +1 -0
  92. package/dist/commands/upgrade-banner.js +27 -0
  93. package/dist/commands/upgrade-banner.js.map +1 -0
  94. package/dist/commands/vault/init.d.ts.map +1 -1
  95. package/dist/commands/vault/init.js +18 -29
  96. package/dist/commands/vault/init.js.map +1 -1
  97. package/dist/connector/repo.d.ts +2 -0
  98. package/dist/connector/repo.d.ts.map +1 -1
  99. package/dist/connector/repo.js +12 -1
  100. package/dist/connector/repo.js.map +1 -1
  101. package/dist/connector/state.d.ts +86 -0
  102. package/dist/connector/state.d.ts.map +1 -0
  103. package/dist/connector/state.js +171 -0
  104. package/dist/connector/state.js.map +1 -0
  105. package/dist/connector/unsupported-schema.d.ts +9 -0
  106. package/dist/connector/unsupported-schema.d.ts.map +1 -0
  107. package/dist/connector/unsupported-schema.js +14 -0
  108. package/dist/connector/unsupported-schema.js.map +1 -0
  109. package/dist/connector/vault.d.ts +2 -0
  110. package/dist/connector/vault.d.ts.map +1 -1
  111. package/dist/connector/vault.js +6 -1
  112. package/dist/connector/vault.js.map +1 -1
  113. package/dist/help.d.ts +45 -0
  114. package/dist/help.d.ts.map +1 -0
  115. package/dist/help.js +368 -0
  116. package/dist/help.js.map +1 -0
  117. package/dist/util/fs.d.ts +6 -0
  118. package/dist/util/fs.d.ts.map +1 -1
  119. package/dist/util/fs.js +15 -1
  120. package/dist/util/fs.js.map +1 -1
  121. package/dist/util/hash.d.ts +3 -0
  122. package/dist/util/hash.d.ts.map +1 -0
  123. package/dist/util/hash.js +6 -0
  124. package/dist/util/hash.js.map +1 -0
  125. package/dist/util/parse-args.d.ts.map +1 -1
  126. package/dist/util/parse-args.js +11 -2
  127. package/dist/util/parse-args.js.map +1 -1
  128. package/dist/util/path.d.ts +10 -0
  129. package/dist/util/path.d.ts.map +1 -1
  130. package/dist/util/path.js +31 -0
  131. package/dist/util/path.js.map +1 -1
  132. package/dist/util/plan-name.d.ts +10 -0
  133. package/dist/util/plan-name.d.ts.map +1 -0
  134. package/dist/util/plan-name.js +18 -0
  135. package/dist/util/plan-name.js.map +1 -0
  136. package/dist/util/semver.d.ts +10 -0
  137. package/dist/util/semver.d.ts.map +1 -0
  138. package/dist/util/semver.js +40 -0
  139. package/dist/util/semver.js.map +1 -0
  140. package/dist/vault/layout.d.ts +2 -0
  141. package/dist/vault/layout.d.ts.map +1 -1
  142. package/dist/vault/layout.js +4 -0
  143. package/dist/vault/layout.js.map +1 -1
  144. package/dist/vault/list-notes.d.ts +15 -0
  145. package/dist/vault/list-notes.d.ts.map +1 -0
  146. package/dist/vault/list-notes.js +44 -0
  147. package/dist/vault/list-notes.js.map +1 -0
  148. package/dist/vault/list-plans.d.ts +11 -0
  149. package/dist/vault/list-plans.d.ts.map +1 -0
  150. package/dist/vault/list-plans.js +40 -0
  151. package/dist/vault/list-plans.js.map +1 -0
  152. package/dist/vault/write-plan.d.ts +28 -0
  153. package/dist/vault/write-plan.d.ts.map +1 -0
  154. package/dist/vault/write-plan.js +61 -0
  155. package/dist/vault/write-plan.js.map +1 -0
  156. package/package.json +5 -3
  157. package/templates/agents/claude/commands/grounder-note.md +25 -3
  158. package/templates/agents/claude/commands/grounder-plan.md +69 -0
  159. package/templates/agents/claude/commands/grounder-task-handoff.md +3 -3
  160. package/templates/agents/claude/commands/grounder-task.md +5 -3
  161. package/templates/agents/cursor/commands/grounder-note.md +26 -4
  162. package/templates/agents/cursor/commands/grounder-plan.md +69 -0
  163. package/templates/agents/cursor/commands/grounder-task-handoff.md +4 -4
  164. package/templates/agents/cursor/commands/grounder-task.md +6 -4
  165. package/templates/vault/plan.md +16 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/connector/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * On-disk schema/version is newer than this binary understands (git-style hard
3
+ * stop). Distinct from corrupt data — fix is upgrade grounder, not reinit.
4
+ */
5
+ export declare class UnsupportedSchemaError extends Error {
6
+ constructor(message: string);
7
+ }
8
+ export declare function isUnsupportedSchemaError(error: unknown): error is UnsupportedSchemaError;
9
+ //# sourceMappingURL=unsupported-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsupported-schema.d.ts","sourceRoot":"","sources":["../../src/connector/unsupported-schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,sBAAsB,CAExF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * On-disk schema/version is newer than this binary understands (git-style hard
3
+ * stop). Distinct from corrupt data — fix is upgrade grounder, not reinit.
4
+ */
5
+ export class UnsupportedSchemaError extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = "UnsupportedSchemaError";
9
+ }
10
+ }
11
+ export function isUnsupportedSchemaError(error) {
12
+ return error instanceof UnsupportedSchemaError;
13
+ }
14
+ //# sourceMappingURL=unsupported-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsupported-schema.js","sourceRoot":"","sources":["../../src/connector/unsupported-schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,KAAK,YAAY,sBAAsB,CAAC;AACjD,CAAC"}
@@ -9,4 +9,6 @@ export declare function resolveVaultRoot(home: HomeConfig, override?: string): s
9
9
  export declare function resolveNotesDir(home: HomeConfig, repo: RepoConfig, vaultOverride?: string): string;
10
10
  /** Project logs (handoff) directory under the effective vault root. */
11
11
  export declare function resolveLogsDir(home: HomeConfig, repo: RepoConfig, vaultOverride?: string): string;
12
+ /** Project plans directory under the effective vault root. */
13
+ export declare function resolvePlansDir(home: HomeConfig, repo: RepoConfig, vaultOverride?: string): string;
12
14
  //# sourceMappingURL=vault.d.ts.map
@@ -1 +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"}
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;AAED,8DAA8D;AAC9D,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAGR"}
@@ -1,6 +1,6 @@
1
1
  // Config-aware vault resolution: effective vault root and artifact paths from connector state.
2
2
  import { resolveUserPath } from "../util/path.js";
3
- import { logsDir, notesDir } from "../vault/layout.js";
3
+ import { logsDir, notesDir, plansDir } from "../vault/layout.js";
4
4
  /**
5
5
  * Effective vault root, in order: explicit `override`, `GROUNDER_VAULT`, then home config.
6
6
  * Expands a leading `~` so vault paths like `~/Documents/…` resolve to the user home.
@@ -24,4 +24,9 @@ export function resolveLogsDir(home, repo, vaultOverride) {
24
24
  const vaultRoot = resolveVaultRoot(home, vaultOverride);
25
25
  return logsDir(vaultRoot, repo.projectId);
26
26
  }
27
+ /** Project plans directory under the effective vault root. */
28
+ export function resolvePlansDir(home, repo, vaultOverride) {
29
+ const vaultRoot = resolveVaultRoot(home, vaultOverride);
30
+ return plansDir(vaultRoot, repo.projectId);
31
+ }
27
32
  //# sourceMappingURL=vault.js.map
@@ -1 +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"}
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,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAIjE;;;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;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"}
package/dist/help.d.ts ADDED
@@ -0,0 +1,45 @@
1
+ /** Help tiers and command metadata for the grounder CLI. */
2
+ export type HelpGroup = "Setup" | "Write" | "Paths" | "Maintain" | "Advanced";
3
+ export interface CommandMeta {
4
+ /** Canonical id (`note`, `handoff list`, `vault init`, …). */
5
+ id: string;
6
+ group: HelpGroup;
7
+ /** One-line summary for synopsis / full command lists. */
8
+ summary: string;
9
+ /** Usage line shown in per-command help (no `Usage:` prefix). */
10
+ usage: string;
11
+ /** Synopsis / full-list left column (no `grounder ` prefix). */
12
+ listUsage: string;
13
+ /** Flag / detail block for per-command help. */
14
+ flags?: string;
15
+ /** Include in synopsis and full command lists (default true). */
16
+ list?: boolean;
17
+ }
18
+ /**
19
+ * Single registry driving synopsis, full help, and per-command help so they
20
+ * cannot drift from each other (or from the dispatcher ids).
21
+ */
22
+ export declare const COMMANDS: readonly CommandMeta[];
23
+ /**
24
+ * Command ids the CLI dispatches (including parent topics). Keep in sync with
25
+ * `cli.ts` / `helpExitCode(...)` call sites — the invariant test locks this.
26
+ */
27
+ export declare const DISPATCHED_COMMAND_IDS: readonly ["vault", "vault init", "init", "note", "note list", "handoff", "handoff list", "handoff peek", "plan", "plan list", "path", "path notes", "path logs", "path plans", "status", "doctor", "migrate", "help"];
28
+ /** True when argv contains an exact `-h` or `--help` token. */
29
+ export declare function wantsHelp(argv: string[]): boolean;
30
+ /**
31
+ * Resolve a help topic from argv segments after `help`, longest match first
32
+ * (e.g. `handoff list` before `handoff`).
33
+ */
34
+ export declare function resolveCommandHelp(segments: string[]): CommandMeta | undefined;
35
+ export declare function printCommandHelp(meta: CommandMeta): void;
36
+ export declare function printCommandHelpById(id: string): void;
37
+ /** If argv asks for help, print per-command help and return 0; else null. */
38
+ export declare function helpExitCode(argv: string[], commandId: string): number | null;
39
+ /** Bare `grounder` / `-h` — short grouped synopsis (no flag encyclopedia). */
40
+ export declare function printSynopsis(): void;
41
+ /** `--help` / `grounder help` with no args — one-shot reference for humans/agents. */
42
+ export declare function printFullHelp(): void;
43
+ /** `grounder help [topic…]` — full help or per-command. */
44
+ export declare function runHelp(argv: string[]): number;
45
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAE9E,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAaD;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,WAAW,EAkM1C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,uNAmBzB,CAAC;AAIX,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,SAAS,CAY9E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CASxD;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAMrD;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM7E;AAgDD,8EAA8E;AAC9E,wBAAgB,aAAa,IAAI,IAAI,CAepC;AAED,sFAAsF;AACtF,wBAAgB,aAAa,IAAI,IAAI,CAepC;AAED,2DAA2D;AAC3D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAe9C"}
package/dist/help.js ADDED
@@ -0,0 +1,368 @@
1
+ /** Help tiers and command metadata for the grounder CLI. */
2
+ const GROUP_ORDER = ["Setup", "Write", "Paths", "Maintain", "Advanced"];
3
+ const QUICKSTART = `Quickstart:
4
+ grounder vault init <path-to-your-vault>
5
+ grounder init
6
+ grounder note "my first note"
7
+ grounder handoff $'# Handoff\\n\\n## Next\\n1. …'
8
+ grounder handoff list
9
+ grounder plan $'# Goal\\n\\nShip it' --title phase-1
10
+ grounder plan list`;
11
+ /**
12
+ * Single registry driving synopsis, full help, and per-command help so they
13
+ * cannot drift from each other (or from the dispatcher ids).
14
+ */
15
+ export const COMMANDS = [
16
+ {
17
+ id: "vault",
18
+ group: "Setup",
19
+ summary: "Vault setup commands",
20
+ listUsage: "vault init <path>",
21
+ usage: "grounder vault init <path> [--yes] [--force] [--agent <id>] [--hooks]",
22
+ list: false,
23
+ flags: `Subcommands:
24
+ vault init Initialize vault + home config (once per machine)`,
25
+ },
26
+ {
27
+ id: "vault init",
28
+ group: "Setup",
29
+ summary: "Initialize vault + home config (once per machine)",
30
+ listUsage: "vault init <path>",
31
+ usage: "grounder vault init <path> [--yes] [--force] [--agent <id>] [--hooks]",
32
+ flags: `Flags:
33
+ --yes Skip confirmation prompts
34
+ --force Overwrite existing home config / generated files
35
+ --agent <id> Install for a specific agent (repeatable; default: auto-detect)
36
+ Supported: cursor, claude
37
+ --hooks Also install session-start teaser hooks`,
38
+ },
39
+ {
40
+ id: "init",
41
+ group: "Setup",
42
+ summary: "Connect the current repo to your vault",
43
+ listUsage: "init",
44
+ usage: "grounder init [--yes] [--force] [--id <id>] [--vault <path>]",
45
+ flags: `Flags:
46
+ --yes Skip confirmation prompts
47
+ --force Overwrite an existing link marker
48
+ --id <id> Override detected project id
49
+ --vault <path> Override home vault root for this run`,
50
+ },
51
+ {
52
+ id: "note",
53
+ group: "Write",
54
+ summary: "Write a note to the vault",
55
+ listUsage: "note <text>",
56
+ usage: "grounder note <text> [--title <slug>]",
57
+ flags: `Flags:
58
+ --title <slug> Short slug in filename (default: slugified first line)
59
+
60
+ Subcommands:
61
+ note list Print recent notes (count header + numbered title/path, newest first)`,
62
+ },
63
+ {
64
+ id: "note list",
65
+ group: "Write",
66
+ summary: "Print recent notes (count header + numbered title/path, newest first)",
67
+ listUsage: "note list",
68
+ usage: "grounder note list [--limit <n>]",
69
+ flags: `Flags:
70
+ --limit <n> Max notes to print (default: 5)`,
71
+ },
72
+ {
73
+ id: "handoff",
74
+ group: "Write",
75
+ summary: "Write a session handoff to vault logs/",
76
+ listUsage: "handoff <text>",
77
+ usage: "grounder handoff <text> [--title <slug>]",
78
+ flags: `Flags:
79
+ --title <slug> Short slug in filename (default: slugified first line)
80
+
81
+ Subcommands:
82
+ handoff list Print recent handoffs (count header + numbered title/path, newest first)
83
+ handoff peek One-line latest-handoff teaser (session hooks)`,
84
+ },
85
+ {
86
+ id: "handoff list",
87
+ group: "Write",
88
+ summary: "Print recent handoffs (count header + numbered title/path, newest first)",
89
+ listUsage: "handoff list",
90
+ usage: "grounder handoff list [--limit <n>] [--head]",
91
+ flags: `Flags:
92
+ --limit <n> Max handoffs to print (default: 5)
93
+ --head Print only the newest usable path
94
+ (skips empty/unreadable files; same pick as handoff peek)`,
95
+ },
96
+ {
97
+ id: "plan",
98
+ group: "Write",
99
+ summary: "Write/update a named plan under vault plans/",
100
+ listUsage: "plan <text>",
101
+ usage: "grounder plan <text> (--title <name> [--force] | --path <file>)",
102
+ flags: `Flags:
103
+ --title <name> Required filename stem when creating/updating by name
104
+ (trailing .md ok; sanitized, max 80 chars)
105
+ --path <file> Update an existing plan by path (must resolve under this
106
+ project's plans/; no title sanitization; always overwrites)
107
+ --force With --title: overwrite an existing plan (preserves created)
108
+
109
+ Subcommands:
110
+ plan list Print recent plans (count header + numbered title/path, newest first)`,
111
+ },
112
+ {
113
+ id: "plan list",
114
+ group: "Write",
115
+ summary: "Print recent plans (count header + numbered title/path, newest first)",
116
+ listUsage: "plan list",
117
+ usage: "grounder plan list [--limit <n>]",
118
+ flags: `Flags:
119
+ --limit <n> Max plans to print (default: 5)`,
120
+ },
121
+ {
122
+ id: "path notes",
123
+ group: "Paths",
124
+ summary: "Print resolved notes directory",
125
+ listUsage: "path notes",
126
+ usage: "grounder path notes",
127
+ },
128
+ {
129
+ id: "path logs",
130
+ group: "Paths",
131
+ summary: "Print resolved logs directory",
132
+ listUsage: "path logs",
133
+ usage: "grounder path logs",
134
+ },
135
+ {
136
+ id: "path plans",
137
+ group: "Paths",
138
+ summary: "Print resolved plans directory",
139
+ listUsage: "path plans",
140
+ usage: "grounder path plans",
141
+ },
142
+ {
143
+ id: "path",
144
+ group: "Paths",
145
+ summary: "Print a resolved vault directory for the linked project",
146
+ listUsage: "path <notes|logs|plans>",
147
+ usage: "grounder path <notes|logs|plans>",
148
+ list: false,
149
+ flags: `Subcommands:
150
+ path notes Print resolved notes directory
151
+ path logs Print resolved logs directory
152
+ path plans Print resolved plans directory`,
153
+ },
154
+ {
155
+ id: "status",
156
+ group: "Maintain",
157
+ summary: "Snapshot of machine + project link + resolved paths",
158
+ listUsage: "status",
159
+ usage: "grounder status",
160
+ },
161
+ {
162
+ id: "doctor",
163
+ group: "Maintain",
164
+ summary: "Health checks with fix hints",
165
+ listUsage: "doctor",
166
+ usage: "grounder doctor [--global]",
167
+ flags: `Flags:
168
+ --global Machine-only checks (skip project/link checks)`,
169
+ },
170
+ {
171
+ id: "migrate",
172
+ group: "Maintain",
173
+ summary: "Refresh agent install after upgrading grounder",
174
+ listUsage: "migrate",
175
+ usage: "grounder migrate [--force] [--dry-run] [--agent <id>] [--hooks]",
176
+ flags: `Flags:
177
+ --force Overwrite command files you edited locally; also needed
178
+ once when upgrading from Grounder before 0.3
179
+ --dry-run Preview without writing
180
+ --agent <id> Limit to a specific agent (repeatable)
181
+ --hooks Also install hooks if not previously installed`,
182
+ },
183
+ {
184
+ id: "handoff peek",
185
+ group: "Advanced",
186
+ summary: "One-line latest-handoff teaser (used by session hooks)",
187
+ listUsage: "handoff peek",
188
+ usage: "grounder handoff peek [--json]",
189
+ flags: `Flags:
190
+ --json Emit one JSON line for Cursor sessionStart
191
+ ({ additional_context } or {})`,
192
+ },
193
+ {
194
+ id: "help",
195
+ group: "Maintain",
196
+ summary: "Show help (full reference / per-command)",
197
+ listUsage: "help [<command>]",
198
+ usage: "grounder help [<command>]",
199
+ list: false,
200
+ flags: `With no args, prints the full reference (same as --help).
201
+ With a command id, prints that command's usage and flags.
202
+
203
+ Examples:
204
+ grounder help
205
+ grounder help note
206
+ grounder help handoff list
207
+ grounder help vault init`,
208
+ },
209
+ ];
210
+ /**
211
+ * Command ids the CLI dispatches (including parent topics). Keep in sync with
212
+ * `cli.ts` / `helpExitCode(...)` call sites — the invariant test locks this.
213
+ */
214
+ export const DISPATCHED_COMMAND_IDS = [
215
+ "vault",
216
+ "vault init",
217
+ "init",
218
+ "note",
219
+ "note list",
220
+ "handoff",
221
+ "handoff list",
222
+ "handoff peek",
223
+ "plan",
224
+ "plan list",
225
+ "path",
226
+ "path notes",
227
+ "path logs",
228
+ "path plans",
229
+ "status",
230
+ "doctor",
231
+ "migrate",
232
+ "help",
233
+ ];
234
+ const byId = new Map(COMMANDS.map((c) => [c.id, c]));
235
+ /** True when argv contains an exact `-h` or `--help` token. */
236
+ export function wantsHelp(argv) {
237
+ return argv.some((arg) => arg === "-h" || arg === "--help");
238
+ }
239
+ /**
240
+ * Resolve a help topic from argv segments after `help`, longest match first
241
+ * (e.g. `handoff list` before `handoff`).
242
+ */
243
+ export function resolveCommandHelp(segments) {
244
+ if (segments.length === 0) {
245
+ return undefined;
246
+ }
247
+ for (let len = segments.length; len >= 1; len--) {
248
+ const id = segments.slice(0, len).join(" ");
249
+ const meta = byId.get(id);
250
+ if (meta) {
251
+ return meta;
252
+ }
253
+ }
254
+ return undefined;
255
+ }
256
+ export function printCommandHelp(meta) {
257
+ let out = `Usage: ${meta.usage}\n`;
258
+ if (meta.summary) {
259
+ out += `\n${meta.summary}\n`;
260
+ }
261
+ if (meta.flags) {
262
+ out += `\n${meta.flags}\n`;
263
+ }
264
+ process.stdout.write(out);
265
+ }
266
+ export function printCommandHelpById(id) {
267
+ const meta = byId.get(id);
268
+ if (!meta) {
269
+ throw new Error(`Unknown help id: ${id}`);
270
+ }
271
+ printCommandHelp(meta);
272
+ }
273
+ /** If argv asks for help, print per-command help and return 0; else null. */
274
+ export function helpExitCode(argv, commandId) {
275
+ if (!wantsHelp(argv)) {
276
+ return null;
277
+ }
278
+ printCommandHelpById(commandId);
279
+ return 0;
280
+ }
281
+ function listedCommands() {
282
+ return COMMANDS.filter((c) => c.list !== false);
283
+ }
284
+ function formatGroupedLists() {
285
+ const listed = listedCommands();
286
+ const width = Math.max(...listed.map((c) => c.listUsage.length));
287
+ const blocks = [];
288
+ for (const group of GROUP_ORDER) {
289
+ const cmds = listed.filter((c) => c.group === group);
290
+ if (cmds.length === 0) {
291
+ continue;
292
+ }
293
+ const lines = cmds.map((c) => ` ${c.listUsage.padEnd(width)} ${c.summary}`);
294
+ blocks.push(`${group}:\n${lines.join("\n")}`);
295
+ }
296
+ return blocks.join("\n\n");
297
+ }
298
+ function formatCommandDetail(c) {
299
+ const lines = [`${c.id}`, ` Usage: ${c.usage}`];
300
+ if (c.flags) {
301
+ for (const line of c.flags.split("\n")) {
302
+ lines.push(line.length > 0 ? ` ${line}` : "");
303
+ }
304
+ }
305
+ return lines.join("\n");
306
+ }
307
+ function formatFullCommandDetails() {
308
+ const listed = listedCommands().filter((c) => c.id !== "help");
309
+ const blocks = [];
310
+ for (const group of GROUP_ORDER) {
311
+ const cmds = listed.filter((c) => c.group === group);
312
+ if (cmds.length === 0) {
313
+ continue;
314
+ }
315
+ blocks.push(`${group}\n${cmds.map(formatCommandDetail).join("\n\n")}`);
316
+ }
317
+ return blocks.join("\n\n");
318
+ }
319
+ /** Bare `grounder` / `-h` — short grouped synopsis (no flag encyclopedia). */
320
+ export function printSynopsis() {
321
+ process.stdout.write(`grounder — connect git projects to Obsidian dev vaults for AI agents
322
+
323
+ ${formatGroupedLists()}
324
+
325
+ Global options:
326
+ -h Short synopsis (this text)
327
+ --help Full reference (all commands + flags)
328
+ -v, --version Show version
329
+
330
+ Run \`grounder help <command>\` for one command's flags.
331
+ Run \`grounder --help\` for the full reference.
332
+
333
+ ${QUICKSTART}
334
+ `);
335
+ }
336
+ /** `--help` / `grounder help` with no args — one-shot reference for humans/agents. */
337
+ export function printFullHelp() {
338
+ process.stdout.write(`grounder — connect git projects to Obsidian dev vaults for AI agents
339
+
340
+ ${formatGroupedLists()}
341
+
342
+ Global options:
343
+ -h Short synopsis
344
+ --help This full reference
345
+ -v, --version Show version
346
+
347
+ Commands:
348
+ ${formatFullCommandDetails()}
349
+
350
+ ${QUICKSTART}
351
+ `);
352
+ }
353
+ /** `grounder help [topic…]` — full help or per-command. */
354
+ export function runHelp(argv) {
355
+ if (argv.length === 0 || wantsHelp(argv)) {
356
+ printFullHelp();
357
+ return 0;
358
+ }
359
+ const meta = resolveCommandHelp(argv);
360
+ if (!meta) {
361
+ process.stderr.write(`Unknown help topic: ${argv.join(" ")}\n`);
362
+ process.stderr.write("Run `grounder --help` for a list of commands.\n");
363
+ return 1;
364
+ }
365
+ printCommandHelp(meta);
366
+ return 0;
367
+ }
368
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
package/dist/util/fs.d.ts CHANGED
@@ -1,4 +1,10 @@
1
1
  export declare function fileExists(filePath: string): Promise<boolean>;
2
+ /**
3
+ * True when `filePath` is present and executable (`X_OK`).
4
+ * On Windows, `X_OK` effectively degrades toward existence — callers should
5
+ * not oversell POSIX execute-bit semantics there.
6
+ */
7
+ export declare function isExecutable(filePath: string): Promise<boolean>;
2
8
  /**
3
9
  * Creates a new markdown file under `dir`; never overwrites.
4
10
  * Tries `basename.md`, then `basename_02.md`, `_03`, … with `wx` (O_EXCL)
@@ -1 +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"}
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,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrE;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 CHANGED
@@ -1,4 +1,4 @@
1
- import { access, writeFile } from "node:fs/promises";
1
+ import { access, constants, writeFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { collisionSuffix } from "./timestamp-slug.js";
4
4
  export async function fileExists(filePath) {
@@ -10,6 +10,20 @@ export async function fileExists(filePath) {
10
10
  return false;
11
11
  }
12
12
  }
13
+ /**
14
+ * True when `filePath` is present and executable (`X_OK`).
15
+ * On Windows, `X_OK` effectively degrades toward existence — callers should
16
+ * not oversell POSIX execute-bit semantics there.
17
+ */
18
+ export async function isExecutable(filePath) {
19
+ try {
20
+ await access(filePath, constants.X_OK);
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
13
27
  /**
14
28
  * Creates a new markdown file under `dir`; never overwrites.
15
29
  * Tries `basename.md`, then `basename_02.md`, `_03`, … with `wx` (O_EXCL)
@@ -1 +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"}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/util/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChE,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,YAAY,CAAC,QAAgB;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,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,3 @@
1
+ /** SHA-256 of UTF-8 content, prefixed `sha256:` for ledger storage. */
2
+ export declare function hashContent(content: string): string;
3
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/util/hash.ts"],"names":[],"mappings":"AAEA,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,6 @@
1
+ import { createHash } from "node:crypto";
2
+ /** SHA-256 of UTF-8 content, prefixed `sha256:` for ledger storage. */
3
+ export function hashContent(content) {
4
+ return `sha256:${createHash("sha256").update(content, "utf8").digest("hex")}`;
5
+ }
6
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/util/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,uEAAuE;AACvE,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAChF,CAAC"}
@@ -1 +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"}
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;AAOD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAoCpD;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"}
@@ -1,10 +1,19 @@
1
+ /** Long options only: `--title`, `--dry-run`. Not `---` / markdown / YAML bodies. */
2
+ const LONG_OPTION = /^--[a-zA-Z][\w-]*$/;
3
+ /** Short options only: `-f`, `-fy`. Not markdown bullets like `- item`. */
4
+ const SHORT_OPTION = /^-[a-zA-Z]+$/;
1
5
  export function parseArgs(argv) {
2
6
  const positional = [];
3
7
  const flags = new Map();
4
8
  const repeated = new Map();
5
9
  for (let i = 0; i < argv.length; i++) {
6
10
  const arg = argv[i];
7
- if (arg.startsWith("--")) {
11
+ // POSIX end-of-options: everything after is positional (including leading --).
12
+ if (arg === "--") {
13
+ positional.push(...argv.slice(i + 1));
14
+ break;
15
+ }
16
+ if (LONG_OPTION.test(arg)) {
8
17
  const key = arg.slice(2);
9
18
  const next = argv[i + 1];
10
19
  if (next !== undefined && !next.startsWith("-")) {
@@ -18,7 +27,7 @@ export function parseArgs(argv) {
18
27
  flags.set(key, true);
19
28
  }
20
29
  }
21
- else if (arg.startsWith("-") && arg.length > 1) {
30
+ else if (SHORT_OPTION.test(arg)) {
22
31
  for (const char of arg.slice(1)) {
23
32
  flags.set(char, true);
24
33
  }
@@ -1 +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"}
1
+ {"version":3,"file":"parse-args.js","sourceRoot":"","sources":["../../src/util/parse-args.ts"],"names":[],"mappings":"AAOA,qFAAqF;AACrF,MAAM,WAAW,GAAG,oBAAoB,CAAC;AACzC,2EAA2E;AAC3E,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,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;QAEpB,+EAA+E;QAC/E,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM;QACR,CAAC;QAED,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,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,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,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"}