@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,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example Templates
|
|
3
|
+
*
|
|
4
|
+
* Pre-defined topic templates for example generation.
|
|
5
|
+
* Provides structured patterns for common technical topics.
|
|
6
|
+
*/
|
|
7
|
+
export const TOPIC_TEMPLATES = [
|
|
8
|
+
{
|
|
9
|
+
topic: 'caching',
|
|
10
|
+
category: 'performance',
|
|
11
|
+
beforeTemplates: [
|
|
12
|
+
'It is important to note that caching plays a crucial role in modern applications. When delving into caching strategies, one must consider various aspects. At the end of the day, comprehensive caching is absolutely essential.',
|
|
13
|
+
],
|
|
14
|
+
afterHints: [
|
|
15
|
+
'Add specific cache types (Redis, Memcached)',
|
|
16
|
+
'Include hit/miss ratios and latency improvements',
|
|
17
|
+
'Mention eviction policies (LRU, LFU)',
|
|
18
|
+
'Acknowledge cache invalidation challenges',
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
topic: 'authentication',
|
|
23
|
+
category: 'security',
|
|
24
|
+
beforeTemplates: [
|
|
25
|
+
'Authentication is a comprehensive solution for securing applications. It is worth noting that this cutting-edge approach leverages state-of-the-art techniques. Various aspects should be carefully considered.',
|
|
26
|
+
],
|
|
27
|
+
afterHints: [
|
|
28
|
+
'Specify OAuth 2.0, JWT, or specific protocols',
|
|
29
|
+
'Mention security trade-offs (session vs stateless)',
|
|
30
|
+
'Include token expiration times',
|
|
31
|
+
'Acknowledge MFA complexity',
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
topic: 'database optimization',
|
|
36
|
+
category: 'performance',
|
|
37
|
+
beforeTemplates: [
|
|
38
|
+
'Database optimization involves several key considerations. Firstly, schema design must be carefully planned. Secondly, indexing requires attention. Thirdly, query optimization is essential. Finally, monitoring should be comprehensive.',
|
|
39
|
+
],
|
|
40
|
+
afterHints: [
|
|
41
|
+
'Name specific databases (PostgreSQL, MySQL)',
|
|
42
|
+
'Include query execution times',
|
|
43
|
+
'Mention index types (B-tree, GiST)',
|
|
44
|
+
'Acknowledge n+1 query problems',
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
topic: 'microservices',
|
|
49
|
+
category: 'architecture',
|
|
50
|
+
beforeTemplates: [
|
|
51
|
+
'One should consider microservices carefully. It must be noted that proper implementation may help to achieve desired results. The system can serve to improve scalability significantly.',
|
|
52
|
+
],
|
|
53
|
+
afterHints: [
|
|
54
|
+
'Mention service mesh (Istio, Linkerd)',
|
|
55
|
+
'Include deployment complexity trade-offs',
|
|
56
|
+
'Specify communication patterns (REST, gRPC)',
|
|
57
|
+
'Acknowledge distributed tracing challenges',
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
topic: 'API design',
|
|
62
|
+
category: 'design',
|
|
63
|
+
beforeTemplates: [
|
|
64
|
+
'API design is important. Moreover, it provides benefits. Furthermore, it should be considered. Additionally, proper implementation is crucial.',
|
|
65
|
+
],
|
|
66
|
+
afterHints: [
|
|
67
|
+
'Specify REST, GraphQL, or gRPC',
|
|
68
|
+
'Include versioning strategies',
|
|
69
|
+
'Mention rate limiting specifics',
|
|
70
|
+
'Acknowledge backward compatibility pain points',
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
/**
|
|
75
|
+
* Get template by topic name
|
|
76
|
+
*/
|
|
77
|
+
export function getTemplateByTopic(topic) {
|
|
78
|
+
return TOPIC_TEMPLATES.find(t => t.topic.toLowerCase() === topic.toLowerCase());
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get templates by category
|
|
82
|
+
*/
|
|
83
|
+
export function getTemplatesByCategory(category) {
|
|
84
|
+
return TOPIC_TEMPLATES.filter(t => t.category.toLowerCase() === category.toLowerCase());
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get all topic names
|
|
88
|
+
*/
|
|
89
|
+
export function getAllTopics() {
|
|
90
|
+
return TOPIC_TEMPLATES.map(t => t.topic);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get all categories
|
|
94
|
+
*/
|
|
95
|
+
export function getAllCategories() {
|
|
96
|
+
const categories = TOPIC_TEMPLATES.map(t => t.category);
|
|
97
|
+
return Array.from(new Set(categories));
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=example-templates.js.map
|
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Library
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive, categorized database of AI writing patterns with detection algorithms,
|
|
5
|
+
* severity levels, and replacement suggestions.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile } from 'fs/promises';
|
|
8
|
+
import { join, dirname } from 'path';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
import * as yaml from 'yaml';
|
|
12
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const __dirname = dirname(__filename);
|
|
14
|
+
/**
|
|
15
|
+
* Pattern Library - Comprehensive AI pattern detection database
|
|
16
|
+
*/
|
|
17
|
+
export class PatternLibrary {
|
|
18
|
+
patterns = [];
|
|
19
|
+
patternsByCategory = new Map();
|
|
20
|
+
patternsBySeverity = new Map();
|
|
21
|
+
patternsById = new Map();
|
|
22
|
+
initialized = false;
|
|
23
|
+
constructor() {
|
|
24
|
+
// Patterns loaded on first use (lazy loading)
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Initialize the library by loading all patterns
|
|
28
|
+
*/
|
|
29
|
+
async initialize() {
|
|
30
|
+
if (this.initialized) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const patternsDir = join(__dirname, 'patterns');
|
|
34
|
+
const patternFiles = [
|
|
35
|
+
'banned-phrases.json',
|
|
36
|
+
'formulaic-structures.json',
|
|
37
|
+
'hedging-language.json',
|
|
38
|
+
'weak-verbs.json',
|
|
39
|
+
'generic-adjectives.json',
|
|
40
|
+
'transition-words.json'
|
|
41
|
+
];
|
|
42
|
+
for (const file of patternFiles) {
|
|
43
|
+
const filePath = join(patternsDir, file);
|
|
44
|
+
if (existsSync(filePath)) {
|
|
45
|
+
const content = await readFile(filePath, 'utf-8');
|
|
46
|
+
const filePatterns = JSON.parse(content);
|
|
47
|
+
// Convert string patterns to RegExp
|
|
48
|
+
for (const pattern of filePatterns) {
|
|
49
|
+
if (typeof pattern.pattern === 'string') {
|
|
50
|
+
pattern.pattern = this.createRegExpFromPattern(pattern.pattern);
|
|
51
|
+
}
|
|
52
|
+
this.addPattern(pattern);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
this.initialized = true;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get all patterns
|
|
60
|
+
*/
|
|
61
|
+
getAllPatterns() {
|
|
62
|
+
return [...this.patterns];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get pattern by ID
|
|
66
|
+
*/
|
|
67
|
+
getPatternById(id) {
|
|
68
|
+
return this.patternsById.get(id);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get patterns by category
|
|
72
|
+
*/
|
|
73
|
+
getPatternsByCategory(category) {
|
|
74
|
+
return this.patternsByCategory.get(category) || [];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get patterns by severity
|
|
78
|
+
*/
|
|
79
|
+
getPatternsBySeverity(severity) {
|
|
80
|
+
return this.patternsBySeverity.get(severity) || [];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get patterns by domain
|
|
84
|
+
*/
|
|
85
|
+
getPatternsByDomain(domain) {
|
|
86
|
+
return this.patterns.filter(p => !p.domains || p.domains.length === 0 || p.domains.includes(domain));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Detect all patterns in text
|
|
90
|
+
*/
|
|
91
|
+
detectPatterns(text) {
|
|
92
|
+
const matches = [];
|
|
93
|
+
for (const pattern of this.patterns) {
|
|
94
|
+
const patternMatches = this.findPatternMatches(text, pattern);
|
|
95
|
+
matches.push(...patternMatches);
|
|
96
|
+
}
|
|
97
|
+
return matches;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Detect patterns by category
|
|
101
|
+
*/
|
|
102
|
+
detectPatternsByCategory(text, category) {
|
|
103
|
+
const categoryPatterns = this.getPatternsByCategory(category);
|
|
104
|
+
const matches = [];
|
|
105
|
+
for (const pattern of categoryPatterns) {
|
|
106
|
+
const patternMatches = this.findPatternMatches(text, pattern);
|
|
107
|
+
matches.push(...patternMatches);
|
|
108
|
+
}
|
|
109
|
+
return matches;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Detect only critical patterns
|
|
113
|
+
*/
|
|
114
|
+
detectCriticalPatterns(text) {
|
|
115
|
+
const criticalPatterns = this.getPatternsBySeverity('critical');
|
|
116
|
+
const matches = [];
|
|
117
|
+
for (const pattern of criticalPatterns) {
|
|
118
|
+
const patternMatches = this.findPatternMatches(text, pattern);
|
|
119
|
+
matches.push(...patternMatches);
|
|
120
|
+
}
|
|
121
|
+
return matches;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get pattern count
|
|
125
|
+
*/
|
|
126
|
+
getPatternCount() {
|
|
127
|
+
return this.patterns.length;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get pattern count by category
|
|
131
|
+
*/
|
|
132
|
+
getPatternCountByCategory() {
|
|
133
|
+
const counts = new Map();
|
|
134
|
+
for (const [category, patterns] of this.patternsByCategory) {
|
|
135
|
+
counts.set(category, patterns.length);
|
|
136
|
+
}
|
|
137
|
+
return counts;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get pattern count by severity
|
|
141
|
+
*/
|
|
142
|
+
getPatternCountBySeverity() {
|
|
143
|
+
const counts = new Map();
|
|
144
|
+
for (const [severity, patterns] of this.patternsBySeverity) {
|
|
145
|
+
counts.set(severity, patterns.length);
|
|
146
|
+
}
|
|
147
|
+
return counts;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Add a new pattern
|
|
151
|
+
*/
|
|
152
|
+
addPattern(pattern) {
|
|
153
|
+
// Check for duplicate ID
|
|
154
|
+
if (this.patternsById.has(pattern.id)) {
|
|
155
|
+
throw new Error(`Pattern with ID "${pattern.id}" already exists`);
|
|
156
|
+
}
|
|
157
|
+
this.patterns.push(pattern);
|
|
158
|
+
this.patternsById.set(pattern.id, pattern);
|
|
159
|
+
// Add to category index
|
|
160
|
+
if (!this.patternsByCategory.has(pattern.category)) {
|
|
161
|
+
this.patternsByCategory.set(pattern.category, []);
|
|
162
|
+
}
|
|
163
|
+
this.patternsByCategory.get(pattern.category).push(pattern);
|
|
164
|
+
// Add to severity index
|
|
165
|
+
if (!this.patternsBySeverity.has(pattern.severity)) {
|
|
166
|
+
this.patternsBySeverity.set(pattern.severity, []);
|
|
167
|
+
}
|
|
168
|
+
this.patternsBySeverity.get(pattern.severity).push(pattern);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Remove a pattern by ID
|
|
172
|
+
*/
|
|
173
|
+
removePattern(id) {
|
|
174
|
+
const pattern = this.patternsById.get(id);
|
|
175
|
+
if (!pattern) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// Remove from main array
|
|
179
|
+
const index = this.patterns.findIndex(p => p.id === id);
|
|
180
|
+
if (index !== -1) {
|
|
181
|
+
this.patterns.splice(index, 1);
|
|
182
|
+
}
|
|
183
|
+
// Remove from indices
|
|
184
|
+
this.patternsById.delete(id);
|
|
185
|
+
const categoryPatterns = this.patternsByCategory.get(pattern.category);
|
|
186
|
+
if (categoryPatterns) {
|
|
187
|
+
const catIndex = categoryPatterns.findIndex(p => p.id === id);
|
|
188
|
+
if (catIndex !== -1) {
|
|
189
|
+
categoryPatterns.splice(catIndex, 1);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const severityPatterns = this.patternsBySeverity.get(pattern.severity);
|
|
193
|
+
if (severityPatterns) {
|
|
194
|
+
const sevIndex = severityPatterns.findIndex(p => p.id === id);
|
|
195
|
+
if (sevIndex !== -1) {
|
|
196
|
+
severityPatterns.splice(sevIndex, 1);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Update a pattern
|
|
202
|
+
*/
|
|
203
|
+
updatePattern(id, updates) {
|
|
204
|
+
const pattern = this.patternsById.get(id);
|
|
205
|
+
if (!pattern) {
|
|
206
|
+
throw new Error(`Pattern with ID "${id}" not found`);
|
|
207
|
+
}
|
|
208
|
+
// If category or severity changes, need to update indices
|
|
209
|
+
if (updates.category && updates.category !== pattern.category) {
|
|
210
|
+
// Remove from old category
|
|
211
|
+
const oldCategoryPatterns = this.patternsByCategory.get(pattern.category);
|
|
212
|
+
if (oldCategoryPatterns) {
|
|
213
|
+
const index = oldCategoryPatterns.findIndex(p => p.id === id);
|
|
214
|
+
if (index !== -1) {
|
|
215
|
+
oldCategoryPatterns.splice(index, 1);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Add to new category
|
|
219
|
+
if (!this.patternsByCategory.has(updates.category)) {
|
|
220
|
+
this.patternsByCategory.set(updates.category, []);
|
|
221
|
+
}
|
|
222
|
+
this.patternsByCategory.get(updates.category).push(pattern);
|
|
223
|
+
}
|
|
224
|
+
if (updates.severity && updates.severity !== pattern.severity) {
|
|
225
|
+
// Remove from old severity
|
|
226
|
+
const oldSeverityPatterns = this.patternsBySeverity.get(pattern.severity);
|
|
227
|
+
if (oldSeverityPatterns) {
|
|
228
|
+
const index = oldSeverityPatterns.findIndex(p => p.id === id);
|
|
229
|
+
if (index !== -1) {
|
|
230
|
+
oldSeverityPatterns.splice(index, 1);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Add to new severity
|
|
234
|
+
if (!this.patternsBySeverity.has(updates.severity)) {
|
|
235
|
+
this.patternsBySeverity.set(updates.severity, []);
|
|
236
|
+
}
|
|
237
|
+
this.patternsBySeverity.get(updates.severity).push(pattern);
|
|
238
|
+
}
|
|
239
|
+
// Apply updates
|
|
240
|
+
Object.assign(pattern, updates);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Search patterns by query string
|
|
244
|
+
*/
|
|
245
|
+
searchPatterns(query) {
|
|
246
|
+
const lowerQuery = query.toLowerCase();
|
|
247
|
+
return this.patterns.filter(pattern => {
|
|
248
|
+
return (pattern.id.toLowerCase().includes(lowerQuery) ||
|
|
249
|
+
pattern.category.toLowerCase().includes(lowerQuery) ||
|
|
250
|
+
(pattern.subcategory && pattern.subcategory.toLowerCase().includes(lowerQuery)) ||
|
|
251
|
+
(pattern.context && pattern.context.toLowerCase().includes(lowerQuery)) ||
|
|
252
|
+
pattern.examples.some(ex => ex.toLowerCase().includes(lowerQuery)) ||
|
|
253
|
+
(pattern.replacements && pattern.replacements.some(r => r.toLowerCase().includes(lowerQuery))));
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Filter patterns by criteria
|
|
258
|
+
*/
|
|
259
|
+
filterPatterns(filter) {
|
|
260
|
+
let filtered = [...this.patterns];
|
|
261
|
+
if (filter.categories && filter.categories.length > 0) {
|
|
262
|
+
filtered = filtered.filter(p => filter.categories.includes(p.category));
|
|
263
|
+
}
|
|
264
|
+
if (filter.severities && filter.severities.length > 0) {
|
|
265
|
+
filtered = filtered.filter(p => filter.severities.includes(p.severity));
|
|
266
|
+
}
|
|
267
|
+
if (filter.domains && filter.domains.length > 0) {
|
|
268
|
+
filtered = filtered.filter(p => !p.domains || p.domains.length === 0 ||
|
|
269
|
+
p.domains.some(d => filter.domains.includes(d)));
|
|
270
|
+
}
|
|
271
|
+
if (filter.minConfidence !== undefined) {
|
|
272
|
+
filtered = filtered.filter(p => p.confidence >= filter.minConfidence);
|
|
273
|
+
}
|
|
274
|
+
if (filter.maxConfidence !== undefined) {
|
|
275
|
+
filtered = filtered.filter(p => p.confidence <= filter.maxConfidence);
|
|
276
|
+
}
|
|
277
|
+
if (filter.frequencies && filter.frequencies.length > 0) {
|
|
278
|
+
filtered = filtered.filter(p => filter.frequencies.includes(p.frequency));
|
|
279
|
+
}
|
|
280
|
+
if (filter.subcategories && filter.subcategories.length > 0) {
|
|
281
|
+
filtered = filtered.filter(p => p.subcategory && filter.subcategories.includes(p.subcategory));
|
|
282
|
+
}
|
|
283
|
+
return filtered;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Export patterns in various formats
|
|
287
|
+
*/
|
|
288
|
+
exportPatterns(format) {
|
|
289
|
+
switch (format) {
|
|
290
|
+
case 'json':
|
|
291
|
+
return JSON.stringify(this.patterns, null, 2);
|
|
292
|
+
case 'yaml':
|
|
293
|
+
return yaml.stringify(this.patterns);
|
|
294
|
+
case 'markdown':
|
|
295
|
+
return this.exportAsMarkdown();
|
|
296
|
+
default:
|
|
297
|
+
throw new Error(`Unsupported export format: ${format}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Import patterns from JSON or YAML
|
|
302
|
+
*/
|
|
303
|
+
importPatterns(data, format) {
|
|
304
|
+
let patterns;
|
|
305
|
+
if (format === 'json') {
|
|
306
|
+
patterns = JSON.parse(data);
|
|
307
|
+
}
|
|
308
|
+
else if (format === 'yaml') {
|
|
309
|
+
patterns = yaml.parse(data);
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
throw new Error(`Unsupported import format: ${format}`);
|
|
313
|
+
}
|
|
314
|
+
for (const pattern of patterns) {
|
|
315
|
+
// Convert string patterns to RegExp
|
|
316
|
+
if (typeof pattern.pattern === 'string') {
|
|
317
|
+
pattern.pattern = this.createRegExpFromPattern(pattern.pattern);
|
|
318
|
+
}
|
|
319
|
+
// Skip duplicates
|
|
320
|
+
if (!this.patternsById.has(pattern.id)) {
|
|
321
|
+
this.addPattern(pattern);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Analyze text for AI patterns
|
|
327
|
+
*/
|
|
328
|
+
analyzeText(text) {
|
|
329
|
+
const matches = this.detectPatterns(text);
|
|
330
|
+
const wordCount = text.split(/\s+/).filter(w => w.length > 0).length;
|
|
331
|
+
const matchesByCategory = new Map();
|
|
332
|
+
const matchesBySeverity = new Map();
|
|
333
|
+
const uniquePatternIds = new Set();
|
|
334
|
+
let totalConfidence = 0;
|
|
335
|
+
for (const match of matches) {
|
|
336
|
+
// Count by category
|
|
337
|
+
const catCount = matchesByCategory.get(match.pattern.category) || 0;
|
|
338
|
+
matchesByCategory.set(match.pattern.category, catCount + 1);
|
|
339
|
+
// Count by severity
|
|
340
|
+
const sevCount = matchesBySeverity.get(match.severity) || 0;
|
|
341
|
+
matchesBySeverity.set(match.severity, sevCount + 1);
|
|
342
|
+
// Track unique patterns
|
|
343
|
+
uniquePatternIds.add(match.pattern.id);
|
|
344
|
+
// Sum confidence
|
|
345
|
+
totalConfidence += match.pattern.confidence;
|
|
346
|
+
}
|
|
347
|
+
const criticalMatches = matches.filter(m => m.severity === 'critical');
|
|
348
|
+
const highPriorityMatches = matches.filter(m => m.severity === 'critical' || m.severity === 'high');
|
|
349
|
+
return {
|
|
350
|
+
totalMatches: matches.length,
|
|
351
|
+
matchesByCategory,
|
|
352
|
+
matchesBySeverity,
|
|
353
|
+
uniquePatterns: uniquePatternIds.size,
|
|
354
|
+
averageConfidence: matches.length > 0 ? totalConfidence / matches.length : 0,
|
|
355
|
+
criticalMatches,
|
|
356
|
+
highPriorityMatches,
|
|
357
|
+
wordCount,
|
|
358
|
+
patternDensity: wordCount > 0 ? (matches.length / wordCount) * 100 : 0
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Compare two texts for pattern changes
|
|
363
|
+
*/
|
|
364
|
+
compareTexts(text1, text2) {
|
|
365
|
+
const matches1 = this.detectPatterns(text1);
|
|
366
|
+
const matches2 = this.detectPatterns(text2);
|
|
367
|
+
// Calculate improvement
|
|
368
|
+
const improvement = matches1.length > 0
|
|
369
|
+
? ((matches1.length - matches2.length) / matches1.length) * 100
|
|
370
|
+
: 0;
|
|
371
|
+
// Find pattern differences
|
|
372
|
+
const patterns1 = new Set(matches1.map(m => m.pattern.id));
|
|
373
|
+
const patterns2 = new Set(matches2.map(m => m.pattern.id));
|
|
374
|
+
const addedPatterns = matches2.filter(m => !patterns1.has(m.pattern.id));
|
|
375
|
+
const removedPatterns = matches1.filter(m => !patterns2.has(m.pattern.id));
|
|
376
|
+
const persistentPatterns = matches2.filter(m => patterns1.has(m.pattern.id));
|
|
377
|
+
return {
|
|
378
|
+
text1Matches: matches1.length,
|
|
379
|
+
text2Matches: matches2.length,
|
|
380
|
+
improvement,
|
|
381
|
+
addedPatterns,
|
|
382
|
+
removedPatterns,
|
|
383
|
+
persistentPatterns
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
// Private helper methods
|
|
387
|
+
/**
|
|
388
|
+
* Find all matches of a pattern in text
|
|
389
|
+
*/
|
|
390
|
+
findPatternMatches(text, pattern) {
|
|
391
|
+
const matches = [];
|
|
392
|
+
const regex = pattern.pattern;
|
|
393
|
+
// Reset regex state
|
|
394
|
+
regex.lastIndex = 0;
|
|
395
|
+
let match;
|
|
396
|
+
while ((match = regex.exec(text)) !== null) {
|
|
397
|
+
const start = match.index;
|
|
398
|
+
const end = start + match[0].length;
|
|
399
|
+
// Extract context (50 chars before and after)
|
|
400
|
+
const contextStart = Math.max(0, start - 50);
|
|
401
|
+
const contextEnd = Math.min(text.length, end + 50);
|
|
402
|
+
const context = text.substring(contextStart, contextEnd);
|
|
403
|
+
matches.push({
|
|
404
|
+
pattern,
|
|
405
|
+
match: match[0],
|
|
406
|
+
position: { start, end },
|
|
407
|
+
context,
|
|
408
|
+
severity: pattern.severity
|
|
409
|
+
});
|
|
410
|
+
// Prevent infinite loop on zero-width matches
|
|
411
|
+
if (match[0].length === 0) {
|
|
412
|
+
regex.lastIndex++;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
return matches;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Create RegExp from pattern string
|
|
419
|
+
*/
|
|
420
|
+
createRegExpFromPattern(patternStr) {
|
|
421
|
+
// Check if pattern starts with ^ (line start anchor)
|
|
422
|
+
const isLineStart = patternStr.startsWith('^');
|
|
423
|
+
// Handle special pattern syntax
|
|
424
|
+
if (patternStr.includes('\\b')) {
|
|
425
|
+
// Already has word boundaries
|
|
426
|
+
return new RegExp(patternStr, 'gi');
|
|
427
|
+
}
|
|
428
|
+
else if (isLineStart) {
|
|
429
|
+
// Line start patterns don't need word boundaries
|
|
430
|
+
return new RegExp(patternStr, 'gm');
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
// Add word boundaries for phrase matching
|
|
434
|
+
const escaped = patternStr.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
435
|
+
// Check if pattern ends in punctuation - if so, don't add trailing word boundary
|
|
436
|
+
const endsWithPunctuation = /[,.:;!?]$/.test(patternStr);
|
|
437
|
+
const startBoundary = '\\b';
|
|
438
|
+
const endBoundary = endsWithPunctuation ? '' : '\\b';
|
|
439
|
+
return new RegExp(`${startBoundary}${escaped}${endBoundary}`, 'gi');
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Export patterns as markdown documentation
|
|
444
|
+
*/
|
|
445
|
+
exportAsMarkdown() {
|
|
446
|
+
const lines = [];
|
|
447
|
+
lines.push('# AI Writing Patterns Library\n');
|
|
448
|
+
lines.push(`Total Patterns: ${this.patterns.length}\n`);
|
|
449
|
+
// Group by category
|
|
450
|
+
const categories = Array.from(this.patternsByCategory.keys()).sort();
|
|
451
|
+
for (const category of categories) {
|
|
452
|
+
const categoryPatterns = this.patternsByCategory.get(category);
|
|
453
|
+
lines.push(`## ${category} (${categoryPatterns.length} patterns)\n`);
|
|
454
|
+
// Group by subcategory
|
|
455
|
+
const subcategories = new Map();
|
|
456
|
+
for (const pattern of categoryPatterns) {
|
|
457
|
+
const subcat = pattern.subcategory || 'General';
|
|
458
|
+
if (!subcategories.has(subcat)) {
|
|
459
|
+
subcategories.set(subcat, []);
|
|
460
|
+
}
|
|
461
|
+
subcategories.get(subcat).push(pattern);
|
|
462
|
+
}
|
|
463
|
+
for (const [subcat, patterns] of subcategories) {
|
|
464
|
+
lines.push(`### ${subcat}\n`);
|
|
465
|
+
for (const pattern of patterns) {
|
|
466
|
+
lines.push(`**${pattern.id}** (${pattern.severity}, confidence: ${pattern.confidence})`);
|
|
467
|
+
lines.push(`- Pattern: \`${pattern.pattern}\``);
|
|
468
|
+
lines.push(`- Context: ${pattern.context}`);
|
|
469
|
+
lines.push(`- Examples:`);
|
|
470
|
+
for (const example of pattern.examples.slice(0, 2)) {
|
|
471
|
+
lines.push(` - "${example}"`);
|
|
472
|
+
}
|
|
473
|
+
if (pattern.replacements && pattern.replacements.length > 0) {
|
|
474
|
+
lines.push(`- Replacements:`);
|
|
475
|
+
for (const replacement of pattern.replacements.slice(0, 2)) {
|
|
476
|
+
lines.push(` - ${replacement}`);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
lines.push('');
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
return lines.join('\n');
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
//# sourceMappingURL=pattern-library.js.map
|