fraim-framework 2.0.55 → 2.0.57
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.
- package/CHANGELOG.md +10 -0
- package/dist/src/cli/commands/init-project.js +10 -4
- package/dist/src/cli/setup/mcp-config-generator.js +23 -15
- package/dist/src/local-mcp-server/stdio-server.js +207 -0
- package/dist/src/utils/validate-workflows.js +101 -0
- package/dist/src/utils/workflow-parser.js +81 -0
- package/package.json +16 -11
- package/registry/scripts/pdf-styles.css +172 -0
- package/registry/scripts/prep-issue.sh +46 -4
- package/registry/scripts/profile-server.ts +131 -130
- package/registry/stubs/workflows/customer-development/user-survey-dispatch.md +1 -1
- package/registry/stubs/workflows/customer-development/users-to-target.md +1 -1
- package/registry/stubs/workflows/product-building/design.md +1 -1
- package/registry/stubs/workflows/product-building/implement.md +1 -1
- package/Claude.md +0 -1
- package/dist/registry/ai-manager-rules/design-phases/design-completeness-review.md +0 -73
- package/dist/registry/ai-manager-rules/design-phases/design-design.md +0 -145
- package/dist/registry/ai-manager-rules/implement-phases/implement-code.md +0 -283
- package/dist/registry/ai-manager-rules/implement-phases/implement-completeness-review.md +0 -120
- package/dist/registry/ai-manager-rules/implement-phases/implement-regression.md +0 -173
- package/dist/registry/ai-manager-rules/implement-phases/implement-repro.md +0 -104
- package/dist/registry/ai-manager-rules/implement-phases/implement-scoping.md +0 -100
- package/dist/registry/ai-manager-rules/implement-phases/implement-smoke.md +0 -237
- package/dist/registry/ai-manager-rules/implement-phases/implement-spike.md +0 -121
- package/dist/registry/ai-manager-rules/implement-phases/implement-validate.md +0 -375
- package/dist/registry/ai-manager-rules/retrospective.md +0 -116
- package/dist/registry/ai-manager-rules/shared-phases/address-pr-feedback.md +0 -188
- package/dist/registry/ai-manager-rules/shared-phases/submit-pr.md +0 -202
- package/dist/registry/ai-manager-rules/shared-phases/wait-for-pr-review.md +0 -170
- package/dist/registry/ai-manager-rules/spec-phases/spec-competitor-analysis.md +0 -105
- package/dist/registry/ai-manager-rules/spec-phases/spec-completeness-review.md +0 -66
- package/dist/registry/ai-manager-rules/spec-phases/spec-spec.md +0 -139
- package/dist/registry/providers/ado.json +0 -19
- package/dist/registry/providers/github.json +0 -19
- package/dist/registry/scripts/cleanup-branch.js +0 -287
- package/dist/registry/scripts/evaluate-code-quality.js +0 -66
- package/dist/registry/scripts/exec-with-timeout.js +0 -142
- package/dist/registry/scripts/generate-engagement-emails.js +0 -705
- package/dist/registry/scripts/newsletter-helpers.js +0 -671
- package/dist/registry/scripts/profile-server.js +0 -388
- package/dist/registry/scripts/run-thank-you-workflow.js +0 -92
- package/dist/registry/scripts/send-newsletter-simple.js +0 -85
- package/dist/registry/scripts/send-thank-you-emails.js +0 -54
- package/dist/registry/scripts/validate-openapi-limits.js +0 -311
- package/dist/registry/scripts/validate-test-coverage.js +0 -262
- package/dist/registry/scripts/verify-test-coverage.js +0 -66
- package/dist/scripts/build-stub-registry.js +0 -108
- package/dist/src/ai-manager/ai-manager.js +0 -482
- package/dist/src/ai-manager/phase-flow.js +0 -357
- package/dist/src/ai-manager/types.js +0 -5
- package/dist/src/fraim-mcp-server.js +0 -1885
- package/dist/tests/debug-tools.js +0 -80
- package/dist/tests/shared-server-utils.js +0 -57
- package/dist/tests/test-add-ide.js +0 -283
- package/dist/tests/test-ai-coach-edge-cases.js +0 -420
- package/dist/tests/test-ai-coach-mcp-integration.js +0 -450
- package/dist/tests/test-ai-coach-performance.js +0 -328
- package/dist/tests/test-ai-coach-phase-content.js +0 -264
- package/dist/tests/test-ai-coach-workflows.js +0 -514
- package/dist/tests/test-cli.js +0 -228
- package/dist/tests/test-client-scripts-validation.js +0 -167
- package/dist/tests/test-complete-setup-flow.js +0 -110
- package/dist/tests/test-config-system.js +0 -279
- package/dist/tests/test-debug-session.js +0 -134
- package/dist/tests/test-end-to-end-hybrid-validation.js +0 -328
- package/dist/tests/test-enhanced-session-init.js +0 -188
- package/dist/tests/test-first-run-journey.js +0 -368
- package/dist/tests/test-fraim-issues.js +0 -59
- package/dist/tests/test-genericization.js +0 -44
- package/dist/tests/test-hybrid-script-execution.js +0 -340
- package/dist/tests/test-ide-detector.js +0 -46
- package/dist/tests/test-improved-setup.js +0 -121
- package/dist/tests/test-mcp-config-generator.js +0 -99
- package/dist/tests/test-mcp-connection.js +0 -107
- package/dist/tests/test-mcp-issue-integration.js +0 -156
- package/dist/tests/test-mcp-lifecycle-methods.js +0 -240
- package/dist/tests/test-mcp-shared-server.js +0 -308
- package/dist/tests/test-mcp-template-processing.js +0 -160
- package/dist/tests/test-modular-issue-tracking.js +0 -165
- package/dist/tests/test-node-compatibility.js +0 -95
- package/dist/tests/test-npm-install.js +0 -68
- package/dist/tests/test-package-size.js +0 -108
- package/dist/tests/test-pr-review-workflow.js +0 -307
- package/dist/tests/test-prep-issue.js +0 -129
- package/dist/tests/test-productivity-integration.js +0 -157
- package/dist/tests/test-script-location-independence.js +0 -198
- package/dist/tests/test-script-sync.js +0 -557
- package/dist/tests/test-server-utils.js +0 -32
- package/dist/tests/test-session-rehydration.js +0 -148
- package/dist/tests/test-setup-integration.js +0 -98
- package/dist/tests/test-setup-scenarios.js +0 -322
- package/dist/tests/test-standalone.js +0 -143
- package/dist/tests/test-stub-registry.js +0 -136
- package/dist/tests/test-sync-stubs.js +0 -143
- package/dist/tests/test-sync-version-update.js +0 -93
- package/dist/tests/test-telemetry.js +0 -193
- package/dist/tests/test-token-validator.js +0 -30
- package/dist/tests/test-user-journey.js +0 -236
- package/dist/tests/test-users-to-target-workflow.js +0 -253
- package/dist/tests/test-utils.js +0 -109
- package/dist/tests/test-wizard.js +0 -71
- package/dist/tests/test-workflow-discovery.js +0 -242
- package/labels.json +0 -52
- package/registry/agent-guardrails.md +0 -63
- package/registry/fraim.md +0 -48
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase1-customer-profiling.md +0 -11
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase1-survey-scoping.md +0 -11
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase2-platform-discovery.md +0 -11
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase2-survey-build-linkedin.md +0 -11
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase3-prospect-qualification.md +0 -11
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase3-survey-build-reddit.md +0 -11
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase4-inventory-compilation.md +0 -11
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase4-survey-build-x.md +0 -11
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase5-survey-build-facebook.md +0 -11
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase6-survey-build-custom.md +0 -11
- package/registry/stubs/workflows/customer-development/ai-coach-phases/phase7-survey-dispatch.md +0 -11
- package/registry/stubs/workflows/customer-development/templates/customer-persona-template.md +0 -11
- package/registry/stubs/workflows/customer-development/templates/search-strategy-template.md +0 -11
- package/setup.js +0 -171
- package/tsconfig.json +0 -23
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Tests for dynamic workflow discovery in MCP server
|
|
4
|
-
* Ensures workflows from all categories can be found without hardcoded category lists
|
|
5
|
-
*/
|
|
6
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
-
};
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
const node_test_1 = require("node:test");
|
|
11
|
-
const node_assert_1 = __importDefault(require("node:assert"));
|
|
12
|
-
const shared_server_utils_js_1 = require("./shared-server-utils.js");
|
|
13
|
-
(0, node_test_1.describe)('Workflow Discovery', () => {
|
|
14
|
-
(0, node_test_1.before)(async () => {
|
|
15
|
-
// Wait for the test server to be ready
|
|
16
|
-
await (0, shared_server_utils_js_1.waitForServer)();
|
|
17
|
-
});
|
|
18
|
-
(0, node_test_1.describe)('Dynamic Category Discovery', () => {
|
|
19
|
-
(0, node_test_1.it)('should find workflows from product-building category', async () => {
|
|
20
|
-
const axios = require('axios');
|
|
21
|
-
const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
|
|
22
|
-
jsonrpc: '2.0',
|
|
23
|
-
id: 1,
|
|
24
|
-
method: 'tools/call',
|
|
25
|
-
params: {
|
|
26
|
-
name: 'get_fraim_workflow',
|
|
27
|
-
arguments: { workflow: 'spec' }
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
node_assert_1.default.strictEqual(response.status, 200);
|
|
31
|
-
node_assert_1.default.ok(response.data.result);
|
|
32
|
-
node_assert_1.default.ok(response.data.result.content);
|
|
33
|
-
node_assert_1.default.ok(Array.isArray(response.data.result.content));
|
|
34
|
-
const content = response.data.result.content[0];
|
|
35
|
-
node_assert_1.default.strictEqual(content.type, 'text');
|
|
36
|
-
node_assert_1.default.ok(content.text.includes('Workflow: spec'));
|
|
37
|
-
node_assert_1.default.ok(content.text.includes('workflows/product-building/spec.md'));
|
|
38
|
-
});
|
|
39
|
-
(0, node_test_1.it)('should find workflows from compliance category', async () => {
|
|
40
|
-
const axios = require('axios');
|
|
41
|
-
const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
|
|
42
|
-
jsonrpc: '2.0',
|
|
43
|
-
id: 2,
|
|
44
|
-
method: 'tools/call',
|
|
45
|
-
params: {
|
|
46
|
-
name: 'get_fraim_workflow',
|
|
47
|
-
arguments: { workflow: 'detect-compliance-requirements' }
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
node_assert_1.default.strictEqual(response.status, 200);
|
|
51
|
-
node_assert_1.default.ok(response.data.result);
|
|
52
|
-
node_assert_1.default.ok(response.data.result.content);
|
|
53
|
-
const content = response.data.result.content[0];
|
|
54
|
-
node_assert_1.default.strictEqual(content.type, 'text');
|
|
55
|
-
node_assert_1.default.ok(content.text.includes('Workflow: detect-compliance-requirements'));
|
|
56
|
-
node_assert_1.default.ok(content.text.includes('workflows/compliance/detect-compliance-requirements.md'));
|
|
57
|
-
node_assert_1.default.ok(content.text.includes('Detect Compliance Requirements'));
|
|
58
|
-
});
|
|
59
|
-
(0, node_test_1.it)('should find workflows from brainstorming category', async () => {
|
|
60
|
-
const axios = require('axios');
|
|
61
|
-
const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
|
|
62
|
-
jsonrpc: '2.0',
|
|
63
|
-
id: 3,
|
|
64
|
-
method: 'tools/call',
|
|
65
|
-
params: {
|
|
66
|
-
name: 'get_fraim_workflow',
|
|
67
|
-
arguments: { workflow: 'blue-sky-brainstorming' }
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
node_assert_1.default.strictEqual(response.status, 200);
|
|
71
|
-
node_assert_1.default.ok(response.data.result);
|
|
72
|
-
node_assert_1.default.ok(response.data.result.content);
|
|
73
|
-
const content = response.data.result.content[0];
|
|
74
|
-
node_assert_1.default.strictEqual(content.type, 'text');
|
|
75
|
-
node_assert_1.default.ok(content.text.includes('Workflow: blue-sky-brainstorming'));
|
|
76
|
-
node_assert_1.default.ok(content.text.includes('workflows/brainstorming/blue-sky-brainstorming.md'));
|
|
77
|
-
});
|
|
78
|
-
(0, node_test_1.it)('should find workflows from learning category', async () => {
|
|
79
|
-
const axios = require('axios');
|
|
80
|
-
const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
|
|
81
|
-
jsonrpc: '2.0',
|
|
82
|
-
id: 4,
|
|
83
|
-
method: 'tools/call',
|
|
84
|
-
params: {
|
|
85
|
-
name: 'get_fraim_workflow',
|
|
86
|
-
arguments: { workflow: 'synthesize-learnings' }
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
node_assert_1.default.strictEqual(response.status, 200);
|
|
90
|
-
node_assert_1.default.ok(response.data.result);
|
|
91
|
-
node_assert_1.default.ok(response.data.result.content);
|
|
92
|
-
const content = response.data.result.content[0];
|
|
93
|
-
node_assert_1.default.strictEqual(content.type, 'text');
|
|
94
|
-
node_assert_1.default.ok(content.text.includes('Workflow: synthesize-learnings'));
|
|
95
|
-
node_assert_1.default.ok(content.text.includes('workflows/learning/synthesize-learnings.md'));
|
|
96
|
-
});
|
|
97
|
-
(0, node_test_1.it)('should find workflows from replicate category', async () => {
|
|
98
|
-
const axios = require('axios');
|
|
99
|
-
const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
|
|
100
|
-
jsonrpc: '2.0',
|
|
101
|
-
id: 5,
|
|
102
|
-
method: 'tools/call',
|
|
103
|
-
params: {
|
|
104
|
-
name: 'get_fraim_workflow',
|
|
105
|
-
arguments: { workflow: 'replicate-discovery' }
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
node_assert_1.default.strictEqual(response.status, 200);
|
|
109
|
-
node_assert_1.default.ok(response.data.result);
|
|
110
|
-
node_assert_1.default.ok(response.data.result.content);
|
|
111
|
-
const content = response.data.result.content[0];
|
|
112
|
-
node_assert_1.default.strictEqual(content.type, 'text');
|
|
113
|
-
node_assert_1.default.ok(content.text.includes('Workflow: replicate-discovery'));
|
|
114
|
-
node_assert_1.default.ok(content.text.includes('workflows/replicate/replicate-discovery.md'));
|
|
115
|
-
});
|
|
116
|
-
(0, node_test_1.it)('should find workflows from marketing category', async () => {
|
|
117
|
-
const axios = require('axios');
|
|
118
|
-
const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
|
|
119
|
-
jsonrpc: '2.0',
|
|
120
|
-
id: 6,
|
|
121
|
-
method: 'tools/call',
|
|
122
|
-
params: {
|
|
123
|
-
name: 'get_fraim_workflow',
|
|
124
|
-
arguments: { workflow: 'create-modern-website' }
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
node_assert_1.default.strictEqual(response.status, 200);
|
|
128
|
-
node_assert_1.default.ok(response.data.result);
|
|
129
|
-
node_assert_1.default.ok(response.data.result.content);
|
|
130
|
-
const content = response.data.result.content[0];
|
|
131
|
-
node_assert_1.default.strictEqual(content.type, 'text');
|
|
132
|
-
node_assert_1.default.ok(content.text.includes('Workflow: create-modern-website'));
|
|
133
|
-
node_assert_1.default.ok(content.text.includes('workflows/marketing/create-modern-website.md'));
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
(0, node_test_1.describe)('Error Handling', () => {
|
|
137
|
-
(0, node_test_1.it)('should return helpful error for non-existent workflow', async () => {
|
|
138
|
-
const axios = require('axios');
|
|
139
|
-
const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
|
|
140
|
-
jsonrpc: '2.0',
|
|
141
|
-
id: 7,
|
|
142
|
-
method: 'tools/call',
|
|
143
|
-
params: {
|
|
144
|
-
name: 'get_fraim_workflow',
|
|
145
|
-
arguments: { workflow: 'non-existent-workflow' }
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
node_assert_1.default.strictEqual(response.status, 200);
|
|
149
|
-
node_assert_1.default.ok(response.data.result);
|
|
150
|
-
node_assert_1.default.ok(response.data.result.content);
|
|
151
|
-
const content = response.data.result.content[0];
|
|
152
|
-
node_assert_1.default.strictEqual(content.type, 'text');
|
|
153
|
-
node_assert_1.default.ok(content.text.includes('Workflow "non-existent-workflow" not found'));
|
|
154
|
-
node_assert_1.default.ok(content.text.includes('Available workflows:'));
|
|
155
|
-
});
|
|
156
|
-
(0, node_test_1.it)('should handle workflow names with .md extension', async () => {
|
|
157
|
-
const axios = require('axios');
|
|
158
|
-
const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
|
|
159
|
-
jsonrpc: '2.0',
|
|
160
|
-
id: 8,
|
|
161
|
-
method: 'tools/call',
|
|
162
|
-
params: {
|
|
163
|
-
name: 'get_fraim_workflow',
|
|
164
|
-
arguments: { workflow: 'spec.md' }
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
node_assert_1.default.strictEqual(response.status, 200);
|
|
168
|
-
node_assert_1.default.ok(response.data.result);
|
|
169
|
-
node_assert_1.default.ok(response.data.result.content);
|
|
170
|
-
const content = response.data.result.content[0];
|
|
171
|
-
node_assert_1.default.strictEqual(content.type, 'text');
|
|
172
|
-
node_assert_1.default.ok(content.text.includes('Workflow: spec'));
|
|
173
|
-
node_assert_1.default.ok(content.text.includes('workflows/product-building/spec.md'));
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
(0, node_test_1.describe)('Regression Prevention', () => {
|
|
177
|
-
(0, node_test_1.it)('should discover all workflow categories dynamically', async () => {
|
|
178
|
-
const axios = require('axios');
|
|
179
|
-
// Test that we can find workflows from multiple categories without hardcoding
|
|
180
|
-
const testCases = [
|
|
181
|
-
{ workflow: 'spec', expectedCategory: 'product-building' },
|
|
182
|
-
{ workflow: 'detect-compliance-requirements', expectedCategory: 'compliance' },
|
|
183
|
-
{ workflow: 'blue-sky-brainstorming', expectedCategory: 'brainstorming' },
|
|
184
|
-
{ workflow: 'synthesize-learnings', expectedCategory: 'learning' },
|
|
185
|
-
{ workflow: 'replicate-discovery', expectedCategory: 'replicate' },
|
|
186
|
-
{ workflow: 'create-modern-website', expectedCategory: 'marketing' }
|
|
187
|
-
];
|
|
188
|
-
for (const testCase of testCases) {
|
|
189
|
-
const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
|
|
190
|
-
jsonrpc: '2.0',
|
|
191
|
-
id: 100 + testCases.indexOf(testCase),
|
|
192
|
-
method: 'tools/call',
|
|
193
|
-
params: {
|
|
194
|
-
name: 'get_fraim_workflow',
|
|
195
|
-
arguments: { workflow: testCase.workflow }
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
node_assert_1.default.strictEqual(response.status, 200, `Failed to find workflow: ${testCase.workflow}`);
|
|
199
|
-
node_assert_1.default.ok(response.data.result, `No result for workflow: ${testCase.workflow}`);
|
|
200
|
-
node_assert_1.default.ok(response.data.result.content, `No content for workflow: ${testCase.workflow}`);
|
|
201
|
-
const content = response.data.result.content[0];
|
|
202
|
-
node_assert_1.default.strictEqual(content.type, 'text');
|
|
203
|
-
node_assert_1.default.ok(content.text.includes(`workflows/${testCase.expectedCategory}/${testCase.workflow}.md`), `Expected workflow ${testCase.workflow} to be found in category ${testCase.expectedCategory}, but got: ${content.text.substring(0, 200)}`);
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
(0, node_test_1.it)('should not fail when new categories are added', async () => {
|
|
207
|
-
// This test documents the expected behavior:
|
|
208
|
-
// When new workflow categories are added to the registry,
|
|
209
|
-
// they should be automatically discoverable without code changes
|
|
210
|
-
const axios = require('axios');
|
|
211
|
-
// Get list of all workflows to verify dynamic discovery is working
|
|
212
|
-
const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
|
|
213
|
-
jsonrpc: '2.0',
|
|
214
|
-
id: 200,
|
|
215
|
-
method: 'tools/call',
|
|
216
|
-
params: {
|
|
217
|
-
name: 'list_fraim_workflows'
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
node_assert_1.default.strictEqual(response.status, 200);
|
|
221
|
-
node_assert_1.default.ok(response.data.result);
|
|
222
|
-
node_assert_1.default.ok(response.data.result.content);
|
|
223
|
-
const content = response.data.result.content[0];
|
|
224
|
-
node_assert_1.default.strictEqual(content.type, 'text');
|
|
225
|
-
// Verify that multiple categories are listed
|
|
226
|
-
const expectedCategories = [
|
|
227
|
-
'bootstrap',
|
|
228
|
-
'brainstorming',
|
|
229
|
-
'business-development',
|
|
230
|
-
'compliance',
|
|
231
|
-
'customer-development',
|
|
232
|
-
'learning',
|
|
233
|
-
'marketing',
|
|
234
|
-
'product-building',
|
|
235
|
-
'replicate'
|
|
236
|
-
];
|
|
237
|
-
for (const category of expectedCategories) {
|
|
238
|
-
node_assert_1.default.ok(content.text.includes(category), `Expected category "${category}" to be listed in workflows, but got: ${content.text.substring(0, 500)}`);
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
|
-
});
|
|
242
|
-
});
|
package/labels.json
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"name": "phase:spec",
|
|
4
|
-
"color": "008672",
|
|
5
|
-
"description": "Specification creation phase"
|
|
6
|
-
},
|
|
7
|
-
{
|
|
8
|
-
"name": "phase:design",
|
|
9
|
-
"color": "0075ca",
|
|
10
|
-
"description": "Design and RFC creation phase"
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"name": "phase:impl",
|
|
14
|
-
"color": "7057ff",
|
|
15
|
-
"description": "Implementation and development phase"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"name": "phase:tests",
|
|
19
|
-
"color": "008672",
|
|
20
|
-
"description": "Testing and validation phase"
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"name": "status:wip",
|
|
24
|
-
"color": "fbca04",
|
|
25
|
-
"description": "Work in progress"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"name": "status:needs-review",
|
|
29
|
-
"color": "fbca04",
|
|
30
|
-
"description": "Ready for review"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"name": "status:complete",
|
|
34
|
-
"color": "0e8a16",
|
|
35
|
-
"description": "Work completed"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"name": "ai-agent:cursor",
|
|
39
|
-
"color": "c5def5",
|
|
40
|
-
"description": "Assigned to Cursor"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"name": "ai-agent:claude",
|
|
44
|
-
"color": "c5def5",
|
|
45
|
-
"description": "Assigned to Claude"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"name": "ai-agent:windsurf",
|
|
49
|
-
"color": "c5def5",
|
|
50
|
-
"description": "Assigned to Windsurf"
|
|
51
|
-
}
|
|
52
|
-
]
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# AI Agent Guardrails
|
|
2
|
-
|
|
3
|
-
This file references the centralized rules located in `rules/` to ensure consistency across all AI platforms.
|
|
4
|
-
|
|
5
|
-
## SUCCESS CRITERIA (THE "FRAIM 5")
|
|
6
|
-
**Source**: Retrieve via `get_fraim_file({ path: "rules/agent-success-criteria.md" })`
|
|
7
|
-
|
|
8
|
-
All agents are evaluated on:
|
|
9
|
-
1. **Integrity (100 pts)**: Honesty above all.
|
|
10
|
-
2. **Correctness (50 pts)**: Architecture & tests.
|
|
11
|
-
3. **Completeness (30 pts)**: Thoroughness.
|
|
12
|
-
4. **Independence (20 pts)**: Smart decisions.
|
|
13
|
-
5. **Speed (10 pts)**: Velocity.
|
|
14
|
-
|
|
15
|
-
## Referenced Rules
|
|
16
|
-
|
|
17
|
-
### 0. Integrity
|
|
18
|
-
**Source**: Retrieve via `get_fraim_file({ path: "rules/integrity-and-test-ethics.md" })`
|
|
19
|
-
|
|
20
|
-
THIS IS THE MOST CRITICAL RULE. Be ethical, truthful, honest above all.
|
|
21
|
-
|
|
22
|
-
### 1. Simplicity
|
|
23
|
-
**Source**: Retrieve via `get_fraim_file({ path: "rules/simplicity.md" })`
|
|
24
|
-
|
|
25
|
-
Keep solutions simple and focused, avoid over-engineering. Focus on the assigned issue only and don't make unrelated changes.
|
|
26
|
-
|
|
27
|
-
### 2. Communication
|
|
28
|
-
**Source**: Retrieve via `get_fraim_file({ path: "rules/communication.md" })`
|
|
29
|
-
|
|
30
|
-
Establish clear communication patterns and progress reporting standards for effective coordination between agents and stakeholders.
|
|
31
|
-
|
|
32
|
-
### 3. Architecture
|
|
33
|
-
**Source**: Read local architecture document (path from `.fraim/config.json` `customizations.architectureDoc`)
|
|
34
|
-
|
|
35
|
-
Maintain clean architectural boundaries by using BAML (LLM) for natural-language understanding and TypeScript for deterministic work.
|
|
36
|
-
|
|
37
|
-
### 4. Continuous Learning
|
|
38
|
-
**Source**: Retrieve via `get_fraim_file({ path: "rules/continuous-learning.md" })`
|
|
39
|
-
|
|
40
|
-
Prevent repeating past mistakes by systematically learning from retrospectives, RFCs, and historical issue patterns.
|
|
41
|
-
|
|
42
|
-
### 5. Agent Testing Guidelines
|
|
43
|
-
**Source**: Retrieve via `get_fraim_file({ path: "rules/agent-testing-guidelines.md" })`
|
|
44
|
-
|
|
45
|
-
Comprehensive testing and validation requirements with concrete evidence. Ensures all work is thoroughly validated before completion.
|
|
46
|
-
|
|
47
|
-
### 6. Local Development
|
|
48
|
-
**Source**: Retrieve via `get_fraim_file({ path: "rules/local-development.md" })`
|
|
49
|
-
|
|
50
|
-
Local development guidelines and workspace safety. Enables safe parallel development through strict workspace separation.
|
|
51
|
-
|
|
52
|
-
### 7. Software Development Lifecycle
|
|
53
|
-
**Source**: Retrieve via `get_fraim_file({ path: "rules/software-development-lifecycle.md" })`
|
|
54
|
-
|
|
55
|
-
### 9. Merge Requirements
|
|
56
|
-
**Source**: Retrieve via `get_fraim_file({ path: "rules/merge-requirements.md" })`
|
|
57
|
-
|
|
58
|
-
Enforces a strict `git rebase` workflow to ensure feature branches are up-to-date with `master` before merging, maintaining a clean and stable history.
|
|
59
|
-
|
|
60
|
-
### 10. Best practices while debuggin
|
|
61
|
-
**Source**: Retrieve via `get_fraim_file({ path: "rules/successful-debugging-patterns.md" })`
|
|
62
|
-
|
|
63
|
-
Patterns on debugging issues systematically and converting learnings into test cases
|
package/registry/fraim.md
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# FRAIM - Agent Instructions
|
|
2
|
-
|
|
3
|
-
## What is FRAIM?
|
|
4
|
-
|
|
5
|
-
FRAIM provides workflows, rules, templates, and scripts for AI agents. Use it to get structured guidance for development and customer development tasks.
|
|
6
|
-
|
|
7
|
-
## How to Use FRAIM
|
|
8
|
-
|
|
9
|
-
### 1. Initialize First
|
|
10
|
-
**Always call `@fraim_mcp init` at the start of your session.** This loads all rules and available workflows.
|
|
11
|
-
|
|
12
|
-
### 2. Get Workflows
|
|
13
|
-
Use `@fraim_mcp` with a natural language description:
|
|
14
|
-
- `@fraim_mcp write a spec for issue #631`
|
|
15
|
-
- `@fraim_mcp design a new feature`
|
|
16
|
-
- `@fraim_mcp implement a bug fix`
|
|
17
|
-
- `@fraim_mcp write tests`
|
|
18
|
-
|
|
19
|
-
FRAIM returns a complete package:
|
|
20
|
-
- Workflow file with step-by-step instructions
|
|
21
|
-
- Templates to fill out
|
|
22
|
-
- Scripts to run
|
|
23
|
-
- Rules you must follow
|
|
24
|
-
|
|
25
|
-
### 3. Follow the Package
|
|
26
|
-
1. Read the workflow file
|
|
27
|
-
2. Use the provided templates (don't create from scratch)
|
|
28
|
-
3. Run the provided scripts
|
|
29
|
-
4. Follow all rules (they are mandatory)
|
|
30
|
-
|
|
31
|
-
## Available Tools
|
|
32
|
-
|
|
33
|
-
- `@fraim_mcp init` - Initialize and get all rules
|
|
34
|
-
- `@fraim_mcp <workflow description>` - Get workflow package
|
|
35
|
-
- `@fraim_mcp get <path>` - Get specific file (e.g., `workflows/spec.md`)
|
|
36
|
-
- `@fraim_mcp list files` - Browse available files
|
|
37
|
-
- `@fraim_mcp search <keyword>` - Find content by keyword
|
|
38
|
-
|
|
39
|
-
## Key Rules (All Active)
|
|
40
|
-
|
|
41
|
-
- **Integrity**: Be ethical, truthful, honest
|
|
42
|
-
- **Simplicity**: Keep solutions simple, avoid over-engineering
|
|
43
|
-
- **Communication**: Provide clear progress updates
|
|
44
|
-
- **Testing**: Comprehensive testing requirements (see agent-testing-guidelines.md)
|
|
45
|
-
- **Code Quality**: Never use `as any`, follow debugging patterns
|
|
46
|
-
- **PR Workflow**: Complete PR lifecycle handling
|
|
47
|
-
|
|
48
|
-
**All rules are mandatory. Read them carefully when provided in workflow packages.**
|
package/registry/stubs/workflows/customer-development/ai-coach-phases/phase1-customer-profiling.md
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: phase1-customer-profiling
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("phase1-customer-profiling")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
package/registry/stubs/workflows/customer-development/ai-coach-phases/phase1-survey-scoping.md
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: phase1-survey-scoping
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("phase1-survey-scoping")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
package/registry/stubs/workflows/customer-development/ai-coach-phases/phase2-platform-discovery.md
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: phase2-platform-discovery
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("phase2-platform-discovery")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: phase2-survey-build-linkedin
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("phase2-survey-build-linkedin")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: phase3-prospect-qualification
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("phase3-prospect-qualification")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
package/registry/stubs/workflows/customer-development/ai-coach-phases/phase3-survey-build-reddit.md
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: phase3-survey-build-reddit
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("phase3-survey-build-reddit")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: phase4-inventory-compilation
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("phase4-inventory-compilation")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
package/registry/stubs/workflows/customer-development/ai-coach-phases/phase4-survey-build-x.md
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: phase4-survey-build-x
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("phase4-survey-build-x")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: phase5-survey-build-facebook
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("phase5-survey-build-facebook")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
package/registry/stubs/workflows/customer-development/ai-coach-phases/phase6-survey-build-custom.md
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: phase6-survey-build-custom
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("phase6-survey-build-custom")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
package/registry/stubs/workflows/customer-development/ai-coach-phases/phase7-survey-dispatch.md
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: phase7-survey-dispatch
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("phase7-survey-dispatch")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
package/registry/stubs/workflows/customer-development/templates/customer-persona-template.md
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: customer-persona-template
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("customer-persona-template")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# FRAIM Workflow: search-strategy-template
|
|
2
|
-
|
|
3
|
-
> [!IMPORTANT]
|
|
4
|
-
> This is a **FRAIM-managed workflow stub**.
|
|
5
|
-
> To load the full context (rules, templates, and execution steps), ask your AI agent to:
|
|
6
|
-
> `@fraim get_fraim_workflow("search-strategy-template")`
|
|
7
|
-
>
|
|
8
|
-
> DO NOT EXECUTE.
|
|
9
|
-
|
|
10
|
-
## Intent
|
|
11
|
-
No intent defined.
|