@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,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Rules Module
|
|
3
|
+
*
|
|
4
|
+
* Loads and manages validation rules from AIWG markdown files.
|
|
5
|
+
* Provides structured rule definitions for banned phrases, AI patterns, and authenticity markers.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile } from 'fs/promises';
|
|
8
|
+
import { existsSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
/**
|
|
11
|
+
* Loads validation rules from AIWG markdown files
|
|
12
|
+
*/
|
|
13
|
+
export class ValidationRuleLoader {
|
|
14
|
+
guideBasePath;
|
|
15
|
+
ruleCache = new Map();
|
|
16
|
+
constructor(guideBasePath) {
|
|
17
|
+
this.guideBasePath = guideBasePath;
|
|
18
|
+
// Default to ~/.local/share/ai-writing-guide if not specified
|
|
19
|
+
this.guideBasePath = guideBasePath || join(process.env.HOME || '', '.local/share/ai-writing-guide');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Load complete rule set from AIWG
|
|
23
|
+
*/
|
|
24
|
+
async loadRuleSet() {
|
|
25
|
+
const cacheKey = this.guideBasePath || 'default';
|
|
26
|
+
if (this.ruleCache.has(cacheKey)) {
|
|
27
|
+
return this.ruleCache.get(cacheKey);
|
|
28
|
+
}
|
|
29
|
+
// New addon structure paths (preferred)
|
|
30
|
+
const addonBase = join(this.guideBasePath, 'agentic', 'code', 'addons', 'writing-quality');
|
|
31
|
+
// Legacy paths (fallback for backward compatibility)
|
|
32
|
+
const legacyBase = this.guideBasePath;
|
|
33
|
+
// Check for addon structure first, fall back to legacy
|
|
34
|
+
const bannedPatternsPath = existsSync(join(addonBase, 'validation/banned-patterns.md'))
|
|
35
|
+
? join(addonBase, 'validation/banned-patterns.md')
|
|
36
|
+
: join(legacyBase, 'validation/banned-patterns.md');
|
|
37
|
+
const aiTellsPath = existsSync(join(addonBase, 'patterns/common-ai-tells.md'))
|
|
38
|
+
? join(addonBase, 'patterns/common-ai-tells.md')
|
|
39
|
+
: join(legacyBase, 'patterns/common-ai-tells.md');
|
|
40
|
+
const sophisticationPath = existsSync(join(addonBase, 'core/sophistication-guide.md'))
|
|
41
|
+
? join(addonBase, 'core/sophistication-guide.md')
|
|
42
|
+
: join(legacyBase, 'core/sophistication-guide.md');
|
|
43
|
+
// Start with default rules (core patterns that should always be present)
|
|
44
|
+
const defaults = this.getDefaultRules();
|
|
45
|
+
const ruleSet = {
|
|
46
|
+
bannedPhrases: [...defaults.bannedPhrases],
|
|
47
|
+
aiPatterns: [...defaults.aiPatterns],
|
|
48
|
+
authenticityMarkers: [...defaults.authenticityMarkers],
|
|
49
|
+
structuralPatterns: [...defaults.structuralPatterns]
|
|
50
|
+
};
|
|
51
|
+
// Load and merge banned phrases from guide
|
|
52
|
+
if (existsSync(bannedPatternsPath)) {
|
|
53
|
+
const bannedRules = await this.loadFromMarkdown(bannedPatternsPath);
|
|
54
|
+
ruleSet.bannedPhrases = this.mergeRules(ruleSet.bannedPhrases, bannedRules.filter(r => r.type === 'banned_phrase'));
|
|
55
|
+
ruleSet.structuralPatterns = this.mergeRules(ruleSet.structuralPatterns, bannedRules.filter(r => r.type === 'formulaic_structure'));
|
|
56
|
+
}
|
|
57
|
+
// Load and merge AI tells from guide
|
|
58
|
+
if (existsSync(aiTellsPath)) {
|
|
59
|
+
const aiRules = await this.loadFromMarkdown(aiTellsPath);
|
|
60
|
+
ruleSet.aiPatterns = this.mergeRules(ruleSet.aiPatterns, aiRules);
|
|
61
|
+
}
|
|
62
|
+
// Load authenticity markers from sophistication guide
|
|
63
|
+
if (existsSync(sophisticationPath)) {
|
|
64
|
+
const authRules = await this.loadAuthenticityMarkers(sophisticationPath);
|
|
65
|
+
ruleSet.authenticityMarkers = this.mergeRules(ruleSet.authenticityMarkers, authRules);
|
|
66
|
+
}
|
|
67
|
+
this.ruleCache.set(cacheKey, ruleSet);
|
|
68
|
+
return ruleSet;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Load rules from a markdown file
|
|
72
|
+
*/
|
|
73
|
+
async loadFromMarkdown(path) {
|
|
74
|
+
if (!existsSync(path)) {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
const content = await readFile(path, 'utf-8');
|
|
78
|
+
return this.parseMarkdownRules(content, path);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Parse markdown content into validation rules
|
|
82
|
+
*/
|
|
83
|
+
parseMarkdownRules(markdown, sourcePath) {
|
|
84
|
+
const rules = [];
|
|
85
|
+
const lines = markdown.split('\n');
|
|
86
|
+
let currentSection = '';
|
|
87
|
+
let currentCategory = '';
|
|
88
|
+
let currentSeverity = 'warning';
|
|
89
|
+
// Determine base severity from file type
|
|
90
|
+
if (sourcePath.includes('banned-patterns')) {
|
|
91
|
+
currentSeverity = 'critical';
|
|
92
|
+
}
|
|
93
|
+
else if (sourcePath.includes('common-ai-tells')) {
|
|
94
|
+
currentSeverity = 'warning';
|
|
95
|
+
}
|
|
96
|
+
for (let i = 0; i < lines.length; i++) {
|
|
97
|
+
const line = lines[i].trim();
|
|
98
|
+
// Track sections for context
|
|
99
|
+
if (line.startsWith('## ')) {
|
|
100
|
+
currentSection = line.replace('## ', '');
|
|
101
|
+
currentCategory = currentSection;
|
|
102
|
+
}
|
|
103
|
+
else if (line.startsWith('### ')) {
|
|
104
|
+
currentCategory = line.replace('### ', '');
|
|
105
|
+
}
|
|
106
|
+
// Parse banned phrase patterns
|
|
107
|
+
if (line.startsWith('- ')) {
|
|
108
|
+
const phrase = line.substring(2).trim();
|
|
109
|
+
// Skip example lines, explanations, and replacement guides
|
|
110
|
+
if (phrase.startsWith('❌') || phrase.startsWith('✅') || phrase.startsWith('**')) {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
// Skip replacement guide lines (e.g., "revolutionary" → "different")
|
|
114
|
+
if (phrase.includes('→') || phrase.includes('->')) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
// Skip lines that are quoted replacement mappings (e.g., "phrase" → "replacement")
|
|
118
|
+
if (phrase.startsWith('"') && (phrase.includes('→') || phrase.includes('->'))) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const rule = this.createRuleFromPhrase(phrase, currentCategory, currentSeverity, sourcePath);
|
|
122
|
+
if (rule) {
|
|
123
|
+
rules.push(rule);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Parse structural patterns
|
|
127
|
+
if (line.includes('❌') && line.includes('"')) {
|
|
128
|
+
const matches = line.match(/"([^"]+)"/g);
|
|
129
|
+
if (matches) {
|
|
130
|
+
matches.forEach(match => {
|
|
131
|
+
const pattern = match.replace(/"/g, '');
|
|
132
|
+
const rule = {
|
|
133
|
+
id: `struct_${this.generateId(pattern)}`,
|
|
134
|
+
type: 'formulaic_structure',
|
|
135
|
+
pattern: this.createPattern(pattern),
|
|
136
|
+
severity: 'warning',
|
|
137
|
+
message: `Formulaic structure detected: ${pattern}`,
|
|
138
|
+
suggestion: this.extractSuggestion(line),
|
|
139
|
+
category: currentCategory
|
|
140
|
+
};
|
|
141
|
+
rules.push(rule);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return rules;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Create a validation rule from a banned phrase
|
|
150
|
+
*/
|
|
151
|
+
createRuleFromPhrase(phrase, category, severity, sourcePath) {
|
|
152
|
+
// Clean up the phrase
|
|
153
|
+
let cleanPhrase = phrase;
|
|
154
|
+
let suggestion;
|
|
155
|
+
// Extract suggestion if present (format: "phrase (use X instead)")
|
|
156
|
+
const suggestionMatch = phrase.match(/\(([^)]+)\)/);
|
|
157
|
+
if (suggestionMatch) {
|
|
158
|
+
suggestion = suggestionMatch[1];
|
|
159
|
+
cleanPhrase = phrase.replace(/\([^)]+\)/, '').trim();
|
|
160
|
+
}
|
|
161
|
+
// Skip empty or meta-instructions
|
|
162
|
+
if (!cleanPhrase || cleanPhrase.startsWith('just use')) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
// Determine rule type
|
|
166
|
+
let ruleType = 'banned_phrase';
|
|
167
|
+
if (category.toLowerCase().includes('structure') || category.toLowerCase().includes('pattern')) {
|
|
168
|
+
ruleType = 'formulaic_structure';
|
|
169
|
+
}
|
|
170
|
+
else if (sourcePath.includes('ai-tells')) {
|
|
171
|
+
ruleType = 'ai_pattern';
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
id: `${ruleType}_${this.generateId(cleanPhrase)}`,
|
|
175
|
+
type: ruleType,
|
|
176
|
+
pattern: this.createPattern(cleanPhrase),
|
|
177
|
+
severity,
|
|
178
|
+
message: `Avoid: "${cleanPhrase}" (${category})`,
|
|
179
|
+
suggestion,
|
|
180
|
+
category
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Load authenticity markers from sophistication guide
|
|
185
|
+
*/
|
|
186
|
+
async loadAuthenticityMarkers(_path) {
|
|
187
|
+
const markers = [];
|
|
188
|
+
// Positive markers (things that indicate human writing)
|
|
189
|
+
const humanMarkers = [
|
|
190
|
+
{ pattern: /\bI think\b/gi, message: 'Opinion statement (human marker)' },
|
|
191
|
+
{ pattern: /\bin my experience\b/gi, message: 'Personal experience (human marker)' },
|
|
192
|
+
{ pattern: /\bwe found that\b/gi, message: 'Specific finding (human marker)' },
|
|
193
|
+
{ pattern: /\bwe chose\b/gi, message: 'Decision explanation (human marker)' },
|
|
194
|
+
{ pattern: /\bwe decided\b/gi, message: 'Decision explanation (human marker)' },
|
|
195
|
+
{ pattern: /\bwhile .+ (is|was|are|were).+, .+ (must|should|need)/gi, message: 'Trade-off acknowledgment (human marker)' },
|
|
196
|
+
{ pattern: /\breduced .+ by \d+(%|ms|s|KB|MB)/gi, message: 'Specific metric (human marker)' },
|
|
197
|
+
{ pattern: /\bincreased .+ by \d+(%|ms|s|KB|MB)/gi, message: 'Specific metric (human marker)' },
|
|
198
|
+
{ pattern: /\bp\d{2} latency/gi, message: 'Specific performance metric (human marker)' },
|
|
199
|
+
{ pattern: /\bversion \d+\.\d+/gi, message: 'Specific version (human marker)' },
|
|
200
|
+
{ pattern: /\b\d+% (improvement|reduction|increase)/gi, message: 'Specific percentage (human marker)' }
|
|
201
|
+
];
|
|
202
|
+
humanMarkers.forEach((marker, idx) => {
|
|
203
|
+
markers.push({
|
|
204
|
+
id: `auth_positive_${idx}`,
|
|
205
|
+
type: 'authenticity_marker',
|
|
206
|
+
pattern: marker.pattern,
|
|
207
|
+
severity: 'info',
|
|
208
|
+
message: marker.message,
|
|
209
|
+
category: 'Human Markers'
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
return markers;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Create a regex pattern from a phrase string
|
|
216
|
+
*/
|
|
217
|
+
createPattern(phrase) {
|
|
218
|
+
// Handle wildcard patterns (e.g., "vital/crucial/key" or "cutting-edge technology/solution")
|
|
219
|
+
if (phrase.includes('/')) {
|
|
220
|
+
// Split the phrase and check if we have multi-word alternatives
|
|
221
|
+
// For "plays a vital/crucial/key role" we want to match the alternatives in context
|
|
222
|
+
const parts = phrase.split('/').map(p => p.trim());
|
|
223
|
+
// If first/last parts contain multi-word context, extract the common prefix/suffix
|
|
224
|
+
// e.g., "cutting-edge technology/solution/platform" should match full phrases
|
|
225
|
+
const firstPart = parts[0];
|
|
226
|
+
const hasPrefix = firstPart.includes(' ');
|
|
227
|
+
if (hasPrefix) {
|
|
228
|
+
// Has leading context - match each alternative with the prefix
|
|
229
|
+
// e.g., "seamlessly integrates/integrated" -> match "seamlessly integrates" OR "seamlessly integrated"
|
|
230
|
+
const words = firstPart.split(' ');
|
|
231
|
+
const prefix = words.slice(0, -1).join(' '); // All but last word
|
|
232
|
+
const firstAlt = words[words.length - 1]; // Last word is first alternative
|
|
233
|
+
const alternatives = [firstAlt, ...parts.slice(1)].map(alt => {
|
|
234
|
+
const escaped = `${prefix} ${alt}`.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
235
|
+
return escaped;
|
|
236
|
+
});
|
|
237
|
+
return new RegExp(`\\b(${alternatives.join('|')})\\b`, 'gi');
|
|
238
|
+
}
|
|
239
|
+
// Simple alternatives without context - escape each and join
|
|
240
|
+
const alternatives = parts.map(p => p.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|');
|
|
241
|
+
return new RegExp(`\\b(${alternatives})\\b`, 'gi');
|
|
242
|
+
}
|
|
243
|
+
// Handle variable parts in brackets
|
|
244
|
+
if (phrase.includes('[') && phrase.includes(']')) {
|
|
245
|
+
const patternStr = phrase
|
|
246
|
+
.replace(/\[([^\]]+)\]/g, '(?:$1)?')
|
|
247
|
+
.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
248
|
+
return new RegExp(`\\b${patternStr}\\b`, 'gi');
|
|
249
|
+
}
|
|
250
|
+
// Standard phrase matching (word boundaries)
|
|
251
|
+
const escaped = phrase.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
252
|
+
return new RegExp(`\\b${escaped}\\b`, 'gi');
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Generate a unique ID from a phrase
|
|
256
|
+
*/
|
|
257
|
+
generateId(phrase) {
|
|
258
|
+
return phrase
|
|
259
|
+
.toLowerCase()
|
|
260
|
+
.replace(/[^a-z0-9]+/g, '_')
|
|
261
|
+
.replace(/^_+|_+$/g, '')
|
|
262
|
+
.substring(0, 50);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Extract suggestion from a line
|
|
266
|
+
*/
|
|
267
|
+
extractSuggestion(line) {
|
|
268
|
+
const suggestionMatch = line.match(/✅[^"]*"([^"]+)"/);
|
|
269
|
+
return suggestionMatch ? suggestionMatch[1] : undefined;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Merge multiple rule sets
|
|
273
|
+
*/
|
|
274
|
+
mergeRules(rules1, rules2) {
|
|
275
|
+
const merged = [...rules1];
|
|
276
|
+
const existingIds = new Set(rules1.map(r => r.id));
|
|
277
|
+
for (const rule of rules2) {
|
|
278
|
+
if (!existingIds.has(rule.id)) {
|
|
279
|
+
merged.push(rule);
|
|
280
|
+
existingIds.add(rule.id);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return merged;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Filter rules by context
|
|
287
|
+
*/
|
|
288
|
+
filterByContext(rules, context) {
|
|
289
|
+
return rules.filter(rule => {
|
|
290
|
+
if (!rule.contexts || rule.contexts.length === 0) {
|
|
291
|
+
return true; // Apply to all contexts if not specified
|
|
292
|
+
}
|
|
293
|
+
return rule.contexts.includes(context);
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Get default rule set (built-in rules when guide is not available)
|
|
298
|
+
*/
|
|
299
|
+
getDefaultRules() {
|
|
300
|
+
return {
|
|
301
|
+
bannedPhrases: this.getDefaultBannedPhrases(),
|
|
302
|
+
aiPatterns: this.getDefaultAIPatterns(),
|
|
303
|
+
authenticityMarkers: this.getDefaultAuthenticityMarkers(),
|
|
304
|
+
structuralPatterns: this.getDefaultStructuralPatterns()
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
getDefaultBannedPhrases() {
|
|
308
|
+
const criticalPhrases = [
|
|
309
|
+
'seamlessly', 'cutting-edge', 'state-of-the-art', 'revolutionary',
|
|
310
|
+
'game-changing', 'paradigm shift', 'best-in-class', 'industry-leading',
|
|
311
|
+
'comprehensive solution', 'robust and scalable', 'innovative approach',
|
|
312
|
+
'next-generation', 'transformative', 'groundbreaking'
|
|
313
|
+
];
|
|
314
|
+
return criticalPhrases.map((phrase, idx) => ({
|
|
315
|
+
id: `default_banned_${idx}`,
|
|
316
|
+
type: 'banned_phrase',
|
|
317
|
+
pattern: new RegExp(`\\b${phrase.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`, 'gi'),
|
|
318
|
+
severity: 'critical',
|
|
319
|
+
message: `Banned phrase: "${phrase}"`,
|
|
320
|
+
category: 'Critical Banned Phrases'
|
|
321
|
+
}));
|
|
322
|
+
}
|
|
323
|
+
getDefaultAIPatterns() {
|
|
324
|
+
return [
|
|
325
|
+
{
|
|
326
|
+
id: 'ai_moreover',
|
|
327
|
+
type: 'ai_pattern',
|
|
328
|
+
pattern: /^Moreover,/gm,
|
|
329
|
+
severity: 'warning',
|
|
330
|
+
message: 'Formulaic transition word',
|
|
331
|
+
suggestion: 'Remove transition or rephrase',
|
|
332
|
+
category: 'Transitions'
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
id: 'ai_furthermore',
|
|
336
|
+
type: 'ai_pattern',
|
|
337
|
+
pattern: /^Furthermore,/gm,
|
|
338
|
+
severity: 'warning',
|
|
339
|
+
message: 'Formulaic transition word',
|
|
340
|
+
suggestion: 'Remove transition or rephrase',
|
|
341
|
+
category: 'Transitions'
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
id: 'ai_in_conclusion',
|
|
345
|
+
type: 'ai_pattern',
|
|
346
|
+
pattern: /\bIn conclusion,/gi,
|
|
347
|
+
severity: 'warning',
|
|
348
|
+
message: 'Formulaic conclusion phrase',
|
|
349
|
+
suggestion: 'Just end when done',
|
|
350
|
+
category: 'Conclusions'
|
|
351
|
+
}
|
|
352
|
+
];
|
|
353
|
+
}
|
|
354
|
+
getDefaultAuthenticityMarkers() {
|
|
355
|
+
return [
|
|
356
|
+
{
|
|
357
|
+
id: 'auth_metric',
|
|
358
|
+
type: 'authenticity_marker',
|
|
359
|
+
pattern: /\d+(%|ms|s|KB|MB|GB|x)\b/g,
|
|
360
|
+
severity: 'info',
|
|
361
|
+
message: 'Specific metric found (human marker)',
|
|
362
|
+
category: 'Metrics'
|
|
363
|
+
}
|
|
364
|
+
];
|
|
365
|
+
}
|
|
366
|
+
getDefaultStructuralPatterns() {
|
|
367
|
+
return [
|
|
368
|
+
{
|
|
369
|
+
id: 'struct_three_items',
|
|
370
|
+
type: 'formulaic_structure',
|
|
371
|
+
pattern: /\b(\w+),\s+(\w+),\s+and\s+(\w+)\b/g,
|
|
372
|
+
severity: 'info',
|
|
373
|
+
message: 'Three-item list detected',
|
|
374
|
+
suggestion: 'Consider using 2, 4, or no list',
|
|
375
|
+
category: 'Lists'
|
|
376
|
+
}
|
|
377
|
+
];
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=validation-rules.js.map
|