@girardmedia/bootspring 1.2.0 → 2.0.3
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/README.md +107 -14
- package/bin/bootspring.js +166 -27
- package/cli/agent.js +189 -17
- package/cli/analyze.js +499 -0
- package/cli/audit.js +557 -0
- package/cli/auth.js +495 -38
- package/cli/billing.js +302 -0
- package/cli/build.js +695 -0
- package/cli/business.js +109 -26
- package/cli/checkpoint-utils.js +168 -0
- package/cli/checkpoint.js +639 -0
- package/cli/cloud-sync.js +447 -0
- package/cli/content.js +198 -0
- package/cli/context.js +1 -1
- package/cli/deploy.js +543 -0
- package/cli/fundraise.js +112 -50
- package/cli/github-cmd.js +435 -0
- package/cli/health.js +477 -0
- package/cli/init.js +84 -13
- package/cli/legal.js +107 -95
- package/cli/log.js +2 -2
- package/cli/loop.js +976 -73
- package/cli/manager.js +711 -0
- package/cli/metrics.js +480 -0
- package/cli/monitor.js +812 -0
- package/cli/onboard.js +521 -0
- package/cli/orchestrator.js +12 -24
- package/cli/prd.js +594 -0
- package/cli/preseed-start.js +1483 -0
- package/cli/preseed.js +2302 -0
- package/cli/project.js +436 -0
- package/cli/quality.js +233 -0
- package/cli/security.js +913 -0
- package/cli/seed.js +1441 -5
- package/cli/skill.js +273 -211
- package/cli/suggest.js +989 -0
- package/cli/switch.js +453 -0
- package/cli/visualize.js +527 -0
- package/cli/watch.js +769 -0
- package/cli/workspace.js +607 -0
- package/core/analyze-workflow.js +1134 -0
- package/core/api-client.js +535 -22
- package/core/audit-workflow.js +1350 -0
- package/core/build-orchestrator.js +480 -0
- package/core/build-state.js +577 -0
- package/core/checkpoint-engine.js +408 -0
- package/core/config.js +1109 -26
- package/core/context-loader.js +21 -1
- package/core/deploy-workflow.js +836 -0
- package/core/entitlements.js +93 -22
- package/core/github-sync.js +610 -0
- package/core/index.js +8 -1
- package/core/ingest.js +1111 -0
- package/core/metrics-engine.js +768 -0
- package/core/onboard-workflow.js +1007 -0
- package/core/preseed-workflow.js +934 -0
- package/core/preseed.js +1617 -0
- package/core/project-context.js +325 -0
- package/core/project-state.js +694 -0
- package/core/r2-sync.js +583 -0
- package/core/scaffold.js +525 -7
- package/core/session.js +258 -0
- package/core/task-extractor.js +758 -0
- package/core/telemetry.js +28 -6
- package/core/tier-enforcement.js +737 -0
- package/core/utils.js +38 -14
- package/generators/questionnaire.js +15 -12
- package/generators/sections/ai.js +7 -7
- package/generators/sections/content.js +300 -0
- package/generators/sections/index.js +3 -0
- package/generators/sections/plugins.js +7 -6
- package/generators/templates/build-planning.template.js +596 -0
- package/generators/templates/content.template.js +819 -0
- package/generators/templates/index.js +2 -1
- package/hooks/git-autopilot.js +1250 -0
- package/hooks/index.js +9 -0
- package/intelligence/agent-collab.js +2057 -0
- package/intelligence/auto-suggest.js +634 -0
- package/intelligence/content-gen.js +1589 -0
- package/intelligence/cross-project.js +1647 -0
- package/intelligence/index.js +184 -0
- package/intelligence/learning/insights.json +517 -7
- package/intelligence/learning/pattern-learner.js +1008 -14
- package/intelligence/memory/decision-tracker.js +1431 -31
- package/intelligence/memory/decisions.jsonl +0 -0
- package/intelligence/orchestrator.js +2896 -1
- package/intelligence/prd.js +92 -1
- package/intelligence/recommendation-weights.json +14 -2
- package/intelligence/recommendations.js +463 -9
- package/intelligence/workflow-composer.js +1451 -0
- package/marketplace/index.d.ts +324 -0
- package/marketplace/index.js +1921 -0
- package/mcp/contracts/mcp-contract.v1.json +342 -4
- package/mcp/registry.js +680 -3
- package/mcp/response-formatter.js +23 -0
- package/mcp/tools/assist-tool.js +78 -4
- package/mcp/tools/autopilot-tool.js +408 -0
- package/mcp/tools/content-tool.js +571 -0
- package/mcp/tools/dashboard-tool.js +251 -5
- package/mcp/tools/mvp-tool.js +344 -0
- package/mcp/tools/plugin-tool.js +23 -1
- package/mcp/tools/prd-tool.js +579 -0
- package/mcp/tools/seed-tool.js +447 -0
- package/mcp/tools/skill-tool.js +43 -14
- package/mcp/tools/suggest-tool.js +147 -0
- package/package.json +15 -6
- package/agents/README.md +0 -93
- package/agents/ai-integration-expert/context.md +0 -386
- package/agents/api-expert/context.md +0 -416
- package/agents/architecture-expert/context.md +0 -454
- package/agents/auth-expert/context.md +0 -399
- package/agents/backend-expert/context.md +0 -483
- package/agents/business-strategy-expert/context.md +0 -180
- package/agents/code-review-expert/context.md +0 -365
- package/agents/competitive-analysis-expert/context.md +0 -239
- package/agents/data-modeling-expert/context.md +0 -352
- package/agents/database-expert/context.md +0 -250
- package/agents/devops-expert/context.md +0 -446
- package/agents/email-expert/context.md +0 -379
- package/agents/financial-expert/context.md +0 -213
- package/agents/frontend-expert/context.md +0 -364
- package/agents/fundraising-expert/context.md +0 -257
- package/agents/growth-expert/context.md +0 -249
- package/agents/index.js +0 -140
- package/agents/investor-relations-expert/context.md +0 -266
- package/agents/legal-expert/context.md +0 -284
- package/agents/marketing-expert/context.md +0 -236
- package/agents/monitoring-expert/context.md +0 -362
- package/agents/operations-expert/context.md +0 -279
- package/agents/partnerships-expert/context.md +0 -286
- package/agents/payment-expert/context.md +0 -340
- package/agents/performance-expert/context.md +0 -377
- package/agents/private-equity-expert/context.md +0 -246
- package/agents/railway-expert/context.md +0 -284
- package/agents/research-expert/context.md +0 -245
- package/agents/sales-expert/context.md +0 -241
- package/agents/security-expert/context.md +0 -343
- package/agents/testing-expert/context.md +0 -414
- package/agents/ui-ux-expert/context.md +0 -448
- package/agents/vercel-expert/context.md +0 -426
- package/skills/index.js +0 -787
- package/skills/patterns/README.md +0 -163
- package/skills/patterns/ai/agents.md +0 -281
- package/skills/patterns/ai/claude.md +0 -138
- package/skills/patterns/ai/embeddings.md +0 -150
- package/skills/patterns/ai/rag.md +0 -266
- package/skills/patterns/ai/streaming.md +0 -170
- package/skills/patterns/ai/structured-output.md +0 -162
- package/skills/patterns/ai/tools.md +0 -154
- package/skills/patterns/analytics/tracking.md +0 -220
- package/skills/patterns/api/errors.md +0 -296
- package/skills/patterns/api/graphql.md +0 -440
- package/skills/patterns/api/middleware.md +0 -279
- package/skills/patterns/api/openapi.md +0 -285
- package/skills/patterns/api/rate-limiting.md +0 -231
- package/skills/patterns/api/route-handler.md +0 -217
- package/skills/patterns/api/server-action.md +0 -249
- package/skills/patterns/api/versioning.md +0 -443
- package/skills/patterns/api/webhooks.md +0 -247
- package/skills/patterns/auth/clerk.md +0 -132
- package/skills/patterns/auth/mfa.md +0 -313
- package/skills/patterns/auth/nextauth.md +0 -140
- package/skills/patterns/auth/oauth.md +0 -237
- package/skills/patterns/auth/rbac.md +0 -152
- package/skills/patterns/auth/session-management.md +0 -367
- package/skills/patterns/auth/session.md +0 -120
- package/skills/patterns/database/audit.md +0 -177
- package/skills/patterns/database/migrations.md +0 -177
- package/skills/patterns/database/pagination.md +0 -230
- package/skills/patterns/database/pooling.md +0 -357
- package/skills/patterns/database/prisma.md +0 -180
- package/skills/patterns/database/relations.md +0 -187
- package/skills/patterns/database/seeding.md +0 -246
- package/skills/patterns/database/soft-delete.md +0 -153
- package/skills/patterns/database/transactions.md +0 -162
- package/skills/patterns/deployment/ci-cd.md +0 -231
- package/skills/patterns/deployment/docker.md +0 -188
- package/skills/patterns/deployment/monitoring.md +0 -387
- package/skills/patterns/deployment/vercel.md +0 -160
- package/skills/patterns/email/resend.md +0 -143
- package/skills/patterns/email/templates.md +0 -245
- package/skills/patterns/email/transactional.md +0 -503
- package/skills/patterns/email/verification.md +0 -176
- package/skills/patterns/files/download.md +0 -243
- package/skills/patterns/files/upload.md +0 -239
- package/skills/patterns/i18n/nextintl.md +0 -188
- package/skills/patterns/logging/structured.md +0 -292
- package/skills/patterns/notifications/email-queue.md +0 -248
- package/skills/patterns/notifications/push.md +0 -279
- package/skills/patterns/payments/checkout.md +0 -303
- package/skills/patterns/payments/invoices.md +0 -287
- package/skills/patterns/payments/portal.md +0 -245
- package/skills/patterns/payments/stripe.md +0 -272
- package/skills/patterns/payments/subscriptions.md +0 -300
- package/skills/patterns/payments/usage.md +0 -279
- package/skills/patterns/performance/caching.md +0 -276
- package/skills/patterns/performance/code-splitting.md +0 -233
- package/skills/patterns/performance/edge.md +0 -254
- package/skills/patterns/performance/isr.md +0 -266
- package/skills/patterns/performance/lazy-loading.md +0 -281
- package/skills/patterns/realtime/sse.md +0 -327
- package/skills/patterns/realtime/websockets.md +0 -336
- package/skills/patterns/search/filtering.md +0 -329
- package/skills/patterns/search/fulltext.md +0 -260
- package/skills/patterns/security/audit-logging.md +0 -444
- package/skills/patterns/security/csrf.md +0 -234
- package/skills/patterns/security/headers.md +0 -252
- package/skills/patterns/security/sanitization.md +0 -258
- package/skills/patterns/security/secrets.md +0 -261
- package/skills/patterns/security/validation.md +0 -268
- package/skills/patterns/security/xss.md +0 -229
- package/skills/patterns/seo/metadata.md +0 -252
- package/skills/patterns/state/context.md +0 -349
- package/skills/patterns/state/react-query.md +0 -313
- package/skills/patterns/state/url-state.md +0 -482
- package/skills/patterns/state/zustand.md +0 -262
- package/skills/patterns/testing/api.md +0 -259
- package/skills/patterns/testing/component.md +0 -233
- package/skills/patterns/testing/coverage.md +0 -207
- package/skills/patterns/testing/fixtures.md +0 -225
- package/skills/patterns/testing/integration.md +0 -436
- package/skills/patterns/testing/mocking.md +0 -177
- package/skills/patterns/testing/playwright.md +0 -162
- package/skills/patterns/testing/snapshot.md +0 -175
- package/skills/patterns/testing/vitest.md +0 -307
- package/skills/patterns/ui/accordions.md +0 -395
- package/skills/patterns/ui/cards.md +0 -299
- package/skills/patterns/ui/dropdowns.md +0 -476
- package/skills/patterns/ui/empty-states.md +0 -320
- package/skills/patterns/ui/forms.md +0 -405
- package/skills/patterns/ui/inputs.md +0 -319
- package/skills/patterns/ui/layouts.md +0 -282
- package/skills/patterns/ui/loading.md +0 -291
- package/skills/patterns/ui/modals.md +0 -338
- package/skills/patterns/ui/navigation.md +0 -374
- package/skills/patterns/ui/tables.md +0 -407
- package/skills/patterns/ui/toasts.md +0 -300
- package/skills/patterns/ui/tooltips.md +0 -396
- package/skills/patterns/utils/dates.md +0 -435
- package/skills/patterns/utils/errors.md +0 -451
- package/skills/patterns/utils/formatting.md +0 -345
- package/skills/patterns/utils/validation.md +0 -434
- package/templates/bootspring.config.js +0 -83
- package/templates/business/business-model-canvas.md +0 -246
- package/templates/business/business-plan.md +0 -266
- package/templates/business/competitive-analysis.md +0 -312
- package/templates/fundraising/data-room-checklist.md +0 -300
- package/templates/fundraising/investor-research.md +0 -243
- package/templates/fundraising/pitch-deck-outline.md +0 -253
- package/templates/legal/gdpr-checklist.md +0 -339
- package/templates/legal/privacy-policy.md +0 -285
- package/templates/legal/terms-of-service.md +0 -222
- package/templates/mcp.json +0 -9
|
@@ -0,0 +1,634 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bootspring Auto-Suggest
|
|
3
|
+
*
|
|
4
|
+
* Proactive natural language suggestions for Claude Code users.
|
|
5
|
+
* Monitors context and suggests relevant Bootspring features.
|
|
6
|
+
*
|
|
7
|
+
* @package bootspring
|
|
8
|
+
* @module intelligence/auto-suggest
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const fs = require('fs');
|
|
12
|
+
const path = require('path');
|
|
13
|
+
const config = require('../core/config');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Suggestion patterns - triggers and their suggestions
|
|
17
|
+
*/
|
|
18
|
+
const SUGGESTION_PATTERNS = {
|
|
19
|
+
// Analysis & Understanding
|
|
20
|
+
codebaseUnderstanding: {
|
|
21
|
+
triggers: [
|
|
22
|
+
/understand\s+(the\s+)?codebase/i,
|
|
23
|
+
/how\s+does\s+(this|the)\s+(code|project)/i,
|
|
24
|
+
/explain\s+(the\s+)?architecture/i,
|
|
25
|
+
/what\s+does\s+this\s+(project|codebase)/i,
|
|
26
|
+
/overview\s+of\s+(the\s+)?(project|code)/i,
|
|
27
|
+
/new\s+to\s+(this\s+)?project/i,
|
|
28
|
+
/getting\s+started/i,
|
|
29
|
+
/onboard/i
|
|
30
|
+
],
|
|
31
|
+
suggestion: {
|
|
32
|
+
command: 'bootspring analyze',
|
|
33
|
+
description: 'Run deep codebase analysis to understand architecture, patterns, and dependencies',
|
|
34
|
+
priority: 'high',
|
|
35
|
+
category: 'analysis'
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
// Quality & Auditing
|
|
40
|
+
codeQuality: {
|
|
41
|
+
triggers: [
|
|
42
|
+
/code\s+quality/i,
|
|
43
|
+
/check\s+(for\s+)?(bugs|issues|problems)/i,
|
|
44
|
+
/security\s+(scan|audit|check)/i,
|
|
45
|
+
/vulnerabilities/i,
|
|
46
|
+
/best\s+practices/i,
|
|
47
|
+
/tech\s+debt/i,
|
|
48
|
+
/code\s+review/i,
|
|
49
|
+
/linting/i
|
|
50
|
+
],
|
|
51
|
+
suggestion: {
|
|
52
|
+
command: 'bootspring audit',
|
|
53
|
+
description: 'Run comprehensive quality, security, and best practices audit',
|
|
54
|
+
priority: 'high',
|
|
55
|
+
category: 'quality'
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
// Deployment
|
|
60
|
+
deployment: {
|
|
61
|
+
triggers: [
|
|
62
|
+
/deploy\s+(to|this)/i,
|
|
63
|
+
/push\s+to\s+production/i,
|
|
64
|
+
/vercel/i,
|
|
65
|
+
/railway/i,
|
|
66
|
+
/fly\.io/i,
|
|
67
|
+
/netlify/i,
|
|
68
|
+
/hosting/i,
|
|
69
|
+
/go\s+live/i,
|
|
70
|
+
/launch/i
|
|
71
|
+
],
|
|
72
|
+
suggestion: {
|
|
73
|
+
command: 'bootspring deploy',
|
|
74
|
+
description: 'Deploy to Vercel, Railway, Fly.io, Netlify, AWS, or Docker',
|
|
75
|
+
priority: 'high',
|
|
76
|
+
category: 'deployment'
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
// Task Management
|
|
81
|
+
todoManagement: {
|
|
82
|
+
triggers: [
|
|
83
|
+
/add\s+(a\s+)?todo/i,
|
|
84
|
+
/task\s+list/i,
|
|
85
|
+
/track\s+(this\s+)?task/i,
|
|
86
|
+
/remember\s+to/i,
|
|
87
|
+
/don't\s+forget/i,
|
|
88
|
+
/need\s+to\s+do/i,
|
|
89
|
+
/pending\s+tasks/i
|
|
90
|
+
],
|
|
91
|
+
suggestion: {
|
|
92
|
+
command: 'bootspring todo add "<task>"',
|
|
93
|
+
description: 'Track tasks with integrated todo management',
|
|
94
|
+
priority: 'medium',
|
|
95
|
+
category: 'workflow'
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
// PRD & Planning
|
|
100
|
+
productPlanning: {
|
|
101
|
+
triggers: [
|
|
102
|
+
/product\s+requirements/i,
|
|
103
|
+
/prd/i,
|
|
104
|
+
/feature\s+spec/i,
|
|
105
|
+
/plan\s+(this\s+)?feature/i,
|
|
106
|
+
/user\s+stories/i,
|
|
107
|
+
/acceptance\s+criteria/i,
|
|
108
|
+
/scope\s+(the\s+)?work/i
|
|
109
|
+
],
|
|
110
|
+
suggestion: {
|
|
111
|
+
command: 'bootspring prd create',
|
|
112
|
+
description: 'Create structured product requirements with user stories',
|
|
113
|
+
priority: 'medium',
|
|
114
|
+
category: 'planning'
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
// Autonomous Loop
|
|
119
|
+
autonomousWork: {
|
|
120
|
+
triggers: [
|
|
121
|
+
/work\s+on\s+this\s+automatically/i,
|
|
122
|
+
/automate\s+(this|the)\s+(task|work)/i,
|
|
123
|
+
/do\s+this\s+without\s+me/i,
|
|
124
|
+
/autonomous/i,
|
|
125
|
+
/hands[\s-]?free/i,
|
|
126
|
+
/loop\s+through\s+tasks/i,
|
|
127
|
+
/batch\s+process/i
|
|
128
|
+
],
|
|
129
|
+
suggestion: {
|
|
130
|
+
command: 'bootspring loop start',
|
|
131
|
+
description: 'Start autonomous task execution loop until all stories complete',
|
|
132
|
+
priority: 'high',
|
|
133
|
+
category: 'automation'
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
// Business & Legal
|
|
138
|
+
businessDocs: {
|
|
139
|
+
triggers: [
|
|
140
|
+
/business\s+plan/i,
|
|
141
|
+
/pitch\s+deck/i,
|
|
142
|
+
/investor/i,
|
|
143
|
+
/fundraising/i,
|
|
144
|
+
/competitor\s+analysis/i,
|
|
145
|
+
/market\s+research/i
|
|
146
|
+
],
|
|
147
|
+
suggestion: {
|
|
148
|
+
command: 'bootspring business plan',
|
|
149
|
+
description: 'Generate business plans, competitor analysis, and strategy docs',
|
|
150
|
+
priority: 'medium',
|
|
151
|
+
category: 'business'
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
legalDocs: {
|
|
156
|
+
triggers: [
|
|
157
|
+
/terms\s+(of\s+service|and\s+conditions)/i,
|
|
158
|
+
/privacy\s+policy/i,
|
|
159
|
+
/legal\s+(docs|documents)/i,
|
|
160
|
+
/gdpr/i,
|
|
161
|
+
/compliance/i,
|
|
162
|
+
/data\s+protection/i
|
|
163
|
+
],
|
|
164
|
+
suggestion: {
|
|
165
|
+
command: 'bootspring legal init',
|
|
166
|
+
description: 'Generate terms of service, privacy policy, and GDPR compliance docs',
|
|
167
|
+
priority: 'medium',
|
|
168
|
+
category: 'legal'
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
|
|
172
|
+
// Content Generation
|
|
173
|
+
contentGeneration: {
|
|
174
|
+
triggers: [
|
|
175
|
+
/write\s+(a\s+)?blog\s+post/i,
|
|
176
|
+
/release\s+notes/i,
|
|
177
|
+
/changelog/i,
|
|
178
|
+
/documentation/i,
|
|
179
|
+
/readme/i,
|
|
180
|
+
/announcement/i
|
|
181
|
+
],
|
|
182
|
+
suggestion: {
|
|
183
|
+
command: 'bootspring content new <type>',
|
|
184
|
+
description: 'Generate blogs, docs, release notes, and more',
|
|
185
|
+
priority: 'medium',
|
|
186
|
+
category: 'content'
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
// Project Health
|
|
191
|
+
projectHealth: {
|
|
192
|
+
triggers: [
|
|
193
|
+
/project\s+(health|status)/i,
|
|
194
|
+
/how\s+is\s+(the\s+)?project\s+doing/i,
|
|
195
|
+
/overall\s+status/i,
|
|
196
|
+
/check\s+(the\s+)?health/i,
|
|
197
|
+
/project\s+overview/i
|
|
198
|
+
],
|
|
199
|
+
suggestion: {
|
|
200
|
+
command: 'bootspring health',
|
|
201
|
+
description: 'Get quick project health score and recommendations',
|
|
202
|
+
priority: 'low',
|
|
203
|
+
category: 'monitoring'
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
|
|
207
|
+
// Recommendations
|
|
208
|
+
whatNext: {
|
|
209
|
+
triggers: [
|
|
210
|
+
/what\s+should\s+i\s+do\s+next/i,
|
|
211
|
+
/what's\s+next/i,
|
|
212
|
+
/suggest\s+(something|next\s+steps)/i,
|
|
213
|
+
/recommendations/i,
|
|
214
|
+
/what\s+to\s+work\s+on/i,
|
|
215
|
+
/prioritize/i
|
|
216
|
+
],
|
|
217
|
+
suggestion: {
|
|
218
|
+
command: 'bootspring suggest',
|
|
219
|
+
description: 'Get AI-powered recommendations based on your project context',
|
|
220
|
+
priority: 'high',
|
|
221
|
+
category: 'intelligence'
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
|
|
225
|
+
// Testing
|
|
226
|
+
testing: {
|
|
227
|
+
triggers: [
|
|
228
|
+
/write\s+tests/i,
|
|
229
|
+
/add\s+tests/i,
|
|
230
|
+
/test\s+coverage/i,
|
|
231
|
+
/unit\s+tests/i,
|
|
232
|
+
/integration\s+tests/i,
|
|
233
|
+
/e2e\s+tests/i
|
|
234
|
+
],
|
|
235
|
+
suggestion: {
|
|
236
|
+
command: 'bootspring quality pre-commit',
|
|
237
|
+
description: 'Run quality gates including test checks',
|
|
238
|
+
priority: 'medium',
|
|
239
|
+
category: 'quality'
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
|
|
243
|
+
// Context Management
|
|
244
|
+
contextRegenerate: {
|
|
245
|
+
triggers: [
|
|
246
|
+
/update\s+(the\s+)?context/i,
|
|
247
|
+
/regenerate\s+claude\.md/i,
|
|
248
|
+
/refresh\s+(project\s+)?context/i,
|
|
249
|
+
/context\s+is\s+(out\s+of\s+date|outdated|stale)/i
|
|
250
|
+
],
|
|
251
|
+
suggestion: {
|
|
252
|
+
command: 'bootspring generate',
|
|
253
|
+
description: 'Regenerate CLAUDE.md with fresh project context',
|
|
254
|
+
priority: 'low',
|
|
255
|
+
category: 'maintenance'
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
|
|
259
|
+
// Monitoring
|
|
260
|
+
monitoring: {
|
|
261
|
+
triggers: [
|
|
262
|
+
/set\s+up\s+monitoring/i,
|
|
263
|
+
/alerting/i,
|
|
264
|
+
/sentry/i,
|
|
265
|
+
/datadog/i,
|
|
266
|
+
/error\s+tracking/i,
|
|
267
|
+
/production\s+monitoring/i
|
|
268
|
+
],
|
|
269
|
+
suggestion: {
|
|
270
|
+
command: 'bootspring monitor init',
|
|
271
|
+
description: 'Set up production monitoring with Sentry, Datadog, or PagerDuty',
|
|
272
|
+
priority: 'medium',
|
|
273
|
+
category: 'monitoring'
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
|
|
277
|
+
// Agents
|
|
278
|
+
specializedHelp: {
|
|
279
|
+
triggers: [
|
|
280
|
+
/security\s+review/i,
|
|
281
|
+
/performance\s+optimization/i,
|
|
282
|
+
/database\s+design/i,
|
|
283
|
+
/api\s+design/i,
|
|
284
|
+
/accessibility/i,
|
|
285
|
+
/need\s+(an\s+)?expert/i
|
|
286
|
+
],
|
|
287
|
+
suggestion: {
|
|
288
|
+
command: 'bootspring agent list',
|
|
289
|
+
description: 'Get specialized help from security, performance, or design agents',
|
|
290
|
+
priority: 'medium',
|
|
291
|
+
category: 'intelligence'
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
|
|
295
|
+
// Skills
|
|
296
|
+
codePatterns: {
|
|
297
|
+
triggers: [
|
|
298
|
+
/how\s+to\s+implement/i,
|
|
299
|
+
/code\s+pattern/i,
|
|
300
|
+
/example\s+code/i,
|
|
301
|
+
/snippet/i,
|
|
302
|
+
/boilerplate/i,
|
|
303
|
+
/template\s+for/i
|
|
304
|
+
],
|
|
305
|
+
suggestion: {
|
|
306
|
+
command: 'bootspring skill search "<query>"',
|
|
307
|
+
description: 'Find code patterns and implementation examples',
|
|
308
|
+
priority: 'low',
|
|
309
|
+
category: 'skills'
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
|
|
313
|
+
// Preseed
|
|
314
|
+
projectSetup: {
|
|
315
|
+
triggers: [
|
|
316
|
+
/new\s+project/i,
|
|
317
|
+
/start\s+a\s+project/i,
|
|
318
|
+
/project\s+setup/i,
|
|
319
|
+
/initialize\s+(the\s+)?project/i,
|
|
320
|
+
/scaffold/i,
|
|
321
|
+
/bootstrap/i
|
|
322
|
+
],
|
|
323
|
+
suggestion: {
|
|
324
|
+
command: 'bootspring preseed init',
|
|
325
|
+
description: 'Generate foundational project documents from minimal input',
|
|
326
|
+
priority: 'high',
|
|
327
|
+
category: 'setup'
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Auto-suggest configuration
|
|
334
|
+
*/
|
|
335
|
+
const CONFIG_KEY = 'autoSuggest';
|
|
336
|
+
const DEFAULT_CONFIG = {
|
|
337
|
+
enabled: true,
|
|
338
|
+
minConfidence: 0.6,
|
|
339
|
+
maxSuggestionsPerMessage: 2,
|
|
340
|
+
cooldownMs: 30000, // Don't suggest same command within 30s
|
|
341
|
+
categories: {
|
|
342
|
+
analysis: true,
|
|
343
|
+
quality: true,
|
|
344
|
+
deployment: true,
|
|
345
|
+
workflow: true,
|
|
346
|
+
planning: true,
|
|
347
|
+
automation: true,
|
|
348
|
+
business: true,
|
|
349
|
+
legal: true,
|
|
350
|
+
content: true,
|
|
351
|
+
monitoring: true,
|
|
352
|
+
intelligence: true,
|
|
353
|
+
skills: true,
|
|
354
|
+
setup: true,
|
|
355
|
+
maintenance: true
|
|
356
|
+
},
|
|
357
|
+
suppressedCommands: [] // Commands user doesn't want suggested
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* AutoSuggest class
|
|
362
|
+
*/
|
|
363
|
+
class AutoSuggest {
|
|
364
|
+
constructor(projectRoot) {
|
|
365
|
+
this.projectRoot = projectRoot;
|
|
366
|
+
this.configPath = path.join(projectRoot, '.bootspring', 'auto-suggest.json');
|
|
367
|
+
this.config = this.loadConfig();
|
|
368
|
+
this.recentSuggestions = new Map(); // command -> timestamp
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
loadConfig() {
|
|
372
|
+
try {
|
|
373
|
+
if (fs.existsSync(this.configPath)) {
|
|
374
|
+
const saved = JSON.parse(fs.readFileSync(this.configPath, 'utf-8'));
|
|
375
|
+
return { ...DEFAULT_CONFIG, ...saved };
|
|
376
|
+
}
|
|
377
|
+
} catch {
|
|
378
|
+
// Use defaults
|
|
379
|
+
}
|
|
380
|
+
return { ...DEFAULT_CONFIG };
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
saveConfig() {
|
|
384
|
+
const dir = path.dirname(this.configPath);
|
|
385
|
+
if (!fs.existsSync(dir)) {
|
|
386
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
387
|
+
}
|
|
388
|
+
fs.writeFileSync(this.configPath, JSON.stringify(this.config, null, 2));
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Enable or disable auto-suggest
|
|
393
|
+
*/
|
|
394
|
+
setEnabled(enabled) {
|
|
395
|
+
this.config.enabled = enabled;
|
|
396
|
+
this.saveConfig();
|
|
397
|
+
return this.config.enabled;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* Toggle a category
|
|
402
|
+
*/
|
|
403
|
+
setCategory(category, enabled) {
|
|
404
|
+
if (this.config.categories.hasOwnProperty(category)) {
|
|
405
|
+
this.config.categories[category] = enabled;
|
|
406
|
+
this.saveConfig();
|
|
407
|
+
return true;
|
|
408
|
+
}
|
|
409
|
+
return false;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Suppress a command from suggestions
|
|
414
|
+
*/
|
|
415
|
+
suppressCommand(command) {
|
|
416
|
+
if (!this.config.suppressedCommands.includes(command)) {
|
|
417
|
+
this.config.suppressedCommands.push(command);
|
|
418
|
+
this.saveConfig();
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* Unsuppress a command
|
|
424
|
+
*/
|
|
425
|
+
unsuppressCommand(command) {
|
|
426
|
+
this.config.suppressedCommands = this.config.suppressedCommands.filter(c => c !== command);
|
|
427
|
+
this.saveConfig();
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* Analyze text and return relevant suggestions
|
|
432
|
+
*/
|
|
433
|
+
analyze(text) {
|
|
434
|
+
if (!this.config.enabled) {
|
|
435
|
+
return [];
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
const suggestions = [];
|
|
439
|
+
const now = Date.now();
|
|
440
|
+
|
|
441
|
+
for (const [patternName, pattern] of Object.entries(SUGGESTION_PATTERNS)) {
|
|
442
|
+
// Check if category is enabled
|
|
443
|
+
if (!this.config.categories[pattern.suggestion.category]) {
|
|
444
|
+
continue;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// Check if command is suppressed
|
|
448
|
+
const baseCommand = pattern.suggestion.command.split(' ')[0] + ' ' + pattern.suggestion.command.split(' ')[1];
|
|
449
|
+
if (this.config.suppressedCommands.some(c => pattern.suggestion.command.startsWith(c))) {
|
|
450
|
+
continue;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// Check cooldown
|
|
454
|
+
const lastSuggested = this.recentSuggestions.get(baseCommand);
|
|
455
|
+
if (lastSuggested && (now - lastSuggested) < this.config.cooldownMs) {
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// Check triggers
|
|
460
|
+
let matchCount = 0;
|
|
461
|
+
const matchedTriggers = [];
|
|
462
|
+
|
|
463
|
+
for (const trigger of pattern.triggers) {
|
|
464
|
+
if (trigger.test(text)) {
|
|
465
|
+
matchCount++;
|
|
466
|
+
matchedTriggers.push(trigger.source);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
if (matchCount > 0) {
|
|
471
|
+
// Calculate confidence based on matches
|
|
472
|
+
const confidence = Math.min(1, matchCount / 2);
|
|
473
|
+
|
|
474
|
+
if (confidence >= this.config.minConfidence) {
|
|
475
|
+
suggestions.push({
|
|
476
|
+
...pattern.suggestion,
|
|
477
|
+
patternName,
|
|
478
|
+
confidence,
|
|
479
|
+
matchedTriggers
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
// Record suggestion
|
|
483
|
+
this.recentSuggestions.set(baseCommand, now);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
// Sort by priority and confidence
|
|
489
|
+
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
490
|
+
suggestions.sort((a, b) => {
|
|
491
|
+
const priorityDiff = priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
492
|
+
if (priorityDiff !== 0) return priorityDiff;
|
|
493
|
+
return b.confidence - a.confidence;
|
|
494
|
+
});
|
|
495
|
+
|
|
496
|
+
// Limit suggestions
|
|
497
|
+
return suggestions.slice(0, this.config.maxSuggestionsPerMessage);
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* Format suggestions for display
|
|
502
|
+
*/
|
|
503
|
+
formatSuggestions(suggestions) {
|
|
504
|
+
if (suggestions.length === 0) return null;
|
|
505
|
+
|
|
506
|
+
const lines = ['', '\x1b[36m\x1b[1m💡 Bootspring Suggestions\x1b[0m'];
|
|
507
|
+
|
|
508
|
+
for (const suggestion of suggestions) {
|
|
509
|
+
lines.push(` \x1b[32m→\x1b[0m \x1b[1m${suggestion.command}\x1b[0m`);
|
|
510
|
+
lines.push(` \x1b[2m${suggestion.description}\x1b[0m`);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
lines.push('');
|
|
514
|
+
lines.push('\x1b[2mDisable with: bootspring suggest --disable-auto\x1b[0m');
|
|
515
|
+
|
|
516
|
+
return lines.join('\n');
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* Generate skill prompt for Claude Code
|
|
521
|
+
*/
|
|
522
|
+
generateSkillPrompt() {
|
|
523
|
+
return `# Bootspring Auto-Suggest
|
|
524
|
+
|
|
525
|
+
You have access to Bootspring, a development scaffolding tool. When you detect the user is working on something that Bootspring can help with, proactively suggest relevant commands.
|
|
526
|
+
|
|
527
|
+
## Available Suggestions
|
|
528
|
+
|
|
529
|
+
${Object.entries(SUGGESTION_PATTERNS).map(([name, pattern]) => `
|
|
530
|
+
### ${name}
|
|
531
|
+
**Command:** \`${pattern.suggestion.command}\`
|
|
532
|
+
**Description:** ${pattern.suggestion.description}
|
|
533
|
+
**Triggers:** ${pattern.triggers.slice(0, 3).map(t => t.source).join(', ')}
|
|
534
|
+
`).join('\n')}
|
|
535
|
+
|
|
536
|
+
## How to Suggest
|
|
537
|
+
|
|
538
|
+
When you detect a relevant context, include a suggestion block:
|
|
539
|
+
|
|
540
|
+
\`\`\`
|
|
541
|
+
💡 Bootspring can help with this!
|
|
542
|
+
|
|
543
|
+
Run: \`${'{command}'}\`
|
|
544
|
+
${'{description}'}
|
|
545
|
+
\`\`\`
|
|
546
|
+
|
|
547
|
+
## User Preferences
|
|
548
|
+
|
|
549
|
+
The user can enable/disable suggestions with:
|
|
550
|
+
- \`bootspring suggest --enable-auto\` - Enable auto-suggestions
|
|
551
|
+
- \`bootspring suggest --disable-auto\` - Disable auto-suggestions
|
|
552
|
+
- \`bootspring suggest --config\` - Configure categories
|
|
553
|
+
|
|
554
|
+
Only suggest when highly relevant. Don't spam suggestions.
|
|
555
|
+
`;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* Get configuration status
|
|
560
|
+
*/
|
|
561
|
+
getStatus() {
|
|
562
|
+
return {
|
|
563
|
+
enabled: this.config.enabled,
|
|
564
|
+
categories: this.config.categories,
|
|
565
|
+
suppressedCommands: this.config.suppressedCommands,
|
|
566
|
+
recentSuggestionsCount: this.recentSuggestions.size
|
|
567
|
+
};
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
/**
|
|
572
|
+
* Middleware for integration with CLI
|
|
573
|
+
*/
|
|
574
|
+
function createMiddleware(projectRoot) {
|
|
575
|
+
const autoSuggest = new AutoSuggest(projectRoot);
|
|
576
|
+
|
|
577
|
+
return {
|
|
578
|
+
/**
|
|
579
|
+
* Process user input and return suggestions
|
|
580
|
+
*/
|
|
581
|
+
process(userInput) {
|
|
582
|
+
return autoSuggest.analyze(userInput);
|
|
583
|
+
},
|
|
584
|
+
|
|
585
|
+
/**
|
|
586
|
+
* Format suggestions for display
|
|
587
|
+
*/
|
|
588
|
+
format(suggestions) {
|
|
589
|
+
return autoSuggest.formatSuggestions(suggestions);
|
|
590
|
+
},
|
|
591
|
+
|
|
592
|
+
/**
|
|
593
|
+
* Get the AutoSuggest instance
|
|
594
|
+
*/
|
|
595
|
+
getInstance() {
|
|
596
|
+
return autoSuggest;
|
|
597
|
+
}
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* Export for MCP integration
|
|
603
|
+
*/
|
|
604
|
+
function createMCPHandler(autoSuggest) {
|
|
605
|
+
return {
|
|
606
|
+
name: 'bootspring_suggest_context',
|
|
607
|
+
description: 'Analyze user context and suggest relevant Bootspring commands',
|
|
608
|
+
parameters: {
|
|
609
|
+
type: 'object',
|
|
610
|
+
properties: {
|
|
611
|
+
userMessage: {
|
|
612
|
+
type: 'string',
|
|
613
|
+
description: 'The user message to analyze for suggestions'
|
|
614
|
+
}
|
|
615
|
+
},
|
|
616
|
+
required: ['userMessage']
|
|
617
|
+
},
|
|
618
|
+
handler: async (params) => {
|
|
619
|
+
const suggestions = autoSuggest.analyze(params.userMessage);
|
|
620
|
+
return {
|
|
621
|
+
suggestions,
|
|
622
|
+
formatted: autoSuggest.formatSuggestions(suggestions)
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
};
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
module.exports = {
|
|
629
|
+
AutoSuggest,
|
|
630
|
+
SUGGESTION_PATTERNS,
|
|
631
|
+
DEFAULT_CONFIG,
|
|
632
|
+
createMiddleware,
|
|
633
|
+
createMCPHandler
|
|
634
|
+
};
|