@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.18

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 (467) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -1
  3. package/bin/aiwg.mjs +349 -0
  4. package/dist/src/a2a/agent-card.js +145 -0
  5. package/dist/src/a2a/client.js +411 -0
  6. package/dist/src/a2a/hitl-cli.js +171 -0
  7. package/dist/src/a2a/hitl-driver.js +370 -0
  8. package/dist/src/a2a/hitl.js +181 -0
  9. package/dist/src/a2a/http.js +193 -0
  10. package/dist/src/a2a/jcs.js +128 -0
  11. package/dist/src/a2a/jws.js +187 -0
  12. package/dist/src/a2a/types.js +24 -0
  13. package/dist/src/a2a/webhook.js +240 -0
  14. package/dist/src/activity-log/cli.js +348 -0
  15. package/dist/src/activity-log/parser.js +81 -0
  16. package/dist/src/activity-log/types.js +50 -0
  17. package/dist/src/agents/agent-deployer.js +367 -0
  18. package/dist/src/agents/agent-packager.js +271 -0
  19. package/dist/src/agents/agent-validator.js +271 -0
  20. package/dist/src/agents/grounding/knowledge-base.js +161 -0
  21. package/dist/src/agents/grounding/types.js +12 -0
  22. package/dist/src/agents/index.js +10 -0
  23. package/dist/src/agents/packaged-agent-inventory.js +75 -0
  24. package/dist/src/agents/types.js +7 -0
  25. package/dist/src/api/index.d.ts +10 -0
  26. package/dist/src/api/index.js +10 -0
  27. package/dist/src/artifacts/address-parser.js +73 -0
  28. package/dist/src/artifacts/audit/cli.js +183 -0
  29. package/dist/src/artifacts/audit/drift.js +122 -0
  30. package/dist/src/artifacts/audit/types.js +12 -0
  31. package/dist/src/artifacts/backends/graphology-backend.js +160 -0
  32. package/dist/src/artifacts/backends/json-backend.js +129 -0
  33. package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
  34. package/dist/src/artifacts/browser-export.js +622 -0
  35. package/dist/src/artifacts/capability-resolver.js +94 -0
  36. package/dist/src/artifacts/checksum-manifest.js +91 -0
  37. package/dist/src/artifacts/citation-parser.js +162 -0
  38. package/dist/src/artifacts/cli.js +1486 -0
  39. package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
  40. package/dist/src/artifacts/corpus-tools/cli.js +393 -0
  41. package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
  42. package/dist/src/artifacts/corpus-tools/curator.js +186 -0
  43. package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
  44. package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
  45. package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
  46. package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
  47. package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
  48. package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
  49. package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
  50. package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
  51. package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
  52. package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
  53. package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
  54. package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
  55. package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
  56. package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
  57. package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
  58. package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
  59. package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
  60. package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
  61. package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
  62. package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
  63. package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
  64. package/dist/src/artifacts/corpus-views/build.js +126 -0
  65. package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
  66. package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
  67. package/dist/src/artifacts/corpus-views/renderers.js +353 -0
  68. package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
  69. package/dist/src/artifacts/dep-graph.js +173 -0
  70. package/dist/src/artifacts/discover-facets.js +375 -0
  71. package/dist/src/artifacts/embedding-index.js +354 -0
  72. package/dist/src/artifacts/enrichment/cli.js +240 -0
  73. package/dist/src/artifacts/enrichment/prompt.js +47 -0
  74. package/dist/src/artifacts/enrichment/store.js +90 -0
  75. package/dist/src/artifacts/enrichment/types.js +12 -0
  76. package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
  77. package/dist/src/artifacts/fortemi-core-sync.js +251 -0
  78. package/dist/src/artifacts/fortemi-shard-export.js +44 -0
  79. package/dist/src/artifacts/fulltext.js +108 -0
  80. package/dist/src/artifacts/graph-backend.js +51 -0
  81. package/dist/src/artifacts/graph-query.js +247 -0
  82. package/dist/src/artifacts/hybrid-query.js +225 -0
  83. package/dist/src/artifacts/index-builder.js +1089 -0
  84. package/dist/src/artifacts/index-reader.js +112 -0
  85. package/dist/src/artifacts/index-status.js +193 -0
  86. package/dist/src/artifacts/legacy-index-migration.js +169 -0
  87. package/dist/src/artifacts/move.js +154 -0
  88. package/dist/src/artifacts/operational-state.js +239 -0
  89. package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
  90. package/dist/src/artifacts/query-engine.js +1955 -0
  91. package/dist/src/artifacts/source-graph.js +529 -0
  92. package/dist/src/artifacts/stats.js +169 -0
  93. package/dist/src/artifacts/types.js +606 -0
  94. package/dist/src/artifacts/views/cli.js +293 -0
  95. package/dist/src/artifacts/views/definition.js +170 -0
  96. package/dist/src/artifacts/views/store.js +149 -0
  97. package/dist/src/artifacts/views/types.js +8 -0
  98. package/dist/src/artifacts/watcher.js +255 -0
  99. package/dist/src/catalog/builtin-models.json +636 -0
  100. package/dist/src/catalog/cli.js +228 -0
  101. package/dist/src/catalog/cli.mjs +289 -0
  102. package/dist/src/catalog/index.js +15 -0
  103. package/dist/src/catalog/loader.js +217 -0
  104. package/dist/src/catalog/loader.mjs +251 -0
  105. package/dist/src/catalog/sources.json +41 -0
  106. package/dist/src/catalog/types.js +8 -0
  107. package/dist/src/channel/manager.mjs +504 -0
  108. package/dist/src/cli/agent-spawn.js +178 -0
  109. package/dist/src/cli/cli-extension-loader.js +245 -0
  110. package/dist/src/cli/command-log.js +275 -0
  111. package/dist/src/cli/config-loader.js +232 -0
  112. package/dist/src/cli/env.js +82 -0
  113. package/dist/src/cli/errors.js +150 -0
  114. package/dist/src/cli/find-package-root.js +40 -0
  115. package/dist/src/cli/git-hooks.js +250 -0
  116. package/dist/src/cli/handlers/agentcard.js +206 -0
  117. package/dist/src/cli/handlers/artifacts.js +76 -0
  118. package/dist/src/cli/handlers/best-practices-audit.js +280 -0
  119. package/dist/src/cli/handlers/cockpit.js +137 -0
  120. package/dist/src/cli/handlers/command-log.js +37 -0
  121. package/dist/src/cli/handlers/daemon.js +59 -0
  122. package/dist/src/cli/handlers/diagnose.js +300 -0
  123. package/dist/src/cli/handlers/execution-mode.js +105 -0
  124. package/dist/src/cli/handlers/feedback.js +341 -0
  125. package/dist/src/cli/handlers/help.js +147 -0
  126. package/dist/src/cli/handlers/index.js +302 -0
  127. package/dist/src/cli/handlers/init.js +179 -0
  128. package/dist/src/cli/handlers/install.js +129 -0
  129. package/dist/src/cli/handlers/issues.js +46 -0
  130. package/dist/src/cli/handlers/lint.js +42 -0
  131. package/dist/src/cli/handlers/local-executor.js +315 -0
  132. package/dist/src/cli/handlers/marketplace.js +168 -0
  133. package/dist/src/cli/handlers/mc.js +1010 -0
  134. package/dist/src/cli/handlers/models.js +352 -0
  135. package/dist/src/cli/handlers/packages.js +155 -0
  136. package/dist/src/cli/handlers/ralph-launcher.js +717 -0
  137. package/dist/src/cli/handlers/ralph.js +575 -0
  138. package/dist/src/cli/handlers/refresh.js +432 -0
  139. package/dist/src/cli/handlers/regenerate.js +336 -0
  140. package/dist/src/cli/handlers/repo-access.js +109 -0
  141. package/dist/src/cli/handlers/run.js +165 -0
  142. package/dist/src/cli/handlers/runtime-info.js +301 -0
  143. package/dist/src/cli/handlers/sandbox.js +197 -0
  144. package/dist/src/cli/handlers/scaffolding.js +149 -0
  145. package/dist/src/cli/handlers/script-runner.js +121 -0
  146. package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
  147. package/dist/src/cli/handlers/serve.js +1835 -0
  148. package/dist/src/cli/handlers/session.js +348 -0
  149. package/dist/src/cli/handlers/setup.js +440 -0
  150. package/dist/src/cli/handlers/skill-lint.js +367 -0
  151. package/dist/src/cli/handlers/skill-usage.js +74 -0
  152. package/dist/src/cli/handlers/steward.js +567 -0
  153. package/dist/src/cli/handlers/subcommands.js +1702 -0
  154. package/dist/src/cli/handlers/team.js +337 -0
  155. package/dist/src/cli/handlers/types.js +11 -0
  156. package/dist/src/cli/handlers/use.js +2772 -0
  157. package/dist/src/cli/handlers/utilities.js +703 -0
  158. package/dist/src/cli/handlers/version.js +134 -0
  159. package/dist/src/cli/handlers/workspace-context.js +93 -0
  160. package/dist/src/cli/handlers/workspace.js +126 -0
  161. package/dist/src/cli/help-generator.js +178 -0
  162. package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
  163. package/dist/src/cli/hooks/executor.js +96 -0
  164. package/dist/src/cli/hooks/index.js +15 -0
  165. package/dist/src/cli/hooks/registry.js +143 -0
  166. package/dist/src/cli/hooks/types.js +13 -0
  167. package/dist/src/cli/log.js +492 -0
  168. package/dist/src/cli/project-isolation/detect.js +70 -0
  169. package/dist/src/cli/project-isolation/index.js +7 -0
  170. package/dist/src/cli/project-isolation/signals.js +17 -0
  171. package/dist/src/cli/project-isolation/warning.js +102 -0
  172. package/dist/src/cli/prompt-utils.js +155 -0
  173. package/dist/src/cli/provider-deployment-plan.js +126 -0
  174. package/dist/src/cli/provider-resolution.js +119 -0
  175. package/dist/src/cli/router.js +305 -0
  176. package/dist/src/cli/scope-resolver.js +392 -0
  177. package/dist/src/cli/skill-usage.js +616 -0
  178. package/dist/src/cli/ui.js +224 -0
  179. package/dist/src/cli/watch-service.js +203 -0
  180. package/dist/src/cli/workflow-orchestrator.js +478 -0
  181. package/dist/src/cli/workspace-signals.js +321 -0
  182. package/dist/src/community/footer.js +14 -0
  183. package/dist/src/community/links.js +123 -0
  184. package/dist/src/community/milestones.js +46 -0
  185. package/dist/src/community/nudge-policy.js +93 -0
  186. package/dist/src/config/aiwg-config.js +883 -0
  187. package/dist/src/config/cli.js +703 -0
  188. package/dist/src/config/gitignore.js +156 -0
  189. package/dist/src/config/project-artifacts.js +76 -0
  190. package/dist/src/config/user-config.js +428 -0
  191. package/dist/src/config/user-registry.js +127 -0
  192. package/dist/src/config/workspace.js +276 -0
  193. package/dist/src/contributors/detect.js +39 -0
  194. package/dist/src/contributors/discover.js +172 -0
  195. package/dist/src/contributors/heuristic.js +186 -0
  196. package/dist/src/contributors/index.js +11 -0
  197. package/dist/src/contributors/types.js +13 -0
  198. package/dist/src/contributors/validation.js +116 -0
  199. package/dist/src/data/community.schema.json +43 -0
  200. package/dist/src/data/community.yaml +16 -0
  201. package/dist/src/extensions/capability-index.js +270 -0
  202. package/dist/src/extensions/claude-hooks-installer.js +268 -0
  203. package/dist/src/extensions/commands/definitions.js +3485 -0
  204. package/dist/src/extensions/deployment-registration.js +463 -0
  205. package/dist/src/extensions/index.js +22 -0
  206. package/dist/src/extensions/loader.js +132 -0
  207. package/dist/src/extensions/managed-marker.js +100 -0
  208. package/dist/src/extensions/manifest.js +196 -0
  209. package/dist/src/extensions/project-local-activity.js +114 -0
  210. package/dist/src/extensions/project-local-discovery.js +261 -0
  211. package/dist/src/extensions/project-local-doctor.js +281 -0
  212. package/dist/src/extensions/project-local-gitignore.js +176 -0
  213. package/dist/src/extensions/project-local-paths.js +121 -0
  214. package/dist/src/extensions/project-local-promote.js +218 -0
  215. package/dist/src/extensions/project-local-remove.js +373 -0
  216. package/dist/src/extensions/project-local-scaffold.js +252 -0
  217. package/dist/src/extensions/project-quickref.js +291 -0
  218. package/dist/src/extensions/registry.js +368 -0
  219. package/dist/src/extensions/shadow-resolver.js +271 -0
  220. package/dist/src/extensions/types.js +86 -0
  221. package/dist/src/extensions/upstream-registry.js +195 -0
  222. package/dist/src/extensions/validation.js +631 -0
  223. package/dist/src/features/catalog.js +88 -0
  224. package/dist/src/features/cli.js +197 -0
  225. package/dist/src/features/installer.js +57 -0
  226. package/dist/src/features/paths.js +14 -0
  227. package/dist/src/features/runtime.js +21 -0
  228. package/dist/src/features/status.js +134 -0
  229. package/dist/src/hooks/laziness-detection.js +532 -0
  230. package/dist/src/intake/git-history-analyzer.js +486 -0
  231. package/dist/src/intake/index.js +9 -0
  232. package/dist/src/issues/cli.js +327 -0
  233. package/dist/src/issues/index.js +5 -0
  234. package/dist/src/issues/live.js +154 -0
  235. package/dist/src/issues/local.js +666 -0
  236. package/dist/src/issues/sync.js +143 -0
  237. package/dist/src/issues/types.js +2 -0
  238. package/dist/src/issues/workflows.js +164 -0
  239. package/dist/src/kb/cli.js +173 -0
  240. package/dist/src/lint/cli.js +171 -0
  241. package/dist/src/lint/loader.js +225 -0
  242. package/dist/src/lint/reporters.js +141 -0
  243. package/dist/src/lint/runner.js +364 -0
  244. package/dist/src/lint/types.js +10 -0
  245. package/dist/src/marketplace/cache.js +110 -0
  246. package/dist/src/marketplace/identifier.js +63 -0
  247. package/dist/src/marketplace/registry.js +36 -0
  248. package/dist/src/marketplace/sources/clawhub.js +53 -0
  249. package/dist/src/marketplace/sources/git.js +45 -0
  250. package/dist/src/marketplace/types.js +9 -0
  251. package/dist/src/mcp/adapters/codex-runtime.js +224 -0
  252. package/dist/src/mcp/cli.mjs +1197 -0
  253. package/dist/src/mcp/elicitation.mjs +149 -0
  254. package/dist/src/mcp/helpers.mjs +287 -0
  255. package/dist/src/mcp/index.mjs +11 -0
  256. package/dist/src/mcp/profiles.js +263 -0
  257. package/dist/src/mcp/profiles.mjs +360 -0
  258. package/dist/src/mcp/registry.js +376 -0
  259. package/dist/src/mcp/registry.mjs +387 -0
  260. package/dist/src/mcp/server.mjs +633 -0
  261. package/dist/src/mcp/test-simple.mjs +271 -0
  262. package/dist/src/mcp/tools/command-run.mjs +101 -0
  263. package/dist/src/mcp/tools/discovery.mjs +291 -0
  264. package/dist/src/mcp/tools/interaction.mjs +87 -0
  265. package/dist/src/mcp/tools/orchestration.mjs +320 -0
  266. package/dist/src/mcp/tools/subsystems.mjs +640 -0
  267. package/dist/src/memory/cli.js +166 -0
  268. package/dist/src/memory/project-registry.js +282 -0
  269. package/dist/src/metrics/artifact-metrics.js +184 -0
  270. package/dist/src/metrics/context-budget.js +174 -0
  271. package/dist/src/metrics/token-counter.js +133 -0
  272. package/dist/src/models/config-loader.js +228 -0
  273. package/dist/src/models/index.js +22 -0
  274. package/dist/src/models/model-capabilities.v1.json +120 -0
  275. package/dist/src/models/model-catalog.v1.json +96 -0
  276. package/dist/src/models/model-discovery.js +521 -0
  277. package/dist/src/models/provider-models.js +73 -0
  278. package/dist/src/models/provider-policy.js +273 -0
  279. package/dist/src/models/resolver.js +245 -0
  280. package/dist/src/models/router.js +70 -0
  281. package/dist/src/models/types.js +8 -0
  282. package/dist/src/models/wrapper-deployment.js +178 -0
  283. package/dist/src/models/wrapper-route.js +54 -0
  284. package/dist/src/ops/cli.js +268 -0
  285. package/dist/src/ops/registry.js +623 -0
  286. package/dist/src/packages/adapters/clawhub.js +113 -0
  287. package/dist/src/packages/adapters/git.js +153 -0
  288. package/dist/src/packages/adapters/gitea.js +93 -0
  289. package/dist/src/packages/adapters/github.js +69 -0
  290. package/dist/src/packages/adapters/local-cache.js +89 -0
  291. package/dist/src/packages/package-registry.js +143 -0
  292. package/dist/src/packages/registry.js +238 -0
  293. package/dist/src/packages/types.js +11 -0
  294. package/dist/src/plugin/cross-framework-ops.js +475 -0
  295. package/dist/src/plugin/framework-config-loader.js +235 -0
  296. package/dist/src/plugin/framework-detector.js +186 -0
  297. package/dist/src/plugin/framework-isolator.js +341 -0
  298. package/dist/src/plugin/framework-migration.js +371 -0
  299. package/dist/src/plugin/metadata-validator.js +906 -0
  300. package/dist/src/plugin/plugin-installer.js +436 -0
  301. package/dist/src/plugin/plugin-status.js +369 -0
  302. package/dist/src/plugin/plugin-uninstaller.js +473 -0
  303. package/dist/src/plugin/registry-validator.js +344 -0
  304. package/dist/src/plugin/skill-command-translator.js +415 -0
  305. package/dist/src/plugin/workspace-creator.js +189 -0
  306. package/dist/src/plugin/workspace-migrator.js +821 -0
  307. package/dist/src/policy/authorization.js +390 -0
  308. package/dist/src/policy/repo-access.js +215 -0
  309. package/dist/src/provenance/cli.js +16 -0
  310. package/dist/src/providers/capability-matrix.js +300 -0
  311. package/dist/src/providers/capability-matrix.yaml +514 -0
  312. package/dist/src/providers/provider-definitions.js +977 -0
  313. package/dist/src/providers/provider-definitions.mjs +159 -0
  314. package/dist/src/providers/provider-inventory.js +169 -0
  315. package/dist/src/quality/feedback-ab.js +174 -0
  316. package/dist/src/quality/feedback-collector.js +176 -0
  317. package/dist/src/quality/feedback-tracker.js +123 -0
  318. package/dist/src/quality/patterns/adr.json +24 -0
  319. package/dist/src/quality/patterns/sad.json +24 -0
  320. package/dist/src/quality/patterns/test-plan.json +24 -0
  321. package/dist/src/quality/patterns/use-case.json +24 -0
  322. package/dist/src/quality/scoring.js +157 -0
  323. package/dist/src/reflections/cli.js +15 -0
  324. package/dist/src/release/plan.js +139 -0
  325. package/dist/src/research/cache/manager.js +227 -0
  326. package/dist/src/research/clients/arxiv.js +156 -0
  327. package/dist/src/research/clients/base.js +197 -0
  328. package/dist/src/research/clients/crossref.js +112 -0
  329. package/dist/src/research/clients/semantic-scholar.js +126 -0
  330. package/dist/src/research/clients/unpaywall.js +87 -0
  331. package/dist/src/research/index.js +14 -0
  332. package/dist/src/research/query-cli.js +336 -0
  333. package/dist/src/research/services/acquisition.js +313 -0
  334. package/dist/src/research/services/archival.js +225 -0
  335. package/dist/src/research/services/citation.js +279 -0
  336. package/dist/src/research/services/discovery.js +243 -0
  337. package/dist/src/research/services/documentation.js +269 -0
  338. package/dist/src/research/services/index.js +14 -0
  339. package/dist/src/research/services/provenance.js +279 -0
  340. package/dist/src/research/services/quality.js +370 -0
  341. package/dist/src/research/services/types.js +7 -0
  342. package/dist/src/research/storage-cli.js +20 -0
  343. package/dist/src/research/types.js +47 -0
  344. package/dist/src/resources/index.d.ts +2 -0
  345. package/dist/src/resources/index.js +2 -0
  346. package/dist/src/resources/web-release.d.ts +89 -0
  347. package/dist/src/resources/web-release.js +886 -0
  348. package/dist/src/rlm/cache/cli.js +162 -0
  349. package/dist/src/rlm/cache/hash.js +35 -0
  350. package/dist/src/rlm/cache/store.js +170 -0
  351. package/dist/src/rlm/cache/types.js +8 -0
  352. package/dist/src/rlm/cli.js +650 -0
  353. package/dist/src/serve/a2a-terminal-observer.js +120 -0
  354. package/dist/src/serve/agent-router.js +205 -0
  355. package/dist/src/serve/dispatch-router.js +171 -0
  356. package/dist/src/serve/executor-registry.js +715 -0
  357. package/dist/src/serve/mission-conductor.js +177 -0
  358. package/dist/src/serve/orchestrator-adapter.js +113 -0
  359. package/dist/src/serve/orchestrator-override.js +94 -0
  360. package/dist/src/serve/orchestrator-pty.js +133 -0
  361. package/dist/src/serve/pty-bridge.js +799 -0
  362. package/dist/src/serve/sandbox-registry.js +832 -0
  363. package/dist/src/serve/screen-reader.js +228 -0
  364. package/dist/src/serve/stack-adapters.js +68 -0
  365. package/dist/src/serve/telemetry.js +143 -0
  366. package/dist/src/skills/adapters/clawhub.js +250 -0
  367. package/dist/src/skills/adapters/local.js +335 -0
  368. package/dist/src/skills/adapters/openclaw.js +316 -0
  369. package/dist/src/skills/cli.js +334 -0
  370. package/dist/src/skills/registry.js +117 -0
  371. package/dist/src/skills/run.js +259 -0
  372. package/dist/src/skills/runtime.js +94 -0
  373. package/dist/src/skills/types.js +10 -0
  374. package/dist/src/smiths/agentsmith/demo.js +116 -0
  375. package/dist/src/smiths/agentsmith/examples.js +300 -0
  376. package/dist/src/smiths/agentsmith/generator.js +503 -0
  377. package/dist/src/smiths/agentsmith/index.js +11 -0
  378. package/dist/src/smiths/agentsmith/types.js +8 -0
  379. package/dist/src/smiths/commandsmith/example.js +220 -0
  380. package/dist/src/smiths/commandsmith/generator.js +288 -0
  381. package/dist/src/smiths/commandsmith/index.js +41 -0
  382. package/dist/src/smiths/commandsmith/templates.js +296 -0
  383. package/dist/src/smiths/commandsmith/types.js +7 -0
  384. package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
  385. package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
  386. package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
  387. package/dist/src/smiths/context-pipeline/discovery.js +187 -0
  388. package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
  389. package/dist/src/smiths/context-pipeline/finalization.js +147 -0
  390. package/dist/src/smiths/context-pipeline/generator.js +477 -0
  391. package/dist/src/smiths/context-pipeline/index.js +30 -0
  392. package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
  393. package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
  394. package/dist/src/smiths/context-pipeline/overflow.js +212 -0
  395. package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
  396. package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
  397. package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
  398. package/dist/src/smiths/context-pipeline/types.js +23 -0
  399. package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
  400. package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
  401. package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
  402. package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
  403. package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
  404. package/dist/src/smiths/hook-bridge/index.js +79 -0
  405. package/dist/src/smiths/hook-bridge/loader.js +116 -0
  406. package/dist/src/smiths/hook-bridge/shim.js +89 -0
  407. package/dist/src/smiths/hook-bridge/types.js +31 -0
  408. package/dist/src/smiths/index.js +39 -0
  409. package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
  410. package/dist/src/smiths/mcpsmith/example.js +119 -0
  411. package/dist/src/smiths/mcpsmith/generator.js +236 -0
  412. package/dist/src/smiths/mcpsmith/index.js +17 -0
  413. package/dist/src/smiths/mcpsmith/types.js +10 -0
  414. package/dist/src/smiths/platform-paths.js +101 -0
  415. package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
  416. package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
  417. package/dist/src/smiths/skillsmith/demo.js +83 -0
  418. package/dist/src/smiths/skillsmith/examples.js +161 -0
  419. package/dist/src/smiths/skillsmith/generator.js +316 -0
  420. package/dist/src/smiths/skillsmith/index.js +12 -0
  421. package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
  422. package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
  423. package/dist/src/smiths/skillsmith/types.js +9 -0
  424. package/dist/src/smiths/toolsmith/index.js +10 -0
  425. package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
  426. package/dist/src/smiths/toolsmith/types.js +8 -0
  427. package/dist/src/storage/backends/fortemi.js +227 -0
  428. package/dist/src/storage/backends/fs.js +134 -0
  429. package/dist/src/storage/backends/logseq.js +309 -0
  430. package/dist/src/storage/backends/obsidian.js +233 -0
  431. package/dist/src/storage/cli.js +468 -0
  432. package/dist/src/storage/config.js +272 -0
  433. package/dist/src/storage/index.js +108 -0
  434. package/dist/src/storage/subsystem-cli.js +201 -0
  435. package/dist/src/storage/types.js +33 -0
  436. package/dist/src/testing/corpus/corpus-builder.js +383 -0
  437. package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
  438. package/dist/src/testing/corpus/index.js +10 -0
  439. package/dist/src/testing/fixtures/index.js +9 -0
  440. package/dist/src/testing/fixtures/test-data-factory.js +472 -0
  441. package/dist/src/testing/generators/index.js +11 -0
  442. package/dist/src/testing/generators/test-case-generator.js +393 -0
  443. package/dist/src/testing/generators/test-code-generator.js +384 -0
  444. package/dist/src/testing/generators/use-case-parser.js +325 -0
  445. package/dist/src/testing/index.js +11 -0
  446. package/dist/src/tracker/capability-protocol.js +118 -0
  447. package/dist/src/update/checker.mjs +396 -0
  448. package/dist/src/update/notifier.mjs +235 -0
  449. package/dist/src/writing/content-diversifier.js +804 -0
  450. package/dist/src/writing/example-generator.js +959 -0
  451. package/dist/src/writing/example-templates.js +99 -0
  452. package/dist/src/writing/pattern-library.js +486 -0
  453. package/dist/src/writing/patterns/banned-phrases.json +4413 -0
  454. package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
  455. package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
  456. package/dist/src/writing/patterns/hedging-language.json +2096 -0
  457. package/dist/src/writing/patterns/transition-words.json +1285 -0
  458. package/dist/src/writing/patterns/weak-verbs.json +1112 -0
  459. package/dist/src/writing/prompt-optimizer.js +660 -0
  460. package/dist/src/writing/prompt-templates.js +583 -0
  461. package/dist/src/writing/scoring-config-loader.js +168 -0
  462. package/dist/src/writing/validation-engine.js +595 -0
  463. package/dist/src/writing/validation-rules.js +380 -0
  464. package/dist/src/writing/voice-analyzer.js +439 -0
  465. package/dist/src/writing/voice-calibration.js +661 -0
  466. package/dist/src/writing/voice-profiles.json +588 -0
  467. package/package.json +65 -9
@@ -0,0 +1,532 @@
1
+ /**
2
+ * Laziness Detection Hook
3
+ *
4
+ * Pre-write hook that detects and blocks destructive avoidance patterns
5
+ * including test deletion, feature removal, and coverage regression.
6
+ *
7
+ * @implements @.aiwg/requirements/use-cases/UC-AP-001-detect-test-deletion.md
8
+ * @implements @.aiwg/requirements/use-cases/UC-AP-002-detect-feature-removal.md
9
+ * @implements @.aiwg/requirements/use-cases/UC-AP-003-detect-coverage-regression.md
10
+ * @schema @.aiwg/patterns/laziness-patterns.yaml
11
+ * @agent @agentic/code/frameworks/sdlc-complete/agents/laziness-detector.md
12
+ */
13
+ import * as fs from 'fs';
14
+ import * as path from 'path';
15
+ import * as yaml from 'js-yaml';
16
+ /**
17
+ * Laziness Detection Hook
18
+ *
19
+ * Analyzes pending file changes for avoidance patterns.
20
+ */
21
+ export class LazinessDetectionHook {
22
+ constructor(patternsPath) {
23
+ const defaultPath = path.join(__dirname, '../../.aiwg/patterns/laziness-patterns.yaml');
24
+ const patternFile = patternsPath || defaultPath;
25
+ try {
26
+ const content = fs.readFileSync(patternFile, 'utf8');
27
+ yaml.load(content); // Validate patterns file loads
28
+ }
29
+ catch {
30
+ // Patterns file is optional — all detection logic is hardcoded.
31
+ // Missing file is expected in CI and fresh project checkouts
32
+ // where .aiwg/ doesn't exist.
33
+ }
34
+ }
35
+ /**
36
+ * Main entry point - analyze file changes before write
37
+ */
38
+ async analyze(changes) {
39
+ const detectedPatterns = [];
40
+ // Capture baseline metrics
41
+ await this.captureBaseline();
42
+ // Run pattern detection
43
+ for (const change of changes) {
44
+ const patterns = await this.detectPatternsInChange(change);
45
+ detectedPatterns.push(...patterns);
46
+ }
47
+ // Assess overall severity
48
+ const decision = this.makeBlockDecision(detectedPatterns);
49
+ return decision;
50
+ }
51
+ /**
52
+ * Detect patterns in a single file change
53
+ */
54
+ async detectPatternsInChange(change) {
55
+ const detected = [];
56
+ // Test deletion patterns
57
+ if (this.isTestFile(change.path)) {
58
+ detected.push(...this.detectTestDeletion(change));
59
+ detected.push(...this.detectTestDisabling(change));
60
+ detected.push(...this.detectAssertionWeakening(change));
61
+ }
62
+ // Feature removal patterns (in source files)
63
+ if (this.isSourceFile(change.path) && !this.isTestFile(change.path)) {
64
+ detected.push(...this.detectFeatureRemoval(change));
65
+ detected.push(...this.detectValidationRemoval(change));
66
+ detected.push(...this.detectErrorHandlerDeletion(change));
67
+ detected.push(...this.detectHardcodedBypass(change));
68
+ detected.push(...this.detectErrorSuppression(change));
69
+ detected.push(...this.detectTodoAccumulation(change));
70
+ }
71
+ // Config changes
72
+ if (this.isConfigFile(change.path)) {
73
+ detected.push(...this.detectFeatureFlagDisabling(change));
74
+ }
75
+ return detected;
76
+ }
77
+ /**
78
+ * Pattern: LP-001 - Complete Test File Deletion
79
+ */
80
+ detectTestDeletion(change) {
81
+ if (change.type !== 'deleted')
82
+ return [];
83
+ const deletionPercentage = change.linesDeleted / (change.linesAdded + change.linesDeleted);
84
+ if (deletionPercentage > 0.9) {
85
+ return [
86
+ {
87
+ id: 'LP-001',
88
+ name: 'Complete Test File Deletion',
89
+ category: 'test_deletion',
90
+ severity: 'CRITICAL',
91
+ file: change.path,
92
+ match: `Entire test file deleted (${change.linesDeleted} lines)`,
93
+ confidence: 1.0,
94
+ },
95
+ ];
96
+ }
97
+ return [];
98
+ }
99
+ /**
100
+ * Pattern: LP-002, LP-003 - Test Suite/Individual Test Disabling
101
+ */
102
+ detectTestDisabling(change) {
103
+ const detected = [];
104
+ const lines = change.diff.split('\n');
105
+ const skipPatterns = [
106
+ /^\+.*describe\.skip\(/,
107
+ /^\+.*it\.skip\(/,
108
+ /^\+.*test\.skip\(/,
109
+ /^\+.*xit\(/,
110
+ /^\+.*xtest\(/,
111
+ /^\+\s*@Ignore/, // Fixed: allows leading whitespace
112
+ /^\+.*@pytest\.mark\.skip/,
113
+ ];
114
+ let skipCount = 0;
115
+ let isSuiteSkip = false;
116
+ let isIgnoreAnnotation = false;
117
+ for (let i = 0; i < lines.length; i++) {
118
+ const line = lines[i];
119
+ for (const pattern of skipPatterns) {
120
+ if (pattern.test(line)) {
121
+ skipCount++;
122
+ // Check if it's a suite skip (describe.skip)
123
+ if (/describe\.skip/.test(line)) {
124
+ isSuiteSkip = true;
125
+ }
126
+ // Check if it's @Ignore annotation
127
+ if (/@Ignore/.test(line)) {
128
+ isIgnoreAnnotation = true;
129
+ }
130
+ // Only record individual occurrences if threshold not met
131
+ if (skipCount === 1) {
132
+ detected.push({
133
+ id: isSuiteSkip || isIgnoreAnnotation ? 'LP-002' : 'LP-003',
134
+ name: isSuiteSkip || isIgnoreAnnotation
135
+ ? 'Test Suite Disabling'
136
+ : 'Individual Test Disabling',
137
+ category: 'test_deletion',
138
+ severity: isSuiteSkip || isIgnoreAnnotation ? 'HIGH' : 'MEDIUM',
139
+ file: change.path,
140
+ line: i + 1,
141
+ match: line.trim(),
142
+ confidence: 0.9,
143
+ });
144
+ }
145
+ }
146
+ }
147
+ }
148
+ // If multiple tests disabled, escalate severity
149
+ if (skipCount > 3) {
150
+ detected[0].severity = 'HIGH';
151
+ detected[0].id = 'LP-003';
152
+ detected[0].name = 'Multiple Individual Test Disabling';
153
+ detected[0].match = `${skipCount} tests disabled across file`;
154
+ }
155
+ return detected;
156
+ }
157
+ /**
158
+ * Pattern: LP-012 - Trivial Assertion Replacement
159
+ */
160
+ detectAssertionWeakening(change) {
161
+ const detected = [];
162
+ const lines = change.diff.split('\n');
163
+ const trivialPatterns = [
164
+ /expect\(true\)\.toBe\(true\)/,
165
+ /expect\(1\)\.toBe\(1\)/,
166
+ /expect\(false\)\.toBe\(false\)/,
167
+ /assert\(True\)/,
168
+ /assert True/,
169
+ ];
170
+ for (let i = 0; i < lines.length; i++) {
171
+ const line = lines[i];
172
+ if (line.startsWith('+')) {
173
+ for (const pattern of trivialPatterns) {
174
+ if (pattern.test(line)) {
175
+ detected.push({
176
+ id: 'LP-012',
177
+ name: 'Trivial Assertion Replacement',
178
+ category: 'assertion_weakening',
179
+ severity: 'CRITICAL',
180
+ file: change.path,
181
+ line: i + 1,
182
+ match: line.trim(),
183
+ confidence: 1.0,
184
+ });
185
+ }
186
+ }
187
+ }
188
+ }
189
+ return detected;
190
+ }
191
+ /**
192
+ * Pattern: LP-005 - Feature Code Commenting
193
+ */
194
+ detectFeatureRemoval(change) {
195
+ const lines = change.diff.split('\n');
196
+ let commentedLineCount = 0;
197
+ const commentedBlocks = [];
198
+ for (let i = 0; i < lines.length; i++) {
199
+ const line = lines[i];
200
+ // Detect lines changed to comments (added lines that start with //)
201
+ if (line.startsWith('+') && /^\+\s*\/\//.test(line)) {
202
+ // Filter out documentation comments (descriptive text, not code)
203
+ const commentContent = line.replace(/^\+\s*\/\/\s*/, '').trim();
204
+ // Skip if it looks like pure documentation (long explanatory sentences)
205
+ // But count TODO/FIXME/code-like comments
206
+ const isDocumentation = /^(This function|This class|This method|Parameters:|Returns:|@param|@returns)/i.test(commentContent);
207
+ if (!isDocumentation) {
208
+ commentedLineCount++;
209
+ commentedBlocks.push(i + 1);
210
+ }
211
+ }
212
+ }
213
+ if (commentedLineCount > 10) {
214
+ return [
215
+ {
216
+ id: 'LP-005',
217
+ name: 'Feature Code Commenting',
218
+ category: 'feature_removal',
219
+ severity: 'HIGH',
220
+ file: change.path,
221
+ line: commentedBlocks[0],
222
+ match: `${commentedLineCount} lines commented out`,
223
+ confidence: 0.85,
224
+ },
225
+ ];
226
+ }
227
+ return [];
228
+ }
229
+ /**
230
+ * Pattern: TODO/FIXME Accumulation (MEDIUM severity)
231
+ */
232
+ detectTodoAccumulation(change) {
233
+ const lines = change.diff.split('\n');
234
+ let todoCount = 0;
235
+ const todoLines = [];
236
+ for (let i = 0; i < lines.length; i++) {
237
+ const line = lines[i];
238
+ if (line.startsWith('+') &&
239
+ /(TODO|FIXME|HACK|XXX|NOTE|WARNING):/i.test(line)) {
240
+ todoCount++;
241
+ todoLines.push(i + 1);
242
+ }
243
+ }
244
+ if (todoCount > 3) {
245
+ return [
246
+ {
247
+ id: 'LP-TODO',
248
+ name: 'TODO/FIXME Accumulation',
249
+ category: 'incomplete_work',
250
+ severity: 'MEDIUM',
251
+ file: change.path,
252
+ line: todoLines[0],
253
+ match: `${todoCount} TODO/FIXME markers added`,
254
+ confidence: 0.8,
255
+ },
256
+ ];
257
+ }
258
+ return [];
259
+ }
260
+ /**
261
+ * Pattern: LP-006 - Validation Removal
262
+ */
263
+ detectValidationRemoval(change) {
264
+ const detected = [];
265
+ const lines = change.diff.split('\n');
266
+ const validationPatterns = [
267
+ /^-\s*if\s*\(!/,
268
+ /^-\s*validate\(/,
269
+ /^-\s*(const|let|var)\s+\w+\s*=\s*sanitize\(/, // Fixed: detect variable assignment
270
+ /^-\s*sanitize\(/, // Also detect direct call
271
+ /^-\s*\.includes\('@'\)/,
272
+ ];
273
+ for (let i = 0; i < lines.length; i++) {
274
+ const line = lines[i];
275
+ for (const pattern of validationPatterns) {
276
+ if (pattern.test(line)) {
277
+ detected.push({
278
+ id: 'LP-006',
279
+ name: 'Validation Removal',
280
+ category: 'feature_removal',
281
+ severity: 'CRITICAL',
282
+ file: change.path,
283
+ line: i + 1,
284
+ match: line.trim(),
285
+ confidence: 0.9,
286
+ });
287
+ }
288
+ }
289
+ }
290
+ return detected;
291
+ }
292
+ /**
293
+ * Pattern: LP-007 - Error Handler Deletion
294
+ */
295
+ detectErrorHandlerDeletion(change) {
296
+ const detected = [];
297
+ const lines = change.diff.split('\n');
298
+ const errorPatterns = [
299
+ /^-\s*catch\s*\(/,
300
+ /^-\s*throw new Error/,
301
+ /^-\s*throw\s+/,
302
+ ];
303
+ for (let i = 0; i < lines.length; i++) {
304
+ const line = lines[i];
305
+ for (const pattern of errorPatterns) {
306
+ if (pattern.test(line)) {
307
+ detected.push({
308
+ id: 'LP-007',
309
+ name: 'Error Handler Deletion',
310
+ category: 'feature_removal',
311
+ severity: 'HIGH',
312
+ file: change.path,
313
+ line: i + 1,
314
+ match: line.trim(),
315
+ confidence: 0.85,
316
+ });
317
+ }
318
+ }
319
+ }
320
+ return detected;
321
+ }
322
+ /**
323
+ * Pattern: LP-015 - Hardcoded Test Bypass
324
+ */
325
+ detectHardcodedBypass(change) {
326
+ const detected = [];
327
+ const lines = change.diff.split('\n');
328
+ const bypassPatterns = [
329
+ /test@example\.com/,
330
+ /NODE_ENV.*test/,
331
+ /process\.env\.CI/,
332
+ /if.*CI.*true/,
333
+ ];
334
+ for (let i = 0; i < lines.length; i++) {
335
+ const line = lines[i];
336
+ if (line.startsWith('+')) {
337
+ for (const pattern of bypassPatterns) {
338
+ if (pattern.test(line)) {
339
+ detected.push({
340
+ id: 'LP-015',
341
+ name: 'Hardcoded Test Bypass',
342
+ category: 'workaround',
343
+ severity: 'CRITICAL',
344
+ file: change.path,
345
+ line: i + 1,
346
+ match: line.trim(),
347
+ confidence: 0.95,
348
+ });
349
+ }
350
+ }
351
+ }
352
+ }
353
+ return detected;
354
+ }
355
+ /**
356
+ * Pattern: LP-016 - Error Suppression
357
+ */
358
+ detectErrorSuppression(change) {
359
+ const detected = [];
360
+ const lines = change.diff.split('\n');
361
+ for (let i = 0; i < lines.length; i++) {
362
+ const line = lines[i];
363
+ // Detect empty catch blocks or catch with ignore comment
364
+ if (line.startsWith('+') &&
365
+ (/catch\s*\([^)]+\)\s*\{\s*\}/.test(line) ||
366
+ /catch.*\/\/\s*ignore/.test(line) ||
367
+ /catch.*\/\*\s*ignore/.test(line))) {
368
+ detected.push({
369
+ id: 'LP-016',
370
+ name: 'Error Suppression',
371
+ category: 'workaround',
372
+ severity: 'HIGH',
373
+ file: change.path,
374
+ line: i + 1,
375
+ match: line.trim(),
376
+ confidence: 0.9,
377
+ });
378
+ }
379
+ }
380
+ return detected;
381
+ }
382
+ /**
383
+ * Pattern: LP-008 - Feature Flag Disabling
384
+ */
385
+ detectFeatureFlagDisabling(change) {
386
+ const detected = [];
387
+ const lines = change.diff.split('\n');
388
+ for (let i = 0; i < lines.length; i++) {
389
+ const line = lines[i];
390
+ const nextLine = lines[i + 1] || '';
391
+ // Detect true -> false changes in config
392
+ if (line.startsWith('-') &&
393
+ /:\s*true/.test(line) &&
394
+ nextLine.startsWith('+') &&
395
+ /:\s*false/.test(nextLine)) {
396
+ detected.push({
397
+ id: 'LP-008',
398
+ name: 'Feature Flag Disabling',
399
+ category: 'feature_removal',
400
+ severity: 'HIGH',
401
+ file: change.path,
402
+ line: i + 1,
403
+ match: `${line.trim()} -> ${nextLine.trim()}`,
404
+ confidence: 0.9,
405
+ });
406
+ }
407
+ }
408
+ return detected;
409
+ }
410
+ /**
411
+ * Make blocking decision based on detected patterns
412
+ */
413
+ makeBlockDecision(patterns) {
414
+ if (patterns.length === 0) {
415
+ return {
416
+ block: false,
417
+ log: true,
418
+ reason: 'No avoidance patterns detected',
419
+ patterns: [],
420
+ };
421
+ }
422
+ // Check for CRITICAL patterns
423
+ const criticalPatterns = patterns.filter((p) => p.severity === 'CRITICAL');
424
+ if (criticalPatterns.length > 0) {
425
+ return {
426
+ block: true,
427
+ warn: true, // Also set warn for completeness
428
+ log: true,
429
+ reason: `CRITICAL avoidance patterns detected: ${criticalPatterns.map((p) => p.name).join(', ')}`,
430
+ recovery: 'FIX_ROOT_CAUSE',
431
+ patterns,
432
+ };
433
+ }
434
+ // Check for multiple HIGH patterns (compound avoidance)
435
+ const highPatterns = patterns.filter((p) => p.severity === 'HIGH');
436
+ if (highPatterns.length > 2) {
437
+ return {
438
+ block: true,
439
+ warn: true,
440
+ log: true,
441
+ reason: `Multiple HIGH-severity patterns detected (compound avoidance): ${highPatterns.map((p) => p.name).join(', ')}`,
442
+ recovery: 'FIX_ALL_ISSUES',
443
+ patterns,
444
+ };
445
+ }
446
+ // Check for multiple MEDIUM patterns across files (compound avoidance)
447
+ const mediumPatterns = patterns.filter((p) => p.severity === 'MEDIUM');
448
+ const uniqueFiles = new Set(mediumPatterns.map((p) => p.file));
449
+ if (mediumPatterns.length > 2 && uniqueFiles.size > 1) {
450
+ // Multiple MEDIUM patterns across multiple files = compound avoidance
451
+ return {
452
+ block: true,
453
+ warn: true,
454
+ log: true,
455
+ reason: `Multiple MEDIUM-severity patterns across files (compound avoidance): ${mediumPatterns.map((p) => p.name).join(', ')}`,
456
+ recovery: 'FIX_ALL_ISSUES',
457
+ patterns,
458
+ };
459
+ }
460
+ // Single HIGH pattern - block with warning
461
+ if (highPatterns.length > 0) {
462
+ return {
463
+ block: true,
464
+ warn: true,
465
+ log: true,
466
+ reason: `HIGH-severity pattern detected: ${highPatterns[0].name}`,
467
+ recovery: 'PROVIDE_JUSTIFICATION_OR_FIX',
468
+ patterns,
469
+ };
470
+ }
471
+ // MEDIUM patterns (not compound) - warn but allow
472
+ if (mediumPatterns.length > 0) {
473
+ return {
474
+ block: false,
475
+ warn: true, // Fixed: explicitly set warn: true
476
+ log: true,
477
+ reason: `MEDIUM-severity patterns detected: ${mediumPatterns.map((p) => p.name).join(', ')}`,
478
+ patterns,
479
+ };
480
+ }
481
+ // LOW patterns - log only
482
+ return {
483
+ block: false,
484
+ warn: false,
485
+ log: true, // Fixed: explicitly set log: true
486
+ reason: `LOW-severity patterns detected: ${patterns.map((p) => p.name).join(', ')}`,
487
+ patterns,
488
+ };
489
+ }
490
+ /**
491
+ * Helper: Check if file is a test file
492
+ */
493
+ isTestFile(filePath) {
494
+ return (/test.*\.(ts|js|py|java)$/.test(filePath) ||
495
+ /\.test\.(ts|js|py|java)$/.test(filePath) ||
496
+ /\.spec\.(ts|js|py|java)$/.test(filePath) ||
497
+ /_test\.py$/.test(filePath) ||
498
+ /Test\.java$/.test(filePath) // Added: Java test files
499
+ );
500
+ }
501
+ /**
502
+ * Helper: Check if file is source code (not test)
503
+ */
504
+ isSourceFile(filePath) {
505
+ return (/\.(ts|js|py)$/.test(filePath) &&
506
+ !/node_modules/.test(filePath) &&
507
+ !/\.d\.ts$/.test(filePath));
508
+ }
509
+ /**
510
+ * Helper: Check if file is config
511
+ */
512
+ isConfigFile(filePath) {
513
+ return (/config.*\.(json|yaml|yml|ts|js)$/.test(filePath) ||
514
+ /\.env/.test(filePath));
515
+ }
516
+ /**
517
+ * Capture baseline metrics for comparison
518
+ */
519
+ async captureBaseline() {
520
+ // Stub - will integrate with actual coverage tooling
521
+ }
522
+ }
523
+ /**
524
+ * Hook execution function
525
+ *
526
+ * Called by AIWG framework before file write operations.
527
+ */
528
+ export async function executeLazinessDetectionHook(changes) {
529
+ const hook = new LazinessDetectionHook();
530
+ return await hook.analyze(changes);
531
+ }
532
+ //# sourceMappingURL=laziness-detection.js.map