open-wiki-spec 0.1.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/README.md +294 -0
- package/bin/open-wiki-spec.js +2 -0
- package/dist/cli/commands/apply.d.ts +3 -0
- package/dist/cli/commands/apply.d.ts.map +1 -0
- package/dist/cli/commands/apply.js +60 -0
- package/dist/cli/commands/apply.js.map +1 -0
- package/dist/cli/commands/archive.d.ts +20 -0
- package/dist/cli/commands/archive.d.ts.map +1 -0
- package/dist/cli/commands/archive.js +87 -0
- package/dist/cli/commands/archive.js.map +1 -0
- package/dist/cli/commands/continue.d.ts +6 -0
- package/dist/cli/commands/continue.d.ts.map +1 -0
- package/dist/cli/commands/continue.js +35 -0
- package/dist/cli/commands/continue.js.map +1 -0
- package/dist/cli/commands/formatters.d.ts +9 -0
- package/dist/cli/commands/formatters.d.ts.map +1 -0
- package/dist/cli/commands/formatters.js +55 -0
- package/dist/cli/commands/formatters.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +36 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/list.d.ts +28 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +85 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +6 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +103 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/propose.d.ts +3 -0
- package/dist/cli/commands/propose.d.ts.map +1 -0
- package/dist/cli/commands/propose.js +64 -0
- package/dist/cli/commands/propose.js.map +1 -0
- package/dist/cli/commands/query.d.ts +3 -0
- package/dist/cli/commands/query.d.ts.map +1 -0
- package/dist/cli/commands/query.js +62 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/status.d.ts +30 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +144 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +3 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +38 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init/init-engine.d.ts +6 -0
- package/dist/cli/init/init-engine.d.ts.map +1 -0
- package/dist/cli/init/init-engine.js +107 -0
- package/dist/cli/init/init-engine.js.map +1 -0
- package/dist/cli/init/meta-files.d.ts +9 -0
- package/dist/cli/init/meta-files.d.ts.map +1 -0
- package/dist/cli/init/meta-files.js +156 -0
- package/dist/cli/init/meta-files.js.map +1 -0
- package/dist/cli/init/skill-generator.d.ts +11 -0
- package/dist/cli/init/skill-generator.d.ts.map +1 -0
- package/dist/cli/init/skill-generator.js +753 -0
- package/dist/cli/init/skill-generator.js.map +1 -0
- package/dist/cli/init/types.d.ts +27 -0
- package/dist/cli/init/types.d.ts.map +1 -0
- package/dist/cli/init/types.js +5 -0
- package/dist/cli/init/types.js.map +1 -0
- package/dist/cli/vault-discovery.d.ts +9 -0
- package/dist/cli/vault-discovery.d.ts.map +1 -0
- package/dist/cli/vault-discovery.js +31 -0
- package/dist/cli/vault-discovery.js.map +1 -0
- package/dist/core/config/index.d.ts +2 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/index.js +3 -0
- package/dist/core/config/index.js.map +1 -0
- package/dist/core/index/build.d.ts +10 -0
- package/dist/core/index/build.d.ts.map +1 -0
- package/dist/core/index/build.js +190 -0
- package/dist/core/index/build.js.map +1 -0
- package/dist/core/index/index.d.ts +7 -0
- package/dist/core/index/index.d.ts.map +1 -0
- package/dist/core/index/index.js +7 -0
- package/dist/core/index/index.js.map +1 -0
- package/dist/core/index/resolve.d.ts +41 -0
- package/dist/core/index/resolve.d.ts.map +1 -0
- package/dist/core/index/resolve.js +63 -0
- package/dist/core/index/resolve.js.map +1 -0
- package/dist/core/index/reverse.d.ts +7 -0
- package/dist/core/index/reverse.d.ts.map +1 -0
- package/dist/core/index/reverse.js +24 -0
- package/dist/core/index/reverse.js.map +1 -0
- package/dist/core/index/scan.d.ts +16 -0
- package/dist/core/index/scan.d.ts.map +1 -0
- package/dist/core/index/scan.js +19 -0
- package/dist/core/index/scan.js.map +1 -0
- package/dist/core/index/schema-version.d.ts +5 -0
- package/dist/core/index/schema-version.d.ts.map +1 -0
- package/dist/core/index/schema-version.js +19 -0
- package/dist/core/index/schema-version.js.map +1 -0
- package/dist/core/index/validate.d.ts +14 -0
- package/dist/core/index/validate.d.ts.map +1 -0
- package/dist/core/index/validate.js +77 -0
- package/dist/core/index/validate.js.map +1 -0
- package/dist/core/migrate/change-converter.d.ts +18 -0
- package/dist/core/migrate/change-converter.d.ts.map +1 -0
- package/dist/core/migrate/change-converter.js +475 -0
- package/dist/core/migrate/change-converter.js.map +1 -0
- package/dist/core/migrate/index.d.ts +8 -0
- package/dist/core/migrate/index.d.ts.map +1 -0
- package/dist/core/migrate/index.js +7 -0
- package/dist/core/migrate/index.js.map +1 -0
- package/dist/core/migrate/migrate.d.ts +15 -0
- package/dist/core/migrate/migrate.d.ts.map +1 -0
- package/dist/core/migrate/migrate.js +149 -0
- package/dist/core/migrate/migrate.js.map +1 -0
- package/dist/core/migrate/scanner.d.ts +10 -0
- package/dist/core/migrate/scanner.d.ts.map +1 -0
- package/dist/core/migrate/scanner.js +188 -0
- package/dist/core/migrate/scanner.js.map +1 -0
- package/dist/core/migrate/source-converter.d.ts +6 -0
- package/dist/core/migrate/source-converter.d.ts.map +1 -0
- package/dist/core/migrate/source-converter.js +63 -0
- package/dist/core/migrate/source-converter.js.map +1 -0
- package/dist/core/migrate/spec-converter.d.ts +16 -0
- package/dist/core/migrate/spec-converter.d.ts.map +1 -0
- package/dist/core/migrate/spec-converter.js +157 -0
- package/dist/core/migrate/spec-converter.js.map +1 -0
- package/dist/core/migrate/system-inferrer.d.ts +23 -0
- package/dist/core/migrate/system-inferrer.d.ts.map +1 -0
- package/dist/core/migrate/system-inferrer.js +118 -0
- package/dist/core/migrate/system-inferrer.js.map +1 -0
- package/dist/core/migrate/types.d.ts +125 -0
- package/dist/core/migrate/types.d.ts.map +1 -0
- package/dist/core/migrate/types.js +5 -0
- package/dist/core/migrate/types.js.map +1 -0
- package/dist/core/parser/delta-summary-parser.d.ts +10 -0
- package/dist/core/parser/delta-summary-parser.d.ts.map +1 -0
- package/dist/core/parser/delta-summary-parser.js +101 -0
- package/dist/core/parser/delta-summary-parser.js.map +1 -0
- package/dist/core/parser/frontmatter-parser.d.ts +21 -0
- package/dist/core/parser/frontmatter-parser.d.ts.map +1 -0
- package/dist/core/parser/frontmatter-parser.js +87 -0
- package/dist/core/parser/frontmatter-parser.js.map +1 -0
- package/dist/core/parser/index.d.ts +9 -0
- package/dist/core/parser/index.d.ts.map +1 -0
- package/dist/core/parser/index.js +8 -0
- package/dist/core/parser/index.js.map +1 -0
- package/dist/core/parser/note-parser.d.ts +9 -0
- package/dist/core/parser/note-parser.d.ts.map +1 -0
- package/dist/core/parser/note-parser.js +106 -0
- package/dist/core/parser/note-parser.js.map +1 -0
- package/dist/core/parser/requirement-parser.d.ts +13 -0
- package/dist/core/parser/requirement-parser.d.ts.map +1 -0
- package/dist/core/parser/requirement-parser.js +127 -0
- package/dist/core/parser/requirement-parser.js.map +1 -0
- package/dist/core/parser/section-parser.d.ts +15 -0
- package/dist/core/parser/section-parser.d.ts.map +1 -0
- package/dist/core/parser/section-parser.js +90 -0
- package/dist/core/parser/section-parser.js.map +1 -0
- package/dist/core/parser/task-parser.d.ts +9 -0
- package/dist/core/parser/task-parser.d.ts.map +1 -0
- package/dist/core/parser/task-parser.js +35 -0
- package/dist/core/parser/task-parser.js.map +1 -0
- package/dist/core/parser/types.d.ts +94 -0
- package/dist/core/parser/types.d.ts.map +1 -0
- package/dist/core/parser/types.js +2 -0
- package/dist/core/parser/types.js.map +1 -0
- package/dist/core/parser/wikilink-parser.d.ts +19 -0
- package/dist/core/parser/wikilink-parser.d.ts.map +1 -0
- package/dist/core/parser/wikilink-parser.js +74 -0
- package/dist/core/parser/wikilink-parser.js.map +1 -0
- package/dist/core/retrieval/classify.d.ts +11 -0
- package/dist/core/retrieval/classify.d.ts.map +1 -0
- package/dist/core/retrieval/classify.js +92 -0
- package/dist/core/retrieval/classify.js.map +1 -0
- package/dist/core/retrieval/constants.d.ts +49 -0
- package/dist/core/retrieval/constants.d.ts.map +1 -0
- package/dist/core/retrieval/constants.js +29 -0
- package/dist/core/retrieval/constants.js.map +1 -0
- package/dist/core/retrieval/graph-expand.d.ts +7 -0
- package/dist/core/retrieval/graph-expand.d.ts.map +1 -0
- package/dist/core/retrieval/graph-expand.js +20 -0
- package/dist/core/retrieval/graph-expand.js.map +1 -0
- package/dist/core/retrieval/helpers.d.ts +15 -0
- package/dist/core/retrieval/helpers.d.ts.map +1 -0
- package/dist/core/retrieval/helpers.js +36 -0
- package/dist/core/retrieval/helpers.js.map +1 -0
- package/dist/core/retrieval/index.d.ts +11 -0
- package/dist/core/retrieval/index.d.ts.map +1 -0
- package/dist/core/retrieval/index.js +9 -0
- package/dist/core/retrieval/index.js.map +1 -0
- package/dist/core/retrieval/lexical.d.ts +8 -0
- package/dist/core/retrieval/lexical.d.ts.map +1 -0
- package/dist/core/retrieval/lexical.js +107 -0
- package/dist/core/retrieval/lexical.js.map +1 -0
- package/dist/core/retrieval/retrieve.d.ts +16 -0
- package/dist/core/retrieval/retrieve.d.ts.map +1 -0
- package/dist/core/retrieval/retrieve.js +58 -0
- package/dist/core/retrieval/retrieve.js.map +1 -0
- package/dist/core/retrieval/scoring.d.ts +14 -0
- package/dist/core/retrieval/scoring.d.ts.map +1 -0
- package/dist/core/retrieval/scoring.js +169 -0
- package/dist/core/retrieval/scoring.js.map +1 -0
- package/dist/core/retrieval/warnings.d.ts +16 -0
- package/dist/core/retrieval/warnings.d.ts.map +1 -0
- package/dist/core/retrieval/warnings.js +73 -0
- package/dist/core/retrieval/warnings.js.map +1 -0
- package/dist/core/schema/base.schema.d.ts +31 -0
- package/dist/core/schema/base.schema.d.ts.map +1 -0
- package/dist/core/schema/base.schema.js +32 -0
- package/dist/core/schema/base.schema.js.map +1 -0
- package/dist/core/schema/change.schema.d.ts +96 -0
- package/dist/core/schema/change.schema.d.ts.map +1 -0
- package/dist/core/schema/change.schema.js +64 -0
- package/dist/core/schema/change.schema.js.map +1 -0
- package/dist/core/schema/decision.schema.d.ts +33 -0
- package/dist/core/schema/decision.schema.d.ts.map +1 -0
- package/dist/core/schema/decision.schema.js +19 -0
- package/dist/core/schema/decision.schema.js.map +1 -0
- package/dist/core/schema/delta-summary.d.ts +57 -0
- package/dist/core/schema/delta-summary.d.ts.map +1 -0
- package/dist/core/schema/delta-summary.js +38 -0
- package/dist/core/schema/delta-summary.js.map +1 -0
- package/dist/core/schema/feature.schema.d.ts +40 -0
- package/dist/core/schema/feature.schema.d.ts.map +1 -0
- package/dist/core/schema/feature.schema.js +25 -0
- package/dist/core/schema/feature.schema.js.map +1 -0
- package/dist/core/schema/frontmatter.d.ts +207 -0
- package/dist/core/schema/frontmatter.d.ts.map +1 -0
- package/dist/core/schema/frontmatter.js +23 -0
- package/dist/core/schema/frontmatter.js.map +1 -0
- package/dist/core/schema/index.d.ts +235 -0
- package/dist/core/schema/index.d.ts.map +1 -0
- package/dist/core/schema/index.js +52 -0
- package/dist/core/schema/index.js.map +1 -0
- package/dist/core/schema/query.schema.d.ts +39 -0
- package/dist/core/schema/query.schema.d.ts.map +1 -0
- package/dist/core/schema/query.schema.js +20 -0
- package/dist/core/schema/query.schema.js.map +1 -0
- package/dist/core/schema/requirement.d.ts +69 -0
- package/dist/core/schema/requirement.d.ts.map +1 -0
- package/dist/core/schema/requirement.js +35 -0
- package/dist/core/schema/requirement.js.map +1 -0
- package/dist/core/schema/source.schema.d.ts +33 -0
- package/dist/core/schema/source.schema.d.ts.map +1 -0
- package/dist/core/schema/source.schema.js +24 -0
- package/dist/core/schema/source.schema.js.map +1 -0
- package/dist/core/schema/system.schema.d.ts +27 -0
- package/dist/core/schema/system.schema.d.ts.map +1 -0
- package/dist/core/schema/system.schema.js +17 -0
- package/dist/core/schema/system.schema.js.map +1 -0
- package/dist/core/schema/templates.d.ts +14 -0
- package/dist/core/schema/templates.d.ts.map +1 -0
- package/dist/core/schema/templates.js +220 -0
- package/dist/core/schema/templates.js.map +1 -0
- package/dist/core/schema/validation-constants.d.ts +5 -0
- package/dist/core/schema/validation-constants.d.ts.map +1 -0
- package/dist/core/schema/validation-constants.js +5 -0
- package/dist/core/schema/validation-constants.js.map +1 -0
- package/dist/core/sequencing/analyze.d.ts +13 -0
- package/dist/core/sequencing/analyze.d.ts.map +1 -0
- package/dist/core/sequencing/analyze.js +107 -0
- package/dist/core/sequencing/analyze.js.map +1 -0
- package/dist/core/sequencing/index.d.ts +8 -0
- package/dist/core/sequencing/index.d.ts.map +1 -0
- package/dist/core/sequencing/index.js +8 -0
- package/dist/core/sequencing/index.js.map +1 -0
- package/dist/core/sequencing/ordering.d.ts +11 -0
- package/dist/core/sequencing/ordering.d.ts.map +1 -0
- package/dist/core/sequencing/ordering.js +148 -0
- package/dist/core/sequencing/ordering.js.map +1 -0
- package/dist/core/sequencing/out-of-order-detector.d.ts +9 -0
- package/dist/core/sequencing/out-of-order-detector.d.ts.map +1 -0
- package/dist/core/sequencing/out-of-order-detector.js +42 -0
- package/dist/core/sequencing/out-of-order-detector.js.map +1 -0
- package/dist/core/sequencing/priority-queue.d.ts +18 -0
- package/dist/core/sequencing/priority-queue.d.ts.map +1 -0
- package/dist/core/sequencing/priority-queue.js +31 -0
- package/dist/core/sequencing/priority-queue.js.map +1 -0
- package/dist/core/sequencing/requirement-conflict-detector.d.ts +9 -0
- package/dist/core/sequencing/requirement-conflict-detector.d.ts.map +1 -0
- package/dist/core/sequencing/requirement-conflict-detector.js +90 -0
- package/dist/core/sequencing/requirement-conflict-detector.js.map +1 -0
- package/dist/core/sequencing/stale-detector.d.ts +9 -0
- package/dist/core/sequencing/stale-detector.d.ts.map +1 -0
- package/dist/core/sequencing/stale-detector.js +49 -0
- package/dist/core/sequencing/stale-detector.js.map +1 -0
- package/dist/core/sequencing/touches-analyzer.d.ts +8 -0
- package/dist/core/sequencing/touches-analyzer.d.ts.map +1 -0
- package/dist/core/sequencing/touches-analyzer.js +91 -0
- package/dist/core/sequencing/touches-analyzer.js.map +1 -0
- package/dist/core/vault/index.d.ts +2 -0
- package/dist/core/vault/index.d.ts.map +1 -0
- package/dist/core/vault/index.js +3 -0
- package/dist/core/vault/index.js.map +1 -0
- package/dist/core/workflow/apply/apply.d.ts +17 -0
- package/dist/core/workflow/apply/apply.d.ts.map +1 -0
- package/dist/core/workflow/apply/apply.js +302 -0
- package/dist/core/workflow/apply/apply.js.map +1 -0
- package/dist/core/workflow/apply/delta-parser.d.ts +11 -0
- package/dist/core/workflow/apply/delta-parser.d.ts.map +1 -0
- package/dist/core/workflow/apply/delta-parser.js +164 -0
- package/dist/core/workflow/apply/delta-parser.js.map +1 -0
- package/dist/core/workflow/apply/feature-updater.d.ts +12 -0
- package/dist/core/workflow/apply/feature-updater.d.ts.map +1 -0
- package/dist/core/workflow/apply/feature-updater.js +75 -0
- package/dist/core/workflow/apply/feature-updater.js.map +1 -0
- package/dist/core/workflow/apply/index.d.ts +7 -0
- package/dist/core/workflow/apply/index.d.ts.map +1 -0
- package/dist/core/workflow/apply/index.js +6 -0
- package/dist/core/workflow/apply/index.js.map +1 -0
- package/dist/core/workflow/apply/stale-checker.d.ts +17 -0
- package/dist/core/workflow/apply/stale-checker.d.ts.map +1 -0
- package/dist/core/workflow/apply/stale-checker.js +99 -0
- package/dist/core/workflow/apply/stale-checker.js.map +1 -0
- package/dist/core/workflow/apply/types.d.ts +112 -0
- package/dist/core/workflow/apply/types.d.ts.map +1 -0
- package/dist/core/workflow/apply/types.js +2 -0
- package/dist/core/workflow/apply/types.js.map +1 -0
- package/dist/core/workflow/apply/verify-apply.d.ts +16 -0
- package/dist/core/workflow/apply/verify-apply.d.ts.map +1 -0
- package/dist/core/workflow/apply/verify-apply.js +81 -0
- package/dist/core/workflow/apply/verify-apply.js.map +1 -0
- package/dist/core/workflow/continue/continue.d.ts +17 -0
- package/dist/core/workflow/continue/continue.d.ts.map +1 -0
- package/dist/core/workflow/continue/continue.js +213 -0
- package/dist/core/workflow/continue/continue.js.map +1 -0
- package/dist/core/workflow/continue/decision-promoter.d.ts +20 -0
- package/dist/core/workflow/continue/decision-promoter.d.ts.map +1 -0
- package/dist/core/workflow/continue/decision-promoter.js +36 -0
- package/dist/core/workflow/continue/decision-promoter.js.map +1 -0
- package/dist/core/workflow/continue/index.d.ts +6 -0
- package/dist/core/workflow/continue/index.d.ts.map +1 -0
- package/dist/core/workflow/continue/index.js +5 -0
- package/dist/core/workflow/continue/index.js.map +1 -0
- package/dist/core/workflow/continue/next-action.d.ts +13 -0
- package/dist/core/workflow/continue/next-action.d.ts.map +1 -0
- package/dist/core/workflow/continue/next-action.js +129 -0
- package/dist/core/workflow/continue/next-action.js.map +1 -0
- package/dist/core/workflow/continue/section-checker.d.ts +18 -0
- package/dist/core/workflow/continue/section-checker.d.ts.map +1 -0
- package/dist/core/workflow/continue/section-checker.js +114 -0
- package/dist/core/workflow/continue/section-checker.js.map +1 -0
- package/dist/core/workflow/continue/types.d.ts +113 -0
- package/dist/core/workflow/continue/types.d.ts.map +1 -0
- package/dist/core/workflow/continue/types.js +2 -0
- package/dist/core/workflow/continue/types.js.map +1 -0
- package/dist/core/workflow/index.d.ts +11 -0
- package/dist/core/workflow/index.d.ts.map +1 -0
- package/dist/core/workflow/index.js +12 -0
- package/dist/core/workflow/index.js.map +1 -0
- package/dist/core/workflow/propose/index.d.ts +6 -0
- package/dist/core/workflow/propose/index.d.ts.map +1 -0
- package/dist/core/workflow/propose/index.js +5 -0
- package/dist/core/workflow/propose/index.js.map +1 -0
- package/dist/core/workflow/propose/note-creator.d.ts +35 -0
- package/dist/core/workflow/propose/note-creator.d.ts.map +1 -0
- package/dist/core/workflow/propose/note-creator.js +178 -0
- package/dist/core/workflow/propose/note-creator.js.map +1 -0
- package/dist/core/workflow/propose/prerequisites.d.ts +17 -0
- package/dist/core/workflow/propose/prerequisites.d.ts.map +1 -0
- package/dist/core/workflow/propose/prerequisites.js +78 -0
- package/dist/core/workflow/propose/prerequisites.js.map +1 -0
- package/dist/core/workflow/propose/propose.d.ts +13 -0
- package/dist/core/workflow/propose/propose.d.ts.map +1 -0
- package/dist/core/workflow/propose/propose.js +204 -0
- package/dist/core/workflow/propose/propose.js.map +1 -0
- package/dist/core/workflow/propose/query-normalizer.d.ts +7 -0
- package/dist/core/workflow/propose/query-normalizer.d.ts.map +1 -0
- package/dist/core/workflow/propose/query-normalizer.js +77 -0
- package/dist/core/workflow/propose/query-normalizer.js.map +1 -0
- package/dist/core/workflow/propose/types.d.ts +71 -0
- package/dist/core/workflow/propose/types.d.ts.map +1 -0
- package/dist/core/workflow/propose/types.js +2 -0
- package/dist/core/workflow/propose/types.js.map +1 -0
- package/dist/core/workflow/query/index.d.ts +6 -0
- package/dist/core/workflow/query/index.d.ts.map +1 -0
- package/dist/core/workflow/query/index.js +5 -0
- package/dist/core/workflow/query/index.js.map +1 -0
- package/dist/core/workflow/query/noteworthiness.d.ts +14 -0
- package/dist/core/workflow/query/noteworthiness.d.ts.map +1 -0
- package/dist/core/workflow/query/noteworthiness.js +48 -0
- package/dist/core/workflow/query/noteworthiness.js.map +1 -0
- package/dist/core/workflow/query/query-note-creator.d.ts +13 -0
- package/dist/core/workflow/query/query-note-creator.d.ts.map +1 -0
- package/dist/core/workflow/query/query-note-creator.js +168 -0
- package/dist/core/workflow/query/query-note-creator.js.map +1 -0
- package/dist/core/workflow/query/query-search.d.ts +19 -0
- package/dist/core/workflow/query/query-search.d.ts.map +1 -0
- package/dist/core/workflow/query/query-search.js +252 -0
- package/dist/core/workflow/query/query-search.js.map +1 -0
- package/dist/core/workflow/query/query.d.ts +18 -0
- package/dist/core/workflow/query/query.d.ts.map +1 -0
- package/dist/core/workflow/query/query.js +29 -0
- package/dist/core/workflow/query/query.js.map +1 -0
- package/dist/core/workflow/query/types.d.ts +67 -0
- package/dist/core/workflow/query/types.d.ts.map +1 -0
- package/dist/core/workflow/query/types.js +2 -0
- package/dist/core/workflow/query/types.js.map +1 -0
- package/dist/core/workflow/verify/coherence.d.ts +30 -0
- package/dist/core/workflow/verify/coherence.d.ts.map +1 -0
- package/dist/core/workflow/verify/coherence.js +206 -0
- package/dist/core/workflow/verify/coherence.js.map +1 -0
- package/dist/core/workflow/verify/completeness.d.ts +24 -0
- package/dist/core/workflow/verify/completeness.d.ts.map +1 -0
- package/dist/core/workflow/verify/completeness.js +172 -0
- package/dist/core/workflow/verify/completeness.js.map +1 -0
- package/dist/core/workflow/verify/correctness.d.ts +38 -0
- package/dist/core/workflow/verify/correctness.d.ts.map +1 -0
- package/dist/core/workflow/verify/correctness.js +352 -0
- package/dist/core/workflow/verify/correctness.js.map +1 -0
- package/dist/core/workflow/verify/index.d.ts +7 -0
- package/dist/core/workflow/verify/index.d.ts.map +1 -0
- package/dist/core/workflow/verify/index.js +6 -0
- package/dist/core/workflow/verify/index.js.map +1 -0
- package/dist/core/workflow/verify/vault-integrity.d.ts +45 -0
- package/dist/core/workflow/verify/vault-integrity.d.ts.map +1 -0
- package/dist/core/workflow/verify/vault-integrity.js +141 -0
- package/dist/core/workflow/verify/vault-integrity.js.map +1 -0
- package/dist/core/workflow/verify/verify.d.ts +23 -0
- package/dist/core/workflow/verify/verify.d.ts.map +1 -0
- package/dist/core/workflow/verify/verify.js +122 -0
- package/dist/core/workflow/verify/verify.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/types/delta.d.ts +17 -0
- package/dist/types/delta.d.ts.map +1 -0
- package/dist/types/delta.js +2 -0
- package/dist/types/delta.js.map +1 -0
- package/dist/types/frontmatter.d.ts +51 -0
- package/dist/types/frontmatter.d.ts.map +1 -0
- package/dist/types/frontmatter.js +2 -0
- package/dist/types/frontmatter.js.map +1 -0
- package/dist/types/index-record.d.ts +46 -0
- package/dist/types/index-record.d.ts.map +1 -0
- package/dist/types/index-record.js +2 -0
- package/dist/types/index-record.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/next-action.d.ts +10 -0
- package/dist/types/next-action.d.ts.map +1 -0
- package/dist/types/next-action.js +2 -0
- package/dist/types/next-action.js.map +1 -0
- package/dist/types/notes.d.ts +9 -0
- package/dist/types/notes.d.ts.map +1 -0
- package/dist/types/notes.js +2 -0
- package/dist/types/notes.js.map +1 -0
- package/dist/types/requirement.d.ts +19 -0
- package/dist/types/requirement.d.ts.map +1 -0
- package/dist/types/requirement.js +2 -0
- package/dist/types/requirement.js.map +1 -0
- package/dist/types/retrieval.d.ts +32 -0
- package/dist/types/retrieval.d.ts.map +1 -0
- package/dist/types/retrieval.js +2 -0
- package/dist/types/retrieval.js.map +1 -0
- package/dist/types/sequencing.d.ts +83 -0
- package/dist/types/sequencing.d.ts.map +1 -0
- package/dist/types/sequencing.js +2 -0
- package/dist/types/sequencing.js.map +1 -0
- package/dist/types/task.d.ts +7 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +2 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/verify.d.ts +23 -0
- package/dist/types/verify.d.ts.map +1 -0
- package/dist/types/verify.js +2 -0
- package/dist/types/verify.js.map +1 -0
- package/dist/utils/hash.d.ts +6 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +9 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/id-generator.d.ts +17 -0
- package/dist/utils/id-generator.d.ts.map +1 -0
- package/dist/utils/id-generator.js +24 -0
- package/dist/utils/id-generator.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/normalize.d.ts +11 -0
- package/dist/utils/normalize.d.ts.map +1 -0
- package/dist/utils/normalize.js +15 -0
- package/dist/utils/normalize.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration orchestrator: coordinates scanning, conversion, and writing
|
|
3
|
+
* to migrate an OpenSpec project to open-wiki-spec format.
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'node:fs';
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import { scanOpenSpec, findOpenSpecDir } from './scanner.js';
|
|
8
|
+
import { convertAllSpecs } from './spec-converter.js';
|
|
9
|
+
import { convertAllChanges } from './change-converter.js';
|
|
10
|
+
import { convertConfigToSource } from './source-converter.js';
|
|
11
|
+
import { inferSystems, convertSystems, buildSystemRefMap, buildFeatureRefMap, } from './system-inferrer.js';
|
|
12
|
+
import { initVault } from '../../cli/init/init-engine.js';
|
|
13
|
+
/**
|
|
14
|
+
* Plan a migration from OpenSpec to open-wiki-spec.
|
|
15
|
+
* Does not write any files - just produces a plan.
|
|
16
|
+
*/
|
|
17
|
+
export function planMigration(options) {
|
|
18
|
+
const projectPath = path.resolve(options.projectPath ?? '.');
|
|
19
|
+
const openspecPath = options.openspecDir
|
|
20
|
+
? path.resolve(options.openspecDir)
|
|
21
|
+
: findOpenSpecDir(projectPath) ?? '';
|
|
22
|
+
if (!openspecPath || !fs.existsSync(openspecPath)) {
|
|
23
|
+
throw new Error(`OpenSpec directory not found. Specify with --openspec-dir or ensure openspec/ exists in ${projectPath}`);
|
|
24
|
+
}
|
|
25
|
+
const wikiPath = path.join(projectPath, 'wiki');
|
|
26
|
+
// Step 1: Scan
|
|
27
|
+
const scan = scanOpenSpec(openspecPath);
|
|
28
|
+
const scanStep = {
|
|
29
|
+
name: 'Scan OpenSpec',
|
|
30
|
+
description: `Found ${scan.specs.length} specs, ${scan.activeChanges.length} active changes, ${scan.archivedChanges.length} archived changes`,
|
|
31
|
+
outputs: [],
|
|
32
|
+
warnings: [...scan.warnings],
|
|
33
|
+
};
|
|
34
|
+
// Step 2: Generate source note from config context
|
|
35
|
+
const sourceOutputs = [];
|
|
36
|
+
if (scan.config?.context) {
|
|
37
|
+
sourceOutputs.push(convertConfigToSource(scan.config.context, scan.config));
|
|
38
|
+
}
|
|
39
|
+
const sourceStep = {
|
|
40
|
+
name: 'Generate Source Notes',
|
|
41
|
+
description: sourceOutputs.length > 0
|
|
42
|
+
? `Generated ${sourceOutputs.length} source note from config.yaml context`
|
|
43
|
+
: 'No config context found, skipping source generation',
|
|
44
|
+
outputs: sourceOutputs,
|
|
45
|
+
warnings: [],
|
|
46
|
+
};
|
|
47
|
+
// Step 3: Infer systems
|
|
48
|
+
const systems = inferSystems(scan.specs);
|
|
49
|
+
const systemRefMap = buildSystemRefMap(systems);
|
|
50
|
+
const systemOutputs = convertSystems(systems);
|
|
51
|
+
const systemStep = {
|
|
52
|
+
name: 'Infer Systems',
|
|
53
|
+
description: `Inferred ${systems.length} systems from capability domains`,
|
|
54
|
+
outputs: systemOutputs,
|
|
55
|
+
warnings: [],
|
|
56
|
+
};
|
|
57
|
+
// Step 4: Convert specs to features
|
|
58
|
+
const featureRefMap = buildFeatureRefMap(scan.specs.map(s => s.capability));
|
|
59
|
+
const { results: featureOutputs, warnings: featureWarnings } = convertAllSpecs(scan.specs, systemRefMap);
|
|
60
|
+
const featureStep = {
|
|
61
|
+
name: 'Convert Specs to Features',
|
|
62
|
+
description: `Converted ${featureOutputs.length} specs to Feature notes`,
|
|
63
|
+
outputs: featureOutputs,
|
|
64
|
+
warnings: featureWarnings,
|
|
65
|
+
};
|
|
66
|
+
// Step 5: Convert active changes
|
|
67
|
+
const { results: activeChangeOutputs, warnings: activeChangeWarnings } = convertAllChanges(scan.activeChanges, featureRefMap, systemRefMap);
|
|
68
|
+
const activeChangeStep = {
|
|
69
|
+
name: 'Convert Active Changes',
|
|
70
|
+
description: `Converted ${scan.activeChanges.length} active changes`,
|
|
71
|
+
outputs: activeChangeOutputs,
|
|
72
|
+
warnings: activeChangeWarnings,
|
|
73
|
+
};
|
|
74
|
+
// Step 6: Convert archived changes (optional)
|
|
75
|
+
const steps = [scanStep, sourceStep, systemStep, featureStep, activeChangeStep];
|
|
76
|
+
if (!options.skipArchive) {
|
|
77
|
+
const { results: archiveOutputs, warnings: archiveWarnings } = convertAllChanges(scan.archivedChanges, featureRefMap, systemRefMap);
|
|
78
|
+
const archiveStep = {
|
|
79
|
+
name: 'Convert Archived Changes',
|
|
80
|
+
description: `Converted ${scan.archivedChanges.length} archived changes`,
|
|
81
|
+
outputs: archiveOutputs,
|
|
82
|
+
warnings: archiveWarnings,
|
|
83
|
+
};
|
|
84
|
+
steps.push(archiveStep);
|
|
85
|
+
}
|
|
86
|
+
// Count totals
|
|
87
|
+
const totalFiles = steps.reduce((sum, s) => sum + s.outputs.length, 0);
|
|
88
|
+
const totalWarnings = steps.reduce((sum, s) => sum + s.warnings.length, 0);
|
|
89
|
+
return {
|
|
90
|
+
openspecPath,
|
|
91
|
+
wikiPath,
|
|
92
|
+
steps,
|
|
93
|
+
totalFiles,
|
|
94
|
+
totalWarnings,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Execute a migration plan: init vault structure and write all files.
|
|
99
|
+
*/
|
|
100
|
+
export async function executeMigration(plan, dryRun = false) {
|
|
101
|
+
const filesWritten = [];
|
|
102
|
+
const filesSkipped = [];
|
|
103
|
+
const errors = [];
|
|
104
|
+
if (!dryRun) {
|
|
105
|
+
// Initialize vault structure (creates directories and meta files)
|
|
106
|
+
try {
|
|
107
|
+
await initVault({ path: path.dirname(plan.wikiPath) });
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
errors.push(`Failed to init vault: ${err.message}`);
|
|
111
|
+
}
|
|
112
|
+
// Write all outputs
|
|
113
|
+
for (const step of plan.steps) {
|
|
114
|
+
for (const output of step.outputs) {
|
|
115
|
+
const fullPath = path.join(path.dirname(plan.wikiPath), output.targetPath);
|
|
116
|
+
try {
|
|
117
|
+
if (fs.existsSync(fullPath)) {
|
|
118
|
+
filesSkipped.push(output.targetPath);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const dir = path.dirname(fullPath);
|
|
122
|
+
if (!fs.existsSync(dir)) {
|
|
123
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
124
|
+
}
|
|
125
|
+
fs.writeFileSync(fullPath, output.content, 'utf-8');
|
|
126
|
+
filesWritten.push(output.targetPath);
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
errors.push(`Failed to write ${output.targetPath}: ${err.message}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
plan,
|
|
136
|
+
filesWritten,
|
|
137
|
+
filesSkipped,
|
|
138
|
+
dryRun,
|
|
139
|
+
errors,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Run the full migration: plan and execute.
|
|
144
|
+
*/
|
|
145
|
+
export async function migrate(options) {
|
|
146
|
+
const plan = planMigration(options);
|
|
147
|
+
return executeMigration(plan, options.dryRun);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/core/migrate/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ScanResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Scan an OpenSpec directory and return all discovered artifacts.
|
|
4
|
+
*/
|
|
5
|
+
export declare function scanOpenSpec(openspecPath: string): ScanResult;
|
|
6
|
+
/**
|
|
7
|
+
* Auto-detect the openspec/ directory from a project root.
|
|
8
|
+
*/
|
|
9
|
+
export declare function findOpenSpecDir(projectPath: string): string | null;
|
|
10
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/scanner.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,UAAU,EAKX,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,CAmB7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMlE"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scanner for OpenSpec directory structure.
|
|
3
|
+
* Reads and catalogs all specs, changes, and config from an openspec/ directory.
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'node:fs';
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import { parse as parseYaml } from 'yaml';
|
|
8
|
+
/**
|
|
9
|
+
* Scan an OpenSpec directory and return all discovered artifacts.
|
|
10
|
+
*/
|
|
11
|
+
export function scanOpenSpec(openspecPath) {
|
|
12
|
+
const warnings = [];
|
|
13
|
+
if (!fs.existsSync(openspecPath)) {
|
|
14
|
+
throw new Error(`OpenSpec directory not found: ${openspecPath}`);
|
|
15
|
+
}
|
|
16
|
+
const config = readConfig(openspecPath, warnings);
|
|
17
|
+
const specs = scanSpecs(openspecPath, warnings);
|
|
18
|
+
const { activeChanges, archivedChanges } = scanChanges(openspecPath, warnings);
|
|
19
|
+
return {
|
|
20
|
+
openspecPath,
|
|
21
|
+
config,
|
|
22
|
+
specs,
|
|
23
|
+
activeChanges,
|
|
24
|
+
archivedChanges,
|
|
25
|
+
warnings,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Auto-detect the openspec/ directory from a project root.
|
|
30
|
+
*/
|
|
31
|
+
export function findOpenSpecDir(projectPath) {
|
|
32
|
+
const candidate = path.join(projectPath, 'openspec');
|
|
33
|
+
if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
|
|
34
|
+
return candidate;
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
function readConfig(openspecPath, warnings) {
|
|
39
|
+
const configPath = path.join(openspecPath, 'config.yaml');
|
|
40
|
+
if (!fs.existsSync(configPath)) {
|
|
41
|
+
warnings.push('No config.yaml found in OpenSpec directory');
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const raw = fs.readFileSync(configPath, 'utf-8');
|
|
46
|
+
const data = parseYaml(raw);
|
|
47
|
+
if (typeof data !== 'object' || data === null || Array.isArray(data)) {
|
|
48
|
+
warnings.push('config.yaml does not contain a valid YAML object');
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return data;
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
warnings.push(`Failed to parse config.yaml: ${err.message}`);
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function scanSpecs(openspecPath, warnings) {
|
|
59
|
+
const specsDir = path.join(openspecPath, 'specs');
|
|
60
|
+
if (!fs.existsSync(specsDir)) {
|
|
61
|
+
warnings.push('No specs/ directory found');
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
const specs = [];
|
|
65
|
+
const entries = fs.readdirSync(specsDir, { withFileTypes: true });
|
|
66
|
+
for (const entry of entries) {
|
|
67
|
+
if (!entry.isDirectory())
|
|
68
|
+
continue;
|
|
69
|
+
const specFile = path.join(specsDir, entry.name, 'spec.md');
|
|
70
|
+
if (!fs.existsSync(specFile)) {
|
|
71
|
+
warnings.push(`Spec directory ${entry.name}/ has no spec.md`);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const content = fs.readFileSync(specFile, 'utf-8');
|
|
76
|
+
specs.push({
|
|
77
|
+
capability: entry.name,
|
|
78
|
+
specPath: path.join('specs', entry.name, 'spec.md'),
|
|
79
|
+
content,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
warnings.push(`Failed to read ${specFile}: ${err.message}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return specs;
|
|
87
|
+
}
|
|
88
|
+
function scanChanges(openspecPath, warnings) {
|
|
89
|
+
const changesDir = path.join(openspecPath, 'changes');
|
|
90
|
+
if (!fs.existsSync(changesDir)) {
|
|
91
|
+
warnings.push('No changes/ directory found');
|
|
92
|
+
return { activeChanges: [], archivedChanges: [] };
|
|
93
|
+
}
|
|
94
|
+
const activeChanges = [];
|
|
95
|
+
const archivedChanges = [];
|
|
96
|
+
// Scan active changes
|
|
97
|
+
const entries = fs.readdirSync(changesDir, { withFileTypes: true });
|
|
98
|
+
for (const entry of entries) {
|
|
99
|
+
if (!entry.isDirectory())
|
|
100
|
+
continue;
|
|
101
|
+
if (entry.name === 'archive')
|
|
102
|
+
continue;
|
|
103
|
+
const change = scanSingleChange(path.join(changesDir, entry.name), entry.name, false, warnings);
|
|
104
|
+
if (change)
|
|
105
|
+
activeChanges.push(change);
|
|
106
|
+
}
|
|
107
|
+
// Scan archived changes
|
|
108
|
+
const archiveDir = path.join(changesDir, 'archive');
|
|
109
|
+
if (fs.existsSync(archiveDir)) {
|
|
110
|
+
const archiveEntries = fs.readdirSync(archiveDir, { withFileTypes: true });
|
|
111
|
+
for (const entry of archiveEntries) {
|
|
112
|
+
if (!entry.isDirectory())
|
|
113
|
+
continue;
|
|
114
|
+
const change = scanSingleChange(path.join(archiveDir, entry.name), entry.name, true, warnings);
|
|
115
|
+
if (change)
|
|
116
|
+
archivedChanges.push(change);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return { activeChanges, archivedChanges };
|
|
120
|
+
}
|
|
121
|
+
function scanSingleChange(changePath, name, archived, warnings) {
|
|
122
|
+
const proposal = readFileOrNull(path.join(changePath, 'proposal.md'));
|
|
123
|
+
const design = readFileOrNull(path.join(changePath, 'design.md'));
|
|
124
|
+
const tasks = readFileOrNull(path.join(changePath, 'tasks.md'));
|
|
125
|
+
const metadata = readChangeMetadata(path.join(changePath, '.openspec.yaml'), warnings);
|
|
126
|
+
if (!proposal) {
|
|
127
|
+
warnings.push(`Change ${name} has no proposal.md, skipping`);
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
// Scan delta specs
|
|
131
|
+
const deltaSpecs = [];
|
|
132
|
+
const specsDir = path.join(changePath, 'specs');
|
|
133
|
+
if (fs.existsSync(specsDir)) {
|
|
134
|
+
const specEntries = fs.readdirSync(specsDir, { withFileTypes: true });
|
|
135
|
+
for (const entry of specEntries) {
|
|
136
|
+
if (!entry.isDirectory())
|
|
137
|
+
continue;
|
|
138
|
+
const specFile = path.join(specsDir, entry.name, 'spec.md');
|
|
139
|
+
if (fs.existsSync(specFile)) {
|
|
140
|
+
try {
|
|
141
|
+
deltaSpecs.push({
|
|
142
|
+
capability: entry.name,
|
|
143
|
+
content: fs.readFileSync(specFile, 'utf-8'),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
warnings.push(`Failed to read delta spec ${entry.name}/spec.md in change ${name}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
name,
|
|
154
|
+
dirPath: changePath,
|
|
155
|
+
proposal,
|
|
156
|
+
design,
|
|
157
|
+
tasks,
|
|
158
|
+
metadata,
|
|
159
|
+
deltaSpecs,
|
|
160
|
+
archived,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
function readFileOrNull(filePath) {
|
|
164
|
+
try {
|
|
165
|
+
if (!fs.existsSync(filePath))
|
|
166
|
+
return null;
|
|
167
|
+
return fs.readFileSync(filePath, 'utf-8');
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function readChangeMetadata(filePath, warnings) {
|
|
174
|
+
const raw = readFileOrNull(filePath);
|
|
175
|
+
if (!raw)
|
|
176
|
+
return null;
|
|
177
|
+
try {
|
|
178
|
+
const data = parseYaml(raw);
|
|
179
|
+
if (typeof data !== 'object' || data === null)
|
|
180
|
+
return null;
|
|
181
|
+
return data;
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
warnings.push(`Failed to parse .openspec.yaml: ${err.message}`);
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/core/migrate/scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { OpenSpecConfig, ConversionResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Convert the config.yaml context field into a Source note.
|
|
4
|
+
*/
|
|
5
|
+
export declare function convertConfigToSource(context: string, config: OpenSpecConfig): ConversionResult;
|
|
6
|
+
//# sourceMappingURL=source-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-converter.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/source-converter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,GACrB,gBAAgB,CAmClB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts OpenSpec config.yaml context into an open-wiki-spec Source note.
|
|
3
|
+
* Rich config contexts (project architecture, stack, conventions) become
|
|
4
|
+
* project-context Source notes for reference.
|
|
5
|
+
*/
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
/**
|
|
8
|
+
* Convert the config.yaml context field into a Source note.
|
|
9
|
+
*/
|
|
10
|
+
export function convertConfigToSource(context, config) {
|
|
11
|
+
const id = 'project-context';
|
|
12
|
+
const rulesBlock = config.rules ? formatRules(config.rules) : '';
|
|
13
|
+
const content = `---
|
|
14
|
+
type: source
|
|
15
|
+
id: ${id}
|
|
16
|
+
status: active
|
|
17
|
+
source_type: other
|
|
18
|
+
tags:
|
|
19
|
+
- source
|
|
20
|
+
- migrated
|
|
21
|
+
- project-context
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Source: Project Context
|
|
25
|
+
|
|
26
|
+
## Summary
|
|
27
|
+
|
|
28
|
+
Project context and conventions migrated from OpenSpec config.yaml.
|
|
29
|
+
|
|
30
|
+
## Key Points
|
|
31
|
+
|
|
32
|
+
${context.trim()}
|
|
33
|
+
|
|
34
|
+
${rulesBlock ? `## OpenSpec Rules\n\n${rulesBlock}` : ''}
|
|
35
|
+
|
|
36
|
+
## Related Notes
|
|
37
|
+
`;
|
|
38
|
+
return {
|
|
39
|
+
targetPath: path.join('wiki', '01-sources', `${id}.md`),
|
|
40
|
+
content,
|
|
41
|
+
sourceDescription: 'openspec/config.yaml (context field)',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function formatRules(rules) {
|
|
45
|
+
const lines = [];
|
|
46
|
+
for (const [key, value] of Object.entries(rules)) {
|
|
47
|
+
lines.push(`### ${key}`);
|
|
48
|
+
if (Array.isArray(value)) {
|
|
49
|
+
for (const item of value) {
|
|
50
|
+
lines.push(`- ${item}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (typeof value === 'string') {
|
|
54
|
+
lines.push(value);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
lines.push(String(value));
|
|
58
|
+
}
|
|
59
|
+
lines.push('');
|
|
60
|
+
}
|
|
61
|
+
return lines.join('\n');
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=source-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-converter.js","sourceRoot":"","sources":["../../../src/core/migrate/source-converter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,MAAsB;IAEtB,MAAM,EAAE,GAAG,iBAAiB,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjE,MAAM,OAAO,GAAG;;MAEZ,EAAE;;;;;;;;;;;;;;;;;EAiBN,OAAO,CAAC,IAAI,EAAE;;EAEd,UAAU,CAAC,CAAC,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;;;CAGvD,CAAC;IAEA,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC;QACvD,OAAO;QACP,iBAAiB,EAAE,sCAAsC;KAC1D,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAA8B;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts OpenSpec spec.md files into open-wiki-spec Feature notes.
|
|
3
|
+
*/
|
|
4
|
+
import type { ScannedSpec, ConversionResult } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Convert a single OpenSpec spec into a Feature note.
|
|
7
|
+
*/
|
|
8
|
+
export declare function convertSpec(spec: ScannedSpec, systemRef: string): ConversionResult;
|
|
9
|
+
/**
|
|
10
|
+
* Convert all specs into Feature notes.
|
|
11
|
+
*/
|
|
12
|
+
export declare function convertAllSpecs(specs: ScannedSpec[], systemRefs: Map<string, string>): {
|
|
13
|
+
results: ConversionResult[];
|
|
14
|
+
warnings: string[];
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=spec-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-converter.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/spec-converter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAShE;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAuBlF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAAE,EACpB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B;IAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAcrD"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import * as path from 'node:path';
|
|
2
|
+
const REQUIREMENT_HEADING_RE = /^###\s+Requirement:\s*(.+)$/;
|
|
3
|
+
const SCENARIO_HEADING_RE = /^####\s+Scenario:\s*(.+)$/;
|
|
4
|
+
const PURPOSE_SECTION_RE = /^##\s+Purpose$/m;
|
|
5
|
+
const REQUIREMENTS_SECTION_RE = /^##\s+Requirements$/m;
|
|
6
|
+
const WHY_SECTION_RE = /^##\s+Why$/m;
|
|
7
|
+
/**
|
|
8
|
+
* Convert a single OpenSpec spec into a Feature note.
|
|
9
|
+
*/
|
|
10
|
+
export function convertSpec(spec, systemRef) {
|
|
11
|
+
const id = spec.capability;
|
|
12
|
+
const title = formatTitle(spec.capability);
|
|
13
|
+
const purpose = extractPurpose(spec.content);
|
|
14
|
+
const requirementsBlock = extractRequirementsBlock(spec.content);
|
|
15
|
+
const constraints = extractConstraints(spec.content);
|
|
16
|
+
const knownGaps = extractKnownGaps(spec.content);
|
|
17
|
+
const content = buildFeatureNote({
|
|
18
|
+
id,
|
|
19
|
+
title,
|
|
20
|
+
systemRef,
|
|
21
|
+
purpose,
|
|
22
|
+
requirementsBlock,
|
|
23
|
+
constraints,
|
|
24
|
+
knownGaps,
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
targetPath: path.join('wiki', '03-features', `${id}.md`),
|
|
28
|
+
content,
|
|
29
|
+
sourceDescription: `openspec/specs/${spec.capability}/spec.md`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Convert all specs into Feature notes.
|
|
34
|
+
*/
|
|
35
|
+
export function convertAllSpecs(specs, systemRefs) {
|
|
36
|
+
const results = [];
|
|
37
|
+
const warnings = [];
|
|
38
|
+
for (const spec of specs) {
|
|
39
|
+
const systemRef = systemRefs.get(spec.capability) ?? 'default-system';
|
|
40
|
+
try {
|
|
41
|
+
results.push(convertSpec(spec, systemRef));
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
warnings.push(`Failed to convert spec ${spec.capability}: ${err.message}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { results, warnings };
|
|
48
|
+
}
|
|
49
|
+
function buildFeatureNote(opts) {
|
|
50
|
+
return `---
|
|
51
|
+
type: feature
|
|
52
|
+
id: ${opts.id}
|
|
53
|
+
status: active
|
|
54
|
+
systems:
|
|
55
|
+
- "${opts.systemRef}"
|
|
56
|
+
sources:
|
|
57
|
+
- "[[Source: Project Context]]"
|
|
58
|
+
decisions: []
|
|
59
|
+
changes: []
|
|
60
|
+
tags:
|
|
61
|
+
- feature
|
|
62
|
+
- migrated
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
# Feature: ${opts.title}
|
|
66
|
+
|
|
67
|
+
## Purpose
|
|
68
|
+
|
|
69
|
+
${opts.purpose || '<!-- Migrated from OpenSpec - purpose not specified -->'}
|
|
70
|
+
|
|
71
|
+
## Current Behavior
|
|
72
|
+
|
|
73
|
+
<!-- Migrated from OpenSpec spec. See requirements below for current behavior. -->
|
|
74
|
+
|
|
75
|
+
## Constraints
|
|
76
|
+
|
|
77
|
+
${opts.constraints || '<!-- No constraints specified in original spec -->'}
|
|
78
|
+
|
|
79
|
+
## Known Gaps
|
|
80
|
+
|
|
81
|
+
${opts.knownGaps || '<!-- No known gaps specified in original spec -->'}
|
|
82
|
+
|
|
83
|
+
## Requirements
|
|
84
|
+
|
|
85
|
+
${opts.requirementsBlock || '<!-- No requirements found in original spec -->'}
|
|
86
|
+
|
|
87
|
+
## Related Notes
|
|
88
|
+
`;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Extract the Purpose section content from an OpenSpec spec.
|
|
92
|
+
*/
|
|
93
|
+
function extractPurpose(content) {
|
|
94
|
+
const match = content.match(PURPOSE_SECTION_RE);
|
|
95
|
+
if (!match) {
|
|
96
|
+
// Try extracting from first paragraph after H1
|
|
97
|
+
const h1End = content.indexOf('\n## ');
|
|
98
|
+
if (h1End === -1)
|
|
99
|
+
return '';
|
|
100
|
+
const h1Match = content.match(/^#\s+.+\n+([\s\S]*?)(?=\n##\s)/);
|
|
101
|
+
if (h1Match)
|
|
102
|
+
return h1Match[1].trim();
|
|
103
|
+
return '';
|
|
104
|
+
}
|
|
105
|
+
const startIdx = match.index + match[0].length;
|
|
106
|
+
const nextSection = content.indexOf('\n## ', startIdx);
|
|
107
|
+
const sectionContent = nextSection === -1
|
|
108
|
+
? content.slice(startIdx)
|
|
109
|
+
: content.slice(startIdx, nextSection);
|
|
110
|
+
return sectionContent.trim();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Extract the Requirements block preserving its markdown structure.
|
|
114
|
+
*/
|
|
115
|
+
function extractRequirementsBlock(content) {
|
|
116
|
+
const match = content.match(REQUIREMENTS_SECTION_RE);
|
|
117
|
+
if (!match)
|
|
118
|
+
return '';
|
|
119
|
+
const startIdx = match.index + match[0].length;
|
|
120
|
+
// Find next H2 that is NOT a requirement sub-section (i.e., at ## level)
|
|
121
|
+
const remaining = content.slice(startIdx);
|
|
122
|
+
const nextH2 = remaining.match(/\n## (?!Requirements)/);
|
|
123
|
+
const block = nextH2 ? remaining.slice(0, nextH2.index) : remaining;
|
|
124
|
+
return block.trim();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Extract constraints from spec content (if any section matches).
|
|
128
|
+
*/
|
|
129
|
+
function extractConstraints(content) {
|
|
130
|
+
const match = content.match(/^##\s+Constraints$/m);
|
|
131
|
+
if (!match)
|
|
132
|
+
return '';
|
|
133
|
+
const startIdx = match.index + match[0].length;
|
|
134
|
+
const nextSection = content.indexOf('\n## ', startIdx);
|
|
135
|
+
return (nextSection === -1 ? content.slice(startIdx) : content.slice(startIdx, nextSection)).trim();
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Extract known gaps from spec content.
|
|
139
|
+
*/
|
|
140
|
+
function extractKnownGaps(content) {
|
|
141
|
+
const match = content.match(/^##\s+Known\s+Gaps$/m);
|
|
142
|
+
if (!match)
|
|
143
|
+
return '';
|
|
144
|
+
const startIdx = match.index + match[0].length;
|
|
145
|
+
const nextSection = content.indexOf('\n## ', startIdx);
|
|
146
|
+
return (nextSection === -1 ? content.slice(startIdx) : content.slice(startIdx, nextSection)).trim();
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Convert kebab-case capability name to a readable title.
|
|
150
|
+
*/
|
|
151
|
+
function formatTitle(capability) {
|
|
152
|
+
return capability
|
|
153
|
+
.split('-')
|
|
154
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
155
|
+
.join(' ');
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=spec-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-converter.js","sourceRoot":"","sources":["../../../src/core/migrate/spec-converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ScannedSpec, ConversionResult } from './types.js';
|
|
2
|
+
export interface InferredSystem {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
capabilities: string[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Infer systems from a list of specs by grouping capabilities by domain prefix.
|
|
9
|
+
*/
|
|
10
|
+
export declare function inferSystems(specs: ScannedSpec[]): InferredSystem[];
|
|
11
|
+
/**
|
|
12
|
+
* Build a mapping from capability name to system wikilink ref.
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildSystemRefMap(systems: InferredSystem[]): Map<string, string>;
|
|
15
|
+
/**
|
|
16
|
+
* Build a mapping from capability name to feature wikilink ref.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildFeatureRefMap(capabilities: string[]): Map<string, string>;
|
|
19
|
+
/**
|
|
20
|
+
* Convert inferred systems into System note ConversionResults.
|
|
21
|
+
*/
|
|
22
|
+
export declare function convertSystems(systems: InferredSystem[]): ConversionResult[];
|
|
23
|
+
//# sourceMappingURL=system-inferrer.d.ts.map
|