@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.
Files changed (466) hide show
  1. package/README.md +21 -1
  2. package/bin/aiwg.mjs +349 -0
  3. package/dist/src/a2a/agent-card.js +145 -0
  4. package/dist/src/a2a/client.js +411 -0
  5. package/dist/src/a2a/hitl-cli.js +171 -0
  6. package/dist/src/a2a/hitl-driver.js +370 -0
  7. package/dist/src/a2a/hitl.js +181 -0
  8. package/dist/src/a2a/http.js +193 -0
  9. package/dist/src/a2a/jcs.js +128 -0
  10. package/dist/src/a2a/jws.js +187 -0
  11. package/dist/src/a2a/types.js +24 -0
  12. package/dist/src/a2a/webhook.js +240 -0
  13. package/dist/src/activity-log/cli.js +348 -0
  14. package/dist/src/activity-log/parser.js +81 -0
  15. package/dist/src/activity-log/types.js +50 -0
  16. package/dist/src/agents/agent-deployer.js +367 -0
  17. package/dist/src/agents/agent-packager.js +271 -0
  18. package/dist/src/agents/agent-validator.js +271 -0
  19. package/dist/src/agents/grounding/knowledge-base.js +161 -0
  20. package/dist/src/agents/grounding/types.js +12 -0
  21. package/dist/src/agents/index.js +10 -0
  22. package/dist/src/agents/packaged-agent-inventory.js +75 -0
  23. package/dist/src/agents/types.js +7 -0
  24. package/dist/src/api/index.d.ts +10 -0
  25. package/dist/src/api/index.js +10 -0
  26. package/dist/src/artifacts/address-parser.js +73 -0
  27. package/dist/src/artifacts/audit/cli.js +183 -0
  28. package/dist/src/artifacts/audit/drift.js +122 -0
  29. package/dist/src/artifacts/audit/types.js +12 -0
  30. package/dist/src/artifacts/backends/graphology-backend.js +160 -0
  31. package/dist/src/artifacts/backends/json-backend.js +129 -0
  32. package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
  33. package/dist/src/artifacts/browser-export.js +622 -0
  34. package/dist/src/artifacts/capability-resolver.js +94 -0
  35. package/dist/src/artifacts/checksum-manifest.js +91 -0
  36. package/dist/src/artifacts/citation-parser.js +162 -0
  37. package/dist/src/artifacts/cli.js +1462 -0
  38. package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
  39. package/dist/src/artifacts/corpus-tools/cli.js +393 -0
  40. package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
  41. package/dist/src/artifacts/corpus-tools/curator.js +186 -0
  42. package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
  43. package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
  44. package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
  45. package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
  46. package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
  47. package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
  48. package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
  49. package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
  50. package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
  51. package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
  52. package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
  53. package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
  54. package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
  55. package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
  56. package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
  57. package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
  58. package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
  59. package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
  60. package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
  61. package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
  62. package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
  63. package/dist/src/artifacts/corpus-views/build.js +126 -0
  64. package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
  65. package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
  66. package/dist/src/artifacts/corpus-views/renderers.js +353 -0
  67. package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
  68. package/dist/src/artifacts/dep-graph.js +173 -0
  69. package/dist/src/artifacts/discover-facets.js +375 -0
  70. package/dist/src/artifacts/embedding-index.js +354 -0
  71. package/dist/src/artifacts/enrichment/cli.js +240 -0
  72. package/dist/src/artifacts/enrichment/prompt.js +47 -0
  73. package/dist/src/artifacts/enrichment/store.js +90 -0
  74. package/dist/src/artifacts/enrichment/types.js +12 -0
  75. package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
  76. package/dist/src/artifacts/fortemi-core-sync.js +251 -0
  77. package/dist/src/artifacts/fortemi-shard-export.js +44 -0
  78. package/dist/src/artifacts/fulltext.js +108 -0
  79. package/dist/src/artifacts/graph-backend.js +51 -0
  80. package/dist/src/artifacts/graph-query.js +247 -0
  81. package/dist/src/artifacts/hybrid-query.js +225 -0
  82. package/dist/src/artifacts/index-builder.js +1089 -0
  83. package/dist/src/artifacts/index-reader.js +112 -0
  84. package/dist/src/artifacts/index-status.js +193 -0
  85. package/dist/src/artifacts/legacy-index-migration.js +169 -0
  86. package/dist/src/artifacts/move.js +154 -0
  87. package/dist/src/artifacts/operational-state.js +239 -0
  88. package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
  89. package/dist/src/artifacts/query-engine.js +1955 -0
  90. package/dist/src/artifacts/source-graph.js +529 -0
  91. package/dist/src/artifacts/stats.js +169 -0
  92. package/dist/src/artifacts/types.js +606 -0
  93. package/dist/src/artifacts/views/cli.js +293 -0
  94. package/dist/src/artifacts/views/definition.js +170 -0
  95. package/dist/src/artifacts/views/store.js +149 -0
  96. package/dist/src/artifacts/views/types.js +8 -0
  97. package/dist/src/artifacts/watcher.js +255 -0
  98. package/dist/src/catalog/builtin-models.json +636 -0
  99. package/dist/src/catalog/cli.js +228 -0
  100. package/dist/src/catalog/cli.mjs +289 -0
  101. package/dist/src/catalog/index.js +15 -0
  102. package/dist/src/catalog/loader.js +217 -0
  103. package/dist/src/catalog/loader.mjs +251 -0
  104. package/dist/src/catalog/sources.json +41 -0
  105. package/dist/src/catalog/types.js +8 -0
  106. package/dist/src/channel/manager.mjs +504 -0
  107. package/dist/src/cli/agent-spawn.js +178 -0
  108. package/dist/src/cli/cli-extension-loader.js +245 -0
  109. package/dist/src/cli/command-log.js +275 -0
  110. package/dist/src/cli/config-loader.js +232 -0
  111. package/dist/src/cli/env.js +82 -0
  112. package/dist/src/cli/errors.js +150 -0
  113. package/dist/src/cli/find-package-root.js +40 -0
  114. package/dist/src/cli/git-hooks.js +250 -0
  115. package/dist/src/cli/handlers/agentcard.js +206 -0
  116. package/dist/src/cli/handlers/artifacts.js +76 -0
  117. package/dist/src/cli/handlers/best-practices-audit.js +280 -0
  118. package/dist/src/cli/handlers/cockpit.js +137 -0
  119. package/dist/src/cli/handlers/command-log.js +37 -0
  120. package/dist/src/cli/handlers/daemon.js +59 -0
  121. package/dist/src/cli/handlers/diagnose.js +300 -0
  122. package/dist/src/cli/handlers/execution-mode.js +105 -0
  123. package/dist/src/cli/handlers/feedback.js +341 -0
  124. package/dist/src/cli/handlers/help.js +147 -0
  125. package/dist/src/cli/handlers/index.js +302 -0
  126. package/dist/src/cli/handlers/init.js +179 -0
  127. package/dist/src/cli/handlers/install.js +129 -0
  128. package/dist/src/cli/handlers/issues.js +46 -0
  129. package/dist/src/cli/handlers/lint.js +42 -0
  130. package/dist/src/cli/handlers/local-executor.js +315 -0
  131. package/dist/src/cli/handlers/marketplace.js +168 -0
  132. package/dist/src/cli/handlers/mc.js +1010 -0
  133. package/dist/src/cli/handlers/models.js +352 -0
  134. package/dist/src/cli/handlers/packages.js +155 -0
  135. package/dist/src/cli/handlers/ralph-launcher.js +717 -0
  136. package/dist/src/cli/handlers/ralph.js +575 -0
  137. package/dist/src/cli/handlers/refresh.js +432 -0
  138. package/dist/src/cli/handlers/regenerate.js +336 -0
  139. package/dist/src/cli/handlers/repo-access.js +109 -0
  140. package/dist/src/cli/handlers/run.js +165 -0
  141. package/dist/src/cli/handlers/runtime-info.js +301 -0
  142. package/dist/src/cli/handlers/sandbox.js +197 -0
  143. package/dist/src/cli/handlers/scaffolding.js +149 -0
  144. package/dist/src/cli/handlers/script-runner.js +121 -0
  145. package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
  146. package/dist/src/cli/handlers/serve.js +1835 -0
  147. package/dist/src/cli/handlers/session.js +348 -0
  148. package/dist/src/cli/handlers/setup.js +440 -0
  149. package/dist/src/cli/handlers/skill-lint.js +367 -0
  150. package/dist/src/cli/handlers/skill-usage.js +74 -0
  151. package/dist/src/cli/handlers/steward.js +567 -0
  152. package/dist/src/cli/handlers/subcommands.js +1702 -0
  153. package/dist/src/cli/handlers/team.js +337 -0
  154. package/dist/src/cli/handlers/types.js +11 -0
  155. package/dist/src/cli/handlers/use.js +2772 -0
  156. package/dist/src/cli/handlers/utilities.js +703 -0
  157. package/dist/src/cli/handlers/version.js +134 -0
  158. package/dist/src/cli/handlers/workspace-context.js +93 -0
  159. package/dist/src/cli/handlers/workspace.js +126 -0
  160. package/dist/src/cli/help-generator.js +178 -0
  161. package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
  162. package/dist/src/cli/hooks/executor.js +96 -0
  163. package/dist/src/cli/hooks/index.js +15 -0
  164. package/dist/src/cli/hooks/registry.js +143 -0
  165. package/dist/src/cli/hooks/types.js +13 -0
  166. package/dist/src/cli/log.js +492 -0
  167. package/dist/src/cli/project-isolation/detect.js +70 -0
  168. package/dist/src/cli/project-isolation/index.js +7 -0
  169. package/dist/src/cli/project-isolation/signals.js +17 -0
  170. package/dist/src/cli/project-isolation/warning.js +102 -0
  171. package/dist/src/cli/prompt-utils.js +155 -0
  172. package/dist/src/cli/provider-deployment-plan.js +126 -0
  173. package/dist/src/cli/provider-resolution.js +119 -0
  174. package/dist/src/cli/router.js +305 -0
  175. package/dist/src/cli/scope-resolver.js +392 -0
  176. package/dist/src/cli/skill-usage.js +616 -0
  177. package/dist/src/cli/ui.js +224 -0
  178. package/dist/src/cli/watch-service.js +203 -0
  179. package/dist/src/cli/workflow-orchestrator.js +478 -0
  180. package/dist/src/cli/workspace-signals.js +321 -0
  181. package/dist/src/community/footer.js +14 -0
  182. package/dist/src/community/links.js +123 -0
  183. package/dist/src/community/milestones.js +46 -0
  184. package/dist/src/community/nudge-policy.js +93 -0
  185. package/dist/src/config/aiwg-config.js +883 -0
  186. package/dist/src/config/cli.js +703 -0
  187. package/dist/src/config/gitignore.js +156 -0
  188. package/dist/src/config/project-artifacts.js +76 -0
  189. package/dist/src/config/user-config.js +428 -0
  190. package/dist/src/config/user-registry.js +127 -0
  191. package/dist/src/config/workspace.js +276 -0
  192. package/dist/src/contributors/detect.js +39 -0
  193. package/dist/src/contributors/discover.js +172 -0
  194. package/dist/src/contributors/heuristic.js +186 -0
  195. package/dist/src/contributors/index.js +11 -0
  196. package/dist/src/contributors/types.js +13 -0
  197. package/dist/src/contributors/validation.js +116 -0
  198. package/dist/src/data/community.schema.json +43 -0
  199. package/dist/src/data/community.yaml +16 -0
  200. package/dist/src/extensions/capability-index.js +270 -0
  201. package/dist/src/extensions/claude-hooks-installer.js +268 -0
  202. package/dist/src/extensions/commands/definitions.js +3485 -0
  203. package/dist/src/extensions/deployment-registration.js +463 -0
  204. package/dist/src/extensions/index.js +22 -0
  205. package/dist/src/extensions/loader.js +132 -0
  206. package/dist/src/extensions/managed-marker.js +100 -0
  207. package/dist/src/extensions/manifest.js +196 -0
  208. package/dist/src/extensions/project-local-activity.js +114 -0
  209. package/dist/src/extensions/project-local-discovery.js +261 -0
  210. package/dist/src/extensions/project-local-doctor.js +281 -0
  211. package/dist/src/extensions/project-local-gitignore.js +176 -0
  212. package/dist/src/extensions/project-local-paths.js +121 -0
  213. package/dist/src/extensions/project-local-promote.js +218 -0
  214. package/dist/src/extensions/project-local-remove.js +373 -0
  215. package/dist/src/extensions/project-local-scaffold.js +252 -0
  216. package/dist/src/extensions/project-quickref.js +291 -0
  217. package/dist/src/extensions/registry.js +368 -0
  218. package/dist/src/extensions/shadow-resolver.js +271 -0
  219. package/dist/src/extensions/types.js +86 -0
  220. package/dist/src/extensions/upstream-registry.js +195 -0
  221. package/dist/src/extensions/validation.js +631 -0
  222. package/dist/src/features/catalog.js +88 -0
  223. package/dist/src/features/cli.js +197 -0
  224. package/dist/src/features/installer.js +57 -0
  225. package/dist/src/features/paths.js +14 -0
  226. package/dist/src/features/runtime.js +21 -0
  227. package/dist/src/features/status.js +134 -0
  228. package/dist/src/hooks/laziness-detection.js +532 -0
  229. package/dist/src/intake/git-history-analyzer.js +486 -0
  230. package/dist/src/intake/index.js +9 -0
  231. package/dist/src/issues/cli.js +327 -0
  232. package/dist/src/issues/index.js +5 -0
  233. package/dist/src/issues/live.js +154 -0
  234. package/dist/src/issues/local.js +666 -0
  235. package/dist/src/issues/sync.js +143 -0
  236. package/dist/src/issues/types.js +2 -0
  237. package/dist/src/issues/workflows.js +164 -0
  238. package/dist/src/kb/cli.js +173 -0
  239. package/dist/src/lint/cli.js +171 -0
  240. package/dist/src/lint/loader.js +225 -0
  241. package/dist/src/lint/reporters.js +141 -0
  242. package/dist/src/lint/runner.js +364 -0
  243. package/dist/src/lint/types.js +10 -0
  244. package/dist/src/marketplace/cache.js +110 -0
  245. package/dist/src/marketplace/identifier.js +63 -0
  246. package/dist/src/marketplace/registry.js +36 -0
  247. package/dist/src/marketplace/sources/clawhub.js +53 -0
  248. package/dist/src/marketplace/sources/git.js +45 -0
  249. package/dist/src/marketplace/types.js +9 -0
  250. package/dist/src/mcp/adapters/codex-runtime.js +224 -0
  251. package/dist/src/mcp/cli.mjs +1197 -0
  252. package/dist/src/mcp/elicitation.mjs +149 -0
  253. package/dist/src/mcp/helpers.mjs +287 -0
  254. package/dist/src/mcp/index.mjs +11 -0
  255. package/dist/src/mcp/profiles.js +263 -0
  256. package/dist/src/mcp/profiles.mjs +360 -0
  257. package/dist/src/mcp/registry.js +376 -0
  258. package/dist/src/mcp/registry.mjs +387 -0
  259. package/dist/src/mcp/server.mjs +633 -0
  260. package/dist/src/mcp/test-simple.mjs +271 -0
  261. package/dist/src/mcp/tools/command-run.mjs +101 -0
  262. package/dist/src/mcp/tools/discovery.mjs +291 -0
  263. package/dist/src/mcp/tools/interaction.mjs +87 -0
  264. package/dist/src/mcp/tools/orchestration.mjs +320 -0
  265. package/dist/src/mcp/tools/subsystems.mjs +640 -0
  266. package/dist/src/memory/cli.js +166 -0
  267. package/dist/src/memory/project-registry.js +282 -0
  268. package/dist/src/metrics/artifact-metrics.js +184 -0
  269. package/dist/src/metrics/context-budget.js +174 -0
  270. package/dist/src/metrics/token-counter.js +133 -0
  271. package/dist/src/models/config-loader.js +228 -0
  272. package/dist/src/models/index.js +22 -0
  273. package/dist/src/models/model-capabilities.v1.json +120 -0
  274. package/dist/src/models/model-catalog.v1.json +96 -0
  275. package/dist/src/models/model-discovery.js +521 -0
  276. package/dist/src/models/provider-models.js +73 -0
  277. package/dist/src/models/provider-policy.js +273 -0
  278. package/dist/src/models/resolver.js +245 -0
  279. package/dist/src/models/router.js +70 -0
  280. package/dist/src/models/types.js +8 -0
  281. package/dist/src/models/wrapper-deployment.js +178 -0
  282. package/dist/src/models/wrapper-route.js +54 -0
  283. package/dist/src/ops/cli.js +268 -0
  284. package/dist/src/ops/registry.js +623 -0
  285. package/dist/src/packages/adapters/clawhub.js +113 -0
  286. package/dist/src/packages/adapters/git.js +153 -0
  287. package/dist/src/packages/adapters/gitea.js +93 -0
  288. package/dist/src/packages/adapters/github.js +69 -0
  289. package/dist/src/packages/adapters/local-cache.js +89 -0
  290. package/dist/src/packages/package-registry.js +143 -0
  291. package/dist/src/packages/registry.js +238 -0
  292. package/dist/src/packages/types.js +11 -0
  293. package/dist/src/plugin/cross-framework-ops.js +475 -0
  294. package/dist/src/plugin/framework-config-loader.js +235 -0
  295. package/dist/src/plugin/framework-detector.js +186 -0
  296. package/dist/src/plugin/framework-isolator.js +341 -0
  297. package/dist/src/plugin/framework-migration.js +371 -0
  298. package/dist/src/plugin/metadata-validator.js +906 -0
  299. package/dist/src/plugin/plugin-installer.js +436 -0
  300. package/dist/src/plugin/plugin-status.js +369 -0
  301. package/dist/src/plugin/plugin-uninstaller.js +473 -0
  302. package/dist/src/plugin/registry-validator.js +344 -0
  303. package/dist/src/plugin/skill-command-translator.js +415 -0
  304. package/dist/src/plugin/workspace-creator.js +189 -0
  305. package/dist/src/plugin/workspace-migrator.js +821 -0
  306. package/dist/src/policy/authorization.js +390 -0
  307. package/dist/src/policy/repo-access.js +215 -0
  308. package/dist/src/provenance/cli.js +16 -0
  309. package/dist/src/providers/capability-matrix.js +300 -0
  310. package/dist/src/providers/capability-matrix.yaml +514 -0
  311. package/dist/src/providers/provider-definitions.js +977 -0
  312. package/dist/src/providers/provider-definitions.mjs +159 -0
  313. package/dist/src/providers/provider-inventory.js +169 -0
  314. package/dist/src/quality/feedback-ab.js +174 -0
  315. package/dist/src/quality/feedback-collector.js +176 -0
  316. package/dist/src/quality/feedback-tracker.js +123 -0
  317. package/dist/src/quality/patterns/adr.json +24 -0
  318. package/dist/src/quality/patterns/sad.json +24 -0
  319. package/dist/src/quality/patterns/test-plan.json +24 -0
  320. package/dist/src/quality/patterns/use-case.json +24 -0
  321. package/dist/src/quality/scoring.js +157 -0
  322. package/dist/src/reflections/cli.js +15 -0
  323. package/dist/src/release/plan.js +139 -0
  324. package/dist/src/research/cache/manager.js +227 -0
  325. package/dist/src/research/clients/arxiv.js +156 -0
  326. package/dist/src/research/clients/base.js +197 -0
  327. package/dist/src/research/clients/crossref.js +112 -0
  328. package/dist/src/research/clients/semantic-scholar.js +126 -0
  329. package/dist/src/research/clients/unpaywall.js +87 -0
  330. package/dist/src/research/index.js +14 -0
  331. package/dist/src/research/query-cli.js +336 -0
  332. package/dist/src/research/services/acquisition.js +313 -0
  333. package/dist/src/research/services/archival.js +225 -0
  334. package/dist/src/research/services/citation.js +279 -0
  335. package/dist/src/research/services/discovery.js +243 -0
  336. package/dist/src/research/services/documentation.js +269 -0
  337. package/dist/src/research/services/index.js +14 -0
  338. package/dist/src/research/services/provenance.js +279 -0
  339. package/dist/src/research/services/quality.js +370 -0
  340. package/dist/src/research/services/types.js +7 -0
  341. package/dist/src/research/storage-cli.js +20 -0
  342. package/dist/src/research/types.js +47 -0
  343. package/dist/src/resources/index.d.ts +2 -0
  344. package/dist/src/resources/index.js +2 -0
  345. package/dist/src/resources/web-release.d.ts +89 -0
  346. package/dist/src/resources/web-release.js +882 -0
  347. package/dist/src/rlm/cache/cli.js +162 -0
  348. package/dist/src/rlm/cache/hash.js +35 -0
  349. package/dist/src/rlm/cache/store.js +170 -0
  350. package/dist/src/rlm/cache/types.js +8 -0
  351. package/dist/src/rlm/cli.js +650 -0
  352. package/dist/src/serve/a2a-terminal-observer.js +120 -0
  353. package/dist/src/serve/agent-router.js +205 -0
  354. package/dist/src/serve/dispatch-router.js +171 -0
  355. package/dist/src/serve/executor-registry.js +715 -0
  356. package/dist/src/serve/mission-conductor.js +177 -0
  357. package/dist/src/serve/orchestrator-adapter.js +113 -0
  358. package/dist/src/serve/orchestrator-override.js +94 -0
  359. package/dist/src/serve/orchestrator-pty.js +133 -0
  360. package/dist/src/serve/pty-bridge.js +799 -0
  361. package/dist/src/serve/sandbox-registry.js +832 -0
  362. package/dist/src/serve/screen-reader.js +228 -0
  363. package/dist/src/serve/stack-adapters.js +68 -0
  364. package/dist/src/serve/telemetry.js +143 -0
  365. package/dist/src/skills/adapters/clawhub.js +250 -0
  366. package/dist/src/skills/adapters/local.js +335 -0
  367. package/dist/src/skills/adapters/openclaw.js +316 -0
  368. package/dist/src/skills/cli.js +334 -0
  369. package/dist/src/skills/registry.js +117 -0
  370. package/dist/src/skills/run.js +259 -0
  371. package/dist/src/skills/runtime.js +94 -0
  372. package/dist/src/skills/types.js +10 -0
  373. package/dist/src/smiths/agentsmith/demo.js +116 -0
  374. package/dist/src/smiths/agentsmith/examples.js +300 -0
  375. package/dist/src/smiths/agentsmith/generator.js +503 -0
  376. package/dist/src/smiths/agentsmith/index.js +11 -0
  377. package/dist/src/smiths/agentsmith/types.js +8 -0
  378. package/dist/src/smiths/commandsmith/example.js +220 -0
  379. package/dist/src/smiths/commandsmith/generator.js +288 -0
  380. package/dist/src/smiths/commandsmith/index.js +41 -0
  381. package/dist/src/smiths/commandsmith/templates.js +296 -0
  382. package/dist/src/smiths/commandsmith/types.js +7 -0
  383. package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
  384. package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
  385. package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
  386. package/dist/src/smiths/context-pipeline/discovery.js +187 -0
  387. package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
  388. package/dist/src/smiths/context-pipeline/finalization.js +147 -0
  389. package/dist/src/smiths/context-pipeline/generator.js +477 -0
  390. package/dist/src/smiths/context-pipeline/index.js +30 -0
  391. package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
  392. package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
  393. package/dist/src/smiths/context-pipeline/overflow.js +212 -0
  394. package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
  395. package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
  396. package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
  397. package/dist/src/smiths/context-pipeline/types.js +23 -0
  398. package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
  399. package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
  400. package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
  401. package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
  402. package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
  403. package/dist/src/smiths/hook-bridge/index.js +79 -0
  404. package/dist/src/smiths/hook-bridge/loader.js +116 -0
  405. package/dist/src/smiths/hook-bridge/shim.js +89 -0
  406. package/dist/src/smiths/hook-bridge/types.js +31 -0
  407. package/dist/src/smiths/index.js +39 -0
  408. package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
  409. package/dist/src/smiths/mcpsmith/example.js +119 -0
  410. package/dist/src/smiths/mcpsmith/generator.js +236 -0
  411. package/dist/src/smiths/mcpsmith/index.js +17 -0
  412. package/dist/src/smiths/mcpsmith/types.js +10 -0
  413. package/dist/src/smiths/platform-paths.js +101 -0
  414. package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
  415. package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
  416. package/dist/src/smiths/skillsmith/demo.js +83 -0
  417. package/dist/src/smiths/skillsmith/examples.js +161 -0
  418. package/dist/src/smiths/skillsmith/generator.js +316 -0
  419. package/dist/src/smiths/skillsmith/index.js +12 -0
  420. package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
  421. package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
  422. package/dist/src/smiths/skillsmith/types.js +9 -0
  423. package/dist/src/smiths/toolsmith/index.js +10 -0
  424. package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
  425. package/dist/src/smiths/toolsmith/types.js +8 -0
  426. package/dist/src/storage/backends/fortemi.js +227 -0
  427. package/dist/src/storage/backends/fs.js +134 -0
  428. package/dist/src/storage/backends/logseq.js +309 -0
  429. package/dist/src/storage/backends/obsidian.js +233 -0
  430. package/dist/src/storage/cli.js +468 -0
  431. package/dist/src/storage/config.js +272 -0
  432. package/dist/src/storage/index.js +108 -0
  433. package/dist/src/storage/subsystem-cli.js +201 -0
  434. package/dist/src/storage/types.js +33 -0
  435. package/dist/src/testing/corpus/corpus-builder.js +383 -0
  436. package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
  437. package/dist/src/testing/corpus/index.js +10 -0
  438. package/dist/src/testing/fixtures/index.js +9 -0
  439. package/dist/src/testing/fixtures/test-data-factory.js +472 -0
  440. package/dist/src/testing/generators/index.js +11 -0
  441. package/dist/src/testing/generators/test-case-generator.js +393 -0
  442. package/dist/src/testing/generators/test-code-generator.js +384 -0
  443. package/dist/src/testing/generators/use-case-parser.js +325 -0
  444. package/dist/src/testing/index.js +11 -0
  445. package/dist/src/tracker/capability-protocol.js +118 -0
  446. package/dist/src/update/checker.mjs +396 -0
  447. package/dist/src/update/notifier.mjs +235 -0
  448. package/dist/src/writing/content-diversifier.js +804 -0
  449. package/dist/src/writing/example-generator.js +959 -0
  450. package/dist/src/writing/example-templates.js +99 -0
  451. package/dist/src/writing/pattern-library.js +486 -0
  452. package/dist/src/writing/patterns/banned-phrases.json +4413 -0
  453. package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
  454. package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
  455. package/dist/src/writing/patterns/hedging-language.json +2096 -0
  456. package/dist/src/writing/patterns/transition-words.json +1285 -0
  457. package/dist/src/writing/patterns/weak-verbs.json +1112 -0
  458. package/dist/src/writing/prompt-optimizer.js +660 -0
  459. package/dist/src/writing/prompt-templates.js +583 -0
  460. package/dist/src/writing/scoring-config-loader.js +168 -0
  461. package/dist/src/writing/validation-engine.js +595 -0
  462. package/dist/src/writing/validation-rules.js +380 -0
  463. package/dist/src/writing/voice-analyzer.js +439 -0
  464. package/dist/src/writing/voice-calibration.js +661 -0
  465. package/dist/src/writing/voice-profiles.json +588 -0
  466. package/package.json +64 -9
@@ -0,0 +1,804 @@
1
+ /**
2
+ * Content Diversification Engine
3
+ *
4
+ * Generates diverse variations of content using different voices, perspectives,
5
+ * and structural approaches while maintaining authenticity and avoiding AI detection patterns.
6
+ */
7
+ /**
8
+ * Core Content Diversification Engine
9
+ */
10
+ export class ContentDiversifier {
11
+ voiceCharacteristics;
12
+ constructor() {
13
+ this.voiceCharacteristics = this.initializeVoiceCharacteristics();
14
+ }
15
+ /**
16
+ * Generate multiple variations of content with different options
17
+ */
18
+ async diversify(content, optionsList) {
19
+ const originalVoice = this.detectVoice(content);
20
+ const variations = [];
21
+ for (const options of optionsList) {
22
+ const variation = await this.generateVariation(content, options);
23
+ variations.push(variation);
24
+ }
25
+ return {
26
+ original: content,
27
+ variations,
28
+ metadata: {
29
+ originalVoice,
30
+ originalLength: content.length,
31
+ variationsGenerated: variations.length,
32
+ },
33
+ };
34
+ }
35
+ /**
36
+ * Generate a single variation with specified options
37
+ */
38
+ async generateVariation(content, options) {
39
+ let transformed = content;
40
+ const changes = [];
41
+ // Apply transformations in order
42
+ if (options.voice) {
43
+ const currentVoice = this.detectVoice(transformed);
44
+ transformed = this.transformVoice(transformed, currentVoice, options.voice);
45
+ changes.push(`Voice: ${currentVoice} → ${options.voice}`);
46
+ }
47
+ if (options.perspective) {
48
+ transformed = this.changePerspective(transformed, options.perspective);
49
+ changes.push(`Perspective: → ${options.perspective}`);
50
+ }
51
+ if (options.structure) {
52
+ transformed = this.restructure(transformed, options.structure);
53
+ changes.push(`Structure: → ${options.structure}`);
54
+ }
55
+ if (options.tone) {
56
+ transformed = this.adjustTone(transformed, options.tone);
57
+ changes.push(`Tone: → ${options.tone}`);
58
+ }
59
+ if (options.length) {
60
+ transformed = this.adjustLength(transformed, options.length);
61
+ changes.push(`Length: → ${options.length}`);
62
+ }
63
+ // Calculate scores
64
+ const authenticity = this.scoreAuthenticity(transformed);
65
+ const diversity = this.scoreDiversity(content, transformed);
66
+ return {
67
+ content: transformed,
68
+ options,
69
+ score: {
70
+ authenticity,
71
+ diversity,
72
+ },
73
+ changes,
74
+ };
75
+ }
76
+ /**
77
+ * Transform content from one voice to another
78
+ */
79
+ transformVoice(content, _fromVoice, toVoice) {
80
+ switch (toVoice) {
81
+ case 'academic':
82
+ return this.toAcademicVoice(content);
83
+ case 'technical':
84
+ return this.toTechnicalVoice(content);
85
+ case 'executive':
86
+ return this.toExecutiveVoice(content);
87
+ case 'casual':
88
+ return this.toCasualVoice(content);
89
+ default:
90
+ return content;
91
+ }
92
+ }
93
+ /**
94
+ * Transform to academic voice
95
+ */
96
+ toAcademicVoice(content) {
97
+ let transformed = content;
98
+ let changeCount = 0;
99
+ // Add hedging and qualifications (deterministic: first match always transforms)
100
+ transformed = transformed.replace(/\b(is|are|will|must|should)\b/gi, (match) => {
101
+ const hedges = ['appears to be', 'suggests', 'may', 'could', 'might'];
102
+ if (changeCount < 2) {
103
+ changeCount++;
104
+ return hedges[changeCount % hedges.length];
105
+ }
106
+ return Math.random() > 0.7 ? hedges[Math.floor(Math.random() * hedges.length)] : match;
107
+ });
108
+ // Add citations and references
109
+ const sentences = this.splitIntoSentences(transformed);
110
+ const citations = ['(Smith, 2023)', '(Johnson et al., 2022)', '(Lee & Chen, 2024)', '(Anderson, 2021)'];
111
+ // Always add at least one citation to the first applicable sentence
112
+ if (sentences.length > 0) {
113
+ const citation = citations[0];
114
+ sentences[0] = sentences[0].replace(/\.$/, ` ${citation}.`);
115
+ }
116
+ // Optionally add more citations
117
+ const citationSentences = Math.floor(sentences.length * 0.3);
118
+ for (let i = 1; i < citationSentences && i < sentences.length; i++) {
119
+ const idx = Math.floor(Math.random() * sentences.length);
120
+ const citation = citations[Math.floor(Math.random() * citations.length)];
121
+ if (!sentences[idx].includes('(')) {
122
+ sentences[idx] = sentences[idx].replace(/\.$/, ` ${citation}.`);
123
+ }
124
+ }
125
+ transformed = sentences.join(' ');
126
+ // Add formal transitions (at least one if multiple sentences)
127
+ let transitionAdded = false;
128
+ transformed = transformed.replace(/\. ([A-Z])/g, (match, letter) => {
129
+ const transitions = [
130
+ '. Furthermore, ',
131
+ '. Moreover, ',
132
+ '. However, ',
133
+ '. Nevertheless, ',
134
+ '. Consequently, ',
135
+ ];
136
+ if (!transitionAdded) {
137
+ transitionAdded = true;
138
+ return transitions[0] + letter;
139
+ }
140
+ return Math.random() > 0.7
141
+ ? transitions[Math.floor(Math.random() * transitions.length)] + letter
142
+ : match;
143
+ });
144
+ // Add acknowledgment of limitations if not present and content is non-empty
145
+ if (transformed.trim() && !transformed.includes('limit')) {
146
+ transformed += ' It should be noted that this approach has certain limitations that warrant further investigation.';
147
+ }
148
+ return transformed;
149
+ }
150
+ /**
151
+ * Transform to technical voice
152
+ */
153
+ toTechnicalVoice(content) {
154
+ let transformed = content;
155
+ let metricsAdded = 0;
156
+ // Add specific metrics and numbers (deterministic: first matches always transform)
157
+ transformed = transformed.replace(/\b(fast|slow|quick|better|improved|reduced|faster)\b/gi, (match) => {
158
+ const metrics = ['30%', '2.5x', '150ms', '40MB', '5 seconds'];
159
+ if (metricsAdded < 1) {
160
+ metricsAdded++;
161
+ return `${match} by ${metrics[metricsAdded % metrics.length]}`;
162
+ }
163
+ return Math.random() > 0.6
164
+ ? `${match} by ${metrics[Math.floor(Math.random() * metrics.length)]}`
165
+ : match;
166
+ });
167
+ // Add technical terminology (deterministically apply first matching term)
168
+ const technicalTerms = {
169
+ 'data': 'payload',
170
+ 'information': 'metadata',
171
+ 'storage': 'persistence layer',
172
+ 'speed': 'latency',
173
+ 'connection': 'TCP connection',
174
+ 'code': 'implementation',
175
+ };
176
+ let termReplaced = false;
177
+ for (const [casual, technical] of Object.entries(technicalTerms)) {
178
+ const regex = new RegExp(`\\b${casual}\\b`, 'gi');
179
+ if (!termReplaced && regex.test(transformed)) {
180
+ transformed = transformed.replace(regex, technical);
181
+ termReplaced = true;
182
+ }
183
+ else if (Math.random() > 0.5) {
184
+ transformed = transformed.replace(regex, technical);
185
+ }
186
+ }
187
+ // Always add implementation details
188
+ const implementationExamples = [
189
+ ' This can be achieved through connection pooling.',
190
+ ' The implementation leverages a non-blocking I/O model.',
191
+ ' We utilize a LRU cache with a 10-minute TTL.',
192
+ ' The system employs exponential backoff for retry logic.',
193
+ ];
194
+ const sentences = this.splitIntoSentences(transformed);
195
+ const insertIdx = Math.floor(sentences.length / 2);
196
+ sentences[insertIdx] += implementationExamples[0];
197
+ transformed = sentences.join(' ');
198
+ return transformed;
199
+ }
200
+ /**
201
+ * Transform to executive voice
202
+ */
203
+ toExecutiveVoice(content) {
204
+ let transformed = content;
205
+ // Remove hedging - make assertions
206
+ transformed = transformed.replace(/\b(might|could|possibly|perhaps|maybe)\b/gi, 'will');
207
+ transformed = transformed.replace(/\b(appears to|seems to|suggests)\b/gi, 'demonstrates');
208
+ // Add business metrics (deterministic for at least first match)
209
+ const businessMetrics = [
210
+ '$500K annually',
211
+ '30% ROI',
212
+ '2 quarters',
213
+ '15% market share',
214
+ '$2M cost savings',
215
+ '40% efficiency gain',
216
+ ];
217
+ let metricsAdded = 0;
218
+ transformed = transformed.replace(/\b(savings|revenue|cost|value|benefit)\b/gi, (match) => {
219
+ if (metricsAdded < 1) {
220
+ metricsAdded++;
221
+ return `${match} of ${businessMetrics[0]}`;
222
+ }
223
+ return Math.random() > 0.6
224
+ ? `${match} of ${businessMetrics[Math.floor(Math.random() * businessMetrics.length)]}`
225
+ : match;
226
+ });
227
+ // Add decision-focused language (always add to first sentence)
228
+ const decisionPhrases = [
229
+ 'We recommend',
230
+ 'The strategic priority is',
231
+ 'Our analysis indicates',
232
+ 'The optimal approach requires',
233
+ 'To maximize value, we should',
234
+ ];
235
+ const sentences = this.splitIntoSentences(transformed);
236
+ if (sentences.length > 0) {
237
+ const firstSentence = decisionPhrases[0] + ' ' + sentences[0].toLowerCase();
238
+ sentences[0] = firstSentence;
239
+ }
240
+ // Always add risk/opportunity framing
241
+ sentences.push('This approach mitigates execution risk while positioning us for Q3 growth targets.');
242
+ return sentences.join(' ');
243
+ }
244
+ /**
245
+ * Transform to casual voice
246
+ */
247
+ toCasualVoice(content) {
248
+ let transformed = content;
249
+ // Add contractions
250
+ const contractions = {
251
+ 'do not': "don't",
252
+ 'does not': "doesn't",
253
+ 'will not': "won't",
254
+ 'cannot': "can't",
255
+ 'it is': "it's",
256
+ 'that is': "that's",
257
+ 'we are': "we're",
258
+ 'you are': "you're",
259
+ 'they are': "they're",
260
+ };
261
+ for (const [formal, casual] of Object.entries(contractions)) {
262
+ const regex = new RegExp(`\\b${formal}\\b`, 'gi');
263
+ transformed = transformed.replace(regex, casual);
264
+ }
265
+ // Add conversational phrases (always add to first sentence)
266
+ const conversationalStarts = [
267
+ "Here's the thing - ",
268
+ "Look, ",
269
+ "The reality is ",
270
+ "Here's what matters: ",
271
+ "Bottom line? ",
272
+ ];
273
+ const sentences = this.splitIntoSentences(transformed);
274
+ if (sentences.length > 0) {
275
+ sentences[0] = conversationalStarts[0] + sentences[0].toLowerCase();
276
+ }
277
+ // Always add personal examples
278
+ const personalExamples = [
279
+ "I've seen this pattern in production systems before.",
280
+ "We ran into this exact issue last quarter.",
281
+ "This reminds me of a project we did in 2022.",
282
+ ];
283
+ sentences.push(personalExamples[0]);
284
+ // Always add analogies
285
+ const analogies = [
286
+ "Think of it like a conveyor belt - things need to move at a steady pace.",
287
+ "It's similar to how a restaurant kitchen handles orders during rush hour.",
288
+ "You can think of this as the difference between a highway and city streets.",
289
+ ];
290
+ sentences.splice(Math.floor(sentences.length / 2), 0, analogies[0]);
291
+ return sentences.join(' ');
292
+ }
293
+ /**
294
+ * Change perspective of content
295
+ */
296
+ changePerspective(content, perspective) {
297
+ switch (perspective) {
298
+ case 'first-person':
299
+ return this.toFirstPerson(content);
300
+ case 'third-person':
301
+ return this.toThirdPerson(content);
302
+ case 'neutral':
303
+ return this.toNeutral(content);
304
+ default:
305
+ return content;
306
+ }
307
+ }
308
+ /**
309
+ * Convert to first-person perspective
310
+ */
311
+ toFirstPerson(content) {
312
+ let transformed = content;
313
+ // Replace third-person with first-person
314
+ transformed = transformed.replace(/\bone\b/gi, 'I');
315
+ transformed = transformed.replace(/\bthe (user|developer|reader)\b/gi, 'I');
316
+ transformed = transformed.replace(/\bwe can\b/gi, 'I can');
317
+ // Add personal statements
318
+ if (!transformed.includes(' I ') && Math.random() > 0.5) {
319
+ const sentences = this.splitIntoSentences(transformed);
320
+ sentences[0] = "In my experience, " + sentences[0].toLowerCase();
321
+ transformed = sentences.join(' ');
322
+ }
323
+ return transformed;
324
+ }
325
+ /**
326
+ * Convert to third-person perspective
327
+ */
328
+ toThirdPerson(content) {
329
+ let transformed = content;
330
+ // Replace first-person with third-person
331
+ transformed = transformed.replace(/\bI\b/g, 'one');
332
+ transformed = transformed.replace(/\bmy\b/gi, 'their');
333
+ transformed = transformed.replace(/\bwe\b/gi, 'they');
334
+ transformed = transformed.replace(/\bour\b/gi, 'their');
335
+ return transformed;
336
+ }
337
+ /**
338
+ * Convert to neutral perspective
339
+ */
340
+ toNeutral(content) {
341
+ let transformed = content;
342
+ // Remove personal pronouns - use precise replacements
343
+ transformed = transformed.replace(/\bI\b/g, 'the system');
344
+ transformed = transformed.replace(/\bwe\b/gi, 'the approach');
345
+ transformed = transformed.replace(/\byou\b/gi, 'users');
346
+ transformed = transformed.replace(/\bmy\b/gi, 'the');
347
+ transformed = transformed.replace(/\bour\b/gi, 'the');
348
+ transformed = transformed.replace(/\byour\b/gi, 'user');
349
+ // Add passive voice - more carefully to avoid breaking grammar
350
+ transformed = transformed.replace(/\bcan configure\b/g, 'can be configured to');
351
+ transformed = transformed.replace(/\bcan handle\b/g, 'handles');
352
+ transformed = transformed.replace(/\bwill process\b/g, 'processes');
353
+ return transformed;
354
+ }
355
+ /**
356
+ * Restructure content into different format
357
+ */
358
+ restructure(content, structure) {
359
+ switch (structure) {
360
+ case 'bullets':
361
+ return this.toBulletPoints(content);
362
+ case 'narrative':
363
+ return this.toNarrative(content);
364
+ case 'qa':
365
+ return this.toQA(content);
366
+ case 'tutorial':
367
+ return this.toTutorial(content);
368
+ case 'comparison':
369
+ return this.toComparison(content);
370
+ default:
371
+ return content;
372
+ }
373
+ }
374
+ /**
375
+ * Convert to bullet point format
376
+ */
377
+ toBulletPoints(content) {
378
+ const sentences = this.splitIntoSentences(content);
379
+ const bullets = sentences.map(sentence => `- ${sentence.trim()}`);
380
+ return bullets.join('\n');
381
+ }
382
+ /**
383
+ * Convert to narrative format
384
+ */
385
+ toNarrative(content) {
386
+ const lines = content.split('\n').filter(line => line.trim());
387
+ let narrative = '';
388
+ for (let i = 0; i < lines.length; i++) {
389
+ const line = lines[i].replace(/^[-*]\s*/, '').trim();
390
+ if (i === 0) {
391
+ narrative += line + '. ';
392
+ }
393
+ else {
394
+ const transitions = ['Additionally', 'Furthermore', 'Next', 'Then', 'Moreover', 'Also'];
395
+ const transition = transitions[Math.floor(Math.random() * transitions.length)];
396
+ narrative += `${transition}, ${line.toLowerCase()}. `;
397
+ }
398
+ }
399
+ return narrative.trim();
400
+ }
401
+ /**
402
+ * Convert to Q&A format
403
+ */
404
+ toQA(content) {
405
+ const sentences = this.splitIntoSentences(content);
406
+ let qa = '';
407
+ for (let i = 0; i < sentences.length; i += 2) {
408
+ const statement = sentences[i];
409
+ // Generate question from statement
410
+ const question = this.statementToQuestion(statement);
411
+ qa += `Q: ${question}\n`;
412
+ // Use statement as answer
413
+ const answer = sentences[i] + (sentences[i + 1] ? ' ' + sentences[i + 1] : '');
414
+ qa += `A: ${answer}\n\n`;
415
+ }
416
+ return qa.trim();
417
+ }
418
+ /**
419
+ * Convert to tutorial format
420
+ */
421
+ toTutorial(content) {
422
+ const sentences = this.splitIntoSentences(content);
423
+ let tutorial = '## Step-by-Step Guide\n\n';
424
+ sentences.forEach((sentence, idx) => {
425
+ tutorial += `### Step ${idx + 1}\n\n${sentence}\n\n`;
426
+ });
427
+ return tutorial;
428
+ }
429
+ /**
430
+ * Convert to comparison format
431
+ */
432
+ toComparison(content) {
433
+ const sentences = this.splitIntoSentences(content);
434
+ const midpoint = Math.floor(sentences.length / 2);
435
+ let comparison = '## Approach A\n\n';
436
+ for (let i = 0; i < midpoint; i++) {
437
+ comparison += `- ${sentences[i]}\n`;
438
+ }
439
+ comparison += '\n## Approach B\n\n';
440
+ for (let i = midpoint; i < sentences.length; i++) {
441
+ comparison += `- ${sentences[i]}\n`;
442
+ }
443
+ return comparison;
444
+ }
445
+ /**
446
+ * Adjust tone of content
447
+ */
448
+ adjustTone(content, tone) {
449
+ switch (tone) {
450
+ case 'formal':
451
+ return this.toFormal(content);
452
+ case 'conversational':
453
+ return this.toConversational(content);
454
+ case 'enthusiastic':
455
+ return this.toEnthusiastic(content);
456
+ case 'matter-of-fact':
457
+ return this.toMatterOfFact(content);
458
+ default:
459
+ return content;
460
+ }
461
+ }
462
+ /**
463
+ * Convert to formal tone
464
+ */
465
+ toFormal(content) {
466
+ let transformed = content;
467
+ // Expand contractions
468
+ const expansions = {
469
+ "don't": 'do not',
470
+ "doesn't": 'does not',
471
+ "won't": 'will not',
472
+ "can't": 'cannot',
473
+ "it's": 'it is',
474
+ "that's": 'that is',
475
+ "we're": 'we are',
476
+ "here's": 'here is',
477
+ };
478
+ for (const [contraction, expansion] of Object.entries(expansions)) {
479
+ const regex = new RegExp(contraction, 'gi');
480
+ transformed = transformed.replace(regex, expansion);
481
+ }
482
+ // Remove casual phrases
483
+ transformed = transformed.replace(/\b(just|really|very|pretty)\b/gi, '');
484
+ // Remove informal starters
485
+ transformed = transformed.replace(/^(Here's the thing - |Look, |The reality is |Here's what matters: |Bottom line\? )/gi, '');
486
+ // Clean up spacing
487
+ transformed = transformed.replace(/\s+/g, ' ').trim();
488
+ return transformed;
489
+ }
490
+ /**
491
+ * Convert to conversational tone
492
+ */
493
+ toConversational(content) {
494
+ let transformed = content;
495
+ // Add conversational markers (always add to first sentence)
496
+ const markers = ['Well, ', 'So, ', 'Now, ', 'You see, '];
497
+ const sentences = this.splitIntoSentences(transformed);
498
+ if (sentences.length > 0) {
499
+ sentences[0] = markers[0] + sentences[0].toLowerCase();
500
+ }
501
+ // Always add a question
502
+ const questions = ['Make sense?', 'Follow me?', 'See what I mean?', 'Right?'];
503
+ sentences.push(questions[0]);
504
+ return sentences.join(' ');
505
+ }
506
+ /**
507
+ * Convert to enthusiastic tone
508
+ */
509
+ toEnthusiastic(content) {
510
+ let transformed = content;
511
+ let modifiedCount = 0;
512
+ // Add enthusiastic modifiers (deterministic: first match always transforms)
513
+ transformed = transformed.replace(/\b(good|great|nice|effective|useful)\b/gi, (match) => {
514
+ const enthusiastic = ['amazing', 'fantastic', 'excellent', 'outstanding', 'brilliant'];
515
+ if (modifiedCount < 1) {
516
+ modifiedCount++;
517
+ return enthusiastic[0];
518
+ }
519
+ return Math.random() > 0.6
520
+ ? enthusiastic[Math.floor(Math.random() * enthusiastic.length)]
521
+ : match;
522
+ });
523
+ // Add exclamation points (at least one)
524
+ let exclamationAdded = false;
525
+ transformed = transformed.replace(/\./g, (match) => {
526
+ if (!exclamationAdded) {
527
+ exclamationAdded = true;
528
+ return '!';
529
+ }
530
+ return Math.random() > 0.7 ? '!' : match;
531
+ });
532
+ return transformed;
533
+ }
534
+ /**
535
+ * Convert to matter-of-fact tone
536
+ */
537
+ toMatterOfFact(content) {
538
+ let transformed = content;
539
+ // Remove exclamation points
540
+ transformed = transformed.replace(/!/g, '.');
541
+ // Remove qualifiers (with trailing space)
542
+ transformed = transformed.replace(/\b(very|really|extremely|quite|rather|absolutely)\b\s*/gi, '');
543
+ // Remove emphatic words (with trailing space)
544
+ transformed = transformed.replace(/\b(clearly|obviously|certainly|definitely)\b\s*/gi, '');
545
+ // Replace enthusiastic adjectives with neutral ones
546
+ transformed = transformed.replace(/\b(amazing|fantastic|incredible|excellent)\b/gi, (match) => {
547
+ const neutralReplacements = {
548
+ 'amazing': 'notable',
549
+ 'fantastic': 'good',
550
+ 'incredible': 'significant',
551
+ 'excellent': 'good',
552
+ };
553
+ return neutralReplacements[match.toLowerCase()] || match;
554
+ });
555
+ // Clean up spacing and multiple periods
556
+ transformed = transformed.replace(/\s+/g, ' ').trim();
557
+ transformed = transformed.replace(/\.+/g, '.');
558
+ return transformed;
559
+ }
560
+ /**
561
+ * Adjust length of content
562
+ */
563
+ adjustLength(content, length) {
564
+ switch (length) {
565
+ case 'concise':
566
+ return this.toConcise(content);
567
+ case 'comprehensive':
568
+ return this.toComprehensive(content);
569
+ case 'standard':
570
+ default:
571
+ return content;
572
+ }
573
+ }
574
+ /**
575
+ * Shorten content
576
+ */
577
+ toConcise(content) {
578
+ const sentences = this.splitIntoSentences(content);
579
+ const targetLength = Math.ceil(sentences.length * 0.6);
580
+ // Keep most important sentences (first and last are usually key)
581
+ const kept = [
582
+ sentences[0],
583
+ ...sentences.slice(1, -1).slice(0, targetLength - 2),
584
+ sentences[sentences.length - 1],
585
+ ];
586
+ return kept.join(' ');
587
+ }
588
+ /**
589
+ * Expand content
590
+ */
591
+ toComprehensive(content) {
592
+ const sentences = this.splitIntoSentences(content);
593
+ const expanded = [];
594
+ for (const sentence of sentences) {
595
+ expanded.push(sentence);
596
+ // Add elaboration
597
+ if (Math.random() > 0.5) {
598
+ const elaborations = [
599
+ 'This approach offers several advantages.',
600
+ 'Let me explain this in more detail.',
601
+ 'Consider the implications of this carefully.',
602
+ 'This is particularly important in practice.',
603
+ ];
604
+ expanded.push(elaborations[Math.floor(Math.random() * elaborations.length)]);
605
+ }
606
+ // Add examples
607
+ if (Math.random() > 0.7) {
608
+ expanded.push('For example, in a typical production environment, this pattern reduces latency by 25%.');
609
+ }
610
+ }
611
+ return expanded.join(' ');
612
+ }
613
+ /**
614
+ * Generate before/after example pair
615
+ */
616
+ async generateBeforeAfter(topic) {
617
+ // Generate AI-heavy "before" content
618
+ const before = this.generateAIHeavyContent(topic);
619
+ // Transform to authentic "after" content
620
+ const after = await this.generateVariation(before, {
621
+ voice: 'technical',
622
+ tone: 'conversational',
623
+ structure: 'narrative',
624
+ });
625
+ return {
626
+ before,
627
+ after: after.content,
628
+ };
629
+ }
630
+ /**
631
+ * Generate diverse scenarios for a concept
632
+ */
633
+ async generateDiverseScenarios(concept, count) {
634
+ const scenarios = [];
635
+ const baseContent = `${concept} is an important consideration in software development.`;
636
+ const voiceOptions = ['academic', 'technical', 'executive', 'casual'];
637
+ for (let i = 0; i < count; i++) {
638
+ const voice = voiceOptions[i % voiceOptions.length];
639
+ const variation = await this.generateVariation(baseContent, {
640
+ voice,
641
+ perspective: i % 2 === 0 ? 'first-person' : 'neutral',
642
+ tone: i % 2 === 0 ? 'conversational' : 'formal',
643
+ });
644
+ scenarios.push(variation.content);
645
+ }
646
+ return scenarios;
647
+ }
648
+ // Private helper methods
649
+ initializeVoiceCharacteristics() {
650
+ const characteristics = new Map();
651
+ characteristics.set('academic', {
652
+ markers: [/\([\w\s,&]+,\s*\d{4}\)/, /suggests that/, /appears to/, /research indicates/i],
653
+ vocabulary: ['furthermore', 'moreover', 'nevertheless', 'consequently', 'empirical'],
654
+ structurePreferences: ['formal transitions', 'citations', 'hedging'],
655
+ });
656
+ characteristics.set('technical', {
657
+ markers: [/\d+(\.\d+)?\s*(ms|MB|GB|%)/, /implementation/, /latency/, /throughput/i],
658
+ vocabulary: ['payload', 'metadata', 'optimization', 'configuration', 'deployment'],
659
+ structurePreferences: ['metrics', 'code examples', 'specifications'],
660
+ });
661
+ characteristics.set('executive', {
662
+ markers: [/\$[\d,]+[KM]?/, /ROI/, /\d+%\s*(increase|decrease|improvement)/, /strategic/i],
663
+ vocabulary: ['strategic', 'leverage', 'optimize', 'maximize', 'stakeholder'],
664
+ structurePreferences: ['business impact', 'recommendations', 'decisions'],
665
+ });
666
+ characteristics.set('casual', {
667
+ markers: [/\b(don't|can't|won't|it's)\b/, /here's/i, /\bI\b/, /you know/i],
668
+ vocabulary: ["here's", 'basically', 'pretty', 'just', 'really'],
669
+ structurePreferences: ['contractions', 'personal examples', 'analogies'],
670
+ });
671
+ return characteristics;
672
+ }
673
+ detectVoice(content) {
674
+ const scores = new Map();
675
+ for (const [voice, characteristics] of this.voiceCharacteristics.entries()) {
676
+ let score = 0;
677
+ for (const marker of characteristics.markers) {
678
+ const matches = content.match(marker);
679
+ if (matches) {
680
+ score += matches.length;
681
+ }
682
+ }
683
+ for (const term of characteristics.vocabulary) {
684
+ const regex = new RegExp(`\\b${term}\\b`, 'gi');
685
+ const matches = content.match(regex);
686
+ if (matches) {
687
+ score += matches.length;
688
+ }
689
+ }
690
+ scores.set(voice, score);
691
+ }
692
+ const sortedScores = Array.from(scores.entries()).sort((a, b) => b[1] - a[1]);
693
+ // If top score is significantly higher, return that voice
694
+ if (sortedScores[0][1] > sortedScores[1][1] * 1.5) {
695
+ return sortedScores[0][0];
696
+ }
697
+ return 'mixed';
698
+ }
699
+ scoreAuthenticity(content) {
700
+ let score = 50; // baseline
701
+ // Positive markers
702
+ if (content.match(/\d+(\.\d+)?\s*(ms|MB|GB|%|seconds)/))
703
+ score += 10; // specific metrics
704
+ if (content.match(/\$[\d,]+/))
705
+ score += 10; // concrete numbers
706
+ if (content.match(/\b(I|we)\b/))
707
+ score += 5; // personal voice
708
+ if (content.match(/\b(However|But|Although)\b/))
709
+ score += 5; // acknowledges nuance
710
+ // Negative markers
711
+ if (content.includes('delve'))
712
+ score -= 20;
713
+ if (content.includes('leverage') && !content.includes('executive'))
714
+ score -= 10;
715
+ if (content.match(/it's important to note/i))
716
+ score -= 15;
717
+ return Math.max(0, Math.min(100, score));
718
+ }
719
+ scoreDiversity(original, variation) {
720
+ // Simple edit distance-based diversity score
721
+ const distance = this.levenshteinDistance(original, variation);
722
+ const maxLength = Math.max(original.length, variation.length);
723
+ return Math.round((distance / maxLength) * 100);
724
+ }
725
+ levenshteinDistance(str1, str2) {
726
+ const matrix = [];
727
+ for (let i = 0; i <= str2.length; i++) {
728
+ matrix[i] = [i];
729
+ }
730
+ for (let j = 0; j <= str1.length; j++) {
731
+ matrix[0][j] = j;
732
+ }
733
+ for (let i = 1; i <= str2.length; i++) {
734
+ for (let j = 1; j <= str1.length; j++) {
735
+ if (str2.charAt(i - 1) === str1.charAt(j - 1)) {
736
+ matrix[i][j] = matrix[i - 1][j - 1];
737
+ }
738
+ else {
739
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
740
+ }
741
+ }
742
+ }
743
+ return matrix[str2.length][str1.length];
744
+ }
745
+ splitIntoSentences(content) {
746
+ // Split on sentence boundaries
747
+ const sentences = content
748
+ .split(/[.!?]+/)
749
+ .map(s => s.trim())
750
+ .filter(s => s.length > 0);
751
+ return sentences.map(s => {
752
+ // Ensure sentence ends with period
753
+ if (!s.match(/[.!?]$/)) {
754
+ return s + '.';
755
+ }
756
+ return s;
757
+ });
758
+ }
759
+ statementToQuestion(statement) {
760
+ // Simple heuristic to convert statement to question
761
+ const lower = statement.toLowerCase();
762
+ const cleanStatement = statement.replace(/\.$/, ''); // Remove trailing period
763
+ // Match common sentence structures and convert to questions
764
+ if (lower.startsWith('the ')) {
765
+ // "The system is reliable." -> "Is the system reliable?"
766
+ const match = cleanStatement.match(/^The\s+(\w+)\s+is\s+(.+)$/i);
767
+ if (match) {
768
+ return `Is the ${match[1]} ${match[2]}?`;
769
+ }
770
+ }
771
+ if (lower.includes(' is ')) {
772
+ // Extract subject and convert: "X is Y" -> "What is X?"
773
+ const match = cleanStatement.match(/^(.+?)\s+is\s+/i);
774
+ if (match) {
775
+ return `What is ${match[1].toLowerCase()}?`;
776
+ }
777
+ }
778
+ if (lower.includes(' can ')) {
779
+ const match = cleanStatement.match(/^(.+?)\s+can\s+/i);
780
+ if (match) {
781
+ return `How can ${match[1].toLowerCase()} be used?`;
782
+ }
783
+ }
784
+ if (lower.includes(' should ')) {
785
+ const match = cleanStatement.match(/^(.+?)\s+should\s+/i);
786
+ if (match) {
787
+ return `Why should ${match[1].toLowerCase()}?`;
788
+ }
789
+ }
790
+ // Default fallback - make it a proper question
791
+ return `What about ${cleanStatement.toLowerCase()}?`;
792
+ }
793
+ generateAIHeavyContent(topic) {
794
+ // Generate content with typical AI patterns
795
+ const aiPhrases = [
796
+ `It's important to note that ${topic} plays a crucial role in modern development.`,
797
+ `When delving into ${topic}, one must consider various aspects and nuances.`,
798
+ `At the end of the day, ${topic} is absolutely essential for success.`,
799
+ `It goes without saying that ${topic} should be carefully considered.`,
800
+ ];
801
+ return aiPhrases.join(' ');
802
+ }
803
+ }
804
+ //# sourceMappingURL=content-diversifier.js.map