open-wiki-spec 0.2.4 → 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.
- package/CHANGELOG.md +54 -0
- package/README.md +50 -3
- package/dist/cli/commands/apply.d.ts.map +1 -1
- package/dist/cli/commands/apply.js +96 -4
- package/dist/cli/commands/apply.js.map +1 -1
- package/dist/cli/commands/archive.d.ts.map +1 -1
- package/dist/cli/commands/archive.js +19 -5
- package/dist/cli/commands/archive.js.map +1 -1
- package/dist/cli/commands/bulk-archive.d.ts +15 -0
- package/dist/cli/commands/bulk-archive.d.ts.map +1 -0
- package/dist/cli/commands/bulk-archive.js +97 -0
- package/dist/cli/commands/bulk-archive.js.map +1 -0
- package/dist/cli/commands/continue.d.ts.map +1 -1
- package/dist/cli/commands/continue.js +15 -2
- package/dist/cli/commands/continue.js.map +1 -1
- package/dist/cli/commands/error-handler.d.ts +1 -5
- package/dist/cli/commands/error-handler.d.ts.map +1 -1
- package/dist/cli/commands/error-handler.js +48 -3
- package/dist/cli/commands/error-handler.js.map +1 -1
- package/dist/cli/commands/init.d.ts +0 -3
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +22 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.d.ts +2 -17
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +15 -3
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +6 -9
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/propose.d.ts.map +1 -1
- package/dist/cli/commands/propose.js +46 -6
- package/dist/cli/commands/propose.js.map +1 -1
- package/dist/cli/commands/query.d.ts.map +1 -1
- package/dist/cli/commands/query.js +99 -4
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/commands/retrieve.d.ts +7 -0
- package/dist/cli/commands/retrieve.d.ts.map +1 -0
- package/dist/cli/commands/retrieve.js +70 -0
- package/dist/cli/commands/retrieve.js.map +1 -0
- package/dist/cli/commands/revert.d.ts +18 -0
- package/dist/cli/commands/revert.d.ts.map +1 -0
- package/dist/cli/commands/revert.js +109 -0
- package/dist/cli/commands/revert.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -19
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +42 -3
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +12 -1
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +68 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/init-engine.d.ts.map +1 -1
- package/dist/cli/init/init-engine.js +19 -6
- package/dist/cli/init/init-engine.js.map +1 -1
- package/dist/cli/init/meta-files.d.ts +2 -1
- package/dist/cli/init/meta-files.d.ts.map +1 -1
- package/dist/cli/init/meta-files.js +167 -8
- package/dist/cli/init/meta-files.js.map +1 -1
- package/dist/cli/init/skill-generator.d.ts +3 -0
- package/dist/cli/init/skill-generator.d.ts.map +1 -1
- package/dist/cli/init/skill-generator.js +184 -3
- package/dist/cli/init/skill-generator.js.map +1 -1
- package/dist/cli/json-envelope.d.ts +15 -0
- package/dist/cli/json-envelope.d.ts.map +1 -0
- package/dist/cli/json-envelope.js +86 -0
- package/dist/cli/json-envelope.js.map +1 -0
- package/dist/cli/schema-check.d.ts +27 -0
- package/dist/cli/schema-check.d.ts.map +1 -0
- package/dist/cli/schema-check.js +33 -0
- package/dist/cli/schema-check.js.map +1 -0
- package/dist/cli/vault-discovery.d.ts.map +1 -1
- package/dist/cli/vault-discovery.js +16 -2
- package/dist/cli/vault-discovery.js.map +1 -1
- package/dist/core/embedding/cache.d.ts +12 -3
- package/dist/core/embedding/cache.d.ts.map +1 -1
- package/dist/core/embedding/cache.js +42 -5
- package/dist/core/embedding/cache.js.map +1 -1
- package/dist/core/embedding/embedder.d.ts.map +1 -1
- package/dist/core/embedding/embedder.js +73 -6
- package/dist/core/embedding/embedder.js.map +1 -1
- package/dist/core/index/build.d.ts.map +1 -1
- package/dist/core/index/build.js +54 -6
- package/dist/core/index/build.js.map +1 -1
- package/dist/core/index/resolve.d.ts.map +1 -1
- package/dist/core/index/resolve.js +27 -12
- package/dist/core/index/resolve.js.map +1 -1
- package/dist/core/index/scan.d.ts +10 -1
- package/dist/core/index/scan.d.ts.map +1 -1
- package/dist/core/index/scan.js +59 -10
- package/dist/core/index/scan.js.map +1 -1
- package/dist/core/index/schema-version.d.ts +28 -0
- package/dist/core/index/schema-version.d.ts.map +1 -1
- package/dist/core/index/schema-version.js +47 -0
- package/dist/core/index/schema-version.js.map +1 -1
- package/dist/core/migrate/change-converter.d.ts.map +1 -1
- package/dist/core/migrate/change-converter.js +52 -5
- package/dist/core/migrate/change-converter.js.map +1 -1
- package/dist/core/migrate/migrate.d.ts.map +1 -1
- package/dist/core/migrate/migrate.js +115 -1
- package/dist/core/migrate/migrate.js.map +1 -1
- package/dist/core/migrate/spec-converter.js +5 -0
- package/dist/core/migrate/spec-converter.js.map +1 -1
- package/dist/core/migrate/types.d.ts +9 -0
- package/dist/core/migrate/types.d.ts.map +1 -1
- package/dist/core/parser/frontmatter-parser.d.ts +0 -6
- package/dist/core/parser/frontmatter-parser.d.ts.map +1 -1
- package/dist/core/parser/frontmatter-parser.js +59 -2
- package/dist/core/parser/frontmatter-parser.js.map +1 -1
- package/dist/core/parser/requirement-parser.js +4 -0
- package/dist/core/parser/requirement-parser.js.map +1 -1
- package/dist/core/parser/task-parser.d.ts.map +1 -1
- package/dist/core/parser/task-parser.js +19 -0
- package/dist/core/parser/task-parser.js.map +1 -1
- package/dist/core/parser/wikilink-parser.d.ts.map +1 -1
- package/dist/core/parser/wikilink-parser.js +21 -5
- package/dist/core/parser/wikilink-parser.js.map +1 -1
- package/dist/core/retrieval/classify.d.ts +11 -4
- package/dist/core/retrieval/classify.d.ts.map +1 -1
- package/dist/core/retrieval/classify.js +76 -14
- package/dist/core/retrieval/classify.js.map +1 -1
- package/dist/core/retrieval/lexical.d.ts.map +1 -1
- package/dist/core/retrieval/lexical.js +31 -12
- package/dist/core/retrieval/lexical.js.map +1 -1
- package/dist/core/retrieval/retrieve.d.ts.map +1 -1
- package/dist/core/retrieval/retrieve.js +45 -5
- package/dist/core/retrieval/retrieve.js.map +1 -1
- package/dist/core/retrieval/scoring.d.ts.map +1 -1
- package/dist/core/retrieval/scoring.js +37 -12
- package/dist/core/retrieval/scoring.js.map +1 -1
- package/dist/core/schema/change.schema.d.ts.map +1 -1
- package/dist/core/schema/change.schema.js +6 -1
- package/dist/core/schema/change.schema.js.map +1 -1
- package/dist/core/schema/feature.schema.d.ts +1 -1
- package/dist/core/schema/feature.schema.d.ts.map +1 -1
- package/dist/core/schema/feature.schema.js +1 -0
- package/dist/core/schema/feature.schema.js.map +1 -1
- package/dist/core/schema/frontmatter.d.ts +15 -0
- package/dist/core/schema/frontmatter.d.ts.map +1 -1
- package/dist/core/schema/index.d.ts +15 -0
- package/dist/core/schema/index.d.ts.map +1 -1
- package/dist/core/schema/query.schema.d.ts +15 -0
- package/dist/core/schema/query.schema.d.ts.map +1 -1
- package/dist/core/schema/query.schema.js +5 -0
- package/dist/core/schema/query.schema.js.map +1 -1
- package/dist/core/schema/templates.d.ts +0 -4
- package/dist/core/schema/templates.d.ts.map +1 -1
- package/dist/core/schema/templates.js +25 -7
- package/dist/core/schema/templates.js.map +1 -1
- package/dist/core/sequencing/analyze.d.ts.map +1 -1
- package/dist/core/sequencing/analyze.js +3 -1
- package/dist/core/sequencing/analyze.js.map +1 -1
- package/dist/core/sequencing/priority-queue.d.ts +9 -3
- package/dist/core/sequencing/priority-queue.d.ts.map +1 -1
- package/dist/core/sequencing/priority-queue.js +10 -4
- package/dist/core/sequencing/priority-queue.js.map +1 -1
- package/dist/core/sequencing/stale-detector.d.ts.map +1 -1
- package/dist/core/sequencing/stale-detector.js +5 -0
- package/dist/core/sequencing/stale-detector.js.map +1 -1
- package/dist/core/workflow/apply/apply.d.ts.map +1 -1
- package/dist/core/workflow/apply/apply.js +429 -25
- package/dist/core/workflow/apply/apply.js.map +1 -1
- package/dist/core/workflow/apply/delta-parser.d.ts.map +1 -1
- package/dist/core/workflow/apply/delta-parser.js +43 -9
- package/dist/core/workflow/apply/delta-parser.js.map +1 -1
- package/dist/core/workflow/apply/feature-updater.d.ts.map +1 -1
- package/dist/core/workflow/apply/feature-updater.js +27 -11
- package/dist/core/workflow/apply/feature-updater.js.map +1 -1
- package/dist/core/workflow/apply/types.d.ts +9 -0
- package/dist/core/workflow/apply/types.d.ts.map +1 -1
- package/dist/core/workflow/continue/continue.d.ts +18 -0
- package/dist/core/workflow/continue/continue.d.ts.map +1 -1
- package/dist/core/workflow/continue/continue.js +134 -15
- package/dist/core/workflow/continue/continue.js.map +1 -1
- package/dist/core/workflow/continue/next-action.d.ts.map +1 -1
- package/dist/core/workflow/continue/next-action.js +16 -3
- package/dist/core/workflow/continue/next-action.js.map +1 -1
- package/dist/core/workflow/continue/types.d.ts +12 -0
- package/dist/core/workflow/continue/types.d.ts.map +1 -1
- package/dist/core/workflow/propose/note-creator.d.ts +2 -2
- package/dist/core/workflow/propose/note-creator.d.ts.map +1 -1
- package/dist/core/workflow/propose/note-creator.js +89 -12
- package/dist/core/workflow/propose/note-creator.js.map +1 -1
- package/dist/core/workflow/propose/propose.d.ts.map +1 -1
- package/dist/core/workflow/propose/propose.js +189 -47
- package/dist/core/workflow/propose/propose.js.map +1 -1
- package/dist/core/workflow/propose/query-normalizer.d.ts.map +1 -1
- package/dist/core/workflow/propose/query-normalizer.js +37 -5
- package/dist/core/workflow/propose/query-normalizer.js.map +1 -1
- package/dist/core/workflow/propose/types.d.ts +15 -0
- package/dist/core/workflow/propose/types.d.ts.map +1 -1
- package/dist/core/workflow/propose/types.js +6 -1
- package/dist/core/workflow/propose/types.js.map +1 -1
- package/dist/core/workflow/query/query-note-creator.js +4 -0
- package/dist/core/workflow/query/query-note-creator.js.map +1 -1
- package/dist/core/workflow/verify/coherence.d.ts +10 -0
- package/dist/core/workflow/verify/coherence.d.ts.map +1 -1
- package/dist/core/workflow/verify/coherence.js +91 -4
- package/dist/core/workflow/verify/coherence.js.map +1 -1
- package/dist/core/workflow/verify/completeness.d.ts +1 -1
- package/dist/core/workflow/verify/completeness.d.ts.map +1 -1
- package/dist/core/workflow/verify/completeness.js +53 -10
- package/dist/core/workflow/verify/completeness.js.map +1 -1
- package/dist/core/workflow/verify/correctness.d.ts +1 -1
- package/dist/core/workflow/verify/correctness.d.ts.map +1 -1
- package/dist/core/workflow/verify/correctness.js +95 -14
- package/dist/core/workflow/verify/correctness.js.map +1 -1
- package/dist/core/workflow/verify/vault-integrity.d.ts +11 -0
- package/dist/core/workflow/verify/vault-integrity.d.ts.map +1 -1
- package/dist/core/workflow/verify/vault-integrity.js +80 -3
- package/dist/core/workflow/verify/vault-integrity.js.map +1 -1
- package/dist/core/workflow/verify/verify.d.ts +0 -5
- package/dist/core/workflow/verify/verify.d.ts.map +1 -1
- package/dist/core/workflow/verify/verify.js +54 -3
- package/dist/core/workflow/verify/verify.js.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/types/cli-contracts.d.ts +78 -0
- package/dist/types/cli-contracts.d.ts.map +1 -0
- package/dist/types/cli-contracts.js +2 -0
- package/dist/types/cli-contracts.js.map +1 -0
- package/dist/types/error-codes.d.ts +25 -0
- package/dist/types/error-codes.d.ts.map +1 -0
- package/dist/types/error-codes.js +27 -0
- package/dist/types/error-codes.js.map +1 -0
- package/dist/types/frontmatter.d.ts +9 -2
- package/dist/types/frontmatter.d.ts.map +1 -1
- package/dist/types/next-action.d.ts +21 -0
- package/dist/types/next-action.d.ts.map +1 -1
- package/dist/types/retrieval.d.ts +17 -0
- package/dist/types/retrieval.d.ts.map +1 -1
- package/dist/types/verify.d.ts +58 -1
- package/dist/types/verify.d.ts.map +1 -1
- package/dist/types/verify.js +58 -1
- package/dist/types/verify.js.map +1 -1
- package/dist/utils/conventions.d.ts +9 -0
- package/dist/utils/conventions.d.ts.map +1 -0
- package/dist/utils/conventions.js +22 -0
- package/dist/utils/conventions.js.map +1 -0
- package/dist/utils/id-generator.d.ts.map +1 -1
- package/dist/utils/id-generator.js +8 -0
- package/dist/utils/id-generator.js.map +1 -1
- package/dist/utils/normalize.d.ts +7 -4
- package/dist/utils/normalize.d.ts.map +1 -1
- package/dist/utils/normalize.js +43 -6
- package/dist/utils/normalize.js.map +1 -1
- 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":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAMpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,mBAAmB,EAAE,gEAAgE,CAAC;SAC7F,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,IAA2C,EAAE,EAAE;QACjF,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACrF,CAAC;YACD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YACpE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACjE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;YACnE,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;YAC7E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;YACjE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,sCAAsC,CAAC,CAAC;YACzE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YAEjD,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ;gBAC/B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBACvE,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE;gBACxC,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,WAAW;aACtB,EAAE;gBACD,UAAU;gBACV,QAAQ;gBACR,iBAAiB;gBACjB,SAAS,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;gBACpD,QAAQ,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAC/D,SAAS,EAAE,GAAG,EAAE,GAA4B,CAAC;aAC9C,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,cAAc,iBAAiB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;gBACrF,OAAO,CAAC,GAAG,EAAE,CAAC;gBAEd,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7C,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;wBACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;wBACtF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;4BAC1B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;wBAC9B,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;oBACpC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;wBAC3C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;YACH,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"}
|
|
@@ -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 {
|
|
8
|
-
export
|
|
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;
|
|
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(
|
|
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
|
|
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":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAMpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
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;
|
|
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(
|
|
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,
|
|
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"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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(
|
|
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
|
-
|
|
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
|
package/dist/cli/index.js.map
CHANGED
|
@@ -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;
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|