@rsaglobaltech/specgate 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1016 -0
- package/README.md +148 -0
- package/bin/specgate.js +2 -0
- package/bin/specgate.ts +383 -0
- package/dist/bin/specgate.js +342 -0
- package/dist/bin/specgate.js.map +1 -0
- package/dist/packages/core/src/application/AddRequirementUseCase.js +24 -0
- package/dist/packages/core/src/application/AddRequirementUseCase.js.map +1 -0
- package/dist/packages/core/src/application/ArchiveChangeUseCase.js +185 -0
- package/dist/packages/core/src/application/ArchiveChangeUseCase.js.map +1 -0
- package/dist/packages/core/src/application/CheckAgainstLockUseCase.js +134 -0
- package/dist/packages/core/src/application/CheckAgainstLockUseCase.js.map +1 -0
- package/dist/packages/core/src/application/GenerateAgentPromptUseCase.js +25 -0
- package/dist/packages/core/src/application/GenerateAgentPromptUseCase.js.map +1 -0
- package/dist/packages/core/src/application/GeneratePlanUseCase.js +135 -0
- package/dist/packages/core/src/application/GeneratePlanUseCase.js.map +1 -0
- package/dist/packages/core/src/application/LinkRequirementUseCase.js +25 -0
- package/dist/packages/core/src/application/LinkRequirementUseCase.js.map +1 -0
- package/dist/packages/core/src/application/RemovePackUseCase.js +28 -0
- package/dist/packages/core/src/application/RemovePackUseCase.js.map +1 -0
- package/dist/packages/core/src/application/UpdateRequirementStatusUseCase.js +37 -0
- package/dist/packages/core/src/application/UpdateRequirementStatusUseCase.js.map +1 -0
- package/dist/packages/core/src/application/ValidateChangeUseCase.js +86 -0
- package/dist/packages/core/src/application/ValidateChangeUseCase.js.map +1 -0
- package/dist/packages/core/src/application/ValidateProjectUseCase.js +101 -0
- package/dist/packages/core/src/application/ValidateProjectUseCase.js.map +1 -0
- package/dist/packages/core/src/application/ports/IDomainPackRepository.js +3 -0
- package/dist/packages/core/src/application/ports/IDomainPackRepository.js.map +1 -0
- package/dist/packages/core/src/application/ports/IHarnessConfigRepository.js +3 -0
- package/dist/packages/core/src/application/ports/IHarnessConfigRepository.js.map +1 -0
- package/dist/packages/core/src/application/ports/ILockfileRepository.js +3 -0
- package/dist/packages/core/src/application/ports/ILockfileRepository.js.map +1 -0
- package/dist/packages/core/src/application/ports/IManifestRepository.js +3 -0
- package/dist/packages/core/src/application/ports/IManifestRepository.js.map +1 -0
- package/dist/packages/core/src/application/ports/IProjectRepository.js +3 -0
- package/dist/packages/core/src/application/ports/IProjectRepository.js.map +1 -0
- package/dist/packages/core/src/application/ports/IRequirementGraphRepository.js +3 -0
- package/dist/packages/core/src/application/ports/IRequirementGraphRepository.js.map +1 -0
- package/dist/packages/core/src/application/ports/ITraceabilityRepository.js +3 -0
- package/dist/packages/core/src/application/ports/ITraceabilityRepository.js.map +1 -0
- package/dist/packages/core/src/domain/AgentPrompt.js +79 -0
- package/dist/packages/core/src/domain/AgentPrompt.js.map +1 -0
- package/dist/packages/core/src/domain/ArchivePlan.js +26 -0
- package/dist/packages/core/src/domain/ArchivePlan.js.map +1 -0
- package/dist/packages/core/src/domain/AuthoringScope.js +48 -0
- package/dist/packages/core/src/domain/AuthoringScope.js.map +1 -0
- package/dist/packages/core/src/domain/ChangeTemplates.js +133 -0
- package/dist/packages/core/src/domain/ChangeTemplates.js.map +1 -0
- package/dist/packages/core/src/domain/CucumberMessages.js +256 -0
- package/dist/packages/core/src/domain/CucumberMessages.js.map +1 -0
- package/dist/packages/core/src/domain/DeclaredArtifacts.js +117 -0
- package/dist/packages/core/src/domain/DeclaredArtifacts.js.map +1 -0
- package/dist/packages/core/src/domain/DeltaSpec.js +219 -0
- package/dist/packages/core/src/domain/DeltaSpec.js.map +1 -0
- package/dist/packages/core/src/domain/Diagnostic.js +75 -0
- package/dist/packages/core/src/domain/Diagnostic.js.map +1 -0
- package/dist/packages/core/src/domain/DomainPack.js +62 -0
- package/dist/packages/core/src/domain/DomainPack.js.map +1 -0
- package/dist/packages/core/src/domain/EmptyAttempt.js +60 -0
- package/dist/packages/core/src/domain/EmptyAttempt.js.map +1 -0
- package/dist/packages/core/src/domain/FileChangeSet.js +37 -0
- package/dist/packages/core/src/domain/FileChangeSet.js.map +1 -0
- package/dist/packages/core/src/domain/Gherkin.js +272 -0
- package/dist/packages/core/src/domain/Gherkin.js.map +1 -0
- package/dist/packages/core/src/domain/GherkinDialects.js +97 -0
- package/dist/packages/core/src/domain/GherkinDialects.js.map +1 -0
- package/dist/packages/core/src/domain/GherkinQuality.js +160 -0
- package/dist/packages/core/src/domain/GherkinQuality.js.map +1 -0
- package/dist/packages/core/src/domain/GherkinTags.js +119 -0
- package/dist/packages/core/src/domain/GherkinTags.js.map +1 -0
- package/dist/packages/core/src/domain/GitSafety.js +77 -0
- package/dist/packages/core/src/domain/GitSafety.js.map +1 -0
- package/dist/packages/core/src/domain/HarnessConfig.js +58 -0
- package/dist/packages/core/src/domain/HarnessConfig.js.map +1 -0
- package/dist/packages/core/src/domain/HarnessReport.js +162 -0
- package/dist/packages/core/src/domain/HarnessReport.js.map +1 -0
- package/dist/packages/core/src/domain/HarnessRun.js +154 -0
- package/dist/packages/core/src/domain/HarnessRun.js.map +1 -0
- package/dist/packages/core/src/domain/InboundChange.js +127 -0
- package/dist/packages/core/src/domain/InboundChange.js.map +1 -0
- package/dist/packages/core/src/domain/Language.js +112 -0
- package/dist/packages/core/src/domain/Language.js.map +1 -0
- package/dist/packages/core/src/domain/Lockfile.js +64 -0
- package/dist/packages/core/src/domain/Lockfile.js.map +1 -0
- package/dist/packages/core/src/domain/PackContribution.js +106 -0
- package/dist/packages/core/src/domain/PackContribution.js.map +1 -0
- package/dist/packages/core/src/domain/PackDelta.js +298 -0
- package/dist/packages/core/src/domain/PackDelta.js.map +1 -0
- package/dist/packages/core/src/domain/PackSpec.js +481 -0
- package/dist/packages/core/src/domain/PackSpec.js.map +1 -0
- package/dist/packages/core/src/domain/ProfileMatch.js +87 -0
- package/dist/packages/core/src/domain/ProfileMatch.js.map +1 -0
- package/dist/packages/core/src/domain/Reconciliation.js +72 -0
- package/dist/packages/core/src/domain/Reconciliation.js.map +1 -0
- package/dist/packages/core/src/domain/RequirementGraph.js +197 -0
- package/dist/packages/core/src/domain/RequirementGraph.js.map +1 -0
- package/dist/packages/core/src/domain/RequirementPlan.js +85 -0
- package/dist/packages/core/src/domain/RequirementPlan.js.map +1 -0
- package/dist/packages/core/src/domain/RequirementReadiness.js +115 -0
- package/dist/packages/core/src/domain/RequirementReadiness.js.map +1 -0
- package/dist/packages/core/src/domain/RequirementSyntax.js +91 -0
- package/dist/packages/core/src/domain/RequirementSyntax.js.map +1 -0
- package/dist/packages/core/src/domain/ResumeState.js +115 -0
- package/dist/packages/core/src/domain/ResumeState.js.map +1 -0
- package/dist/packages/core/src/domain/RunBudget.js +103 -0
- package/dist/packages/core/src/domain/RunBudget.js.map +1 -0
- package/dist/packages/core/src/domain/SpecDiff.js +48 -0
- package/dist/packages/core/src/domain/SpecDiff.js.map +1 -0
- package/dist/packages/core/src/domain/SpecParser.js +406 -0
- package/dist/packages/core/src/domain/SpecParser.js.map +1 -0
- package/dist/packages/core/src/domain/SpecopsManifest.js +90 -0
- package/dist/packages/core/src/domain/SpecopsManifest.js.map +1 -0
- package/dist/packages/core/src/domain/TraceabilityFormat.js +317 -0
- package/dist/packages/core/src/domain/TraceabilityFormat.js.map +1 -0
- package/dist/packages/core/src/domain/TraceabilityMatrix.js +200 -0
- package/dist/packages/core/src/domain/TraceabilityMatrix.js.map +1 -0
- package/dist/packages/core/src/domain/TraceabilityMerge.js +180 -0
- package/dist/packages/core/src/domain/TraceabilityMerge.js.map +1 -0
- package/dist/packages/core/src/domain/ValidationReport.js +53 -0
- package/dist/packages/core/src/domain/ValidationReport.js.map +1 -0
- package/dist/packages/core/src/domain/ValueAnnotations.js +138 -0
- package/dist/packages/core/src/domain/ValueAnnotations.js.map +1 -0
- package/dist/packages/core/src/domain/WriteScope.js +155 -0
- package/dist/packages/core/src/domain/WriteScope.js.map +1 -0
- package/dist/packages/core/src/domain/YamlLite.js +226 -0
- package/dist/packages/core/src/domain/YamlLite.js.map +1 -0
- package/dist/packages/core/src/index.js +120 -0
- package/dist/packages/core/src/index.js.map +1 -0
- package/dist/packages/core/src/infrastructure/ChangeWorkspace.js +276 -0
- package/dist/packages/core/src/infrastructure/ChangeWorkspace.js.map +1 -0
- package/dist/packages/core/src/infrastructure/ConsoleReporter.js +19 -0
- package/dist/packages/core/src/infrastructure/ConsoleReporter.js.map +1 -0
- package/dist/packages/core/src/infrastructure/DirectorySnapshot.js +106 -0
- package/dist/packages/core/src/infrastructure/DirectorySnapshot.js.map +1 -0
- package/dist/packages/core/src/infrastructure/DiskDomainPackRepository.js +57 -0
- package/dist/packages/core/src/infrastructure/DiskDomainPackRepository.js.map +1 -0
- package/dist/packages/core/src/infrastructure/DiskHarnessConfigRepository.js +58 -0
- package/dist/packages/core/src/infrastructure/DiskHarnessConfigRepository.js.map +1 -0
- package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js +69 -0
- package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js.map +1 -0
- package/dist/packages/core/src/infrastructure/DiskLockfileRepository.js +64 -0
- package/dist/packages/core/src/infrastructure/DiskLockfileRepository.js.map +1 -0
- package/dist/packages/core/src/infrastructure/DiskManifestRepository.js +88 -0
- package/dist/packages/core/src/infrastructure/DiskManifestRepository.js.map +1 -0
- package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js +138 -0
- package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js.map +1 -0
- package/dist/packages/core/src/infrastructure/DiskPackRepository.js +130 -0
- package/dist/packages/core/src/infrastructure/DiskPackRepository.js.map +1 -0
- package/dist/packages/core/src/infrastructure/DiskProjectRepository.js +127 -0
- package/dist/packages/core/src/infrastructure/DiskProjectRepository.js.map +1 -0
- package/dist/packages/core/src/infrastructure/DiskRequirementGraphRepository.js +124 -0
- package/dist/packages/core/src/infrastructure/DiskRequirementGraphRepository.js.map +1 -0
- package/dist/packages/core/src/infrastructure/DiskTraceabilityRepository.js +53 -0
- package/dist/packages/core/src/infrastructure/DiskTraceabilityRepository.js.map +1 -0
- package/dist/packages/core/src/infrastructure/GitContributionStager.js +99 -0
- package/dist/packages/core/src/infrastructure/GitContributionStager.js.map +1 -0
- package/dist/packages/core/src/infrastructure/GitMergeDriver.js +103 -0
- package/dist/packages/core/src/infrastructure/GitMergeDriver.js.map +1 -0
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js +348 -0
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js.map +1 -0
- package/dist/packages/core/src/infrastructure/PackChangeDeposit.js +106 -0
- package/dist/packages/core/src/infrastructure/PackChangeDeposit.js.map +1 -0
- package/dist/packages/core/src/infrastructure/RemotePackResolver.js +181 -0
- package/dist/packages/core/src/infrastructure/RemotePackResolver.js.map +1 -0
- package/dist/packages/core/src/infrastructure/SpecopsConfigFile.js +94 -0
- package/dist/packages/core/src/infrastructure/SpecopsConfigFile.js.map +1 -0
- package/dist/packages/core/test/unit/authoring-scope.test.js +102 -0
- package/dist/packages/core/test/unit/authoring-scope.test.js.map +1 -0
- package/dist/packages/core/test/unit/change-templates.test.js +96 -0
- package/dist/packages/core/test/unit/change-templates.test.js.map +1 -0
- package/dist/packages/core/test/unit/cucumber-messages.test.js +232 -0
- package/dist/packages/core/test/unit/cucumber-messages.test.js.map +1 -0
- package/dist/packages/core/test/unit/declared-artifacts.test.js +124 -0
- package/dist/packages/core/test/unit/declared-artifacts.test.js.map +1 -0
- package/dist/packages/core/test/unit/empty-attempt.test.js +79 -0
- package/dist/packages/core/test/unit/empty-attempt.test.js.map +1 -0
- package/dist/packages/core/test/unit/gherkin-dialects.test.js +115 -0
- package/dist/packages/core/test/unit/gherkin-dialects.test.js.map +1 -0
- package/dist/packages/core/test/unit/gherkin-keyword-case.test.js +110 -0
- package/dist/packages/core/test/unit/gherkin-keyword-case.test.js.map +1 -0
- package/dist/packages/core/test/unit/gherkin-quality.test.js +151 -0
- package/dist/packages/core/test/unit/gherkin-quality.test.js.map +1 -0
- package/dist/packages/core/test/unit/gherkin-tags.test.js +127 -0
- package/dist/packages/core/test/unit/gherkin-tags.test.js.map +1 -0
- package/dist/packages/core/test/unit/git-safety.test.js +104 -0
- package/dist/packages/core/test/unit/git-safety.test.js.map +1 -0
- package/dist/packages/core/test/unit/harness-report.test.js +192 -0
- package/dist/packages/core/test/unit/harness-report.test.js.map +1 -0
- package/dist/packages/core/test/unit/harness-roles.test.js +86 -0
- package/dist/packages/core/test/unit/harness-roles.test.js.map +1 -0
- package/dist/packages/core/test/unit/inbound-change.test.js +145 -0
- package/dist/packages/core/test/unit/inbound-change.test.js.map +1 -0
- package/dist/packages/core/test/unit/matrix-dependencies.test.js +100 -0
- package/dist/packages/core/test/unit/matrix-dependencies.test.js.map +1 -0
- package/dist/packages/core/test/unit/profile-match.test.js +115 -0
- package/dist/packages/core/test/unit/profile-match.test.js.map +1 -0
- package/dist/packages/core/test/unit/reconciliation.test.js +112 -0
- package/dist/packages/core/test/unit/reconciliation.test.js.map +1 -0
- package/dist/packages/core/test/unit/requirement-readiness.test.js +161 -0
- package/dist/packages/core/test/unit/requirement-readiness.test.js.map +1 -0
- package/dist/packages/core/test/unit/resume-state.test.js +124 -0
- package/dist/packages/core/test/unit/resume-state.test.js.map +1 -0
- package/dist/packages/core/test/unit/run-budget.test.js +113 -0
- package/dist/packages/core/test/unit/run-budget.test.js.map +1 -0
- package/dist/packages/core/test/unit/traceability-merge.test.js +159 -0
- package/dist/packages/core/test/unit/traceability-merge.test.js.map +1 -0
- package/dist/packages/core/test/unit/validate-project.test.js +156 -0
- package/dist/packages/core/test/unit/validate-project.test.js.map +1 -0
- package/dist/packages/core/test/unit/value-annotations.test.js +149 -0
- package/dist/packages/core/test/unit/value-annotations.test.js.map +1 -0
- package/dist/packages/core/test/unit/write-scope.test.js +165 -0
- package/dist/packages/core/test/unit/write-scope.test.js.map +1 -0
- package/dist/packages/core/test/unit/yaml-lite.test.js +78 -0
- package/dist/packages/core/test/unit/yaml-lite.test.js.map +1 -0
- package/dist/scripts/adopt_project.js +11 -0
- package/dist/scripts/adopt_project.js.map +1 -0
- package/dist/scripts/agents/commands.js +100 -0
- package/dist/scripts/agents/commands.js.map +1 -0
- package/dist/scripts/agents/init.js +482 -0
- package/dist/scripts/agents/init.js.map +1 -0
- package/dist/scripts/alm/cli.js +154 -0
- package/dist/scripts/alm/cli.js.map +1 -0
- package/dist/scripts/alm/clients.js +30 -0
- package/dist/scripts/alm/clients.js.map +1 -0
- package/dist/scripts/alm/core.js +258 -0
- package/dist/scripts/alm/core.js.map +1 -0
- package/dist/scripts/alm/port.js +116 -0
- package/dist/scripts/alm/port.js.map +1 -0
- package/dist/scripts/alm/providers/azure.js +79 -0
- package/dist/scripts/alm/providers/azure.js.map +1 -0
- package/dist/scripts/alm/providers/github.js +124 -0
- package/dist/scripts/alm/providers/github.js.map +1 -0
- package/dist/scripts/alm/providers/http-client.js +47 -0
- package/dist/scripts/alm/providers/http-client.js.map +1 -0
- package/dist/scripts/alm/providers/index.js +107 -0
- package/dist/scripts/alm/providers/index.js.map +1 -0
- package/dist/scripts/alm/providers/jira.js +129 -0
- package/dist/scripts/alm/providers/jira.js.map +1 -0
- package/dist/scripts/bundle_pack.js +10 -0
- package/dist/scripts/bundle_pack.js.map +1 -0
- package/dist/scripts/change/archive.js +68 -0
- package/dist/scripts/change/archive.js.map +1 -0
- package/dist/scripts/change/artifacts.js +143 -0
- package/dist/scripts/change/artifacts.js.map +1 -0
- package/dist/scripts/change/cli.js +39 -0
- package/dist/scripts/change/cli.js.map +1 -0
- package/dist/scripts/change/delta.js +20 -0
- package/dist/scripts/change/delta.js.map +1 -0
- package/dist/scripts/change/instructions.js +339 -0
- package/dist/scripts/change/instructions.js.map +1 -0
- package/dist/scripts/ci_init.js +12 -0
- package/dist/scripts/ci_init.js.map +1 -0
- package/dist/scripts/cli/commands/alm/PullCommand.js +238 -0
- package/dist/scripts/cli/commands/alm/PullCommand.js.map +1 -0
- package/dist/scripts/cli/commands/change/ChangeCommand.js +867 -0
- package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -0
- package/dist/scripts/cli/commands/config/CiInitCommand.js +144 -0
- package/dist/scripts/cli/commands/config/CiInitCommand.js.map +1 -0
- package/dist/scripts/cli/commands/config/CompletionCommand.js +160 -0
- package/dist/scripts/cli/commands/config/CompletionCommand.js.map +1 -0
- package/dist/scripts/cli/commands/config/ConfigInitCommand.js +108 -0
- package/dist/scripts/cli/commands/config/ConfigInitCommand.js.map +1 -0
- package/dist/scripts/cli/commands/config/ConfigSetCommand.js +166 -0
- package/dist/scripts/cli/commands/config/ConfigSetCommand.js.map +1 -0
- package/dist/scripts/cli/commands/config/GenAgentContractCommand.js +212 -0
- package/dist/scripts/cli/commands/config/GenAgentContractCommand.js.map +1 -0
- package/dist/scripts/cli/commands/harness/RunCommand.js +1922 -0
- package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -0
- package/dist/scripts/cli/commands/mcp/McpInstallCommand.js +114 -0
- package/dist/scripts/cli/commands/mcp/McpInstallCommand.js.map +1 -0
- package/dist/scripts/cli/commands/mcp/index.js +29 -0
- package/dist/scripts/cli/commands/mcp/index.js.map +1 -0
- package/dist/scripts/cli/commands/pack/BundlePackCommand.js +59 -0
- package/dist/scripts/cli/commands/pack/BundlePackCommand.js.map +1 -0
- package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js +559 -0
- package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js.map +1 -0
- package/dist/scripts/cli/commands/pack/InferPackCommand.js +304 -0
- package/dist/scripts/cli/commands/pack/InferPackCommand.js.map +1 -0
- package/dist/scripts/cli/commands/pack/InitPackCommand.js +368 -0
- package/dist/scripts/cli/commands/pack/InitPackCommand.js.map +1 -0
- package/dist/scripts/cli/commands/pack/LintPackCommand.js +631 -0
- package/dist/scripts/cli/commands/pack/LintPackCommand.js.map +1 -0
- package/dist/scripts/cli/commands/pack/pack-args.js +83 -0
- package/dist/scripts/cli/commands/pack/pack-args.js.map +1 -0
- package/dist/scripts/cli/commands/project/AdoptCommand.js +414 -0
- package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -0
- package/dist/scripts/cli/commands/project/InitFromPackCommand.js +188 -0
- package/dist/scripts/cli/commands/project/InitFromPackCommand.js.map +1 -0
- package/dist/scripts/cli/commands/project/InitProjectCommand.js +791 -0
- package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -0
- package/dist/scripts/cli/commands/project/OnboardCommand.js +655 -0
- package/dist/scripts/cli/commands/project/OnboardCommand.js.map +1 -0
- package/dist/scripts/cli/commands/project/UpdateCommand.js +206 -0
- package/dist/scripts/cli/commands/project/UpdateCommand.js.map +1 -0
- package/dist/scripts/cli/commands/project/WizardCommand.js +166 -0
- package/dist/scripts/cli/commands/project/WizardCommand.js.map +1 -0
- package/dist/scripts/cli/commands/quality/DoctorCommand.js +553 -0
- package/dist/scripts/cli/commands/quality/DoctorCommand.js.map +1 -0
- package/dist/scripts/cli/commands/quality/FixCommand.js +201 -0
- package/dist/scripts/cli/commands/quality/FixCommand.js.map +1 -0
- package/dist/scripts/cli/commands/quality/LicenseCheckCommand.js +187 -0
- package/dist/scripts/cli/commands/quality/LicenseCheckCommand.js.map +1 -0
- package/dist/scripts/cli/commands/quality/ReportCommand.js +557 -0
- package/dist/scripts/cli/commands/quality/ReportCommand.js.map +1 -0
- package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js +764 -0
- package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js.map +1 -0
- package/dist/scripts/cli/commands/spec/DoneCommand.js +116 -0
- package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -0
- package/dist/scripts/cli/commands/spec/PlanCommand.js +397 -0
- package/dist/scripts/cli/commands/spec/PlanCommand.js.map +1 -0
- package/dist/scripts/cli/commands/spec/ReqCommand.js +303 -0
- package/dist/scripts/cli/commands/spec/ReqCommand.js.map +1 -0
- package/dist/scripts/cli/commands/spec/StatusCommand.js +206 -0
- package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -0
- package/dist/scripts/cli/commands/spec/StudioCommand.js +241 -0
- package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -0
- package/dist/scripts/cli/commands/specops/ContributeCommand.js +313 -0
- package/dist/scripts/cli/commands/specops/ContributeCommand.js.map +1 -0
- package/dist/scripts/cli/commands/specops/DiffCommand.js +394 -0
- package/dist/scripts/cli/commands/specops/DiffCommand.js.map +1 -0
- package/dist/scripts/cli/commands/specops/SyncCommand.js +380 -0
- package/dist/scripts/cli/commands/specops/SyncCommand.js.map +1 -0
- package/dist/scripts/completion.js +24 -0
- package/dist/scripts/completion.js.map +1 -0
- package/dist/scripts/config_init.js +12 -0
- package/dist/scripts/config_init.js.map +1 -0
- package/dist/scripts/config_set.js +20 -0
- package/dist/scripts/config_set.js.map +1 -0
- package/dist/scripts/docs/blocks.js +137 -0
- package/dist/scripts/docs/blocks.js.map +1 -0
- package/dist/scripts/docs/build-site.js +425 -0
- package/dist/scripts/docs/build-site.js.map +1 -0
- package/dist/scripts/docs/nav.js +198 -0
- package/dist/scripts/docs/nav.js.map +1 -0
- package/dist/scripts/docs/record-terminal.js +477 -0
- package/dist/scripts/docs/record-terminal.js.map +1 -0
- package/dist/scripts/docs/terminal-storyboard.js +121 -0
- package/dist/scripts/docs/terminal-storyboard.js.map +1 -0
- package/dist/scripts/doctor.js +14 -0
- package/dist/scripts/doctor.js.map +1 -0
- package/dist/scripts/done.js +17 -0
- package/dist/scripts/done.js.map +1 -0
- package/dist/scripts/expand_domain_pack.js +18 -0
- package/dist/scripts/expand_domain_pack.js.map +1 -0
- package/dist/scripts/fix.js +12 -0
- package/dist/scripts/fix.js.map +1 -0
- package/dist/scripts/gen_agent_contract.js +14 -0
- package/dist/scripts/gen_agent_contract.js.map +1 -0
- package/dist/scripts/gen_mcp_tools.js +264 -0
- package/dist/scripts/gen_mcp_tools.js.map +1 -0
- package/dist/scripts/harness/init.js +358 -0
- package/dist/scripts/harness/init.js.map +1 -0
- package/dist/scripts/harness/prompt.js +18 -0
- package/dist/scripts/harness/prompt.js.map +1 -0
- package/dist/scripts/harness/report.js +323 -0
- package/dist/scripts/harness/report.js.map +1 -0
- package/dist/scripts/harness/run.js +33 -0
- package/dist/scripts/harness/run.js.map +1 -0
- package/dist/scripts/infer_pack.js +17 -0
- package/dist/scripts/infer_pack.js.map +1 -0
- package/dist/scripts/init_from_pack.js +16 -0
- package/dist/scripts/init_from_pack.js.map +1 -0
- package/dist/scripts/init_pack.js +16 -0
- package/dist/scripts/init_pack.js.map +1 -0
- package/dist/scripts/init_project.js +17 -0
- package/dist/scripts/init_project.js.map +1 -0
- package/dist/scripts/lib/agent.js +99 -0
- package/dist/scripts/lib/agent.js.map +1 -0
- package/dist/scripts/lib/capability-specs.js +80 -0
- package/dist/scripts/lib/capability-specs.js.map +1 -0
- package/dist/scripts/lib/command.js +17 -0
- package/dist/scripts/lib/command.js.map +1 -0
- package/dist/scripts/lib/diagnostics.js +62 -0
- package/dist/scripts/lib/diagnostics.js.map +1 -0
- package/dist/scripts/lib/monorepo-fanout.js +118 -0
- package/dist/scripts/lib/monorepo-fanout.js.map +1 -0
- package/dist/scripts/lib/placeholders.js +190 -0
- package/dist/scripts/lib/placeholders.js.map +1 -0
- package/dist/scripts/lib/project-root.js +124 -0
- package/dist/scripts/lib/project-root.js.map +1 -0
- package/dist/scripts/lib/requirement-graph.js +31 -0
- package/dist/scripts/lib/requirement-graph.js.map +1 -0
- package/dist/scripts/lib/surface.js +609 -0
- package/dist/scripts/lib/surface.js.map +1 -0
- package/dist/scripts/license_check.js +15 -0
- package/dist/scripts/license_check.js.map +1 -0
- package/dist/scripts/lint_pack.js +18 -0
- package/dist/scripts/lint_pack.js.map +1 -0
- package/dist/scripts/merge-traceability.js +106 -0
- package/dist/scripts/merge-traceability.js.map +1 -0
- package/dist/scripts/onboard.js +22 -0
- package/dist/scripts/onboard.js.map +1 -0
- package/dist/scripts/plan.js +17 -0
- package/dist/scripts/plan.js.map +1 -0
- package/dist/scripts/plugin/gate-hook.js +171 -0
- package/dist/scripts/plugin/gate-hook.js.map +1 -0
- package/dist/scripts/report.js +17 -0
- package/dist/scripts/report.js.map +1 -0
- package/dist/scripts/req.js +22 -0
- package/dist/scripts/req.js.map +1 -0
- package/dist/scripts/schema/cli.js +215 -0
- package/dist/scripts/schema/cli.js.map +1 -0
- package/dist/scripts/schema/registry.js +264 -0
- package/dist/scripts/schema/registry.js.map +1 -0
- package/dist/scripts/specops/add.js +180 -0
- package/dist/scripts/specops/add.js.map +1 -0
- package/dist/scripts/specops/against_lock.js +100 -0
- package/dist/scripts/specops/against_lock.js.map +1 -0
- package/dist/scripts/specops/as_change.js +49 -0
- package/dist/scripts/specops/as_change.js.map +1 -0
- package/dist/scripts/specops/contribute.js +24 -0
- package/dist/scripts/specops/contribute.js.map +1 -0
- package/dist/scripts/specops/diff.js +32 -0
- package/dist/scripts/specops/diff.js.map +1 -0
- package/dist/scripts/specops/lock.js +39 -0
- package/dist/scripts/specops/lock.js.map +1 -0
- package/dist/scripts/specops/manifest.js +90 -0
- package/dist/scripts/specops/manifest.js.map +1 -0
- package/dist/scripts/specops/remove.js +102 -0
- package/dist/scripts/specops/remove.js.map +1 -0
- package/dist/scripts/specops/sync.js +27 -0
- package/dist/scripts/specops/sync.js.map +1 -0
- package/dist/scripts/specops/verify.js +149 -0
- package/dist/scripts/specops/verify.js.map +1 -0
- package/dist/scripts/status.js +17 -0
- package/dist/scripts/status.js.map +1 -0
- package/dist/scripts/studio.js +14 -0
- package/dist/scripts/studio.js.map +1 -0
- package/dist/scripts/update.js +17 -0
- package/dist/scripts/update.js.map +1 -0
- package/dist/scripts/validate_specs.js +10 -0
- package/dist/scripts/validate_specs.js.map +1 -0
- package/examples/project.config.example +19 -0
- package/examples/project.yaml.example +17 -0
- package/package.json +105 -0
- package/templates/adopt/AI_RULES.md.tpl +27 -0
- package/templates/adopt/adr-readme.md.tpl +5 -0
- package/templates/adopt/baseline.feature.tpl +9 -0
- package/templates/adopt/spec.md.tpl +25 -0
- package/templates/adopt/traceability.md.tpl +11 -0
- package/templates/backend/AI_RULES.md.tpl +35 -0
- package/templates/backend/features/core/health.feature.tpl +7 -0
- package/templates/base/.devcontainer/devcontainer.json.tpl +18 -0
- package/templates/base/.dockerignore.tpl +11 -0
- package/templates/base/.env.dev.app.tpl +13 -0
- package/templates/base/.env.dev.infra.tpl +6 -0
- package/templates/base/.env.dev.tpl +16 -0
- package/templates/base/.env.example.tpl +17 -0
- package/templates/base/.env.feature.app.tpl +11 -0
- package/templates/base/.env.feature.infra.tpl +4 -0
- package/templates/base/.env.feature.tpl +16 -0
- package/templates/base/.env.prod.app.tpl +13 -0
- package/templates/base/.env.prod.infra.tpl +6 -0
- package/templates/base/.env.prod.tpl +16 -0
- package/templates/base/.github/workflows/specs.yml.tpl +26 -0
- package/templates/base/.gitignore.tpl +9 -0
- package/templates/base/.pre-commit-config.yaml.tpl +10 -0
- package/templates/base/AGENTS.md.tpl +32 -0
- package/templates/base/README.md.tpl +32 -0
- package/templates/base/docker-compose.yml.tpl +13 -0
- package/templates/base/docs/specs/adr/README.md.tpl +10 -0
- package/templates/base/docs/specs/aggregates.md.tpl +5 -0
- package/templates/base/docs/specs/commands.md.tpl +13 -0
- package/templates/base/docs/specs/domain-model.md.tpl +30 -0
- package/templates/base/docs/specs/events.md.tpl +5 -0
- package/templates/base/docs/specs/review-checklist.md.tpl +18 -0
- package/templates/base/docs/specs/runtime-environments.md.tpl +26 -0
- package/templates/base/docs/specs/status-model.md.tpl +16 -0
- package/templates/base/docs/specs/traceability.md.tpl +7 -0
- package/templates/base/docs/specs/use-cases.md.tpl +5 -0
- package/templates/base/spec.md.tpl +63 -0
- package/templates/ci/azure.yml.tpl +40 -0
- package/templates/ci/github.yml.tpl +40 -0
- package/templates/ci/gitlab.yml.tpl +21 -0
- package/templates/ci/jenkins.tpl +35 -0
- package/templates/contracts/AI_RULES.md.tpl +55 -0
- package/templates/contracts/asyncapi-stub.yaml.tpl +24 -0
- package/templates/contracts/contract-traceability.md.tpl +10 -0
- package/templates/contracts/openapi-stub.yaml.tpl +29 -0
- package/templates/contracts/pacts-gitkeep.tpl +0 -0
- package/templates/contracts/test-strategy.md.tpl +94 -0
- package/templates/frontend/AI_RULES.md.tpl +34 -0
- package/templates/frontend/features/core/health.feature.tpl +6 -0
- package/templates/harness/harness.config.yaml.tpl +74 -0
- package/templates/harness/prompt-prefix.md.tpl +60 -0
- package/templates/mobile/AI_RULES.md.tpl +56 -0
- package/templates/mobile/features/core/health.feature.tpl +7 -0
- package/templates/modules/auth/backend/registration_and_login.feature.tpl +10 -0
- package/templates/modules/auth/frontend/login.feature.tpl +5 -0
- package/templates/modules/billing/backend/billing_settlement.feature.tpl +5 -0
- package/templates/modules/billing/frontend/billing_summary.feature.tpl +5 -0
- package/templates/modules/dashboard/backend/dashboard_kpi.feature.tpl +5 -0
- package/templates/modules/dashboard/frontend/dashboard.feature.tpl +5 -0
- package/vendor/mermaid.min.js +3636 -0
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Render `docs/**.md` into a documentation site.
|
|
5
|
+
*
|
|
6
|
+
* ## Why this exists
|
|
7
|
+
*
|
|
8
|
+
* The site published twenty markdown documents as `text/markdown`, so a reader
|
|
9
|
+
* who followed a link got the source — comment markers, front-matter, the lot.
|
|
10
|
+
* The landing page linked to four of them. The other sixteen existed and were
|
|
11
|
+
* unreachable.
|
|
12
|
+
*
|
|
13
|
+
* ## Why it renders at build time
|
|
14
|
+
*
|
|
15
|
+
* A page that needs JavaScript to show its own text is a page that is slower,
|
|
16
|
+
* unindexable and broken behind a corporate proxy that strips scripts. These
|
|
17
|
+
* are plain HTML documents; the JavaScript that ships alongside adds search,
|
|
18
|
+
* copy buttons and a theme toggle, and the site reads fine without it.
|
|
19
|
+
*
|
|
20
|
+
* `marked` is a devDependency, so none of this reaches the published package —
|
|
21
|
+
* `package.json` still has zero runtime dependencies, which is what lets the
|
|
22
|
+
* CLI run through `npx` on someone else's machine.
|
|
23
|
+
*/
|
|
24
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
27
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
28
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
29
|
+
}
|
|
30
|
+
Object.defineProperty(o, k2, desc);
|
|
31
|
+
}) : (function(o, m, k, k2) {
|
|
32
|
+
if (k2 === undefined) k2 = k;
|
|
33
|
+
o[k2] = m[k];
|
|
34
|
+
}));
|
|
35
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
36
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
37
|
+
}) : function(o, v) {
|
|
38
|
+
o["default"] = v;
|
|
39
|
+
});
|
|
40
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
41
|
+
var ownKeys = function(o) {
|
|
42
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
43
|
+
var ar = [];
|
|
44
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
45
|
+
return ar;
|
|
46
|
+
};
|
|
47
|
+
return ownKeys(o);
|
|
48
|
+
};
|
|
49
|
+
return function (mod) {
|
|
50
|
+
if (mod && mod.__esModule) return mod;
|
|
51
|
+
var result = {};
|
|
52
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
53
|
+
__setModuleDefault(result, mod);
|
|
54
|
+
return result;
|
|
55
|
+
};
|
|
56
|
+
})();
|
|
57
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
58
|
+
exports.buildSite = buildSite;
|
|
59
|
+
const fs = __importStar(require("node:fs"));
|
|
60
|
+
const path = __importStar(require("node:path"));
|
|
61
|
+
const marked_1 = require("marked");
|
|
62
|
+
const nav_1 = require("./nav");
|
|
63
|
+
const blocks_1 = require("./blocks");
|
|
64
|
+
const ROOT = path.resolve(__dirname, "..", "..", "..");
|
|
65
|
+
/** Absolute base for metadata a link scraper resolves without a page context. */
|
|
66
|
+
const SITE = "https://rsaglobaltech.github.io/specgate";
|
|
67
|
+
const DOCS = path.join(ROOT, "docs");
|
|
68
|
+
const REPO = "https://github.com/rsaglobaltech/specgate";
|
|
69
|
+
/** Assets copied through untouched. */
|
|
70
|
+
// `roi.html` used to be here. A calculator that estimates a saving is a sales
|
|
71
|
+
// artefact, not documentation, and it was the only page on the site written in
|
|
72
|
+
// a different voice.
|
|
73
|
+
const VERBATIM = ["index.html", "assets"];
|
|
74
|
+
// ── Markdown → HTML ──────────────────────────────────────────────────────────
|
|
75
|
+
/** `The harness` → `the-harness`. Stable, because anchors end up in links. */
|
|
76
|
+
function slugifyHeading(text, taken) {
|
|
77
|
+
const base = text
|
|
78
|
+
.toLowerCase()
|
|
79
|
+
.replace(/`/g, "")
|
|
80
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
81
|
+
.replace(/^-+|-+$/g, "") || "section";
|
|
82
|
+
let id = base;
|
|
83
|
+
let n = 2;
|
|
84
|
+
while (taken.has(id))
|
|
85
|
+
id = `${base}-${n++}`;
|
|
86
|
+
taken.add(id);
|
|
87
|
+
return id;
|
|
88
|
+
}
|
|
89
|
+
function escapeHtml(value) {
|
|
90
|
+
return value
|
|
91
|
+
.replace(/&/g, "&")
|
|
92
|
+
.replace(/</g, "<")
|
|
93
|
+
.replace(/>/g, ">")
|
|
94
|
+
.replace(/"/g, """);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Rewrite a link the way the site serves it.
|
|
98
|
+
*
|
|
99
|
+
* `./harness.md` becomes `harness.html`, because that is what is published.
|
|
100
|
+
* Leaving them pointing at `.md` was half of why the old site was unreadable:
|
|
101
|
+
* every internal link dropped the reader back into raw source.
|
|
102
|
+
*/
|
|
103
|
+
function rewriteLink(href, slug) {
|
|
104
|
+
if (/^[a-z]+:/i.test(href) || href.startsWith("#") || href.startsWith("//"))
|
|
105
|
+
return href;
|
|
106
|
+
const [target, hash] = href.split("#");
|
|
107
|
+
if (!target)
|
|
108
|
+
return href;
|
|
109
|
+
// A link that climbs out of `docs/` points at a repository file — README,
|
|
110
|
+
// CONTRIBUTING, a pack's yaml — which is not published here. Sending it to
|
|
111
|
+
// GitHub is the honest destination; rewriting `../SECURITY.md` to
|
|
112
|
+
// `../SECURITY.html` invented a page that has never existed.
|
|
113
|
+
const depth = slug.split("/").length - 1;
|
|
114
|
+
const resolved = path.posix.normalize(path.posix.join(path.posix.dirname(slug), target));
|
|
115
|
+
if (resolved.startsWith("..")) {
|
|
116
|
+
const inRepo = path.posix.normalize(path.posix.join("docs", path.posix.dirname(slug), target));
|
|
117
|
+
return `${REPO}/blob/main/${inRepo}${hash ? `#${hash}` : ""}`;
|
|
118
|
+
}
|
|
119
|
+
void depth;
|
|
120
|
+
if (!target.endsWith(".md"))
|
|
121
|
+
return href;
|
|
122
|
+
const html = `${target.slice(0, -3)}.html`;
|
|
123
|
+
return hash ? `${html}#${hash}` : html;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* A heading's plain text, for the anchor id and the contents list.
|
|
127
|
+
*
|
|
128
|
+
* Repeated until it stops changing: one pass of `/<[^>]+>/g` leaves a nested or
|
|
129
|
+
* malformed tag behind — `<<b>i>` becomes `<i>` — which CodeQL reports as
|
|
130
|
+
* `js/incomplete-multi-character-sanitization`. Nothing here reaches a browser
|
|
131
|
+
* as markup, but a half-stripped heading would still produce a wrong anchor.
|
|
132
|
+
*/
|
|
133
|
+
function stripTags(html) {
|
|
134
|
+
let out = String(html);
|
|
135
|
+
let previous;
|
|
136
|
+
do {
|
|
137
|
+
previous = out;
|
|
138
|
+
out = out.replace(/<[^>]*>/g, "");
|
|
139
|
+
} while (out !== previous);
|
|
140
|
+
return out.trim();
|
|
141
|
+
}
|
|
142
|
+
function renderMarkdown(source, currentSlug) {
|
|
143
|
+
const headings = [];
|
|
144
|
+
const taken = new Set();
|
|
145
|
+
let title = "";
|
|
146
|
+
const renderer = new marked_1.marked.Renderer();
|
|
147
|
+
renderer.heading = ({ tokens, depth }) => {
|
|
148
|
+
const text = renderer.parser.parseInline(tokens);
|
|
149
|
+
const plain = stripTags(text);
|
|
150
|
+
if (depth === 1 && !title)
|
|
151
|
+
title = plain;
|
|
152
|
+
const id = slugifyHeading(plain, taken);
|
|
153
|
+
if (depth >= 2 && depth <= 3)
|
|
154
|
+
headings.push({ id, text: plain, level: depth });
|
|
155
|
+
return (`<h${depth} id="${id}">${text}` +
|
|
156
|
+
`<a class="anchor" href="#${id}" aria-label="Link to this section">#</a></h${depth}>\n`);
|
|
157
|
+
};
|
|
158
|
+
renderer.link = ({ href, title: linkTitle, tokens }) => {
|
|
159
|
+
const text = renderer.parser.parseInline(tokens);
|
|
160
|
+
const target = rewriteLink(String(href || ""), currentSlug);
|
|
161
|
+
const external = /^https?:/i.test(target);
|
|
162
|
+
const attrs = [
|
|
163
|
+
`href="${escapeHtml(target)}"`,
|
|
164
|
+
linkTitle ? `title="${escapeHtml(linkTitle)}"` : "",
|
|
165
|
+
external ? 'target="_blank" rel="noreferrer"' : "",
|
|
166
|
+
]
|
|
167
|
+
.filter(Boolean)
|
|
168
|
+
.join(" ");
|
|
169
|
+
return `<a ${attrs}>${text}</a>`;
|
|
170
|
+
};
|
|
171
|
+
renderer.code = ({ text, lang }) => {
|
|
172
|
+
const language = String(lang || "").split(/\s+/)[0] || "text";
|
|
173
|
+
return (`<figure class="code" data-lang="${escapeHtml(language)}">` +
|
|
174
|
+
`<button class="code__copy" type="button" aria-label="Copy to clipboard">Copy</button>` +
|
|
175
|
+
`<pre><code class="language-${escapeHtml(language)}">${escapeHtml(text)}</code></pre>` +
|
|
176
|
+
`</figure>\n`);
|
|
177
|
+
};
|
|
178
|
+
renderer.table = ({ header, rows }) => {
|
|
179
|
+
const head = header
|
|
180
|
+
.map((cell) => `<th>${renderer.parser.parseInline(cell.tokens)}</th>`)
|
|
181
|
+
.join("");
|
|
182
|
+
const body = rows
|
|
183
|
+
.map((row) => `<tr>${row
|
|
184
|
+
.map((cell) => `<td>${renderer.parser.parseInline(cell.tokens)}</td>`)
|
|
185
|
+
.join("")}</tr>`)
|
|
186
|
+
.join("");
|
|
187
|
+
return `<div class="table-wrap"><table><thead><tr>${head}</tr></thead><tbody>${body}</tbody></table></div>\n`;
|
|
188
|
+
};
|
|
189
|
+
const html = marked_1.marked.parse(source, { renderer, gfm: true, breaks: false });
|
|
190
|
+
return { html, headings, title };
|
|
191
|
+
}
|
|
192
|
+
// ── The page shell ───────────────────────────────────────────────────────────
|
|
193
|
+
/**
|
|
194
|
+
* The sidebar, from a page that may be nested.
|
|
195
|
+
*
|
|
196
|
+
* `up` is not decoration: a page at `case-studies/case-1.html` linking to a
|
|
197
|
+
* bare `getting-started.html` asks for `case-studies/getting-started.html`,
|
|
198
|
+
* which does not exist. Every link out of a nested page needs the climb.
|
|
199
|
+
*/
|
|
200
|
+
function sidebar(currentSlug, up) {
|
|
201
|
+
const sections = nav_1.NAV.map((section) => {
|
|
202
|
+
const items = section.entries
|
|
203
|
+
.map((entry) => {
|
|
204
|
+
const active = entry.slug === currentSlug ? ' class="is-active" aria-current="page"' : "";
|
|
205
|
+
return `<li><a href="${up}${entry.slug}.html"${active}>${escapeHtml(entry.label)}</a></li>`;
|
|
206
|
+
})
|
|
207
|
+
.join("");
|
|
208
|
+
return `<div class="side__group"><h2>${escapeHtml(section.title)}</h2><ul>${items}</ul></div>`;
|
|
209
|
+
}).join("");
|
|
210
|
+
return sections;
|
|
211
|
+
}
|
|
212
|
+
function onThisPage(headings) {
|
|
213
|
+
if (headings.length < 2)
|
|
214
|
+
return "";
|
|
215
|
+
const items = headings
|
|
216
|
+
.map((h) => `<li class="toc__l${h.level}"><a href="#${h.id}">${escapeHtml(h.text)}</a></li>`)
|
|
217
|
+
.join("");
|
|
218
|
+
return `<nav class="toc" aria-label="On this page"><h2>On this page</h2><ul>${items}</ul></nav>`;
|
|
219
|
+
}
|
|
220
|
+
function pageShell(page, version) {
|
|
221
|
+
const entry = (0, nav_1.navEntry)(page.slug);
|
|
222
|
+
const { prev, next } = (0, nav_1.neighbours)(page.slug);
|
|
223
|
+
const depth = page.slug.split("/").length - 1;
|
|
224
|
+
const up = "../".repeat(depth);
|
|
225
|
+
const link = (slug) => `${up}${slug}.html`;
|
|
226
|
+
const pager = [
|
|
227
|
+
prev
|
|
228
|
+
? `<a class="pager__prev" href="${link(prev.slug)}"><span>Previous</span>${escapeHtml(prev.label)}</a>`
|
|
229
|
+
: "<span></span>",
|
|
230
|
+
next
|
|
231
|
+
? `<a class="pager__next" href="${link(next.slug)}"><span>Next</span>${escapeHtml(next.label)}</a>`
|
|
232
|
+
: "<span></span>",
|
|
233
|
+
].join("");
|
|
234
|
+
return `<!doctype html>
|
|
235
|
+
<html lang="en" data-slug="${escapeHtml(page.slug)}">
|
|
236
|
+
<head>
|
|
237
|
+
<meta charset="utf-8">
|
|
238
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
239
|
+
<title>${escapeHtml(page.title)} — create-spec-driven-app</title>
|
|
240
|
+
<meta name="description" content="${escapeHtml(entry?.blurb || page.title)}">
|
|
241
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
242
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
243
|
+
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&family=IBM+Plex+Mono:wght@400;600&display=swap" rel="stylesheet">
|
|
244
|
+
<link rel="icon" href="${up}assets/favicon.svg" type="image/svg+xml">
|
|
245
|
+
<meta property="og:title" content="${escapeHtml(page.title)} — create-spec-driven-app">
|
|
246
|
+
<meta property="og:description" content="${escapeHtml(entry?.blurb || page.title)}">
|
|
247
|
+
<meta property="og:image" content="${SITE}/assets/og-card.png">
|
|
248
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
249
|
+
<link rel="stylesheet" href="${up}assets/docs.css">
|
|
250
|
+
<script>
|
|
251
|
+
// Applied before paint so the page never flashes the wrong theme.
|
|
252
|
+
(function () {
|
|
253
|
+
var t = localStorage.getItem("csda-theme");
|
|
254
|
+
if (t) document.documentElement.setAttribute("data-theme", t);
|
|
255
|
+
})();
|
|
256
|
+
</script>
|
|
257
|
+
</head>
|
|
258
|
+
<body>
|
|
259
|
+
<a class="skip" href="#content">Skip to content</a>
|
|
260
|
+
|
|
261
|
+
<header class="top">
|
|
262
|
+
<button class="top__menu" type="button" aria-label="Open navigation" aria-expanded="false">☰</button>
|
|
263
|
+
<a class="top__brand" href="${up}index.html"><span aria-hidden="true">⬡</span> create-spec-driven-app</a>
|
|
264
|
+
<span class="top__version">v${escapeHtml(version)}</span>
|
|
265
|
+
<div class="top__search">
|
|
266
|
+
<input type="search" id="search" placeholder="Search the docs…" autocomplete="off"
|
|
267
|
+
aria-label="Search documentation">
|
|
268
|
+
<div class="top__results" id="results" hidden></div>
|
|
269
|
+
</div>
|
|
270
|
+
<nav class="top__links">
|
|
271
|
+
<a href="${up}packs/">Packs</a>
|
|
272
|
+
<a href="${REPO}" target="_blank" rel="noreferrer">GitHub</a>
|
|
273
|
+
<a href="https://www.npmjs.com/package/create-spec-driven-app" target="_blank" rel="noreferrer">npm</a>
|
|
274
|
+
</nav>
|
|
275
|
+
<button class="top__theme" type="button" aria-label="Switch theme">◐</button>
|
|
276
|
+
</header>
|
|
277
|
+
|
|
278
|
+
<div class="shell">
|
|
279
|
+
<aside class="side" id="side">${sidebar(page.slug, up)}</aside>
|
|
280
|
+
|
|
281
|
+
<main class="content" id="content">
|
|
282
|
+
<article class="prose">
|
|
283
|
+
${page.html}
|
|
284
|
+
</article>
|
|
285
|
+
<nav class="pager" aria-label="Neighbouring pages">${pager}</nav>
|
|
286
|
+
<footer class="page-foot">
|
|
287
|
+
<a href="${REPO}/edit/main/docs/${escapeHtml(page.slug)}.md" target="_blank" rel="noreferrer">Edit this page</a>
|
|
288
|
+
<span>·</span>
|
|
289
|
+
<a href="${REPO}/issues/new" target="_blank" rel="noreferrer">Something wrong? Open an issue</a>
|
|
290
|
+
</footer>
|
|
291
|
+
</main>
|
|
292
|
+
|
|
293
|
+
${onThisPage(page.headings)}
|
|
294
|
+
</div>
|
|
295
|
+
|
|
296
|
+
<script src="${up}assets/docs.js" defer></script>
|
|
297
|
+
</body>
|
|
298
|
+
</html>
|
|
299
|
+
`;
|
|
300
|
+
}
|
|
301
|
+
// ── Walking the source ───────────────────────────────────────────────────────
|
|
302
|
+
function markdownFiles(dir, prefix = "") {
|
|
303
|
+
const out = [];
|
|
304
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
305
|
+
if (entry.name.startsWith("."))
|
|
306
|
+
continue;
|
|
307
|
+
const full = path.join(dir, entry.name);
|
|
308
|
+
const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
309
|
+
if (entry.isDirectory()) {
|
|
310
|
+
out.push(...markdownFiles(full, rel));
|
|
311
|
+
}
|
|
312
|
+
else if (entry.name.endsWith(".md")) {
|
|
313
|
+
out.push(rel.slice(0, -3));
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return out.sort();
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* The hand-written parts of the site, copied across.
|
|
320
|
+
*
|
|
321
|
+
* `index.html` gets one transformation on the way: its `csda:diagram` markers
|
|
322
|
+
* are resolved, the same way a markdown page's are. The diagram is a source
|
|
323
|
+
* file in the repository and the marker is one line, so there is nothing to go
|
|
324
|
+
* stale between them — unlike the terminal recording, which needs the CLI to
|
|
325
|
+
* regenerate and is therefore committed into the file rather than injected here.
|
|
326
|
+
*/
|
|
327
|
+
function copyVerbatim(outDir, available) {
|
|
328
|
+
for (const name of VERBATIM) {
|
|
329
|
+
const from = path.join(DOCS, name);
|
|
330
|
+
if (!fs.existsSync(from))
|
|
331
|
+
continue;
|
|
332
|
+
if (name === "index.html") {
|
|
333
|
+
fs.writeFileSync(path.join(outDir, name), (0, blocks_1.inlineDiagrams)(fs.readFileSync(from, "utf8"), available), "utf8");
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
fs.cpSync(from, path.join(outDir, name), { recursive: true });
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* The documentation home — every section, every page, one line each.
|
|
341
|
+
*
|
|
342
|
+
* The site had no such page. `index.html` is the marketing landing, so a reader
|
|
343
|
+
* who wanted the documentation had nowhere to land and no way to see what
|
|
344
|
+
* existed. Generated rather than hand-written, so a page added to `NAV` appears
|
|
345
|
+
* here without anybody remembering to add it twice.
|
|
346
|
+
*/
|
|
347
|
+
function docsHome(version) {
|
|
348
|
+
const cards = nav_1.NAV.map((section) => {
|
|
349
|
+
const items = section.entries
|
|
350
|
+
.map((entry) => `<li><a href="${entry.slug}.html"><strong>${escapeHtml(entry.label)}</strong>` +
|
|
351
|
+
`<span>${escapeHtml(entry.blurb)}</span></a></li>`)
|
|
352
|
+
.join("");
|
|
353
|
+
return (`<section class="home__group">` +
|
|
354
|
+
`<h2>${escapeHtml(section.title)}</h2>` +
|
|
355
|
+
`<p class="home__summary">${escapeHtml(section.summary)}</p>` +
|
|
356
|
+
`<ul class="home__list">${items}</ul></section>`);
|
|
357
|
+
}).join("");
|
|
358
|
+
const page = {
|
|
359
|
+
slug: "docs",
|
|
360
|
+
title: "Documentation",
|
|
361
|
+
headings: [],
|
|
362
|
+
text: "",
|
|
363
|
+
html: `<h1>Documentation</h1>` +
|
|
364
|
+
`<p class="home__lede">Specifications that are checked, not admired. Start with ` +
|
|
365
|
+
`<a href="getting-started.html">Getting started</a> if the folder is empty, or ` +
|
|
366
|
+
`<a href="quickstart.html">You cloned a repo</a> if somebody handed you one.</p>` +
|
|
367
|
+
`<figure class="code" data-lang="bash">` +
|
|
368
|
+
`<button class="code__copy" type="button" aria-label="Copy to clipboard">Copy</button>` +
|
|
369
|
+
`<pre><code class="language-bash">npx create-spec-driven-app@latest init</code></pre>` +
|
|
370
|
+
`</figure>` +
|
|
371
|
+
`<div class="home">${cards}</div>`,
|
|
372
|
+
};
|
|
373
|
+
return pageShell(page, version);
|
|
374
|
+
}
|
|
375
|
+
function buildSite(outDir) {
|
|
376
|
+
const version = JSON.parse(fs.readFileSync(path.join(ROOT, "package.json"), "utf8")).version;
|
|
377
|
+
fs.rmSync(outDir, { recursive: true, force: true });
|
|
378
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
379
|
+
const slugs = markdownFiles(DOCS);
|
|
380
|
+
const index = [];
|
|
381
|
+
const available = (0, blocks_1.diagrams)(DOCS);
|
|
382
|
+
for (const slug of slugs) {
|
|
383
|
+
const source = fs.readFileSync(path.join(DOCS, `${slug}.md`), "utf8");
|
|
384
|
+
// The marker is ours and means nothing to a reader.
|
|
385
|
+
const cleaned = (0, blocks_1.inlineDiagrams)(source.replace(/^<!--\s*csda:allow-placeholders[^>]*-->\s*\n?/gm, ""), available);
|
|
386
|
+
const { html, headings, title } = renderMarkdown(cleaned, slug);
|
|
387
|
+
const page = {
|
|
388
|
+
slug,
|
|
389
|
+
title: title || (0, nav_1.navEntry)(slug)?.label || slug,
|
|
390
|
+
html,
|
|
391
|
+
headings,
|
|
392
|
+
text: cleaned
|
|
393
|
+
.replace(/```[\s\S]*?```/g, " ")
|
|
394
|
+
.replace(/[#*`>|_-]/g, " ")
|
|
395
|
+
.replace(/\s+/g, " ")
|
|
396
|
+
.trim()
|
|
397
|
+
.slice(0, 1500),
|
|
398
|
+
};
|
|
399
|
+
const target = path.join(outDir, `${slug}.html`);
|
|
400
|
+
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
401
|
+
fs.writeFileSync(target, pageShell(page, version), "utf8");
|
|
402
|
+
index.push({ slug, title: page.title, text: page.text });
|
|
403
|
+
}
|
|
404
|
+
fs.writeFileSync(path.join(outDir, "docs.html"), docsHome(version), "utf8");
|
|
405
|
+
fs.mkdirSync(path.join(outDir, "assets"), { recursive: true });
|
|
406
|
+
fs.writeFileSync(path.join(outDir, "assets", "search-index.json"), JSON.stringify(index), "utf8");
|
|
407
|
+
copyVerbatim(outDir, available);
|
|
408
|
+
fs.writeFileSync(path.join(outDir, ".nojekyll"), "", "utf8");
|
|
409
|
+
// Depth used to exempt a page, which is how `articles/` and `case-studies/`
|
|
410
|
+
// stayed published and unreachable. `docs/specs/` is the one real exception:
|
|
411
|
+
// those pages are the project's own specifications, published so the links
|
|
412
|
+
// that reference them resolve, and deliberately not in a reader's sidebar.
|
|
413
|
+
const orphans = slugs.filter((slug) => !(0, nav_1.navEntry)(slug) && !slug.startsWith("specs/"));
|
|
414
|
+
return { pages: slugs.length, orphans };
|
|
415
|
+
}
|
|
416
|
+
if (require.main === module) {
|
|
417
|
+
const at = process.argv.indexOf("--out");
|
|
418
|
+
const outDir = at !== -1 ? process.argv[at + 1] : path.join(ROOT, "_site");
|
|
419
|
+
const { pages, orphans } = buildSite(path.resolve(outDir));
|
|
420
|
+
process.stdout.write(`ℹ️ [docs] rendered ${pages} page(s) into ${outDir}\n`);
|
|
421
|
+
if (orphans.length > 0) {
|
|
422
|
+
process.stdout.write(`⚠️ [docs] not in the sidebar, so nobody can navigate to them: ${orphans.join(", ")}\n`);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
//# sourceMappingURL=build-site.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-site.js","sourceRoot":"","sources":["../../../scripts/docs/build-site.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The shape of the documentation site, decided once.
|
|
4
|
+
*
|
|
5
|
+
* Ordered by the question a reader is asking, not alphabetically and not by
|
|
6
|
+
* the order the files happened to be written. Someone who has just run `npx
|
|
7
|
+
* create-spec-driven-app` needs a different page from someone deciding whether
|
|
8
|
+
* to adopt the tool at all, and the sidebar should make that obvious without
|
|
9
|
+
* being read end to end.
|
|
10
|
+
*
|
|
11
|
+
* A document missing from this list is still rendered — it simply does not
|
|
12
|
+
* appear in the sidebar. `tests/unit/docs-site.test.ts` fails when a shipped
|
|
13
|
+
* document is orphaned that way, because a page nobody can navigate to is a
|
|
14
|
+
* page nobody reads.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.NAV = void 0;
|
|
18
|
+
exports.navSlugs = navSlugs;
|
|
19
|
+
exports.navEntry = navEntry;
|
|
20
|
+
exports.neighbours = neighbours;
|
|
21
|
+
exports.NAV = [
|
|
22
|
+
{
|
|
23
|
+
title: "Start here",
|
|
24
|
+
summary: "Fifteen minutes from nothing to a project whose specs are checked by CI.",
|
|
25
|
+
entries: [
|
|
26
|
+
{
|
|
27
|
+
slug: "getting-started",
|
|
28
|
+
label: "Getting started",
|
|
29
|
+
blurb: "Install, scaffold a project, and run the gate for the first time.",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
slug: "quickstart",
|
|
33
|
+
label: "You cloned a repo",
|
|
34
|
+
blurb: "Someone handed you a spec-driven repository. Start here instead.",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
slug: "walkthrough",
|
|
38
|
+
label: "Walkthrough",
|
|
39
|
+
blurb: "The whole loop end to end, in one sitting.",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
slug: "tutorial",
|
|
43
|
+
label: "Tutorial: Smart Parking",
|
|
44
|
+
blurb: "A complete worked example, from a blank folder to a delivered requirement.",
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
title: "Working with specs",
|
|
50
|
+
summary: "What a specification is here, and what the tool does with it.",
|
|
51
|
+
entries: [
|
|
52
|
+
{
|
|
53
|
+
slug: "writing-specs",
|
|
54
|
+
label: "Writing specs",
|
|
55
|
+
blurb: "Requirements, scenarios and the traceability matrix.",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
slug: "validating",
|
|
59
|
+
label: "Validating",
|
|
60
|
+
blurb: "The gate: structure, traceability, Gherkin and TDD.",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
slug: "reviewing-changes",
|
|
64
|
+
label: "Reviewing changes",
|
|
65
|
+
blurb: "Propose, review and archive a change to specs that already shipped.",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
slug: "domain-packs",
|
|
69
|
+
label: "Domain packs",
|
|
70
|
+
blurb: "Install a curated domain model instead of writing one from scratch.",
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
title: "Agents and the harness",
|
|
76
|
+
summary: "The part that spends money. Read the harness page before pointing an agent at anything.",
|
|
77
|
+
entries: [
|
|
78
|
+
{
|
|
79
|
+
slug: "agents",
|
|
80
|
+
label: "Agent tools",
|
|
81
|
+
blurb: "Wire Claude Code, Cursor, Copilot and five others into the same loop.",
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
slug: "agent-setup",
|
|
85
|
+
label: "Choosing your agent",
|
|
86
|
+
blurb: "Claude, Aider, Cursor or a three-line wrapper — and the two things that bite.",
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
slug: "harness",
|
|
90
|
+
label: "The harness",
|
|
91
|
+
blurb: "Unattended delivery: plan → agent → gate → done, one worktree per requirement.",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
slug: "bootstrap-prompt",
|
|
95
|
+
label: "Bootstrap prompt",
|
|
96
|
+
blurb: "The prompt that turns an idea into a first specification.",
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
title: "Running it for real",
|
|
102
|
+
summary: "CI, boards, and the things an enterprise asks before it says yes.",
|
|
103
|
+
entries: [
|
|
104
|
+
{
|
|
105
|
+
slug: "automation",
|
|
106
|
+
label: "Automation",
|
|
107
|
+
blurb: "Generate the gate for GitHub, GitLab, Azure or Jenkins.",
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
slug: "alm",
|
|
111
|
+
label: "Jira and Azure Boards",
|
|
112
|
+
blurb: "Mirror requirements onto a board without letting the board define them.",
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
slug: "deployment",
|
|
116
|
+
label: "Deployment",
|
|
117
|
+
blurb: "Where the generated project expects to be deployed from.",
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
slug: "supply-chain",
|
|
121
|
+
label: "Supply chain",
|
|
122
|
+
blurb: "SBOM, licences, provenance and what ships in the tarball.",
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: "Reference",
|
|
128
|
+
summary: "Look things up.",
|
|
129
|
+
entries: [
|
|
130
|
+
{
|
|
131
|
+
slug: "commands",
|
|
132
|
+
label: "Command reference",
|
|
133
|
+
blurb: "Every command, its flags and its JSON shape.",
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
slug: "how-to",
|
|
137
|
+
label: "How-to guides",
|
|
138
|
+
blurb: "Short answers to specific questions.",
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
slug: "troubleshooting",
|
|
142
|
+
label: "Troubleshooting",
|
|
143
|
+
blurb: "When the gate says no and you disagree.",
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
slug: "comparisons",
|
|
147
|
+
label: "Comparisons",
|
|
148
|
+
blurb: "How this differs from OpenSpec, Spec Kit and writing it yourself.",
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
slug: "release-process",
|
|
152
|
+
label: "Release process",
|
|
153
|
+
blurb: "How a version is cut, and what support it gets.",
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
// These two were published and linked from nowhere. They are the two
|
|
159
|
+
// documents that explain *why* the tool is shaped this way, which makes
|
|
160
|
+
// them the wrong ones to leave unreachable.
|
|
161
|
+
title: "Background",
|
|
162
|
+
summary: "Why it works this way.",
|
|
163
|
+
entries: [
|
|
164
|
+
{
|
|
165
|
+
slug: "articles/specs-that-cannot-lie",
|
|
166
|
+
label: "Specs that cannot lie",
|
|
167
|
+
blurb: "The argument the tool is built on, and the defects that shaped it.",
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
slug: "case-studies/case-1",
|
|
171
|
+
label: "Worked example: brownfield adoption",
|
|
172
|
+
blurb: "An illustration — invented company, constructed numbers — of the workflow end to end.",
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
];
|
|
177
|
+
/** Every slug the sidebar links to, in reading order. */
|
|
178
|
+
function navSlugs() {
|
|
179
|
+
return exports.NAV.flatMap((section) => section.entries.map((entry) => entry.slug));
|
|
180
|
+
}
|
|
181
|
+
/** The entry for a slug, or `null` when the document is not in the sidebar. */
|
|
182
|
+
function navEntry(slug) {
|
|
183
|
+
for (const section of exports.NAV) {
|
|
184
|
+
const found = section.entries.find((entry) => entry.slug === slug);
|
|
185
|
+
if (found)
|
|
186
|
+
return found;
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
/** What comes before and after this page, for the footer links. */
|
|
191
|
+
function neighbours(slug) {
|
|
192
|
+
const all = exports.NAV.flatMap((section) => section.entries);
|
|
193
|
+
const at = all.findIndex((entry) => entry.slug === slug);
|
|
194
|
+
if (at === -1)
|
|
195
|
+
return { prev: null, next: null };
|
|
196
|
+
return { prev: all[at - 1] ?? null, next: all[at + 1] ?? null };
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=nav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav.js","sourceRoot":"","sources":["../../../scripts/docs/nav.ts"],"names":[],"mappings":"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"}
|