fraim-framework 2.0.56 → 2.0.58

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 (224) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/bin/fraim-mcp.js +14 -0
  3. package/bin/fraim.js +23 -0
  4. package/dist/src/cli/commands/init-project.js +10 -4
  5. package/dist/src/cli/commands/mcp.js +65 -0
  6. package/dist/src/cli/setup/mcp-config-generator.js +19 -16
  7. package/dist/src/fraim/issue-tracking/ado-provider.js +304 -0
  8. package/dist/src/fraim/issue-tracking/factory.js +63 -0
  9. package/dist/src/fraim/issue-tracking/github-provider.js +200 -0
  10. package/dist/src/fraim/issue-tracking/types.js +7 -0
  11. package/dist/src/fraim/issue-tracking-config.js +83 -0
  12. package/dist/src/local-mcp-server/stdio-server.js +207 -0
  13. package/dist/src/utils/workflow-parser.js +81 -0
  14. package/package.json +17 -12
  15. package/registry/scripts/pdf-styles.css +172 -0
  16. package/registry/scripts/prep-issue.sh +46 -4
  17. package/registry/scripts/profile-server.ts +131 -130
  18. package/registry/stubs/workflows/customer-development/user-survey-dispatch.md +1 -1
  19. package/registry/stubs/workflows/customer-development/users-to-target.md +1 -1
  20. package/registry/stubs/workflows/product-building/design.md +1 -1
  21. package/registry/stubs/workflows/product-building/implement.md +1 -1
  22. package/Claude.md +0 -1
  23. package/dist/registry/ai-manager-rules/customer-development-phases/phase1-customer-profiling.md +0 -101
  24. package/dist/registry/ai-manager-rules/customer-development-phases/phase2-platform-discovery.md +0 -235
  25. package/dist/registry/ai-manager-rules/customer-development-phases/phase3-prospect-qualification.md +0 -243
  26. package/dist/registry/ai-manager-rules/customer-development-phases/phase4-inventory-compilation.md +0 -206
  27. package/dist/registry/ai-manager-rules/design-phases/design-completeness-review.md +0 -73
  28. package/dist/registry/ai-manager-rules/design-phases/design-design.md +0 -145
  29. package/dist/registry/ai-manager-rules/implement-phases/implement-code.md +0 -283
  30. package/dist/registry/ai-manager-rules/implement-phases/implement-completeness-review.md +0 -120
  31. package/dist/registry/ai-manager-rules/implement-phases/implement-regression.md +0 -173
  32. package/dist/registry/ai-manager-rules/implement-phases/implement-repro.md +0 -104
  33. package/dist/registry/ai-manager-rules/implement-phases/implement-scoping.md +0 -100
  34. package/dist/registry/ai-manager-rules/implement-phases/implement-smoke.md +0 -237
  35. package/dist/registry/ai-manager-rules/implement-phases/implement-spike.md +0 -121
  36. package/dist/registry/ai-manager-rules/implement-phases/implement-validate.md +0 -375
  37. package/dist/registry/ai-manager-rules/retrospective.md +0 -116
  38. package/dist/registry/ai-manager-rules/shared-phases/address-pr-feedback.md +0 -188
  39. package/dist/registry/ai-manager-rules/shared-phases/submit-pr.md +0 -202
  40. package/dist/registry/ai-manager-rules/shared-phases/wait-for-pr-review.md +0 -170
  41. package/dist/registry/ai-manager-rules/spec-phases/spec-competitor-analysis.md +0 -105
  42. package/dist/registry/ai-manager-rules/spec-phases/spec-completeness-review.md +0 -66
  43. package/dist/registry/ai-manager-rules/spec-phases/spec-spec.md +0 -139
  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/providers/ado.json +0 -19
  52. package/dist/registry/providers/github.json +0 -19
  53. package/dist/registry/scripts/cleanup-branch.js +0 -287
  54. package/dist/registry/scripts/evaluate-code-quality.js +0 -66
  55. package/dist/registry/scripts/exec-with-timeout.js +0 -142
  56. package/dist/registry/scripts/generate-engagement-emails.js +0 -705
  57. package/dist/registry/scripts/newsletter-helpers.js +0 -671
  58. package/dist/registry/scripts/profile-server.js +0 -388
  59. package/dist/registry/scripts/run-thank-you-workflow.js +0 -92
  60. package/dist/registry/scripts/send-newsletter-simple.js +0 -85
  61. package/dist/registry/scripts/send-thank-you-emails.js +0 -54
  62. package/dist/registry/scripts/validate-openapi-limits.js +0 -311
  63. package/dist/registry/scripts/validate-test-coverage.js +0 -262
  64. package/dist/registry/scripts/verify-test-coverage.js +0 -66
  65. package/dist/registry/templates/bootstrap/ARCHITECTURE-TEMPLATE.md +0 -53
  66. package/dist/registry/templates/bootstrap/CODE-QUALITY-REPORT-TEMPLATE.md +0 -37
  67. package/dist/registry/templates/bootstrap/TEST-COVERAGE-REPORT-TEMPLATE.md +0 -35
  68. package/dist/registry/templates/business-development/IDEATION-REPORT-TEMPLATE.md +0 -29
  69. package/dist/registry/templates/business-development/PRICING-STRATEGY-TEMPLATE.md +0 -126
  70. package/dist/registry/templates/customer-development/customer-interview-template.md +0 -99
  71. package/dist/registry/templates/customer-development/customer-persona-template.md +0 -69
  72. package/dist/registry/templates/customer-development/follow-up-email-templates.md +0 -132
  73. package/dist/registry/templates/customer-development/insight-analysis-template.md +0 -74
  74. package/dist/registry/templates/customer-development/prospect-inventory-template.csv +0 -3
  75. package/dist/registry/templates/customer-development/search-strategy-template.md +0 -123
  76. package/dist/registry/templates/customer-development/strategic-recommendations-template.md +0 -53
  77. package/dist/registry/templates/customer-development/thank-you-email-template.html +0 -124
  78. package/dist/registry/templates/customer-development/thank-you-note-template.md +0 -16
  79. package/dist/registry/templates/customer-development/triage-log-template.md +0 -278
  80. package/dist/registry/templates/customer-development/weekly-newsletter-template.html +0 -204
  81. package/dist/registry/templates/evidence/Design-Evidence.md +0 -30
  82. package/dist/registry/templates/evidence/Implementation-BugEvidence.md +0 -94
  83. package/dist/registry/templates/evidence/Implementation-FeatureEvidence.md +0 -129
  84. package/dist/registry/templates/evidence/Spec-Evidence.md +0 -19
  85. package/dist/registry/templates/help/HelpNeeded.md +0 -14
  86. package/dist/registry/templates/legal/NDA-TEMPLATE.md +0 -170
  87. package/dist/registry/templates/legal/PATENT-TEMPLATE.md +0 -372
  88. package/dist/registry/templates/legal/TRADEMARK-TEMPLATE.md +0 -339
  89. package/dist/registry/templates/legal/contract-review-checklist.md +0 -193
  90. package/dist/registry/templates/legal/review-report-template.md +0 -198
  91. package/dist/registry/templates/legal/saas-terms-template.md +0 -174
  92. package/dist/registry/templates/legal/sow-template.md +0 -117
  93. package/dist/registry/templates/legal/template-variables.md +0 -131
  94. package/dist/registry/templates/marketing/DOMAIN-REGISTRATION-TEMPLATE.md +0 -194
  95. package/dist/registry/templates/marketing/HBR-ARTICLE-TEMPLATE.md +0 -66
  96. package/dist/registry/templates/marketing/STORYTELLING-TEMPLATE.md +0 -130
  97. package/dist/registry/templates/marketing/WEBSITE-TEMPLATE.md +0 -262
  98. package/dist/registry/templates/marketing/github-pages-workflow.yml +0 -64
  99. package/dist/registry/templates/replicate/implementation-checklist.md +0 -39
  100. package/dist/registry/templates/replicate/use-cases-template.md +0 -88
  101. package/dist/registry/templates/retrospective/RETROSPECTIVE-TEMPLATE.md +0 -55
  102. package/dist/registry/templates/specs/BUGSPEC-TEMPLATE.md +0 -37
  103. package/dist/registry/templates/specs/FEATURESPEC-TEMPLATE.md +0 -66
  104. package/dist/registry/templates/specs/TECHSPEC-TEMPLATE.md +0 -39
  105. package/dist/registry/workflows/bootstrap/create-architecture.md +0 -38
  106. package/dist/registry/workflows/bootstrap/detect-broken-windows.md +0 -300
  107. package/dist/registry/workflows/bootstrap/evaluate-code-quality.md +0 -35
  108. package/dist/registry/workflows/bootstrap/verify-test-coverage.md +0 -36
  109. package/dist/registry/workflows/brainstorming/blue-sky-brainstorming.md +0 -211
  110. package/dist/registry/workflows/brainstorming/codebase-brainstorming.md +0 -165
  111. package/dist/registry/workflows/business-development/create-business-plan.md +0 -737
  112. package/dist/registry/workflows/business-development/ideate-business-opportunity.md +0 -55
  113. package/dist/registry/workflows/business-development/price-product.md +0 -325
  114. package/dist/registry/workflows/compliance/detect-compliance-requirements.md +0 -78
  115. package/dist/registry/workflows/compliance/generate-audit-evidence.md +0 -75
  116. package/dist/registry/workflows/compliance/soc2-evidence-generator.md +0 -332
  117. package/dist/registry/workflows/customer-development/insight-analysis.md +0 -156
  118. package/dist/registry/workflows/customer-development/insight-triage.md +0 -938
  119. package/dist/registry/workflows/customer-development/interview-preparation.md +0 -452
  120. package/dist/registry/workflows/customer-development/linkedin-outreach.md +0 -593
  121. package/dist/registry/workflows/customer-development/strategic-brainstorming.md +0 -146
  122. package/dist/registry/workflows/customer-development/thank-customers.md +0 -203
  123. package/dist/registry/workflows/customer-development/user-survey-dispatch.md +0 -60
  124. package/dist/registry/workflows/customer-development/users-to-target.md +0 -112
  125. package/dist/registry/workflows/customer-development/weekly-newsletter.md +0 -366
  126. package/dist/registry/workflows/deploy/cloud-deployment.md +0 -310
  127. package/dist/registry/workflows/improve-fraim/contribute.md +0 -32
  128. package/dist/registry/workflows/improve-fraim/file-issue.md +0 -32
  129. package/dist/registry/workflows/learning/build-skillset.md +0 -212
  130. package/dist/registry/workflows/learning/synthesize-learnings.md +0 -284
  131. package/dist/registry/workflows/legal/contract-review-analysis.md +0 -382
  132. package/dist/registry/workflows/legal/nda.md +0 -69
  133. package/dist/registry/workflows/legal/patent-filing.md +0 -76
  134. package/dist/registry/workflows/legal/saas-contract-development.md +0 -213
  135. package/dist/registry/workflows/legal/trademark-filing.md +0 -77
  136. package/dist/registry/workflows/marketing/content-creation.md +0 -37
  137. package/dist/registry/workflows/marketing/convert-to-pdf.md +0 -235
  138. package/dist/registry/workflows/marketing/create-modern-website.md +0 -456
  139. package/dist/registry/workflows/marketing/domain-registration.md +0 -323
  140. package/dist/registry/workflows/marketing/hbr-article.md +0 -73
  141. package/dist/registry/workflows/marketing/launch-checklist.md +0 -37
  142. package/dist/registry/workflows/marketing/marketing-strategy.md +0 -45
  143. package/dist/registry/workflows/marketing/storytelling.md +0 -65
  144. package/dist/registry/workflows/performance/analyze-performance.md +0 -65
  145. package/dist/registry/workflows/product-building/design.md +0 -103
  146. package/dist/registry/workflows/product-building/implement.md +0 -74
  147. package/dist/registry/workflows/product-building/iterate-on-pr-comments.md +0 -70
  148. package/dist/registry/workflows/product-building/prep-issue.md +0 -41
  149. package/dist/registry/workflows/product-building/prototype.md +0 -65
  150. package/dist/registry/workflows/product-building/resolve.md +0 -168
  151. package/dist/registry/workflows/product-building/retrospect.md +0 -86
  152. package/dist/registry/workflows/product-building/spec.md +0 -181
  153. package/dist/registry/workflows/product-building/test.md +0 -125
  154. package/dist/registry/workflows/productivity-report/productivity-report.md +0 -263
  155. package/dist/registry/workflows/quality-assurance/browser-validation.md +0 -221
  156. package/dist/registry/workflows/quality-assurance/iterative-improvement-cycle.md +0 -562
  157. package/dist/registry/workflows/replicate/replicate-discovery.md +0 -336
  158. package/dist/registry/workflows/replicate/replicate-to-issues.md +0 -324
  159. package/dist/registry/workflows/reviewer/review-implementation-vs-design-spec.md +0 -638
  160. package/dist/registry/workflows/reviewer/review-implementation-vs-feature-spec.md +0 -675
  161. package/dist/registry/workflows/startup-credits/aws-activate-application.md +0 -535
  162. package/dist/registry/workflows/startup-credits/google-cloud-application.md +0 -647
  163. package/dist/registry/workflows/startup-credits/microsoft-azure-application.md +0 -538
  164. package/dist/scripts/build-stub-registry.js +0 -108
  165. package/dist/src/ai-manager/ai-manager.js +0 -480
  166. package/dist/src/ai-manager/phase-flow.js +0 -357
  167. package/dist/src/ai-manager/types.js +0 -5
  168. package/dist/src/fraim-mcp-server.js +0 -1885
  169. package/dist/tests/debug-tools.js +0 -80
  170. package/dist/tests/shared-server-utils.js +0 -57
  171. package/dist/tests/test-add-ide.js +0 -283
  172. package/dist/tests/test-ai-coach-edge-cases.js +0 -420
  173. package/dist/tests/test-ai-coach-mcp-integration.js +0 -450
  174. package/dist/tests/test-ai-coach-performance.js +0 -328
  175. package/dist/tests/test-ai-coach-phase-content.js +0 -264
  176. package/dist/tests/test-ai-coach-workflows.js +0 -514
  177. package/dist/tests/test-cli.js +0 -228
  178. package/dist/tests/test-client-scripts-validation.js +0 -167
  179. package/dist/tests/test-complete-setup-flow.js +0 -110
  180. package/dist/tests/test-config-system.js +0 -279
  181. package/dist/tests/test-debug-session.js +0 -134
  182. package/dist/tests/test-end-to-end-hybrid-validation.js +0 -328
  183. package/dist/tests/test-enhanced-session-init.js +0 -188
  184. package/dist/tests/test-first-run-journey.js +0 -368
  185. package/dist/tests/test-fraim-issues.js +0 -59
  186. package/dist/tests/test-genericization.js +0 -44
  187. package/dist/tests/test-hybrid-script-execution.js +0 -340
  188. package/dist/tests/test-ide-detector.js +0 -46
  189. package/dist/tests/test-improved-setup.js +0 -121
  190. package/dist/tests/test-mcp-config-generator.js +0 -99
  191. package/dist/tests/test-mcp-connection.js +0 -107
  192. package/dist/tests/test-mcp-issue-integration.js +0 -156
  193. package/dist/tests/test-mcp-lifecycle-methods.js +0 -240
  194. package/dist/tests/test-mcp-shared-server.js +0 -308
  195. package/dist/tests/test-mcp-template-processing.js +0 -160
  196. package/dist/tests/test-modular-issue-tracking.js +0 -165
  197. package/dist/tests/test-node-compatibility.js +0 -95
  198. package/dist/tests/test-npm-install.js +0 -68
  199. package/dist/tests/test-package-size.js +0 -108
  200. package/dist/tests/test-pr-review-workflow.js +0 -307
  201. package/dist/tests/test-prep-issue.js +0 -129
  202. package/dist/tests/test-productivity-integration.js +0 -157
  203. package/dist/tests/test-script-location-independence.js +0 -198
  204. package/dist/tests/test-script-sync.js +0 -557
  205. package/dist/tests/test-server-utils.js +0 -32
  206. package/dist/tests/test-session-rehydration.js +0 -148
  207. package/dist/tests/test-setup-integration.js +0 -98
  208. package/dist/tests/test-setup-scenarios.js +0 -322
  209. package/dist/tests/test-standalone.js +0 -143
  210. package/dist/tests/test-stub-registry.js +0 -136
  211. package/dist/tests/test-sync-stubs.js +0 -143
  212. package/dist/tests/test-sync-version-update.js +0 -93
  213. package/dist/tests/test-telemetry.js +0 -193
  214. package/dist/tests/test-token-validator.js +0 -30
  215. package/dist/tests/test-user-journey.js +0 -236
  216. package/dist/tests/test-users-to-target-workflow.js +0 -253
  217. package/dist/tests/test-utils.js +0 -109
  218. package/dist/tests/test-wizard.js +0 -71
  219. package/dist/tests/test-workflow-discovery.js +0 -242
  220. package/labels.json +0 -52
  221. package/registry/agent-guardrails.md +0 -63
  222. package/registry/fraim.md +0 -48
  223. package/setup.js +0 -171
  224. package/tsconfig.json +0 -23
@@ -1,538 +0,0 @@
1
- # Microsoft Azure for Startups Application Guide
2
-
3
- **Complete step-by-step guide with Playwright automation instructions for applying to Microsoft Azure startup credits.**
4
-
5
- ---
6
-
7
- ## ⚠️ IMPORTANT: Collect User Information First
8
-
9
- **Before starting automation, you MUST ask the user for the following information:**
10
-
11
- - **Company Name**
12
- - **Founder/Contact Name**
13
- - **Email Address**
14
- - **Phone Number** (format: digits only, no dashes)
15
- - **Company Website** (full URL)
16
- - **Founded Date** (month and year)
17
- - **Location:** City, State, Zip Code, Country
18
- - **EIN** (Employer Identification Number, if required)
19
- - **UBI** (State business ID, if required)
20
- - **Legal Entity Type** (e.g., "LLC", "Corporation", "Partnership")
21
- - **Funding Stage** (e.g., "Pre-seed", "Self-funded", "Bootstrapped")
22
- - **Azure Account Status** (Do they already have an Azure account? Yes/No)
23
- - **Investor Referral Code** (if applicable, for Investor Network path)
24
-
25
- **Store these values in variables and use them throughout the automation steps below.**
26
-
27
- ---
28
-
29
- ## Overview
30
-
31
- **Program:** Microsoft for Startups
32
- **Credits:** $5,000 USD (new customers) or up to $150,000 USD (Investor Network)
33
- **URL:** https://portal.startups.microsoft.com/
34
- **Processing Time:** Varies (typically 1-2 weeks)
35
-
36
- ---
37
-
38
- ## Prerequisites
39
-
40
- ### Required Information
41
- - **Company Name:** [ASK USER]
42
- - **Founder Name:** [ASK USER]
43
- - **Email:** [ASK USER]
44
- - **Phone:** [ASK USER] (format: digits only, no dashes)
45
- - **Website:** [ASK USER] (full URL)
46
- - **Founded:** [ASK USER] (month and year)
47
- - **Location:** [ASK USER - City, State, Zip, Country]
48
- - **EIN:** [ASK USER] (if required)
49
- - **UBI:** [ASK USER] (if required)
50
- - **Legal Entity:** [ASK USER] (e.g., LLC, Corporation)
51
-
52
- ### Required Accounts
53
- - **Microsoft Account:** For signing in
54
- - **Azure Subscription:** May already exist (check eligibility)
55
-
56
- ### Important Note
57
-
58
- **Existing Azure Customers:** If you already have an Azure account, you may NOT be eligible for the standard $5K free trial offer. Options:
59
- 1. Submit support ticket requesting credits for existing customers
60
- 2. Apply through Investor Network if you have a referral code
61
- 3. Contact Microsoft for Startups support directly
62
-
63
- ---
64
-
65
- ## Playwright Automation Steps
66
-
67
- ### Step 1: Navigate to Microsoft for Startups Portal
68
-
69
- ```javascript
70
- // Navigate to Microsoft for Startups portal
71
- await page.goto('https://portal.startups.microsoft.com/');
72
- await page.waitForTimeout(3000);
73
- ```
74
-
75
- **Expected Result:** Page loads showing Microsoft for Startups information.
76
-
77
- ---
78
-
79
- ### Step 2: Sign In with Microsoft Account
80
-
81
- ```javascript
82
- // Click sign in button (if present)
83
- const signInButton = page.getByRole('button', { name: /sign in|get started/i });
84
- if (await signInButton.isVisible()) {
85
- await signInButton.click();
86
- await page.waitForTimeout(3000);
87
- }
88
-
89
- // Wait for sign-in to complete
90
- await page.waitForURL(/portal.startups.microsoft.com|microsoft.com/, { timeout: 30000 });
91
- ```
92
-
93
- **Note:** User must sign in manually with Microsoft Account. Wait for navigation to application form.
94
-
95
- ---
96
-
97
- ### Step 3: Check Application Options
98
-
99
- ```javascript
100
- // Check if page shows application options
101
- const applyWithCode = page.getByRole('button', { name: /apply.*code|investor.*code/i });
102
- const signUpWithAzure = page.getByRole('button', { name: /sign up.*azure|free trial/i });
103
-
104
- // Determine which path to take
105
- if (await applyWithCode.isVisible()) {
106
- console.log('Investor Network path available (requires referral code)');
107
- }
108
-
109
- if (await signUpWithAzure.isVisible()) {
110
- console.log('Free trial path available (for new Azure customers only)');
111
- }
112
- ```
113
-
114
- ---
115
-
116
- ### Path A: New Azure Customer ($5K Free Trial)
117
-
118
- **Note:** Only available if user doesn't have an existing Azure account.
119
-
120
- ### Step 4A: Click "Sign up with Azure" (New Customers Only)
121
-
122
- ```javascript
123
- // Click "Sign up with Azure" button
124
- await page.getByRole('button', { name: /sign up.*azure|free trial|get.*5k/i }).click();
125
- await page.waitForTimeout(3000);
126
- ```
127
-
128
- **Expected Result:** Redirects to Azure signup/application form.
129
-
130
- ---
131
-
132
- ### Step 5A: Fill Application Form (New Customer Path)
133
-
134
- ```javascript
135
- // Use user-provided information - REPLACE WITH ACTUAL VALUES FROM USER
136
- const companyName = '[USER_COMPANY_NAME]'; // ASK USER
137
- const email = '[USER_EMAIL]'; // ASK USER
138
- const phone = '[USER_PHONE]'; // ASK USER (digits only)
139
- const website = '[USER_WEBSITE]'; // ASK USER
140
-
141
- // Fill company name
142
- await page.getByRole('textbox', { name: /company name|startup name/i }).fill(companyName);
143
- await page.waitForTimeout(500);
144
-
145
- // Fill email
146
- await page.getByRole('textbox', { name: /email/i }).fill(email);
147
- await page.waitForTimeout(500);
148
-
149
- // Fill phone
150
- await page.getByRole('textbox', { name: /phone/i }).fill(phone);
151
- await page.waitForTimeout(500);
152
-
153
- // Fill website
154
- await page.getByRole('textbox', { name: /website|url/i }).fill(website);
155
- await page.waitForTimeout(500);
156
- ```
157
-
158
- ---
159
-
160
- ### Step 6A: Select Funding Stage
161
-
162
- ```javascript
163
- // Use user-provided funding stage - REPLACE WITH ACTUAL VALUE FROM USER
164
- const fundingStage = '[USER_FUNDING_STAGE]'; // ASK USER (e.g., "Pre-seed", "Self-funded")
165
-
166
- // Select funding stage
167
- await page.getByRole('radio', { name: new RegExp(fundingStage, 'i') }).click();
168
- await page.waitForTimeout(500);
169
- ```
170
-
171
- ---
172
-
173
- ### Step 7A: Accept Terms and Submit
174
-
175
- ```javascript
176
- // Check terms checkbox
177
- const termsCheckbox = page.getByRole('checkbox', { name: /terms|agreement/i });
178
- if (await termsCheckbox.isVisible()) {
179
- await termsCheckbox.check();
180
- await page.waitForTimeout(500);
181
- }
182
-
183
- // Click submit
184
- await page.getByRole('button', { name: /submit|apply|get started/i }).click();
185
- await page.waitForTimeout(5000);
186
- ```
187
-
188
- ---
189
-
190
- ### Path B: Existing Azure Customer (Support Ticket)
191
-
192
- **If user already has an Azure account, use this path instead.**
193
-
194
- ### Step 4B: Navigate to Support Ticket Form
195
-
196
- ```javascript
197
- // Navigate to Azure support ticket form
198
- await page.goto('https://portal.startups.microsoft.com/support-form');
199
- await page.waitForTimeout(3000);
200
- ```
201
-
202
- ---
203
-
204
- ### Step 5B: Fill Support Ticket Form
205
-
206
- ```javascript
207
- // Use user-provided information - REPLACE WITH ACTUAL VALUES FROM USER
208
- const name = '[USER_FULL_NAME]'; // ASK USER
209
- const email = '[USER_EMAIL]'; // ASK USER
210
- const country = '[USER_COUNTRY]'; // ASK USER
211
-
212
- // Select category (usually "Other" or "Startup Credits")
213
- await page.getByRole('combobox', { name: /category/i }).click();
214
- await page.waitForTimeout(1000);
215
- await page.getByRole('option', { name: /other/i }).click();
216
- await page.waitForTimeout(1000);
217
-
218
- // Fill name
219
- await page.getByRole('textbox', { name: /name/i }).fill(name);
220
- await page.waitForTimeout(500);
221
-
222
- // Fill email
223
- await page.getByRole('textbox', { name: /email/i }).fill(email);
224
- await page.waitForTimeout(500);
225
-
226
- // Select country/region
227
- await page.getByRole('combobox', { name: /country|region/i }).click();
228
- await page.waitForTimeout(1000);
229
- await page.getByRole('option', { name: new RegExp(country, 'i') }).click();
230
- await page.waitForTimeout(1000);
231
- ```
232
-
233
- ---
234
-
235
- ### Step 6B: Fill Support Ticket Description
236
-
237
- ```javascript
238
- // Use user-provided information - REPLACE WITH ACTUAL VALUES FROM USER
239
- const companyName = '[USER_COMPANY_NAME]'; // ASK USER
240
- const website = '[USER_WEBSITE]'; // ASK USER
241
- const founded = '[USER_FOUNDED]'; // ASK USER
242
- const fundingStage = '[USER_FUNDING_STAGE]'; // ASK USER
243
- const ein = '[USER_EIN]'; // ASK USER (if available)
244
- const ubi = '[USER_UBI]'; // ASK USER (if available)
245
- const address = '[USER_ADDRESS]'; // ASK USER (if available)
246
- const productDescription = '[USER_PRODUCT_DESCRIPTION]'; // ASK USER
247
-
248
- // Fill description/request
249
- const description = `Request for Azure startup credits for existing Azure customer.
250
-
251
- Company: ${companyName}
252
- Website: ${website}
253
- Founded: ${founded}
254
- Funding Stage: ${fundingStage}
255
-
256
- ${productDescription ? `Product: ${productDescription}` : ''}
257
-
258
- ${ein ? `EIN: ${ein}` : ''}
259
- ${ubi ? `UBI (State): ${ubi}` : ''}
260
- ${address ? `Address: ${address}` : ''}
261
-
262
- We already have an Azure account and would like to request startup credits through the Microsoft for Startups program. We understand that the standard $5K free trial is for new customers only, but we would appreciate consideration for credits as an existing customer.
263
-
264
- Thank you for your consideration.`;
265
-
266
- await page.getByRole('textbox', { name: /description|message|request/i }).fill(description);
267
- await page.waitForTimeout(1000);
268
- ```
269
-
270
- ---
271
-
272
- ### Step 7B: Submit Support Ticket
273
-
274
- ```javascript
275
- // Click submit button
276
- await page.getByRole('button', { name: /submit|send|create.*ticket/i }).click();
277
- await page.waitForTimeout(5000);
278
-
279
- // Wait for confirmation
280
- await page.waitForSelector('text=/success|submitted|ticket.*created|ticket.*number/i', { timeout: 10000 });
281
-
282
- // Extract ticket number if displayed
283
- const ticketNumber = await page.locator('text=/[0-9]{10,}/').textContent();
284
- console.log(`Support ticket number: ${ticketNumber}`);
285
- ```
286
-
287
- **Expected Result:** Support ticket submitted, ticket number received.
288
-
289
- ---
290
-
291
- ### Path C: Investor Network (Up to $150K - Requires Referral Code)
292
-
293
- **Only if user has a referral code from Microsoft for Startups Investor Network.**
294
-
295
- ### Step 4C: Click "Apply with your code"
296
-
297
- ```javascript
298
- // Click "Apply with your code" button
299
- await page.getByRole('button', { name: /apply.*code|investor.*code/i }).click();
300
- await page.waitForTimeout(3000);
301
- ```
302
-
303
- ---
304
-
305
- ### Step 5C: Enter Referral Code
306
-
307
- ```javascript
308
- // Use user-provided referral code - REPLACE WITH ACTUAL VALUE FROM USER
309
- const referralCode = '[USER_REFERRAL_CODE]'; // ASK USER
310
-
311
- // Enter referral code
312
- await page.getByRole('textbox', { name: /code|referral|org.*id/i }).fill(referralCode);
313
- await page.waitForTimeout(1000);
314
-
315
- // Click continue/verify
316
- await page.getByRole('button', { name: /continue|verify|next/i }).click();
317
- await page.waitForTimeout(3000);
318
- ```
319
-
320
- ---
321
-
322
- ### Step 6C: Complete Application Form
323
-
324
- ```javascript
325
- // Fill all required fields (similar to Path A)
326
- // Use user-provided information from Step 5A
327
- // Company name, email, phone, website, funding stage, etc.
328
- ```
329
-
330
- ---
331
-
332
- ## Alternative: Direct Support Ticket Submission
333
-
334
- ### If Portal Navigation Fails
335
-
336
- ```javascript
337
- // Use user-provided information - REPLACE WITH ACTUAL VALUES FROM USER
338
- const description = '[USER_TICKET_DESCRIPTION]'; // Use description from Step 6B
339
-
340
- // Navigate directly to Azure support
341
- await page.goto('https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade');
342
- await page.waitForTimeout(3000);
343
-
344
- // Click "New support request"
345
- await page.getByRole('button', { name: /new.*support|create.*request/i }).click();
346
- await page.waitForTimeout(2000);
347
-
348
- // Select issue type: "Technical"
349
- await page.getByRole('radio', { name: /technical/i }).click();
350
- await page.waitForTimeout(1000);
351
-
352
- // Select subscription
353
- await page.getByRole('combobox', { name: /subscription/i }).click();
354
- await page.waitForTimeout(1000);
355
- // Select user's Azure subscription (ASK USER which subscription to use)
356
- await page.getByRole('option').first().click();
357
- await page.waitForTimeout(1000);
358
-
359
- // Select service: "Other"
360
- await page.getByRole('combobox', { name: /service/i }).click();
361
- await page.waitForTimeout(1000);
362
- await page.getByRole('option', { name: /other/i }).click();
363
- await page.waitForTimeout(1000);
364
-
365
- // Fill summary
366
- await page.getByRole('textbox', { name: /summary/i }).fill('Request for Microsoft for Startups Azure Credits');
367
- await page.waitForTimeout(500);
368
-
369
- // Fill description
370
- await page.getByRole('textbox', { name: /description/i }).fill(description);
371
- await page.waitForTimeout(1000);
372
-
373
- // Select severity: "C - Minimal impact"
374
- await page.getByRole('combobox', { name: /severity/i }).click();
375
- await page.waitForTimeout(1000);
376
- await page.getByRole('option', { name: /minimal|C/i }).click();
377
- await page.waitForTimeout(1000);
378
-
379
- // Click "Review + create"
380
- await page.getByRole('button', { name: /review.*create|create/i }).click();
381
- await page.waitForTimeout(3000);
382
-
383
- // Click "Create" to submit
384
- await page.getByRole('button', { name: /^create$/i }).click();
385
- await page.waitForTimeout(5000);
386
- ```
387
-
388
- ---
389
-
390
- ## Manual Steps (If Automation Fails)
391
-
392
- ### Common Issues and Solutions
393
-
394
- 1. **Existing Azure Account Detected:**
395
- - Use support ticket path (Path B) instead
396
- - Or contact Microsoft for Startups support directly
397
-
398
- 2. **No Referral Code:**
399
- - Cannot use Investor Network path
400
- - Must use support ticket path for existing customers
401
-
402
- 3. **Element Not Found:**
403
- - Wait longer for page to load
404
- - Check if element is in iframe
405
- - Use more generic selectors
406
-
407
- 4. **Support Ticket Form Not Available:**
408
- - Navigate directly to Azure portal support
409
- - Or email Microsoft for Startups support directly
410
-
411
- ---
412
-
413
- ## Verification
414
-
415
- ### Check Support Ticket Status
416
-
417
- ```javascript
418
- // Navigate to Azure portal support requests
419
- await page.goto('https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade');
420
- await page.waitForTimeout(3000);
421
-
422
- // Check for ticket status
423
- const tickets = await page.locator('[class*="ticket"], [class*="request"]').all();
424
- for (const ticket of tickets) {
425
- const text = await ticket.textContent();
426
- console.log(`Ticket: ${text}`);
427
- }
428
- ```
429
-
430
- ---
431
-
432
- ## Expected Outcomes
433
-
434
- ### For New Customers ($5K Path):
435
- - **Application Submitted:** Confirmation page or email
436
- - **Processing Time:** 1-2 weeks
437
- - **Approval Email:** Sent to registered email
438
- - **Credits Added:** Automatically added to Azure account
439
-
440
- ### For Existing Customers (Support Ticket):
441
- - **Ticket Submitted:** Ticket number received
442
- - **Response Time:** 72-96 hours for initial response
443
- - **Follow-up Required:** May need to provide additional information
444
- - **Credits:** TBD based on Microsoft's response
445
-
446
- ### For Investor Network ($150K Path):
447
- - **Application Submitted:** Confirmation page
448
- - **Processing Time:** Varies
449
- - **Approval Email:** Sent to registered email
450
- - **Credits Added:** Up to $150,000 USD
451
-
452
- ---
453
-
454
- ## Troubleshooting
455
-
456
- ### If Application Fails
457
-
458
- 1. **Check Browser Console:**
459
- ```javascript
460
- page.on('console', msg => console.log('Browser console:', msg.text()));
461
- ```
462
-
463
- 2. **Take Screenshot:**
464
- ```javascript
465
- await page.screenshot({ path: 'azure-application-error.png', fullPage: true });
466
- ```
467
-
468
- 3. **Check for Errors:**
469
- ```javascript
470
- const errors = await page.locator('[role="alert"], .error, [class*="error"]').all();
471
- for (const error of errors) {
472
- console.log('Error:', await error.textContent());
473
- }
474
- ```
475
-
476
- ---
477
-
478
- ## Next Steps After Submission
479
-
480
- ### For Support Ticket:
481
- 1. **Monitor Email:** Check user's email for ticket response
482
- 2. **Check Ticket Status:** Monitor in Azure portal
483
- 3. **Follow Up:** If no response after 96 hours, follow up on ticket
484
- 4. **Provide Additional Info:** If requested by Microsoft support
485
-
486
- ### For Direct Application:
487
- 1. **Monitor Email:** Check for approval notification
488
- 2. **Check Azure Portal:** Verify credits appear in billing dashboard
489
- 3. **Follow Up:** If no response after 2 weeks, contact Microsoft support
490
-
491
- ---
492
-
493
- ## Resources
494
-
495
- - **Microsoft for Startups Portal:** https://portal.startups.microsoft.com/
496
- - **Microsoft for Startups Main Page:** https://startups.microsoft.com/
497
- - **Azure Portal:** https://portal.azure.com/
498
- - **Azure Support:** https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade
499
-
500
- ---
501
-
502
- ## Support Ticket Template
503
-
504
- **Subject:** Request for Azure Startup Credits - Existing Customer
505
-
506
- **Message Template (ASK USER for values):**
507
- ```
508
- Hello Microsoft for Startups Team,
509
-
510
- I am writing to request Azure startup credits for [USER_COMPANY_NAME], an existing Azure customer.
511
-
512
- Company Details:
513
- - Company Name: [USER_COMPANY_NAME]
514
- - Website: [USER_WEBSITE]
515
- - Founded: [USER_FOUNDED]
516
- - Funding Stage: [USER_FUNDING_STAGE]
517
- - Legal Entity: [USER_LEGAL_ENTITY]
518
- [EIN: [USER_EIN] - if available]
519
- [UBI (State): [USER_UBI] - if available]
520
- [Address: [USER_ADDRESS] - if available]
521
-
522
- Product: [USER_PRODUCT_DESCRIPTION]
523
-
524
- We already have an Azure account and would like to request startup credits through the Microsoft for Startups program. We understand that the standard $5K free trial is for new customers only, but we would appreciate consideration for credits as an existing customer.
525
-
526
- Thank you for your time and consideration.
527
-
528
- Best regards,
529
- [USER_FULL_NAME]
530
- [USER_JOB_TITLE]
531
- [USER_COMPANY_NAME]
532
- ```
533
-
534
- ---
535
-
536
- **Last Updated:** November 2025
537
- **Status:** Ready for automation
538
- **Note:** Existing Azure customers should use support ticket path
@@ -1,108 +0,0 @@
1
- #!/usr/bin/env tsx
2
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.buildStubRegistry = buildStubRegistry;
8
- const fs_1 = __importDefault(require("fs"));
9
- const path_1 = __importDefault(require("path"));
10
- const stub_generator_1 = require("../src/utils/stub-generator");
11
- /**
12
- * Build script to generate stub-only registry for npm package
13
- *
14
- * This creates a minimal registry containing:
15
- * - Pre-generated workflow stubs (for IDE discoverability)
16
- * - Scripts (for local execution)
17
- *
18
- * Excludes:
19
- * - Complete workflows (served by MCP server)
20
- * - Templates (served by MCP server)
21
- * - Rules (served by MCP server)
22
- */
23
- const SOURCE_REGISTRY = path_1.default.join(__dirname, '..', 'registry');
24
- const STUB_REGISTRY = path_1.default.join(__dirname, '..', 'registry', 'stubs');
25
- async function buildStubRegistry() {
26
- console.log('🔨 Building stub-only registry for npm package...');
27
- // Clean existing stubs directory
28
- if (fs_1.default.existsSync(STUB_REGISTRY)) {
29
- fs_1.default.rmSync(STUB_REGISTRY, { recursive: true, force: true });
30
- }
31
- // Create stubs directory structure
32
- fs_1.default.mkdirSync(STUB_REGISTRY, { recursive: true });
33
- // Generate workflow stubs
34
- await generateWorkflowStubs();
35
- console.log('✅ Stub registry build complete!');
36
- }
37
- async function generateWorkflowStubs() {
38
- const workflowsSourceDir = path_1.default.join(SOURCE_REGISTRY, 'workflows');
39
- const workflowsStubDir = path_1.default.join(STUB_REGISTRY, 'workflows');
40
- if (!fs_1.default.existsSync(workflowsSourceDir)) {
41
- console.warn('⚠️ No workflows directory found in source registry');
42
- return;
43
- }
44
- console.log('📝 Generating workflow stubs...');
45
- // Get all workflow files recursively
46
- const workflowFiles = getAllWorkflowFiles(workflowsSourceDir);
47
- let stubCount = 0;
48
- for (const workflowFile of workflowFiles) {
49
- try {
50
- // Read complete workflow
51
- const content = fs_1.default.readFileSync(workflowFile.fullPath, 'utf8');
52
- // Parse intent and principles
53
- const { intent, principles } = (0, stub_generator_1.parseRegistryWorkflow)(content);
54
- // Generate stub
55
- const workflowName = path_1.default.basename(workflowFile.name, '.md');
56
- const stub = (0, stub_generator_1.generateWorkflowStub)(workflowName, workflowFile.relativePath, intent, principles);
57
- // Create target directory structure
58
- const targetDir = path_1.default.join(workflowsStubDir, path_1.default.dirname(workflowFile.relativePath));
59
- if (!fs_1.default.existsSync(targetDir)) {
60
- fs_1.default.mkdirSync(targetDir, { recursive: true });
61
- }
62
- // Write stub file
63
- const stubPath = path_1.default.join(workflowsStubDir, workflowFile.relativePath);
64
- fs_1.default.writeFileSync(stubPath, stub);
65
- stubCount++;
66
- console.log(` ✓ ${workflowFile.relativePath}`);
67
- }
68
- catch (error) {
69
- console.error(` ❌ Failed to generate stub for ${workflowFile.relativePath}:`, error);
70
- }
71
- }
72
- console.log(`📝 Generated ${stubCount} workflow stubs`);
73
- }
74
- function getAllWorkflowFiles(dir, baseDir = dir) {
75
- const files = [];
76
- if (!fs_1.default.existsSync(dir)) {
77
- return files;
78
- }
79
- const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
80
- for (const entry of entries) {
81
- const fullPath = path_1.default.join(dir, entry.name);
82
- if (entry.isDirectory()) {
83
- // Skip certain directories
84
- if (entry.name.includes('Issue ') || entry.name.includes('Master')) {
85
- continue;
86
- }
87
- // Recursively process subdirectories
88
- files.push(...getAllWorkflowFiles(fullPath, baseDir));
89
- }
90
- else if (entry.isFile() && entry.name.endsWith('.md')) {
91
- // Add markdown files
92
- const relativePath = path_1.default.relative(baseDir, fullPath);
93
- files.push({
94
- name: entry.name,
95
- fullPath,
96
- relativePath: relativePath.replace(/\\/g, '/') // Normalize path separators
97
- });
98
- }
99
- }
100
- return files;
101
- }
102
- // Run the build if this script is executed directly
103
- if (require.main === module) {
104
- buildStubRegistry().catch(error => {
105
- console.error('❌ Build failed:', error);
106
- process.exit(1);
107
- });
108
- }