open-wiki-spec 0.2.3 → 0.3.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 (265) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +50 -3
  3. package/dist/cli/commands/apply.d.ts.map +1 -1
  4. package/dist/cli/commands/apply.js +96 -4
  5. package/dist/cli/commands/apply.js.map +1 -1
  6. package/dist/cli/commands/archive.d.ts.map +1 -1
  7. package/dist/cli/commands/archive.js +19 -5
  8. package/dist/cli/commands/archive.js.map +1 -1
  9. package/dist/cli/commands/bulk-archive.d.ts +15 -0
  10. package/dist/cli/commands/bulk-archive.d.ts.map +1 -0
  11. package/dist/cli/commands/bulk-archive.js +97 -0
  12. package/dist/cli/commands/bulk-archive.js.map +1 -0
  13. package/dist/cli/commands/continue.d.ts.map +1 -1
  14. package/dist/cli/commands/continue.js +15 -2
  15. package/dist/cli/commands/continue.js.map +1 -1
  16. package/dist/cli/commands/error-handler.d.ts +1 -5
  17. package/dist/cli/commands/error-handler.d.ts.map +1 -1
  18. package/dist/cli/commands/error-handler.js +48 -3
  19. package/dist/cli/commands/error-handler.js.map +1 -1
  20. package/dist/cli/commands/init.d.ts +0 -3
  21. package/dist/cli/commands/init.d.ts.map +1 -1
  22. package/dist/cli/commands/init.js +22 -4
  23. package/dist/cli/commands/init.js.map +1 -1
  24. package/dist/cli/commands/list.d.ts +2 -17
  25. package/dist/cli/commands/list.d.ts.map +1 -1
  26. package/dist/cli/commands/list.js +15 -3
  27. package/dist/cli/commands/list.js.map +1 -1
  28. package/dist/cli/commands/migrate.d.ts.map +1 -1
  29. package/dist/cli/commands/migrate.js +6 -9
  30. package/dist/cli/commands/migrate.js.map +1 -1
  31. package/dist/cli/commands/propose.d.ts.map +1 -1
  32. package/dist/cli/commands/propose.js +46 -6
  33. package/dist/cli/commands/propose.js.map +1 -1
  34. package/dist/cli/commands/query.d.ts.map +1 -1
  35. package/dist/cli/commands/query.js +101 -5
  36. package/dist/cli/commands/query.js.map +1 -1
  37. package/dist/cli/commands/retrieve.d.ts +7 -0
  38. package/dist/cli/commands/retrieve.d.ts.map +1 -0
  39. package/dist/cli/commands/retrieve.js +70 -0
  40. package/dist/cli/commands/retrieve.js.map +1 -0
  41. package/dist/cli/commands/revert.d.ts +18 -0
  42. package/dist/cli/commands/revert.d.ts.map +1 -0
  43. package/dist/cli/commands/revert.js +109 -0
  44. package/dist/cli/commands/revert.js.map +1 -0
  45. package/dist/cli/commands/status.d.ts +2 -19
  46. package/dist/cli/commands/status.d.ts.map +1 -1
  47. package/dist/cli/commands/status.js +42 -3
  48. package/dist/cli/commands/status.js.map +1 -1
  49. package/dist/cli/commands/verify.d.ts.map +1 -1
  50. package/dist/cli/commands/verify.js +12 -1
  51. package/dist/cli/commands/verify.js.map +1 -1
  52. package/dist/cli/index.d.ts.map +1 -1
  53. package/dist/cli/index.js +68 -2
  54. package/dist/cli/index.js.map +1 -1
  55. package/dist/cli/init/init-engine.d.ts.map +1 -1
  56. package/dist/cli/init/init-engine.js +19 -6
  57. package/dist/cli/init/init-engine.js.map +1 -1
  58. package/dist/cli/init/meta-files.d.ts +2 -1
  59. package/dist/cli/init/meta-files.d.ts.map +1 -1
  60. package/dist/cli/init/meta-files.js +167 -8
  61. package/dist/cli/init/meta-files.js.map +1 -1
  62. package/dist/cli/init/skill-generator.d.ts +3 -0
  63. package/dist/cli/init/skill-generator.d.ts.map +1 -1
  64. package/dist/cli/init/skill-generator.js +184 -3
  65. package/dist/cli/init/skill-generator.js.map +1 -1
  66. package/dist/cli/json-envelope.d.ts +15 -0
  67. package/dist/cli/json-envelope.d.ts.map +1 -0
  68. package/dist/cli/json-envelope.js +86 -0
  69. package/dist/cli/json-envelope.js.map +1 -0
  70. package/dist/cli/schema-check.d.ts +27 -0
  71. package/dist/cli/schema-check.d.ts.map +1 -0
  72. package/dist/cli/schema-check.js +33 -0
  73. package/dist/cli/schema-check.js.map +1 -0
  74. package/dist/cli/vault-discovery.d.ts.map +1 -1
  75. package/dist/cli/vault-discovery.js +16 -2
  76. package/dist/cli/vault-discovery.js.map +1 -1
  77. package/dist/core/embedding/cache.d.ts +12 -3
  78. package/dist/core/embedding/cache.d.ts.map +1 -1
  79. package/dist/core/embedding/cache.js +42 -5
  80. package/dist/core/embedding/cache.js.map +1 -1
  81. package/dist/core/embedding/embedder.d.ts +18 -0
  82. package/dist/core/embedding/embedder.d.ts.map +1 -1
  83. package/dist/core/embedding/embedder.js +87 -10
  84. package/dist/core/embedding/embedder.js.map +1 -1
  85. package/dist/core/index/build.d.ts.map +1 -1
  86. package/dist/core/index/build.js +54 -6
  87. package/dist/core/index/build.js.map +1 -1
  88. package/dist/core/index/resolve.d.ts.map +1 -1
  89. package/dist/core/index/resolve.js +27 -12
  90. package/dist/core/index/resolve.js.map +1 -1
  91. package/dist/core/index/scan.d.ts +10 -1
  92. package/dist/core/index/scan.d.ts.map +1 -1
  93. package/dist/core/index/scan.js +59 -10
  94. package/dist/core/index/scan.js.map +1 -1
  95. package/dist/core/index/schema-version.d.ts +28 -0
  96. package/dist/core/index/schema-version.d.ts.map +1 -1
  97. package/dist/core/index/schema-version.js +47 -0
  98. package/dist/core/index/schema-version.js.map +1 -1
  99. package/dist/core/migrate/change-converter.d.ts.map +1 -1
  100. package/dist/core/migrate/change-converter.js +59 -11
  101. package/dist/core/migrate/change-converter.js.map +1 -1
  102. package/dist/core/migrate/migrate.d.ts.map +1 -1
  103. package/dist/core/migrate/migrate.js +115 -1
  104. package/dist/core/migrate/migrate.js.map +1 -1
  105. package/dist/core/migrate/sanitize.d.ts +17 -0
  106. package/dist/core/migrate/sanitize.d.ts.map +1 -0
  107. package/dist/core/migrate/sanitize.js +33 -0
  108. package/dist/core/migrate/sanitize.js.map +1 -0
  109. package/dist/core/migrate/spec-converter.d.ts.map +1 -1
  110. package/dist/core/migrate/spec-converter.js +9 -3
  111. package/dist/core/migrate/spec-converter.js.map +1 -1
  112. package/dist/core/migrate/types.d.ts +9 -0
  113. package/dist/core/migrate/types.d.ts.map +1 -1
  114. package/dist/core/parser/frontmatter-parser.d.ts +0 -6
  115. package/dist/core/parser/frontmatter-parser.d.ts.map +1 -1
  116. package/dist/core/parser/frontmatter-parser.js +59 -2
  117. package/dist/core/parser/frontmatter-parser.js.map +1 -1
  118. package/dist/core/parser/note-parser.js +15 -4
  119. package/dist/core/parser/note-parser.js.map +1 -1
  120. package/dist/core/parser/requirement-parser.js +4 -0
  121. package/dist/core/parser/requirement-parser.js.map +1 -1
  122. package/dist/core/parser/task-parser.d.ts.map +1 -1
  123. package/dist/core/parser/task-parser.js +19 -0
  124. package/dist/core/parser/task-parser.js.map +1 -1
  125. package/dist/core/parser/wikilink-parser.d.ts.map +1 -1
  126. package/dist/core/parser/wikilink-parser.js +21 -5
  127. package/dist/core/parser/wikilink-parser.js.map +1 -1
  128. package/dist/core/retrieval/classify.d.ts +11 -4
  129. package/dist/core/retrieval/classify.d.ts.map +1 -1
  130. package/dist/core/retrieval/classify.js +76 -14
  131. package/dist/core/retrieval/classify.js.map +1 -1
  132. package/dist/core/retrieval/lexical.d.ts.map +1 -1
  133. package/dist/core/retrieval/lexical.js +31 -12
  134. package/dist/core/retrieval/lexical.js.map +1 -1
  135. package/dist/core/retrieval/retrieve.d.ts.map +1 -1
  136. package/dist/core/retrieval/retrieve.js +45 -5
  137. package/dist/core/retrieval/retrieve.js.map +1 -1
  138. package/dist/core/retrieval/scoring.d.ts.map +1 -1
  139. package/dist/core/retrieval/scoring.js +37 -12
  140. package/dist/core/retrieval/scoring.js.map +1 -1
  141. package/dist/core/schema/change.schema.d.ts.map +1 -1
  142. package/dist/core/schema/change.schema.js +6 -1
  143. package/dist/core/schema/change.schema.js.map +1 -1
  144. package/dist/core/schema/feature.schema.d.ts +1 -1
  145. package/dist/core/schema/feature.schema.d.ts.map +1 -1
  146. package/dist/core/schema/feature.schema.js +1 -0
  147. package/dist/core/schema/feature.schema.js.map +1 -1
  148. package/dist/core/schema/frontmatter.d.ts +15 -0
  149. package/dist/core/schema/frontmatter.d.ts.map +1 -1
  150. package/dist/core/schema/index.d.ts +15 -0
  151. package/dist/core/schema/index.d.ts.map +1 -1
  152. package/dist/core/schema/query.schema.d.ts +15 -0
  153. package/dist/core/schema/query.schema.d.ts.map +1 -1
  154. package/dist/core/schema/query.schema.js +5 -0
  155. package/dist/core/schema/query.schema.js.map +1 -1
  156. package/dist/core/schema/templates.d.ts +0 -4
  157. package/dist/core/schema/templates.d.ts.map +1 -1
  158. package/dist/core/schema/templates.js +25 -7
  159. package/dist/core/schema/templates.js.map +1 -1
  160. package/dist/core/sequencing/analyze.d.ts.map +1 -1
  161. package/dist/core/sequencing/analyze.js +3 -1
  162. package/dist/core/sequencing/analyze.js.map +1 -1
  163. package/dist/core/sequencing/priority-queue.d.ts +9 -3
  164. package/dist/core/sequencing/priority-queue.d.ts.map +1 -1
  165. package/dist/core/sequencing/priority-queue.js +10 -4
  166. package/dist/core/sequencing/priority-queue.js.map +1 -1
  167. package/dist/core/sequencing/stale-detector.d.ts.map +1 -1
  168. package/dist/core/sequencing/stale-detector.js +5 -0
  169. package/dist/core/sequencing/stale-detector.js.map +1 -1
  170. package/dist/core/workflow/apply/apply.d.ts.map +1 -1
  171. package/dist/core/workflow/apply/apply.js +494 -55
  172. package/dist/core/workflow/apply/apply.js.map +1 -1
  173. package/dist/core/workflow/apply/delta-parser.d.ts.map +1 -1
  174. package/dist/core/workflow/apply/delta-parser.js +43 -9
  175. package/dist/core/workflow/apply/delta-parser.js.map +1 -1
  176. package/dist/core/workflow/apply/feature-updater.d.ts.map +1 -1
  177. package/dist/core/workflow/apply/feature-updater.js +27 -11
  178. package/dist/core/workflow/apply/feature-updater.js.map +1 -1
  179. package/dist/core/workflow/apply/types.d.ts +14 -0
  180. package/dist/core/workflow/apply/types.d.ts.map +1 -1
  181. package/dist/core/workflow/continue/continue.d.ts +18 -0
  182. package/dist/core/workflow/continue/continue.d.ts.map +1 -1
  183. package/dist/core/workflow/continue/continue.js +134 -15
  184. package/dist/core/workflow/continue/continue.js.map +1 -1
  185. package/dist/core/workflow/continue/next-action.d.ts.map +1 -1
  186. package/dist/core/workflow/continue/next-action.js +16 -3
  187. package/dist/core/workflow/continue/next-action.js.map +1 -1
  188. package/dist/core/workflow/continue/types.d.ts +12 -0
  189. package/dist/core/workflow/continue/types.d.ts.map +1 -1
  190. package/dist/core/workflow/propose/note-creator.d.ts +2 -2
  191. package/dist/core/workflow/propose/note-creator.d.ts.map +1 -1
  192. package/dist/core/workflow/propose/note-creator.js +89 -12
  193. package/dist/core/workflow/propose/note-creator.js.map +1 -1
  194. package/dist/core/workflow/propose/propose.d.ts.map +1 -1
  195. package/dist/core/workflow/propose/propose.js +190 -46
  196. package/dist/core/workflow/propose/propose.js.map +1 -1
  197. package/dist/core/workflow/propose/query-normalizer.d.ts.map +1 -1
  198. package/dist/core/workflow/propose/query-normalizer.js +37 -5
  199. package/dist/core/workflow/propose/query-normalizer.js.map +1 -1
  200. package/dist/core/workflow/propose/types.d.ts +15 -0
  201. package/dist/core/workflow/propose/types.d.ts.map +1 -1
  202. package/dist/core/workflow/propose/types.js +6 -1
  203. package/dist/core/workflow/propose/types.js.map +1 -1
  204. package/dist/core/workflow/query/query-note-creator.d.ts +0 -4
  205. package/dist/core/workflow/query/query-note-creator.d.ts.map +1 -1
  206. package/dist/core/workflow/query/query-note-creator.js +27 -37
  207. package/dist/core/workflow/query/query-note-creator.js.map +1 -1
  208. package/dist/core/workflow/verify/coherence.d.ts +10 -0
  209. package/dist/core/workflow/verify/coherence.d.ts.map +1 -1
  210. package/dist/core/workflow/verify/coherence.js +91 -4
  211. package/dist/core/workflow/verify/coherence.js.map +1 -1
  212. package/dist/core/workflow/verify/completeness.d.ts +1 -1
  213. package/dist/core/workflow/verify/completeness.d.ts.map +1 -1
  214. package/dist/core/workflow/verify/completeness.js +53 -10
  215. package/dist/core/workflow/verify/completeness.js.map +1 -1
  216. package/dist/core/workflow/verify/correctness.d.ts +1 -1
  217. package/dist/core/workflow/verify/correctness.d.ts.map +1 -1
  218. package/dist/core/workflow/verify/correctness.js +95 -14
  219. package/dist/core/workflow/verify/correctness.js.map +1 -1
  220. package/dist/core/workflow/verify/vault-integrity.d.ts +11 -0
  221. package/dist/core/workflow/verify/vault-integrity.d.ts.map +1 -1
  222. package/dist/core/workflow/verify/vault-integrity.js +80 -3
  223. package/dist/core/workflow/verify/vault-integrity.js.map +1 -1
  224. package/dist/core/workflow/verify/verify.d.ts +0 -5
  225. package/dist/core/workflow/verify/verify.d.ts.map +1 -1
  226. package/dist/core/workflow/verify/verify.js +54 -3
  227. package/dist/core/workflow/verify/verify.js.map +1 -1
  228. package/dist/index.d.ts +13 -0
  229. package/dist/index.d.ts.map +1 -1
  230. package/dist/index.js +11 -0
  231. package/dist/index.js.map +1 -1
  232. package/dist/types/cli-contracts.d.ts +78 -0
  233. package/dist/types/cli-contracts.d.ts.map +1 -0
  234. package/dist/types/cli-contracts.js +2 -0
  235. package/dist/types/cli-contracts.js.map +1 -0
  236. package/dist/types/error-codes.d.ts +25 -0
  237. package/dist/types/error-codes.d.ts.map +1 -0
  238. package/dist/types/error-codes.js +27 -0
  239. package/dist/types/error-codes.js.map +1 -0
  240. package/dist/types/frontmatter.d.ts +9 -2
  241. package/dist/types/frontmatter.d.ts.map +1 -1
  242. package/dist/types/next-action.d.ts +21 -0
  243. package/dist/types/next-action.d.ts.map +1 -1
  244. package/dist/types/retrieval.d.ts +17 -0
  245. package/dist/types/retrieval.d.ts.map +1 -1
  246. package/dist/types/verify.d.ts +58 -1
  247. package/dist/types/verify.d.ts.map +1 -1
  248. package/dist/types/verify.js +58 -1
  249. package/dist/types/verify.js.map +1 -1
  250. package/dist/utils/conventions.d.ts +9 -0
  251. package/dist/utils/conventions.d.ts.map +1 -0
  252. package/dist/utils/conventions.js +22 -0
  253. package/dist/utils/conventions.js.map +1 -0
  254. package/dist/utils/id-generator.d.ts.map +1 -1
  255. package/dist/utils/id-generator.js +8 -0
  256. package/dist/utils/id-generator.js.map +1 -1
  257. package/dist/utils/normalize.d.ts +7 -4
  258. package/dist/utils/normalize.d.ts.map +1 -1
  259. package/dist/utils/normalize.js +43 -6
  260. package/dist/utils/normalize.js.map +1 -1
  261. package/dist/utils/path-safety.d.ts +12 -1
  262. package/dist/utils/path-safety.d.ts.map +1 -1
  263. package/dist/utils/path-safety.js +54 -3
  264. package/dist/utils/path-safety.js.map +1 -1
  265. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/retrieve.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoE9D"}
@@ -0,0 +1,70 @@
1
+ import { handleCliError } from "./error-handler.js";
2
+ import { jsonEnvelope } from '../json-envelope.js';
3
+ export function registerRetrieveCommand(program) {
4
+ program
5
+ .command('retrieve <description>')
6
+ .description('Run a standalone retrieval scan against the vault graph (read-only)')
7
+ .option('--json', 'Output result as JSON')
8
+ .option('--keywords <list>', 'Comma-separated keywords to override automatic term extraction')
9
+ .action(async (description, opts) => {
10
+ try {
11
+ if (!description || description.trim().length === 0) {
12
+ throw new Error('Description cannot be empty. Example: ows retrieve "auth login"');
13
+ }
14
+ const { discoverVaultPath } = await import('../vault-discovery.js');
15
+ const { buildIndex } = await import('../../core/index/index.js');
16
+ const { retrieve } = await import('../../core/retrieval/index.js');
17
+ const { analyzeSequencing } = await import('../../core/sequencing/index.js');
18
+ const { parseNote } = await import('../../core/parser/index.js');
19
+ const { propose } = await import('../../core/workflow/propose/index.js');
20
+ const { readFileSync } = await import('node:fs');
21
+ const vaultPath = discoverVaultPath();
22
+ const keywordsArr = opts.keywords
23
+ ? opts.keywords.split(',').map((k) => k.trim()).filter(Boolean)
24
+ : undefined;
25
+ const result = await propose(description, {
26
+ vaultRoot: vaultPath,
27
+ dryRun: true,
28
+ keywords: keywordsArr,
29
+ }, {
30
+ buildIndex,
31
+ retrieve,
32
+ analyzeSequencing,
33
+ parseNote: (filePath) => parseNote(filePath),
34
+ readFile: (filePath) => readFileSync(filePath, 'utf-8'),
35
+ writeFile: () => { },
36
+ });
37
+ if (opts.json) {
38
+ console.log(jsonEnvelope('retrieve', result));
39
+ }
40
+ else {
41
+ const cls = result.classification;
42
+ console.log(`Classification: ${cls.classification} (confidence: ${cls.confidence})`);
43
+ console.log();
44
+ if (result.retrieval.candidates.length === 0) {
45
+ console.log('No candidates found.');
46
+ }
47
+ else {
48
+ console.log('Candidates:');
49
+ for (const c of result.retrieval.candidates.slice(0, 10)) {
50
+ console.log(` ${c.score.toString().padStart(3)} | ${c.type.padEnd(8)} | ${c.title}`);
51
+ for (const r of c.reasons) {
52
+ console.log(` ${r}`);
53
+ }
54
+ }
55
+ }
56
+ console.log();
57
+ if (result.sequencing_warnings.length > 0) {
58
+ console.log('Sequencing warnings:');
59
+ for (const w of result.sequencing_warnings) {
60
+ console.log(` - ${w}`);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ catch (err) {
66
+ handleCliError(err, opts.json);
67
+ }
68
+ });
69
+ }
70
+ //# sourceMappingURL=retrieve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieve.js","sourceRoot":"","sources":["../../../src/cli/commands/retrieve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Command } from 'commander';
2
+ import type { VaultIndex } from '../../types/index.js';
3
+ export interface RevertResult {
4
+ changeId: string;
5
+ previousStatus: string;
6
+ newStatus: 'in_progress';
7
+ warnings: string[];
8
+ }
9
+ /**
10
+ * Revert an applied change back to in_progress status.
11
+ * Physical Feature edits are NOT undone — use git for that.
12
+ */
13
+ export declare function revertChange(changeId: string, index: VaultIndex, vaultPath: string, options?: {
14
+ force?: boolean;
15
+ noLog?: boolean;
16
+ }): RevertResult;
17
+ export declare function registerRevertCommand(program: Command): void;
18
+ //# sourceMappingURL=revert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revert.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/revert.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAOvD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7C,YAAY,CAiEd;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgC5D"}
@@ -0,0 +1,109 @@
1
+ import { handleCliError } from "./error-handler.js";
2
+ /**
3
+ * CLI handler for `ows revert`.
4
+ *
5
+ * Reverts an applied change's *status* back to `in_progress` so the user can
6
+ * re-edit the Delta Summary / sections and re-run `ows apply`.
7
+ *
8
+ * Important: this does NOT undo the physical Feature note edits the apply
9
+ * already wrote. Those changes live on disk (and, ideally, in git). Users
10
+ * who need a full rollback should use git checkout/restore on the Feature
11
+ * files. The revert command is a lifecycle helper, not a filesystem rewinder.
12
+ */
13
+ import * as fs from 'node:fs';
14
+ import * as path from 'node:path';
15
+ import { discoverVaultPath } from '../vault-discovery.js';
16
+ import { warnOnUnsupportedSchema } from '../schema-check.js';
17
+ import { jsonEnvelope } from '../json-envelope.js';
18
+ import { appendLogEntry } from '../init/meta-files.js';
19
+ import { assertInsideVault } from '../../utils/path-safety.js';
20
+ /**
21
+ * Revert an applied change back to in_progress status.
22
+ * Physical Feature edits are NOT undone — use git for that.
23
+ */
24
+ export function revertChange(changeId, index, vaultPath, options) {
25
+ const change = index.records.get(changeId);
26
+ if (!change) {
27
+ throw new Error(`Change "${changeId}" not found in the vault index.`);
28
+ }
29
+ if (change.status !== 'applied') {
30
+ if (!options?.force) {
31
+ throw new Error(`Only applied changes can be reverted. "${changeId}" has status "${change.status}". ` +
32
+ `Use --force to revert a non-applied change.`);
33
+ }
34
+ }
35
+ // Reject revert of archived changes — they've been moved out of 04-changes/
36
+ // and re-running apply on them would require manual un-archiving first.
37
+ if (change.path.startsWith('wiki/99-archive/')) {
38
+ throw new Error(`Change "${changeId}" is archived. Un-archive it manually (move the file back to wiki/04-changes/) before reverting.`);
39
+ }
40
+ // If the change is already in_progress, revert is a no-op — don't rewrite
41
+ // the file and don't throw a confusing "status field not found" error.
42
+ if (change.status === 'in_progress') {
43
+ return {
44
+ changeId,
45
+ previousStatus: 'in_progress',
46
+ newStatus: 'in_progress',
47
+ warnings: [`Change "${changeId}" is already in_progress. No change made.`],
48
+ };
49
+ }
50
+ const absPath = path.resolve(vaultPath, change.path);
51
+ assertInsideVault(absPath, vaultPath);
52
+ const content = fs.readFileSync(absPath, 'utf-8');
53
+ const updated = content.replace(/^(status:\s*).+$/m, '$1in_progress');
54
+ if (updated === content) {
55
+ throw new Error(`Could not find status field in "${change.path}" to revert. ` +
56
+ `Verify the file has a "status:" line in its YAML frontmatter.`);
57
+ }
58
+ // Atomic write
59
+ const tmp = `${absPath}.ows-revert-${Date.now()}`;
60
+ fs.writeFileSync(tmp, updated, 'utf-8');
61
+ fs.renameSync(tmp, absPath);
62
+ const skipLog = options?.noLog || process.env.OWS_NO_LOG === '1';
63
+ if (!skipLog) {
64
+ appendLogEntry(path.join(vaultPath, 'wiki'), 'revert', changeId);
65
+ }
66
+ return {
67
+ changeId,
68
+ previousStatus: change.status,
69
+ newStatus: 'in_progress',
70
+ warnings: [
71
+ 'Status reverted to in_progress. Physical Feature edits were NOT undone.',
72
+ 'If you need to restore Feature note content, use `git checkout wiki/03-features/` or similar.',
73
+ ],
74
+ };
75
+ }
76
+ export function registerRevertCommand(program) {
77
+ program
78
+ .command('revert <changeId>')
79
+ .description('Revert an applied Change back to in_progress status (for re-editing and re-applying)')
80
+ .option('--json', 'Output result as JSON')
81
+ .option('--force', 'Revert even if status is not "applied"')
82
+ .option('--no-log', 'Skip appending to log.md')
83
+ .action(async (changeId, opts) => {
84
+ try {
85
+ if (!changeId || changeId.trim().length === 0) {
86
+ throw new Error('Change ID cannot be empty. Use `ows list --json` to find applied changes.');
87
+ }
88
+ const { buildIndex } = await import('../../core/index/index.js');
89
+ const vaultPath = discoverVaultPath();
90
+ const index = await buildIndex(vaultPath);
91
+ warnOnUnsupportedSchema(index);
92
+ const noLog = opts.log === false || process.env.OWS_NO_LOG === '1';
93
+ const result = revertChange(changeId, index, vaultPath, { force: opts.force, noLog });
94
+ if (opts.json) {
95
+ console.log(jsonEnvelope('revert', result));
96
+ }
97
+ else {
98
+ console.log(`Reverted change "${changeId}": ${result.previousStatus} → ${result.newStatus}`);
99
+ for (const w of result.warnings) {
100
+ console.log(` ⚠ ${w}`);
101
+ }
102
+ }
103
+ }
104
+ catch (err) {
105
+ handleCliError(err, opts.json);
106
+ }
107
+ });
108
+ }
109
+ //# sourceMappingURL=revert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revert.js","sourceRoot":"","sources":["../../../src/cli/commands/revert.ts"],"names":[],"mappings":"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"}
@@ -4,25 +4,8 @@
4
4
  */
5
5
  import type { Command } from 'commander';
6
6
  import type { VaultIndex, IndexRecord } from '../../types/index.js';
7
- import type { NextAction } from '../../types/next-action.js';
8
- export interface StatusResult {
9
- changeId: string;
10
- status: string;
11
- features: string[];
12
- sectionCompleteness: {
13
- why: boolean;
14
- deltaSummary: boolean;
15
- tasks: boolean;
16
- validation: boolean;
17
- designApproach?: boolean;
18
- };
19
- taskProgress: {
20
- total: number;
21
- completed: number;
22
- };
23
- nextAction: NextAction;
24
- blockedBy: string[];
25
- }
7
+ import type { StatusResult } from '../../types/cli-contracts.js';
8
+ export type { StatusResult };
26
9
  export declare function registerStatusCommand(program: Command): void;
27
10
  export interface StatusDeps {
28
11
  analyzeSequencing: (records: Map<string, IndexRecord>) => import('../../types/sequencing.js').SequencingResult;
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAI7D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mBAAmB,EAAE;QACnB,GAAG,EAAE,OAAO,CAAC;QACb,YAAY,EAAE,OAAO,CAAC;QACtB,KAAK,EAAE,OAAO,CAAC;QACf,UAAU,EAAE,OAAO,CAAC;QACpB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B5D;AA0BD,MAAM,WAAW,UAAU;IACzB,iBAAiB,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,OAAO,2BAA2B,EAAE,gBAAgB,CAAC;CAChH;AAgCD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY,CAwFpG"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2B5D;AA0BD,MAAM,WAAW,UAAU;IACzB,iBAAiB,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,OAAO,2BAA2B,EAAE,gBAAgB,CAAC;CAChH;AAgCD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY,CAyFpG"}
@@ -1,5 +1,7 @@
1
1
  import { handleCliError } from "./error-handler.js";
2
2
  import { discoverVaultPath } from '../vault-discovery.js';
3
+ import { warnOnUnsupportedSchema } from '../schema-check.js';
4
+ import { jsonEnvelope } from '../json-envelope.js';
3
5
  import { nextAction as computeCanonicalNextAction, toPublicNextAction } from '../../core/workflow/continue/next-action.js';
4
6
  export function registerStatusCommand(program) {
5
7
  program
@@ -12,12 +14,13 @@ export function registerStatusCommand(program) {
12
14
  const { buildIndex } = await import('../../core/index/index.js');
13
15
  const { analyzeSequencing } = await import('../../core/sequencing/index.js');
14
16
  const index = await buildIndex(vaultPath);
17
+ warnOnUnsupportedSchema(index);
15
18
  const resolvedChangeId = resolveChangeId(changeId, index);
16
19
  const result = getChangeStatus(resolvedChangeId, index, {
17
20
  analyzeSequencing: (records) => analyzeSequencing(records),
18
21
  });
19
22
  if (opts.json) {
20
- console.log(JSON.stringify(result, null, 2));
23
+ console.log(jsonEnvelope('status', result));
21
24
  }
22
25
  else {
23
26
  console.log(formatStatusHuman(result));
@@ -107,11 +110,11 @@ export function getChangeStatus(changeId, index, deps) {
107
110
  total: analysis.totalTasks,
108
111
  completed: analysis.completedTasks,
109
112
  };
110
- // Check blocked dependencies
113
+ // Check blocked dependencies (include missing/unresolved deps as blockers too)
111
114
  const blockedBy = [];
112
115
  for (const dep of change.depends_on) {
113
116
  const depRecord = index.records.get(dep);
114
- if (depRecord && depRecord.status !== 'applied') {
117
+ if (!depRecord || depRecord.status !== 'applied') {
115
118
  blockedBy.push(dep);
116
119
  }
117
120
  }
@@ -130,6 +133,7 @@ export function getChangeStatus(changeId, index, deps) {
130
133
  decisions: [],
131
134
  systems: [],
132
135
  sources: [],
136
+ queries: [],
133
137
  softWarnings: [],
134
138
  };
135
139
  // Build minimal ContinueDeps — status is read-only so write/read stubs are safe
@@ -206,9 +210,44 @@ function formatStatusHuman(result) {
206
210
  lines.push(` Transition to: ${result.nextAction.to}`);
207
211
  if (result.nextAction.reason)
208
212
  lines.push(` Reason: ${result.nextAction.reason}`);
213
+ // Surface guidance and template hint for fill_section actions so users
214
+ // know exactly what content to write without re-reading the docs.
215
+ if (result.nextAction.guidance) {
216
+ lines.push(` Guidance: ${result.nextAction.guidance}`);
217
+ }
218
+ if (result.nextAction.templateHint) {
219
+ lines.push(` Template:`);
220
+ for (const tl of result.nextAction.templateHint.split('\n')) {
221
+ lines.push(` ${tl}`);
222
+ }
223
+ }
209
224
  if (result.blockedBy.length > 0) {
210
225
  lines.push(` Blocked by: ${result.blockedBy.join(', ')}`);
211
226
  }
227
+ // Next command hint so users don't have to guess the lifecycle
228
+ lines.push('');
229
+ const hint = getNextCommandHint(result);
230
+ if (hint)
231
+ lines.push(`Next command: ${hint}`);
212
232
  return lines.join('\n');
213
233
  }
234
+ function getNextCommandHint(result) {
235
+ switch (result.nextAction.action) {
236
+ case 'fill_section':
237
+ return `ows continue ${result.changeId} # fill the "${result.nextAction.target}" section`;
238
+ case 'transition':
239
+ return `ows continue ${result.changeId} # transition to ${result.nextAction.to}`;
240
+ case 'start_implementation':
241
+ case 'continue_task':
242
+ return `ows continue ${result.changeId} # work on next task`;
243
+ case 'ready_to_apply':
244
+ return `ows apply ${result.changeId}`;
245
+ case 'verify_then_archive':
246
+ return `ows verify ${result.changeId} && ows archive ${result.changeId}`;
247
+ case 'blocked':
248
+ return `# resolve blockers first: ${result.blockedBy.join(', ')}`;
249
+ default:
250
+ return null;
251
+ }
252
+ }
214
253
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgC5D"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4C5D"}
@@ -1,6 +1,7 @@
1
1
  import { handleCliError } from "./error-handler.js";
2
2
  import { discoverVaultPath } from '../vault-discovery.js';
3
3
  import { verify } from '../../core/workflow/verify/verify.js';
4
+ import { jsonEnvelope } from '../json-envelope.js';
4
5
  import { formatVerifyReport } from './formatters.js';
5
6
  export function registerVerifyCommand(program) {
6
7
  program
@@ -18,11 +19,21 @@ export function registerVerifyCommand(program) {
18
19
  throw new Error(`Change "${changeId}" not found in vault index.`);
19
20
  }
20
21
  const report = verify(index, { changeId, strict: opts.strict });
22
+ // Empty-vault notice: generic PASS on an empty vault hides the
23
+ // fact that the user hasn't written anything yet. Surface a
24
+ // one-line hint in human output so fresh `ows init` vaults get
25
+ // a "nothing to verify — start with ows propose" nudge instead
26
+ // of a silently-green report. JSON output is untouched so
27
+ // automation still sees a valid report envelope.
28
+ const isEmptyVault = index.records.size === 0;
21
29
  if (opts.json) {
22
- console.log(JSON.stringify(report, null, 2));
30
+ console.log(jsonEnvelope('verify', report));
23
31
  }
24
32
  else {
25
33
  console.log(formatVerifyReport(report));
34
+ if (isEmptyVault) {
35
+ console.log('\nNote: vault has no typed notes yet. Run `ows propose "<first change>"` to create one.');
36
+ }
26
37
  }
27
38
  if (!report.pass) {
28
39
  process.exitCode = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,QAA4B,EAAE,IAA0C,EAAE,EAAE;QACzF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;YACtC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;YAE1C,gCAAgC;YAChC,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,6BAA6B,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAEhE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,QAA4B,EAAE,IAA0C,EAAE,EAAE;QACzF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;YACtC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;YAE1C,gCAAgC;YAChC,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,6BAA6B,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAEhE,+DAA+D;YAC/D,4DAA4D;YAC5D,+DAA+D;YAC/D,+DAA+D;YAC/D,0DAA0D;YAC1D,iDAAiD;YACjD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC;YAC9C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxC,IAAI,YAAY,EAAE,CAAC;oBACjB,OAAO,CAAC,GAAG,CACT,yFAAyF,CAC1F,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,aAAa,IAAI,OAAO,CAqBvC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,aAAa,IAAI,OAAO,CAwCvC"}
package/dist/cli/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  * CLI entry point - Commander program definition.
3
3
  */
4
4
  import { Command } from 'commander';
5
+ import { createRequire } from 'node:module';
5
6
  import { registerInitCommand } from './commands/init.js';
6
7
  import { registerVerifyCommand } from './commands/verify.js';
7
8
  import { registerQueryCommand } from './commands/query.js';
@@ -12,12 +13,32 @@ import { registerStatusCommand } from './commands/status.js';
12
13
  import { registerListCommand } from './commands/list.js';
13
14
  import { registerArchiveCommand } from './commands/archive.js';
14
15
  import { registerMigrateCommand } from './commands/migrate.js';
16
+ import { registerRetrieveCommand } from './commands/retrieve.js';
17
+ import { registerBulkArchiveCommand } from './commands/bulk-archive.js';
18
+ import { registerRevertCommand } from './commands/revert.js';
19
+ import { CURRENT_SCHEMA_VERSION, SUPPORTED_SCHEMA_VERSIONS } from '../core/index/schema-version.js';
15
20
  export function createProgram() {
16
21
  const program = new Command();
22
+ // Version string includes both package version and vault schema version so
23
+ // users can see at a glance whether a release bumped schema compatibility.
24
+ const pkgVersion = getPackageVersion();
25
+ const versionString = `${pkgVersion} (vault schema: ${CURRENT_SCHEMA_VERSION}, supports: ${SUPPORTED_SCHEMA_VERSIONS.join(', ')})`;
17
26
  program
18
27
  .name('ows')
19
28
  .description('open-wiki-spec: Obsidian-first wiki workflow engine')
20
- .version('0.1.0');
29
+ .version(versionString)
30
+ .option('--verbose', 'Enable verbose logging (sets OWS_VERBOSE=1)')
31
+ .option('--debug', 'Enable debug logging (sets OWS_DEBUG=1, implies --verbose)')
32
+ .hook('preAction', (thisCommand) => {
33
+ const opts = thisCommand.optsWithGlobals();
34
+ if (opts.debug) {
35
+ process.env.OWS_DEBUG = '1';
36
+ process.env.OWS_VERBOSE = '1';
37
+ }
38
+ else if (opts.verbose) {
39
+ process.env.OWS_VERBOSE = '1';
40
+ }
41
+ });
21
42
  // Register all commands
22
43
  registerInitCommand(program);
23
44
  registerProposeCommand(program);
@@ -28,10 +49,55 @@ export function createProgram() {
28
49
  registerStatusCommand(program);
29
50
  registerListCommand(program);
30
51
  registerArchiveCommand(program);
52
+ registerRetrieveCommand(program);
53
+ registerBulkArchiveCommand(program);
54
+ registerRevertCommand(program);
31
55
  registerMigrateCommand(program);
32
56
  return program;
33
57
  }
58
+ function getPackageVersion() {
59
+ try {
60
+ const require = createRequire(import.meta.url);
61
+ const pkg = require('../../package.json');
62
+ return pkg.version;
63
+ }
64
+ catch {
65
+ return '0.0.0';
66
+ }
67
+ }
34
68
  // Always parse when imported as CLI entry point (bin/open-wiki-spec.js imports this file)
35
69
  const program = createProgram();
36
- program.parse(process.argv);
70
+ // Catch Commander parse errors (missing args, unknown options, invalid values)
71
+ // and format as JSON if --json is present, with exit code 2 (as documented in
72
+ // README).
73
+ //
74
+ // Commander 12's `exitOverride()` does NOT propagate from parent to
75
+ // subcommands automatically — each subcommand's `_exitCallback` must be set
76
+ // individually. Without this, a missing-argument error on a subcommand
77
+ // (e.g. `ows propose --json` without description) would bypass our handler
78
+ // and exit with code 1 + plain stderr. Apply exitOverride to every command
79
+ // in the tree.
80
+ function applyExitOverride(cmd) {
81
+ cmd.exitOverride();
82
+ for (const sub of cmd.commands) {
83
+ applyExitOverride(sub);
84
+ }
85
+ }
86
+ applyExitOverride(program);
87
+ try {
88
+ program.parse(process.argv);
89
+ }
90
+ catch (err) {
91
+ const isJson = process.argv.includes('--json');
92
+ if (isJson) {
93
+ console.log(JSON.stringify({
94
+ error: true,
95
+ code: 'COMMANDER_ERROR',
96
+ message: err.message,
97
+ }));
98
+ }
99
+ // Usage errors (missing args, unknown options, invalid values) → exit 2
100
+ // Other runtime errors bubble up and exit with 1 via handleCliError.
101
+ process.exitCode = 2;
102
+ }
37
103
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,KAAK,CAAC;SACX,WAAW,CAAC,qDAAqD,CAAC;SAClE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,wBAAwB;IACxB,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEhC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,0FAA0F;AAC1F,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;AAChC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init-engine.d.ts","sourceRoot":"","sources":["../../../src/cli/init/init-engine.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAqD1D;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAkDzE"}
1
+ {"version":3,"file":"init-engine.d.ts","sourceRoot":"","sources":["../../../src/cli/init/init-engine.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAqD1D;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA8DzE"}
@@ -59,7 +59,7 @@ export async function initVault(options) {
59
59
  const wikiPath = path.join(projectPath, 'wiki');
60
60
  const isExtend = fs.existsSync(wikiPath);
61
61
  if (isExtend && !options.force) {
62
- return extendVault(wikiPath, projectPath);
62
+ return extendVault(wikiPath, projectPath, options.skipSeed);
63
63
  }
64
64
  // Fresh init or force re-init
65
65
  const directoriesCreated = [];
@@ -70,16 +70,27 @@ export async function initVault(options) {
70
70
  directoriesCreated.push(dir);
71
71
  }
72
72
  }
73
- // Create meta files
73
+ // Create meta files.
74
+ //
75
+ // conventions.md is user-authored content — rules the team wrote about
76
+ // how they use the vault. Even on a --force re-init we refuse to blow
77
+ // those rules away; the user almost never wants that. schema.md /
78
+ // index.md / log.md are regenerable scaffolding and are rewritten so
79
+ // schema_version stays in sync with the running CLI version.
80
+ const metaPath = path.join(wikiPath, '00-meta');
81
+ const conventionsPath = path.join(metaPath, 'conventions.md');
82
+ const conventionsExisted = fs.existsSync(conventionsPath);
74
83
  createSchemaFile(wikiPath);
75
84
  createIndexFile(wikiPath);
76
85
  createLogFile(wikiPath);
77
- createConventionsFile(wikiPath);
86
+ if (!conventionsExisted) {
87
+ createConventionsFile(wikiPath);
88
+ }
78
89
  const metaFilesCreated = [
79
90
  'wiki/00-meta/schema.md',
80
91
  'wiki/00-meta/index.md',
81
92
  'wiki/00-meta/log.md',
82
- 'wiki/00-meta/conventions.md',
93
+ ...(conventionsExisted ? [] : ['wiki/00-meta/conventions.md']),
83
94
  ];
84
95
  // Create seed notes unless skipped
85
96
  const seedFilesCreated = [];
@@ -101,7 +112,7 @@ export async function initVault(options) {
101
112
  /**
102
113
  * Extend an existing vault: add missing directories, regenerate skills.
103
114
  */
104
- function extendVault(wikiPath, projectPath) {
115
+ function extendVault(wikiPath, projectPath, skipSeed) {
105
116
  const directoriesCreated = [];
106
117
  const warnings = [];
107
118
  // Create any missing vault directories
@@ -136,7 +147,9 @@ function extendVault(wikiPath, projectPath) {
136
147
  }
137
148
  // Create seed notes only if they don't already exist (never overwrite in extend mode)
138
149
  const seedFilesCreated = [];
139
- seedFilesCreated.push(...createSeedNotes(wikiPath, true));
150
+ if (!skipSeed) {
151
+ seedFilesCreated.push(...createSeedNotes(wikiPath, true));
152
+ }
140
153
  // Regenerate skill files (always, in case CLI version changed)
141
154
  const skillFilesGenerated = writeAllSkillFiles(projectPath);
142
155
  return {