@planu/cli 0.63.6 → 0.64.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/dist/config/license-plans.json +16 -1
- package/dist/engine/a2a/capability-card.d.ts +16 -0
- package/dist/engine/a2a/capability-card.d.ts.map +1 -0
- package/dist/engine/a2a/capability-card.js +69 -0
- package/dist/engine/a2a/capability-card.js.map +1 -0
- package/dist/engine/a2a/delegate.d.ts +15 -0
- package/dist/engine/a2a/delegate.d.ts.map +1 -0
- package/dist/engine/a2a/delegate.js +47 -0
- package/dist/engine/a2a/delegate.js.map +1 -0
- package/dist/engine/a2a/fallback.d.ts +12 -0
- package/dist/engine/a2a/fallback.d.ts.map +1 -0
- package/dist/engine/a2a/fallback.js +52 -0
- package/dist/engine/a2a/fallback.js.map +1 -0
- package/dist/engine/a2a/index.d.ts +5 -0
- package/dist/engine/a2a/index.d.ts.map +1 -0
- package/dist/engine/a2a/index.js +6 -0
- package/dist/engine/a2a/index.js.map +1 -0
- package/dist/engine/a2a/task-manager.d.ts +39 -0
- package/dist/engine/a2a/task-manager.d.ts.map +1 -0
- package/dist/engine/a2a/task-manager.js +84 -0
- package/dist/engine/a2a/task-manager.js.map +1 -0
- package/dist/engine/ac-gap-detector/analyze-gaps.d.ts +13 -0
- package/dist/engine/ac-gap-detector/analyze-gaps.d.ts.map +1 -0
- package/dist/engine/ac-gap-detector/analyze-gaps.js +43 -0
- package/dist/engine/ac-gap-detector/analyze-gaps.js.map +1 -0
- package/dist/engine/ac-gap-detector/constants.d.ts +22 -0
- package/dist/engine/ac-gap-detector/constants.d.ts.map +1 -0
- package/dist/engine/ac-gap-detector/constants.js +143 -0
- package/dist/engine/ac-gap-detector/constants.js.map +1 -0
- package/dist/engine/ac-gap-detector/gap-rules.d.ts +16 -0
- package/dist/engine/ac-gap-detector/gap-rules.d.ts.map +1 -0
- package/dist/engine/ac-gap-detector/gap-rules.js +180 -0
- package/dist/engine/ac-gap-detector/gap-rules.js.map +1 -0
- package/dist/engine/ac-gap-detector/pattern-matcher.d.ts +16 -0
- package/dist/engine/ac-gap-detector/pattern-matcher.d.ts.map +1 -0
- package/dist/engine/ac-gap-detector/pattern-matcher.js +62 -0
- package/dist/engine/ac-gap-detector/pattern-matcher.js.map +1 -0
- package/dist/engine/ac-gap-detector.d.ts +3 -0
- package/dist/engine/ac-gap-detector.d.ts.map +1 -0
- package/dist/engine/ac-gap-detector.js +5 -0
- package/dist/engine/ac-gap-detector.js.map +1 -0
- package/dist/engine/analyzer/analyze-project.js +1 -1
- package/dist/engine/analyzer/analyze-project.js.map +1 -1
- package/dist/engine/analyzer/completeness-checker.js +1 -1
- package/dist/engine/analyzer/completeness-checker.js.map +1 -1
- package/dist/engine/analyzer/detectors.js +2 -2
- package/dist/engine/analyzer/detectors.js.map +1 -1
- package/dist/engine/audit-trail/attestation.d.ts +11 -0
- package/dist/engine/audit-trail/attestation.d.ts.map +1 -0
- package/dist/engine/audit-trail/attestation.js +47 -0
- package/dist/engine/audit-trail/attestation.js.map +1 -0
- package/dist/engine/audit-trail/index.d.ts +6 -0
- package/dist/engine/audit-trail/index.d.ts.map +1 -0
- package/dist/engine/audit-trail/index.js +6 -0
- package/dist/engine/audit-trail/index.js.map +1 -0
- package/dist/engine/audit-trail/logger.d.ts +17 -0
- package/dist/engine/audit-trail/logger.d.ts.map +1 -0
- package/dist/engine/audit-trail/logger.js +78 -0
- package/dist/engine/audit-trail/logger.js.map +1 -0
- package/dist/engine/audit-trail/query.d.ts +7 -0
- package/dist/engine/audit-trail/query.d.ts.map +1 -0
- package/dist/engine/audit-trail/query.js +61 -0
- package/dist/engine/audit-trail/query.js.map +1 -0
- package/dist/engine/audit-trail/utils.d.ts +18 -0
- package/dist/engine/audit-trail/utils.d.ts.map +1 -0
- package/dist/engine/audit-trail/utils.js +44 -0
- package/dist/engine/audit-trail/utils.js.map +1 -0
- package/dist/engine/audit-trail/verifier.d.ts +10 -0
- package/dist/engine/audit-trail/verifier.d.ts.map +1 -0
- package/dist/engine/audit-trail/verifier.js +78 -0
- package/dist/engine/audit-trail/verifier.js.map +1 -0
- package/dist/engine/auth/config.d.ts +20 -0
- package/dist/engine/auth/config.d.ts.map +1 -0
- package/dist/engine/auth/config.js +49 -0
- package/dist/engine/auth/config.js.map +1 -0
- package/dist/engine/auth/index.d.ts +6 -0
- package/dist/engine/auth/index.d.ts.map +1 -0
- package/dist/engine/auth/index.js +7 -0
- package/dist/engine/auth/index.js.map +1 -0
- package/dist/engine/auth/middleware.d.ts +19 -0
- package/dist/engine/auth/middleware.d.ts.map +1 -0
- package/dist/engine/auth/middleware.js +64 -0
- package/dist/engine/auth/middleware.js.map +1 -0
- package/dist/engine/auth/pkce.d.ts +17 -0
- package/dist/engine/auth/pkce.d.ts.map +1 -0
- package/dist/engine/auth/pkce.js +33 -0
- package/dist/engine/auth/pkce.js.map +1 -0
- package/dist/engine/auth/scope-mapper.d.ts +21 -0
- package/dist/engine/auth/scope-mapper.d.ts.map +1 -0
- package/dist/engine/auth/scope-mapper.js +124 -0
- package/dist/engine/auth/scope-mapper.js.map +1 -0
- package/dist/engine/auth/token-validator.d.ts +15 -0
- package/dist/engine/auth/token-validator.d.ts.map +1 -0
- package/dist/engine/auth/token-validator.js +121 -0
- package/dist/engine/auth/token-validator.js.map +1 -0
- package/dist/engine/ci-generator/index.d.ts.map +1 -1
- package/dist/engine/ci-generator/index.js +8 -2
- package/dist/engine/ci-generator/index.js.map +1 -1
- package/dist/engine/ci-generator/yaml-builder.d.ts +7 -2
- package/dist/engine/ci-generator/yaml-builder.d.ts.map +1 -1
- package/dist/engine/ci-generator/yaml-builder.js +49 -1
- package/dist/engine/ci-generator/yaml-builder.js.map +1 -1
- package/dist/engine/code-transforms/typescript/ast-utils.js +1 -1
- package/dist/engine/code-transforms/typescript/ast-utils.js.map +1 -1
- package/dist/engine/design-to-spec/ac-generator.d.ts +21 -0
- package/dist/engine/design-to-spec/ac-generator.d.ts.map +1 -0
- package/dist/engine/design-to-spec/ac-generator.js +185 -0
- package/dist/engine/design-to-spec/ac-generator.js.map +1 -0
- package/dist/engine/design-to-spec/index.d.ts +11 -0
- package/dist/engine/design-to-spec/index.d.ts.map +1 -0
- package/dist/engine/design-to-spec/index.js +19 -0
- package/dist/engine/design-to-spec/index.js.map +1 -0
- package/dist/engine/design-to-spec/parser.d.ts +7 -0
- package/dist/engine/design-to-spec/parser.d.ts.map +1 -0
- package/dist/engine/design-to-spec/parser.js +290 -0
- package/dist/engine/design-to-spec/parser.js.map +1 -0
- package/dist/engine/design-to-spec/spec-builder.d.ts +12 -0
- package/dist/engine/design-to-spec/spec-builder.d.ts.map +1 -0
- package/dist/engine/design-to-spec/spec-builder.js +148 -0
- package/dist/engine/design-to-spec/spec-builder.js.map +1 -0
- package/dist/engine/design-to-spec/ui-contract-builder.d.ts +17 -0
- package/dist/engine/design-to-spec/ui-contract-builder.d.ts.map +1 -0
- package/dist/engine/design-to-spec/ui-contract-builder.js +175 -0
- package/dist/engine/design-to-spec/ui-contract-builder.js.map +1 -0
- package/dist/engine/detectors/css-framework-detector.js +9 -9
- package/dist/engine/detectors/css-framework-detector.js.map +1 -1
- package/dist/engine/detectors/mcp-server-detector.js +2 -2
- package/dist/engine/detectors/mcp-server-detector.js.map +1 -1
- package/dist/engine/docs-site-generator/markdown-renderer.js +1 -1
- package/dist/engine/docs-site-generator/markdown-renderer.js.map +1 -1
- package/dist/engine/elicitation/builder.d.ts +37 -0
- package/dist/engine/elicitation/builder.d.ts.map +1 -0
- package/dist/engine/elicitation/builder.js +115 -0
- package/dist/engine/elicitation/builder.js.map +1 -0
- package/dist/engine/elicitation/fallback.d.ts +20 -0
- package/dist/engine/elicitation/fallback.d.ts.map +1 -0
- package/dist/engine/elicitation/fallback.js +72 -0
- package/dist/engine/elicitation/fallback.js.map +1 -0
- package/dist/engine/elicitation/index.d.ts +4 -0
- package/dist/engine/elicitation/index.d.ts.map +1 -0
- package/dist/engine/elicitation/index.js +5 -0
- package/dist/engine/elicitation/index.js.map +1 -0
- package/dist/engine/elicitation/response-parser.d.ts +9 -0
- package/dist/engine/elicitation/response-parser.d.ts.map +1 -0
- package/dist/engine/elicitation/response-parser.js +163 -0
- package/dist/engine/elicitation/response-parser.js.map +1 -0
- package/dist/engine/federation/cross-repo-resolver.d.ts +21 -0
- package/dist/engine/federation/cross-repo-resolver.d.ts.map +1 -0
- package/dist/engine/federation/cross-repo-resolver.js +75 -0
- package/dist/engine/federation/cross-repo-resolver.js.map +1 -0
- package/dist/engine/federation/drift-checker.d.ts +19 -0
- package/dist/engine/federation/drift-checker.d.ts.map +1 -0
- package/dist/engine/federation/drift-checker.js +114 -0
- package/dist/engine/federation/drift-checker.js.map +1 -0
- package/dist/engine/federation/federation-store.d.ts +25 -0
- package/dist/engine/federation/federation-store.d.ts.map +1 -0
- package/dist/engine/federation/federation-store.js +58 -0
- package/dist/engine/federation/federation-store.js.map +1 -0
- package/dist/engine/federation/index.d.ts +4 -0
- package/dist/engine/federation/index.d.ts.map +1 -0
- package/dist/engine/federation/index.js +5 -0
- package/dist/engine/federation/index.js.map +1 -0
- package/dist/engine/github/spec-ac-analyzer.d.ts +40 -0
- package/dist/engine/github/spec-ac-analyzer.d.ts.map +1 -0
- package/dist/engine/github/spec-ac-analyzer.js +181 -0
- package/dist/engine/github/spec-ac-analyzer.js.map +1 -0
- package/dist/engine/hooks/handlers/on-impl-change.d.ts +3 -1
- package/dist/engine/hooks/handlers/on-impl-change.d.ts.map +1 -1
- package/dist/engine/hooks/handlers/on-impl-change.js +25 -1
- package/dist/engine/hooks/handlers/on-impl-change.js.map +1 -1
- package/dist/engine/infrastructure/component-mapper.d.ts +9 -0
- package/dist/engine/infrastructure/component-mapper.d.ts.map +1 -0
- package/dist/engine/infrastructure/component-mapper.js +162 -0
- package/dist/engine/infrastructure/component-mapper.js.map +1 -0
- package/dist/engine/infrastructure/cost-estimator.d.ts +6 -0
- package/dist/engine/infrastructure/cost-estimator.d.ts.map +1 -0
- package/dist/engine/infrastructure/cost-estimator.js +48 -0
- package/dist/engine/infrastructure/cost-estimator.js.map +1 -0
- package/dist/engine/infrastructure/docker-compose-generator.d.ts +6 -0
- package/dist/engine/infrastructure/docker-compose-generator.d.ts.map +1 -0
- package/dist/engine/infrastructure/docker-compose-generator.js +201 -0
- package/dist/engine/infrastructure/docker-compose-generator.js.map +1 -0
- package/dist/engine/infrastructure/index.d.ts +15 -0
- package/dist/engine/infrastructure/index.d.ts.map +1 -0
- package/dist/engine/infrastructure/index.js +67 -0
- package/dist/engine/infrastructure/index.js.map +1 -0
- package/dist/engine/infrastructure/kubernetes-generator.d.ts +6 -0
- package/dist/engine/infrastructure/kubernetes-generator.d.ts.map +1 -0
- package/dist/engine/infrastructure/kubernetes-generator.js +141 -0
- package/dist/engine/infrastructure/kubernetes-generator.js.map +1 -0
- package/dist/engine/infrastructure/railway-generator.d.ts +6 -0
- package/dist/engine/infrastructure/railway-generator.d.ts.map +1 -0
- package/dist/engine/infrastructure/railway-generator.js +87 -0
- package/dist/engine/infrastructure/railway-generator.js.map +1 -0
- package/dist/engine/infrastructure/signal-detector.d.ts +7 -0
- package/dist/engine/infrastructure/signal-detector.d.ts.map +1 -0
- package/dist/engine/infrastructure/signal-detector.js +174 -0
- package/dist/engine/infrastructure/signal-detector.js.map +1 -0
- package/dist/engine/infrastructure/terraform-generator.d.ts +6 -0
- package/dist/engine/infrastructure/terraform-generator.d.ts.map +1 -0
- package/dist/engine/infrastructure/terraform-generator.js +241 -0
- package/dist/engine/infrastructure/terraform-generator.js.map +1 -0
- package/dist/engine/legal-compliance/detector.js +1 -1
- package/dist/engine/legal-compliance/detector.js.map +1 -1
- package/dist/engine/living-spec/annotation-parser.d.ts.map +1 -1
- package/dist/engine/living-spec/annotation-parser.js.map +1 -1
- package/dist/engine/living-spec/auto-updater.d.ts +58 -0
- package/dist/engine/living-spec/auto-updater.d.ts.map +1 -0
- package/dist/engine/living-spec/auto-updater.js +311 -0
- package/dist/engine/living-spec/auto-updater.js.map +1 -0
- package/dist/engine/living-spec/bidirectional-sync.d.ts +10 -0
- package/dist/engine/living-spec/bidirectional-sync.d.ts.map +1 -1
- package/dist/engine/living-spec/bidirectional-sync.js +11 -3
- package/dist/engine/living-spec/bidirectional-sync.js.map +1 -1
- package/dist/engine/living-spec/conflict-resolver.d.ts +46 -0
- package/dist/engine/living-spec/conflict-resolver.d.ts.map +1 -0
- package/dist/engine/living-spec/conflict-resolver.js +301 -0
- package/dist/engine/living-spec/conflict-resolver.js.map +1 -0
- package/dist/engine/living-spec/hash-tracker.d.ts.map +1 -1
- package/dist/engine/living-spec/hash-tracker.js.map +1 -1
- package/dist/engine/living-spec/index.d.ts +1 -0
- package/dist/engine/living-spec/index.d.ts.map +1 -1
- package/dist/engine/living-spec/index.js +1 -0
- package/dist/engine/living-spec/index.js.map +1 -1
- package/dist/engine/living-spec/signature-tracker.d.ts.map +1 -1
- package/dist/engine/living-spec/signature-tracker.js.map +1 -1
- package/dist/engine/observability/config.d.ts +16 -0
- package/dist/engine/observability/config.d.ts.map +1 -0
- package/dist/engine/observability/config.js +44 -0
- package/dist/engine/observability/config.js.map +1 -0
- package/dist/engine/observability/index.d.ts +7 -0
- package/dist/engine/observability/index.d.ts.map +1 -0
- package/dist/engine/observability/index.js +8 -0
- package/dist/engine/observability/index.js.map +1 -0
- package/dist/engine/observability/metrics.d.ts +12 -0
- package/dist/engine/observability/metrics.d.ts.map +1 -0
- package/dist/engine/observability/metrics.js +61 -0
- package/dist/engine/observability/metrics.js.map +1 -0
- package/dist/engine/observability/noop-tracer.d.ts +13 -0
- package/dist/engine/observability/noop-tracer.d.ts.map +1 -0
- package/dist/engine/observability/noop-tracer.js +41 -0
- package/dist/engine/observability/noop-tracer.js.map +1 -0
- package/dist/engine/observability/otel-tracer.d.ts +19 -0
- package/dist/engine/observability/otel-tracer.d.ts.map +1 -0
- package/dist/engine/observability/otel-tracer.js +134 -0
- package/dist/engine/observability/otel-tracer.js.map +1 -0
- package/dist/engine/observability/span-helpers.d.ts +28 -0
- package/dist/engine/observability/span-helpers.d.ts.map +1 -0
- package/dist/engine/observability/span-helpers.js +68 -0
- package/dist/engine/observability/span-helpers.js.map +1 -0
- package/dist/engine/observability/tracer.d.ts +26 -0
- package/dist/engine/observability/tracer.d.ts.map +1 -0
- package/dist/engine/observability/tracer.js +45 -0
- package/dist/engine/observability/tracer.js.map +1 -0
- package/dist/engine/rbac/index.d.ts +3 -0
- package/dist/engine/rbac/index.d.ts.map +1 -0
- package/dist/engine/rbac/index.js +4 -0
- package/dist/engine/rbac/index.js.map +1 -0
- package/dist/engine/rbac/permission-checker.d.ts +21 -0
- package/dist/engine/rbac/permission-checker.d.ts.map +1 -0
- package/dist/engine/rbac/permission-checker.js +74 -0
- package/dist/engine/rbac/permission-checker.js.map +1 -0
- package/dist/engine/rbac/roles.d.ts +12 -0
- package/dist/engine/rbac/roles.d.ts.map +1 -0
- package/dist/engine/rbac/roles.js +37 -0
- package/dist/engine/rbac/roles.js.map +1 -0
- package/dist/engine/shared/ac-extractor.d.ts +9 -0
- package/dist/engine/shared/ac-extractor.d.ts.map +1 -0
- package/dist/engine/shared/ac-extractor.js +36 -0
- package/dist/engine/shared/ac-extractor.js.map +1 -0
- package/dist/engine/shared/line-diff.d.ts +11 -0
- package/dist/engine/shared/line-diff.d.ts.map +1 -0
- package/dist/engine/shared/line-diff.js +32 -0
- package/dist/engine/shared/line-diff.js.map +1 -0
- package/dist/engine/skill-generator/sections-platform.d.ts.map +1 -1
- package/dist/engine/skill-generator/sections-platform.js +13 -37
- package/dist/engine/skill-generator/sections-platform.js.map +1 -1
- package/dist/engine/skill-registry/agentskill-adapter.d.ts +1 -2
- package/dist/engine/skill-registry/agentskill-adapter.d.ts.map +1 -1
- package/dist/engine/skill-registry/agentskill-adapter.js +1 -2
- package/dist/engine/skill-registry/agentskill-adapter.js.map +1 -1
- package/dist/engine/source-resolver.d.ts +1 -1
- package/dist/engine/source-resolver.d.ts.map +1 -1
- package/dist/engine/source-resolver.js +3 -2
- package/dist/engine/source-resolver.js.map +1 -1
- package/dist/engine/spec-decomposer/analyzer.d.ts +18 -0
- package/dist/engine/spec-decomposer/analyzer.d.ts.map +1 -0
- package/dist/engine/spec-decomposer/analyzer.js +263 -0
- package/dist/engine/spec-decomposer/analyzer.js.map +1 -0
- package/dist/engine/spec-decomposer/file-mapper.d.ts +17 -0
- package/dist/engine/spec-decomposer/file-mapper.d.ts.map +1 -0
- package/dist/engine/spec-decomposer/file-mapper.js +96 -0
- package/dist/engine/spec-decomposer/file-mapper.js.map +1 -0
- package/dist/engine/spec-decomposer/index.d.ts +14 -0
- package/dist/engine/spec-decomposer/index.d.ts.map +1 -0
- package/dist/engine/spec-decomposer/index.js +50 -0
- package/dist/engine/spec-decomposer/index.js.map +1 -0
- package/dist/engine/spec-decomposer/ownership-resolver.d.ts +7 -0
- package/dist/engine/spec-decomposer/ownership-resolver.d.ts.map +1 -0
- package/dist/engine/spec-decomposer/ownership-resolver.js +169 -0
- package/dist/engine/spec-decomposer/ownership-resolver.js.map +1 -0
- package/dist/engine/spec-observability/index.d.ts +4 -0
- package/dist/engine/spec-observability/index.d.ts.map +1 -0
- package/dist/engine/spec-observability/index.js +4 -0
- package/dist/engine/spec-observability/index.js.map +1 -0
- package/dist/engine/spec-observability/metrics.d.ts +8 -0
- package/dist/engine/spec-observability/metrics.d.ts.map +1 -0
- package/dist/engine/spec-observability/metrics.js +116 -0
- package/dist/engine/spec-observability/metrics.js.map +1 -0
- package/dist/engine/spec-observability/tracker.d.ts +22 -0
- package/dist/engine/spec-observability/tracker.d.ts.map +1 -0
- package/dist/engine/spec-observability/tracker.js +77 -0
- package/dist/engine/spec-observability/tracker.js.map +1 -0
- package/dist/engine/spec-reader.d.ts +7 -0
- package/dist/engine/spec-reader.d.ts.map +1 -0
- package/dist/engine/spec-reader.js +23 -0
- package/dist/engine/spec-reader.js.map +1 -0
- package/dist/engine/spec-repair.d.ts +10 -0
- package/dist/engine/spec-repair.d.ts.map +1 -0
- package/dist/engine/spec-repair.js +388 -0
- package/dist/engine/spec-repair.js.map +1 -0
- package/dist/engine/spec-summary-html.js +2 -2
- package/dist/engine/spec-versioning/brancher.d.ts +17 -0
- package/dist/engine/spec-versioning/brancher.d.ts.map +1 -0
- package/dist/engine/spec-versioning/brancher.js +113 -0
- package/dist/engine/spec-versioning/brancher.js.map +1 -0
- package/dist/engine/spec-versioning/differ.d.ts +19 -0
- package/dist/engine/spec-versioning/differ.d.ts.map +1 -0
- package/dist/engine/spec-versioning/differ.js +151 -0
- package/dist/engine/spec-versioning/differ.js.map +1 -0
- package/dist/engine/spec-versioning/index.d.ts +5 -0
- package/dist/engine/spec-versioning/index.d.ts.map +1 -0
- package/dist/engine/spec-versioning/index.js +6 -0
- package/dist/engine/spec-versioning/index.js.map +1 -0
- package/dist/engine/spec-versioning/merger.d.ts +18 -0
- package/dist/engine/spec-versioning/merger.d.ts.map +1 -0
- package/dist/engine/spec-versioning/merger.js +113 -0
- package/dist/engine/spec-versioning/merger.js.map +1 -0
- package/dist/engine/spec-versioning/version-store.d.ts +18 -0
- package/dist/engine/spec-versioning/version-store.d.ts.map +1 -0
- package/dist/engine/spec-versioning/version-store.js +96 -0
- package/dist/engine/spec-versioning/version-store.js.map +1 -0
- package/dist/engine/web-fetcher/stack-advisor.d.ts.map +1 -1
- package/dist/engine/web-fetcher/stack-advisor.js +5 -6
- package/dist/engine/web-fetcher/stack-advisor.js.map +1 -1
- package/dist/engine/well-known/discovery.d.ts +7 -0
- package/dist/engine/well-known/discovery.d.ts.map +1 -0
- package/dist/engine/well-known/discovery.js +109 -0
- package/dist/engine/well-known/discovery.js.map +1 -0
- package/dist/engine/well-known/index.d.ts +6 -0
- package/dist/engine/well-known/index.d.ts.map +1 -0
- package/dist/engine/well-known/index.js +5 -0
- package/dist/engine/well-known/index.js.map +1 -0
- package/dist/engine/well-known/manifest-generator.d.ts +7 -0
- package/dist/engine/well-known/manifest-generator.d.ts.map +1 -0
- package/dist/engine/well-known/manifest-generator.js +60 -0
- package/dist/engine/well-known/manifest-generator.js.map +1 -0
- package/dist/engine/well-known/manifest-schema.d.ts +92 -0
- package/dist/engine/well-known/manifest-schema.d.ts.map +1 -0
- package/dist/engine/well-known/manifest-schema.js +70 -0
- package/dist/engine/well-known/manifest-schema.js.map +1 -0
- package/dist/resources/spec-granular.d.ts +33 -0
- package/dist/resources/spec-granular.d.ts.map +1 -0
- package/dist/resources/spec-granular.js +299 -0
- package/dist/resources/spec-granular.js.map +1 -0
- package/dist/storage/federation-store.d.ts +29 -0
- package/dist/storage/federation-store.d.ts.map +1 -0
- package/dist/storage/federation-store.js +111 -0
- package/dist/storage/federation-store.js.map +1 -0
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +3 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/rbac-store.d.ts +8 -0
- package/dist/storage/rbac-store.d.ts.map +1 -0
- package/dist/storage/rbac-store.js +75 -0
- package/dist/storage/rbac-store.js.map +1 -0
- package/dist/storage/spec-observability-store.d.ts +16 -0
- package/dist/storage/spec-observability-store.d.ts.map +1 -0
- package/dist/storage/spec-observability-store.js +55 -0
- package/dist/storage/spec-observability-store.js.map +1 -0
- package/dist/tools/a2a-handler.d.ts +14 -0
- package/dist/tools/a2a-handler.d.ts.map +1 -0
- package/dist/tools/a2a-handler.js +100 -0
- package/dist/tools/a2a-handler.js.map +1 -0
- package/dist/tools/assign-role-handler.d.ts +3 -0
- package/dist/tools/assign-role-handler.d.ts.map +1 -0
- package/dist/tools/assign-role-handler.js +25 -0
- package/dist/tools/assign-role-handler.js.map +1 -0
- package/dist/tools/audit-trail-handler.d.ts +4 -0
- package/dist/tools/audit-trail-handler.d.ts.map +1 -0
- package/dist/tools/audit-trail-handler.js +91 -0
- package/dist/tools/audit-trail-handler.js.map +1 -0
- package/dist/tools/audit.js +2 -2
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/auto-update-spec.d.ts +3 -0
- package/dist/tools/auto-update-spec.d.ts.map +1 -0
- package/dist/tools/auto-update-spec.js +43 -0
- package/dist/tools/auto-update-spec.js.map +1 -0
- package/dist/tools/branch-spec.d.ts +3 -0
- package/dist/tools/branch-spec.d.ts.map +1 -0
- package/dist/tools/branch-spec.js +68 -0
- package/dist/tools/branch-spec.js.map +1 -0
- package/dist/tools/challenge-spec/platform-challenge-scenarios-b.js +1 -1
- package/dist/tools/challenge-spec/platform-challenge-scenarios-b.js.map +1 -1
- package/dist/tools/challenge-spec/platform-challenge-scenarios.js +1 -1
- package/dist/tools/challenge-spec/platform-challenge-scenarios.js.map +1 -1
- package/dist/tools/configure-auth-handler.d.ts +15 -0
- package/dist/tools/configure-auth-handler.d.ts.map +1 -0
- package/dist/tools/configure-auth-handler.js +113 -0
- package/dist/tools/configure-auth-handler.js.map +1 -0
- package/dist/tools/configure-observability.d.ts +14 -0
- package/dist/tools/configure-observability.d.ts.map +1 -0
- package/dist/tools/configure-observability.js +96 -0
- package/dist/tools/configure-observability.js.map +1 -0
- package/dist/tools/configure-roles-handler.d.ts +4 -0
- package/dist/tools/configure-roles-handler.d.ts.map +1 -0
- package/dist/tools/configure-roles-handler.js +36 -0
- package/dist/tools/configure-roles-handler.js.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/architecture-adapter.d.ts +7 -0
- package/dist/tools/create-spec-hu/ac-adapters/architecture-adapter.d.ts.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/architecture-adapter.js +114 -0
- package/dist/tools/create-spec-hu/ac-adapters/architecture-adapter.js.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/database-adapter.d.ts +7 -0
- package/dist/tools/create-spec-hu/ac-adapters/database-adapter.d.ts.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/database-adapter.js +48 -0
- package/dist/tools/create-spec-hu/ac-adapters/database-adapter.js.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/index.d.ts +14 -0
- package/dist/tools/create-spec-hu/ac-adapters/index.d.ts.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/index.js +28 -0
- package/dist/tools/create-spec-hu/ac-adapters/index.js.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/stack-adapter.d.ts +7 -0
- package/dist/tools/create-spec-hu/ac-adapters/stack-adapter.d.ts.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/stack-adapter.js +99 -0
- package/dist/tools/create-spec-hu/ac-adapters/stack-adapter.js.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/testing-adapter.d.ts +7 -0
- package/dist/tools/create-spec-hu/ac-adapters/testing-adapter.d.ts.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/testing-adapter.js +62 -0
- package/dist/tools/create-spec-hu/ac-adapters/testing-adapter.js.map +1 -0
- package/dist/tools/create-spec-hu/ai-testing-governance-adapter.js +4 -4
- package/dist/tools/create-spec-hu/ai-testing-governance-adapter.js.map +1 -1
- package/dist/tools/create-spec-hu/hu-body-generators.d.ts.map +1 -1
- package/dist/tools/create-spec-hu/hu-body-generators.js +41 -19
- package/dist/tools/create-spec-hu/hu-body-generators.js.map +1 -1
- package/dist/tools/create-spec-hu/llm-security-hu-adapter.js +1 -1
- package/dist/tools/create-spec-hu/llm-security-hu-adapter.js.map +1 -1
- package/dist/tools/create-spec-hu/quality-helpers.d.ts.map +1 -1
- package/dist/tools/create-spec-hu/quality-helpers.js +2 -3
- package/dist/tools/create-spec-hu/quality-helpers.js.map +1 -1
- package/dist/tools/create-spec-hu/swift-android-hu-adapter.js +1 -1
- package/dist/tools/create-spec-hu/swift-android-hu-adapter.js.map +1 -1
- package/dist/tools/create-spec-tech/ficha-content.d.ts.map +1 -1
- package/dist/tools/create-spec-tech/ficha-content.js +236 -6
- package/dist/tools/create-spec-tech/ficha-content.js.map +1 -1
- package/dist/tools/decompose-spec.d.ts +7 -0
- package/dist/tools/decompose-spec.d.ts.map +1 -0
- package/dist/tools/decompose-spec.js +49 -0
- package/dist/tools/decompose-spec.js.map +1 -0
- package/dist/tools/design-to-spec.d.ts +12 -0
- package/dist/tools/design-to-spec.d.ts.map +1 -0
- package/dist/tools/design-to-spec.js +73 -0
- package/dist/tools/design-to-spec.js.map +1 -0
- package/dist/tools/detect-ac-gaps.d.ts +7 -0
- package/dist/tools/detect-ac-gaps.d.ts.map +1 -0
- package/dist/tools/detect-ac-gaps.js +63 -0
- package/dist/tools/detect-ac-gaps.js.map +1 -0
- package/dist/tools/discover-registry.d.ts +8 -0
- package/dist/tools/discover-registry.d.ts.map +1 -0
- package/dist/tools/discover-registry.js +79 -0
- package/dist/tools/discover-registry.js.map +1 -0
- package/dist/tools/federate-specs.d.ts +6 -0
- package/dist/tools/federate-specs.d.ts.map +1 -0
- package/dist/tools/federate-specs.js +41 -0
- package/dist/tools/federate-specs.js.map +1 -0
- package/dist/tools/federation-status.d.ts +6 -0
- package/dist/tools/federation-status.d.ts.map +1 -0
- package/dist/tools/federation-status.js +56 -0
- package/dist/tools/federation-status.js.map +1 -0
- package/dist/tools/generate-annotations.d.ts.map +1 -1
- package/dist/tools/generate-annotations.js +3 -1
- package/dist/tools/generate-annotations.js.map +1 -1
- package/dist/tools/generate-docs/agent-docs-generator.js +1 -1
- package/dist/tools/generate-docs/agent-docs-generator.js.map +1 -1
- package/dist/tools/generate-infrastructure.d.ts +3 -0
- package/dist/tools/generate-infrastructure.d.ts.map +1 -0
- package/dist/tools/generate-infrastructure.js +60 -0
- package/dist/tools/generate-infrastructure.js.map +1 -0
- package/dist/tools/generate-tests/generators/advanced-testing-generator.d.ts.map +1 -1
- package/dist/tools/generate-tests/generators/advanced-testing-generator.js +5 -4
- package/dist/tools/generate-tests/generators/advanced-testing-generator.js.map +1 -1
- package/dist/tools/merge-spec-branch.d.ts +3 -0
- package/dist/tools/merge-spec-branch.d.ts.map +1 -0
- package/dist/tools/merge-spec-branch.js +103 -0
- package/dist/tools/merge-spec-branch.js.map +1 -0
- package/dist/tools/publish-registry.d.ts +8 -0
- package/dist/tools/publish-registry.d.ts.map +1 -0
- package/dist/tools/publish-registry.js +76 -0
- package/dist/tools/publish-registry.js.map +1 -0
- package/dist/tools/register-a2a-tools.d.ts +3 -0
- package/dist/tools/register-a2a-tools.d.ts.map +1 -0
- package/dist/tools/register-a2a-tools.js +66 -0
- package/dist/tools/register-a2a-tools.js.map +1 -0
- package/dist/tools/register-audit-trail-tools.d.ts +3 -0
- package/dist/tools/register-audit-trail-tools.d.ts.map +1 -0
- package/dist/tools/register-audit-trail-tools.js +62 -0
- package/dist/tools/register-audit-trail-tools.js.map +1 -0
- package/dist/tools/register-decompose-tools.d.ts +3 -0
- package/dist/tools/register-decompose-tools.d.ts.map +1 -0
- package/dist/tools/register-decompose-tools.js +31 -0
- package/dist/tools/register-decompose-tools.js.map +1 -0
- package/dist/tools/register-federation-tools.d.ts +6 -0
- package/dist/tools/register-federation-tools.d.ts.map +1 -0
- package/dist/tools/register-federation-tools.js +48 -0
- package/dist/tools/register-federation-tools.js.map +1 -0
- package/dist/tools/register-infrastructure-tools.d.ts +3 -0
- package/dist/tools/register-infrastructure-tools.d.ts.map +1 -0
- package/dist/tools/register-infrastructure-tools.js +34 -0
- package/dist/tools/register-infrastructure-tools.js.map +1 -0
- package/dist/tools/register-living-spec-tools.d.ts.map +1 -1
- package/dist/tools/register-living-spec-tools.js +2 -8
- package/dist/tools/register-living-spec-tools.js.map +1 -1
- package/dist/tools/register-observability-tools.d.ts +3 -0
- package/dist/tools/register-observability-tools.d.ts.map +1 -0
- package/dist/tools/register-observability-tools.js +48 -0
- package/dist/tools/register-observability-tools.js.map +1 -0
- package/dist/tools/register-rbac-tools.d.ts +3 -0
- package/dist/tools/register-rbac-tools.d.ts.map +1 -0
- package/dist/tools/register-rbac-tools.js +36 -0
- package/dist/tools/register-rbac-tools.js.map +1 -0
- package/dist/tools/register-spec-observability-tools.d.ts +3 -0
- package/dist/tools/register-spec-observability-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-observability-tools.js +24 -0
- package/dist/tools/register-spec-observability-tools.js.map +1 -0
- package/dist/tools/register-versioning-tools.d.ts +3 -0
- package/dist/tools/register-versioning-tools.d.ts.map +1 -0
- package/dist/tools/register-versioning-tools.js +93 -0
- package/dist/tools/register-versioning-tools.js.map +1 -0
- package/dist/tools/register-well-known-tools.d.ts +3 -0
- package/dist/tools/register-well-known-tools.d.ts.map +1 -0
- package/dist/tools/register-well-known-tools.js +36 -0
- package/dist/tools/register-well-known-tools.js.map +1 -0
- package/dist/tools/repair-spec.d.ts +9 -0
- package/dist/tools/repair-spec.d.ts.map +1 -0
- package/dist/tools/repair-spec.js +93 -0
- package/dist/tools/repair-spec.js.map +1 -0
- package/dist/tools/resolve-spec-conflict.d.ts +7 -0
- package/dist/tools/resolve-spec-conflict.d.ts.map +1 -0
- package/dist/tools/resolve-spec-conflict.js +63 -0
- package/dist/tools/resolve-spec-conflict.js.map +1 -0
- package/dist/tools/response-helpers.d.ts +42 -0
- package/dist/tools/response-helpers.d.ts.map +1 -1
- package/dist/tools/response-helpers.js +29 -0
- package/dist/tools/response-helpers.js.map +1 -1
- package/dist/tools/schemas/auth-schema.d.ts +12 -0
- package/dist/tools/schemas/auth-schema.d.ts.map +1 -0
- package/dist/tools/schemas/auth-schema.js +38 -0
- package/dist/tools/schemas/auth-schema.js.map +1 -0
- package/dist/tools/schemas/rbac.d.ts +26 -0
- package/dist/tools/schemas/rbac.d.ts.map +1 -0
- package/dist/tools/schemas/rbac.js +25 -0
- package/dist/tools/schemas/rbac.js.map +1 -0
- package/dist/tools/schemas/well-known.d.ts +12 -0
- package/dist/tools/schemas/well-known.d.ts.map +1 -0
- package/dist/tools/schemas/well-known.js +31 -0
- package/dist/tools/schemas/well-known.js.map +1 -0
- package/dist/tools/snapshot-spec-hashes.d.ts.map +1 -1
- package/dist/tools/snapshot-spec-hashes.js.map +1 -1
- package/dist/tools/spec-usage-report.d.ts +3 -0
- package/dist/tools/spec-usage-report.d.ts.map +1 -0
- package/dist/tools/spec-usage-report.js +95 -0
- package/dist/tools/spec-usage-report.js.map +1 -0
- package/dist/tools/start-hooks.d.ts.map +1 -1
- package/dist/tools/start-hooks.js +93 -16
- package/dist/tools/start-hooks.js.map +1 -1
- package/dist/tools/suggest-tooling/advanced-testing-catalog.d.ts.map +1 -1
- package/dist/tools/suggest-tooling/advanced-testing-catalog.js +8 -5
- package/dist/tools/suggest-tooling/advanced-testing-catalog.js.map +1 -1
- package/dist/tools/tool-registry.d.ts.map +1 -1
- package/dist/tools/tool-registry.js +2 -0
- package/dist/tools/tool-registry.js.map +1 -1
- package/dist/tools/version-spec.d.ts +3 -0
- package/dist/tools/version-spec.d.ts.map +1 -0
- package/dist/tools/version-spec.js +54 -0
- package/dist/tools/version-spec.js.map +1 -0
- package/dist/types/a2a.d.ts +125 -0
- package/dist/types/a2a.d.ts.map +1 -0
- package/dist/types/a2a.js +3 -0
- package/dist/types/a2a.js.map +1 -0
- package/dist/types/ac-gap.d.ts +57 -0
- package/dist/types/ac-gap.d.ts.map +1 -0
- package/dist/types/ac-gap.js +3 -0
- package/dist/types/ac-gap.js.map +1 -0
- package/dist/types/audit-trail.d.ts +77 -0
- package/dist/types/audit-trail.d.ts.map +1 -0
- package/dist/types/audit-trail.js +3 -0
- package/dist/types/audit-trail.js.map +1 -0
- package/dist/types/auth.d.ts +82 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +3 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/ci.d.ts +10 -25
- package/dist/types/ci.d.ts.map +1 -1
- package/dist/types/design-to-spec.d.ts +89 -0
- package/dist/types/design-to-spec.d.ts.map +1 -0
- package/dist/types/design-to-spec.js +3 -0
- package/dist/types/design-to-spec.js.map +1 -0
- package/dist/types/elicitation.d.ts +109 -0
- package/dist/types/elicitation.d.ts.map +1 -0
- package/dist/types/elicitation.js +3 -0
- package/dist/types/elicitation.js.map +1 -0
- package/dist/types/federation.d.ts +95 -0
- package/dist/types/federation.d.ts.map +1 -0
- package/dist/types/federation.js +3 -0
- package/dist/types/federation.js.map +1 -0
- package/dist/types/file-hooks.d.ts +8 -6
- package/dist/types/file-hooks.d.ts.map +1 -1
- package/dist/types/github.d.ts +17 -0
- package/dist/types/github.d.ts.map +1 -1
- package/dist/types/index.d.ts +16 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/infrastructure.d.ts +71 -0
- package/dist/types/infrastructure.d.ts.map +1 -0
- package/dist/types/infrastructure.js +3 -0
- package/dist/types/infrastructure.js.map +1 -0
- package/dist/types/living-spec.d.ts +100 -0
- package/dist/types/living-spec.d.ts.map +1 -1
- package/dist/types/observability.d.ts +105 -0
- package/dist/types/observability.d.ts.map +1 -0
- package/dist/types/observability.js +3 -0
- package/dist/types/observability.js.map +1 -0
- package/dist/types/rbac.d.ts +51 -0
- package/dist/types/rbac.d.ts.map +1 -0
- package/dist/types/rbac.js +4 -0
- package/dist/types/rbac.js.map +1 -0
- package/dist/types/resources.d.ts +20 -0
- package/dist/types/resources.d.ts.map +1 -0
- package/dist/types/resources.js +3 -0
- package/dist/types/resources.js.map +1 -0
- package/dist/types/safe-schemas.js +1 -1
- package/dist/types/safe-schemas.js.map +1 -1
- package/dist/types/spec/repair.d.ts +33 -0
- package/dist/types/spec/repair.d.ts.map +1 -0
- package/dist/types/spec/repair.js +3 -0
- package/dist/types/spec/repair.js.map +1 -0
- package/dist/types/spec-decomposer.d.ts +108 -0
- package/dist/types/spec-decomposer.d.ts.map +1 -0
- package/dist/types/spec-decomposer.js +4 -0
- package/dist/types/spec-decomposer.js.map +1 -0
- package/dist/types/spec-observability.d.ts +71 -0
- package/dist/types/spec-observability.d.ts.map +1 -0
- package/dist/types/spec-observability.js +4 -0
- package/dist/types/spec-observability.js.map +1 -0
- package/dist/types/spec-versioning.d.ts +117 -0
- package/dist/types/spec-versioning.d.ts.map +1 -0
- package/dist/types/spec-versioning.js +3 -0
- package/dist/types/spec-versioning.js.map +1 -0
- package/dist/types/well-known.d.ts +70 -0
- package/dist/types/well-known.d.ts.map +1 -0
- package/dist/types/well-known.js +3 -0
- package/dist/types/well-known.js.map +1 -0
- package/package.json +1 -1
- package/src/config/license-plans.json +16 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// engine/observability/noop-tracer.ts — Zero-overhead Tracer implementation (SPEC-165)
|
|
2
|
+
// Used when OTel is disabled (default). All methods are pure no-ops.
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// NoopSpanHandle — no-op span with safe, idempotent methods
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
class NoopSpanHandle {
|
|
7
|
+
setAttribute(_key, _value) {
|
|
8
|
+
// no-op
|
|
9
|
+
}
|
|
10
|
+
recordError(_error) {
|
|
11
|
+
// no-op
|
|
12
|
+
}
|
|
13
|
+
end(_status) {
|
|
14
|
+
// no-op
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// Reuse the same singleton to avoid GC pressure on hot paths.
|
|
18
|
+
const NOOP_SPAN = new NoopSpanHandle();
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// NoopTracer — satisfies the Tracer interface at zero cost
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
/**
|
|
23
|
+
* No-op tracer used when OTel is not configured.
|
|
24
|
+
* All methods are synchronous and return immediately.
|
|
25
|
+
* No memory allocations on hot paths (reuses NOOP_SPAN singleton).
|
|
26
|
+
*/
|
|
27
|
+
export class NoopTracer {
|
|
28
|
+
startSpan(_name, _attributes) {
|
|
29
|
+
return NOOP_SPAN;
|
|
30
|
+
}
|
|
31
|
+
startChildSpan(_name, _parent, _attributes) {
|
|
32
|
+
return NOOP_SPAN;
|
|
33
|
+
}
|
|
34
|
+
recordCounter(_name, _value, _attributes) {
|
|
35
|
+
// no-op
|
|
36
|
+
}
|
|
37
|
+
recordHistogram(_name, _value, _attributes) {
|
|
38
|
+
// no-op
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=noop-tracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noop-tracer.js","sourceRoot":"","sources":["../../../src/engine/observability/noop-tracer.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,qEAAqE;AAIrE,8EAA8E;AAC9E,4DAA4D;AAC5D,8EAA8E;AAE9E,MAAM,cAAc;IAClB,YAAY,CAAC,IAAY,EAAE,MAAiC;QAC1D,QAAQ;IACV,CAAC;IAED,WAAW,CAAC,MAAsB;QAChC,QAAQ;IACV,CAAC;IAED,GAAG,CAAC,OAAoB;QACtB,QAAQ;IACV,CAAC;CACF;AAED,8DAA8D;AAC9D,MAAM,SAAS,GAAe,IAAI,cAAc,EAAE,CAAC;AAEnD,8EAA8E;AAC9E,2DAA2D;AAC3D,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,OAAO,UAAU;IACrB,SAAS,CAAC,KAAa,EAAE,WAA4B;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,cAAc,CACZ,KAAa,EACb,OAA0B,EAC1B,WAA4B;QAE5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,MAAe,EAAE,WAA4B;QACxE,QAAQ;IACV,CAAC;IAED,eAAe,CAAC,KAAa,EAAE,MAAc,EAAE,WAA4B;QACzE,QAAQ;IACV,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SpanHandle, SpanAttributes, Tracer, OtelConfig } from '../../types/observability.js';
|
|
2
|
+
/**
|
|
3
|
+
* OTel-backed tracer. Requires @opentelemetry/api to be installed at runtime.
|
|
4
|
+
* If the package is missing, falls back to NoopTracer silently.
|
|
5
|
+
*/
|
|
6
|
+
export declare class OtelTracer implements Tracer {
|
|
7
|
+
private readonly inner;
|
|
8
|
+
private constructor();
|
|
9
|
+
/**
|
|
10
|
+
* Factory method — performs dynamic import of @opentelemetry/api.
|
|
11
|
+
* Returns NoopTracer if the package is unavailable.
|
|
12
|
+
*/
|
|
13
|
+
static create(config: OtelConfig): Promise<Tracer>;
|
|
14
|
+
startSpan(name: string, attributes?: SpanAttributes): SpanHandle;
|
|
15
|
+
startChildSpan(name: string, parent: SpanHandle | null, attributes?: SpanAttributes): SpanHandle;
|
|
16
|
+
recordCounter(name: string, value?: number, attributes?: SpanAttributes): void;
|
|
17
|
+
recordHistogram(name: string, value: number, attributes?: SpanAttributes): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=otel-tracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-tracer.d.ts","sourceRoot":"","sources":["../../../src/engine/observability/otel-tracer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,UAAU,EAEV,cAAc,EACd,MAAM,EACN,UAAU,EAGX,MAAM,8BAA8B,CAAC;AAmDtC;;;GAGG;AACH,qBAAa,UAAW,YAAW,MAAM;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,OAAO;IAIP;;;OAGG;WACU,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAwExD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,GAAG,UAAU;IAIhE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC,EAAE,cAAc,GAAG,UAAU;IAIhG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI;IAI9E,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI;CAGhF"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// engine/observability/otel-tracer.ts — OTel-backed Tracer implementation (SPEC-165)
|
|
2
|
+
// Wraps @opentelemetry/api via dynamic import (optional peer dependency).
|
|
3
|
+
// Falls back to NoopTracer if the package is not installed.
|
|
4
|
+
import { NoopTracer } from './noop-tracer.js';
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// OtelSpanHandle — wraps a live OTel span
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
class OtelSpanHandle {
|
|
9
|
+
span;
|
|
10
|
+
statusCodes;
|
|
11
|
+
ended = false;
|
|
12
|
+
constructor(span, statusCodes) {
|
|
13
|
+
this.span = span;
|
|
14
|
+
this.statusCodes = statusCodes;
|
|
15
|
+
}
|
|
16
|
+
setAttribute(key, value) {
|
|
17
|
+
if (this.ended) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
this.span.setAttribute(key, value);
|
|
21
|
+
}
|
|
22
|
+
recordError(error) {
|
|
23
|
+
if (this.ended) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const err = typeof error === 'string' ? { message: error } : error;
|
|
27
|
+
this.span.recordException(err);
|
|
28
|
+
this.span.setStatus({ code: this.statusCodes.ERROR, message: err.message });
|
|
29
|
+
}
|
|
30
|
+
end(status) {
|
|
31
|
+
if (this.ended) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
this.ended = true;
|
|
35
|
+
if (status === 'ok') {
|
|
36
|
+
this.span.setStatus({ code: this.statusCodes.OK });
|
|
37
|
+
}
|
|
38
|
+
else if (status === 'error') {
|
|
39
|
+
this.span.setStatus({ code: this.statusCodes.ERROR });
|
|
40
|
+
}
|
|
41
|
+
this.span.end();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// OtelTracer — real tracer backed by @opentelemetry/api
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
/**
|
|
48
|
+
* OTel-backed tracer. Requires @opentelemetry/api to be installed at runtime.
|
|
49
|
+
* If the package is missing, falls back to NoopTracer silently.
|
|
50
|
+
*/
|
|
51
|
+
export class OtelTracer {
|
|
52
|
+
inner;
|
|
53
|
+
constructor(inner) {
|
|
54
|
+
this.inner = inner;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Factory method — performs dynamic import of @opentelemetry/api.
|
|
58
|
+
* Returns NoopTracer if the package is unavailable.
|
|
59
|
+
*/
|
|
60
|
+
static async create(config) {
|
|
61
|
+
let api;
|
|
62
|
+
try {
|
|
63
|
+
// Dynamic import — optional peer dep, zero hard coupling
|
|
64
|
+
api = (await import('@opentelemetry/api'));
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// @opentelemetry/api not installed — graceful fallback
|
|
68
|
+
return new NoopTracer();
|
|
69
|
+
}
|
|
70
|
+
if (!config.enabled || !config.endpoint) {
|
|
71
|
+
return new NoopTracer();
|
|
72
|
+
}
|
|
73
|
+
const apiTracer = api.trace.getTracer(config.serviceName, config.serviceVersion);
|
|
74
|
+
const statusCodes = api.SpanStatusCode;
|
|
75
|
+
const realTracer = {
|
|
76
|
+
startSpan(name, attributes) {
|
|
77
|
+
const span = apiTracer.startSpan(name, { attributes });
|
|
78
|
+
const handle = new OtelSpanHandle(span, statusCodes);
|
|
79
|
+
if (attributes) {
|
|
80
|
+
for (const [k, v] of Object.entries(attributes)) {
|
|
81
|
+
handle.setAttribute(k, v);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return handle;
|
|
85
|
+
},
|
|
86
|
+
startChildSpan(name, parent, attributes) {
|
|
87
|
+
// LIMITATION: @opentelemetry/api context propagation requires async context
|
|
88
|
+
// (AsyncLocalStorage / AsyncResource) which is not wired here.
|
|
89
|
+
// Instead we record a `parent.span.name` attribute so traces can be linked
|
|
90
|
+
// in the backend via attribute-based queries.
|
|
91
|
+
// Full W3C trace-context propagation is tracked as future work.
|
|
92
|
+
const enrichedAttributes = {
|
|
93
|
+
...attributes,
|
|
94
|
+
...(parent !== null ? { 'parent.linked': true } : {}),
|
|
95
|
+
};
|
|
96
|
+
const span = apiTracer.startSpan(name, { attributes: enrichedAttributes });
|
|
97
|
+
const handle = new OtelSpanHandle(span, statusCodes);
|
|
98
|
+
for (const [k, v] of Object.entries(enrichedAttributes)) {
|
|
99
|
+
handle.setAttribute(k, v);
|
|
100
|
+
}
|
|
101
|
+
return handle;
|
|
102
|
+
},
|
|
103
|
+
recordCounter(name, value = 1, attributes) {
|
|
104
|
+
// @opentelemetry/sdk-metrics is not a hard dependency.
|
|
105
|
+
// Record as a short-lived span so the metric is captured in the trace backend.
|
|
106
|
+
const span = apiTracer.startSpan(`counter:${name}`, {
|
|
107
|
+
attributes: { 'metric.value': value, ...attributes },
|
|
108
|
+
});
|
|
109
|
+
span.end();
|
|
110
|
+
},
|
|
111
|
+
recordHistogram(name, value, attributes) {
|
|
112
|
+
// Same approach — histogram observation recorded as a short-lived span.
|
|
113
|
+
const span = apiTracer.startSpan(`histogram:${name}`, {
|
|
114
|
+
attributes: { 'metric.value': value, ...attributes },
|
|
115
|
+
});
|
|
116
|
+
span.end();
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
return new OtelTracer(realTracer);
|
|
120
|
+
}
|
|
121
|
+
startSpan(name, attributes) {
|
|
122
|
+
return this.inner.startSpan(name, attributes);
|
|
123
|
+
}
|
|
124
|
+
startChildSpan(name, parent, attributes) {
|
|
125
|
+
return this.inner.startChildSpan(name, parent, attributes);
|
|
126
|
+
}
|
|
127
|
+
recordCounter(name, value, attributes) {
|
|
128
|
+
this.inner.recordCounter(name, value, attributes);
|
|
129
|
+
}
|
|
130
|
+
recordHistogram(name, value, attributes) {
|
|
131
|
+
this.inner.recordHistogram(name, value, attributes);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=otel-tracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-tracer.js","sourceRoot":"","sources":["../../../src/engine/observability/otel-tracer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SpanHandle, SpanAttributes } from '../../types/observability.js';
|
|
2
|
+
/**
|
|
3
|
+
* Starts a root span for a tool call.
|
|
4
|
+
* Attributes include toolName, inputSize, and any extra attrs provided.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* const span = startToolSpan('create_spec', { projectId: 'abc' });
|
|
8
|
+
* // ... do work ...
|
|
9
|
+
* span.end('ok');
|
|
10
|
+
*/
|
|
11
|
+
export declare function startToolSpan(toolName: string, extraAttributes?: SpanAttributes): SpanHandle;
|
|
12
|
+
/**
|
|
13
|
+
* Starts a span representing a spec lifecycle event (e.g. status transition).
|
|
14
|
+
* Intended to be used as a child of a per-spec root trace.
|
|
15
|
+
*
|
|
16
|
+
* @param specId The spec identifier, e.g. "SPEC-042"
|
|
17
|
+
* @param event A lifecycle event name, e.g. "draft_to_approved"
|
|
18
|
+
* @param parent Parent span handle (the per-spec root span). May be null.
|
|
19
|
+
* @param extraAttributes Additional attributes.
|
|
20
|
+
*/
|
|
21
|
+
export declare function startSpecLifecycleSpan(specId: string, event: string, parent: SpanHandle | null, extraAttributes?: SpanAttributes): SpanHandle;
|
|
22
|
+
/**
|
|
23
|
+
* Runs `fn` inside a tool span, automatically recording duration and status.
|
|
24
|
+
* Returns the result of `fn`.
|
|
25
|
+
* If `fn` throws, records the error on the span, ends it with 'error', then re-throws.
|
|
26
|
+
*/
|
|
27
|
+
export declare function withToolSpan<T>(toolName: string, fn: (span: SpanHandle) => Promise<T> | T, extraAttributes?: SpanAttributes): Promise<T>;
|
|
28
|
+
//# sourceMappingURL=span-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-helpers.d.ts","sourceRoot":"","sources":["../../../src/engine/observability/span-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAO/E;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,cAAc,GAAG,UAAU,CAM5F;AAMD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,eAAe,CAAC,EAAE,cAAc,GAC/B,UAAU,CAOZ;AAMD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACxC,eAAe,CAAC,EAAE,cAAc,GAC/B,OAAO,CAAC,CAAC,CAAC,CAeZ"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// engine/observability/span-helpers.ts — High-level span helpers (SPEC-165)
|
|
2
|
+
// Provides domain-specific wrappers over the raw Tracer interface.
|
|
3
|
+
import { getTracer } from './tracer.js';
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Tool spans
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
/**
|
|
8
|
+
* Starts a root span for a tool call.
|
|
9
|
+
* Attributes include toolName, inputSize, and any extra attrs provided.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* const span = startToolSpan('create_spec', { projectId: 'abc' });
|
|
13
|
+
* // ... do work ...
|
|
14
|
+
* span.end('ok');
|
|
15
|
+
*/
|
|
16
|
+
export function startToolSpan(toolName, extraAttributes) {
|
|
17
|
+
const attrs = {
|
|
18
|
+
'tool.name': toolName,
|
|
19
|
+
...extraAttributes,
|
|
20
|
+
};
|
|
21
|
+
return getTracer().startSpan(`tool/${toolName}`, attrs);
|
|
22
|
+
}
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Spec lifecycle spans
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
/**
|
|
27
|
+
* Starts a span representing a spec lifecycle event (e.g. status transition).
|
|
28
|
+
* Intended to be used as a child of a per-spec root trace.
|
|
29
|
+
*
|
|
30
|
+
* @param specId The spec identifier, e.g. "SPEC-042"
|
|
31
|
+
* @param event A lifecycle event name, e.g. "draft_to_approved"
|
|
32
|
+
* @param parent Parent span handle (the per-spec root span). May be null.
|
|
33
|
+
* @param extraAttributes Additional attributes.
|
|
34
|
+
*/
|
|
35
|
+
export function startSpecLifecycleSpan(specId, event, parent, extraAttributes) {
|
|
36
|
+
const attrs = {
|
|
37
|
+
'spec.id': specId,
|
|
38
|
+
'spec.event': event,
|
|
39
|
+
...extraAttributes,
|
|
40
|
+
};
|
|
41
|
+
return getTracer().startChildSpan(`spec/${specId}/${event}`, parent, attrs);
|
|
42
|
+
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Instrumented execution helper
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/**
|
|
47
|
+
* Runs `fn` inside a tool span, automatically recording duration and status.
|
|
48
|
+
* Returns the result of `fn`.
|
|
49
|
+
* If `fn` throws, records the error on the span, ends it with 'error', then re-throws.
|
|
50
|
+
*/
|
|
51
|
+
export async function withToolSpan(toolName, fn, extraAttributes) {
|
|
52
|
+
const start = Date.now();
|
|
53
|
+
const span = startToolSpan(toolName, extraAttributes);
|
|
54
|
+
try {
|
|
55
|
+
const result = await fn(span);
|
|
56
|
+
span.setAttribute('tool.duration_ms', Date.now() - start);
|
|
57
|
+
span.end('ok');
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
span.setAttribute('tool.duration_ms', Date.now() - start);
|
|
62
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
63
|
+
span.recordError(message);
|
|
64
|
+
span.end('error');
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=span-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-helpers.js","sourceRoot":"","sources":["../../../src/engine/observability/span-helpers.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,mEAAmE;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,eAAgC;IAC9E,MAAM,KAAK,GAAmB;QAC5B,WAAW,EAAE,QAAQ;QACrB,GAAG,eAAe;KACnB,CAAC;IACF,OAAO,SAAS,EAAE,CAAC,SAAS,CAAC,QAAQ,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,KAAa,EACb,MAAyB,EACzB,eAAgC;IAEhC,MAAM,KAAK,GAAmB;QAC5B,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,KAAK;QACnB,GAAG,eAAe;KACnB,CAAC;IACF,OAAO,SAAS,EAAE,CAAC,cAAc,CAAC,QAAQ,MAAM,IAAI,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,EAAwC,EACxC,eAAgC;IAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Tracer, OtelConfig } from '../../types/observability.js';
|
|
2
|
+
/**
|
|
3
|
+
* Returns the active global tracer.
|
|
4
|
+
* Defaults to NoopTracer — zero overhead when not configured.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getTracer(): Tracer;
|
|
7
|
+
/**
|
|
8
|
+
* Initializes the global tracer from an OtelConfig.
|
|
9
|
+
* If enabled=false or no endpoint, installs NoopTracer.
|
|
10
|
+
* If enabled=true, attempts to build an OtelTracer (requires @opentelemetry/api).
|
|
11
|
+
* Falls back to NoopTracer if the package is not installed.
|
|
12
|
+
*
|
|
13
|
+
* This function is async because OtelTracer performs a dynamic import.
|
|
14
|
+
*/
|
|
15
|
+
export declare function initTracer(config: OtelConfig): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Replaces the active tracer with the provided instance.
|
|
18
|
+
* Primarily for testing — allows injecting a custom or spy tracer.
|
|
19
|
+
*/
|
|
20
|
+
export declare function setTracer(tracer: Tracer): void;
|
|
21
|
+
/**
|
|
22
|
+
* Resets the global tracer to NoopTracer.
|
|
23
|
+
* Call in test afterEach/teardown to avoid state leakage.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resetTracer(): void;
|
|
26
|
+
//# sourceMappingURL=tracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../../src/engine/observability/tracer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAUvE;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAOlE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// engine/observability/tracer.ts — Active tracer singleton + lifecycle (SPEC-165)
|
|
2
|
+
// Provides the global Tracer instance. Defaults to NoopTracer until configured.
|
|
3
|
+
import { NoopTracer } from './noop-tracer.js';
|
|
4
|
+
import { OtelTracer } from './otel-tracer.js';
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Singleton
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
let _tracer = new NoopTracer();
|
|
9
|
+
/**
|
|
10
|
+
* Returns the active global tracer.
|
|
11
|
+
* Defaults to NoopTracer — zero overhead when not configured.
|
|
12
|
+
*/
|
|
13
|
+
export function getTracer() {
|
|
14
|
+
return _tracer;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Initializes the global tracer from an OtelConfig.
|
|
18
|
+
* If enabled=false or no endpoint, installs NoopTracer.
|
|
19
|
+
* If enabled=true, attempts to build an OtelTracer (requires @opentelemetry/api).
|
|
20
|
+
* Falls back to NoopTracer if the package is not installed.
|
|
21
|
+
*
|
|
22
|
+
* This function is async because OtelTracer performs a dynamic import.
|
|
23
|
+
*/
|
|
24
|
+
export async function initTracer(config) {
|
|
25
|
+
if (!config.enabled || !config.endpoint) {
|
|
26
|
+
_tracer = new NoopTracer();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
_tracer = await OtelTracer.create(config);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Replaces the active tracer with the provided instance.
|
|
33
|
+
* Primarily for testing — allows injecting a custom or spy tracer.
|
|
34
|
+
*/
|
|
35
|
+
export function setTracer(tracer) {
|
|
36
|
+
_tracer = tracer;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Resets the global tracer to NoopTracer.
|
|
40
|
+
* Call in test afterEach/teardown to avoid state leakage.
|
|
41
|
+
*/
|
|
42
|
+
export function resetTracer() {
|
|
43
|
+
_tracer = new NoopTracer();
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=tracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../../src/engine/observability/tracer.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,gFAAgF;AAGhF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,IAAI,OAAO,GAAW,IAAI,UAAU,EAAE,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAkB;IACjD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,GAAG,MAAM,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/rbac/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE/F,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// engine/rbac/index.ts — Barrel export for SPEC-166 RBAC engine module
|
|
2
|
+
export { ROLE_PERMISSIONS, ROLE_DESCRIPTIONS, roleHasPermission, listRoles } from './roles.js';
|
|
3
|
+
export { checkPermission, resolveRole, buildAuditEntry } from './permission-checker.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/rbac/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE/F,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { RbacConfig, RbacRole, PermissionAction, PermissionResult, RbacAuditEntry } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Check whether a user is allowed to perform an action on a resource.
|
|
4
|
+
*
|
|
5
|
+
* When RBAC is disabled (default single-user mode) this is always a no-op
|
|
6
|
+
* that returns allowed=true — preserving backward compatibility.
|
|
7
|
+
*
|
|
8
|
+
* Resolution order:
|
|
9
|
+
* 1. RBAC disabled → allow
|
|
10
|
+
* 2. Find spec-scoped assignment (most specific)
|
|
11
|
+
* 3. Find project-level assignment
|
|
12
|
+
* 4. No assignment found → deny
|
|
13
|
+
*/
|
|
14
|
+
export declare function checkPermission(config: RbacConfig, userId: string, action: PermissionAction, resource: string, specId?: string): PermissionResult;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the effective role for a user.
|
|
17
|
+
* Spec-scoped assignments take precedence over project-level assignments.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveRole(config: RbacConfig, userId: string, specId?: string): RbacRole | undefined;
|
|
20
|
+
export declare function buildAuditEntry(userId: string, action: PermissionAction, resource: string, result: PermissionResult, specId?: string): RbacAuditEntry;
|
|
21
|
+
//# sourceMappingURL=permission-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-checker.d.ts","sourceRoot":"","sources":["../../../src/engine/rbac/permission-checker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EAER,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAO9B;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,gBAAgB,CAwBlB;AAMD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,QAAQ,GAAG,SAAS,CActB;AAMD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,gBAAgB,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,cAAc,CAUhB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// engine/rbac/permission-checker.ts — Permission enforcement logic for SPEC-166
|
|
2
|
+
import { roleHasPermission } from './roles.js';
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Permission check
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
/**
|
|
7
|
+
* Check whether a user is allowed to perform an action on a resource.
|
|
8
|
+
*
|
|
9
|
+
* When RBAC is disabled (default single-user mode) this is always a no-op
|
|
10
|
+
* that returns allowed=true — preserving backward compatibility.
|
|
11
|
+
*
|
|
12
|
+
* Resolution order:
|
|
13
|
+
* 1. RBAC disabled → allow
|
|
14
|
+
* 2. Find spec-scoped assignment (most specific)
|
|
15
|
+
* 3. Find project-level assignment
|
|
16
|
+
* 4. No assignment found → deny
|
|
17
|
+
*/
|
|
18
|
+
export function checkPermission(config, userId, action, resource, specId) {
|
|
19
|
+
// No-op when RBAC is not enabled
|
|
20
|
+
if (!config.enabled) {
|
|
21
|
+
return { allowed: true, reason: 'RBAC disabled — single-user mode' };
|
|
22
|
+
}
|
|
23
|
+
const role = resolveRole(config, userId, specId);
|
|
24
|
+
if (!role) {
|
|
25
|
+
const result = {
|
|
26
|
+
allowed: false,
|
|
27
|
+
reason: `User "${userId}" has no role assignment for this project${specId ? ` or spec "${specId}"` : ''}.`,
|
|
28
|
+
};
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
const allowed = roleHasPermission(role, action);
|
|
32
|
+
return {
|
|
33
|
+
allowed,
|
|
34
|
+
role,
|
|
35
|
+
reason: allowed
|
|
36
|
+
? `Role "${role}" is permitted to perform "${action}" on "${resource}".`
|
|
37
|
+
: `Role "${role}" is not permitted to perform "${action}" on "${resource}".`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Role resolution
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the effective role for a user.
|
|
45
|
+
* Spec-scoped assignments take precedence over project-level assignments.
|
|
46
|
+
*/
|
|
47
|
+
export function resolveRole(config, userId, specId) {
|
|
48
|
+
const assignments = config.assignments.filter((a) => a.userId === userId);
|
|
49
|
+
// 1. Spec-scoped (most specific)
|
|
50
|
+
if (specId) {
|
|
51
|
+
const specAssignment = assignments.find((a) => a.specId === specId);
|
|
52
|
+
if (specAssignment) {
|
|
53
|
+
return specAssignment.role;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// 2. Project-level (no specId)
|
|
57
|
+
const projectAssignment = assignments.find((a) => !a.specId);
|
|
58
|
+
return projectAssignment?.role;
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Audit log entry builder
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
export function buildAuditEntry(userId, action, resource, result, specId) {
|
|
64
|
+
return {
|
|
65
|
+
timestamp: new Date().toISOString(),
|
|
66
|
+
userId,
|
|
67
|
+
action,
|
|
68
|
+
resource,
|
|
69
|
+
specId,
|
|
70
|
+
result: result.allowed ? 'allowed' : 'denied',
|
|
71
|
+
role: result.role,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=permission-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-checker.js","sourceRoot":"","sources":["../../../src/engine/rbac/permission-checker.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAUhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAkB,EAClB,MAAc,EACd,MAAwB,EACxB,QAAgB,EAChB,MAAe;IAEf,iCAAiC;IACjC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,MAAM,GAAqB;YAC/B,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,SAAS,MAAM,4CAA4C,MAAM,CAAC,CAAC,CAAC,aAAa,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG;SAC3G,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO;QACL,OAAO;QACP,IAAI;QACJ,MAAM,EAAE,OAAO;YACb,CAAC,CAAC,SAAS,IAAI,8BAA8B,MAAM,SAAS,QAAQ,IAAI;YACxE,CAAC,CAAC,SAAS,IAAI,kCAAkC,MAAM,SAAS,QAAQ,IAAI;KAC/E,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,MAAkB,EAClB,MAAc,EACd,MAAe;IAEf,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAE1F,iCAAiC;IACjC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QACpF,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,cAAc,CAAC,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7E,OAAO,iBAAiB,EAAE,IAAI,CAAC;AACjC,CAAC;AAED,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,MAAwB,EACxB,QAAgB,EAChB,MAAwB,EACxB,MAAe;IAEf,OAAO;QACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM;QACN,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAC7C,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RbacRole, PermissionAction } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Permissions granted to each role.
|
|
4
|
+
* All roles implicitly support 'read' — it is always included.
|
|
5
|
+
*/
|
|
6
|
+
export declare const ROLE_PERMISSIONS: Readonly<Record<RbacRole, ReadonlySet<PermissionAction>>>;
|
|
7
|
+
export declare const ROLE_DESCRIPTIONS: Readonly<Record<RbacRole, string>>;
|
|
8
|
+
/** Returns true if the given role has the requested permission on any resource. */
|
|
9
|
+
export declare function roleHasPermission(role: RbacRole, action: PermissionAction): boolean;
|
|
10
|
+
/** Returns all roles defined in the system. */
|
|
11
|
+
export declare function listRoles(): RbacRole[];
|
|
12
|
+
//# sourceMappingURL=roles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../../src/engine/rbac/roles.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAMvE;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAM7E,CAAC;AAMX,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAOvD,CAAC;AAMX,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAEnF;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,IAAI,QAAQ,EAAE,CAEtC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// engine/rbac/roles.ts — Role definitions and permission sets for SPEC-166
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Role permission matrix
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
/**
|
|
6
|
+
* Permissions granted to each role.
|
|
7
|
+
* All roles implicitly support 'read' — it is always included.
|
|
8
|
+
*/
|
|
9
|
+
export const ROLE_PERMISSIONS = {
|
|
10
|
+
Admin: new Set(['create', 'read', 'update', 'delete', 'approve', 'implement', 'configure']),
|
|
11
|
+
Architect: new Set(['create', 'read', 'update', 'approve', 'configure']),
|
|
12
|
+
Developer: new Set(['read', 'update', 'implement']),
|
|
13
|
+
Reviewer: new Set(['read', 'approve']),
|
|
14
|
+
Observer: new Set(['read']),
|
|
15
|
+
};
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Role hierarchy (for display / description purposes)
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
export const ROLE_DESCRIPTIONS = {
|
|
20
|
+
Admin: 'Full access to all operations: create, read, update, delete, approve, implement, configure.',
|
|
21
|
+
Architect: 'Can create/approve specs and configure the project constitution.',
|
|
22
|
+
Developer: 'Can read specs and implement (update) them.',
|
|
23
|
+
Reviewer: 'Can read and approve/reject specs.',
|
|
24
|
+
Observer: 'Read-only access to all specs and project data.',
|
|
25
|
+
};
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Helpers
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/** Returns true if the given role has the requested permission on any resource. */
|
|
30
|
+
export function roleHasPermission(role, action) {
|
|
31
|
+
return ROLE_PERMISSIONS[role].has(action);
|
|
32
|
+
}
|
|
33
|
+
/** Returns all roles defined in the system. */
|
|
34
|
+
export function listRoles() {
|
|
35
|
+
return Object.keys(ROLE_PERMISSIONS);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../../src/engine/rbac/roles.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAI3E,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA8D;IACzF,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC3F,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACxE,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACnD,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;CACnB,CAAC;AAEX,8EAA8E;AAC9E,sDAAsD;AACtD,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAuC;IACnE,KAAK,EACH,6FAA6F;IAC/F,SAAS,EAAE,kEAAkE;IAC7E,SAAS,EAAE,6CAA6C;IACxD,QAAQ,EAAE,oCAAoC;IAC9C,QAAQ,EAAE,iDAAiD;CACnD,CAAC;AAEX,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,IAAc,EAAE,MAAwB;IACxE,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAe,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract acceptance criteria text lines from spec markdown content.
|
|
3
|
+
* Detects the "Acceptance Criteria" / "Criterios de Aceptación" section header
|
|
4
|
+
* and collects checklist items (`- [ ] ...` or `- [x] ...`).
|
|
5
|
+
*
|
|
6
|
+
* Returns plain text strings (checkbox prefix stripped).
|
|
7
|
+
*/
|
|
8
|
+
export declare function extractAcceptanceCriteria(content: string): string[];
|
|
9
|
+
//# sourceMappingURL=ac-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ac-extractor.d.ts","sourceRoot":"","sources":["../../../src/engine/shared/ac-extractor.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA8BnE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// engine/shared/ac-extractor.ts — Shared acceptance criteria extraction utility
|
|
2
|
+
// Used by: spec-versioning/differ.ts, living-spec/auto-updater.ts, spec-decomposer/analyzer.ts
|
|
3
|
+
/**
|
|
4
|
+
* Extract acceptance criteria text lines from spec markdown content.
|
|
5
|
+
* Detects the "Acceptance Criteria" / "Criterios de Aceptación" section header
|
|
6
|
+
* and collects checklist items (`- [ ] ...` or `- [x] ...`).
|
|
7
|
+
*
|
|
8
|
+
* Returns plain text strings (checkbox prefix stripped).
|
|
9
|
+
*/
|
|
10
|
+
export function extractAcceptanceCriteria(content) {
|
|
11
|
+
const criteria = [];
|
|
12
|
+
const lines = content.split('\n');
|
|
13
|
+
let inAcSection = false;
|
|
14
|
+
for (const line of lines) {
|
|
15
|
+
const trimmed = line.trim();
|
|
16
|
+
// Detect AC section header
|
|
17
|
+
if (/^#+\s*(acceptance criteria|criterios de aceptaci[oó]n)/i.test(trimmed)) {
|
|
18
|
+
inAcSection = true;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
// Exit AC section on next major header (that is not another AC header)
|
|
22
|
+
if (inAcSection && /^#+\s/.test(trimmed) && !/^#+\s*(acceptance|criterio)/i.test(trimmed)) {
|
|
23
|
+
inAcSection = false;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
// Collect checklist items in AC section
|
|
27
|
+
if (inAcSection && /^-\s*\[[ xX]\]/.test(trimmed)) {
|
|
28
|
+
const text = trimmed.replace(/^-\s*\[[ xX]\]\s*/, '').trim();
|
|
29
|
+
if (text.length > 0) {
|
|
30
|
+
criteria.push(text);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return criteria;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=ac-extractor.js.map
|