open-wiki-spec 0.2.4 → 0.3.1

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 (252) hide show
  1. package/CHANGELOG.md +59 -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 +99 -4
  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 +5 -1
  82. package/dist/core/embedding/embedder.d.ts.map +1 -1
  83. package/dist/core/embedding/embedder.js +78 -7
  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 +52 -5
  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/spec-converter.js +5 -0
  106. package/dist/core/migrate/spec-converter.js.map +1 -1
  107. package/dist/core/migrate/types.d.ts +9 -0
  108. package/dist/core/migrate/types.d.ts.map +1 -1
  109. package/dist/core/parser/frontmatter-parser.d.ts +0 -6
  110. package/dist/core/parser/frontmatter-parser.d.ts.map +1 -1
  111. package/dist/core/parser/frontmatter-parser.js +59 -2
  112. package/dist/core/parser/frontmatter-parser.js.map +1 -1
  113. package/dist/core/parser/requirement-parser.js +4 -0
  114. package/dist/core/parser/requirement-parser.js.map +1 -1
  115. package/dist/core/parser/task-parser.d.ts.map +1 -1
  116. package/dist/core/parser/task-parser.js +19 -0
  117. package/dist/core/parser/task-parser.js.map +1 -1
  118. package/dist/core/parser/wikilink-parser.d.ts.map +1 -1
  119. package/dist/core/parser/wikilink-parser.js +21 -5
  120. package/dist/core/parser/wikilink-parser.js.map +1 -1
  121. package/dist/core/retrieval/classify.d.ts +11 -4
  122. package/dist/core/retrieval/classify.d.ts.map +1 -1
  123. package/dist/core/retrieval/classify.js +76 -14
  124. package/dist/core/retrieval/classify.js.map +1 -1
  125. package/dist/core/retrieval/lexical.d.ts.map +1 -1
  126. package/dist/core/retrieval/lexical.js +31 -12
  127. package/dist/core/retrieval/lexical.js.map +1 -1
  128. package/dist/core/retrieval/retrieve.d.ts.map +1 -1
  129. package/dist/core/retrieval/retrieve.js +45 -5
  130. package/dist/core/retrieval/retrieve.js.map +1 -1
  131. package/dist/core/retrieval/scoring.d.ts.map +1 -1
  132. package/dist/core/retrieval/scoring.js +37 -12
  133. package/dist/core/retrieval/scoring.js.map +1 -1
  134. package/dist/core/schema/change.schema.d.ts.map +1 -1
  135. package/dist/core/schema/change.schema.js +6 -1
  136. package/dist/core/schema/change.schema.js.map +1 -1
  137. package/dist/core/schema/feature.schema.d.ts +1 -1
  138. package/dist/core/schema/feature.schema.d.ts.map +1 -1
  139. package/dist/core/schema/feature.schema.js +1 -0
  140. package/dist/core/schema/feature.schema.js.map +1 -1
  141. package/dist/core/schema/frontmatter.d.ts +15 -0
  142. package/dist/core/schema/frontmatter.d.ts.map +1 -1
  143. package/dist/core/schema/index.d.ts +15 -0
  144. package/dist/core/schema/index.d.ts.map +1 -1
  145. package/dist/core/schema/query.schema.d.ts +15 -0
  146. package/dist/core/schema/query.schema.d.ts.map +1 -1
  147. package/dist/core/schema/query.schema.js +5 -0
  148. package/dist/core/schema/query.schema.js.map +1 -1
  149. package/dist/core/schema/templates.d.ts +0 -4
  150. package/dist/core/schema/templates.d.ts.map +1 -1
  151. package/dist/core/schema/templates.js +25 -7
  152. package/dist/core/schema/templates.js.map +1 -1
  153. package/dist/core/sequencing/analyze.d.ts.map +1 -1
  154. package/dist/core/sequencing/analyze.js +3 -1
  155. package/dist/core/sequencing/analyze.js.map +1 -1
  156. package/dist/core/sequencing/priority-queue.d.ts +9 -3
  157. package/dist/core/sequencing/priority-queue.d.ts.map +1 -1
  158. package/dist/core/sequencing/priority-queue.js +10 -4
  159. package/dist/core/sequencing/priority-queue.js.map +1 -1
  160. package/dist/core/sequencing/stale-detector.d.ts.map +1 -1
  161. package/dist/core/sequencing/stale-detector.js +5 -0
  162. package/dist/core/sequencing/stale-detector.js.map +1 -1
  163. package/dist/core/workflow/apply/apply.d.ts.map +1 -1
  164. package/dist/core/workflow/apply/apply.js +429 -25
  165. package/dist/core/workflow/apply/apply.js.map +1 -1
  166. package/dist/core/workflow/apply/delta-parser.d.ts.map +1 -1
  167. package/dist/core/workflow/apply/delta-parser.js +43 -9
  168. package/dist/core/workflow/apply/delta-parser.js.map +1 -1
  169. package/dist/core/workflow/apply/feature-updater.d.ts.map +1 -1
  170. package/dist/core/workflow/apply/feature-updater.js +27 -11
  171. package/dist/core/workflow/apply/feature-updater.js.map +1 -1
  172. package/dist/core/workflow/apply/types.d.ts +9 -0
  173. package/dist/core/workflow/apply/types.d.ts.map +1 -1
  174. package/dist/core/workflow/continue/continue.d.ts +18 -0
  175. package/dist/core/workflow/continue/continue.d.ts.map +1 -1
  176. package/dist/core/workflow/continue/continue.js +134 -15
  177. package/dist/core/workflow/continue/continue.js.map +1 -1
  178. package/dist/core/workflow/continue/next-action.d.ts.map +1 -1
  179. package/dist/core/workflow/continue/next-action.js +16 -3
  180. package/dist/core/workflow/continue/next-action.js.map +1 -1
  181. package/dist/core/workflow/continue/types.d.ts +12 -0
  182. package/dist/core/workflow/continue/types.d.ts.map +1 -1
  183. package/dist/core/workflow/propose/note-creator.d.ts +2 -2
  184. package/dist/core/workflow/propose/note-creator.d.ts.map +1 -1
  185. package/dist/core/workflow/propose/note-creator.js +89 -12
  186. package/dist/core/workflow/propose/note-creator.js.map +1 -1
  187. package/dist/core/workflow/propose/propose.d.ts.map +1 -1
  188. package/dist/core/workflow/propose/propose.js +189 -47
  189. package/dist/core/workflow/propose/propose.js.map +1 -1
  190. package/dist/core/workflow/propose/query-normalizer.d.ts.map +1 -1
  191. package/dist/core/workflow/propose/query-normalizer.js +37 -5
  192. package/dist/core/workflow/propose/query-normalizer.js.map +1 -1
  193. package/dist/core/workflow/propose/types.d.ts +15 -0
  194. package/dist/core/workflow/propose/types.d.ts.map +1 -1
  195. package/dist/core/workflow/propose/types.js +6 -1
  196. package/dist/core/workflow/propose/types.js.map +1 -1
  197. package/dist/core/workflow/query/query-note-creator.js +4 -0
  198. package/dist/core/workflow/query/query-note-creator.js.map +1 -1
  199. package/dist/core/workflow/verify/coherence.d.ts +10 -0
  200. package/dist/core/workflow/verify/coherence.d.ts.map +1 -1
  201. package/dist/core/workflow/verify/coherence.js +91 -4
  202. package/dist/core/workflow/verify/coherence.js.map +1 -1
  203. package/dist/core/workflow/verify/completeness.d.ts +1 -1
  204. package/dist/core/workflow/verify/completeness.d.ts.map +1 -1
  205. package/dist/core/workflow/verify/completeness.js +53 -10
  206. package/dist/core/workflow/verify/completeness.js.map +1 -1
  207. package/dist/core/workflow/verify/correctness.d.ts +1 -1
  208. package/dist/core/workflow/verify/correctness.d.ts.map +1 -1
  209. package/dist/core/workflow/verify/correctness.js +95 -14
  210. package/dist/core/workflow/verify/correctness.js.map +1 -1
  211. package/dist/core/workflow/verify/vault-integrity.d.ts +11 -0
  212. package/dist/core/workflow/verify/vault-integrity.d.ts.map +1 -1
  213. package/dist/core/workflow/verify/vault-integrity.js +80 -3
  214. package/dist/core/workflow/verify/vault-integrity.js.map +1 -1
  215. package/dist/core/workflow/verify/verify.d.ts +0 -5
  216. package/dist/core/workflow/verify/verify.d.ts.map +1 -1
  217. package/dist/core/workflow/verify/verify.js +54 -3
  218. package/dist/core/workflow/verify/verify.js.map +1 -1
  219. package/dist/index.d.ts +13 -0
  220. package/dist/index.d.ts.map +1 -1
  221. package/dist/index.js +11 -0
  222. package/dist/index.js.map +1 -1
  223. package/dist/types/cli-contracts.d.ts +78 -0
  224. package/dist/types/cli-contracts.d.ts.map +1 -0
  225. package/dist/types/cli-contracts.js +2 -0
  226. package/dist/types/cli-contracts.js.map +1 -0
  227. package/dist/types/error-codes.d.ts +25 -0
  228. package/dist/types/error-codes.d.ts.map +1 -0
  229. package/dist/types/error-codes.js +27 -0
  230. package/dist/types/error-codes.js.map +1 -0
  231. package/dist/types/frontmatter.d.ts +9 -2
  232. package/dist/types/frontmatter.d.ts.map +1 -1
  233. package/dist/types/next-action.d.ts +21 -0
  234. package/dist/types/next-action.d.ts.map +1 -1
  235. package/dist/types/retrieval.d.ts +17 -0
  236. package/dist/types/retrieval.d.ts.map +1 -1
  237. package/dist/types/verify.d.ts +58 -1
  238. package/dist/types/verify.d.ts.map +1 -1
  239. package/dist/types/verify.js +58 -1
  240. package/dist/types/verify.js.map +1 -1
  241. package/dist/utils/conventions.d.ts +9 -0
  242. package/dist/utils/conventions.d.ts.map +1 -0
  243. package/dist/utils/conventions.js +22 -0
  244. package/dist/utils/conventions.js.map +1 -0
  245. package/dist/utils/id-generator.d.ts.map +1 -1
  246. package/dist/utils/id-generator.js +8 -0
  247. package/dist/utils/id-generator.js.map +1 -1
  248. package/dist/utils/normalize.d.ts +7 -4
  249. package/dist/utils/normalize.d.ts.map +1 -1
  250. package/dist/utils/normalize.js +43 -6
  251. package/dist/utils/normalize.js.map +1 -1
  252. package/package.json +3 -2
@@ -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 {