snow-flow 1.4.49 → 2.0.0

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 (595) hide show
  1. package/.claude/helpers/github-setup.sh +28 -0
  2. package/.claude/helpers/quick-start.sh +19 -0
  3. package/.claude/helpers/setup-mcp.sh +18 -0
  4. package/.claude/settings.local.json +33 -0
  5. package/.claude-flow/metrics/system-metrics.json +1992 -0
  6. package/.env.example +21 -0
  7. package/.roo/README.md +402 -0
  8. package/.roo/mcp-list.txt +257 -0
  9. package/.roo/mcp.json +32 -0
  10. package/.roo/workflows/basic-tdd.json +32 -0
  11. package/.roomodes +201 -0
  12. package/README.md +114 -628
  13. package/activate-mcp.sh +15 -0
  14. package/dist/cli.js.bak +2052 -0
  15. package/manual-register-mcp.js +134 -0
  16. package/mcp-wrapper.sh +12 -0
  17. package/package.json +2 -2
  18. package/scripts/create-env.js +6 -1
  19. package/scripts/reset-mcp-servers.js +246 -0
  20. package/scripts/update-version.js +31 -0
  21. package/src/agents/README.md +192 -0
  22. package/src/agents/base-agent.ts +251 -0
  23. package/src/agents/coordinator.ts +971 -0
  24. package/src/agents/index.ts +18 -0
  25. package/src/agents/queen-403-handler.ts +230 -0
  26. package/src/agents/queen-agent.ts +1399 -0
  27. package/src/agents/script-writer-agent.ts +769 -0
  28. package/src/agents/security-agent.ts +726 -0
  29. package/src/agents/widget-creator-agent.ts +568 -0
  30. package/src/api/error-handling.ts +1758 -0
  31. package/src/api/natural-language-mapper.ts +630 -0
  32. package/src/api/performance-optimizer.ts +891 -0
  33. package/src/api/transaction-manager.ts +754 -0
  34. package/src/cli/deploy-artifact.ts +304 -0
  35. package/src/cli/snow-flow-cli-integration.ts +434 -0
  36. package/src/cli.ts +4455 -0
  37. package/src/cli.ts.bak +5616 -0
  38. package/src/compliance/advanced-compliance-system.ts +1268 -0
  39. package/src/compliance/index.ts +19 -0
  40. package/src/config/snow-flow-config.ts +1019 -0
  41. package/src/documentation/index.ts +16 -0
  42. package/src/documentation/self-documenting-system.ts +1421 -0
  43. package/src/dynamic-version.ts +44 -0
  44. package/src/healing/index.ts +20 -0
  45. package/src/healing/self-healing-system.ts +1435 -0
  46. package/src/health/README.md +161 -0
  47. package/src/health/system-health.ts +995 -0
  48. package/src/index.ts +60 -0
  49. package/src/intelligence/acl-analyzer.ts +377 -0
  50. package/src/intelligence/auto-resolution-engine.ts +643 -0
  51. package/src/intelligence/gap-analysis-engine.ts +488 -0
  52. package/src/intelligence/manual-instructions-generator.ts +744 -0
  53. package/src/intelligence/mcp-coverage-analyzer.ts +708 -0
  54. package/src/intelligence/multi-pass-requirements-analyzer.ts +603 -0
  55. package/src/intelligence/performance-recommendations-engine.ts +1223 -0
  56. package/src/intelligence/requirements-analyzer.ts +1148 -0
  57. package/src/intelligence/task-analyzer.ts +628 -0
  58. package/src/managers/scope-manager.ts +555 -0
  59. package/src/mcp/advanced/servicenow-advanced-features-mcp.ts +16110 -0
  60. package/src/mcp/base-mcp-server.ts +660 -0
  61. package/src/mcp/http-transport-wrapper.ts +426 -0
  62. package/src/mcp/service-discovery-client.ts +312 -0
  63. package/src/mcp/servicenow-automation-mcp-refactored.ts +678 -0
  64. package/src/mcp/servicenow-automation-mcp.ts +838 -0
  65. package/src/mcp/servicenow-deployment-mcp-refactored.ts +1292 -0
  66. package/src/mcp/servicenow-deployment-mcp.ts +7244 -0
  67. package/src/mcp/servicenow-graph-memory-mcp-refactored.ts +721 -0
  68. package/src/mcp/servicenow-graph-memory-mcp.ts +832 -0
  69. package/src/mcp/servicenow-integration-mcp-refactored.ts +655 -0
  70. package/src/mcp/servicenow-integration-mcp.ts +819 -0
  71. package/src/mcp/servicenow-intelligent-mcp-refactored.ts +977 -0
  72. package/src/mcp/servicenow-intelligent-mcp.ts +4638 -0
  73. package/src/mcp/servicenow-mcp-server.ts +728 -0
  74. package/src/mcp/servicenow-memory-mcp.ts +474 -0
  75. package/src/mcp/servicenow-operations-mcp-refactored.ts +1995 -0
  76. package/src/mcp/servicenow-operations-mcp.ts +3384 -0
  77. package/src/mcp/servicenow-platform-development-mcp-refactored.ts +611 -0
  78. package/src/mcp/servicenow-platform-development-mcp.ts +970 -0
  79. package/src/mcp/servicenow-progressive-indexer.ts +370 -0
  80. package/src/mcp/servicenow-reporting-analytics-mcp-refactored.ts +695 -0
  81. package/src/mcp/servicenow-reporting-analytics-mcp.ts +1123 -0
  82. package/src/mcp/servicenow-security-compliance-mcp-refactored.ts +642 -0
  83. package/src/mcp/servicenow-security-compliance-mcp.ts +1157 -0
  84. package/src/mcp/servicenow-update-set-mcp-refactored.ts +751 -0
  85. package/src/mcp/servicenow-update-set-mcp.ts +811 -0
  86. package/src/mcp/shared/agent-context-provider.ts +365 -0
  87. package/src/mcp/shared/base-mcp-server.ts +2463 -0
  88. package/src/mcp/shared/mcp-memory-manager.ts +540 -0
  89. package/src/mcp/shared/mcp-resource-manager.ts +367 -0
  90. package/src/mcp/snow-flow-mcp.ts +911 -0
  91. package/src/mcp/start-all-mcp-servers.ts +102 -0
  92. package/src/mcp/start-servicenow-mcp.ts +67 -0
  93. package/src/monitoring/enhanced-monitoring-system.ts +1345 -0
  94. package/src/monitoring/performance-tracker.ts +777 -0
  95. package/src/optimization/cost-optimization-engine.ts +1125 -0
  96. package/src/optimization/index.ts +10 -0
  97. package/src/queen/README.md +403 -0
  98. package/src/queen/agent-factory.ts +574 -0
  99. package/src/queen/index.ts +94 -0
  100. package/src/queen/mcp-execution-bridge.ts +681 -0
  101. package/src/queen/neural-learning.ts +319 -0
  102. package/src/queen/parallel-agent-engine.ts +848 -0
  103. package/src/queen/queen-memory-system.ts +490 -0
  104. package/src/queen/queen-memory.ts +456 -0
  105. package/src/queen/servicenow-queen.ts +1029 -0
  106. package/src/queen/types.ts +87 -0
  107. package/src/rollback/smart-rollback-system.ts +866 -0
  108. package/src/schemas/deployment.schema.json +58 -0
  109. package/src/schemas/flow.schema.json +79 -0
  110. package/src/schemas/widget.schema.json +72 -0
  111. package/src/snow-flow-system.ts +541 -0
  112. package/src/sparc/sparc-help.ts +49 -0
  113. package/src/sparc/team-sparc.ts +88 -0
  114. package/src/strategies/global-scope-strategy.ts +736 -0
  115. package/src/templates/base/application.template.json +45 -0
  116. package/src/templates/base/business_rule.template.json +33 -0
  117. package/src/templates/base/script_include.template.json +18 -0
  118. package/src/templates/base/table.template.json +64 -0
  119. package/src/templates/base/widget.template.json +25 -0
  120. package/src/templates/patterns/composite.incident-management.template.json +140 -0
  121. package/src/templates/patterns/widget.dashboard.template.json +238 -0
  122. package/src/templates/patterns/widget.datatable.template.json +292 -0
  123. package/src/testing/integration-test-suite.ts +1276 -0
  124. package/src/types/index.ts +183 -0
  125. package/src/types/neo4j-driver.d.ts +23 -0
  126. package/src/types/servicenow.types.ts +307 -0
  127. package/src/types/snow-flow.types.ts +186 -0
  128. package/src/types/todo.types.ts +70 -0
  129. package/src/utils/action-type-cache.ts +286 -0
  130. package/src/utils/agent-detector.ts +573 -0
  131. package/src/utils/artifact-tracker.ts +379 -0
  132. package/src/utils/dependency-detector.ts +233 -0
  133. package/src/utils/deployment-metadata-handler.ts +518 -0
  134. package/src/utils/error-recovery.ts +680 -0
  135. package/src/utils/logger.ts +60 -0
  136. package/src/utils/mcp-auth-middleware.ts +262 -0
  137. package/src/utils/mcp-config-manager.ts +270 -0
  138. package/src/utils/mcp-server-manager.ts +446 -0
  139. package/src/utils/mcp-tool-registry.ts +298 -0
  140. package/src/utils/migrate-snow-flow.ts +98 -0
  141. package/src/utils/oauth-html-templates.ts +188 -0
  142. package/src/utils/scope-utils.ts +443 -0
  143. package/src/utils/servicenow-client.ts +3321 -0
  144. package/src/utils/servicenow-id-generator.ts +181 -0
  145. package/src/utils/snow-memory-manager.ts +605 -0
  146. package/src/utils/snow-oauth.ts +797 -0
  147. package/src/utils/template-engine.ts +463 -0
  148. package/src/utils/theme-manager.ts +295 -0
  149. package/src/utils/unified-auth-store.ts +222 -0
  150. package/src/utils/update-set-importer.ts +422 -0
  151. package/src/utils/update-set-xml-packager.ts +371 -0
  152. package/src/utils/widget-template-generator.ts +1744 -0
  153. package/src/version.ts +1950 -0
  154. package/.claude/commands/memory/README.md +0 -9
  155. package/dist/agents/app-creator.agent.d.ts.map +0 -1
  156. package/dist/agents/app-creator.agent.js.map +0 -1
  157. package/dist/agents/base/base-snow-agent.d.ts.map +0 -1
  158. package/dist/agents/base/base-snow-agent.js.map +0 -1
  159. package/dist/agents/base-agent.d.ts.map +0 -1
  160. package/dist/agents/base-agent.js.map +0 -1
  161. package/dist/agents/base-snow-agent.d.ts.map +0 -1
  162. package/dist/agents/base-snow-agent.js.map +0 -1
  163. package/dist/agents/coordinator.d.ts.map +0 -1
  164. package/dist/agents/coordinator.js.map +0 -1
  165. package/dist/agents/flow-builder-agent.d.ts.map +0 -1
  166. package/dist/agents/flow-builder-agent.js.map +0 -1
  167. package/dist/agents/index.d.ts.map +0 -1
  168. package/dist/agents/index.js.map +0 -1
  169. package/dist/agents/queen-403-handler.d.ts.map +0 -1
  170. package/dist/agents/queen-403-handler.js.map +0 -1
  171. package/dist/agents/queen-agent-example.d.ts.map +0 -1
  172. package/dist/agents/queen-agent-example.js.map +0 -1
  173. package/dist/agents/queen-agent.d.ts.map +0 -1
  174. package/dist/agents/queen-agent.js.map +0 -1
  175. package/dist/agents/queen-agent.test.d.ts.map +0 -1
  176. package/dist/agents/queen-agent.test.js.map +0 -1
  177. package/dist/agents/script-generator.agent.d.ts.map +0 -1
  178. package/dist/agents/script-generator.agent.js.map +0 -1
  179. package/dist/agents/script-writer-agent.d.ts.map +0 -1
  180. package/dist/agents/script-writer-agent.js.map +0 -1
  181. package/dist/agents/security-agent.d.ts.map +0 -1
  182. package/dist/agents/security-agent.js.map +0 -1
  183. package/dist/agents/specialists/automation-specialist.agent.d.ts.map +0 -1
  184. package/dist/agents/specialists/automation-specialist.agent.js.map +0 -1
  185. package/dist/agents/specialists/data-specialist.agent.d.ts.map +0 -1
  186. package/dist/agents/specialists/data-specialist.agent.js.map +0 -1
  187. package/dist/agents/specialists/integration-specialist.agent.d.ts.map +0 -1
  188. package/dist/agents/specialists/integration-specialist.agent.js.map +0 -1
  189. package/dist/agents/specialists/reporting-specialist.agent.d.ts.map +0 -1
  190. package/dist/agents/specialists/reporting-specialist.agent.js.map +0 -1
  191. package/dist/agents/specialists/security-specialist.agent.d.ts.map +0 -1
  192. package/dist/agents/specialists/security-specialist.agent.js.map +0 -1
  193. package/dist/agents/teams/adaptive/adaptive-coordinator.agent.d.ts.map +0 -1
  194. package/dist/agents/teams/adaptive/adaptive-coordinator.agent.js.map +0 -1
  195. package/dist/agents/teams/base-team.d.ts.map +0 -1
  196. package/dist/agents/teams/base-team.js.map +0 -1
  197. package/dist/agents/teams/team-types.d.ts.map +0 -1
  198. package/dist/agents/teams/team-types.js.map +0 -1
  199. package/dist/agents/teams/widget/widget-architect.agent.d.ts.map +0 -1
  200. package/dist/agents/teams/widget/widget-architect.agent.js.map +0 -1
  201. package/dist/agents/teams/widget/widget-backend.agent.d.ts.map +0 -1
  202. package/dist/agents/teams/widget/widget-backend.agent.js.map +0 -1
  203. package/dist/agents/teams/widget/widget-frontend.agent.d.ts.map +0 -1
  204. package/dist/agents/teams/widget/widget-frontend.agent.js.map +0 -1
  205. package/dist/agents/teams/widget/widget-platform.agent.d.ts.map +0 -1
  206. package/dist/agents/teams/widget/widget-platform.agent.js.map +0 -1
  207. package/dist/agents/teams/widget/widget-uiux.agent.d.ts.map +0 -1
  208. package/dist/agents/teams/widget/widget-uiux.agent.js.map +0 -1
  209. package/dist/agents/test-agent.d.ts.map +0 -1
  210. package/dist/agents/test-agent.js.map +0 -1
  211. package/dist/agents/test-agents.d.ts.map +0 -1
  212. package/dist/agents/test-agents.js.map +0 -1
  213. package/dist/agents/ui-builder.agent.d.ts.map +0 -1
  214. package/dist/agents/ui-builder.agent.js.map +0 -1
  215. package/dist/agents/widget-builder.agent.d.ts.map +0 -1
  216. package/dist/agents/widget-builder.agent.js.map +0 -1
  217. package/dist/agents/widget-creator-agent.d.ts.map +0 -1
  218. package/dist/agents/widget-creator-agent.js.map +0 -1
  219. package/dist/agents/workflow-designer.agent.d.ts.map +0 -1
  220. package/dist/agents/workflow-designer.agent.js.map +0 -1
  221. package/dist/api/error-handling.d.ts.map +0 -1
  222. package/dist/api/error-handling.js.map +0 -1
  223. package/dist/api/flow-designer-api.d.ts.map +0 -1
  224. package/dist/api/flow-designer-api.js.map +0 -1
  225. package/dist/api/natural-language-mapper.d.ts.map +0 -1
  226. package/dist/api/natural-language-mapper.js.map +0 -1
  227. package/dist/api/performance-optimizer.d.ts.map +0 -1
  228. package/dist/api/performance-optimizer.js.map +0 -1
  229. package/dist/api/transaction-manager.d.ts.map +0 -1
  230. package/dist/api/transaction-manager.js.map +0 -1
  231. package/dist/assembly/team-assembler.d.ts.map +0 -1
  232. package/dist/assembly/team-assembler.js.map +0 -1
  233. package/dist/cli/deploy-artifact.d.ts.map +0 -1
  234. package/dist/cli/deploy-artifact.js.map +0 -1
  235. package/dist/cli/snow-flow-cli-integration.d.ts.map +0 -1
  236. package/dist/cli/snow-flow-cli-integration.js.map +0 -1
  237. package/dist/cli.d.ts.map +0 -1
  238. package/dist/cli.js.map +0 -1
  239. package/dist/compliance/advanced-compliance-system.d.ts.map +0 -1
  240. package/dist/compliance/advanced-compliance-system.js.map +0 -1
  241. package/dist/compliance/index.d.ts.map +0 -1
  242. package/dist/compliance/index.js.map +0 -1
  243. package/dist/config/snow-flow-config.d.ts.map +0 -1
  244. package/dist/config/snow-flow-config.js.map +0 -1
  245. package/dist/documentation/index.d.ts.map +0 -1
  246. package/dist/documentation/index.js.map +0 -1
  247. package/dist/documentation/self-documenting-system.d.ts.map +0 -1
  248. package/dist/documentation/self-documenting-system.js.map +0 -1
  249. package/dist/dynamic-version.d.ts.map +0 -1
  250. package/dist/dynamic-version.js.map +0 -1
  251. package/dist/healing/index.d.ts.map +0 -1
  252. package/dist/healing/index.js.map +0 -1
  253. package/dist/healing/self-healing-system.d.ts.map +0 -1
  254. package/dist/healing/self-healing-system.js.map +0 -1
  255. package/dist/health/system-health.d.ts.map +0 -1
  256. package/dist/health/system-health.js.map +0 -1
  257. package/dist/index.d.ts.map +0 -1
  258. package/dist/index.js.map +0 -1
  259. package/dist/intelligence/acl-analyzer.d.ts.map +0 -1
  260. package/dist/intelligence/acl-analyzer.js.map +0 -1
  261. package/dist/intelligence/auto-resolution-engine.d.ts.map +0 -1
  262. package/dist/intelligence/auto-resolution-engine.js.map +0 -1
  263. package/dist/intelligence/gap-analysis-engine.d.ts.map +0 -1
  264. package/dist/intelligence/gap-analysis-engine.js.map +0 -1
  265. package/dist/intelligence/manual-instructions-generator.d.ts.map +0 -1
  266. package/dist/intelligence/manual-instructions-generator.js.map +0 -1
  267. package/dist/intelligence/mcp-coverage-analyzer.d.ts.map +0 -1
  268. package/dist/intelligence/mcp-coverage-analyzer.js.map +0 -1
  269. package/dist/intelligence/multi-pass-requirements-analyzer.d.ts.map +0 -1
  270. package/dist/intelligence/multi-pass-requirements-analyzer.js.map +0 -1
  271. package/dist/intelligence/performance-recommendations-engine.d.ts.map +0 -1
  272. package/dist/intelligence/performance-recommendations-engine.js.map +0 -1
  273. package/dist/intelligence/requirements-analyzer.d.ts.map +0 -1
  274. package/dist/intelligence/requirements-analyzer.js.map +0 -1
  275. package/dist/intelligence/task-analyzer.d.ts.map +0 -1
  276. package/dist/intelligence/task-analyzer.js.map +0 -1
  277. package/dist/managers/scope-manager.d.ts.map +0 -1
  278. package/dist/managers/scope-manager.js.map +0 -1
  279. package/dist/mcp/advanced/servicenow-advanced-features-mcp.d.ts.map +0 -1
  280. package/dist/mcp/advanced/servicenow-advanced-features-mcp.js.map +0 -1
  281. package/dist/mcp/base-mcp-server.d.ts.map +0 -1
  282. package/dist/mcp/base-mcp-server.js.map +0 -1
  283. package/dist/mcp/example-refactored-server.d.ts.map +0 -1
  284. package/dist/mcp/example-refactored-server.js.map +0 -1
  285. package/dist/mcp/http-transport-wrapper.d.ts.map +0 -1
  286. package/dist/mcp/http-transport-wrapper.js.map +0 -1
  287. package/dist/mcp/mcp-wrapper.d.ts.map +0 -1
  288. package/dist/mcp/mcp-wrapper.js.map +0 -1
  289. package/dist/mcp/service-discovery-client.d.ts.map +0 -1
  290. package/dist/mcp/service-discovery-client.js.map +0 -1
  291. package/dist/mcp/servicenow-automation-mcp-refactored.d.ts.map +0 -1
  292. package/dist/mcp/servicenow-automation-mcp-refactored.js.map +0 -1
  293. package/dist/mcp/servicenow-automation-mcp.d.ts.map +0 -1
  294. package/dist/mcp/servicenow-automation-mcp.js.map +0 -1
  295. package/dist/mcp/servicenow-deployment-mcp-refactored.d.ts.map +0 -1
  296. package/dist/mcp/servicenow-deployment-mcp-refactored.js.map +0 -1
  297. package/dist/mcp/servicenow-deployment-mcp.d.ts.map +0 -1
  298. package/dist/mcp/servicenow-deployment-mcp.js.map +0 -1
  299. package/dist/mcp/servicenow-flow-composer-mcp-refactored.d.ts.map +0 -1
  300. package/dist/mcp/servicenow-flow-composer-mcp-refactored.js.map +0 -1
  301. package/dist/mcp/servicenow-flow-composer-mcp.d.ts.map +0 -1
  302. package/dist/mcp/servicenow-flow-composer-mcp.js.map +0 -1
  303. package/dist/mcp/servicenow-graph-memory-mcp-refactored.d.ts.map +0 -1
  304. package/dist/mcp/servicenow-graph-memory-mcp-refactored.js.map +0 -1
  305. package/dist/mcp/servicenow-graph-memory-mcp.d.ts.map +0 -1
  306. package/dist/mcp/servicenow-graph-memory-mcp.js.map +0 -1
  307. package/dist/mcp/servicenow-integration-mcp-refactored.d.ts.map +0 -1
  308. package/dist/mcp/servicenow-integration-mcp-refactored.js.map +0 -1
  309. package/dist/mcp/servicenow-integration-mcp.d.ts.map +0 -1
  310. package/dist/mcp/servicenow-integration-mcp.js.map +0 -1
  311. package/dist/mcp/servicenow-intelligent-mcp-refactored.d.ts.map +0 -1
  312. package/dist/mcp/servicenow-intelligent-mcp-refactored.js.map +0 -1
  313. package/dist/mcp/servicenow-intelligent-mcp.d.ts.map +0 -1
  314. package/dist/mcp/servicenow-intelligent-mcp.js.map +0 -1
  315. package/dist/mcp/servicenow-mcp-server.d.ts.map +0 -1
  316. package/dist/mcp/servicenow-mcp-server.js.map +0 -1
  317. package/dist/mcp/servicenow-memory-mcp.d.ts.map +0 -1
  318. package/dist/mcp/servicenow-memory-mcp.js.map +0 -1
  319. package/dist/mcp/servicenow-operations-mcp-refactored.d.ts.map +0 -1
  320. package/dist/mcp/servicenow-operations-mcp-refactored.js.map +0 -1
  321. package/dist/mcp/servicenow-operations-mcp.d.ts.map +0 -1
  322. package/dist/mcp/servicenow-operations-mcp.js.map +0 -1
  323. package/dist/mcp/servicenow-platform-development-mcp-refactored.d.ts.map +0 -1
  324. package/dist/mcp/servicenow-platform-development-mcp-refactored.js.map +0 -1
  325. package/dist/mcp/servicenow-platform-development-mcp.d.ts.map +0 -1
  326. package/dist/mcp/servicenow-platform-development-mcp.js.map +0 -1
  327. package/dist/mcp/servicenow-progressive-indexer.d.ts.map +0 -1
  328. package/dist/mcp/servicenow-progressive-indexer.js.map +0 -1
  329. package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.d.ts.map +0 -1
  330. package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.js.map +0 -1
  331. package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts.map +0 -1
  332. package/dist/mcp/servicenow-reporting-analytics-mcp.js.map +0 -1
  333. package/dist/mcp/servicenow-security-compliance-mcp-refactored.d.ts.map +0 -1
  334. package/dist/mcp/servicenow-security-compliance-mcp-refactored.js.map +0 -1
  335. package/dist/mcp/servicenow-security-compliance-mcp.d.ts.map +0 -1
  336. package/dist/mcp/servicenow-security-compliance-mcp.js.map +0 -1
  337. package/dist/mcp/servicenow-update-set-mcp-refactored.d.ts.map +0 -1
  338. package/dist/mcp/servicenow-update-set-mcp-refactored.js.map +0 -1
  339. package/dist/mcp/servicenow-update-set-mcp.d.ts.map +0 -1
  340. package/dist/mcp/servicenow-update-set-mcp.js.map +0 -1
  341. package/dist/mcp/servicenow-xml-flow-mcp.d.ts.map +0 -1
  342. package/dist/mcp/servicenow-xml-flow-mcp.js.map +0 -1
  343. package/dist/mcp/shared/agent-context-provider.d.ts.map +0 -1
  344. package/dist/mcp/shared/agent-context-provider.js.map +0 -1
  345. package/dist/mcp/shared/base-mcp-server.d.ts.map +0 -1
  346. package/dist/mcp/shared/base-mcp-server.js.map +0 -1
  347. package/dist/mcp/shared/mcp-memory-manager.d.ts.map +0 -1
  348. package/dist/mcp/shared/mcp-memory-manager.js.map +0 -1
  349. package/dist/mcp/shared/mcp-resource-manager.d.ts.map +0 -1
  350. package/dist/mcp/shared/mcp-resource-manager.js.map +0 -1
  351. package/dist/mcp/snow-flow-mcp.d.ts.map +0 -1
  352. package/dist/mcp/snow-flow-mcp.js.map +0 -1
  353. package/dist/mcp/start-all-mcp-servers.d.ts.map +0 -1
  354. package/dist/mcp/start-all-mcp-servers.js.map +0 -1
  355. package/dist/mcp/start-servicenow-mcp.d.ts.map +0 -1
  356. package/dist/mcp/start-servicenow-mcp.js.map +0 -1
  357. package/dist/mcp/test-simple-mcp.d.ts.map +0 -1
  358. package/dist/mcp/test-simple-mcp.js.map +0 -1
  359. package/dist/memory/hierarchical-memory-system.d.ts +0 -90
  360. package/dist/memory/hierarchical-memory-system.d.ts.map +0 -1
  361. package/dist/memory/hierarchical-memory-system.js +0 -400
  362. package/dist/memory/hierarchical-memory-system.js.map +0 -1
  363. package/dist/memory/index.d.ts +0 -9
  364. package/dist/memory/index.d.ts.map +0 -1
  365. package/dist/memory/index.js +0 -20
  366. package/dist/memory/index.js.map +0 -1
  367. package/dist/memory/mcp-integration-example.d.ts +0 -6
  368. package/dist/memory/mcp-integration-example.d.ts.map +0 -1
  369. package/dist/memory/mcp-integration-example.js +0 -281
  370. package/dist/memory/mcp-integration-example.js.map +0 -1
  371. package/dist/memory/memory-client.d.ts +0 -199
  372. package/dist/memory/memory-client.d.ts.map +0 -1
  373. package/dist/memory/memory-client.js +0 -364
  374. package/dist/memory/memory-client.js.map +0 -1
  375. package/dist/memory/memory-manager.d.ts +0 -29
  376. package/dist/memory/memory-manager.d.ts.map +0 -1
  377. package/dist/memory/memory-manager.js +0 -280
  378. package/dist/memory/memory-manager.js.map +0 -1
  379. package/dist/memory/memory-operations.d.ts +0 -179
  380. package/dist/memory/memory-operations.d.ts.map +0 -1
  381. package/dist/memory/memory-operations.js +0 -691
  382. package/dist/memory/memory-operations.js.map +0 -1
  383. package/dist/memory/memory-system.d.ts +0 -152
  384. package/dist/memory/memory-system.d.ts.map +0 -1
  385. package/dist/memory/memory-system.js +0 -632
  386. package/dist/memory/memory-system.js.map +0 -1
  387. package/dist/memory/memory-test.d.ts +0 -6
  388. package/dist/memory/memory-test.d.ts.map +0 -1
  389. package/dist/memory/memory-test.js +0 -161
  390. package/dist/memory/memory-test.js.map +0 -1
  391. package/dist/memory/servicenow-artifact-indexer.d.ts +0 -119
  392. package/dist/memory/servicenow-artifact-indexer.d.ts.map +0 -1
  393. package/dist/memory/servicenow-artifact-indexer.js +0 -560
  394. package/dist/memory/servicenow-artifact-indexer.js.map +0 -1
  395. package/dist/memory/snow-flow-memory-patterns.d.ts +0 -213
  396. package/dist/memory/snow-flow-memory-patterns.d.ts.map +0 -1
  397. package/dist/memory/snow-flow-memory-patterns.js +0 -200
  398. package/dist/memory/snow-flow-memory-patterns.js.map +0 -1
  399. package/dist/memory/snow-memory.d.ts +0 -54
  400. package/dist/memory/snow-memory.d.ts.map +0 -1
  401. package/dist/memory/snow-memory.js +0 -301
  402. package/dist/memory/snow-memory.js.map +0 -1
  403. package/dist/memory/swarm-memory.d.ts +0 -135
  404. package/dist/memory/swarm-memory.d.ts.map +0 -1
  405. package/dist/memory/swarm-memory.js +0 -378
  406. package/dist/memory/swarm-memory.js.map +0 -1
  407. package/dist/monitoring/enhanced-monitoring-system.d.ts.map +0 -1
  408. package/dist/monitoring/enhanced-monitoring-system.js.map +0 -1
  409. package/dist/monitoring/performance-tracker.d.ts.map +0 -1
  410. package/dist/monitoring/performance-tracker.js.map +0 -1
  411. package/dist/optimization/cost-optimization-engine.d.ts.map +0 -1
  412. package/dist/optimization/cost-optimization-engine.js.map +0 -1
  413. package/dist/optimization/index.d.ts.map +0 -1
  414. package/dist/optimization/index.js.map +0 -1
  415. package/dist/orchestration/discovery/service-discovery.d.ts.map +0 -1
  416. package/dist/orchestration/discovery/service-discovery.js.map +0 -1
  417. package/dist/orchestration/distributed-orchestrator.d.ts.map +0 -1
  418. package/dist/orchestration/distributed-orchestrator.js.map +0 -1
  419. package/dist/orchestration/distribution/task-distribution-engine.d.ts.map +0 -1
  420. package/dist/orchestration/distribution/task-distribution-engine.js.map +0 -1
  421. package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts.map +0 -1
  422. package/dist/orchestration/interfaces/distributed-orchestration.interface.js.map +0 -1
  423. package/dist/orchestration/protocols/mcpx-protocol.d.ts.map +0 -1
  424. package/dist/orchestration/protocols/mcpx-protocol.js.map +0 -1
  425. package/dist/orchestration/state/distributed-state-manager.d.ts.map +0 -1
  426. package/dist/orchestration/state/distributed-state-manager.js.map +0 -1
  427. package/dist/orchestrator/flow-composer.d.ts.map +0 -1
  428. package/dist/orchestrator/flow-composer.js.map +0 -1
  429. package/dist/orchestrator/flow-pattern-templates.d.ts.map +0 -1
  430. package/dist/orchestrator/flow-pattern-templates.js.map +0 -1
  431. package/dist/orchestrator/flow-subflow-decision-engine.d.ts.map +0 -1
  432. package/dist/orchestrator/flow-subflow-decision-engine.js.map +0 -1
  433. package/dist/orchestrator/flow-validation-engine.d.ts.map +0 -1
  434. package/dist/orchestrator/flow-validation-engine.js.map +0 -1
  435. package/dist/orchestrator/snow-orchestrator.d.ts.map +0 -1
  436. package/dist/orchestrator/snow-orchestrator.js.map +0 -1
  437. package/dist/orchestrator/subflow-creation-handler.d.ts.map +0 -1
  438. package/dist/orchestrator/subflow-creation-handler.js.map +0 -1
  439. package/dist/patterns/adaptive-patterns.d.ts.map +0 -1
  440. package/dist/patterns/adaptive-patterns.js.map +0 -1
  441. package/dist/queen/advanced-integration-test.d.ts.map +0 -1
  442. package/dist/queen/advanced-integration-test.js.map +0 -1
  443. package/dist/queen/agent-factory.d.ts.map +0 -1
  444. package/dist/queen/agent-factory.js.map +0 -1
  445. package/dist/queen/index.d.ts.map +0 -1
  446. package/dist/queen/index.js.map +0 -1
  447. package/dist/queen/integration-example.d.ts.map +0 -1
  448. package/dist/queen/integration-example.js.map +0 -1
  449. package/dist/queen/integration-test.d.ts.map +0 -1
  450. package/dist/queen/integration-test.js.map +0 -1
  451. package/dist/queen/mcp-execution-bridge.d.ts.map +0 -1
  452. package/dist/queen/mcp-execution-bridge.js.map +0 -1
  453. package/dist/queen/mock-mcp-client.d.ts.map +0 -1
  454. package/dist/queen/mock-mcp-client.js.map +0 -1
  455. package/dist/queen/neural-learning.d.ts.map +0 -1
  456. package/dist/queen/neural-learning.js.map +0 -1
  457. package/dist/queen/parallel-agent-engine.d.ts.map +0 -1
  458. package/dist/queen/parallel-agent-engine.js.map +0 -1
  459. package/dist/queen/queen-memory-system.d.ts.map +0 -1
  460. package/dist/queen/queen-memory-system.js.map +0 -1
  461. package/dist/queen/queen-memory.d.ts.map +0 -1
  462. package/dist/queen/queen-memory.js.map +0 -1
  463. package/dist/queen/run-integration-tests.d.ts.map +0 -1
  464. package/dist/queen/run-integration-tests.js.map +0 -1
  465. package/dist/queen/servicenow-queen.d.ts.map +0 -1
  466. package/dist/queen/servicenow-queen.js.map +0 -1
  467. package/dist/queen/types.d.ts.map +0 -1
  468. package/dist/queen/types.js.map +0 -1
  469. package/dist/rollback/smart-rollback-system.d.ts.map +0 -1
  470. package/dist/rollback/smart-rollback-system.js.map +0 -1
  471. package/dist/snow-flow-system.d.ts.map +0 -1
  472. package/dist/snow-flow-system.js.map +0 -1
  473. package/dist/sparc/coordinators/adaptive-coordinator.d.ts.map +0 -1
  474. package/dist/sparc/coordinators/adaptive-coordinator.js.map +0 -1
  475. package/dist/sparc/coordinators/team-coordinator.d.ts.map +0 -1
  476. package/dist/sparc/coordinators/team-coordinator.js.map +0 -1
  477. package/dist/sparc/modes/team-modes.d.ts.map +0 -1
  478. package/dist/sparc/modes/team-modes.js.map +0 -1
  479. package/dist/sparc/sparc-help.d.ts.map +0 -1
  480. package/dist/sparc/sparc-help.js.map +0 -1
  481. package/dist/sparc/team-sparc.d.ts.map +0 -1
  482. package/dist/sparc/team-sparc.js.map +0 -1
  483. package/dist/sparc/teams/application-team.d.ts.map +0 -1
  484. package/dist/sparc/teams/application-team.js.map +0 -1
  485. package/dist/sparc/teams/flow-team.d.ts.map +0 -1
  486. package/dist/sparc/teams/flow-team.js.map +0 -1
  487. package/dist/sparc/teams/widget-team.d.ts.map +0 -1
  488. package/dist/sparc/teams/widget-team.js.map +0 -1
  489. package/dist/specialists/app-specialists.d.ts.map +0 -1
  490. package/dist/specialists/app-specialists.js.map +0 -1
  491. package/dist/specialists/base-specialist.d.ts.map +0 -1
  492. package/dist/specialists/base-specialist.js.map +0 -1
  493. package/dist/specialists/flow-specialists.d.ts.map +0 -1
  494. package/dist/specialists/flow-specialists.js.map +0 -1
  495. package/dist/specialists/individual-specialists.d.ts.map +0 -1
  496. package/dist/specialists/individual-specialists.js.map +0 -1
  497. package/dist/specialists/widget-specialists.d.ts.map +0 -1
  498. package/dist/specialists/widget-specialists.js.map +0 -1
  499. package/dist/strategies/global-scope-strategy.d.ts.map +0 -1
  500. package/dist/strategies/global-scope-strategy.js.map +0 -1
  501. package/dist/teams/adaptive-team.d.ts.map +0 -1
  502. package/dist/teams/adaptive-team.js.map +0 -1
  503. package/dist/teams/application-team.d.ts.map +0 -1
  504. package/dist/teams/application-team.js.map +0 -1
  505. package/dist/teams/base-team.d.ts.map +0 -1
  506. package/dist/teams/base-team.js.map +0 -1
  507. package/dist/teams/flow-team.d.ts.map +0 -1
  508. package/dist/teams/flow-team.js.map +0 -1
  509. package/dist/teams/widget-team.d.ts.map +0 -1
  510. package/dist/teams/widget-team.js.map +0 -1
  511. package/dist/testing/integration-test-suite.d.ts.map +0 -1
  512. package/dist/testing/integration-test-suite.js.map +0 -1
  513. package/dist/types/index.d.ts.map +0 -1
  514. package/dist/types/index.js.map +0 -1
  515. package/dist/types/servicenow.types.d.ts.map +0 -1
  516. package/dist/types/servicenow.types.js.map +0 -1
  517. package/dist/types/snow-flow.types.d.ts.map +0 -1
  518. package/dist/types/snow-flow.types.js.map +0 -1
  519. package/dist/types/todo.types.d.ts.map +0 -1
  520. package/dist/types/todo.types.js.map +0 -1
  521. package/dist/utils/action-type-cache.d.ts.map +0 -1
  522. package/dist/utils/action-type-cache.js.map +0 -1
  523. package/dist/utils/agent-detector.d.ts.map +0 -1
  524. package/dist/utils/agent-detector.js.map +0 -1
  525. package/dist/utils/artifact-tracker.d.ts.map +0 -1
  526. package/dist/utils/artifact-tracker.js.map +0 -1
  527. package/dist/utils/dependency-detector.d.ts.map +0 -1
  528. package/dist/utils/dependency-detector.js.map +0 -1
  529. package/dist/utils/deployment-metadata-handler.d.ts.map +0 -1
  530. package/dist/utils/deployment-metadata-handler.js.map +0 -1
  531. package/dist/utils/error-recovery.d.ts.map +0 -1
  532. package/dist/utils/error-recovery.js.map +0 -1
  533. package/dist/utils/flow-api-discovery.d.ts.map +0 -1
  534. package/dist/utils/flow-api-discovery.js.map +0 -1
  535. package/dist/utils/flow-xml-generator.d.ts.map +0 -1
  536. package/dist/utils/flow-xml-generator.js.map +0 -1
  537. package/dist/utils/logger.d.ts.map +0 -1
  538. package/dist/utils/logger.js.map +0 -1
  539. package/dist/utils/mcp-auth-middleware.d.ts.map +0 -1
  540. package/dist/utils/mcp-auth-middleware.js.map +0 -1
  541. package/dist/utils/mcp-config-manager.d.ts.map +0 -1
  542. package/dist/utils/mcp-config-manager.js.map +0 -1
  543. package/dist/utils/mcp-server-manager.d.ts.map +0 -1
  544. package/dist/utils/mcp-server-manager.js.map +0 -1
  545. package/dist/utils/mcp-tool-registry.d.ts.map +0 -1
  546. package/dist/utils/mcp-tool-registry.js.map +0 -1
  547. package/dist/utils/migrate-claude-flow.d.ts.map +0 -1
  548. package/dist/utils/migrate-claude-flow.js.map +0 -1
  549. package/dist/utils/migrate-snow-flow.d.ts.map +0 -1
  550. package/dist/utils/migrate-snow-flow.js.map +0 -1
  551. package/dist/utils/oauth-html-templates.d.ts.map +0 -1
  552. package/dist/utils/oauth-html-templates.js.map +0 -1
  553. package/dist/utils/scope-utils.d.ts.map +0 -1
  554. package/dist/utils/scope-utils.js.map +0 -1
  555. package/dist/utils/servicenow-client.d.ts.map +0 -1
  556. package/dist/utils/servicenow-client.js.map +0 -1
  557. package/dist/utils/servicenow-id-generator.d.ts.map +0 -1
  558. package/dist/utils/servicenow-id-generator.js.map +0 -1
  559. package/dist/utils/snow-memory-manager.d.ts.map +0 -1
  560. package/dist/utils/snow-memory-manager.js.map +0 -1
  561. package/dist/utils/snow-oauth-old.d.ts.map +0 -1
  562. package/dist/utils/snow-oauth-old.js.map +0 -1
  563. package/dist/utils/snow-oauth.d.ts.map +0 -1
  564. package/dist/utils/snow-oauth.js.map +0 -1
  565. package/dist/utils/template-engine.d.ts.map +0 -1
  566. package/dist/utils/template-engine.js.map +0 -1
  567. package/dist/utils/theme-manager.d.ts.map +0 -1
  568. package/dist/utils/theme-manager.js.map +0 -1
  569. package/dist/utils/unified-auth-store.d.ts.map +0 -1
  570. package/dist/utils/unified-auth-store.js.map +0 -1
  571. package/dist/utils/update-set-importer.d.ts.map +0 -1
  572. package/dist/utils/update-set-importer.js.map +0 -1
  573. package/dist/utils/update-set-xml-packager.d.ts.map +0 -1
  574. package/dist/utils/update-set-xml-packager.js.map +0 -1
  575. package/dist/utils/widget-template-generator.d.ts.map +0 -1
  576. package/dist/utils/widget-template-generator.js.map +0 -1
  577. package/dist/version.d.ts.map +0 -1
  578. package/dist/version.js.map +0 -1
  579. package/memory/agents/README.md +0 -31
  580. package/memory/claude-flow-data.json +0 -5
  581. package/memory/servicenow_artifacts/000d9224c895221055906c7518aa2d3d.json +0 -30
  582. package/memory/servicenow_artifacts/0196b66173303010e46b4a2214f6a7a2.json +0 -36
  583. package/memory/servicenow_artifacts/125e5d1d837e2a102a7ea130ceaad397.json +0 -30
  584. package/memory/servicenow_artifacts/7637c1f2b7112210a5e5911cde11a972.json +0 -30
  585. package/memory/servicenow_artifacts/default_documentation_tables_1754056582292.json +0 -55
  586. package/memory/servicenow_artifacts/default_documentation_tables_1754057477189.json +0 -55
  587. package/memory/sessions/README.md +0 -32
  588. package/memory/update-set-sessions/01f82af583faea102a7ea130ceaad3d4.json +0 -9
  589. package/memory/update-set-sessions/27718fb983faea102a7ea130ceaad34b.json +0 -9
  590. package/memory/update-set-sessions/412e9bf6833e22502a7ea130ceaad30a.json +0 -8
  591. package/memory/update-set-sessions/66fc5a79837aea102a7ea130ceaad3ab.json +0 -9
  592. package/memory/update-set-sessions/71a30ff5837eea102a7ea130ceaad37f.json +0 -9
  593. package/memory/update-set-sessions/74fba27983faea102a7ea130ceaad3bd.json +0 -9
  594. package/memory/update-set-sessions/a0b147b5837eea102a7ea130ceaad344.json +0 -58
  595. package/memory/update-set-sessions/b13f5eb983baea102a7ea130ceaad33e.json +0 -9
@@ -0,0 +1,797 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ServiceNow OAuth Authentication Utility with Dynamic Port
4
+ * Handles OAuth2 flow for ServiceNow integration
5
+ */
6
+
7
+ import { promises as fs } from 'fs';
8
+ import { join } from 'path';
9
+ import os from 'os';
10
+ import { createServer } from 'http';
11
+ import { URL } from 'url';
12
+ import axios from 'axios';
13
+ import https from 'https';
14
+ import net from 'net';
15
+ import crypto from 'crypto';
16
+ import { snowFlowConfig } from '../config/snow-flow-config.js';
17
+ import { unifiedAuthStore } from './unified-auth-store.js';
18
+ import { OAuthTemplates } from './oauth-html-templates.js';
19
+
20
+ export interface ServiceNowAuthResult {
21
+ success: boolean;
22
+ accessToken?: string;
23
+ refreshToken?: string;
24
+ expiresIn?: number;
25
+ error?: string;
26
+ }
27
+
28
+ export interface ServiceNowCredentials {
29
+ instance: string;
30
+ clientId: string;
31
+ clientSecret: string;
32
+ accessToken?: string;
33
+ refreshToken?: string;
34
+ expiresAt?: string;
35
+ }
36
+
37
+ interface OAuthCredentials {
38
+ instance: string;
39
+ clientId: string;
40
+ clientSecret: string;
41
+ redirectUri: string;
42
+ }
43
+
44
+ export class ServiceNowOAuth {
45
+ private credentials?: OAuthCredentials;
46
+ private tokenPath: string;
47
+ private stateParameter?: string;
48
+ private codeVerifier?: string;
49
+ private codeChallenge?: string;
50
+
51
+ // 🔒 SEC-002 FIX: Add rate limiting to prevent authentication bypass attacks
52
+ private lastTokenRequest: number = 0;
53
+ private tokenRequestCount: number = 0;
54
+ private readonly TOKEN_REQUEST_WINDOW_MS = 60000; // 1 minute window
55
+ private readonly MAX_TOKEN_REQUESTS_PER_WINDOW = 10; // Max 10 token requests per minute
56
+
57
+ constructor() {
58
+ // Store tokens in user's home directory
59
+ const configDir = process.env.SNOW_FLOW_HOME || join(os.homedir(), '.snow-flow');
60
+ this.tokenPath = join(configDir, 'auth.json');
61
+ }
62
+
63
+ /**
64
+ * 🔒 SEC-002 FIX: Check rate limiting for token requests to prevent brute force attacks
65
+ */
66
+ private checkTokenRequestRateLimit(): boolean {
67
+ const now = Date.now();
68
+
69
+ // Reset counter if window has passed
70
+ if (now - this.lastTokenRequest > this.TOKEN_REQUEST_WINDOW_MS) {
71
+ this.tokenRequestCount = 0;
72
+ this.lastTokenRequest = now;
73
+ }
74
+
75
+ // Check if within rate limit
76
+ if (this.tokenRequestCount >= this.MAX_TOKEN_REQUESTS_PER_WINDOW) {
77
+ console.warn('🔒 Rate limit exceeded: Too many token requests. Please wait before retrying.');
78
+ return false;
79
+ }
80
+
81
+ this.tokenRequestCount++;
82
+ return true;
83
+ }
84
+
85
+ /**
86
+ * Generate a random state parameter for CSRF protection
87
+ */
88
+ private generateState(): string {
89
+ return Math.random().toString(36).substring(2, 15) +
90
+ Math.random().toString(36).substring(2, 15);
91
+ }
92
+
93
+ /**
94
+ * Generate PKCE code verifier and challenge
95
+ */
96
+ private generatePKCE() {
97
+ // Generate code verifier (43-128 characters)
98
+ this.codeVerifier = crypto.randomBytes(32).toString('base64url');
99
+
100
+ // Generate code challenge (SHA256 hash of verifier)
101
+ const hash = crypto.createHash('sha256');
102
+ hash.update(this.codeVerifier);
103
+ this.codeChallenge = hash.digest('base64url');
104
+ }
105
+
106
+ /**
107
+ * Check if a specific port is available
108
+ */
109
+ private async checkPortAvailable(port: number): Promise<boolean> {
110
+ return new Promise((resolve) => {
111
+ const server = net.createServer();
112
+
113
+ server.on('error', () => {
114
+ resolve(false);
115
+ });
116
+
117
+ server.listen(port, () => {
118
+ server.close(() => {
119
+ resolve(true);
120
+ });
121
+ });
122
+ });
123
+ }
124
+
125
+
126
+ /**
127
+ * Initialize OAuth flow - opens browser and handles callback
128
+ */
129
+ /**
130
+ * 🔧 CRIT-002 FIX: Normalize instance URL to prevent trailing slash 400 errors
131
+ */
132
+ private normalizeInstanceUrl(instance: string): string {
133
+ // Remove any trailing slashes that cause 400 errors
134
+ let normalized = instance.replace(/\/+$/, '');
135
+
136
+ // Add https:// if missing
137
+ if (!normalized.startsWith('http://') && !normalized.startsWith('https://')) {
138
+ normalized = `https://${normalized}`;
139
+ }
140
+
141
+ // Ensure .service-now.com suffix if it's just the instance name
142
+ if (!normalized.includes('.service-now.com') && !normalized.includes('localhost') && !normalized.includes('127.0.0.1')) {
143
+ const instanceName = normalized.replace('https://', '').replace('http://', '');
144
+ normalized = `https://${instanceName}.service-now.com`;
145
+ }
146
+
147
+ return normalized;
148
+ }
149
+
150
+ async authenticate(instance: string, clientId: string, clientSecret: string): Promise<ServiceNowAuthResult> {
151
+ try {
152
+ // 🔧 CRIT-002 FIX: Apply URL normalization
153
+ const normalizedInstance = this.normalizeInstanceUrl(instance);
154
+ // Validate client secret format
155
+ const secretValidation = this.validateClientSecret(clientSecret);
156
+ if (!secretValidation.valid) {
157
+ console.error('❌ Invalid OAuth Client Secret:', secretValidation.reason);
158
+ console.error('💡 To get a valid OAuth secret:');
159
+ console.error(' 1. Log into ServiceNow as admin');
160
+ console.error(' 2. Navigate to: System OAuth > Application Registry');
161
+ console.error(' 3. Create a new OAuth application');
162
+ console.error(' 4. Copy the generated Client Secret (long random string)');
163
+ return {
164
+ success: false,
165
+ error: secretValidation.reason
166
+ };
167
+ }
168
+
169
+ // Get OAuth redirect configuration from environment or use defaults
170
+ const oauthConfig = snowFlowConfig.servicenow.oauth;
171
+ const port = oauthConfig.redirectPort;
172
+ const host = oauthConfig.redirectHost;
173
+ const path = oauthConfig.redirectPath;
174
+ const redirectUri = `http://${host}:${port}${path}`;
175
+
176
+ // Check if port is available
177
+ const isPortAvailable = await this.checkPortAvailable(port);
178
+ if (!isPortAvailable) {
179
+ console.error(`❌ Port ${port} is already in use!`);
180
+ console.error(`💡 Please close any application using port ${port} and try again.`);
181
+ return {
182
+ success: false,
183
+ error: `Port ${port} is already in use. Please free up the port and try again.`
184
+ };
185
+ }
186
+
187
+ // Store credentials temporarily with normalized instance
188
+ this.credentials = {
189
+ instance: normalizedInstance.replace('https://', '').replace('http://', ''),
190
+ clientId,
191
+ clientSecret,
192
+ redirectUri
193
+ };
194
+
195
+ console.log('🚀 Starting ServiceNow OAuth flow...');
196
+ console.log(`📋 Instance: ${normalizedInstance}`);
197
+ console.log(`🔐 Client ID: ${clientId}`);
198
+ console.log(`🔗 Redirect URI: ${redirectUri}`);
199
+
200
+ // Generate state parameter for CSRF protection
201
+ this.stateParameter = this.generateState();
202
+
203
+ // Generate PKCE parameters
204
+ this.generatePKCE();
205
+
206
+ // Generate authorization URL
207
+ const authUrl = this.generateAuthUrl(this.credentials.instance, clientId, redirectUri);
208
+
209
+ console.log('\n🌐 Authorization URL generated:');
210
+ console.log(`${authUrl}\n`);
211
+
212
+ // Start local server to handle callback
213
+ const authResult = await this.startCallbackServer(redirectUri, port);
214
+
215
+ if (authResult.success && authResult.accessToken) {
216
+ // Save tokens with normalized instance
217
+ await this.saveTokens({
218
+ accessToken: authResult.accessToken,
219
+ refreshToken: authResult.refreshToken || '',
220
+ expiresIn: authResult.expiresIn || 3600,
221
+ instance: this.credentials.instance,
222
+ clientId,
223
+ clientSecret
224
+ });
225
+
226
+ console.log('\n✅ Authentication successful!');
227
+ console.log('🔐 Tokens saved securely');
228
+ }
229
+
230
+ return authResult;
231
+ } catch (error) {
232
+ const errorMessage = error instanceof Error ? error.message : String(error);
233
+ console.error('❌ Authentication failed:', errorMessage);
234
+ return {
235
+ success: false,
236
+ error: errorMessage
237
+ };
238
+ }
239
+ }
240
+
241
+ /**
242
+ * Generate ServiceNow OAuth authorization URL
243
+ */
244
+ private generateAuthUrl(instance: string, clientId: string, redirectUri: string): string {
245
+ const baseUrl = `https://${instance}/oauth_auth.do`;
246
+ const params = new URLSearchParams({
247
+ response_type: 'code',
248
+ client_id: clientId,
249
+ redirect_uri: redirectUri,
250
+ scope: 'useraccount write admin',
251
+ state: this.stateParameter || '',
252
+ code_challenge: this.codeChallenge || '',
253
+ code_challenge_method: 'S256'
254
+ });
255
+
256
+ return `${baseUrl}?${params.toString()}`;
257
+ }
258
+
259
+ /**
260
+ * Start local HTTP server to handle OAuth callback
261
+ */
262
+ private async startCallbackServer(redirectUri: string, port: number): Promise<ServiceNowAuthResult> {
263
+ return new Promise((resolve) => {
264
+ const server = createServer(async (req, res) => {
265
+ try {
266
+ const url = new URL(req.url!, `http://${snowFlowConfig.servicenow.oauth.redirectHost}:${port}`);
267
+
268
+ if (url.pathname === '/callback') {
269
+ const code = url.searchParams.get('code');
270
+ const error = url.searchParams.get('error');
271
+ const state = url.searchParams.get('state');
272
+
273
+ // Validate state parameter
274
+ if (state !== this.stateParameter) {
275
+ res.writeHead(400, { 'Content-Type': 'text/html' });
276
+ res.end(OAuthTemplates.securityError);
277
+
278
+ server.close();
279
+ resolve({
280
+ success: false,
281
+ error: 'Invalid state parameter'
282
+ });
283
+ return;
284
+ }
285
+
286
+ if (error) {
287
+ res.writeHead(400, { 'Content-Type': 'text/html' });
288
+ res.end(OAuthTemplates.error(error));
289
+
290
+ server.close();
291
+ resolve({
292
+ success: false,
293
+ error: `OAuth error: ${error}`
294
+ });
295
+ return;
296
+ }
297
+
298
+ if (!code) {
299
+ res.writeHead(400, { 'Content-Type': 'text/html' });
300
+ res.end(OAuthTemplates.missingCode);
301
+
302
+ server.close();
303
+ resolve({
304
+ success: false,
305
+ error: 'No authorization code received'
306
+ });
307
+ return;
308
+ }
309
+
310
+ // Exchange code for tokens
311
+ console.log('🔄 Exchanging authorization code for tokens...');
312
+ const tokenResult = await this.exchangeCodeForTokens(code);
313
+
314
+ if (tokenResult.success) {
315
+ res.writeHead(200, { 'Content-Type': 'text/html' });
316
+ res.end(OAuthTemplates.success);
317
+
318
+ server.close();
319
+ resolve(tokenResult);
320
+ } else {
321
+ res.writeHead(500, { 'Content-Type': 'text/html' });
322
+ res.end(OAuthTemplates.tokenExchangeFailed(tokenResult.error || 'Unknown error'));
323
+
324
+ server.close();
325
+ resolve(tokenResult);
326
+ }
327
+ } else {
328
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
329
+ res.end('Not Found');
330
+ }
331
+ } catch (error) {
332
+ console.error('Callback server error:', error);
333
+ res.writeHead(500, { 'Content-Type': 'text/plain' });
334
+ res.end('Internal Server Error');
335
+
336
+ server.close();
337
+ resolve({
338
+ success: false,
339
+ error: error instanceof Error ? error.message : String(error)
340
+ });
341
+ }
342
+ });
343
+
344
+ server.listen(port, () => {
345
+ console.log(`🌐 OAuth callback server started on http://${snowFlowConfig.servicenow.oauth.redirectHost}:${port}`);
346
+ console.log('🚀 Please open the authorization URL in your browser...');
347
+ console.log('⏳ Waiting for OAuth callback...');
348
+
349
+ // Auto-open browser if possible
350
+ try {
351
+ const { spawn } = require('child_process');
352
+ const authUrl = this.generateAuthUrl(
353
+ this.credentials!.instance,
354
+ this.credentials!.clientId,
355
+ redirectUri
356
+ );
357
+
358
+ // Try to open browser on macOS
359
+ if (process.platform === 'darwin') {
360
+ spawn('open', [authUrl]);
361
+ } else if (process.platform === 'win32') {
362
+ spawn('cmd', ['/c', 'start', authUrl]);
363
+ } else if (process.platform === 'linux') {
364
+ spawn('xdg-open', [authUrl]);
365
+ } else {
366
+ console.log('Unknown OS:', process.platform);
367
+ }
368
+ } catch (err) {
369
+ console.log('⚠️ Could not auto-open browser. Please open the URL manually.');
370
+ }
371
+ });
372
+ });
373
+ }
374
+
375
+ /**
376
+ * Exchange authorization code for tokens
377
+ */
378
+ private async exchangeCodeForTokens(code: string): Promise<ServiceNowAuthResult> {
379
+ try {
380
+ // 🔒 SEC-002 FIX: Apply rate limiting to prevent authentication bypass attacks
381
+ if (!this.checkTokenRequestRateLimit()) {
382
+ return {
383
+ success: false,
384
+ error: 'Rate limit exceeded. Too many token requests. Please wait 1 minute before retrying.'
385
+ };
386
+ }
387
+
388
+ const tokenUrl = `https://${this.credentials!.instance}/oauth_token.do`;
389
+
390
+ const response = await axios.post(tokenUrl, new URLSearchParams({
391
+ grant_type: 'authorization_code',
392
+ code,
393
+ client_id: this.credentials!.clientId,
394
+ client_secret: this.credentials!.clientSecret,
395
+ redirect_uri: this.credentials!.redirectUri,
396
+ code_verifier: this.codeVerifier || ''
397
+ }), {
398
+ headers: {
399
+ 'Content-Type': 'application/x-www-form-urlencoded'
400
+ },
401
+ timeout: 15000, // 🔒 SEC-002 FIX: 15 second timeout to prevent hanging requests
402
+ // Allow self-signed certificates for dev instances
403
+ httpsAgent: new https.Agent({
404
+ rejectUnauthorized: false
405
+ })
406
+ });
407
+
408
+ const data = response.data;
409
+
410
+ if (data.access_token) {
411
+ return {
412
+ success: true,
413
+ accessToken: data.access_token,
414
+ refreshToken: data.refresh_token,
415
+ expiresIn: data.expires_in
416
+ };
417
+ } else {
418
+ return {
419
+ success: false,
420
+ error: 'No access token received'
421
+ };
422
+ }
423
+ } catch (error) {
424
+ const errorMessage = error instanceof Error ? error.message : String(error);
425
+ console.error('Token exchange error:', errorMessage);
426
+ if (axios.isAxiosError(error) && error.response) {
427
+ console.error('Response data:', error.response.data);
428
+ }
429
+ return {
430
+ success: false,
431
+ error: errorMessage
432
+ };
433
+ }
434
+ }
435
+
436
+ /**
437
+ * Save tokens to file
438
+ */
439
+ private async saveTokens(tokenData: any): Promise<void> {
440
+ try {
441
+ const expiresAt = new Date();
442
+ expiresAt.setSeconds(expiresAt.getSeconds() + tokenData.expiresIn);
443
+
444
+ const authData = {
445
+ ...tokenData,
446
+ expiresAt: expiresAt.toISOString()
447
+ };
448
+
449
+ // Use unified auth store
450
+ await unifiedAuthStore.saveTokens(authData);
451
+
452
+ // Bridge to MCP servers immediately
453
+ await unifiedAuthStore.bridgeToMCP();
454
+ } catch (error) {
455
+ console.error('Failed to save tokens:', error);
456
+ throw error;
457
+ }
458
+ }
459
+
460
+ /**
461
+ * Load tokens from file
462
+ */
463
+ async loadTokens(): Promise<any> {
464
+ try {
465
+ return await unifiedAuthStore.getTokens();
466
+ } catch (error) {
467
+ return null;
468
+ }
469
+ }
470
+
471
+ /**
472
+ * Check if authenticated
473
+ */
474
+ async isAuthenticated(): Promise<boolean> {
475
+ try {
476
+ const tokens = await this.loadTokens();
477
+ if (!tokens) return false;
478
+
479
+ // Check if token is expired
480
+ const expiresAt = new Date(tokens.expiresAt);
481
+ const now = new Date();
482
+
483
+ return now < expiresAt;
484
+ } catch (error) {
485
+ return false;
486
+ }
487
+ }
488
+
489
+ /**
490
+ * Get access token (refresh if needed)
491
+ */
492
+ async getAccessToken(): Promise<string | null> {
493
+ try {
494
+ const tokens = await this.loadTokens();
495
+ if (!tokens) return null;
496
+
497
+ // Check if token is expired
498
+ const expiresAt = new Date(tokens.expiresAt);
499
+ const now = new Date();
500
+
501
+ if (now >= expiresAt && tokens.refreshToken) {
502
+ // Token expired, try to refresh
503
+ console.log('🔄 Token expired, refreshing...');
504
+ const refreshResult = await this.refreshAccessToken(tokens);
505
+
506
+ if (refreshResult.success && refreshResult.accessToken) {
507
+ // Update saved tokens
508
+ await this.saveTokens({
509
+ ...tokens,
510
+ accessToken: refreshResult.accessToken,
511
+ expiresIn: refreshResult.expiresIn || 3600
512
+ });
513
+
514
+ return refreshResult.accessToken;
515
+ } else {
516
+ console.error('❌ Token refresh failed:', refreshResult.error);
517
+ return null;
518
+ }
519
+ }
520
+
521
+ return tokens.accessToken;
522
+ } catch (error) {
523
+ console.error('Failed to get access token:', error);
524
+ return null;
525
+ }
526
+ }
527
+
528
+ /**
529
+ * Refresh access token
530
+ */
531
+ public async refreshAccessToken(tokens?: any): Promise<ServiceNowAuthResult> {
532
+ try {
533
+ // 🔒 SEC-002 FIX: Apply rate limiting to prevent authentication bypass attacks
534
+ if (!this.checkTokenRequestRateLimit()) {
535
+ return {
536
+ success: false,
537
+ error: 'Rate limit exceeded. Too many token requests. Please wait 1 minute before retrying.'
538
+ };
539
+ }
540
+
541
+ // If no tokens provided, load from file
542
+ if (!tokens) {
543
+ tokens = await this.loadTokens();
544
+ if (!tokens) {
545
+ return {
546
+ success: false,
547
+ error: 'No tokens found to refresh'
548
+ };
549
+ }
550
+ }
551
+
552
+ const tokenUrl = `https://${tokens.instance}/oauth_token.do`;
553
+
554
+ const response = await axios.post(tokenUrl, new URLSearchParams({
555
+ grant_type: 'refresh_token',
556
+ refresh_token: tokens.refreshToken,
557
+ client_id: tokens.clientId,
558
+ client_secret: tokens.clientSecret
559
+ }), {
560
+ headers: {
561
+ 'Content-Type': 'application/x-www-form-urlencoded'
562
+ },
563
+ timeout: 15000, // 🔒 SEC-002 FIX: 15 second timeout to prevent hanging requests
564
+ // Allow self-signed certificates for dev instances
565
+ httpsAgent: new https.Agent({
566
+ rejectUnauthorized: false
567
+ })
568
+ });
569
+
570
+ const data = response.data;
571
+
572
+ if (data.access_token) {
573
+ // Update saved tokens
574
+ await this.saveTokens({
575
+ ...tokens,
576
+ accessToken: data.access_token,
577
+ expiresIn: data.expires_in || 3600
578
+ });
579
+
580
+ return {
581
+ success: true,
582
+ accessToken: data.access_token,
583
+ expiresIn: data.expires_in
584
+ };
585
+ } else {
586
+ return {
587
+ success: false,
588
+ error: 'No access token received'
589
+ };
590
+ }
591
+ } catch (error) {
592
+ const errorMessage = error instanceof Error ? error.message : String(error);
593
+ return {
594
+ success: false,
595
+ error: errorMessage
596
+ };
597
+ }
598
+ }
599
+
600
+ /**
601
+ * Logout - clear saved tokens
602
+ */
603
+ async logout(): Promise<void> {
604
+ try {
605
+ await fs.unlink(this.tokenPath);
606
+ console.log('✅ Logged out successfully');
607
+ } catch (error) {
608
+ console.log('No active session to logout from');
609
+ }
610
+ }
611
+
612
+ /**
613
+ * Get stored OAuth tokens for use in other contexts (MCP servers)
614
+ */
615
+ async getStoredTokens(): Promise<any> {
616
+ return await this.loadTokens();
617
+ }
618
+
619
+ /**
620
+ * Load credentials (including tokens) with .env fallback
621
+ */
622
+ async loadCredentials(): Promise<ServiceNowCredentials | null> {
623
+ try {
624
+ // First, try to load saved OAuth tokens
625
+ const tokens = await this.loadTokens();
626
+
627
+ if (tokens && tokens.accessToken) {
628
+ // Validate client secret when loading
629
+ if (tokens.clientSecret) {
630
+ const secretValidation = this.validateClientSecret(tokens.clientSecret);
631
+ if (!secretValidation.valid) {
632
+ console.warn('⚠️ OAuth Configuration Issue:', secretValidation.reason);
633
+ console.warn('💡 Your stored client secret may be incorrect. Re-authenticate with: snow-flow auth login');
634
+ }
635
+ }
636
+
637
+ // Check if token is expired
638
+ const expiresAt = new Date(tokens.expiresAt);
639
+ const now = new Date();
640
+
641
+ if (now < expiresAt) {
642
+ console.log('✅ Using saved OAuth tokens');
643
+ return {
644
+ instance: tokens.instance,
645
+ clientId: tokens.clientId,
646
+ clientSecret: tokens.clientSecret,
647
+ accessToken: tokens.accessToken,
648
+ refreshToken: tokens.refreshToken,
649
+ expiresAt: tokens.expiresAt
650
+ };
651
+ } else {
652
+ console.log('⏰ Saved OAuth token expired, will try refresh...');
653
+ }
654
+ }
655
+
656
+ // 🔧 NEW: Fallback to .env file if no valid tokens
657
+ console.log('🔍 No valid OAuth tokens found, checking .env file...');
658
+
659
+ // Load environment variables with dotenv
660
+ try {
661
+ require('dotenv').config();
662
+ } catch (err) {
663
+ console.log('📝 dotenv not available, using process.env directly');
664
+ }
665
+
666
+ const envInstance = process.env.SNOW_INSTANCE;
667
+ const envClientId = process.env.SNOW_CLIENT_ID;
668
+ const envClientSecret = process.env.SNOW_CLIENT_SECRET;
669
+
670
+ if (envInstance && envClientId && envClientSecret) {
671
+ console.log('✅ Found ServiceNow credentials in .env file');
672
+ console.log(` - Instance: ${envInstance}`);
673
+ console.log(` - Client ID: ${envClientId}`);
674
+ console.log(` - Client Secret: ✅ Present`);
675
+
676
+ // Validate client secret
677
+ const secretValidation = this.validateClientSecret(envClientSecret);
678
+ if (!secretValidation.valid) {
679
+ console.error('❌ Invalid OAuth Client Secret in .env file:', secretValidation.reason);
680
+ console.error('💡 Please update SNOW_CLIENT_SECRET in .env with proper OAuth secret from ServiceNow');
681
+ return null;
682
+ }
683
+
684
+ console.log('');
685
+ console.log('🔐 OAuth Setup Required:');
686
+ console.log(' Your .env has OAuth credentials but no active session.');
687
+ console.log(' Run: snow-flow auth login');
688
+ console.log(' This will authenticate and create persistent tokens.');
689
+ console.log('');
690
+
691
+ // Return credentials without access token - this will trigger auth flow
692
+ return {
693
+ instance: envInstance.replace(/\/$/, ''),
694
+ clientId: envClientId,
695
+ clientSecret: envClientSecret,
696
+ // No accessToken - this signals that OAuth login is needed
697
+ };
698
+ }
699
+
700
+ // 🔧 Check for old username/password setup in .env
701
+ const envUsername = process.env.SNOW_USERNAME;
702
+ const envPassword = process.env.SNOW_PASSWORD;
703
+
704
+ if (envInstance && envUsername && envPassword) {
705
+ console.warn('⚠️ Found username/password in .env - OAuth is recommended');
706
+ console.warn('💡 For better security, set up OAuth credentials:');
707
+ console.warn(' 1. In ServiceNow: System OAuth > Application Registry > New');
708
+ console.warn(' 2. Update .env with SNOW_CLIENT_ID and SNOW_CLIENT_SECRET');
709
+ console.warn(' 3. Run: snow-flow auth login');
710
+
711
+ // Don't return username/password - force OAuth setup
712
+ return null;
713
+ }
714
+
715
+ // No credentials found anywhere
716
+ console.error('❌ No ServiceNow credentials found!');
717
+ console.error('');
718
+ console.error('🔧 Setup Instructions:');
719
+ console.error(' 1. Create .env file with OAuth credentials:');
720
+ console.error(' SNOW_INSTANCE=your-instance.service-now.com');
721
+ console.error(' SNOW_CLIENT_ID=your_oauth_client_id');
722
+ console.error(' SNOW_CLIENT_SECRET=your_oauth_client_secret');
723
+ console.error(' 2. Run: snow-flow auth login');
724
+ console.error('');
725
+ console.error('💡 To get OAuth credentials:');
726
+ console.error(' • ServiceNow: System OAuth > Application Registry > New OAuth Application');
727
+ console.error(` • Redirect URI: http://${snowFlowConfig.servicenow.oauth.redirectHost}:${snowFlowConfig.servicenow.oauth.redirectPort}${snowFlowConfig.servicenow.oauth.redirectPath}`);
728
+ console.error(' • Scopes: useraccount write admin');
729
+ console.error('');
730
+
731
+ return null;
732
+
733
+ } catch (error) {
734
+ console.error('❌ Error loading credentials:', error);
735
+ return null;
736
+ }
737
+ }
738
+
739
+ /**
740
+ * Validate OAuth client secret format
741
+ * OAuth secrets are typically long random strings (32+ chars) with mixed case and alphanumeric
742
+ * Common passwords are shorter and may contain dictionary words
743
+ */
744
+ validateClientSecret(clientSecret: string): { valid: boolean; reason?: string } {
745
+ // Check minimum length - OAuth secrets are typically 32+ characters
746
+ if (clientSecret.length < 20) {
747
+ return {
748
+ valid: false,
749
+ reason: 'OAuth Client Secret too short. Expected 32+ character random string from ServiceNow.'
750
+ };
751
+ }
752
+
753
+ // Check for common password patterns
754
+ const commonPasswordPatterns = [
755
+ /^password/i,
756
+ /^admin/i,
757
+ /^test/i,
758
+ /^demo/i,
759
+ /^welcome/i,
760
+ /123456/,
761
+ /qwerty/i,
762
+ /^[a-z]+\d{1,4}$/i, // Simple word + numbers like "Welkom123"
763
+ /^[A-Z][a-z]+\d{1,4}$/ // Capitalized word + numbers
764
+ ];
765
+
766
+ for (const pattern of commonPasswordPatterns) {
767
+ if (pattern.test(clientSecret)) {
768
+ return {
769
+ valid: false,
770
+ reason: `OAuth Client Secret appears to be a password. ServiceNow OAuth secrets are long random strings (e.g., "a1b2c3d4e5f6..."). Check your Application Registry in ServiceNow.`
771
+ };
772
+ }
773
+ }
774
+
775
+ // Check for sufficient entropy (mix of upper, lower, numbers)
776
+ const hasUpper = /[A-Z]/.test(clientSecret);
777
+ const hasLower = /[a-z]/.test(clientSecret);
778
+ const hasNumber = /[0-9]/.test(clientSecret);
779
+ const charTypes = [hasUpper, hasLower, hasNumber].filter(Boolean).length;
780
+
781
+ if (charTypes < 2) {
782
+ return {
783
+ valid: false,
784
+ reason: 'OAuth Client Secret lacks complexity. ServiceNow generates secrets with mixed case and numbers.'
785
+ };
786
+ }
787
+
788
+ return { valid: true };
789
+ }
790
+
791
+ /**
792
+ * Get credentials (compatibility method for MCP servers)
793
+ */
794
+ async getCredentials(): Promise<ServiceNowCredentials | null> {
795
+ return await this.loadCredentials();
796
+ }
797
+ }