@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -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 +1462 -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 +882 -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 +64 -9
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { GRAPH_CONFIGS, getProjectIndexRoot, loadGlobalGraphConfigs } from "./types.js";
|
|
5
|
+
import { buildAiwgFortemiIndexExport, } from "./browser-export.js";
|
|
6
|
+
import { loadGraphIndexFile } from "./index-reader.js";
|
|
7
|
+
function syncDir(cwd, graph) {
|
|
8
|
+
loadGlobalGraphConfigs();
|
|
9
|
+
const config = GRAPH_CONFIGS[graph];
|
|
10
|
+
if (graph === "framework" || config?.shared) {
|
|
11
|
+
const xdgData = process.env.XDG_DATA_HOME ?? path.join(process.env.HOME ?? cwd, ".local", "share");
|
|
12
|
+
return path.join(xdgData, "aiwg", "index", "fortemi-core", graph);
|
|
13
|
+
}
|
|
14
|
+
return path.join(getProjectIndexRoot(cwd), "fortemi-core", graph);
|
|
15
|
+
}
|
|
16
|
+
function findPackageRoot(startDir) {
|
|
17
|
+
let current = startDir;
|
|
18
|
+
for (;;) {
|
|
19
|
+
if (fs.existsSync(path.join(current, "package.json")))
|
|
20
|
+
return current;
|
|
21
|
+
const parent = path.dirname(current);
|
|
22
|
+
if (parent === current)
|
|
23
|
+
return null;
|
|
24
|
+
current = parent;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function prebuiltDir(graph) {
|
|
28
|
+
const moduleDir = path.dirname(new URL(import.meta.url).pathname);
|
|
29
|
+
const packageRoot = findPackageRoot(moduleDir);
|
|
30
|
+
if (!packageRoot)
|
|
31
|
+
return null;
|
|
32
|
+
return path.join(packageRoot, "prebuilt", "fortemi-core", graph);
|
|
33
|
+
}
|
|
34
|
+
function sha256(text) {
|
|
35
|
+
return createHash("sha256").update(text).digest("hex");
|
|
36
|
+
}
|
|
37
|
+
function readManifest(manifestPath) {
|
|
38
|
+
return readManifestResult(manifestPath).manifest;
|
|
39
|
+
}
|
|
40
|
+
function readManifestResult(manifestPath) {
|
|
41
|
+
if (!fs.existsSync(manifestPath))
|
|
42
|
+
return { manifest: null, reason: null };
|
|
43
|
+
try {
|
|
44
|
+
return {
|
|
45
|
+
manifest: JSON.parse(fs.readFileSync(manifestPath, "utf-8")),
|
|
46
|
+
reason: null,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
return {
|
|
51
|
+
manifest: null,
|
|
52
|
+
reason: `manifest file is unreadable: ${err instanceof Error ? err.message : String(err)}`,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function sourceIndexBuiltAt(cwd, graph) {
|
|
57
|
+
const index = loadGraphIndexFile(cwd, "metadata.json", graph);
|
|
58
|
+
return typeof index?.builtAt === "string" ? index.builtAt : null;
|
|
59
|
+
}
|
|
60
|
+
export function syncFortemiCoreIndex(cwd, options = {}) {
|
|
61
|
+
const graph = options.graph ?? "project";
|
|
62
|
+
const dir = syncDir(cwd, graph);
|
|
63
|
+
const exportPath = path.join(dir, "aiwg-fortemi-index-v2.json");
|
|
64
|
+
const manifestPath = path.join(dir, "manifest.json");
|
|
65
|
+
const previous = readManifest(manifestPath);
|
|
66
|
+
const sourceBuiltAt = sourceIndexBuiltAt(cwd, graph);
|
|
67
|
+
const buildExport = (generatedAt) => {
|
|
68
|
+
const exported = buildAiwgFortemiIndexExport(cwd, {
|
|
69
|
+
graph,
|
|
70
|
+
repo: options.repo,
|
|
71
|
+
privacy: options.privacy,
|
|
72
|
+
generatedAt,
|
|
73
|
+
schemaVersion: "v2",
|
|
74
|
+
});
|
|
75
|
+
const json = JSON.stringify(exported, null, 2) + "\n";
|
|
76
|
+
const recordsWithConcepts = exported.items.filter((item) => (item.skos_concepts?.length ?? 0) > 0).length;
|
|
77
|
+
return {
|
|
78
|
+
generatedAt,
|
|
79
|
+
json,
|
|
80
|
+
checksum: sha256(json),
|
|
81
|
+
itemCount: exported.items.length,
|
|
82
|
+
skosCoverage: {
|
|
83
|
+
records_with_concepts: recordsWithConcepts,
|
|
84
|
+
total_records: exported.items.length,
|
|
85
|
+
ratio: exported.items.length === 0
|
|
86
|
+
? 1
|
|
87
|
+
: Math.round((recordsWithConcepts / exported.items.length) * 10000) /
|
|
88
|
+
10000,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
let built = buildExport(options.generatedAt ?? previous?.generated_at ?? new Date().toISOString());
|
|
93
|
+
let status = "created";
|
|
94
|
+
if (previous) {
|
|
95
|
+
if (previous.export_checksum === built.checksum) {
|
|
96
|
+
status = "unchanged";
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
status = "updated";
|
|
100
|
+
if (options.generatedAt === undefined) {
|
|
101
|
+
built = buildExport(new Date().toISOString());
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
106
|
+
fs.writeFileSync(exportPath, built.json, "utf-8");
|
|
107
|
+
const manifest = {
|
|
108
|
+
schema_version: "aiwg.fortemi.core-sync.v1",
|
|
109
|
+
backend: "fortemi-core",
|
|
110
|
+
graph,
|
|
111
|
+
generated_at: built.generatedAt,
|
|
112
|
+
export_path: path.relative(cwd, exportPath),
|
|
113
|
+
export_schema_version: "aiwg.fortemi.index.export.v2",
|
|
114
|
+
export_checksum: built.checksum,
|
|
115
|
+
item_count: built.itemCount,
|
|
116
|
+
skos_coverage: built.skosCoverage,
|
|
117
|
+
status,
|
|
118
|
+
source_index_built_at: sourceBuiltAt,
|
|
119
|
+
};
|
|
120
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n", "utf-8");
|
|
121
|
+
return manifest;
|
|
122
|
+
}
|
|
123
|
+
export function getFortemiCoreSyncStatus(cwd, graph = "project") {
|
|
124
|
+
const dir = syncDir(cwd, graph);
|
|
125
|
+
const manifestPath = path.join(dir, "manifest.json");
|
|
126
|
+
const exportPath = path.join(dir, "aiwg-fortemi-index-v2.json");
|
|
127
|
+
const { manifest, reason: manifestReadReason } = readManifestResult(manifestPath);
|
|
128
|
+
if (!manifest) {
|
|
129
|
+
return {
|
|
130
|
+
optedIn: manifestReadReason !== null,
|
|
131
|
+
source: "none",
|
|
132
|
+
graph,
|
|
133
|
+
location: dir,
|
|
134
|
+
manifestPath,
|
|
135
|
+
exportPath,
|
|
136
|
+
built: false,
|
|
137
|
+
stale: manifestReadReason !== null,
|
|
138
|
+
itemCount: null,
|
|
139
|
+
exportChecksum: null,
|
|
140
|
+
generatedAt: null,
|
|
141
|
+
sourceIndexBuiltAt: null,
|
|
142
|
+
reason: manifestReadReason,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const exportExists = fs.existsSync(exportPath);
|
|
146
|
+
let exportReadReason = null;
|
|
147
|
+
let exportChecksumMatches = false;
|
|
148
|
+
if (exportExists) {
|
|
149
|
+
try {
|
|
150
|
+
const exportText = fs.readFileSync(exportPath, "utf-8");
|
|
151
|
+
const exported = JSON.parse(exportText);
|
|
152
|
+
exportChecksumMatches = sha256(exportText) === manifest.export_checksum;
|
|
153
|
+
if (exportChecksumMatches) {
|
|
154
|
+
if (exported.schema_version !== manifest.export_schema_version) {
|
|
155
|
+
exportReadReason = `export schema '${exported.schema_version}' does not match manifest '${manifest.export_schema_version}'`;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
exportReadReason = "export checksum does not match manifest";
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
exportReadReason = `export file is unreadable: ${err instanceof Error ? err.message : String(err)}`;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const currentSourceBuiltAt = sourceIndexBuiltAt(cwd, graph);
|
|
167
|
+
const sourceIsNewer = exportExists &&
|
|
168
|
+
exportReadReason === null &&
|
|
169
|
+
manifest.source_index_built_at !== null &&
|
|
170
|
+
currentSourceBuiltAt !== null &&
|
|
171
|
+
Date.parse(currentSourceBuiltAt) >
|
|
172
|
+
Date.parse(manifest.source_index_built_at);
|
|
173
|
+
const stale = !exportExists || exportReadReason !== null || sourceIsNewer;
|
|
174
|
+
return {
|
|
175
|
+
optedIn: true,
|
|
176
|
+
source: "local",
|
|
177
|
+
graph,
|
|
178
|
+
location: dir,
|
|
179
|
+
manifestPath,
|
|
180
|
+
exportPath,
|
|
181
|
+
built: exportExists,
|
|
182
|
+
stale,
|
|
183
|
+
itemCount: manifest.item_count,
|
|
184
|
+
exportChecksum: manifest.export_checksum,
|
|
185
|
+
generatedAt: manifest.generated_at,
|
|
186
|
+
sourceIndexBuiltAt: manifest.source_index_built_at,
|
|
187
|
+
reason: !exportExists
|
|
188
|
+
? "manifest exists but export file is missing"
|
|
189
|
+
: exportReadReason
|
|
190
|
+
? exportReadReason
|
|
191
|
+
: sourceIsNewer
|
|
192
|
+
? "source index is newer than the Fortemi Core static cache"
|
|
193
|
+
: null,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
export function getFortemiCorePrebuiltStatus(graph = "framework") {
|
|
197
|
+
const dir = prebuiltDir(graph) ?? path.join(process.cwd(), "prebuilt", "fortemi-core", graph);
|
|
198
|
+
const manifestPath = path.join(dir, "manifest.json");
|
|
199
|
+
const exportPath = path.join(dir, "aiwg-fortemi-index-v2.json");
|
|
200
|
+
const { manifest, reason: manifestReadReason } = readManifestResult(manifestPath);
|
|
201
|
+
if (!manifest) {
|
|
202
|
+
return {
|
|
203
|
+
optedIn: false,
|
|
204
|
+
source: "none",
|
|
205
|
+
graph,
|
|
206
|
+
location: dir,
|
|
207
|
+
manifestPath,
|
|
208
|
+
exportPath,
|
|
209
|
+
built: false,
|
|
210
|
+
stale: false,
|
|
211
|
+
itemCount: null,
|
|
212
|
+
exportChecksum: null,
|
|
213
|
+
generatedAt: null,
|
|
214
|
+
sourceIndexBuiltAt: null,
|
|
215
|
+
reason: manifestReadReason,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
const exportExists = fs.existsSync(exportPath);
|
|
219
|
+
let reason = null;
|
|
220
|
+
if (exportExists) {
|
|
221
|
+
try {
|
|
222
|
+
const exportText = fs.readFileSync(exportPath, "utf-8");
|
|
223
|
+
const exported = JSON.parse(exportText);
|
|
224
|
+
if (sha256(exportText) !== manifest.export_checksum) {
|
|
225
|
+
reason = "prebuilt export checksum does not match manifest";
|
|
226
|
+
}
|
|
227
|
+
else if (exported.schema_version !== manifest.export_schema_version) {
|
|
228
|
+
reason = `prebuilt export schema '${exported.schema_version}' does not match manifest '${manifest.export_schema_version}'`;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
reason = `prebuilt export file is unreadable: ${err instanceof Error ? err.message : String(err)}`;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
optedIn: true,
|
|
237
|
+
source: "prebuilt",
|
|
238
|
+
graph,
|
|
239
|
+
location: dir,
|
|
240
|
+
manifestPath,
|
|
241
|
+
exportPath,
|
|
242
|
+
built: exportExists,
|
|
243
|
+
stale: !exportExists || reason !== null,
|
|
244
|
+
itemCount: manifest.item_count,
|
|
245
|
+
exportChecksum: manifest.export_checksum,
|
|
246
|
+
generatedAt: manifest.generated_at,
|
|
247
|
+
sourceIndexBuiltAt: manifest.source_index_built_at,
|
|
248
|
+
reason: !exportExists ? "prebuilt manifest exists but export file is missing" : reason,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=fortemi-core-sync.js.map
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { buildAiwgFortemiIndexExport, } from "./browser-export.js";
|
|
4
|
+
async function loadFortemiShardConverter() {
|
|
5
|
+
let core;
|
|
6
|
+
try {
|
|
7
|
+
core = (await import(
|
|
8
|
+
/* @vite-ignore */ "@fortemi/core/aiwg-index"));
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
throw new Error("Portable Fortemi shard export requires @fortemi/core with aiwgFortemiIndexToKnowledgeShard.");
|
|
12
|
+
}
|
|
13
|
+
if (!core.aiwgFortemiIndexToKnowledgeShard) {
|
|
14
|
+
throw new Error("Installed @fortemi/core does not support portable AIWG shards; upgrade to the release containing aiwgFortemiIndexToKnowledgeShard.");
|
|
15
|
+
}
|
|
16
|
+
return core.aiwgFortemiIndexToKnowledgeShard;
|
|
17
|
+
}
|
|
18
|
+
export async function buildAiwgFortemiKnowledgeShard(cwd, options = {}, converter) {
|
|
19
|
+
const exported = buildAiwgFortemiIndexExport(cwd, {
|
|
20
|
+
...options,
|
|
21
|
+
schemaVersion: "v2",
|
|
22
|
+
});
|
|
23
|
+
const convert = converter ?? (await loadFortemiShardConverter());
|
|
24
|
+
return convert(exported, {
|
|
25
|
+
createdAt: options.generatedAt,
|
|
26
|
+
matricVersion: "aiwg",
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export async function writeAiwgFortemiKnowledgeShard(cwd, outPath, options = {}, converter) {
|
|
30
|
+
const exported = buildAiwgFortemiIndexExport(cwd, {
|
|
31
|
+
...options,
|
|
32
|
+
schemaVersion: "v2",
|
|
33
|
+
});
|
|
34
|
+
const convert = converter ?? (await loadFortemiShardConverter());
|
|
35
|
+
const shard = await convert(exported, {
|
|
36
|
+
createdAt: options.generatedAt,
|
|
37
|
+
matricVersion: "aiwg",
|
|
38
|
+
});
|
|
39
|
+
const resolved = path.resolve(cwd, outPath);
|
|
40
|
+
fs.mkdirSync(path.dirname(resolved), { recursive: true });
|
|
41
|
+
fs.writeFileSync(resolved, shard);
|
|
42
|
+
return { bytes: shard.byteLength, items: exported.items.length, outPath: resolved };
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=fortemi-shard-export.js.map
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lexical full-text ranking over artifact bodies (BM25).
|
|
3
|
+
*
|
|
4
|
+
* The artifact index stores only metadata + a 500-char summary per node
|
|
5
|
+
* (see `MetadataEntry`), so `aiwg index query` is metadata-scoped. This
|
|
6
|
+
* module adds a lexical full-text vector: `aiwg index query "..." --fulltext`
|
|
7
|
+
* reads the candidate nodes' source bodies and ranks them with Okapi BM25.
|
|
8
|
+
*
|
|
9
|
+
* This is deliberately distinct from the semantic/embedding vector
|
|
10
|
+
* (`embedding-index.ts`, `--semantic`): full-text is lexical recall (exact
|
|
11
|
+
* term matches in the body), semantic is conceptual. Both are composable.
|
|
12
|
+
*
|
|
13
|
+
* No persisted inverted index is built — ranking reads candidate bodies at
|
|
14
|
+
* query time. This keeps the on-disk index free of regenerable full-text
|
|
15
|
+
* bloat (the anti-bloat posture of #1488) and stays a pure query-side
|
|
16
|
+
* feature with no index-build change.
|
|
17
|
+
*
|
|
18
|
+
* @implements #1494
|
|
19
|
+
* @tests @test/unit/artifacts/fulltext.test.ts
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Stop-words dropped during tokenization. Kept intentionally small so a
|
|
23
|
+
* user's domain nouns/verbs dominate. Mirrors the query-engine's set.
|
|
24
|
+
*/
|
|
25
|
+
const STOPWORDS = new Set([
|
|
26
|
+
'the', 'a', 'an', 'and', 'or', 'of', 'for', 'to', 'in', 'on',
|
|
27
|
+
'with', 'into', 'from', 'is', 'are', 'be', 'i', 'we', 'my', 'it',
|
|
28
|
+
'this', 'that', 'as', 'at', 'by', 'but',
|
|
29
|
+
]);
|
|
30
|
+
/**
|
|
31
|
+
* Tokenize body/query text into lowercased terms. Splits on non-alphanumeric
|
|
32
|
+
* (keeping intra-word hyphens), drops stop-words and single-char tokens.
|
|
33
|
+
*/
|
|
34
|
+
export function tokenizeText(text) {
|
|
35
|
+
return text
|
|
36
|
+
.toLowerCase()
|
|
37
|
+
.split(/[^a-z0-9-]+/)
|
|
38
|
+
.filter((t) => t.length > 1 && !STOPWORDS.has(t));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Rank documents against a query using Okapi BM25.
|
|
42
|
+
*
|
|
43
|
+
* Returns only docs that matched at least one query term, sorted by score
|
|
44
|
+
* descending. Scores are normalized so the top hit is 1.0 (BM25 is otherwise
|
|
45
|
+
* unbounded), matching the 0–1 score convention the rest of the query surface
|
|
46
|
+
* uses; `rawScore` carries the un-normalized value.
|
|
47
|
+
*/
|
|
48
|
+
export function bm25Rank(docs, query, options = {}) {
|
|
49
|
+
const k1 = options.k1 ?? 1.5;
|
|
50
|
+
const b = options.b ?? 0.75;
|
|
51
|
+
const queryTerms = Array.from(new Set(tokenizeText(query)));
|
|
52
|
+
if (queryTerms.length === 0 || docs.length === 0)
|
|
53
|
+
return [];
|
|
54
|
+
const queryTermSet = new Set(queryTerms);
|
|
55
|
+
// Per-doc term frequencies (restricted to query terms) + doc lengths.
|
|
56
|
+
const N = docs.length;
|
|
57
|
+
const tfByDoc = [];
|
|
58
|
+
const lengths = [];
|
|
59
|
+
const df = new Map();
|
|
60
|
+
let totalLen = 0;
|
|
61
|
+
for (const doc of docs) {
|
|
62
|
+
const tokens = tokenizeText(doc.text);
|
|
63
|
+
lengths.push(tokens.length);
|
|
64
|
+
totalLen += tokens.length;
|
|
65
|
+
const tf = new Map();
|
|
66
|
+
for (const tok of tokens) {
|
|
67
|
+
if (queryTermSet.has(tok))
|
|
68
|
+
tf.set(tok, (tf.get(tok) ?? 0) + 1);
|
|
69
|
+
}
|
|
70
|
+
tfByDoc.push(tf);
|
|
71
|
+
for (const term of tf.keys())
|
|
72
|
+
df.set(term, (df.get(term) ?? 0) + 1);
|
|
73
|
+
}
|
|
74
|
+
const avgdl = totalLen / N || 1;
|
|
75
|
+
// BM25+ IDF (always positive): ln(1 + (N - df + 0.5)/(df + 0.5)).
|
|
76
|
+
const idf = (term) => {
|
|
77
|
+
const n = df.get(term) ?? 0;
|
|
78
|
+
return Math.log(1 + (N - n + 0.5) / (n + 0.5));
|
|
79
|
+
};
|
|
80
|
+
const hits = [];
|
|
81
|
+
for (let i = 0; i < docs.length; i++) {
|
|
82
|
+
const tf = tfByDoc[i];
|
|
83
|
+
if (tf.size === 0)
|
|
84
|
+
continue;
|
|
85
|
+
const len = lengths[i];
|
|
86
|
+
let score = 0;
|
|
87
|
+
const matched = [];
|
|
88
|
+
for (const term of queryTerms) {
|
|
89
|
+
const f = tf.get(term);
|
|
90
|
+
if (!f)
|
|
91
|
+
continue;
|
|
92
|
+
matched.push(term);
|
|
93
|
+
const denom = f + k1 * (1 - b + (b * len) / avgdl);
|
|
94
|
+
score += idf(term) * ((f * (k1 + 1)) / denom);
|
|
95
|
+
}
|
|
96
|
+
if (score > 0)
|
|
97
|
+
hits.push({ id: docs[i].id, score, rawScore: score, matchedTerms: matched });
|
|
98
|
+
}
|
|
99
|
+
hits.sort((a, b2) => b2.rawScore - a.rawScore || a.id.localeCompare(b2.id));
|
|
100
|
+
// Normalize so the top hit is 1.0 (preserve raw in rawScore).
|
|
101
|
+
const max = hits.length ? hits[0].rawScore : 0;
|
|
102
|
+
if (max > 0) {
|
|
103
|
+
for (const h of hits)
|
|
104
|
+
h.score = h.rawScore / max;
|
|
105
|
+
}
|
|
106
|
+
return hits;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=fulltext.js.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph Backend Abstraction
|
|
3
|
+
*
|
|
4
|
+
* Swappable interface for graph storage and traversal. The default
|
|
5
|
+
* JsonGraphBackend wraps the existing DependencyGraph type with zero
|
|
6
|
+
* additional dependencies. Optional backends (graphology, SQLite) provide
|
|
7
|
+
* richer traversal and persistence at the cost of extra packages.
|
|
8
|
+
*
|
|
9
|
+
* @implements #727
|
|
10
|
+
* @source @src/artifacts/types.ts
|
|
11
|
+
* @tests @test/unit/artifacts/graph-backend.test.ts
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Create a graph backend instance.
|
|
15
|
+
*
|
|
16
|
+
* The json backend is always available. graphology and sqlite require
|
|
17
|
+
* their respective optional dependencies to be installed.
|
|
18
|
+
*
|
|
19
|
+
* @param type - Backend type identifier
|
|
20
|
+
* @returns A new GraphBackend instance
|
|
21
|
+
* @throws Error if the requested backend's dependencies are not installed
|
|
22
|
+
*/
|
|
23
|
+
export async function createGraphBackend(type = 'json') {
|
|
24
|
+
switch (type) {
|
|
25
|
+
case 'json': {
|
|
26
|
+
const { JsonGraphBackend } = await import('./backends/json-backend.js');
|
|
27
|
+
return new JsonGraphBackend();
|
|
28
|
+
}
|
|
29
|
+
case 'graphology': {
|
|
30
|
+
try {
|
|
31
|
+
const { GraphologyBackend } = await import('./backends/graphology-backend.js');
|
|
32
|
+
return GraphologyBackend.create();
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
throw new Error('graphology backend requires: npm install graphology graphology-types graphology-operators graphology-traversal');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
case 'sqlite': {
|
|
39
|
+
try {
|
|
40
|
+
const { SqliteGraphBackend } = await import('./backends/sqlite-backend.js');
|
|
41
|
+
return new SqliteGraphBackend();
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
throw new Error('sqlite backend requires: npm install better-sqlite3 @types/better-sqlite3');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
default:
|
|
48
|
+
throw new Error(`Unknown graph backend: ${type}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=graph-backend.js.map
|