@prodara/compiler 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 +204 -0
- package/dist/agent/agent.d.ts +10 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +122 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/api-client.d.ts +29 -0
- package/dist/agent/api-client.d.ts.map +1 -0
- package/dist/agent/api-client.js +167 -0
- package/dist/agent/api-client.js.map +1 -0
- package/dist/agent/index.d.ts +5 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +3 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/party.d.ts +48 -0
- package/dist/agent/party.d.ts.map +1 -0
- package/dist/agent/party.js +79 -0
- package/dist/agent/party.js.map +1 -0
- package/dist/agent/types.d.ts +35 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +5 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/audit/audit.d.ts +32 -0
- package/dist/audit/audit.d.ts.map +1 -0
- package/dist/audit/audit.js +120 -0
- package/dist/audit/audit.js.map +1 -0
- package/dist/audit/index.d.ts +3 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +2 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/types.d.ts +25 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +5 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/binder/binder.d.ts +34 -0
- package/dist/binder/binder.d.ts.map +1 -0
- package/dist/binder/binder.js +202 -0
- package/dist/binder/binder.js.map +1 -0
- package/dist/binder/index.d.ts +3 -0
- package/dist/binder/index.d.ts.map +1 -0
- package/dist/binder/index.js +2 -0
- package/dist/binder/index.js.map +1 -0
- package/dist/build-state/build-state.d.ts +40 -0
- package/dist/build-state/build-state.d.ts.map +1 -0
- package/dist/build-state/build-state.js +180 -0
- package/dist/build-state/build-state.js.map +1 -0
- package/dist/build-state/index.d.ts +3 -0
- package/dist/build-state/index.d.ts.map +1 -0
- package/dist/build-state/index.js +2 -0
- package/dist/build-state/index.js.map +1 -0
- package/dist/checker/index.d.ts +5 -0
- package/dist/checker/index.d.ts.map +1 -0
- package/dist/checker/index.js +3 -0
- package/dist/checker/index.js.map +1 -0
- package/dist/checker/type-checker.d.ts +8 -0
- package/dist/checker/type-checker.d.ts.map +1 -0
- package/dist/checker/type-checker.js +136 -0
- package/dist/checker/type-checker.js.map +1 -0
- package/dist/checker/validator.d.ts +8 -0
- package/dist/checker/validator.d.ts.map +1 -0
- package/dist/checker/validator.js +251 -0
- package/dist/checker/validator.js.map +1 -0
- package/dist/cli/agent-setup.d.ts +27 -0
- package/dist/cli/agent-setup.d.ts.map +1 -0
- package/dist/cli/agent-setup.js +829 -0
- package/dist/cli/agent-setup.js.map +1 -0
- package/dist/cli/analyze.d.ts +28 -0
- package/dist/cli/analyze.d.ts.map +1 -0
- package/dist/cli/analyze.js +188 -0
- package/dist/cli/analyze.js.map +1 -0
- package/dist/cli/checklist.d.ts +27 -0
- package/dist/cli/checklist.d.ts.map +1 -0
- package/dist/cli/checklist.js +153 -0
- package/dist/cli/checklist.js.map +1 -0
- package/dist/cli/compile.d.ts +26 -0
- package/dist/cli/compile.d.ts.map +1 -0
- package/dist/cli/compile.js +112 -0
- package/dist/cli/compile.js.map +1 -0
- package/dist/cli/dashboard.d.ts +19 -0
- package/dist/cli/dashboard.d.ts.map +1 -0
- package/dist/cli/dashboard.js +73 -0
- package/dist/cli/dashboard.js.map +1 -0
- package/dist/cli/explain.d.ts +23 -0
- package/dist/cli/explain.d.ts.map +1 -0
- package/dist/cli/explain.js +144 -0
- package/dist/cli/explain.js.map +1 -0
- package/dist/cli/git.d.ts +14 -0
- package/dist/cli/git.d.ts.map +1 -0
- package/dist/cli/git.js +44 -0
- package/dist/cli/git.js.map +1 -0
- package/dist/cli/lifecycle.d.ts +28 -0
- package/dist/cli/lifecycle.d.ts.map +1 -0
- package/dist/cli/lifecycle.js +82 -0
- package/dist/cli/lifecycle.js.map +1 -0
- package/dist/cli/main.d.ts +10 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +1072 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/notify.d.ts +13 -0
- package/dist/cli/notify.d.ts.map +1 -0
- package/dist/cli/notify.js +36 -0
- package/dist/cli/notify.js.map +1 -0
- package/dist/cli/starters.d.ts +12 -0
- package/dist/cli/starters.d.ts.map +1 -0
- package/dist/cli/starters.js +439 -0
- package/dist/cli/starters.js.map +1 -0
- package/dist/config/config.d.ts +194 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +434 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -0
- package/dist/diagnostics/diagnostic.d.ts +44 -0
- package/dist/diagnostics/diagnostic.d.ts.map +1 -0
- package/dist/diagnostics/diagnostic.js +44 -0
- package/dist/diagnostics/diagnostic.js.map +1 -0
- package/dist/diagnostics/index.d.ts +4 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +3 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/diagnostics/reporter.d.ts +43 -0
- package/dist/diagnostics/reporter.d.ts.map +1 -0
- package/dist/diagnostics/reporter.js +74 -0
- package/dist/diagnostics/reporter.js.map +1 -0
- package/dist/discovery/discovery.d.ts +6 -0
- package/dist/discovery/discovery.d.ts.map +1 -0
- package/dist/discovery/discovery.js +66 -0
- package/dist/discovery/discovery.js.map +1 -0
- package/dist/discovery/index.d.ts +2 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +2 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/doc-gen/doc-gen-types.d.ts +174 -0
- package/dist/doc-gen/doc-gen-types.d.ts.map +1 -0
- package/dist/doc-gen/doc-gen-types.js +7 -0
- package/dist/doc-gen/doc-gen-types.js.map +1 -0
- package/dist/doc-gen/doc-renderer.d.ts +17 -0
- package/dist/doc-gen/doc-renderer.d.ts.map +1 -0
- package/dist/doc-gen/doc-renderer.js +65 -0
- package/dist/doc-gen/doc-renderer.js.map +1 -0
- package/dist/doc-gen/format-helpers.d.ts +18 -0
- package/dist/doc-gen/format-helpers.d.ts.map +1 -0
- package/dist/doc-gen/format-helpers.js +92 -0
- package/dist/doc-gen/format-helpers.js.map +1 -0
- package/dist/doc-gen/index.d.ts +5 -0
- package/dist/doc-gen/index.d.ts.map +1 -0
- package/dist/doc-gen/index.js +5 -0
- package/dist/doc-gen/index.js.map +1 -0
- package/dist/doc-gen/link-resolver.d.ts +10 -0
- package/dist/doc-gen/link-resolver.d.ts.map +1 -0
- package/dist/doc-gen/link-resolver.js +87 -0
- package/dist/doc-gen/link-resolver.js.map +1 -0
- package/dist/doc-gen/mermaid-renderers.d.ts +12 -0
- package/dist/doc-gen/mermaid-renderers.d.ts.map +1 -0
- package/dist/doc-gen/mermaid-renderers.js +197 -0
- package/dist/doc-gen/mermaid-renderers.js.map +1 -0
- package/dist/doc-gen/module-renderer.d.ts +6 -0
- package/dist/doc-gen/module-renderer.d.ts.map +1 -0
- package/dist/doc-gen/module-renderer.js +54 -0
- package/dist/doc-gen/module-renderer.js.map +1 -0
- package/dist/doc-gen/product-renderer.d.ts +6 -0
- package/dist/doc-gen/product-renderer.d.ts.map +1 -0
- package/dist/doc-gen/product-renderer.js +101 -0
- package/dist/doc-gen/product-renderer.js.map +1 -0
- package/dist/doc-gen/section-renderers.d.ts +20 -0
- package/dist/doc-gen/section-renderers.d.ts.map +1 -0
- package/dist/doc-gen/section-renderers.js +357 -0
- package/dist/doc-gen/section-renderers.js.map +1 -0
- package/dist/doc-gen/string-resolver.d.ts +8 -0
- package/dist/doc-gen/string-resolver.d.ts.map +1 -0
- package/dist/doc-gen/string-resolver.js +47 -0
- package/dist/doc-gen/string-resolver.js.map +1 -0
- package/dist/doc-gen/surface-ascii.d.ts +7 -0
- package/dist/doc-gen/surface-ascii.d.ts.map +1 -0
- package/dist/doc-gen/surface-ascii.js +87 -0
- package/dist/doc-gen/surface-ascii.js.map +1 -0
- package/dist/drift/drift.d.ts +16 -0
- package/dist/drift/drift.d.ts.map +1 -0
- package/dist/drift/drift.js +149 -0
- package/dist/drift/drift.js.map +1 -0
- package/dist/drift/index.d.ts +3 -0
- package/dist/drift/index.d.ts.map +1 -0
- package/dist/drift/index.js +2 -0
- package/dist/drift/index.js.map +1 -0
- package/dist/extensions/index.d.ts +6 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +7 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/loader.d.ts +21 -0
- package/dist/extensions/loader.d.ts.map +1 -0
- package/dist/extensions/loader.js +101 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/marketplace.d.ts +22 -0
- package/dist/extensions/marketplace.d.ts.map +1 -0
- package/dist/extensions/marketplace.js +40 -0
- package/dist/extensions/marketplace.js.map +1 -0
- package/dist/extensions/registry.d.ts +45 -0
- package/dist/extensions/registry.d.ts.map +1 -0
- package/dist/extensions/registry.js +82 -0
- package/dist/extensions/registry.js.map +1 -0
- package/dist/extensions/types.d.ts +41 -0
- package/dist/extensions/types.d.ts.map +1 -0
- package/dist/extensions/types.js +5 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/generator/contracts.d.ts +67 -0
- package/dist/generator/contracts.d.ts.map +1 -0
- package/dist/generator/contracts.js +94 -0
- package/dist/generator/contracts.js.map +1 -0
- package/dist/generator/index.d.ts +3 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +2 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/governance/governance.d.ts +24 -0
- package/dist/governance/governance.d.ts.map +1 -0
- package/dist/governance/governance.js +238 -0
- package/dist/governance/governance.js.map +1 -0
- package/dist/governance/index.d.ts +3 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +2 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/types.d.ts +14 -0
- package/dist/governance/types.d.ts.map +1 -0
- package/dist/governance/types.js +5 -0
- package/dist/governance/types.js.map +1 -0
- package/dist/graph/builder.d.ts +10 -0
- package/dist/graph/builder.d.ts.map +1 -0
- package/dist/graph/builder.js +573 -0
- package/dist/graph/builder.js.map +1 -0
- package/dist/graph/graph-types.d.ts +64 -0
- package/dist/graph/graph-types.d.ts.map +1 -0
- package/dist/graph/graph-types.js +29 -0
- package/dist/graph/graph-types.js.map +1 -0
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +5 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/serializer.d.ts +9 -0
- package/dist/graph/serializer.d.ts.map +1 -0
- package/dist/graph/serializer.js +31 -0
- package/dist/graph/serializer.js.map +1 -0
- package/dist/graph/validator.d.ts +14 -0
- package/dist/graph/validator.d.ts.map +1 -0
- package/dist/graph/validator.js +96 -0
- package/dist/graph/validator.js.map +1 -0
- package/dist/implement/implement.d.ts +30 -0
- package/dist/implement/implement.d.ts.map +1 -0
- package/dist/implement/implement.js +299 -0
- package/dist/implement/implement.js.map +1 -0
- package/dist/implement/index.d.ts +3 -0
- package/dist/implement/index.d.ts.map +1 -0
- package/dist/implement/index.js +2 -0
- package/dist/implement/index.js.map +1 -0
- package/dist/implement/types.d.ts +41 -0
- package/dist/implement/types.d.ts.map +1 -0
- package/dist/implement/types.js +5 -0
- package/dist/implement/types.js.map +1 -0
- package/dist/incremental/incremental-spec.d.ts +12 -0
- package/dist/incremental/incremental-spec.d.ts.map +1 -0
- package/dist/incremental/incremental-spec.js +100 -0
- package/dist/incremental/incremental-spec.js.map +1 -0
- package/dist/incremental/index.d.ts +3 -0
- package/dist/incremental/index.d.ts.map +1 -0
- package/dist/incremental/index.js +5 -0
- package/dist/incremental/index.js.map +1 -0
- package/dist/incremental/types.d.ts +28 -0
- package/dist/incremental/types.d.ts.map +1 -0
- package/dist/incremental/types.js +7 -0
- package/dist/incremental/types.js.map +1 -0
- package/dist/index.d.ts +106 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +106 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer/index.d.ts +6 -0
- package/dist/lexer/index.d.ts.map +1 -0
- package/dist/lexer/index.js +5 -0
- package/dist/lexer/index.js.map +1 -0
- package/dist/lexer/keywords.d.ts +3 -0
- package/dist/lexer/keywords.d.ts.map +1 -0
- package/dist/lexer/keywords.js +142 -0
- package/dist/lexer/keywords.js.map +1 -0
- package/dist/lexer/lexer.d.ts +19 -0
- package/dist/lexer/lexer.d.ts.map +1 -0
- package/dist/lexer/lexer.js +286 -0
- package/dist/lexer/lexer.js.map +1 -0
- package/dist/lexer/source.d.ts +13 -0
- package/dist/lexer/source.d.ts.map +1 -0
- package/dist/lexer/source.js +59 -0
- package/dist/lexer/source.js.map +1 -0
- package/dist/lexer/tokens.d.ts +157 -0
- package/dist/lexer/tokens.d.ts.map +1 -0
- package/dist/lexer/tokens.js +173 -0
- package/dist/lexer/tokens.js.map +1 -0
- package/dist/orchestrator/index.d.ts +5 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +3 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +14 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +129 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/pipeline.d.ts +31 -0
- package/dist/orchestrator/pipeline.d.ts.map +1 -0
- package/dist/orchestrator/pipeline.js +290 -0
- package/dist/orchestrator/pipeline.js.map +1 -0
- package/dist/orchestrator/types.d.ts +60 -0
- package/dist/orchestrator/types.d.ts.map +1 -0
- package/dist/orchestrator/types.js +8 -0
- package/dist/orchestrator/types.js.map +1 -0
- package/dist/parser/ast.d.ts +502 -0
- package/dist/parser/ast.d.ts.map +1 -0
- package/dist/parser/ast.js +7 -0
- package/dist/parser/ast.js.map +1 -0
- package/dist/parser/expressions.d.ts +18 -0
- package/dist/parser/expressions.d.ts.map +1 -0
- package/dist/parser/expressions.js +230 -0
- package/dist/parser/expressions.js.map +1 -0
- package/dist/parser/index.d.ts +4 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +2 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/parser.d.ts +83 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +2149 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/planner/differ.d.ts +4 -0
- package/dist/planner/differ.d.ts.map +1 -0
- package/dist/planner/differ.js +96 -0
- package/dist/planner/differ.js.map +1 -0
- package/dist/planner/index.d.ts +7 -0
- package/dist/planner/index.d.ts.map +1 -0
- package/dist/planner/index.js +5 -0
- package/dist/planner/index.js.map +1 -0
- package/dist/planner/plan-types.d.ts +26 -0
- package/dist/planner/plan-types.d.ts.map +1 -0
- package/dist/planner/plan-types.js +5 -0
- package/dist/planner/plan-types.js.map +1 -0
- package/dist/planner/planner.d.ts +8 -0
- package/dist/planner/planner.d.ts.map +1 -0
- package/dist/planner/planner.js +83 -0
- package/dist/planner/planner.js.map +1 -0
- package/dist/planner/propagator.d.ts +4 -0
- package/dist/planner/propagator.d.ts.map +1 -0
- package/dist/planner/propagator.js +45 -0
- package/dist/planner/propagator.js.map +1 -0
- package/dist/planner/semantic-diff.d.ts +27 -0
- package/dist/planner/semantic-diff.d.ts.map +1 -0
- package/dist/planner/semantic-diff.js +253 -0
- package/dist/planner/semantic-diff.js.map +1 -0
- package/dist/presets/index.d.ts +3 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +5 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/loader.d.ts +28 -0
- package/dist/presets/loader.d.ts.map +1 -0
- package/dist/presets/loader.js +99 -0
- package/dist/presets/loader.js.map +1 -0
- package/dist/presets/types.d.ts +21 -0
- package/dist/presets/types.d.ts.map +1 -0
- package/dist/presets/types.js +5 -0
- package/dist/presets/types.js.map +1 -0
- package/dist/proposal/index.d.ts +3 -0
- package/dist/proposal/index.d.ts.map +1 -0
- package/dist/proposal/index.js +7 -0
- package/dist/proposal/index.js.map +1 -0
- package/dist/proposal/proposal.d.ts +9 -0
- package/dist/proposal/proposal.d.ts.map +1 -0
- package/dist/proposal/proposal.js +169 -0
- package/dist/proposal/proposal.js.map +1 -0
- package/dist/proposal/types.d.ts +15 -0
- package/dist/proposal/types.d.ts.map +1 -0
- package/dist/proposal/types.js +5 -0
- package/dist/proposal/types.js.map +1 -0
- package/dist/registry/index.d.ts +3 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +2 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/resolution.d.ts +39 -0
- package/dist/registry/resolution.d.ts.map +1 -0
- package/dist/registry/resolution.js +70 -0
- package/dist/registry/resolution.js.map +1 -0
- package/dist/reviewers/adversarial.d.ts +3 -0
- package/dist/reviewers/adversarial.d.ts.map +1 -0
- package/dist/reviewers/adversarial.js +111 -0
- package/dist/reviewers/adversarial.js.map +1 -0
- package/dist/reviewers/architecture.d.ts +3 -0
- package/dist/reviewers/architecture.d.ts.map +1 -0
- package/dist/reviewers/architecture.js +71 -0
- package/dist/reviewers/architecture.js.map +1 -0
- package/dist/reviewers/code-quality.d.ts +3 -0
- package/dist/reviewers/code-quality.d.ts.map +1 -0
- package/dist/reviewers/code-quality.js +72 -0
- package/dist/reviewers/code-quality.js.map +1 -0
- package/dist/reviewers/edge-case.d.ts +3 -0
- package/dist/reviewers/edge-case.d.ts.map +1 -0
- package/dist/reviewers/edge-case.js +107 -0
- package/dist/reviewers/edge-case.js.map +1 -0
- package/dist/reviewers/index.d.ts +21 -0
- package/dist/reviewers/index.d.ts.map +1 -0
- package/dist/reviewers/index.js +39 -0
- package/dist/reviewers/index.js.map +1 -0
- package/dist/reviewers/prompt-loader.d.ts +24 -0
- package/dist/reviewers/prompt-loader.d.ts.map +1 -0
- package/dist/reviewers/prompt-loader.js +67 -0
- package/dist/reviewers/prompt-loader.js.map +1 -0
- package/dist/reviewers/quality.d.ts +3 -0
- package/dist/reviewers/quality.d.ts.map +1 -0
- package/dist/reviewers/quality.js +76 -0
- package/dist/reviewers/quality.js.map +1 -0
- package/dist/reviewers/reviewer.d.ts +39 -0
- package/dist/reviewers/reviewer.d.ts.map +1 -0
- package/dist/reviewers/reviewer.js +149 -0
- package/dist/reviewers/reviewer.js.map +1 -0
- package/dist/reviewers/security.d.ts +3 -0
- package/dist/reviewers/security.d.ts.map +1 -0
- package/dist/reviewers/security.js +87 -0
- package/dist/reviewers/security.js.map +1 -0
- package/dist/reviewers/specification.d.ts +3 -0
- package/dist/reviewers/specification.d.ts.map +1 -0
- package/dist/reviewers/specification.js +79 -0
- package/dist/reviewers/specification.js.map +1 -0
- package/dist/reviewers/test-quality.d.ts +3 -0
- package/dist/reviewers/test-quality.d.ts.map +1 -0
- package/dist/reviewers/test-quality.js +88 -0
- package/dist/reviewers/test-quality.js.map +1 -0
- package/dist/reviewers/types.d.ts +32 -0
- package/dist/reviewers/types.d.ts.map +1 -0
- package/dist/reviewers/types.js +5 -0
- package/dist/reviewers/types.js.map +1 -0
- package/dist/reviewers/ux.d.ts +3 -0
- package/dist/reviewers/ux.d.ts.map +1 -0
- package/dist/reviewers/ux.js +94 -0
- package/dist/reviewers/ux.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/resolution.d.ts +30 -0
- package/dist/runtime/resolution.d.ts.map +1 -0
- package/dist/runtime/resolution.js +59 -0
- package/dist/runtime/resolution.js.map +1 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +2 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/test-runner.d.ts +18 -0
- package/dist/testing/test-runner.d.ts.map +1 -0
- package/dist/testing/test-runner.js +131 -0
- package/dist/testing/test-runner.js.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +127 -0
- package/dist/types.js.map +1 -0
- package/dist/validation/index.d.ts +3 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +2 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/types.d.ts +16 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +5 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/validation.d.ts +8 -0
- package/dist/validation/validation.d.ts.map +1 -0
- package/dist/validation/validation.js +101 -0
- package/dist/validation/validation.js.map +1 -0
- package/dist/verification/index.d.ts +3 -0
- package/dist/verification/index.d.ts.map +1 -0
- package/dist/verification/index.js +5 -0
- package/dist/verification/index.js.map +1 -0
- package/dist/verification/types.d.ts +14 -0
- package/dist/verification/types.d.ts.map +1 -0
- package/dist/verification/types.js +5 -0
- package/dist/verification/types.js.map +1 -0
- package/dist/verification/verify.d.ts +7 -0
- package/dist/verification/verify.d.ts.map +1 -0
- package/dist/verification/verify.js +127 -0
- package/dist/verification/verify.js.map +1 -0
- package/dist/workflow/clarify.d.ts +7 -0
- package/dist/workflow/clarify.d.ts.map +1 -0
- package/dist/workflow/clarify.js +165 -0
- package/dist/workflow/clarify.js.map +1 -0
- package/dist/workflow/engine.d.ts +19 -0
- package/dist/workflow/engine.d.ts.map +1 -0
- package/dist/workflow/engine.js +265 -0
- package/dist/workflow/engine.js.map +1 -0
- package/dist/workflow/index.d.ts +6 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +7 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/types.d.ts +95 -0
- package/dist/workflow/types.d.ts.map +1 -0
- package/dist/workflow/types.js +18 -0
- package/dist/workflow/types.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Prodara Compiler — Proposal Operations
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Core logic for creating, listing, applying, and archiving change proposals.
|
|
5
|
+
import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, renameSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
export const CHANGES_DIR = '.prodara/changes';
|
|
8
|
+
export const ARCHIVE_DIR = '.prodara/changes/archive';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Create
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
export function createProposal(description, root) {
|
|
13
|
+
const name = slugify(description);
|
|
14
|
+
const changesDir = join(root, CHANGES_DIR);
|
|
15
|
+
const proposalDir = join(changesDir, name);
|
|
16
|
+
if (existsSync(proposalDir)) {
|
|
17
|
+
throw new Error(`Change proposal already exists: ${name}`);
|
|
18
|
+
}
|
|
19
|
+
mkdirSync(proposalDir, { recursive: true });
|
|
20
|
+
const metadata = {
|
|
21
|
+
name,
|
|
22
|
+
description,
|
|
23
|
+
status: 'proposed',
|
|
24
|
+
created: new Date().toISOString(),
|
|
25
|
+
};
|
|
26
|
+
// Write metadata
|
|
27
|
+
writeFileSync(join(proposalDir, 'metadata.json'), JSON.stringify(metadata, null, 2) + '\n', 'utf-8');
|
|
28
|
+
// Write proposal markdown
|
|
29
|
+
writeFileSync(join(proposalDir, 'proposal.md'), [
|
|
30
|
+
`# ${description}`,
|
|
31
|
+
'',
|
|
32
|
+
'## Summary',
|
|
33
|
+
'',
|
|
34
|
+
'Describe the change and its motivation here.',
|
|
35
|
+
'',
|
|
36
|
+
'## Scope',
|
|
37
|
+
'',
|
|
38
|
+
'- Affected modules:',
|
|
39
|
+
'- New entities/workflows:',
|
|
40
|
+
'- Modified entities/workflows:',
|
|
41
|
+
'',
|
|
42
|
+
].join('\n'), 'utf-8');
|
|
43
|
+
// Write delta.prd template
|
|
44
|
+
writeFileSync(join(proposalDir, 'delta.prd'), [
|
|
45
|
+
`// Delta specification for: ${description}`,
|
|
46
|
+
'// This file is compiled alongside your main .prd files.',
|
|
47
|
+
'// Add new or modified entity, workflow, surface, and event blocks below.',
|
|
48
|
+
'//',
|
|
49
|
+
'// Example:',
|
|
50
|
+
'// entity new_feature {',
|
|
51
|
+
'// id: uuid',
|
|
52
|
+
'// name: string',
|
|
53
|
+
'// }',
|
|
54
|
+
'',
|
|
55
|
+
].join('\n'), 'utf-8');
|
|
56
|
+
// Write task checklist
|
|
57
|
+
writeFileSync(join(proposalDir, 'tasks.md'), [
|
|
58
|
+
`# Tasks — ${description}`,
|
|
59
|
+
'',
|
|
60
|
+
'- [ ] Define delta specification (delta.prd)',
|
|
61
|
+
'- [ ] Run `prodara validate` on delta',
|
|
62
|
+
'- [ ] Review semantic diff',
|
|
63
|
+
'- [ ] Implement changes',
|
|
64
|
+
'- [ ] Archive proposal',
|
|
65
|
+
'',
|
|
66
|
+
].join('\n'), 'utf-8');
|
|
67
|
+
return {
|
|
68
|
+
name,
|
|
69
|
+
description,
|
|
70
|
+
status: 'proposed',
|
|
71
|
+
created: metadata.created,
|
|
72
|
+
path: proposalDir,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
// List
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
export function listProposals(root) {
|
|
79
|
+
const changesDir = join(root, CHANGES_DIR);
|
|
80
|
+
if (!existsSync(changesDir))
|
|
81
|
+
return [];
|
|
82
|
+
const entries = readdirSync(changesDir, { withFileTypes: true });
|
|
83
|
+
const proposals = [];
|
|
84
|
+
for (const entry of entries) {
|
|
85
|
+
if (!entry.isDirectory() || entry.name === 'archive')
|
|
86
|
+
continue;
|
|
87
|
+
const metadataPath = join(changesDir, entry.name, 'metadata.json');
|
|
88
|
+
/* v8 ignore next -- defensive: metadata always exists for valid proposals */
|
|
89
|
+
if (!existsSync(metadataPath))
|
|
90
|
+
continue;
|
|
91
|
+
const metadata = JSON.parse(readFileSync(metadataPath, 'utf-8'));
|
|
92
|
+
proposals.push({
|
|
93
|
+
name: metadata.name,
|
|
94
|
+
description: metadata.description,
|
|
95
|
+
status: metadata.status,
|
|
96
|
+
created: metadata.created,
|
|
97
|
+
path: join(changesDir, entry.name),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return proposals.sort((a, b) => b.created.localeCompare(a.created));
|
|
101
|
+
}
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// Get
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
export function getProposal(name, root) {
|
|
106
|
+
const changesDir = join(root, CHANGES_DIR);
|
|
107
|
+
const proposalDir = join(changesDir, name);
|
|
108
|
+
const metadataPath = join(proposalDir, 'metadata.json');
|
|
109
|
+
if (!existsSync(metadataPath))
|
|
110
|
+
return null;
|
|
111
|
+
const metadata = JSON.parse(readFileSync(metadataPath, 'utf-8'));
|
|
112
|
+
return {
|
|
113
|
+
name: metadata.name,
|
|
114
|
+
description: metadata.description,
|
|
115
|
+
status: metadata.status,
|
|
116
|
+
created: metadata.created,
|
|
117
|
+
path: proposalDir,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
// Apply
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
export function applyProposal(name, root) {
|
|
124
|
+
const proposal = getProposal(name, root);
|
|
125
|
+
if (!proposal) {
|
|
126
|
+
throw new Error(`Change proposal not found: ${name}`);
|
|
127
|
+
}
|
|
128
|
+
// Update status to in-progress
|
|
129
|
+
updateStatus(proposal.path, 'in-progress');
|
|
130
|
+
return { ...proposal, status: 'in-progress' };
|
|
131
|
+
}
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
// Archive
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
export function archiveProposal(name, root) {
|
|
136
|
+
const proposal = getProposal(name, root);
|
|
137
|
+
if (!proposal) {
|
|
138
|
+
throw new Error(`Change proposal not found: ${name}`);
|
|
139
|
+
}
|
|
140
|
+
const archiveDir = join(root, ARCHIVE_DIR);
|
|
141
|
+
mkdirSync(archiveDir, { recursive: true });
|
|
142
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
143
|
+
const archiveName = `${date}-${name}`;
|
|
144
|
+
const archivePath = join(archiveDir, archiveName);
|
|
145
|
+
// Update status before moving
|
|
146
|
+
updateStatus(proposal.path, 'archived');
|
|
147
|
+
// Move to archive
|
|
148
|
+
renameSync(proposal.path, archivePath);
|
|
149
|
+
return { ...proposal, status: 'archived', path: archivePath };
|
|
150
|
+
}
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
// Helpers
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
function updateStatus(proposalPath, status) {
|
|
155
|
+
const metadataPath = join(proposalPath, 'metadata.json');
|
|
156
|
+
const metadata = JSON.parse(readFileSync(metadataPath, 'utf-8'));
|
|
157
|
+
const updated = { ...metadata, status };
|
|
158
|
+
writeFileSync(metadataPath, JSON.stringify(updated, null, 2) + '\n', 'utf-8');
|
|
159
|
+
}
|
|
160
|
+
function slugify(text) {
|
|
161
|
+
return text
|
|
162
|
+
.toLowerCase()
|
|
163
|
+
.replace(/[^a-z0-9\s-]/g, '')
|
|
164
|
+
.replace(/\s+/g, '-')
|
|
165
|
+
.replace(/-+/g, '-')
|
|
166
|
+
.replace(/^-|-$/g, '')
|
|
167
|
+
.slice(0, 60);
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=proposal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../src/proposal/proposal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type ChangeStatus = 'proposed' | 'in-progress' | 'implemented' | 'archived';
|
|
2
|
+
export interface ChangeMetadata {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly description: string;
|
|
5
|
+
readonly status: ChangeStatus;
|
|
6
|
+
readonly created: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ChangeProposal {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly description: string;
|
|
11
|
+
readonly status: ChangeStatus;
|
|
12
|
+
readonly created: string;
|
|
13
|
+
readonly path: string;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/proposal/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/proposal/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,oCAAoC;AACpC,8EAA8E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxE,YAAY,EAAE,4BAA4B,EAAE,eAAe,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { AstFile, PackageRef as AstPackageRef } from '../parser/ast.js';
|
|
2
|
+
import type { BindResult } from '../binder/binder.js';
|
|
3
|
+
import { DiagnosticBag } from '../diagnostics/diagnostic.js';
|
|
4
|
+
/** A resolved constitution package */
|
|
5
|
+
export interface ResolvedPackage {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly version: string;
|
|
8
|
+
readonly source: 'local' | 'git' | 'registry';
|
|
9
|
+
/** Resolved policies from this package */
|
|
10
|
+
readonly policies: readonly ResolvedPolicy[];
|
|
11
|
+
}
|
|
12
|
+
/** A policy resolved from a constitution package */
|
|
13
|
+
export interface ResolvedPolicy {
|
|
14
|
+
readonly name: string;
|
|
15
|
+
readonly properties: ReadonlyMap<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
/** A package reference found in a constitution declaration */
|
|
18
|
+
export interface ConstitutionPackageRef {
|
|
19
|
+
readonly path: string;
|
|
20
|
+
readonly version: string;
|
|
21
|
+
readonly module: string;
|
|
22
|
+
readonly constitutionName: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ConstitutionResolutionResult {
|
|
25
|
+
readonly bag: DiagnosticBag;
|
|
26
|
+
readonly packages: readonly ResolvedPackage[];
|
|
27
|
+
readonly refs: readonly ConstitutionPackageRef[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Extract constitution package references from the AST and attempt
|
|
31
|
+
* resolution. In v0.1, only local vendored packages are supported — remote
|
|
32
|
+
* packages emit an informational diagnostic.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveConstitutions(files: readonly AstFile[], _bindResult: BindResult): ConstitutionResolutionResult;
|
|
35
|
+
/**
|
|
36
|
+
* Parse a raw package reference string. Exported for testing.
|
|
37
|
+
*/
|
|
38
|
+
export declare function parsePackageRef(raw: string): AstPackageRef | null;
|
|
39
|
+
//# sourceMappingURL=resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution.d.ts","sourceRoot":"","sources":["../../src/registry/resolution.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAM7D,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,UAAU,CAAC;IAC9C,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnD;AAED,8DAA8D;AAC9D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAClD;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,WAAW,EAAE,UAAU,GACtB,4BAA4B,CAyC9B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAIjE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Prodara Compiler — Constitution & Registry Resolution
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Resolves constitution package references declared via `use` in constitution
|
|
5
|
+
// blocks. This module implements the resolution model described in the spec:
|
|
6
|
+
//
|
|
7
|
+
// Resolution order: local vendored → custom Git taps → official registry
|
|
8
|
+
//
|
|
9
|
+
// In v0.1 only local resolution is implemented. Remote registry and Git taps
|
|
10
|
+
// are defined as interfaces ready for future plug-in.
|
|
11
|
+
import { DiagnosticBag } from '../diagnostics/diagnostic.js';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Resolution
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Extract constitution package references from the AST and attempt
|
|
17
|
+
* resolution. In v0.1, only local vendored packages are supported — remote
|
|
18
|
+
* packages emit an informational diagnostic.
|
|
19
|
+
*/
|
|
20
|
+
export function resolveConstitutions(files, _bindResult) {
|
|
21
|
+
const bag = new DiagnosticBag();
|
|
22
|
+
const refs = [];
|
|
23
|
+
const packages = [];
|
|
24
|
+
// Collect all constitution package references
|
|
25
|
+
for (const file of files) {
|
|
26
|
+
for (const decl of file.declarations) {
|
|
27
|
+
if (decl.kind !== 'module')
|
|
28
|
+
continue;
|
|
29
|
+
for (const item of decl.items) {
|
|
30
|
+
if (item.kind !== 'constitution')
|
|
31
|
+
continue;
|
|
32
|
+
if (item.packages) {
|
|
33
|
+
for (const pkg of item.packages) {
|
|
34
|
+
refs.push({
|
|
35
|
+
path: pkg.path,
|
|
36
|
+
version: pkg.version,
|
|
37
|
+
module: decl.name,
|
|
38
|
+
constitutionName: item.name,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Attempt resolution (local only in v0.1)
|
|
46
|
+
for (const ref of refs) {
|
|
47
|
+
// In v0.1, no actual package fetching
|
|
48
|
+
bag.add({
|
|
49
|
+
phase: 'registry',
|
|
50
|
+
category: 'registry_error',
|
|
51
|
+
severity: 'info',
|
|
52
|
+
code: 'PRD0601',
|
|
53
|
+
message: `Constitution package '${ref.path}@${ref.version}' referenced but registry resolution is not yet available`,
|
|
54
|
+
file: '',
|
|
55
|
+
line: 0,
|
|
56
|
+
column: 0,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return { bag, packages, refs };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Parse a raw package reference string. Exported for testing.
|
|
63
|
+
*/
|
|
64
|
+
export function parsePackageRef(raw) {
|
|
65
|
+
const match = /^([@\w][\w./-]*)(?:@(.+))?$/.exec(raw);
|
|
66
|
+
if (!match)
|
|
67
|
+
return null;
|
|
68
|
+
return { path: match[1], version: match[2] ?? '*' };
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution.js","sourceRoot":"","sources":["../../src/registry/resolution.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wDAAwD;AACxD,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,EAAE;AACF,yEAAyE;AACzE,EAAE;AACF,6EAA6E;AAC7E,sDAAsD;AAItD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAmC7D,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAyB,EACzB,WAAuB;IAEvB,MAAM,GAAG,GAAG,IAAI,aAAa,EAAE,CAAC;IAChC,MAAM,IAAI,GAA6B,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,8CAA8C;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;oBAAE,SAAS;gBAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAChC,IAAI,CAAC,IAAI,CAAC;4BACR,IAAI,EAAE,GAAG,CAAC,IAAI;4BACd,OAAO,EAAE,GAAG,CAAC,OAAO;4BACpB,MAAM,EAAE,IAAI,CAAC,IAAI;4BACjB,gBAAgB,EAAE,IAAI,CAAC,IAAI;yBAC5B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,sCAAsC;QACtC,GAAG,CAAC,GAAG,CAAC;YACN,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,gBAAgB;YAC1B,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,yBAAyB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,2DAA2D;YACpH,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;SACV,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adversarial.d.ts","sourceRoot":"","sources":["../../src/reviewers/adversarial.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,eAAO,MAAM,mBAAmB,EAAE,aA2GjC,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Prodara Compiler — Adversarial Reviewer
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// A cynical/skeptical reviewer that assumes problems exist and exhaustively
|
|
5
|
+
// finds gaps, unstated assumptions, contradictions, and missing items.
|
|
6
|
+
export const adversarialReviewer = {
|
|
7
|
+
name: 'adversarial',
|
|
8
|
+
description: 'Cynical reviewer that assumes problems exist and finds gaps, contradictions, and unstated assumptions',
|
|
9
|
+
review(graph, _spec) {
|
|
10
|
+
const findings = [];
|
|
11
|
+
// Check: modules without any policies or rules
|
|
12
|
+
for (const mod of graph.modules) {
|
|
13
|
+
const policies = getNodeArray(mod, 'policies');
|
|
14
|
+
const rules = getNodeArray(mod, 'rules');
|
|
15
|
+
const entities = getNodeArray(mod, 'entities');
|
|
16
|
+
if (entities.length > 0 && policies.length === 0 && rules.length === 0) {
|
|
17
|
+
findings.push({
|
|
18
|
+
reviewer: 'adversarial',
|
|
19
|
+
severity: 'warning',
|
|
20
|
+
category: 'missing_policies',
|
|
21
|
+
nodeId: mod.id,
|
|
22
|
+
message: `Module "${mod.name}" has entities but no policies or rules — data integrity is unguarded`,
|
|
23
|
+
suggestion: 'Add validation policies to protect entity invariants',
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Check: modules without tests
|
|
28
|
+
for (const mod of graph.modules) {
|
|
29
|
+
const tests = getNodeArray(mod, 'tests');
|
|
30
|
+
if (tests.length === 0) {
|
|
31
|
+
findings.push({
|
|
32
|
+
reviewer: 'adversarial',
|
|
33
|
+
severity: 'warning',
|
|
34
|
+
category: 'missing_tests',
|
|
35
|
+
nodeId: mod.id,
|
|
36
|
+
message: `Module "${mod.name}" has no tests — correctness is unverified`,
|
|
37
|
+
suggestion: 'Add spec tests to verify module behavior',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Check: entities without any edges (orphan entities)
|
|
42
|
+
for (const mod of graph.modules) {
|
|
43
|
+
for (const entity of getNodeArray(mod, 'entities')) {
|
|
44
|
+
const hasEdge = graph.edges.some((e) => e.from === entity.id || e.to === entity.id);
|
|
45
|
+
if (!hasEdge) {
|
|
46
|
+
findings.push({
|
|
47
|
+
reviewer: 'adversarial',
|
|
48
|
+
severity: 'warning',
|
|
49
|
+
category: 'orphan_entity',
|
|
50
|
+
nodeId: entity.id,
|
|
51
|
+
message: `Entity "${entity.name}" in module "${mod.name}" has no edges — it may be unused`,
|
|
52
|
+
suggestion: 'Connect this entity to workflows or other entities, or remove it',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Check: workflows without any output edges
|
|
58
|
+
for (const mod of graph.modules) {
|
|
59
|
+
for (const wf of getNodeArray(mod, 'workflows')) {
|
|
60
|
+
const hasOutput = graph.edges.some(
|
|
61
|
+
/* v8 ignore next -- both emits and writes are tested */
|
|
62
|
+
(e) => e.from === wf.id && (e.kind === 'emits' || e.kind === 'writes'));
|
|
63
|
+
if (!hasOutput) {
|
|
64
|
+
findings.push({
|
|
65
|
+
reviewer: 'adversarial',
|
|
66
|
+
severity: 'info',
|
|
67
|
+
category: 'missing_output',
|
|
68
|
+
nodeId: wf.id,
|
|
69
|
+
message: `Workflow "${wf.name}" in module "${mod.name}" has no output edges — side effects are unstated`,
|
|
70
|
+
suggestion: 'Declare what this workflow produces, emits, or writes',
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Check: duplicate node names within a module
|
|
76
|
+
for (const mod of graph.modules) {
|
|
77
|
+
const names = new Map();
|
|
78
|
+
for (const category of ['entities', 'workflows', 'screens', 'policies', 'events', 'actors']) {
|
|
79
|
+
for (const node of getNodeArray(mod, category)) {
|
|
80
|
+
const existing = names.get(node.name);
|
|
81
|
+
if (existing) {
|
|
82
|
+
existing.push(node.id);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
names.set(node.name, [node.id]);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
for (const [name, ids] of names) {
|
|
90
|
+
if (ids.length > 1) {
|
|
91
|
+
findings.push({
|
|
92
|
+
reviewer: 'adversarial',
|
|
93
|
+
severity: 'error',
|
|
94
|
+
category: 'duplicate_name',
|
|
95
|
+
nodeId: ids[0],
|
|
96
|
+
message: `Duplicate name "${name}" in module "${mod.name}" — ambiguous references`,
|
|
97
|
+
suggestion: 'Rename one of the duplicates to avoid confusion',
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return findings;
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
function getNodeArray(mod, category) {
|
|
106
|
+
const val = mod[category];
|
|
107
|
+
if (!Array.isArray(val))
|
|
108
|
+
return [];
|
|
109
|
+
return val;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=adversarial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adversarial.js","sourceRoot":"","sources":["../../src/reviewers/adversarial.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../src/reviewers/architecture.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,eAAO,MAAM,oBAAoB,EAAE,aA6DlC,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Prodara Compiler — Architecture Reviewer
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Validates architectural quality: module boundaries, dependency patterns,
|
|
5
|
+
// authorization coverage, and circular dependency risks.
|
|
6
|
+
export const architectureReviewer = {
|
|
7
|
+
name: 'architecture',
|
|
8
|
+
description: 'Validates module boundaries, dependency patterns, and authorization coverage',
|
|
9
|
+
review(graph, _spec) {
|
|
10
|
+
const findings = [];
|
|
11
|
+
// Check: every module should have at least one entity or workflow
|
|
12
|
+
for (const mod of graph.modules) {
|
|
13
|
+
const entities = getNodeArray(mod, 'entities');
|
|
14
|
+
const workflows = getNodeArray(mod, 'workflows');
|
|
15
|
+
if (entities.length === 0 && workflows.length === 0) {
|
|
16
|
+
findings.push({
|
|
17
|
+
reviewer: 'architecture',
|
|
18
|
+
severity: 'warning',
|
|
19
|
+
category: 'empty_module',
|
|
20
|
+
nodeId: mod.id,
|
|
21
|
+
message: `Module "${mod.name}" has no entities or workflows`,
|
|
22
|
+
suggestion: 'Consider adding domain constructs or merging into another module',
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Check: workflows should have authorization
|
|
27
|
+
for (const mod of graph.modules) {
|
|
28
|
+
for (const wf of getNodeArray(mod, 'workflows')) {
|
|
29
|
+
const hasAuth = graph.edges.some((e) => e.from === wf.id && e.kind === 'authorized_as');
|
|
30
|
+
if (!hasAuth) {
|
|
31
|
+
findings.push({
|
|
32
|
+
reviewer: 'architecture',
|
|
33
|
+
severity: 'warning',
|
|
34
|
+
category: 'missing_authorization',
|
|
35
|
+
nodeId: wf.id,
|
|
36
|
+
message: `Workflow "${wf.name}" in module "${mod.name}" has no authorization`,
|
|
37
|
+
suggestion: 'Add an authorization block to restrict access',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Check: cross-module dependency density
|
|
43
|
+
const crossModuleEdges = graph.edges.filter((e) => {
|
|
44
|
+
const fromMod = extractModule(e.from);
|
|
45
|
+
const toMod = extractModule(e.to);
|
|
46
|
+
return fromMod && toMod && fromMod !== toMod;
|
|
47
|
+
});
|
|
48
|
+
const moduleCount = graph.modules.length;
|
|
49
|
+
if (moduleCount > 1 && crossModuleEdges.length > moduleCount * 10) {
|
|
50
|
+
findings.push({
|
|
51
|
+
reviewer: 'architecture',
|
|
52
|
+
severity: 'info',
|
|
53
|
+
category: 'high_coupling',
|
|
54
|
+
message: `High cross-module coupling: ${crossModuleEdges.length} cross-module edges across ${moduleCount} modules`,
|
|
55
|
+
suggestion: 'Consider refactoring to reduce inter-module dependencies',
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return findings;
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
function extractModule(nodeId) {
|
|
62
|
+
const parts = nodeId.split('.');
|
|
63
|
+
return parts.length >= 2 ? parts[0] : null;
|
|
64
|
+
}
|
|
65
|
+
function getNodeArray(mod, category) {
|
|
66
|
+
const val = mod[category];
|
|
67
|
+
if (!Array.isArray(val))
|
|
68
|
+
return [];
|
|
69
|
+
return val;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=architecture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../src/reviewers/architecture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-quality.d.ts","sourceRoot":"","sources":["../../src/reviewers/code-quality.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,eAAO,MAAM,mBAAmB,EAAE,aAoEjC,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Prodara Compiler — Code Quality Reviewer
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Validates graph structural quality: orphan nodes, edge validity,
|
|
5
|
+
// duplicate identifiers, and consistent graph structure.
|
|
6
|
+
import { collectAllNodeIds } from '../graph/graph-types.js';
|
|
7
|
+
export const codeQualityReviewer = {
|
|
8
|
+
name: 'codeQuality',
|
|
9
|
+
description: 'Validates graph structure: orphans, edge validity, and duplicates',
|
|
10
|
+
review(graph, _spec) {
|
|
11
|
+
const findings = [];
|
|
12
|
+
const allNodeIds = collectAllNodeIds(graph);
|
|
13
|
+
// Check: edges reference valid nodes
|
|
14
|
+
for (const edge of graph.edges) {
|
|
15
|
+
if (!allNodeIds.has(edge.from)) {
|
|
16
|
+
findings.push({
|
|
17
|
+
reviewer: 'codeQuality',
|
|
18
|
+
severity: 'error',
|
|
19
|
+
category: 'invalid_edge_source',
|
|
20
|
+
message: `Edge "${edge.kind}" has source "${edge.from}" which is not in the graph`,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
if (!allNodeIds.has(edge.to)) {
|
|
24
|
+
findings.push({
|
|
25
|
+
reviewer: 'codeQuality',
|
|
26
|
+
severity: 'error',
|
|
27
|
+
category: 'invalid_edge_target',
|
|
28
|
+
message: `Edge "${edge.kind}" has target "${edge.to}" which is not in the graph`,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Check: orphan nodes (non-module, non-product nodes with no edges)
|
|
33
|
+
const connectedNodes = new Set();
|
|
34
|
+
for (const edge of graph.edges) {
|
|
35
|
+
connectedNodes.add(edge.from);
|
|
36
|
+
connectedNodes.add(edge.to);
|
|
37
|
+
}
|
|
38
|
+
for (const id of allNodeIds) {
|
|
39
|
+
if (id === 'product')
|
|
40
|
+
continue;
|
|
41
|
+
// Module nodes are connected via 'contains' edges automatically
|
|
42
|
+
if (graph.modules.some((m) => m.id === id))
|
|
43
|
+
continue;
|
|
44
|
+
if (!connectedNodes.has(id)) {
|
|
45
|
+
findings.push({
|
|
46
|
+
reviewer: 'codeQuality',
|
|
47
|
+
severity: 'warning',
|
|
48
|
+
category: 'orphan_node',
|
|
49
|
+
nodeId: id,
|
|
50
|
+
message: `Node "${id}" has no edges — it may be orphaned`,
|
|
51
|
+
suggestion: 'Verify this node is intentionally disconnected or add relationships',
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Check: duplicate edge detection
|
|
56
|
+
const edgeSet = new Set();
|
|
57
|
+
for (const edge of graph.edges) {
|
|
58
|
+
const key = `${edge.from}|${edge.to}|${edge.kind}`;
|
|
59
|
+
if (edgeSet.has(key)) {
|
|
60
|
+
findings.push({
|
|
61
|
+
reviewer: 'codeQuality',
|
|
62
|
+
severity: 'warning',
|
|
63
|
+
category: 'duplicate_edge',
|
|
64
|
+
message: `Duplicate edge: ${edge.from} -> ${edge.to} (${edge.kind})`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
edgeSet.add(key);
|
|
68
|
+
}
|
|
69
|
+
return findings;
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=code-quality.js.map
|