@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.18
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/LICENSE +21 -0
- package/README.md +22 -1
- package/bin/aiwg.mjs +349 -0
- package/dist/src/a2a/agent-card.js +145 -0
- package/dist/src/a2a/client.js +411 -0
- package/dist/src/a2a/hitl-cli.js +171 -0
- package/dist/src/a2a/hitl-driver.js +370 -0
- package/dist/src/a2a/hitl.js +181 -0
- package/dist/src/a2a/http.js +193 -0
- package/dist/src/a2a/jcs.js +128 -0
- package/dist/src/a2a/jws.js +187 -0
- package/dist/src/a2a/types.js +24 -0
- package/dist/src/a2a/webhook.js +240 -0
- package/dist/src/activity-log/cli.js +348 -0
- package/dist/src/activity-log/parser.js +81 -0
- package/dist/src/activity-log/types.js +50 -0
- package/dist/src/agents/agent-deployer.js +367 -0
- package/dist/src/agents/agent-packager.js +271 -0
- package/dist/src/agents/agent-validator.js +271 -0
- package/dist/src/agents/grounding/knowledge-base.js +161 -0
- package/dist/src/agents/grounding/types.js +12 -0
- package/dist/src/agents/index.js +10 -0
- package/dist/src/agents/packaged-agent-inventory.js +75 -0
- package/dist/src/agents/types.js +7 -0
- package/dist/src/api/index.d.ts +10 -0
- package/dist/src/api/index.js +10 -0
- package/dist/src/artifacts/address-parser.js +73 -0
- package/dist/src/artifacts/audit/cli.js +183 -0
- package/dist/src/artifacts/audit/drift.js +122 -0
- package/dist/src/artifacts/audit/types.js +12 -0
- package/dist/src/artifacts/backends/graphology-backend.js +160 -0
- package/dist/src/artifacts/backends/json-backend.js +129 -0
- package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
- package/dist/src/artifacts/browser-export.js +622 -0
- package/dist/src/artifacts/capability-resolver.js +94 -0
- package/dist/src/artifacts/checksum-manifest.js +91 -0
- package/dist/src/artifacts/citation-parser.js +162 -0
- package/dist/src/artifacts/cli.js +1486 -0
- package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
- package/dist/src/artifacts/corpus-tools/cli.js +393 -0
- package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
- package/dist/src/artifacts/corpus-tools/curator.js +186 -0
- package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
- package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
- package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
- package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
- package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
- package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
- package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
- package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
- package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
- package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
- package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
- package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
- package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
- package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
- package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
- package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
- package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
- package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
- package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
- package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
- package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
- package/dist/src/artifacts/corpus-views/build.js +126 -0
- package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
- package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
- package/dist/src/artifacts/corpus-views/renderers.js +353 -0
- package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
- package/dist/src/artifacts/dep-graph.js +173 -0
- package/dist/src/artifacts/discover-facets.js +375 -0
- package/dist/src/artifacts/embedding-index.js +354 -0
- package/dist/src/artifacts/enrichment/cli.js +240 -0
- package/dist/src/artifacts/enrichment/prompt.js +47 -0
- package/dist/src/artifacts/enrichment/store.js +90 -0
- package/dist/src/artifacts/enrichment/types.js +12 -0
- package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
- package/dist/src/artifacts/fortemi-core-sync.js +251 -0
- package/dist/src/artifacts/fortemi-shard-export.js +44 -0
- package/dist/src/artifacts/fulltext.js +108 -0
- package/dist/src/artifacts/graph-backend.js +51 -0
- package/dist/src/artifacts/graph-query.js +247 -0
- package/dist/src/artifacts/hybrid-query.js +225 -0
- package/dist/src/artifacts/index-builder.js +1089 -0
- package/dist/src/artifacts/index-reader.js +112 -0
- package/dist/src/artifacts/index-status.js +193 -0
- package/dist/src/artifacts/legacy-index-migration.js +169 -0
- package/dist/src/artifacts/move.js +154 -0
- package/dist/src/artifacts/operational-state.js +239 -0
- package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
- package/dist/src/artifacts/query-engine.js +1955 -0
- package/dist/src/artifacts/source-graph.js +529 -0
- package/dist/src/artifacts/stats.js +169 -0
- package/dist/src/artifacts/types.js +606 -0
- package/dist/src/artifacts/views/cli.js +293 -0
- package/dist/src/artifacts/views/definition.js +170 -0
- package/dist/src/artifacts/views/store.js +149 -0
- package/dist/src/artifacts/views/types.js +8 -0
- package/dist/src/artifacts/watcher.js +255 -0
- package/dist/src/catalog/builtin-models.json +636 -0
- package/dist/src/catalog/cli.js +228 -0
- package/dist/src/catalog/cli.mjs +289 -0
- package/dist/src/catalog/index.js +15 -0
- package/dist/src/catalog/loader.js +217 -0
- package/dist/src/catalog/loader.mjs +251 -0
- package/dist/src/catalog/sources.json +41 -0
- package/dist/src/catalog/types.js +8 -0
- package/dist/src/channel/manager.mjs +504 -0
- package/dist/src/cli/agent-spawn.js +178 -0
- package/dist/src/cli/cli-extension-loader.js +245 -0
- package/dist/src/cli/command-log.js +275 -0
- package/dist/src/cli/config-loader.js +232 -0
- package/dist/src/cli/env.js +82 -0
- package/dist/src/cli/errors.js +150 -0
- package/dist/src/cli/find-package-root.js +40 -0
- package/dist/src/cli/git-hooks.js +250 -0
- package/dist/src/cli/handlers/agentcard.js +206 -0
- package/dist/src/cli/handlers/artifacts.js +76 -0
- package/dist/src/cli/handlers/best-practices-audit.js +280 -0
- package/dist/src/cli/handlers/cockpit.js +137 -0
- package/dist/src/cli/handlers/command-log.js +37 -0
- package/dist/src/cli/handlers/daemon.js +59 -0
- package/dist/src/cli/handlers/diagnose.js +300 -0
- package/dist/src/cli/handlers/execution-mode.js +105 -0
- package/dist/src/cli/handlers/feedback.js +341 -0
- package/dist/src/cli/handlers/help.js +147 -0
- package/dist/src/cli/handlers/index.js +302 -0
- package/dist/src/cli/handlers/init.js +179 -0
- package/dist/src/cli/handlers/install.js +129 -0
- package/dist/src/cli/handlers/issues.js +46 -0
- package/dist/src/cli/handlers/lint.js +42 -0
- package/dist/src/cli/handlers/local-executor.js +315 -0
- package/dist/src/cli/handlers/marketplace.js +168 -0
- package/dist/src/cli/handlers/mc.js +1010 -0
- package/dist/src/cli/handlers/models.js +352 -0
- package/dist/src/cli/handlers/packages.js +155 -0
- package/dist/src/cli/handlers/ralph-launcher.js +717 -0
- package/dist/src/cli/handlers/ralph.js +575 -0
- package/dist/src/cli/handlers/refresh.js +432 -0
- package/dist/src/cli/handlers/regenerate.js +336 -0
- package/dist/src/cli/handlers/repo-access.js +109 -0
- package/dist/src/cli/handlers/run.js +165 -0
- package/dist/src/cli/handlers/runtime-info.js +301 -0
- package/dist/src/cli/handlers/sandbox.js +197 -0
- package/dist/src/cli/handlers/scaffolding.js +149 -0
- package/dist/src/cli/handlers/script-runner.js +121 -0
- package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
- package/dist/src/cli/handlers/serve.js +1835 -0
- package/dist/src/cli/handlers/session.js +348 -0
- package/dist/src/cli/handlers/setup.js +440 -0
- package/dist/src/cli/handlers/skill-lint.js +367 -0
- package/dist/src/cli/handlers/skill-usage.js +74 -0
- package/dist/src/cli/handlers/steward.js +567 -0
- package/dist/src/cli/handlers/subcommands.js +1702 -0
- package/dist/src/cli/handlers/team.js +337 -0
- package/dist/src/cli/handlers/types.js +11 -0
- package/dist/src/cli/handlers/use.js +2772 -0
- package/dist/src/cli/handlers/utilities.js +703 -0
- package/dist/src/cli/handlers/version.js +134 -0
- package/dist/src/cli/handlers/workspace-context.js +93 -0
- package/dist/src/cli/handlers/workspace.js +126 -0
- package/dist/src/cli/help-generator.js +178 -0
- package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
- package/dist/src/cli/hooks/executor.js +96 -0
- package/dist/src/cli/hooks/index.js +15 -0
- package/dist/src/cli/hooks/registry.js +143 -0
- package/dist/src/cli/hooks/types.js +13 -0
- package/dist/src/cli/log.js +492 -0
- package/dist/src/cli/project-isolation/detect.js +70 -0
- package/dist/src/cli/project-isolation/index.js +7 -0
- package/dist/src/cli/project-isolation/signals.js +17 -0
- package/dist/src/cli/project-isolation/warning.js +102 -0
- package/dist/src/cli/prompt-utils.js +155 -0
- package/dist/src/cli/provider-deployment-plan.js +126 -0
- package/dist/src/cli/provider-resolution.js +119 -0
- package/dist/src/cli/router.js +305 -0
- package/dist/src/cli/scope-resolver.js +392 -0
- package/dist/src/cli/skill-usage.js +616 -0
- package/dist/src/cli/ui.js +224 -0
- package/dist/src/cli/watch-service.js +203 -0
- package/dist/src/cli/workflow-orchestrator.js +478 -0
- package/dist/src/cli/workspace-signals.js +321 -0
- package/dist/src/community/footer.js +14 -0
- package/dist/src/community/links.js +123 -0
- package/dist/src/community/milestones.js +46 -0
- package/dist/src/community/nudge-policy.js +93 -0
- package/dist/src/config/aiwg-config.js +883 -0
- package/dist/src/config/cli.js +703 -0
- package/dist/src/config/gitignore.js +156 -0
- package/dist/src/config/project-artifacts.js +76 -0
- package/dist/src/config/user-config.js +428 -0
- package/dist/src/config/user-registry.js +127 -0
- package/dist/src/config/workspace.js +276 -0
- package/dist/src/contributors/detect.js +39 -0
- package/dist/src/contributors/discover.js +172 -0
- package/dist/src/contributors/heuristic.js +186 -0
- package/dist/src/contributors/index.js +11 -0
- package/dist/src/contributors/types.js +13 -0
- package/dist/src/contributors/validation.js +116 -0
- package/dist/src/data/community.schema.json +43 -0
- package/dist/src/data/community.yaml +16 -0
- package/dist/src/extensions/capability-index.js +270 -0
- package/dist/src/extensions/claude-hooks-installer.js +268 -0
- package/dist/src/extensions/commands/definitions.js +3485 -0
- package/dist/src/extensions/deployment-registration.js +463 -0
- package/dist/src/extensions/index.js +22 -0
- package/dist/src/extensions/loader.js +132 -0
- package/dist/src/extensions/managed-marker.js +100 -0
- package/dist/src/extensions/manifest.js +196 -0
- package/dist/src/extensions/project-local-activity.js +114 -0
- package/dist/src/extensions/project-local-discovery.js +261 -0
- package/dist/src/extensions/project-local-doctor.js +281 -0
- package/dist/src/extensions/project-local-gitignore.js +176 -0
- package/dist/src/extensions/project-local-paths.js +121 -0
- package/dist/src/extensions/project-local-promote.js +218 -0
- package/dist/src/extensions/project-local-remove.js +373 -0
- package/dist/src/extensions/project-local-scaffold.js +252 -0
- package/dist/src/extensions/project-quickref.js +291 -0
- package/dist/src/extensions/registry.js +368 -0
- package/dist/src/extensions/shadow-resolver.js +271 -0
- package/dist/src/extensions/types.js +86 -0
- package/dist/src/extensions/upstream-registry.js +195 -0
- package/dist/src/extensions/validation.js +631 -0
- package/dist/src/features/catalog.js +88 -0
- package/dist/src/features/cli.js +197 -0
- package/dist/src/features/installer.js +57 -0
- package/dist/src/features/paths.js +14 -0
- package/dist/src/features/runtime.js +21 -0
- package/dist/src/features/status.js +134 -0
- package/dist/src/hooks/laziness-detection.js +532 -0
- package/dist/src/intake/git-history-analyzer.js +486 -0
- package/dist/src/intake/index.js +9 -0
- package/dist/src/issues/cli.js +327 -0
- package/dist/src/issues/index.js +5 -0
- package/dist/src/issues/live.js +154 -0
- package/dist/src/issues/local.js +666 -0
- package/dist/src/issues/sync.js +143 -0
- package/dist/src/issues/types.js +2 -0
- package/dist/src/issues/workflows.js +164 -0
- package/dist/src/kb/cli.js +173 -0
- package/dist/src/lint/cli.js +171 -0
- package/dist/src/lint/loader.js +225 -0
- package/dist/src/lint/reporters.js +141 -0
- package/dist/src/lint/runner.js +364 -0
- package/dist/src/lint/types.js +10 -0
- package/dist/src/marketplace/cache.js +110 -0
- package/dist/src/marketplace/identifier.js +63 -0
- package/dist/src/marketplace/registry.js +36 -0
- package/dist/src/marketplace/sources/clawhub.js +53 -0
- package/dist/src/marketplace/sources/git.js +45 -0
- package/dist/src/marketplace/types.js +9 -0
- package/dist/src/mcp/adapters/codex-runtime.js +224 -0
- package/dist/src/mcp/cli.mjs +1197 -0
- package/dist/src/mcp/elicitation.mjs +149 -0
- package/dist/src/mcp/helpers.mjs +287 -0
- package/dist/src/mcp/index.mjs +11 -0
- package/dist/src/mcp/profiles.js +263 -0
- package/dist/src/mcp/profiles.mjs +360 -0
- package/dist/src/mcp/registry.js +376 -0
- package/dist/src/mcp/registry.mjs +387 -0
- package/dist/src/mcp/server.mjs +633 -0
- package/dist/src/mcp/test-simple.mjs +271 -0
- package/dist/src/mcp/tools/command-run.mjs +101 -0
- package/dist/src/mcp/tools/discovery.mjs +291 -0
- package/dist/src/mcp/tools/interaction.mjs +87 -0
- package/dist/src/mcp/tools/orchestration.mjs +320 -0
- package/dist/src/mcp/tools/subsystems.mjs +640 -0
- package/dist/src/memory/cli.js +166 -0
- package/dist/src/memory/project-registry.js +282 -0
- package/dist/src/metrics/artifact-metrics.js +184 -0
- package/dist/src/metrics/context-budget.js +174 -0
- package/dist/src/metrics/token-counter.js +133 -0
- package/dist/src/models/config-loader.js +228 -0
- package/dist/src/models/index.js +22 -0
- package/dist/src/models/model-capabilities.v1.json +120 -0
- package/dist/src/models/model-catalog.v1.json +96 -0
- package/dist/src/models/model-discovery.js +521 -0
- package/dist/src/models/provider-models.js +73 -0
- package/dist/src/models/provider-policy.js +273 -0
- package/dist/src/models/resolver.js +245 -0
- package/dist/src/models/router.js +70 -0
- package/dist/src/models/types.js +8 -0
- package/dist/src/models/wrapper-deployment.js +178 -0
- package/dist/src/models/wrapper-route.js +54 -0
- package/dist/src/ops/cli.js +268 -0
- package/dist/src/ops/registry.js +623 -0
- package/dist/src/packages/adapters/clawhub.js +113 -0
- package/dist/src/packages/adapters/git.js +153 -0
- package/dist/src/packages/adapters/gitea.js +93 -0
- package/dist/src/packages/adapters/github.js +69 -0
- package/dist/src/packages/adapters/local-cache.js +89 -0
- package/dist/src/packages/package-registry.js +143 -0
- package/dist/src/packages/registry.js +238 -0
- package/dist/src/packages/types.js +11 -0
- package/dist/src/plugin/cross-framework-ops.js +475 -0
- package/dist/src/plugin/framework-config-loader.js +235 -0
- package/dist/src/plugin/framework-detector.js +186 -0
- package/dist/src/plugin/framework-isolator.js +341 -0
- package/dist/src/plugin/framework-migration.js +371 -0
- package/dist/src/plugin/metadata-validator.js +906 -0
- package/dist/src/plugin/plugin-installer.js +436 -0
- package/dist/src/plugin/plugin-status.js +369 -0
- package/dist/src/plugin/plugin-uninstaller.js +473 -0
- package/dist/src/plugin/registry-validator.js +344 -0
- package/dist/src/plugin/skill-command-translator.js +415 -0
- package/dist/src/plugin/workspace-creator.js +189 -0
- package/dist/src/plugin/workspace-migrator.js +821 -0
- package/dist/src/policy/authorization.js +390 -0
- package/dist/src/policy/repo-access.js +215 -0
- package/dist/src/provenance/cli.js +16 -0
- package/dist/src/providers/capability-matrix.js +300 -0
- package/dist/src/providers/capability-matrix.yaml +514 -0
- package/dist/src/providers/provider-definitions.js +977 -0
- package/dist/src/providers/provider-definitions.mjs +159 -0
- package/dist/src/providers/provider-inventory.js +169 -0
- package/dist/src/quality/feedback-ab.js +174 -0
- package/dist/src/quality/feedback-collector.js +176 -0
- package/dist/src/quality/feedback-tracker.js +123 -0
- package/dist/src/quality/patterns/adr.json +24 -0
- package/dist/src/quality/patterns/sad.json +24 -0
- package/dist/src/quality/patterns/test-plan.json +24 -0
- package/dist/src/quality/patterns/use-case.json +24 -0
- package/dist/src/quality/scoring.js +157 -0
- package/dist/src/reflections/cli.js +15 -0
- package/dist/src/release/plan.js +139 -0
- package/dist/src/research/cache/manager.js +227 -0
- package/dist/src/research/clients/arxiv.js +156 -0
- package/dist/src/research/clients/base.js +197 -0
- package/dist/src/research/clients/crossref.js +112 -0
- package/dist/src/research/clients/semantic-scholar.js +126 -0
- package/dist/src/research/clients/unpaywall.js +87 -0
- package/dist/src/research/index.js +14 -0
- package/dist/src/research/query-cli.js +336 -0
- package/dist/src/research/services/acquisition.js +313 -0
- package/dist/src/research/services/archival.js +225 -0
- package/dist/src/research/services/citation.js +279 -0
- package/dist/src/research/services/discovery.js +243 -0
- package/dist/src/research/services/documentation.js +269 -0
- package/dist/src/research/services/index.js +14 -0
- package/dist/src/research/services/provenance.js +279 -0
- package/dist/src/research/services/quality.js +370 -0
- package/dist/src/research/services/types.js +7 -0
- package/dist/src/research/storage-cli.js +20 -0
- package/dist/src/research/types.js +47 -0
- package/dist/src/resources/index.d.ts +2 -0
- package/dist/src/resources/index.js +2 -0
- package/dist/src/resources/web-release.d.ts +89 -0
- package/dist/src/resources/web-release.js +886 -0
- package/dist/src/rlm/cache/cli.js +162 -0
- package/dist/src/rlm/cache/hash.js +35 -0
- package/dist/src/rlm/cache/store.js +170 -0
- package/dist/src/rlm/cache/types.js +8 -0
- package/dist/src/rlm/cli.js +650 -0
- package/dist/src/serve/a2a-terminal-observer.js +120 -0
- package/dist/src/serve/agent-router.js +205 -0
- package/dist/src/serve/dispatch-router.js +171 -0
- package/dist/src/serve/executor-registry.js +715 -0
- package/dist/src/serve/mission-conductor.js +177 -0
- package/dist/src/serve/orchestrator-adapter.js +113 -0
- package/dist/src/serve/orchestrator-override.js +94 -0
- package/dist/src/serve/orchestrator-pty.js +133 -0
- package/dist/src/serve/pty-bridge.js +799 -0
- package/dist/src/serve/sandbox-registry.js +832 -0
- package/dist/src/serve/screen-reader.js +228 -0
- package/dist/src/serve/stack-adapters.js +68 -0
- package/dist/src/serve/telemetry.js +143 -0
- package/dist/src/skills/adapters/clawhub.js +250 -0
- package/dist/src/skills/adapters/local.js +335 -0
- package/dist/src/skills/adapters/openclaw.js +316 -0
- package/dist/src/skills/cli.js +334 -0
- package/dist/src/skills/registry.js +117 -0
- package/dist/src/skills/run.js +259 -0
- package/dist/src/skills/runtime.js +94 -0
- package/dist/src/skills/types.js +10 -0
- package/dist/src/smiths/agentsmith/demo.js +116 -0
- package/dist/src/smiths/agentsmith/examples.js +300 -0
- package/dist/src/smiths/agentsmith/generator.js +503 -0
- package/dist/src/smiths/agentsmith/index.js +11 -0
- package/dist/src/smiths/agentsmith/types.js +8 -0
- package/dist/src/smiths/commandsmith/example.js +220 -0
- package/dist/src/smiths/commandsmith/generator.js +288 -0
- package/dist/src/smiths/commandsmith/index.js +41 -0
- package/dist/src/smiths/commandsmith/templates.js +296 -0
- package/dist/src/smiths/commandsmith/types.js +7 -0
- package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
- package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
- package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
- package/dist/src/smiths/context-pipeline/discovery.js +187 -0
- package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
- package/dist/src/smiths/context-pipeline/finalization.js +147 -0
- package/dist/src/smiths/context-pipeline/generator.js +477 -0
- package/dist/src/smiths/context-pipeline/index.js +30 -0
- package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
- package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
- package/dist/src/smiths/context-pipeline/overflow.js +212 -0
- package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
- package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
- package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
- package/dist/src/smiths/context-pipeline/types.js +23 -0
- package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
- package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
- package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
- package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
- package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
- package/dist/src/smiths/hook-bridge/index.js +79 -0
- package/dist/src/smiths/hook-bridge/loader.js +116 -0
- package/dist/src/smiths/hook-bridge/shim.js +89 -0
- package/dist/src/smiths/hook-bridge/types.js +31 -0
- package/dist/src/smiths/index.js +39 -0
- package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
- package/dist/src/smiths/mcpsmith/example.js +119 -0
- package/dist/src/smiths/mcpsmith/generator.js +236 -0
- package/dist/src/smiths/mcpsmith/index.js +17 -0
- package/dist/src/smiths/mcpsmith/types.js +10 -0
- package/dist/src/smiths/platform-paths.js +101 -0
- package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
- package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
- package/dist/src/smiths/skillsmith/demo.js +83 -0
- package/dist/src/smiths/skillsmith/examples.js +161 -0
- package/dist/src/smiths/skillsmith/generator.js +316 -0
- package/dist/src/smiths/skillsmith/index.js +12 -0
- package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
- package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
- package/dist/src/smiths/skillsmith/types.js +9 -0
- package/dist/src/smiths/toolsmith/index.js +10 -0
- package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
- package/dist/src/smiths/toolsmith/types.js +8 -0
- package/dist/src/storage/backends/fortemi.js +227 -0
- package/dist/src/storage/backends/fs.js +134 -0
- package/dist/src/storage/backends/logseq.js +309 -0
- package/dist/src/storage/backends/obsidian.js +233 -0
- package/dist/src/storage/cli.js +468 -0
- package/dist/src/storage/config.js +272 -0
- package/dist/src/storage/index.js +108 -0
- package/dist/src/storage/subsystem-cli.js +201 -0
- package/dist/src/storage/types.js +33 -0
- package/dist/src/testing/corpus/corpus-builder.js +383 -0
- package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
- package/dist/src/testing/corpus/index.js +10 -0
- package/dist/src/testing/fixtures/index.js +9 -0
- package/dist/src/testing/fixtures/test-data-factory.js +472 -0
- package/dist/src/testing/generators/index.js +11 -0
- package/dist/src/testing/generators/test-case-generator.js +393 -0
- package/dist/src/testing/generators/test-code-generator.js +384 -0
- package/dist/src/testing/generators/use-case-parser.js +325 -0
- package/dist/src/testing/index.js +11 -0
- package/dist/src/tracker/capability-protocol.js +118 -0
- package/dist/src/update/checker.mjs +396 -0
- package/dist/src/update/notifier.mjs +235 -0
- package/dist/src/writing/content-diversifier.js +804 -0
- package/dist/src/writing/example-generator.js +959 -0
- package/dist/src/writing/example-templates.js +99 -0
- package/dist/src/writing/pattern-library.js +486 -0
- package/dist/src/writing/patterns/banned-phrases.json +4413 -0
- package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
- package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
- package/dist/src/writing/patterns/hedging-language.json +2096 -0
- package/dist/src/writing/patterns/transition-words.json +1285 -0
- package/dist/src/writing/patterns/weak-verbs.json +1112 -0
- package/dist/src/writing/prompt-optimizer.js +660 -0
- package/dist/src/writing/prompt-templates.js +583 -0
- package/dist/src/writing/scoring-config-loader.js +168 -0
- package/dist/src/writing/validation-engine.js +595 -0
- package/dist/src/writing/validation-rules.js +380 -0
- package/dist/src/writing/voice-analyzer.js +439 -0
- package/dist/src/writing/voice-calibration.js +661 -0
- package/dist/src/writing/voice-profiles.json +588 -0
- package/package.json +65 -9
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ground Truth Corpus Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages multiple corpus types for NFR validation with versioning,
|
|
5
|
+
* schema validation, and statistics reporting.
|
|
6
|
+
*
|
|
7
|
+
* Supports 5 corpus types:
|
|
8
|
+
* - ai-vs-human: AI vs human writing classification
|
|
9
|
+
* - codebases: Codebase metadata validation
|
|
10
|
+
* - traceability: Requirements traceability links
|
|
11
|
+
* - security-attacks: Known attack pattern detection
|
|
12
|
+
* - template-recommendations: Template selection scenarios
|
|
13
|
+
*
|
|
14
|
+
* @module testing/corpus/ground-truth-manager
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from 'fs/promises';
|
|
17
|
+
import * as path from 'path';
|
|
18
|
+
/**
|
|
19
|
+
* GroundTruthCorpusManager - Manage multiple ground truth corpora
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const manager = new GroundTruthCorpusManager('./tests/fixtures/corpora');
|
|
24
|
+
* await manager.initialize();
|
|
25
|
+
*
|
|
26
|
+
* // Load specific corpus
|
|
27
|
+
* const corpus = await manager.loadCorpus('ai-vs-human', '1.0.0');
|
|
28
|
+
*
|
|
29
|
+
* // Get ground truth for item
|
|
30
|
+
* const truth = manager.getGroundTruth('ai-vs-human', 'item-001');
|
|
31
|
+
*
|
|
32
|
+
* // Validate against ground truth
|
|
33
|
+
* const result = manager.validateAgainstGroundTruth('ai-vs-human', 'item-001', actualValue);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class GroundTruthCorpusManager {
|
|
37
|
+
corporaRoot;
|
|
38
|
+
manifests = new Map();
|
|
39
|
+
loadedCorpora = new Map();
|
|
40
|
+
initialized = false;
|
|
41
|
+
constructor(corporaRoot = './tests/fixtures/corpora') {
|
|
42
|
+
this.corporaRoot = corporaRoot;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Initialize manager and discover available corpora
|
|
46
|
+
*/
|
|
47
|
+
async initialize() {
|
|
48
|
+
this.manifests.clear();
|
|
49
|
+
this.loadedCorpora.clear();
|
|
50
|
+
try {
|
|
51
|
+
await fs.access(this.corporaRoot);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Create directory structure if it doesn't exist
|
|
55
|
+
await this.createDirectoryStructure();
|
|
56
|
+
}
|
|
57
|
+
// Discover manifests
|
|
58
|
+
await this.discoverManifests();
|
|
59
|
+
this.initialized = true;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create the corpora directory structure
|
|
63
|
+
*/
|
|
64
|
+
async createDirectoryStructure() {
|
|
65
|
+
const dirs = [
|
|
66
|
+
'manifests',
|
|
67
|
+
'data/ai-vs-human',
|
|
68
|
+
'data/codebases',
|
|
69
|
+
'data/traceability',
|
|
70
|
+
'data/security-attacks',
|
|
71
|
+
'data/template-recommendations'
|
|
72
|
+
];
|
|
73
|
+
for (const dir of dirs) {
|
|
74
|
+
await fs.mkdir(path.join(this.corporaRoot, dir), { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Discover available corpus manifests
|
|
79
|
+
*/
|
|
80
|
+
async discoverManifests() {
|
|
81
|
+
const manifestsDir = path.join(this.corporaRoot, 'manifests');
|
|
82
|
+
try {
|
|
83
|
+
const files = await fs.readdir(manifestsDir);
|
|
84
|
+
for (const file of files) {
|
|
85
|
+
if (file.endsWith('.json')) {
|
|
86
|
+
const manifestPath = path.join(manifestsDir, file);
|
|
87
|
+
try {
|
|
88
|
+
const content = await fs.readFile(manifestPath, 'utf-8');
|
|
89
|
+
const manifest = JSON.parse(content);
|
|
90
|
+
const key = this.getCorpusKey(manifest.type, manifest.version);
|
|
91
|
+
this.manifests.set(key, manifest);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
// Skip invalid manifests
|
|
95
|
+
console.warn(`Warning: Could not parse manifest ${file}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Manifests directory doesn't exist yet
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get corpus key for map lookup
|
|
106
|
+
*/
|
|
107
|
+
getCorpusKey(type, version) {
|
|
108
|
+
return `${type}@${version}`;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Load a corpus by type and version
|
|
112
|
+
*
|
|
113
|
+
* @param type - Corpus type
|
|
114
|
+
* @param version - Semantic version or 'latest'
|
|
115
|
+
* @returns Loaded corpus items
|
|
116
|
+
*/
|
|
117
|
+
async loadCorpus(type, version = 'latest') {
|
|
118
|
+
if (!this.initialized) {
|
|
119
|
+
await this.initialize();
|
|
120
|
+
}
|
|
121
|
+
const resolvedVersion = version === 'latest'
|
|
122
|
+
? this.getLatestVersion(type)
|
|
123
|
+
: version;
|
|
124
|
+
if (!resolvedVersion) {
|
|
125
|
+
throw new Error(`No corpus found for type: ${type}`);
|
|
126
|
+
}
|
|
127
|
+
const key = this.getCorpusKey(type, resolvedVersion);
|
|
128
|
+
// Check if already loaded
|
|
129
|
+
if (this.loadedCorpora.has(key)) {
|
|
130
|
+
return this.loadedCorpora.get(key);
|
|
131
|
+
}
|
|
132
|
+
// Load from manifest
|
|
133
|
+
const manifest = this.manifests.get(key);
|
|
134
|
+
if (!manifest) {
|
|
135
|
+
throw new Error(`Corpus not found: ${type}@${resolvedVersion}`);
|
|
136
|
+
}
|
|
137
|
+
// Load data files
|
|
138
|
+
const items = new Map();
|
|
139
|
+
for (const dataFile of manifest.dataFiles) {
|
|
140
|
+
const dataPath = path.join(this.corporaRoot, 'data', type, dataFile);
|
|
141
|
+
try {
|
|
142
|
+
const content = await fs.readFile(dataPath, 'utf-8');
|
|
143
|
+
const data = JSON.parse(content);
|
|
144
|
+
for (const item of data) {
|
|
145
|
+
items.set(item.id, item);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
throw new Error(`Failed to load corpus data file: ${dataFile}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
this.loadedCorpora.set(key, items);
|
|
153
|
+
return items;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get the latest version for a corpus type
|
|
157
|
+
*/
|
|
158
|
+
getLatestVersion(type) {
|
|
159
|
+
const versions = [];
|
|
160
|
+
for (const [_key, manifest] of this.manifests) {
|
|
161
|
+
if (manifest.type === type) {
|
|
162
|
+
versions.push(manifest.version);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (versions.length === 0) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
// Sort by semver
|
|
169
|
+
versions.sort((a, b) => this.compareSemver(b, a));
|
|
170
|
+
return versions[0];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Compare semver versions
|
|
174
|
+
*/
|
|
175
|
+
compareSemver(a, b) {
|
|
176
|
+
const partsA = a.split('.').map(Number);
|
|
177
|
+
const partsB = b.split('.').map(Number);
|
|
178
|
+
for (let i = 0; i < 3; i++) {
|
|
179
|
+
if (partsA[i] > partsB[i])
|
|
180
|
+
return 1;
|
|
181
|
+
if (partsA[i] < partsB[i])
|
|
182
|
+
return -1;
|
|
183
|
+
}
|
|
184
|
+
return 0;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get ground truth for a specific item
|
|
188
|
+
*
|
|
189
|
+
* @param type - Corpus type
|
|
190
|
+
* @param itemId - Item identifier
|
|
191
|
+
* @param version - Version constraint
|
|
192
|
+
* @returns Ground truth value
|
|
193
|
+
*/
|
|
194
|
+
async getGroundTruth(type, itemId, version = 'latest') {
|
|
195
|
+
const corpus = await this.loadCorpus(type, version);
|
|
196
|
+
const item = corpus.get(itemId);
|
|
197
|
+
if (!item) {
|
|
198
|
+
throw new Error(`Item not found: ${itemId} in corpus ${type}`);
|
|
199
|
+
}
|
|
200
|
+
return item.groundTruth;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Validate actual value against ground truth
|
|
204
|
+
*
|
|
205
|
+
* @param type - Corpus type
|
|
206
|
+
* @param itemId - Item identifier
|
|
207
|
+
* @param actualValue - Value to compare
|
|
208
|
+
* @param version - Version constraint
|
|
209
|
+
* @returns Comparison result
|
|
210
|
+
*/
|
|
211
|
+
async validateAgainstGroundTruth(type, itemId, actualValue, version = 'latest') {
|
|
212
|
+
const groundTruth = await this.getGroundTruth(type, itemId, version);
|
|
213
|
+
const matches = this.deepEquals(groundTruth, actualValue);
|
|
214
|
+
return {
|
|
215
|
+
itemId,
|
|
216
|
+
expected: groundTruth,
|
|
217
|
+
actual: actualValue,
|
|
218
|
+
matches
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Deep equality check
|
|
223
|
+
*/
|
|
224
|
+
deepEquals(a, b) {
|
|
225
|
+
if (a === b)
|
|
226
|
+
return true;
|
|
227
|
+
if (typeof a !== typeof b)
|
|
228
|
+
return false;
|
|
229
|
+
if (a === null || b === null)
|
|
230
|
+
return a === b;
|
|
231
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
232
|
+
if (a.length !== b.length)
|
|
233
|
+
return false;
|
|
234
|
+
return a.every((val, i) => this.deepEquals(val, b[i]));
|
|
235
|
+
}
|
|
236
|
+
if (typeof a === 'object' && typeof b === 'object') {
|
|
237
|
+
const keysA = Object.keys(a);
|
|
238
|
+
const keysB = Object.keys(b);
|
|
239
|
+
if (keysA.length !== keysB.length)
|
|
240
|
+
return false;
|
|
241
|
+
return keysA.every(key => this.deepEquals(a[key], b[key]));
|
|
242
|
+
}
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get corpus statistics
|
|
247
|
+
*
|
|
248
|
+
* @param type - Corpus type
|
|
249
|
+
* @param version - Version constraint
|
|
250
|
+
* @returns Statistics object
|
|
251
|
+
*/
|
|
252
|
+
async getCorpusStatistics(type, version = 'latest') {
|
|
253
|
+
if (!this.initialized) {
|
|
254
|
+
await this.initialize();
|
|
255
|
+
}
|
|
256
|
+
const resolvedVersion = version === 'latest'
|
|
257
|
+
? this.getLatestVersion(type)
|
|
258
|
+
: version;
|
|
259
|
+
if (!resolvedVersion) {
|
|
260
|
+
throw new Error(`No corpus found for type: ${type}`);
|
|
261
|
+
}
|
|
262
|
+
const key = this.getCorpusKey(type, resolvedVersion);
|
|
263
|
+
const manifest = this.manifests.get(key);
|
|
264
|
+
if (!manifest) {
|
|
265
|
+
throw new Error(`Corpus not found: ${type}@${resolvedVersion}`);
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
type: manifest.type,
|
|
269
|
+
version: manifest.version,
|
|
270
|
+
totalItems: manifest.itemCount,
|
|
271
|
+
labelDistribution: manifest.labelDistribution,
|
|
272
|
+
linkedNFRs: manifest.linkedNFRs,
|
|
273
|
+
lastUpdated: manifest.updatedAt
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Validate corpus schema and completeness
|
|
278
|
+
*
|
|
279
|
+
* @param type - Corpus type
|
|
280
|
+
* @param version - Version constraint
|
|
281
|
+
* @returns Validation result
|
|
282
|
+
*/
|
|
283
|
+
async validateCorpus(type, version = 'latest') {
|
|
284
|
+
const errors = [];
|
|
285
|
+
const warnings = [];
|
|
286
|
+
try {
|
|
287
|
+
const corpus = await this.loadCorpus(type, version);
|
|
288
|
+
const resolvedVersion = version === 'latest'
|
|
289
|
+
? this.getLatestVersion(type)
|
|
290
|
+
: version;
|
|
291
|
+
const key = this.getCorpusKey(type, resolvedVersion);
|
|
292
|
+
const manifest = this.manifests.get(key);
|
|
293
|
+
// Check item count matches
|
|
294
|
+
if (corpus.size !== manifest.itemCount) {
|
|
295
|
+
errors.push(`Item count mismatch: manifest says ${manifest.itemCount}, actual is ${corpus.size}`);
|
|
296
|
+
}
|
|
297
|
+
// Validate each item against schema
|
|
298
|
+
for (const [id, item] of corpus) {
|
|
299
|
+
const itemErrors = this.validateItem(item, manifest.schema);
|
|
300
|
+
for (const error of itemErrors) {
|
|
301
|
+
errors.push(`Item ${id}: ${error}`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Check for duplicate IDs (already handled by Map)
|
|
305
|
+
// Warn if corpus is small
|
|
306
|
+
if (corpus.size < 10) {
|
|
307
|
+
warnings.push(`Corpus has only ${corpus.size} items - may not be statistically significant`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
catch (error) {
|
|
311
|
+
errors.push(`Failed to load corpus: ${error.message}`);
|
|
312
|
+
}
|
|
313
|
+
return {
|
|
314
|
+
valid: errors.length === 0,
|
|
315
|
+
errors,
|
|
316
|
+
warnings
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Validate a single item against schema
|
|
321
|
+
*/
|
|
322
|
+
validateItem(item, schema) {
|
|
323
|
+
const errors = [];
|
|
324
|
+
// Check required item fields
|
|
325
|
+
if (!item.id) {
|
|
326
|
+
errors.push('Missing required field: id');
|
|
327
|
+
}
|
|
328
|
+
if (item.content === undefined) {
|
|
329
|
+
errors.push('Missing required field: content');
|
|
330
|
+
}
|
|
331
|
+
if (item.groundTruth === undefined) {
|
|
332
|
+
errors.push('Missing required field: groundTruth');
|
|
333
|
+
}
|
|
334
|
+
// Validate ground truth type
|
|
335
|
+
const gtType = typeof item.groundTruth;
|
|
336
|
+
if (schema.groundTruthType === 'boolean' && gtType !== 'boolean') {
|
|
337
|
+
errors.push(`Ground truth should be boolean, got ${gtType}`);
|
|
338
|
+
}
|
|
339
|
+
if (schema.groundTruthType === 'string' && gtType !== 'string') {
|
|
340
|
+
errors.push(`Ground truth should be string, got ${gtType}`);
|
|
341
|
+
}
|
|
342
|
+
if (schema.groundTruthType === 'number' && gtType !== 'number') {
|
|
343
|
+
errors.push(`Ground truth should be number, got ${gtType}`);
|
|
344
|
+
}
|
|
345
|
+
if (schema.groundTruthType === 'object' && (gtType !== 'object' || Array.isArray(item.groundTruth))) {
|
|
346
|
+
errors.push(`Ground truth should be object, got ${gtType}`);
|
|
347
|
+
}
|
|
348
|
+
if (schema.groundTruthType === 'array' && !Array.isArray(item.groundTruth)) {
|
|
349
|
+
errors.push(`Ground truth should be array, got ${gtType}`);
|
|
350
|
+
}
|
|
351
|
+
// Check required fields for object type
|
|
352
|
+
if (schema.groundTruthType === 'object' && schema.requiredFields && typeof item.groundTruth === 'object') {
|
|
353
|
+
for (const field of schema.requiredFields) {
|
|
354
|
+
if (!(field in item.groundTruth)) {
|
|
355
|
+
errors.push(`Ground truth missing required field: ${field}`);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// Check enum values for string type
|
|
360
|
+
if (schema.groundTruthType === 'string' && schema.enumValues && typeof item.groundTruth === 'string') {
|
|
361
|
+
if (!schema.enumValues.includes(item.groundTruth)) {
|
|
362
|
+
errors.push(`Ground truth value '${item.groundTruth}' not in allowed values: ${schema.enumValues.join(', ')}`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return errors;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* List all available corpora
|
|
369
|
+
*
|
|
370
|
+
* @returns Array of corpus type and version pairs
|
|
371
|
+
*/
|
|
372
|
+
async listCorpora() {
|
|
373
|
+
if (!this.initialized) {
|
|
374
|
+
await this.initialize();
|
|
375
|
+
}
|
|
376
|
+
const result = [];
|
|
377
|
+
for (const manifest of this.manifests.values()) {
|
|
378
|
+
result.push({
|
|
379
|
+
type: manifest.type,
|
|
380
|
+
version: manifest.version
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
return result.sort((a, b) => {
|
|
384
|
+
if (a.type !== b.type) {
|
|
385
|
+
return a.type.localeCompare(b.type);
|
|
386
|
+
}
|
|
387
|
+
return this.compareSemver(b.version, a.version);
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Check if a corpus exists
|
|
392
|
+
*
|
|
393
|
+
* @param type - Corpus type
|
|
394
|
+
* @param version - Version constraint
|
|
395
|
+
* @returns True if corpus exists
|
|
396
|
+
*/
|
|
397
|
+
async hasCorpus(type, version = 'latest') {
|
|
398
|
+
if (!this.initialized) {
|
|
399
|
+
await this.initialize();
|
|
400
|
+
}
|
|
401
|
+
if (version === 'latest') {
|
|
402
|
+
return this.getLatestVersion(type) !== null;
|
|
403
|
+
}
|
|
404
|
+
const key = this.getCorpusKey(type, version);
|
|
405
|
+
return this.manifests.has(key);
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Get all items from a corpus
|
|
409
|
+
*
|
|
410
|
+
* @param type - Corpus type
|
|
411
|
+
* @param version - Version constraint
|
|
412
|
+
* @returns Array of all items
|
|
413
|
+
*/
|
|
414
|
+
async getAllItems(type, version = 'latest') {
|
|
415
|
+
const corpus = await this.loadCorpus(type, version);
|
|
416
|
+
return Array.from(corpus.values());
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Batch validate multiple items against ground truth
|
|
420
|
+
*
|
|
421
|
+
* @param type - Corpus type
|
|
422
|
+
* @param predictions - Map of itemId to predicted value
|
|
423
|
+
* @param version - Version constraint
|
|
424
|
+
* @returns Array of comparison results with overall statistics
|
|
425
|
+
*/
|
|
426
|
+
async batchValidate(type, predictions, version = 'latest') {
|
|
427
|
+
const results = [];
|
|
428
|
+
let totalCorrect = 0;
|
|
429
|
+
for (const [itemId, actualValue] of predictions) {
|
|
430
|
+
try {
|
|
431
|
+
const result = await this.validateAgainstGroundTruth(type, itemId, actualValue, version);
|
|
432
|
+
results.push(result);
|
|
433
|
+
if (result.matches) {
|
|
434
|
+
totalCorrect++;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
catch {
|
|
438
|
+
results.push({
|
|
439
|
+
itemId,
|
|
440
|
+
expected: undefined,
|
|
441
|
+
actual: actualValue,
|
|
442
|
+
matches: false
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
return {
|
|
447
|
+
results,
|
|
448
|
+
accuracy: results.length > 0 ? totalCorrect / results.length : 0,
|
|
449
|
+
totalCorrect,
|
|
450
|
+
totalItems: results.length
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Get the corpora root path
|
|
455
|
+
*/
|
|
456
|
+
getRoot() {
|
|
457
|
+
return this.corporaRoot;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=ground-truth-manager.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ground Truth Corpus Module
|
|
3
|
+
*
|
|
4
|
+
* Multi-corpus management system for NFR validation.
|
|
5
|
+
*
|
|
6
|
+
* @module testing/corpus
|
|
7
|
+
*/
|
|
8
|
+
export { GroundTruthCorpusManager } from './ground-truth-manager.js';
|
|
9
|
+
export { CorpusBuilder } from './corpus-builder.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|