fraim-framework 2.0.67 → 2.0.69

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 (280) hide show
  1. package/bin/fraim.js +1 -1
  2. package/dist/src/cli/commands/doctor.js +1 -1
  3. package/dist/src/cli/commands/init-project.js +6 -12
  4. package/dist/src/cli/commands/list.js +1 -1
  5. package/dist/src/cli/commands/setup.js +15 -29
  6. package/dist/src/cli/commands/sync.js +36 -143
  7. package/dist/src/cli/fraim.js +0 -4
  8. package/dist/src/cli/setup/first-run.js +4 -4
  9. package/dist/src/cli/setup/ide-detector.js +15 -5
  10. package/dist/src/fraim/template-processor.js +7 -35
  11. package/dist/src/local-mcp-server/stdio-server.js +170 -181
  12. package/dist/src/utils/git-utils.js +2 -2
  13. package/dist/src/utils/object-utils.js +11 -0
  14. package/dist/src/utils/provider-utils.js +14 -0
  15. package/dist/src/utils/request-utils.js +23 -0
  16. package/dist/src/utils/workflow-parser.js +7 -7
  17. package/package.json +7 -5
  18. package/dist/registry/ai-manager-rules/customer-development-phases/phase1-customer-profiling.md +0 -101
  19. package/dist/registry/ai-manager-rules/customer-development-phases/phase2-platform-discovery.md +0 -235
  20. package/dist/registry/ai-manager-rules/customer-development-phases/phase3-prospect-qualification.md +0 -243
  21. package/dist/registry/ai-manager-rules/customer-development-phases/phase4-inventory-compilation.md +0 -206
  22. package/dist/registry/ai-manager-rules/design-phases/design-completeness-review.md +0 -73
  23. package/dist/registry/ai-manager-rules/design-phases/design-design.md +0 -145
  24. package/dist/registry/ai-manager-rules/design-phases/design.md +0 -108
  25. package/dist/registry/ai-manager-rules/design-phases/finalize.md +0 -60
  26. package/dist/registry/ai-manager-rules/design-phases/validate.md +0 -125
  27. package/dist/registry/ai-manager-rules/design.json +0 -97
  28. package/dist/registry/ai-manager-rules/implement-phases/code.md +0 -323
  29. package/dist/registry/ai-manager-rules/implement-phases/completeness-review.md +0 -94
  30. package/dist/registry/ai-manager-rules/implement-phases/finalize.md +0 -177
  31. package/dist/registry/ai-manager-rules/implement-phases/implement-code.md +0 -283
  32. package/dist/registry/ai-manager-rules/implement-phases/implement-completeness-review.md +0 -120
  33. package/dist/registry/ai-manager-rules/implement-phases/implement-regression.md +0 -173
  34. package/dist/registry/ai-manager-rules/implement-phases/implement-repro.md +0 -104
  35. package/dist/registry/ai-manager-rules/implement-phases/implement-scoping.md +0 -100
  36. package/dist/registry/ai-manager-rules/implement-phases/implement-smoke.md +0 -237
  37. package/dist/registry/ai-manager-rules/implement-phases/implement-spike.md +0 -121
  38. package/dist/registry/ai-manager-rules/implement-phases/implement-validate.md +0 -375
  39. package/dist/registry/ai-manager-rules/implement-phases/quality-review.md +0 -304
  40. package/dist/registry/ai-manager-rules/implement-phases/regression.md +0 -159
  41. package/dist/registry/ai-manager-rules/implement-phases/repro.md +0 -101
  42. package/dist/registry/ai-manager-rules/implement-phases/scoping.md +0 -93
  43. package/dist/registry/ai-manager-rules/implement-phases/smoke.md +0 -225
  44. package/dist/registry/ai-manager-rules/implement-phases/spike.md +0 -118
  45. package/dist/registry/ai-manager-rules/implement-phases/validate.md +0 -347
  46. package/dist/registry/ai-manager-rules/implement.json +0 -153
  47. package/dist/registry/ai-manager-rules/retrospective.md +0 -116
  48. package/dist/registry/ai-manager-rules/shared-phases/address-pr-feedback.md +0 -188
  49. package/dist/registry/ai-manager-rules/shared-phases/finalize.md +0 -169
  50. package/dist/registry/ai-manager-rules/shared-phases/submit-pr.md +0 -202
  51. package/dist/registry/ai-manager-rules/shared-phases/wait-for-pr-review.md +0 -170
  52. package/dist/registry/ai-manager-rules/spec-phases/finalize.md +0 -60
  53. package/dist/registry/ai-manager-rules/spec-phases/spec-competitor-analysis.md +0 -105
  54. package/dist/registry/ai-manager-rules/spec-phases/spec-completeness-review.md +0 -66
  55. package/dist/registry/ai-manager-rules/spec-phases/spec-spec.md +0 -139
  56. package/dist/registry/ai-manager-rules/spec-phases/spec.md +0 -102
  57. package/dist/registry/ai-manager-rules/spec-phases/validate.md +0 -118
  58. package/dist/registry/ai-manager-rules/spec.json +0 -112
  59. package/dist/registry/ai-manager-rules/test.json +0 -98
  60. package/dist/registry/ai-manager-rules/user-survey-phases/phase1-survey-scoping.md +0 -60
  61. package/dist/registry/ai-manager-rules/user-survey-phases/phase2-survey-build-linkedin.md +0 -23
  62. package/dist/registry/ai-manager-rules/user-survey-phases/phase3-survey-build-reddit.md +0 -22
  63. package/dist/registry/ai-manager-rules/user-survey-phases/phase4-survey-build-x.md +0 -21
  64. package/dist/registry/ai-manager-rules/user-survey-phases/phase5-survey-build-facebook.md +0 -19
  65. package/dist/registry/ai-manager-rules/user-survey-phases/phase6-survey-build-custom.md +0 -15
  66. package/dist/registry/ai-manager-rules/user-survey-phases/phase7-survey-dispatch.md +0 -45
  67. package/dist/registry/delivery/address-feedback.md +0 -83
  68. package/dist/registry/delivery/retrospective.md +0 -78
  69. package/dist/registry/delivery/submit.md +0 -79
  70. package/dist/registry/providers/ado.json +0 -19
  71. package/dist/registry/providers/delivery-conversation.json +0 -9
  72. package/dist/registry/providers/delivery-pr.json +0 -9
  73. package/dist/registry/providers/github.json +0 -19
  74. package/dist/registry/rules/agent-success-criteria.md +0 -101
  75. package/dist/registry/rules/agent-testing-guidelines.md +0 -502
  76. package/dist/registry/rules/architecture.md +0 -126
  77. package/dist/registry/rules/communication.md +0 -122
  78. package/dist/registry/rules/continuous-learning.md +0 -55
  79. package/dist/registry/rules/debugging-multitenancy-issues.md +0 -85
  80. package/dist/registry/rules/ephemeral-execution.md +0 -54
  81. package/dist/registry/rules/git-safe-commands.md +0 -34
  82. package/dist/registry/rules/hitl-ppe-record-analysis.md +0 -302
  83. package/dist/registry/rules/integrity-and-test-ethics.md +0 -275
  84. package/dist/registry/rules/local-development.md +0 -275
  85. package/dist/registry/rules/mandatory-pre-completion-reflection.md +0 -193
  86. package/dist/registry/rules/merge-requirements.md +0 -238
  87. package/dist/registry/rules/simplicity.md +0 -118
  88. package/dist/registry/rules/software-development-lifecycle.md +0 -105
  89. package/dist/registry/rules/spike-first-development.md +0 -205
  90. package/dist/registry/rules/successful-debugging-patterns.md +0 -488
  91. package/dist/registry/scripts/build-scripts-generator.js +0 -205
  92. package/dist/registry/scripts/cleanup-branch.js +0 -287
  93. package/dist/registry/scripts/evaluate-code-quality.js +0 -66
  94. package/dist/registry/scripts/exec-with-timeout.js +0 -142
  95. package/dist/registry/scripts/fraim-config.js +0 -61
  96. package/dist/registry/scripts/generate-engagement-emails.js +0 -705
  97. package/dist/registry/scripts/generic-issues-api.js +0 -100
  98. package/dist/registry/scripts/newsletter-helpers.js +0 -671
  99. package/dist/registry/scripts/openapi-generator.js +0 -664
  100. package/dist/registry/scripts/performance/profile-server.js +0 -390
  101. package/dist/registry/scripts/profile-server.js +0 -389
  102. package/dist/registry/scripts/run-thank-you-workflow.js +0 -92
  103. package/dist/registry/scripts/send-newsletter-simple.js +0 -85
  104. package/dist/registry/scripts/send-thank-you-emails.js +0 -54
  105. package/dist/registry/scripts/validate-openapi-limits.js +0 -311
  106. package/dist/registry/scripts/validate-test-coverage.js +0 -262
  107. package/dist/registry/scripts/verify-test-coverage.js +0 -66
  108. package/dist/registry/stubs/workflows/azure/cost-optimization.md +0 -11
  109. package/dist/registry/stubs/workflows/bootstrap/create-architecture.md +0 -11
  110. package/dist/registry/stubs/workflows/bootstrap/detect-broken-windows.md +0 -11
  111. package/dist/registry/stubs/workflows/bootstrap/evaluate-code-quality.md +0 -11
  112. package/dist/registry/stubs/workflows/bootstrap/verify-test-coverage.md +0 -11
  113. package/dist/registry/stubs/workflows/brainstorming/blue-sky-brainstorming.md +0 -11
  114. package/dist/registry/stubs/workflows/brainstorming/codebase-brainstorming.md +0 -11
  115. package/dist/registry/stubs/workflows/business-development/create-business-plan.md +0 -11
  116. package/dist/registry/stubs/workflows/business-development/ideate-business-opportunity.md +0 -11
  117. package/dist/registry/stubs/workflows/business-development/price-product.md +0 -18
  118. package/dist/registry/stubs/workflows/compliance/detect-compliance-requirements.md +0 -11
  119. package/dist/registry/stubs/workflows/compliance/generate-audit-evidence.md +0 -11
  120. package/dist/registry/stubs/workflows/compliance/soc2-evidence-generator.md +0 -11
  121. package/dist/registry/stubs/workflows/customer-development/insight-analysis.md +0 -11
  122. package/dist/registry/stubs/workflows/customer-development/insight-triage.md +0 -11
  123. package/dist/registry/stubs/workflows/customer-development/interview-preparation.md +0 -11
  124. package/dist/registry/stubs/workflows/customer-development/linkedin-outreach.md +0 -11
  125. package/dist/registry/stubs/workflows/customer-development/strategic-brainstorming.md +0 -11
  126. package/dist/registry/stubs/workflows/customer-development/thank-customers.md +0 -11
  127. package/dist/registry/stubs/workflows/customer-development/user-survey-dispatch.md +0 -11
  128. package/dist/registry/stubs/workflows/customer-development/users-to-target.md +0 -11
  129. package/dist/registry/stubs/workflows/customer-development/weekly-newsletter.md +0 -11
  130. package/dist/registry/stubs/workflows/deploy/cloud-deployment.md +0 -11
  131. package/dist/registry/stubs/workflows/improve-fraim/contribute.md +0 -11
  132. package/dist/registry/stubs/workflows/improve-fraim/file-issue.md +0 -11
  133. package/dist/registry/stubs/workflows/learning/build-skillset.md +0 -11
  134. package/dist/registry/stubs/workflows/learning/synthesize-learnings.md +0 -11
  135. package/dist/registry/stubs/workflows/legal/contract-review-analysis.md +0 -11
  136. package/dist/registry/stubs/workflows/legal/nda.md +0 -11
  137. package/dist/registry/stubs/workflows/legal/patent-filing.md +0 -11
  138. package/dist/registry/stubs/workflows/legal/saas-contract-development.md +0 -11
  139. package/dist/registry/stubs/workflows/legal/trademark-filing.md +0 -11
  140. package/dist/registry/stubs/workflows/marketing/content-creation.md +0 -11
  141. package/dist/registry/stubs/workflows/marketing/convert-to-pdf.md +0 -11
  142. package/dist/registry/stubs/workflows/marketing/create-modern-website.md +0 -11
  143. package/dist/registry/stubs/workflows/marketing/domain-registration.md +0 -11
  144. package/dist/registry/stubs/workflows/marketing/evangelize.md +0 -11
  145. package/dist/registry/stubs/workflows/marketing/hbr-article.md +0 -11
  146. package/dist/registry/stubs/workflows/marketing/launch-checklist.md +0 -11
  147. package/dist/registry/stubs/workflows/marketing/marketing-strategy.md +0 -11
  148. package/dist/registry/stubs/workflows/marketing/storytelling.md +0 -11
  149. package/dist/registry/stubs/workflows/performance/analyze-performance.md +0 -11
  150. package/dist/registry/stubs/workflows/product-building/design.md +0 -11
  151. package/dist/registry/stubs/workflows/product-building/implement.md +0 -11
  152. package/dist/registry/stubs/workflows/product-building/iterate-on-pr-comments.md +0 -11
  153. package/dist/registry/stubs/workflows/product-building/prep-issue.md +0 -11
  154. package/dist/registry/stubs/workflows/product-building/prototype.md +0 -11
  155. package/dist/registry/stubs/workflows/product-building/resolve.md +0 -11
  156. package/dist/registry/stubs/workflows/product-building/retrospect.md +0 -11
  157. package/dist/registry/stubs/workflows/product-building/spec.md +0 -11
  158. package/dist/registry/stubs/workflows/product-building/test.md +0 -11
  159. package/dist/registry/stubs/workflows/productivity-report/productivity-report.md +0 -11
  160. package/dist/registry/stubs/workflows/quality-assurance/browser-validation.md +0 -11
  161. package/dist/registry/stubs/workflows/quality-assurance/iterative-improvement-cycle.md +0 -11
  162. package/dist/registry/stubs/workflows/replicate/replicate-discovery.md +0 -11
  163. package/dist/registry/stubs/workflows/replicate/replicate-to-issues.md +0 -11
  164. package/dist/registry/stubs/workflows/reviewer/review-implementation-vs-design-spec.md +0 -11
  165. package/dist/registry/stubs/workflows/reviewer/review-implementation-vs-feature-spec.md +0 -11
  166. package/dist/registry/stubs/workflows/startup-credits/aws-activate-application.md +0 -11
  167. package/dist/registry/stubs/workflows/startup-credits/google-cloud-application.md +0 -11
  168. package/dist/registry/stubs/workflows/startup-credits/microsoft-azure-application.md +0 -11
  169. package/dist/registry/templates/bootstrap/ARCHITECTURE-TEMPLATE.md +0 -53
  170. package/dist/registry/templates/bootstrap/CODE-QUALITY-REPORT-TEMPLATE.md +0 -37
  171. package/dist/registry/templates/bootstrap/TEST-COVERAGE-REPORT-TEMPLATE.md +0 -35
  172. package/dist/registry/templates/business-development/IDEATION-REPORT-TEMPLATE.md +0 -29
  173. package/dist/registry/templates/business-development/PRICING-STRATEGY-TEMPLATE.md +0 -126
  174. package/dist/registry/templates/customer-development/customer-interview-template.md +0 -99
  175. package/dist/registry/templates/customer-development/customer-persona-template.md +0 -69
  176. package/dist/registry/templates/customer-development/follow-up-email-templates.md +0 -132
  177. package/dist/registry/templates/customer-development/insight-analysis-template.md +0 -74
  178. package/dist/registry/templates/customer-development/prospect-inventory-template.csv +0 -3
  179. package/dist/registry/templates/customer-development/search-strategy-template.md +0 -123
  180. package/dist/registry/templates/customer-development/strategic-recommendations-template.md +0 -53
  181. package/dist/registry/templates/customer-development/thank-you-email-template.html +0 -124
  182. package/dist/registry/templates/customer-development/thank-you-note-template.md +0 -16
  183. package/dist/registry/templates/customer-development/triage-log-template.md +0 -278
  184. package/dist/registry/templates/customer-development/weekly-newsletter-template.html +0 -204
  185. package/dist/registry/templates/evidence/Design-Evidence.md +0 -30
  186. package/dist/registry/templates/evidence/Implementation-BugEvidence.md +0 -122
  187. package/dist/registry/templates/evidence/Implementation-FeatureEvidence.md +0 -160
  188. package/dist/registry/templates/evidence/Spec-Evidence.md +0 -19
  189. package/dist/registry/templates/help/HelpNeeded.md +0 -14
  190. package/dist/registry/templates/legal/NDA-TEMPLATE.md +0 -170
  191. package/dist/registry/templates/legal/PATENT-TEMPLATE.md +0 -372
  192. package/dist/registry/templates/legal/TRADEMARK-TEMPLATE.md +0 -339
  193. package/dist/registry/templates/legal/contract-review-checklist.md +0 -193
  194. package/dist/registry/templates/legal/review-report-template.md +0 -198
  195. package/dist/registry/templates/legal/saas-terms-template.md +0 -174
  196. package/dist/registry/templates/legal/sow-template.md +0 -117
  197. package/dist/registry/templates/legal/template-variables.md +0 -131
  198. package/dist/registry/templates/marketing/DOMAIN-REGISTRATION-TEMPLATE.md +0 -194
  199. package/dist/registry/templates/marketing/EVANGELIZE-TEMPLATE.md +0 -102
  200. package/dist/registry/templates/marketing/HBR-ARTICLE-TEMPLATE.md +0 -66
  201. package/dist/registry/templates/marketing/STORYTELLING-TEMPLATE.md +0 -130
  202. package/dist/registry/templates/marketing/WEBSITE-TEMPLATE.md +0 -262
  203. package/dist/registry/templates/marketing/github-pages-workflow.yml +0 -64
  204. package/dist/registry/templates/replicate/implementation-checklist.md +0 -39
  205. package/dist/registry/templates/replicate/use-cases-template.md +0 -88
  206. package/dist/registry/templates/retrospective/RETROSPECTIVE-TEMPLATE.md +0 -55
  207. package/dist/registry/templates/specs/BUGSPEC-TEMPLATE.md +0 -37
  208. package/dist/registry/templates/specs/FEATURESPEC-TEMPLATE.md +0 -66
  209. package/dist/registry/templates/specs/TECHSPEC-TEMPLATE.md +0 -39
  210. package/dist/registry/workflows/azure/cost-optimization.md +0 -772
  211. package/dist/registry/workflows/bootstrap/create-architecture.md +0 -37
  212. package/dist/registry/workflows/bootstrap/detect-broken-windows.md +0 -300
  213. package/dist/registry/workflows/bootstrap/evaluate-code-quality.md +0 -35
  214. package/dist/registry/workflows/bootstrap/verify-test-coverage.md +0 -36
  215. package/dist/registry/workflows/brainstorming/blue-sky-brainstorming.md +0 -211
  216. package/dist/registry/workflows/brainstorming/codebase-brainstorming.md +0 -159
  217. package/dist/registry/workflows/business-development/create-business-plan.md +0 -737
  218. package/dist/registry/workflows/business-development/ideate-business-opportunity.md +0 -55
  219. package/dist/registry/workflows/business-development/price-product.md +0 -325
  220. package/dist/registry/workflows/compliance/detect-compliance-requirements.md +0 -80
  221. package/dist/registry/workflows/compliance/generate-audit-evidence.md +0 -80
  222. package/dist/registry/workflows/compliance/soc2-evidence-generator.md +0 -332
  223. package/dist/registry/workflows/customer-development/insight-analysis.md +0 -156
  224. package/dist/registry/workflows/customer-development/insight-triage.md +0 -933
  225. package/dist/registry/workflows/customer-development/interview-preparation.md +0 -452
  226. package/dist/registry/workflows/customer-development/linkedin-outreach.md +0 -599
  227. package/dist/registry/workflows/customer-development/strategic-brainstorming.md +0 -146
  228. package/dist/registry/workflows/customer-development/thank-customers.md +0 -203
  229. package/dist/registry/workflows/customer-development/user-survey-dispatch.md +0 -312
  230. package/dist/registry/workflows/customer-development/users-to-target.md +0 -427
  231. package/dist/registry/workflows/customer-development/weekly-newsletter.md +0 -366
  232. package/dist/registry/workflows/deploy/cloud-deployment.md +0 -310
  233. package/dist/registry/workflows/improve-fraim/contribute.md +0 -32
  234. package/dist/registry/workflows/improve-fraim/file-issue.md +0 -32
  235. package/dist/registry/workflows/learning/build-skillset.md +0 -212
  236. package/dist/registry/workflows/learning/synthesize-learnings.md +0 -369
  237. package/dist/registry/workflows/legal/contract-review-analysis.md +0 -382
  238. package/dist/registry/workflows/legal/nda.md +0 -69
  239. package/dist/registry/workflows/legal/patent-filing.md +0 -76
  240. package/dist/registry/workflows/legal/saas-contract-development.md +0 -204
  241. package/dist/registry/workflows/legal/trademark-filing.md +0 -77
  242. package/dist/registry/workflows/marketing/content-creation.md +0 -40
  243. package/dist/registry/workflows/marketing/convert-to-pdf.md +0 -265
  244. package/dist/registry/workflows/marketing/create-modern-website.md +0 -456
  245. package/dist/registry/workflows/marketing/domain-registration.md +0 -323
  246. package/dist/registry/workflows/marketing/evangelize.md +0 -426
  247. package/dist/registry/workflows/marketing/hbr-article.md +0 -73
  248. package/dist/registry/workflows/marketing/launch-checklist.md +0 -37
  249. package/dist/registry/workflows/marketing/marketing-strategy.md +0 -45
  250. package/dist/registry/workflows/marketing/storytelling.md +0 -65
  251. package/dist/registry/workflows/performance/analyze-performance.md +0 -65
  252. package/dist/registry/workflows/product-building/design.md +0 -263
  253. package/dist/registry/workflows/product-building/implement.md +0 -771
  254. package/dist/registry/workflows/product-building/iterate-on-pr-comments.md +0 -70
  255. package/dist/registry/workflows/product-building/prep-issue.md +0 -41
  256. package/dist/registry/workflows/product-building/prototype.md +0 -60
  257. package/dist/registry/workflows/product-building/resolve.md +0 -175
  258. package/dist/registry/workflows/product-building/retrospect.md +0 -86
  259. package/dist/registry/workflows/product-building/spec.md +0 -303
  260. package/dist/registry/workflows/product-building/test.md +0 -125
  261. package/dist/registry/workflows/productivity-report/productivity-report.md +0 -263
  262. package/dist/registry/workflows/quality-assurance/browser-validation.md +0 -221
  263. package/dist/registry/workflows/quality-assurance/iterative-improvement-cycle.md +0 -562
  264. package/dist/registry/workflows/replicate/replicate-discovery.md +0 -336
  265. package/dist/registry/workflows/replicate/replicate-to-issues.md +0 -319
  266. package/dist/registry/workflows/reviewer/review-implementation-vs-design-spec.md +0 -694
  267. package/dist/registry/workflows/reviewer/review-implementation-vs-feature-spec.md +0 -734
  268. package/dist/registry/workflows/startup-credits/aws-activate-application.md +0 -535
  269. package/dist/registry/workflows/startup-credits/google-cloud-application.md +0 -647
  270. package/dist/registry/workflows/startup-credits/microsoft-azure-application.md +0 -538
  271. package/dist/src/cli/commands/init.js +0 -148
  272. package/dist/src/cli/commands/mcp.js +0 -65
  273. package/dist/src/cli/commands/wizard.js +0 -35
  274. package/dist/src/fraim/issue-tracking/ado-provider.js +0 -304
  275. package/dist/src/fraim/issue-tracking/factory.js +0 -63
  276. package/dist/src/fraim/issue-tracking/github-provider.js +0 -200
  277. package/dist/src/fraim/issue-tracking/types.js +0 -7
  278. package/dist/src/fraim/issue-tracking-config.js +0 -83
  279. package/dist/src/fraim/retrospective-learner.js +0 -301
  280. package/dist/src/fraim/setup-wizard.js +0 -99
@@ -1,390 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- const child_process_1 = require("child_process");
37
- const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
- const os = __importStar(require("os"));
40
- const fraim_config_1 = require("../fraim-config");
41
- const azureConfig = fraim_config_1.fraimConfig.azure;
42
- const CONFIGS = {
43
- prod: {
44
- env: 'prod',
45
- appName: azureConfig.prodAppName,
46
- resourceGroup: azureConfig.prodResourceGroup
47
- },
48
- preprod: {
49
- env: 'preprod',
50
- appName: azureConfig.preprodAppName,
51
- resourceGroup: azureConfig.preprodResourceGroup
52
- },
53
- local: {
54
- env: 'local',
55
- appName: azureConfig.localAppName,
56
- resourceGroup: azureConfig.localResourceGroup
57
- }
58
- };
59
- async function main() {
60
- const args = process.argv.slice(2);
61
- let config = CONFIGS.local;
62
- const includeLogs = args.includes('--logs');
63
- if (args.includes('--prod'))
64
- config = CONFIGS.prod;
65
- else if (args.includes('--preprod'))
66
- config = CONFIGS.preprod;
67
- else if (args.includes('--local')) {
68
- console.log('🔍 Running in local mode (log analysis only)');
69
- config = CONFIGS.local;
70
- }
71
- else {
72
- console.log('⚠️ No environment specified.');
73
- console.log('Usage: npx tsx <this-script> [--prod|--preprod|--local] [--logs]');
74
- return;
75
- }
76
- console.log(`\n🚀 Starting Profiling for Environment: ${config.env.toUpperCase()}`);
77
- // 1. Infrastructure (Step 1)
78
- if (config.env !== 'local') {
79
- try {
80
- console.log('\n--- ☁️ Step 1: Server Resource Analysis (Plan Level) ---');
81
- // Get App Service Plan ID
82
- const planId = (0, child_process_1.execSync)(`az webapp show --name ${config.appName} --resource-group ${config.resourceGroup} --query "appServicePlanId" -o tsv`).toString().trim();
83
- console.log(`Plan ID: ${planId.split('/').pop()}`);
84
- // 1a. Overall Metric (Plan Level)
85
- // Get last 5 minutes of CPU/Memory
86
- console.log(`> Fetching Plan Metrics (Last 5m)...`);
87
- const metricCmd = `az monitor metrics list --resource "${planId}" --metrics CpuPercentage MemoryPercentage --interval PT1M --query "value[].{name:name.value, average:timeseries[0].data[-1].average}" -o json`;
88
- try {
89
- const metrics = JSON.parse((0, child_process_1.execSync)(metricCmd).toString());
90
- metrics.forEach((m) => {
91
- console.log(`${m.name}: ${m.average != null ? m.average.toFixed(2) + '%' : 'N/A'}`);
92
- });
93
- }
94
- catch (e) {
95
- console.log(`⚠️ Could not fetch plan metrics: ${e.message.split('\n')[0]}`);
96
- }
97
- // Prepare for API calls
98
- // Get Access Token explicitly
99
- const token = (0, child_process_1.execSync)('az account get-access-token --resource https://management.azure.com/ --query accessToken -o tsv').toString().trim();
100
- const axios = (await Promise.resolve().then(() => __importStar(require('axios')))).default;
101
- // --- 1.5: App Level Metrics (CpuTime) ---
102
- try {
103
- console.log(`\n> Fetching App Metrics (Last 5m) for ${config.appName}...`);
104
- const subscriptionId = (0, child_process_1.execSync)(`az account show --query id -o tsv`).toString().trim();
105
- const siteResourceId = `/subscriptions/${subscriptionId}/resourceGroups/${config.resourceGroup}/providers/Microsoft.Web/sites/${config.appName}`;
106
- const appResponse = await axios.get(`https://management.azure.com${siteResourceId}/providers/microsoft.insights/metrics?api-version=2018-01-01&metricnames=CpuTime&timespan=PT5M&aggregation=Total`, { headers: { Authorization: `Bearer ${token}` } });
107
- if (appResponse.data && appResponse.data.value) {
108
- appResponse.data.value.forEach((m) => {
109
- const val = (m.timeseries[0]?.data[0]?.total);
110
- const displayVal = val !== undefined ? val.toFixed(2) : 'N/A';
111
- console.log(`${m.name.value}: ${displayVal}s (Total over 5m)`);
112
- });
113
- }
114
- }
115
- catch (e) {
116
- console.log(`⚠️ Could not fetch app metrics: ${e.message}`);
117
- }
118
- // 2. Process Metrics (Step 2)
119
- console.log(`\n--- ⚙️ Step 2: Per-Process Resource Analysis (Kudu) ---`);
120
- try {
121
- // Token and axios already fetched above
122
- const response = await axios.get(`https://${config.appName}.scm.azurewebsites.net/api/processes`, {
123
- headers: { Authorization: `Bearer ${token}` }
124
- });
125
- const processes = response.data;
126
- // Shared diagnostics state
127
- let memInfoOutput = '';
128
- let psOutput = '';
129
- let psLines = [];
130
- // Use Kudu Command API to run 'top' remotely
131
- try {
132
- const topCmd = {
133
- command: "top -b -d 3 -n 2",
134
- dir: "/home"
135
- };
136
- const cmdRes = await axios.post(`https://${config.appName}.scm.azurewebsites.net/api/command`, topCmd, {
137
- headers: { Authorization: `Bearer ${token}` },
138
- timeout: 25000
139
- });
140
- if (cmdRes.data && cmdRes.data.Output) {
141
- const lines = cmdRes.data.Output.split('\n');
142
- // --- Trace System Summary ---
143
- console.log('System Summary (from top):');
144
- let summaryLinesCount = 0;
145
- for (const line of lines) {
146
- if (line.trim() && summaryLinesCount < 5) {
147
- console.log(` ${line.trim()}`);
148
- summaryLinesCount++;
149
- }
150
- }
151
- // --- Deep Dive: Missing Memory Investigation ---
152
- console.log(`\n> Investigating "Invisible" Memory Usage...`);
153
- try {
154
- const dfCmd = { command: "df -h | grep -E 'tmpfs|shm'", dir: "/home" };
155
- const dfRes = await axios.post(`https://${config.appName}.scm.azurewebsites.net/api/command`, dfCmd, { headers: { Authorization: `Bearer ${token}` } });
156
- console.log(' [Tmpfs/Shm Usage]:');
157
- console.log(dfRes.data.Output ? ' ' + dfRes.data.Output.replace(/\n/g, '\n ').trim() : ' (No output)');
158
- const memInfoCmd = { command: "cat /proc/meminfo | grep -E 'MemTotal|MemFree|MemAvailable|SwapTotal|SwapFree|Shmem|Slab|SUnreclaim|Buffers|Cached|AnonPages|Committed_AS'", dir: "/home" };
159
- const memRes = await axios.post(`https://${config.appName}.scm.azurewebsites.net/api/command`, memInfoCmd, { headers: { Authorization: `Bearer ${token}` } });
160
- memInfoOutput = memRes.data.Output || '';
161
- console.log(' [Detailed MemInfo]:');
162
- console.log(memInfoOutput ? ' ' + memInfoOutput.replace(/\n/g, '\n ').trim() : ' (No output)');
163
- console.log('\n [Searching for Swap/VM Hogs in /proc...]:');
164
- const swapHogCmd = {
165
- command: "for f in /proc/[0-9]*/status; do grep -E '^(Name|Pid|VmSwap|VmSize)' $f 2>/dev/null | tr '\n' ' ' && echo ''; done | sort -k6 -rn | head -n 10",
166
- dir: "/home"
167
- };
168
- const swapRes = await axios.post(`https://${config.appName}.scm.azurewebsites.net/api/command`, swapHogCmd, { headers: { Authorization: `Bearer ${token}` } });
169
- console.log(' (Format: Name, Pid, VmSize, VmSwap)');
170
- console.log(swapRes.data.Output ? ' ' + swapRes.data.Output.replace(/\n/g, '\n ').trim() : ' (No output)');
171
- }
172
- catch (e) {
173
- console.log(` Could not inspect storage/meminfo: ${e.message}`);
174
- }
175
- let currentSnapshot = [];
176
- let foundHeader = false;
177
- let cpuColIndex = -1;
178
- let memColIndex = -1;
179
- let cmdColIndex = -1;
180
- for (const line of lines) {
181
- const trimmed = line.trim();
182
- if (!trimmed)
183
- continue;
184
- if (trimmed.includes('PID') && trimmed.includes('COMMAND')) {
185
- foundHeader = true;
186
- currentSnapshot = [];
187
- const headers = trimmed.split(/\s+/);
188
- cpuColIndex = headers.indexOf('%CPU');
189
- if (cpuColIndex === -1)
190
- cpuColIndex = headers.indexOf('CPU%');
191
- memColIndex = headers.indexOf('%MEM');
192
- if (memColIndex === -1)
193
- memColIndex = headers.indexOf('MEM%');
194
- cmdColIndex = headers.indexOf('COMMAND');
195
- continue;
196
- }
197
- if (foundHeader && cpuColIndex >= 0) {
198
- const parts = trimmed.split(/\s+/);
199
- if (parts.length >= 9) {
200
- const pid = parts[0];
201
- const cpuStr = parts[cpuColIndex];
202
- const memStr = parts[memColIndex];
203
- const cmd = parts.slice(cmdColIndex).join(' ');
204
- const state = parts[7] || '?';
205
- const time = parts[10] || '?';
206
- const cpuVal = parseFloat(cpuStr);
207
- const memVal = parseFloat(memStr);
208
- if (!isNaN(parseInt(pid))) {
209
- currentSnapshot.push({ pid, cmd, cpuStr, memStr, cpuVal, memVal, state, time });
210
- }
211
- }
212
- }
213
- }
214
- if (currentSnapshot.length === 0) {
215
- console.log('(No processes found or parsing failed)');
216
- }
217
- else {
218
- console.log(`\n--- Cross-Referencing Memory Hogs (ps aux) ---`);
219
- try {
220
- const psRes = await axios.post(`https://${config.appName}.scm.azurewebsites.net/api/command`, { command: "ps aux", dir: "/home" }, { headers: { Authorization: `Bearer ${token}` } });
221
- psOutput = psRes.data.Output || '';
222
- console.log(`PID\tVSZ\tRSS\tCOMMAND`);
223
- console.log(`---\t---\t---\t-------`);
224
- psLines = psOutput.split('\n').filter((l) => l.includes(' '));
225
- psLines.slice(1, 10).forEach((l) => {
226
- const p = l.trim().split(/\s+/);
227
- if (p.length > 10) {
228
- console.log(`${p[1]}\t${(parseInt(p[4]) / 1024).toFixed(0)}M\t${(parseInt(p[5]) / 1024).toFixed(0)}M\t${p.slice(10).join(' ').padEnd(30).slice(0, 30)}`);
229
- }
230
- });
231
- }
232
- catch (e) {
233
- console.log(` Could not fetch ps aux: ${e.message}`);
234
- }
235
- console.log(`\n--- Top Processes by CPU (top delta) ---`);
236
- console.log(`PID\tSTATE\tTIME+\t%CPU\t%MEM\tCOMMAND`);
237
- console.log(`---\t-----\t-----\t----\t----\t-------`);
238
- currentSnapshot.sort((a, b) => b.cpuVal - a.cpuVal);
239
- currentSnapshot.slice(0, 5).forEach(p => {
240
- console.log(`${p.pid}\t${p.state}\t${p.time}\t${p.cpuStr}%\t${p.memStr}%\t${p.cmd.padEnd(20).slice(0, 20)}`);
241
- });
242
- console.log(`\n--- 🧠 Step 4: Automated Diagnosis ---`);
243
- try {
244
- let healthy = true;
245
- if (memInfoOutput.includes('SwapTotal')) {
246
- const swapTotal = parseInt(memInfoOutput.match(/SwapTotal:\s+(\d+)/)?.[1] || '0');
247
- const swapFree = parseInt(memInfoOutput.match(/SwapFree:\s+(\d+)/)?.[1] || '0');
248
- if (swapTotal > 0) {
249
- const swapUsedPct = ((swapTotal - swapFree) / swapTotal) * 100;
250
- if (swapUsedPct > 95) {
251
- console.log(`❌ [CRITICAL] Swap Death detected (${swapUsedPct.toFixed(1)}% used).`);
252
- healthy = false;
253
- }
254
- }
255
- }
256
- const hasApp = psOutput.includes('server.js') || psOutput.includes('orchestrator.ts');
257
- if (!hasApp) {
258
- console.log(`❌ [CRITICAL] Application process 'server.js' NOT FOUND in ps aux.`);
259
- healthy = false;
260
- }
261
- const kuduHog = currentSnapshot.find(p => p.pid === '851' && p.memVal > 20);
262
- if (kuduHog) {
263
- console.log(`⚠️ [WARNING] Kudu (Azure Agent) is consuming ${kuduHog.memStr}% of physical RAM.`);
264
- healthy = false;
265
- }
266
- const pm2Hogs = psLines.filter((l) => l.includes('God Daemon'));
267
- if (pm2Hogs.length > 1) {
268
- console.log(`⚠️ [WARNING] Multiple PM2 God Daemons detected (${pm2Hogs.length}). Potential resource conflict.`);
269
- healthy = false;
270
- }
271
- if (healthy) {
272
- console.log(`✅ No obvious infrastructure bottlenecks detected.`);
273
- }
274
- else {
275
- console.log(`\nRECOMMENDED ACTIONS:`);
276
- console.log(`1. Restart the Web App to clear Swap and kill rogue agents.`);
277
- console.log(`2. Consider upgrading the App Service Plan (B1 -> P1v3) for more RAM.`);
278
- }
279
- }
280
- catch (e) {
281
- console.log(` Could not perform automated diagnosis: ${e.message}`);
282
- }
283
- }
284
- }
285
- else {
286
- console.log('Debug: Unexpected response format:', cmdRes.data);
287
- }
288
- }
289
- catch (err) {
290
- console.log(`⚠️ 'top' failed via Kudu: ${err.message}`);
291
- }
292
- }
293
- catch (e) {
294
- console.log(`⚠️ Could not fetch process metrics: ${e.message}`);
295
- }
296
- }
297
- catch (error) {
298
- console.error('❌ Failed to fetch infrastructure metrics:', error.message);
299
- }
300
- }
301
- // 3. Log Analysis (Step 3)
302
- if (includeLogs || config.env === 'local') {
303
- console.log('\n--- 📝 Step 3: Log Analysis ---');
304
- let logContent = '';
305
- if (config.env !== 'local') {
306
- try {
307
- console.log('> Downloading recent logs from Azure...');
308
- const fraimTmp = path.join(os.homedir(), '.fraim', 'tmp');
309
- if (!fs.existsSync(fraimTmp))
310
- fs.mkdirSync(fraimTmp, { recursive: true });
311
- const tempDir = fs.mkdtempSync(path.join(fraimTmp, `${fraim_config_1.fraimConfig.personaName.toLowerCase()}-logs-`));
312
- const zipPath = path.join(tempDir, 'logs.zip');
313
- (0, child_process_1.execSync)(`az webapp log download --name ${config.appName} --resource-group ${config.resourceGroup} --log-file "${zipPath}"`);
314
- const originalCwd = process.cwd();
315
- try {
316
- process.chdir(tempDir);
317
- try {
318
- (0, child_process_1.execSync)(`unzip -o logs.zip`);
319
- }
320
- catch (e) {
321
- try {
322
- (0, child_process_1.execSync)(`powershell -command "Expand-Archive -Path 'logs.zip' -DestinationPath '.' -Force"`);
323
- }
324
- catch (p) { }
325
- }
326
- process.chdir(originalCwd);
327
- }
328
- catch (e) {
329
- process.chdir(originalCwd);
330
- }
331
- const findLogFile = (dir) => {
332
- const files = fs.readdirSync(dir);
333
- for (const file of files) {
334
- const fullPath = path.join(dir, file);
335
- const stat = fs.statSync(fullPath);
336
- if (stat.isDirectory()) {
337
- const found = findLogFile(fullPath);
338
- if (found)
339
- return found;
340
- }
341
- else if (file.endsWith('_default_docker.log')) {
342
- return fullPath;
343
- }
344
- }
345
- return null;
346
- };
347
- const dockerLog = findLogFile(tempDir);
348
- if (dockerLog)
349
- logContent = fs.readFileSync(dockerLog, 'utf-8');
350
- }
351
- catch (error) {
352
- console.error('❌ Failed to download logs:', error.message);
353
- }
354
- }
355
- else {
356
- const localLogPath = path.join(process.cwd(), 'test.log');
357
- if (fs.existsSync(localLogPath))
358
- logContent = fs.readFileSync(localLogPath, 'utf-8');
359
- }
360
- if (logContent) {
361
- analyzeLogs(logContent);
362
- }
363
- }
364
- }
365
- function analyzeLogs(content) {
366
- const lines = content.split('\n');
367
- let indexChecks = 0, decryptions = 0, dbConnections = 0, rssMemory = 0;
368
- const indexPattern = /Ensured unique index/;
369
- const decryptPattern = /Token decrypted/;
370
- const dbConnPattern = /Database connection successful/;
371
- const memoryPattern = /RSS: (\d+) MB/;
372
- for (const line of lines) {
373
- if (indexPattern.test(line))
374
- indexChecks++;
375
- if (decryptPattern.test(line))
376
- decryptions++;
377
- if (dbConnPattern.test(line))
378
- dbConnections++;
379
- const memMatch = line.match(memoryPattern);
380
- if (memMatch)
381
- rssMemory = Math.max(rssMemory, parseInt(memMatch[1]));
382
- }
383
- console.log('\n--- 📊 Operation Frequency ---');
384
- console.log(`Ensured Unique Index: ${indexChecks}`);
385
- console.log(`Token Decryptions: ${decryptions}`);
386
- console.log(`DB Connections: ${dbConnections}`);
387
- if (rssMemory > 0)
388
- console.log(`Max RSS Detected: ${rssMemory} MB`);
389
- }
390
- main().catch(console.error);