fraim-framework 2.0.67 → 2.0.68

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 (254) hide show
  1. package/package.json +1 -2
  2. package/dist/registry/ai-manager-rules/customer-development-phases/phase1-customer-profiling.md +0 -101
  3. package/dist/registry/ai-manager-rules/customer-development-phases/phase2-platform-discovery.md +0 -235
  4. package/dist/registry/ai-manager-rules/customer-development-phases/phase3-prospect-qualification.md +0 -243
  5. package/dist/registry/ai-manager-rules/customer-development-phases/phase4-inventory-compilation.md +0 -206
  6. package/dist/registry/ai-manager-rules/design-phases/design-completeness-review.md +0 -73
  7. package/dist/registry/ai-manager-rules/design-phases/design-design.md +0 -145
  8. package/dist/registry/ai-manager-rules/design-phases/design.md +0 -108
  9. package/dist/registry/ai-manager-rules/design-phases/finalize.md +0 -60
  10. package/dist/registry/ai-manager-rules/design-phases/validate.md +0 -125
  11. package/dist/registry/ai-manager-rules/design.json +0 -97
  12. package/dist/registry/ai-manager-rules/implement-phases/code.md +0 -323
  13. package/dist/registry/ai-manager-rules/implement-phases/completeness-review.md +0 -94
  14. package/dist/registry/ai-manager-rules/implement-phases/finalize.md +0 -177
  15. package/dist/registry/ai-manager-rules/implement-phases/implement-code.md +0 -283
  16. package/dist/registry/ai-manager-rules/implement-phases/implement-completeness-review.md +0 -120
  17. package/dist/registry/ai-manager-rules/implement-phases/implement-regression.md +0 -173
  18. package/dist/registry/ai-manager-rules/implement-phases/implement-repro.md +0 -104
  19. package/dist/registry/ai-manager-rules/implement-phases/implement-scoping.md +0 -100
  20. package/dist/registry/ai-manager-rules/implement-phases/implement-smoke.md +0 -237
  21. package/dist/registry/ai-manager-rules/implement-phases/implement-spike.md +0 -121
  22. package/dist/registry/ai-manager-rules/implement-phases/implement-validate.md +0 -375
  23. package/dist/registry/ai-manager-rules/implement-phases/quality-review.md +0 -304
  24. package/dist/registry/ai-manager-rules/implement-phases/regression.md +0 -159
  25. package/dist/registry/ai-manager-rules/implement-phases/repro.md +0 -101
  26. package/dist/registry/ai-manager-rules/implement-phases/scoping.md +0 -93
  27. package/dist/registry/ai-manager-rules/implement-phases/smoke.md +0 -225
  28. package/dist/registry/ai-manager-rules/implement-phases/spike.md +0 -118
  29. package/dist/registry/ai-manager-rules/implement-phases/validate.md +0 -347
  30. package/dist/registry/ai-manager-rules/implement.json +0 -153
  31. package/dist/registry/ai-manager-rules/retrospective.md +0 -116
  32. package/dist/registry/ai-manager-rules/shared-phases/address-pr-feedback.md +0 -188
  33. package/dist/registry/ai-manager-rules/shared-phases/finalize.md +0 -169
  34. package/dist/registry/ai-manager-rules/shared-phases/submit-pr.md +0 -202
  35. package/dist/registry/ai-manager-rules/shared-phases/wait-for-pr-review.md +0 -170
  36. package/dist/registry/ai-manager-rules/spec-phases/finalize.md +0 -60
  37. package/dist/registry/ai-manager-rules/spec-phases/spec-competitor-analysis.md +0 -105
  38. package/dist/registry/ai-manager-rules/spec-phases/spec-completeness-review.md +0 -66
  39. package/dist/registry/ai-manager-rules/spec-phases/spec-spec.md +0 -139
  40. package/dist/registry/ai-manager-rules/spec-phases/spec.md +0 -102
  41. package/dist/registry/ai-manager-rules/spec-phases/validate.md +0 -118
  42. package/dist/registry/ai-manager-rules/spec.json +0 -112
  43. package/dist/registry/ai-manager-rules/test.json +0 -98
  44. package/dist/registry/ai-manager-rules/user-survey-phases/phase1-survey-scoping.md +0 -60
  45. package/dist/registry/ai-manager-rules/user-survey-phases/phase2-survey-build-linkedin.md +0 -23
  46. package/dist/registry/ai-manager-rules/user-survey-phases/phase3-survey-build-reddit.md +0 -22
  47. package/dist/registry/ai-manager-rules/user-survey-phases/phase4-survey-build-x.md +0 -21
  48. package/dist/registry/ai-manager-rules/user-survey-phases/phase5-survey-build-facebook.md +0 -19
  49. package/dist/registry/ai-manager-rules/user-survey-phases/phase6-survey-build-custom.md +0 -15
  50. package/dist/registry/ai-manager-rules/user-survey-phases/phase7-survey-dispatch.md +0 -45
  51. package/dist/registry/delivery/address-feedback.md +0 -83
  52. package/dist/registry/delivery/retrospective.md +0 -78
  53. package/dist/registry/delivery/submit.md +0 -79
  54. package/dist/registry/providers/ado.json +0 -19
  55. package/dist/registry/providers/delivery-conversation.json +0 -9
  56. package/dist/registry/providers/delivery-pr.json +0 -9
  57. package/dist/registry/providers/github.json +0 -19
  58. package/dist/registry/rules/agent-success-criteria.md +0 -101
  59. package/dist/registry/rules/agent-testing-guidelines.md +0 -502
  60. package/dist/registry/rules/architecture.md +0 -126
  61. package/dist/registry/rules/communication.md +0 -122
  62. package/dist/registry/rules/continuous-learning.md +0 -55
  63. package/dist/registry/rules/debugging-multitenancy-issues.md +0 -85
  64. package/dist/registry/rules/ephemeral-execution.md +0 -54
  65. package/dist/registry/rules/git-safe-commands.md +0 -34
  66. package/dist/registry/rules/hitl-ppe-record-analysis.md +0 -302
  67. package/dist/registry/rules/integrity-and-test-ethics.md +0 -275
  68. package/dist/registry/rules/local-development.md +0 -275
  69. package/dist/registry/rules/mandatory-pre-completion-reflection.md +0 -193
  70. package/dist/registry/rules/merge-requirements.md +0 -238
  71. package/dist/registry/rules/simplicity.md +0 -118
  72. package/dist/registry/rules/software-development-lifecycle.md +0 -105
  73. package/dist/registry/rules/spike-first-development.md +0 -205
  74. package/dist/registry/rules/successful-debugging-patterns.md +0 -488
  75. package/dist/registry/scripts/build-scripts-generator.js +0 -205
  76. package/dist/registry/scripts/cleanup-branch.js +0 -287
  77. package/dist/registry/scripts/evaluate-code-quality.js +0 -66
  78. package/dist/registry/scripts/exec-with-timeout.js +0 -142
  79. package/dist/registry/scripts/fraim-config.js +0 -61
  80. package/dist/registry/scripts/generate-engagement-emails.js +0 -705
  81. package/dist/registry/scripts/generic-issues-api.js +0 -100
  82. package/dist/registry/scripts/newsletter-helpers.js +0 -671
  83. package/dist/registry/scripts/openapi-generator.js +0 -664
  84. package/dist/registry/scripts/performance/profile-server.js +0 -390
  85. package/dist/registry/scripts/profile-server.js +0 -389
  86. package/dist/registry/scripts/run-thank-you-workflow.js +0 -92
  87. package/dist/registry/scripts/send-newsletter-simple.js +0 -85
  88. package/dist/registry/scripts/send-thank-you-emails.js +0 -54
  89. package/dist/registry/scripts/validate-openapi-limits.js +0 -311
  90. package/dist/registry/scripts/validate-test-coverage.js +0 -262
  91. package/dist/registry/scripts/verify-test-coverage.js +0 -66
  92. package/dist/registry/stubs/workflows/azure/cost-optimization.md +0 -11
  93. package/dist/registry/stubs/workflows/bootstrap/create-architecture.md +0 -11
  94. package/dist/registry/stubs/workflows/bootstrap/detect-broken-windows.md +0 -11
  95. package/dist/registry/stubs/workflows/bootstrap/evaluate-code-quality.md +0 -11
  96. package/dist/registry/stubs/workflows/bootstrap/verify-test-coverage.md +0 -11
  97. package/dist/registry/stubs/workflows/brainstorming/blue-sky-brainstorming.md +0 -11
  98. package/dist/registry/stubs/workflows/brainstorming/codebase-brainstorming.md +0 -11
  99. package/dist/registry/stubs/workflows/business-development/create-business-plan.md +0 -11
  100. package/dist/registry/stubs/workflows/business-development/ideate-business-opportunity.md +0 -11
  101. package/dist/registry/stubs/workflows/business-development/price-product.md +0 -18
  102. package/dist/registry/stubs/workflows/compliance/detect-compliance-requirements.md +0 -11
  103. package/dist/registry/stubs/workflows/compliance/generate-audit-evidence.md +0 -11
  104. package/dist/registry/stubs/workflows/compliance/soc2-evidence-generator.md +0 -11
  105. package/dist/registry/stubs/workflows/customer-development/insight-analysis.md +0 -11
  106. package/dist/registry/stubs/workflows/customer-development/insight-triage.md +0 -11
  107. package/dist/registry/stubs/workflows/customer-development/interview-preparation.md +0 -11
  108. package/dist/registry/stubs/workflows/customer-development/linkedin-outreach.md +0 -11
  109. package/dist/registry/stubs/workflows/customer-development/strategic-brainstorming.md +0 -11
  110. package/dist/registry/stubs/workflows/customer-development/thank-customers.md +0 -11
  111. package/dist/registry/stubs/workflows/customer-development/user-survey-dispatch.md +0 -11
  112. package/dist/registry/stubs/workflows/customer-development/users-to-target.md +0 -11
  113. package/dist/registry/stubs/workflows/customer-development/weekly-newsletter.md +0 -11
  114. package/dist/registry/stubs/workflows/deploy/cloud-deployment.md +0 -11
  115. package/dist/registry/stubs/workflows/improve-fraim/contribute.md +0 -11
  116. package/dist/registry/stubs/workflows/improve-fraim/file-issue.md +0 -11
  117. package/dist/registry/stubs/workflows/learning/build-skillset.md +0 -11
  118. package/dist/registry/stubs/workflows/learning/synthesize-learnings.md +0 -11
  119. package/dist/registry/stubs/workflows/legal/contract-review-analysis.md +0 -11
  120. package/dist/registry/stubs/workflows/legal/nda.md +0 -11
  121. package/dist/registry/stubs/workflows/legal/patent-filing.md +0 -11
  122. package/dist/registry/stubs/workflows/legal/saas-contract-development.md +0 -11
  123. package/dist/registry/stubs/workflows/legal/trademark-filing.md +0 -11
  124. package/dist/registry/stubs/workflows/marketing/content-creation.md +0 -11
  125. package/dist/registry/stubs/workflows/marketing/convert-to-pdf.md +0 -11
  126. package/dist/registry/stubs/workflows/marketing/create-modern-website.md +0 -11
  127. package/dist/registry/stubs/workflows/marketing/domain-registration.md +0 -11
  128. package/dist/registry/stubs/workflows/marketing/evangelize.md +0 -11
  129. package/dist/registry/stubs/workflows/marketing/hbr-article.md +0 -11
  130. package/dist/registry/stubs/workflows/marketing/launch-checklist.md +0 -11
  131. package/dist/registry/stubs/workflows/marketing/marketing-strategy.md +0 -11
  132. package/dist/registry/stubs/workflows/marketing/storytelling.md +0 -11
  133. package/dist/registry/stubs/workflows/performance/analyze-performance.md +0 -11
  134. package/dist/registry/stubs/workflows/product-building/design.md +0 -11
  135. package/dist/registry/stubs/workflows/product-building/implement.md +0 -11
  136. package/dist/registry/stubs/workflows/product-building/iterate-on-pr-comments.md +0 -11
  137. package/dist/registry/stubs/workflows/product-building/prep-issue.md +0 -11
  138. package/dist/registry/stubs/workflows/product-building/prototype.md +0 -11
  139. package/dist/registry/stubs/workflows/product-building/resolve.md +0 -11
  140. package/dist/registry/stubs/workflows/product-building/retrospect.md +0 -11
  141. package/dist/registry/stubs/workflows/product-building/spec.md +0 -11
  142. package/dist/registry/stubs/workflows/product-building/test.md +0 -11
  143. package/dist/registry/stubs/workflows/productivity-report/productivity-report.md +0 -11
  144. package/dist/registry/stubs/workflows/quality-assurance/browser-validation.md +0 -11
  145. package/dist/registry/stubs/workflows/quality-assurance/iterative-improvement-cycle.md +0 -11
  146. package/dist/registry/stubs/workflows/replicate/replicate-discovery.md +0 -11
  147. package/dist/registry/stubs/workflows/replicate/replicate-to-issues.md +0 -11
  148. package/dist/registry/stubs/workflows/reviewer/review-implementation-vs-design-spec.md +0 -11
  149. package/dist/registry/stubs/workflows/reviewer/review-implementation-vs-feature-spec.md +0 -11
  150. package/dist/registry/stubs/workflows/startup-credits/aws-activate-application.md +0 -11
  151. package/dist/registry/stubs/workflows/startup-credits/google-cloud-application.md +0 -11
  152. package/dist/registry/stubs/workflows/startup-credits/microsoft-azure-application.md +0 -11
  153. package/dist/registry/templates/bootstrap/ARCHITECTURE-TEMPLATE.md +0 -53
  154. package/dist/registry/templates/bootstrap/CODE-QUALITY-REPORT-TEMPLATE.md +0 -37
  155. package/dist/registry/templates/bootstrap/TEST-COVERAGE-REPORT-TEMPLATE.md +0 -35
  156. package/dist/registry/templates/business-development/IDEATION-REPORT-TEMPLATE.md +0 -29
  157. package/dist/registry/templates/business-development/PRICING-STRATEGY-TEMPLATE.md +0 -126
  158. package/dist/registry/templates/customer-development/customer-interview-template.md +0 -99
  159. package/dist/registry/templates/customer-development/customer-persona-template.md +0 -69
  160. package/dist/registry/templates/customer-development/follow-up-email-templates.md +0 -132
  161. package/dist/registry/templates/customer-development/insight-analysis-template.md +0 -74
  162. package/dist/registry/templates/customer-development/prospect-inventory-template.csv +0 -3
  163. package/dist/registry/templates/customer-development/search-strategy-template.md +0 -123
  164. package/dist/registry/templates/customer-development/strategic-recommendations-template.md +0 -53
  165. package/dist/registry/templates/customer-development/thank-you-email-template.html +0 -124
  166. package/dist/registry/templates/customer-development/thank-you-note-template.md +0 -16
  167. package/dist/registry/templates/customer-development/triage-log-template.md +0 -278
  168. package/dist/registry/templates/customer-development/weekly-newsletter-template.html +0 -204
  169. package/dist/registry/templates/evidence/Design-Evidence.md +0 -30
  170. package/dist/registry/templates/evidence/Implementation-BugEvidence.md +0 -122
  171. package/dist/registry/templates/evidence/Implementation-FeatureEvidence.md +0 -160
  172. package/dist/registry/templates/evidence/Spec-Evidence.md +0 -19
  173. package/dist/registry/templates/help/HelpNeeded.md +0 -14
  174. package/dist/registry/templates/legal/NDA-TEMPLATE.md +0 -170
  175. package/dist/registry/templates/legal/PATENT-TEMPLATE.md +0 -372
  176. package/dist/registry/templates/legal/TRADEMARK-TEMPLATE.md +0 -339
  177. package/dist/registry/templates/legal/contract-review-checklist.md +0 -193
  178. package/dist/registry/templates/legal/review-report-template.md +0 -198
  179. package/dist/registry/templates/legal/saas-terms-template.md +0 -174
  180. package/dist/registry/templates/legal/sow-template.md +0 -117
  181. package/dist/registry/templates/legal/template-variables.md +0 -131
  182. package/dist/registry/templates/marketing/DOMAIN-REGISTRATION-TEMPLATE.md +0 -194
  183. package/dist/registry/templates/marketing/EVANGELIZE-TEMPLATE.md +0 -102
  184. package/dist/registry/templates/marketing/HBR-ARTICLE-TEMPLATE.md +0 -66
  185. package/dist/registry/templates/marketing/STORYTELLING-TEMPLATE.md +0 -130
  186. package/dist/registry/templates/marketing/WEBSITE-TEMPLATE.md +0 -262
  187. package/dist/registry/templates/marketing/github-pages-workflow.yml +0 -64
  188. package/dist/registry/templates/replicate/implementation-checklist.md +0 -39
  189. package/dist/registry/templates/replicate/use-cases-template.md +0 -88
  190. package/dist/registry/templates/retrospective/RETROSPECTIVE-TEMPLATE.md +0 -55
  191. package/dist/registry/templates/specs/BUGSPEC-TEMPLATE.md +0 -37
  192. package/dist/registry/templates/specs/FEATURESPEC-TEMPLATE.md +0 -66
  193. package/dist/registry/templates/specs/TECHSPEC-TEMPLATE.md +0 -39
  194. package/dist/registry/workflows/azure/cost-optimization.md +0 -772
  195. package/dist/registry/workflows/bootstrap/create-architecture.md +0 -37
  196. package/dist/registry/workflows/bootstrap/detect-broken-windows.md +0 -300
  197. package/dist/registry/workflows/bootstrap/evaluate-code-quality.md +0 -35
  198. package/dist/registry/workflows/bootstrap/verify-test-coverage.md +0 -36
  199. package/dist/registry/workflows/brainstorming/blue-sky-brainstorming.md +0 -211
  200. package/dist/registry/workflows/brainstorming/codebase-brainstorming.md +0 -159
  201. package/dist/registry/workflows/business-development/create-business-plan.md +0 -737
  202. package/dist/registry/workflows/business-development/ideate-business-opportunity.md +0 -55
  203. package/dist/registry/workflows/business-development/price-product.md +0 -325
  204. package/dist/registry/workflows/compliance/detect-compliance-requirements.md +0 -80
  205. package/dist/registry/workflows/compliance/generate-audit-evidence.md +0 -80
  206. package/dist/registry/workflows/compliance/soc2-evidence-generator.md +0 -332
  207. package/dist/registry/workflows/customer-development/insight-analysis.md +0 -156
  208. package/dist/registry/workflows/customer-development/insight-triage.md +0 -933
  209. package/dist/registry/workflows/customer-development/interview-preparation.md +0 -452
  210. package/dist/registry/workflows/customer-development/linkedin-outreach.md +0 -599
  211. package/dist/registry/workflows/customer-development/strategic-brainstorming.md +0 -146
  212. package/dist/registry/workflows/customer-development/thank-customers.md +0 -203
  213. package/dist/registry/workflows/customer-development/user-survey-dispatch.md +0 -312
  214. package/dist/registry/workflows/customer-development/users-to-target.md +0 -427
  215. package/dist/registry/workflows/customer-development/weekly-newsletter.md +0 -366
  216. package/dist/registry/workflows/deploy/cloud-deployment.md +0 -310
  217. package/dist/registry/workflows/improve-fraim/contribute.md +0 -32
  218. package/dist/registry/workflows/improve-fraim/file-issue.md +0 -32
  219. package/dist/registry/workflows/learning/build-skillset.md +0 -212
  220. package/dist/registry/workflows/learning/synthesize-learnings.md +0 -369
  221. package/dist/registry/workflows/legal/contract-review-analysis.md +0 -382
  222. package/dist/registry/workflows/legal/nda.md +0 -69
  223. package/dist/registry/workflows/legal/patent-filing.md +0 -76
  224. package/dist/registry/workflows/legal/saas-contract-development.md +0 -204
  225. package/dist/registry/workflows/legal/trademark-filing.md +0 -77
  226. package/dist/registry/workflows/marketing/content-creation.md +0 -40
  227. package/dist/registry/workflows/marketing/convert-to-pdf.md +0 -265
  228. package/dist/registry/workflows/marketing/create-modern-website.md +0 -456
  229. package/dist/registry/workflows/marketing/domain-registration.md +0 -323
  230. package/dist/registry/workflows/marketing/evangelize.md +0 -426
  231. package/dist/registry/workflows/marketing/hbr-article.md +0 -73
  232. package/dist/registry/workflows/marketing/launch-checklist.md +0 -37
  233. package/dist/registry/workflows/marketing/marketing-strategy.md +0 -45
  234. package/dist/registry/workflows/marketing/storytelling.md +0 -65
  235. package/dist/registry/workflows/performance/analyze-performance.md +0 -65
  236. package/dist/registry/workflows/product-building/design.md +0 -263
  237. package/dist/registry/workflows/product-building/implement.md +0 -771
  238. package/dist/registry/workflows/product-building/iterate-on-pr-comments.md +0 -70
  239. package/dist/registry/workflows/product-building/prep-issue.md +0 -41
  240. package/dist/registry/workflows/product-building/prototype.md +0 -60
  241. package/dist/registry/workflows/product-building/resolve.md +0 -175
  242. package/dist/registry/workflows/product-building/retrospect.md +0 -86
  243. package/dist/registry/workflows/product-building/spec.md +0 -303
  244. package/dist/registry/workflows/product-building/test.md +0 -125
  245. package/dist/registry/workflows/productivity-report/productivity-report.md +0 -263
  246. package/dist/registry/workflows/quality-assurance/browser-validation.md +0 -221
  247. package/dist/registry/workflows/quality-assurance/iterative-improvement-cycle.md +0 -562
  248. package/dist/registry/workflows/replicate/replicate-discovery.md +0 -336
  249. package/dist/registry/workflows/replicate/replicate-to-issues.md +0 -319
  250. package/dist/registry/workflows/reviewer/review-implementation-vs-design-spec.md +0 -694
  251. package/dist/registry/workflows/reviewer/review-implementation-vs-feature-spec.md +0 -734
  252. package/dist/registry/workflows/startup-credits/aws-activate-application.md +0 -535
  253. package/dist/registry/workflows/startup-credits/google-cloud-application.md +0 -647
  254. package/dist/registry/workflows/startup-credits/microsoft-azure-application.md +0 -538
@@ -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);