@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,279 @@
1
+ /**
2
+ * Citation service for formatting and validating citations
3
+ *
4
+ * @module research/services/citation
5
+ */
6
+ import { promises as fs } from 'fs';
7
+ /**
8
+ * Citation service for managing citations and networks
9
+ */
10
+ export class CitationService {
11
+ corpusPath;
12
+ claimsIndexPath;
13
+ constructor(config = {}) {
14
+ this.corpusPath = config.corpusPath || '.aiwg/research/sources';
15
+ this.claimsIndexPath = config.claimsIndexPath || '.aiwg/research/claims-index.json';
16
+ }
17
+ /**
18
+ * Format citation in specified style
19
+ */
20
+ formatCitation(paper, style = 'apa') {
21
+ switch (style) {
22
+ case 'apa':
23
+ return this.formatAPA(paper);
24
+ case 'bibtex':
25
+ return this.formatBibTeX(paper);
26
+ case 'chicago':
27
+ return this.formatChicago(paper);
28
+ case 'mla':
29
+ return this.formatMLA(paper);
30
+ case 'ieee':
31
+ return this.formatIEEE(paper);
32
+ default:
33
+ return this.formatAPA(paper);
34
+ }
35
+ }
36
+ /**
37
+ * Validate that a citation exists in corpus
38
+ */
39
+ async validateCitation(refId, corpusPath) {
40
+ const path = corpusPath || this.corpusPath;
41
+ try {
42
+ const files = await fs.readdir(path);
43
+ return files.some((file) => file.startsWith(refId));
44
+ }
45
+ catch (error) {
46
+ return false;
47
+ }
48
+ }
49
+ /**
50
+ * Build citation network from papers
51
+ */
52
+ buildNetwork(papers) {
53
+ const nodes = papers.map((paper) => ({
54
+ refId: paper.id,
55
+ title: paper.title,
56
+ year: paper.year,
57
+ citationCount: paper.citationCount || 0,
58
+ }));
59
+ // For now, return empty edges (full implementation would extract references)
60
+ const edges = [];
61
+ // Calculate simple metrics
62
+ const sortedByCitations = [...nodes].sort((a, b) => b.citationCount - a.citationCount);
63
+ const mostCitedPapers = sortedByCitations.slice(0, 5).map((n) => n.refId);
64
+ return {
65
+ nodes,
66
+ edges,
67
+ metrics: {
68
+ mostCitedPapers,
69
+ mostInfluentialPapers: mostCitedPapers, // Simplified
70
+ clusterCenters: [], // Would require clustering algorithm
71
+ },
72
+ };
73
+ }
74
+ /**
75
+ * Update claims index with new claim
76
+ */
77
+ async updateClaimsIndex(claim, sources) {
78
+ let index = {};
79
+ // Load existing index
80
+ try {
81
+ const data = await fs.readFile(this.claimsIndexPath, 'utf-8');
82
+ index = JSON.parse(data);
83
+ }
84
+ catch (error) {
85
+ // Index doesn't exist yet
86
+ }
87
+ // Update or create claim entry
88
+ if (index[claim]) {
89
+ // Merge sources, remove duplicates
90
+ const merged = [...new Set([...index[claim], ...sources])];
91
+ index[claim] = merged;
92
+ }
93
+ else {
94
+ index[claim] = sources;
95
+ }
96
+ // Write back
97
+ await fs.writeFile(this.claimsIndexPath, JSON.stringify(index, null, 2), 'utf-8');
98
+ }
99
+ /**
100
+ * Format citation in APA style
101
+ */
102
+ formatAPA(paper) {
103
+ const authors = this.formatAuthorsAPA(paper.authors.map((a) => a.name));
104
+ const year = paper.year || 'n.d.';
105
+ const title = paper.title;
106
+ const venue = paper.venue || '';
107
+ const doi = paper.doi ? `https://doi.org/${paper.doi}` : '';
108
+ let citation = `${authors} (${year}). ${title}.`;
109
+ if (venue) {
110
+ citation += ` ${venue}.`;
111
+ }
112
+ if (doi) {
113
+ citation += ` ${doi}`;
114
+ }
115
+ return citation;
116
+ }
117
+ /**
118
+ * Format citation in BibTeX style
119
+ */
120
+ formatBibTeX(paper) {
121
+ const id = this.generateBibTeXId(paper);
122
+ const authors = paper.authors.map((a) => a.name).join(' and ');
123
+ const year = paper.year || '';
124
+ const title = paper.title;
125
+ const venue = paper.venue || '';
126
+ const doi = paper.doi || '';
127
+ const entryType = paper.type === 'journal' ? 'article' : 'inproceedings';
128
+ let bibtex = `@${entryType}{${id},\n`;
129
+ bibtex += ` author = {${authors}},\n`;
130
+ bibtex += ` title = {${title}},\n`;
131
+ bibtex += ` year = {${year}},\n`;
132
+ if (venue) {
133
+ const field = entryType === 'article' ? 'journal' : 'booktitle';
134
+ bibtex += ` ${field} = {${venue}},\n`;
135
+ }
136
+ if (doi) {
137
+ bibtex += ` doi = {${doi}},\n`;
138
+ }
139
+ bibtex += `}`;
140
+ return bibtex;
141
+ }
142
+ /**
143
+ * Format citation in Chicago style
144
+ */
145
+ formatChicago(paper) {
146
+ const authors = this.formatAuthorsChicago(paper.authors.map((a) => a.name));
147
+ const year = paper.year || 'n.d.';
148
+ const title = `"${paper.title}"`;
149
+ const venue = paper.venue || '';
150
+ const doi = paper.doi ? `https://doi.org/${paper.doi}` : '';
151
+ let citation = `${authors}. ${year}. ${title}.`;
152
+ if (venue) {
153
+ citation += ` ${venue}.`;
154
+ }
155
+ if (doi) {
156
+ citation += ` ${doi}`;
157
+ }
158
+ return citation;
159
+ }
160
+ /**
161
+ * Format citation in MLA style
162
+ */
163
+ formatMLA(paper) {
164
+ const authors = this.formatAuthorsMLA(paper.authors.map((a) => a.name));
165
+ const title = `"${paper.title}"`;
166
+ const venue = paper.venue || '';
167
+ const year = paper.year || 'n.d.';
168
+ let citation = `${authors}. ${title}.`;
169
+ if (venue) {
170
+ citation += ` ${venue},`;
171
+ }
172
+ citation += ` ${year}.`;
173
+ return citation;
174
+ }
175
+ /**
176
+ * Format citation in IEEE style
177
+ */
178
+ formatIEEE(paper) {
179
+ const authors = this.formatAuthorsIEEE(paper.authors.map((a) => a.name));
180
+ const title = `"${paper.title}"`;
181
+ const venue = paper.venue ? `, ${paper.venue}` : '';
182
+ const year = paper.year || 'n.d.';
183
+ return `${authors}, ${title}${venue}, ${year}.`;
184
+ }
185
+ /**
186
+ * Format authors in APA style
187
+ */
188
+ formatAuthorsAPA(authors) {
189
+ if (authors.length === 0)
190
+ return 'Unknown';
191
+ if (authors.length === 1)
192
+ return authors[0];
193
+ if (authors.length === 2)
194
+ return `${authors[0]} & ${authors[1]}`;
195
+ const lastAuthor = authors[authors.length - 1];
196
+ const otherAuthors = authors.slice(0, -1).join(', ');
197
+ return `${otherAuthors}, & ${lastAuthor}`;
198
+ }
199
+ /**
200
+ * Format authors in Chicago style
201
+ */
202
+ formatAuthorsChicago(authors) {
203
+ if (authors.length === 0)
204
+ return 'Unknown';
205
+ if (authors.length === 1)
206
+ return this.reverseAuthorName(authors[0]);
207
+ if (authors.length === 2) {
208
+ return `${this.reverseAuthorName(authors[0])} and ${authors[1]}`;
209
+ }
210
+ const firstAuthor = this.reverseAuthorName(authors[0]);
211
+ const otherAuthors = authors.slice(1).join(', ');
212
+ return `${firstAuthor}, ${otherAuthors}`;
213
+ }
214
+ /**
215
+ * Format authors in MLA style
216
+ */
217
+ formatAuthorsMLA(authors) {
218
+ if (authors.length === 0)
219
+ return 'Unknown';
220
+ if (authors.length === 1)
221
+ return this.reverseAuthorName(authors[0]);
222
+ if (authors.length === 2) {
223
+ return `${this.reverseAuthorName(authors[0])}, and ${authors[1]}`;
224
+ }
225
+ const firstAuthor = this.reverseAuthorName(authors[0]);
226
+ return `${firstAuthor}, et al.`;
227
+ }
228
+ /**
229
+ * Format authors in IEEE style
230
+ */
231
+ formatAuthorsIEEE(authors) {
232
+ if (authors.length === 0)
233
+ return 'Unknown';
234
+ const initials = authors.map((name) => {
235
+ const parts = name.split(' ');
236
+ if (parts.length === 1)
237
+ return name;
238
+ const lastName = parts[parts.length - 1];
239
+ const firstInitials = parts
240
+ .slice(0, -1)
241
+ .map((p) => p.charAt(0) + '.')
242
+ .join(' ');
243
+ return `${firstInitials} ${lastName}`;
244
+ });
245
+ if (initials.length === 1)
246
+ return initials[0];
247
+ if (initials.length === 2)
248
+ return `${initials[0]} and ${initials[1]}`;
249
+ const lastAuthor = initials[initials.length - 1];
250
+ const otherAuthors = initials.slice(0, -1).join(', ');
251
+ return `${otherAuthors}, and ${lastAuthor}`;
252
+ }
253
+ /**
254
+ * Reverse author name (First Last -> Last, First)
255
+ */
256
+ reverseAuthorName(name) {
257
+ const parts = name.split(' ');
258
+ if (parts.length === 1)
259
+ return name;
260
+ const lastName = parts[parts.length - 1];
261
+ const firstName = parts.slice(0, -1).join(' ');
262
+ return `${lastName}, ${firstName}`;
263
+ }
264
+ /**
265
+ * Generate BibTeX citation ID
266
+ */
267
+ generateBibTeXId(paper) {
268
+ const author = paper.authors.length > 0
269
+ ? paper.authors[0].name.split(' ').pop()?.toLowerCase()
270
+ : 'unknown';
271
+ const year = paper.year || 'unknown';
272
+ const titleWord = paper.title
273
+ .toLowerCase()
274
+ .replace(/[^\w\s]/g, '')
275
+ .split(/\s+/)[0];
276
+ return `${author}${year}${titleWord}`;
277
+ }
278
+ }
279
+ //# sourceMappingURL=citation.js.map
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Discovery service for unified research paper search
3
+ *
4
+ * @module research/services/discovery
5
+ */
6
+ import { SemanticScholarClient } from '../clients/semantic-scholar.js';
7
+ import { CrossRefClient } from '../clients/crossref.js';
8
+ import { ArxivClient } from '../clients/arxiv.js';
9
+ import { CacheManager } from '../cache/manager.js';
10
+ /**
11
+ * Discovery service for unified search across API clients
12
+ */
13
+ export class DiscoveryService {
14
+ semanticScholar;
15
+ crossref;
16
+ arxiv;
17
+ cache;
18
+ constructor(config = {}) {
19
+ this.semanticScholar = config.semanticScholar || new SemanticScholarClient();
20
+ this.crossref = config.crossref || new CrossRefClient();
21
+ this.arxiv = config.arxiv || new ArxivClient();
22
+ this.cache = config.cache || new CacheManager();
23
+ }
24
+ /**
25
+ * Search across all configured API clients
26
+ */
27
+ async search(query, options = {}) {
28
+ const { limit = 10, offset = 0, useCache = true, minYear, maxYear, relevanceThreshold = 0.0, deduplicate = true, } = options;
29
+ // Check cache
30
+ if (useCache) {
31
+ const cacheKey = this.cache.generateKey('discovery:search', {
32
+ query,
33
+ limit,
34
+ offset,
35
+ minYear,
36
+ maxYear,
37
+ });
38
+ const cached = await this.cache.get(cacheKey);
39
+ if (cached) {
40
+ return cached;
41
+ }
42
+ }
43
+ // Search all APIs in parallel
44
+ const [ssResults, crResults, arxivResults] = await Promise.allSettled([
45
+ this.searchSemanticScholar(query, limit, offset),
46
+ this.searchCrossRef(query, limit, offset),
47
+ this.searchArxiv(query, limit, offset),
48
+ ]);
49
+ // Collect successful results
50
+ const allPapers = [];
51
+ if (ssResults.status === 'fulfilled') {
52
+ allPapers.push(...ssResults.value);
53
+ }
54
+ if (crResults.status === 'fulfilled') {
55
+ allPapers.push(...crResults.value);
56
+ }
57
+ if (arxivResults.status === 'fulfilled') {
58
+ allPapers.push(...arxivResults.value);
59
+ }
60
+ // Filter by year range
61
+ let filtered = allPapers;
62
+ if (minYear !== undefined) {
63
+ filtered = filtered.filter((p) => p.year >= minYear);
64
+ }
65
+ if (maxYear !== undefined) {
66
+ filtered = filtered.filter((p) => p.year <= maxYear);
67
+ }
68
+ // Deduplicate by DOI/arXiv ID/title
69
+ if (deduplicate) {
70
+ filtered = this.deduplicatePapers(filtered);
71
+ }
72
+ // Rank by relevance
73
+ const ranked = this.rankByRelevance(filtered, query);
74
+ // Filter by relevance threshold
75
+ const thresholded = ranked.filter((p) => this.calculateRelevance(p, query) >= relevanceThreshold);
76
+ // Apply limit
77
+ const results = thresholded.slice(0, limit);
78
+ // Cache results
79
+ if (useCache) {
80
+ const cacheKey = this.cache.generateKey('discovery:search', {
81
+ query,
82
+ limit,
83
+ offset,
84
+ minYear,
85
+ maxYear,
86
+ });
87
+ await this.cache.set(cacheKey, results, 'semantic-scholar');
88
+ }
89
+ return results;
90
+ }
91
+ /**
92
+ * Analyze gaps in research corpus
93
+ */
94
+ async analyzeGaps(_corpusRefIds) {
95
+ // For now, return a basic report structure
96
+ // In a full implementation, this would analyze corpus metadata
97
+ return {
98
+ underrepresentedTopics: [],
99
+ yearGaps: [],
100
+ sourceTypeDistribution: {},
101
+ recommendations: [
102
+ 'Corpus gap analysis requires corpus metadata',
103
+ 'Consider adding more recent publications',
104
+ 'Balance source types (journal vs conference vs preprint)',
105
+ ],
106
+ };
107
+ }
108
+ /**
109
+ * Follow citation network starting from a paper
110
+ */
111
+ async followCitations(paperId, depth = 1) {
112
+ const results = [];
113
+ const visited = new Set();
114
+ await this.followCitationsRecursive(paperId, depth, visited, results);
115
+ return results;
116
+ }
117
+ /**
118
+ * Search Semantic Scholar
119
+ */
120
+ async searchSemanticScholar(query, limit, offset) {
121
+ try {
122
+ const result = await this.semanticScholar.search(query, {
123
+ limit,
124
+ offset,
125
+ });
126
+ return result.papers;
127
+ }
128
+ catch (error) {
129
+ console.warn('Semantic Scholar search failed:', error);
130
+ return [];
131
+ }
132
+ }
133
+ /**
134
+ * Search CrossRef
135
+ */
136
+ async searchCrossRef(query, limit, offset) {
137
+ try {
138
+ const result = await this.crossref.search(query, { limit, offset });
139
+ return result.papers;
140
+ }
141
+ catch (error) {
142
+ console.warn('CrossRef search failed:', error);
143
+ return [];
144
+ }
145
+ }
146
+ /**
147
+ * Search arXiv
148
+ */
149
+ async searchArxiv(query, limit, offset) {
150
+ try {
151
+ const result = await this.arxiv.search(query, { limit, offset });
152
+ return result.papers;
153
+ }
154
+ catch (error) {
155
+ console.warn('arXiv search failed:', error);
156
+ return [];
157
+ }
158
+ }
159
+ /**
160
+ * Deduplicate papers by DOI, arXiv ID, or title similarity
161
+ */
162
+ deduplicatePapers(papers) {
163
+ const seen = new Map();
164
+ for (const paper of papers) {
165
+ // Use DOI as primary key
166
+ if (paper.doi) {
167
+ const key = `doi:${paper.doi.toLowerCase()}`;
168
+ if (!seen.has(key)) {
169
+ seen.set(key, paper);
170
+ }
171
+ continue;
172
+ }
173
+ // Use arXiv ID as secondary key
174
+ if (paper.arxivId) {
175
+ const key = `arxiv:${paper.arxivId.toLowerCase()}`;
176
+ if (!seen.has(key)) {
177
+ seen.set(key, paper);
178
+ }
179
+ continue;
180
+ }
181
+ // Use normalized title as fallback
182
+ const normalizedTitle = paper.title
183
+ .toLowerCase()
184
+ .replace(/[^\w\s]/g, '')
185
+ .replace(/\s+/g, ' ')
186
+ .trim();
187
+ const key = `title:${normalizedTitle}`;
188
+ if (!seen.has(key)) {
189
+ seen.set(key, paper);
190
+ }
191
+ }
192
+ return Array.from(seen.values());
193
+ }
194
+ /**
195
+ * Rank papers by relevance to query
196
+ */
197
+ rankByRelevance(papers, query) {
198
+ const scored = papers.map((paper) => ({
199
+ paper,
200
+ relevance: this.calculateRelevance(paper, query),
201
+ }));
202
+ scored.sort((a, b) => b.relevance - a.relevance);
203
+ return scored.map((s) => s.paper);
204
+ }
205
+ /**
206
+ * Calculate relevance score (0-1) for a paper
207
+ */
208
+ calculateRelevance(paper, query) {
209
+ const queryLower = query.toLowerCase();
210
+ const queryTerms = queryLower.split(/\s+/);
211
+ let score = 0;
212
+ // Title match (weight: 0.5)
213
+ const titleLower = paper.title.toLowerCase();
214
+ const titleMatches = queryTerms.filter((term) => titleLower.includes(term)).length;
215
+ score += (titleMatches / queryTerms.length) * 0.5;
216
+ // Abstract match (weight: 0.3)
217
+ if (paper.abstract) {
218
+ const abstractLower = paper.abstract.toLowerCase();
219
+ const abstractMatches = queryTerms.filter((term) => abstractLower.includes(term)).length;
220
+ score += (abstractMatches / queryTerms.length) * 0.3;
221
+ }
222
+ // Citation count bonus (weight: 0.2)
223
+ if (paper.citationCount) {
224
+ // Normalize citation count (log scale)
225
+ const citationScore = Math.log10(paper.citationCount + 1) / 3; // Max ~3 for 1000 citations
226
+ score += Math.min(citationScore, 1.0) * 0.2;
227
+ }
228
+ return Math.min(score, 1.0);
229
+ }
230
+ /**
231
+ * Recursively follow citations
232
+ */
233
+ async followCitationsRecursive(paperId, remainingDepth, visited, _results) {
234
+ if (remainingDepth === 0 || visited.has(paperId)) {
235
+ return;
236
+ }
237
+ visited.add(paperId);
238
+ // For now, just stub - full implementation would query Semantic Scholar
239
+ // citation graph API endpoint
240
+ // This would require additional API calls to get references/citations
241
+ }
242
+ }
243
+ //# sourceMappingURL=discovery.js.map