@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.
Files changed (253) hide show
  1. package/README.md +107 -14
  2. package/bin/bootspring.js +166 -27
  3. package/cli/agent.js +189 -17
  4. package/cli/analyze.js +499 -0
  5. package/cli/audit.js +557 -0
  6. package/cli/auth.js +495 -38
  7. package/cli/billing.js +302 -0
  8. package/cli/build.js +695 -0
  9. package/cli/business.js +109 -26
  10. package/cli/checkpoint-utils.js +168 -0
  11. package/cli/checkpoint.js +639 -0
  12. package/cli/cloud-sync.js +447 -0
  13. package/cli/content.js +198 -0
  14. package/cli/context.js +1 -1
  15. package/cli/deploy.js +543 -0
  16. package/cli/fundraise.js +112 -50
  17. package/cli/github-cmd.js +435 -0
  18. package/cli/health.js +477 -0
  19. package/cli/init.js +84 -13
  20. package/cli/legal.js +107 -95
  21. package/cli/log.js +2 -2
  22. package/cli/loop.js +976 -73
  23. package/cli/manager.js +711 -0
  24. package/cli/metrics.js +480 -0
  25. package/cli/monitor.js +812 -0
  26. package/cli/onboard.js +521 -0
  27. package/cli/orchestrator.js +12 -24
  28. package/cli/prd.js +594 -0
  29. package/cli/preseed-start.js +1483 -0
  30. package/cli/preseed.js +2302 -0
  31. package/cli/project.js +436 -0
  32. package/cli/quality.js +233 -0
  33. package/cli/security.js +913 -0
  34. package/cli/seed.js +1441 -5
  35. package/cli/skill.js +273 -211
  36. package/cli/suggest.js +989 -0
  37. package/cli/switch.js +453 -0
  38. package/cli/visualize.js +527 -0
  39. package/cli/watch.js +769 -0
  40. package/cli/workspace.js +607 -0
  41. package/core/analyze-workflow.js +1134 -0
  42. package/core/api-client.js +535 -22
  43. package/core/audit-workflow.js +1350 -0
  44. package/core/build-orchestrator.js +480 -0
  45. package/core/build-state.js +577 -0
  46. package/core/checkpoint-engine.js +408 -0
  47. package/core/config.js +1109 -26
  48. package/core/context-loader.js +21 -1
  49. package/core/deploy-workflow.js +836 -0
  50. package/core/entitlements.js +93 -22
  51. package/core/github-sync.js +610 -0
  52. package/core/index.js +8 -1
  53. package/core/ingest.js +1111 -0
  54. package/core/metrics-engine.js +768 -0
  55. package/core/onboard-workflow.js +1007 -0
  56. package/core/preseed-workflow.js +934 -0
  57. package/core/preseed.js +1617 -0
  58. package/core/project-context.js +325 -0
  59. package/core/project-state.js +694 -0
  60. package/core/r2-sync.js +583 -0
  61. package/core/scaffold.js +525 -7
  62. package/core/session.js +258 -0
  63. package/core/task-extractor.js +758 -0
  64. package/core/telemetry.js +28 -6
  65. package/core/tier-enforcement.js +737 -0
  66. package/core/utils.js +38 -14
  67. package/generators/questionnaire.js +15 -12
  68. package/generators/sections/ai.js +7 -7
  69. package/generators/sections/content.js +300 -0
  70. package/generators/sections/index.js +3 -0
  71. package/generators/sections/plugins.js +7 -6
  72. package/generators/templates/build-planning.template.js +596 -0
  73. package/generators/templates/content.template.js +819 -0
  74. package/generators/templates/index.js +2 -1
  75. package/hooks/git-autopilot.js +1250 -0
  76. package/hooks/index.js +9 -0
  77. package/intelligence/agent-collab.js +2057 -0
  78. package/intelligence/auto-suggest.js +634 -0
  79. package/intelligence/content-gen.js +1589 -0
  80. package/intelligence/cross-project.js +1647 -0
  81. package/intelligence/index.js +184 -0
  82. package/intelligence/learning/insights.json +517 -7
  83. package/intelligence/learning/pattern-learner.js +1008 -14
  84. package/intelligence/memory/decision-tracker.js +1431 -31
  85. package/intelligence/memory/decisions.jsonl +0 -0
  86. package/intelligence/orchestrator.js +2896 -1
  87. package/intelligence/prd.js +92 -1
  88. package/intelligence/recommendation-weights.json +14 -2
  89. package/intelligence/recommendations.js +463 -9
  90. package/intelligence/workflow-composer.js +1451 -0
  91. package/marketplace/index.d.ts +324 -0
  92. package/marketplace/index.js +1921 -0
  93. package/mcp/contracts/mcp-contract.v1.json +342 -4
  94. package/mcp/registry.js +680 -3
  95. package/mcp/response-formatter.js +23 -0
  96. package/mcp/tools/assist-tool.js +78 -4
  97. package/mcp/tools/autopilot-tool.js +408 -0
  98. package/mcp/tools/content-tool.js +571 -0
  99. package/mcp/tools/dashboard-tool.js +251 -5
  100. package/mcp/tools/mvp-tool.js +344 -0
  101. package/mcp/tools/plugin-tool.js +23 -1
  102. package/mcp/tools/prd-tool.js +579 -0
  103. package/mcp/tools/seed-tool.js +447 -0
  104. package/mcp/tools/skill-tool.js +43 -14
  105. package/mcp/tools/suggest-tool.js +147 -0
  106. package/package.json +15 -6
  107. package/agents/README.md +0 -93
  108. package/agents/ai-integration-expert/context.md +0 -386
  109. package/agents/api-expert/context.md +0 -416
  110. package/agents/architecture-expert/context.md +0 -454
  111. package/agents/auth-expert/context.md +0 -399
  112. package/agents/backend-expert/context.md +0 -483
  113. package/agents/business-strategy-expert/context.md +0 -180
  114. package/agents/code-review-expert/context.md +0 -365
  115. package/agents/competitive-analysis-expert/context.md +0 -239
  116. package/agents/data-modeling-expert/context.md +0 -352
  117. package/agents/database-expert/context.md +0 -250
  118. package/agents/devops-expert/context.md +0 -446
  119. package/agents/email-expert/context.md +0 -379
  120. package/agents/financial-expert/context.md +0 -213
  121. package/agents/frontend-expert/context.md +0 -364
  122. package/agents/fundraising-expert/context.md +0 -257
  123. package/agents/growth-expert/context.md +0 -249
  124. package/agents/index.js +0 -140
  125. package/agents/investor-relations-expert/context.md +0 -266
  126. package/agents/legal-expert/context.md +0 -284
  127. package/agents/marketing-expert/context.md +0 -236
  128. package/agents/monitoring-expert/context.md +0 -362
  129. package/agents/operations-expert/context.md +0 -279
  130. package/agents/partnerships-expert/context.md +0 -286
  131. package/agents/payment-expert/context.md +0 -340
  132. package/agents/performance-expert/context.md +0 -377
  133. package/agents/private-equity-expert/context.md +0 -246
  134. package/agents/railway-expert/context.md +0 -284
  135. package/agents/research-expert/context.md +0 -245
  136. package/agents/sales-expert/context.md +0 -241
  137. package/agents/security-expert/context.md +0 -343
  138. package/agents/testing-expert/context.md +0 -414
  139. package/agents/ui-ux-expert/context.md +0 -448
  140. package/agents/vercel-expert/context.md +0 -426
  141. package/skills/index.js +0 -787
  142. package/skills/patterns/README.md +0 -163
  143. package/skills/patterns/ai/agents.md +0 -281
  144. package/skills/patterns/ai/claude.md +0 -138
  145. package/skills/patterns/ai/embeddings.md +0 -150
  146. package/skills/patterns/ai/rag.md +0 -266
  147. package/skills/patterns/ai/streaming.md +0 -170
  148. package/skills/patterns/ai/structured-output.md +0 -162
  149. package/skills/patterns/ai/tools.md +0 -154
  150. package/skills/patterns/analytics/tracking.md +0 -220
  151. package/skills/patterns/api/errors.md +0 -296
  152. package/skills/patterns/api/graphql.md +0 -440
  153. package/skills/patterns/api/middleware.md +0 -279
  154. package/skills/patterns/api/openapi.md +0 -285
  155. package/skills/patterns/api/rate-limiting.md +0 -231
  156. package/skills/patterns/api/route-handler.md +0 -217
  157. package/skills/patterns/api/server-action.md +0 -249
  158. package/skills/patterns/api/versioning.md +0 -443
  159. package/skills/patterns/api/webhooks.md +0 -247
  160. package/skills/patterns/auth/clerk.md +0 -132
  161. package/skills/patterns/auth/mfa.md +0 -313
  162. package/skills/patterns/auth/nextauth.md +0 -140
  163. package/skills/patterns/auth/oauth.md +0 -237
  164. package/skills/patterns/auth/rbac.md +0 -152
  165. package/skills/patterns/auth/session-management.md +0 -367
  166. package/skills/patterns/auth/session.md +0 -120
  167. package/skills/patterns/database/audit.md +0 -177
  168. package/skills/patterns/database/migrations.md +0 -177
  169. package/skills/patterns/database/pagination.md +0 -230
  170. package/skills/patterns/database/pooling.md +0 -357
  171. package/skills/patterns/database/prisma.md +0 -180
  172. package/skills/patterns/database/relations.md +0 -187
  173. package/skills/patterns/database/seeding.md +0 -246
  174. package/skills/patterns/database/soft-delete.md +0 -153
  175. package/skills/patterns/database/transactions.md +0 -162
  176. package/skills/patterns/deployment/ci-cd.md +0 -231
  177. package/skills/patterns/deployment/docker.md +0 -188
  178. package/skills/patterns/deployment/monitoring.md +0 -387
  179. package/skills/patterns/deployment/vercel.md +0 -160
  180. package/skills/patterns/email/resend.md +0 -143
  181. package/skills/patterns/email/templates.md +0 -245
  182. package/skills/patterns/email/transactional.md +0 -503
  183. package/skills/patterns/email/verification.md +0 -176
  184. package/skills/patterns/files/download.md +0 -243
  185. package/skills/patterns/files/upload.md +0 -239
  186. package/skills/patterns/i18n/nextintl.md +0 -188
  187. package/skills/patterns/logging/structured.md +0 -292
  188. package/skills/patterns/notifications/email-queue.md +0 -248
  189. package/skills/patterns/notifications/push.md +0 -279
  190. package/skills/patterns/payments/checkout.md +0 -303
  191. package/skills/patterns/payments/invoices.md +0 -287
  192. package/skills/patterns/payments/portal.md +0 -245
  193. package/skills/patterns/payments/stripe.md +0 -272
  194. package/skills/patterns/payments/subscriptions.md +0 -300
  195. package/skills/patterns/payments/usage.md +0 -279
  196. package/skills/patterns/performance/caching.md +0 -276
  197. package/skills/patterns/performance/code-splitting.md +0 -233
  198. package/skills/patterns/performance/edge.md +0 -254
  199. package/skills/patterns/performance/isr.md +0 -266
  200. package/skills/patterns/performance/lazy-loading.md +0 -281
  201. package/skills/patterns/realtime/sse.md +0 -327
  202. package/skills/patterns/realtime/websockets.md +0 -336
  203. package/skills/patterns/search/filtering.md +0 -329
  204. package/skills/patterns/search/fulltext.md +0 -260
  205. package/skills/patterns/security/audit-logging.md +0 -444
  206. package/skills/patterns/security/csrf.md +0 -234
  207. package/skills/patterns/security/headers.md +0 -252
  208. package/skills/patterns/security/sanitization.md +0 -258
  209. package/skills/patterns/security/secrets.md +0 -261
  210. package/skills/patterns/security/validation.md +0 -268
  211. package/skills/patterns/security/xss.md +0 -229
  212. package/skills/patterns/seo/metadata.md +0 -252
  213. package/skills/patterns/state/context.md +0 -349
  214. package/skills/patterns/state/react-query.md +0 -313
  215. package/skills/patterns/state/url-state.md +0 -482
  216. package/skills/patterns/state/zustand.md +0 -262
  217. package/skills/patterns/testing/api.md +0 -259
  218. package/skills/patterns/testing/component.md +0 -233
  219. package/skills/patterns/testing/coverage.md +0 -207
  220. package/skills/patterns/testing/fixtures.md +0 -225
  221. package/skills/patterns/testing/integration.md +0 -436
  222. package/skills/patterns/testing/mocking.md +0 -177
  223. package/skills/patterns/testing/playwright.md +0 -162
  224. package/skills/patterns/testing/snapshot.md +0 -175
  225. package/skills/patterns/testing/vitest.md +0 -307
  226. package/skills/patterns/ui/accordions.md +0 -395
  227. package/skills/patterns/ui/cards.md +0 -299
  228. package/skills/patterns/ui/dropdowns.md +0 -476
  229. package/skills/patterns/ui/empty-states.md +0 -320
  230. package/skills/patterns/ui/forms.md +0 -405
  231. package/skills/patterns/ui/inputs.md +0 -319
  232. package/skills/patterns/ui/layouts.md +0 -282
  233. package/skills/patterns/ui/loading.md +0 -291
  234. package/skills/patterns/ui/modals.md +0 -338
  235. package/skills/patterns/ui/navigation.md +0 -374
  236. package/skills/patterns/ui/tables.md +0 -407
  237. package/skills/patterns/ui/toasts.md +0 -300
  238. package/skills/patterns/ui/tooltips.md +0 -396
  239. package/skills/patterns/utils/dates.md +0 -435
  240. package/skills/patterns/utils/errors.md +0 -451
  241. package/skills/patterns/utils/formatting.md +0 -345
  242. package/skills/patterns/utils/validation.md +0 -434
  243. package/templates/bootspring.config.js +0 -83
  244. package/templates/business/business-model-canvas.md +0 -246
  245. package/templates/business/business-plan.md +0 -266
  246. package/templates/business/competitive-analysis.md +0 -312
  247. package/templates/fundraising/data-room-checklist.md +0 -300
  248. package/templates/fundraising/investor-research.md +0 -243
  249. package/templates/fundraising/pitch-deck-outline.md +0 -253
  250. package/templates/legal/gdpr-checklist.md +0 -339
  251. package/templates/legal/privacy-policy.md +0 -285
  252. package/templates/legal/terms-of-service.md +0 -222
  253. package/templates/mcp.json +0 -9
package/cli/agent.js CHANGED
@@ -7,6 +7,55 @@
7
7
  */
8
8
 
9
9
  const utils = require('../core/utils');
10
+ const telemetry = require('../core/telemetry');
11
+ const tierEnforcement = require('../core/tier-enforcement');
12
+ const api = require('../core/api-client');
13
+ const auth = require('../core/auth');
14
+
15
+ // Re-export AGENT_TIERS from tier-enforcement for compatibility
16
+ const { AGENT_TIERS, checkAgentAccess: canAccessAgent } = tierEnforcement;
17
+
18
+ /**
19
+ * Track agent invocation via telemetry
20
+ */
21
+ function trackAgentInvocation(agentId, topic = null) {
22
+ try {
23
+ telemetry.emitEvent('agent.invoked', {
24
+ agent: agentId,
25
+ topic: topic ? topic.substring(0, 100) : null, // Truncate for privacy
26
+ timestamp: new Date().toISOString()
27
+ });
28
+ } catch {
29
+ // Telemetry should never break the command
30
+ }
31
+ }
32
+
33
+ /**
34
+ * Fetch agent context from API (thin client model)
35
+ * Agent context is not bundled locally - must be fetched from API
36
+ * @param {string} agentId - Agent ID
37
+ * @returns {Promise<{context: string, name: string}|null>}
38
+ */
39
+ async function fetchAgentContext(agentId) {
40
+ if (!auth.isAuthenticated()) {
41
+ return null;
42
+ }
43
+
44
+ try {
45
+ const response = await api.getAgentContext(agentId);
46
+ return response;
47
+ } catch (error) {
48
+ if (error.status === 403) {
49
+ // Tier not sufficient - will be handled by canAccessAgent
50
+ return { error: 'upgrade_required', requiredTier: error.requiredTier };
51
+ }
52
+ if (error.status === 401) {
53
+ return { error: 'auth_required' };
54
+ }
55
+ // Network error or other issue
56
+ return null;
57
+ }
58
+ }
10
59
 
11
60
  // Agent definitions - these will be loaded from agents/profiles/ in production
12
61
  const AGENTS = {
@@ -237,6 +286,38 @@ const AGENTS = {
237
286
  description: 'Specializes in authentication, Clerk, NextAuth, and session management',
238
287
  expertise: ['Clerk', 'NextAuth', 'OAuth', 'JWT', 'Session Management', 'RBAC'],
239
288
  triggers: ['auth', 'authentication', 'login', 'session', 'oauth', 'clerk', 'nextauth']
289
+ },
290
+ // Content Agents
291
+ 'content-expert': {
292
+ name: 'Content Expert',
293
+ category: 'Content',
294
+ description: 'Expert in technical writing, documentation, blogs, marketing copy, and content strategy',
295
+ expertise: ['Technical Writing', 'Documentation', 'Blog Posts', 'Release Notes', 'README', 'API Docs', 'SEO', 'Content Strategy'],
296
+ triggers: ['content', 'writing', 'documentation', 'docs', 'blog', 'readme', 'changelog', 'copy', 'article', 'marketing']
297
+ },
298
+ // Product Agents
299
+ 'product-expert': {
300
+ name: 'Product Expert',
301
+ category: 'Product',
302
+ description: 'Expert in product management, roadmapping, feature prioritization, and user research',
303
+ expertise: ['Product Strategy', 'Roadmapping', 'Feature Prioritization', 'User Research', 'PRDs', 'OKRs', 'Metrics', 'Product-Market Fit'],
304
+ triggers: ['product', 'roadmap', 'feature', 'prioritization', 'prd', 'requirements', 'user research', 'okr', 'metrics', 'backlog']
305
+ },
306
+ // Mobile Agents
307
+ 'mobile-expert': {
308
+ name: 'Mobile Expert',
309
+ category: 'Mobile',
310
+ description: 'Expert in mobile development with React Native, Flutter, iOS, and Android',
311
+ expertise: ['React Native', 'Flutter', 'iOS', 'Android', 'Mobile Architecture', 'App Store', 'Push Notifications', 'Offline-First'],
312
+ triggers: ['mobile', 'react native', 'flutter', 'ios', 'android', 'app', 'native', 'swift', 'kotlin', 'expo']
313
+ },
314
+ // Infrastructure Agents
315
+ 'infrastructure-expert': {
316
+ name: 'Infrastructure Expert',
317
+ category: 'DevOps',
318
+ description: 'Expert in cloud infrastructure, Terraform, Kubernetes, and DevOps practices',
319
+ expertise: ['AWS', 'GCP', 'Azure', 'Terraform', 'Kubernetes', 'Docker', 'CI/CD', 'Infrastructure-as-Code', 'Cloud Architecture'],
320
+ triggers: ['infrastructure', 'cloud', 'aws', 'gcp', 'terraform', 'kubernetes', 'k8s', 'docker', 'devops', 'iac']
240
321
  }
241
322
  };
242
323
 
@@ -244,9 +325,12 @@ const AGENTS = {
244
325
  * List all available agents
245
326
  */
246
327
  function listAgents() {
328
+ const userTier = tierEnforcement.getTier();
329
+
247
330
  console.log(`
248
331
  ${utils.COLORS.cyan}${utils.COLORS.bold}⚡ Bootspring Agents${utils.COLORS.reset}
249
332
  ${utils.COLORS.dim}Specialized AI expertise on demand${utils.COLORS.reset}
333
+ ${utils.COLORS.dim}Your tier: ${userTier}${utils.COLORS.reset}
250
334
  `);
251
335
 
252
336
  // Group by category
@@ -258,16 +342,31 @@ ${utils.COLORS.dim}Specialized AI expertise on demand${utils.COLORS.reset}
258
342
  categories[agent.category].push({ id, ...agent });
259
343
  }
260
344
 
345
+ let accessibleCount = 0;
346
+ let lockedCount = 0;
347
+
261
348
  for (const [category, agents] of Object.entries(categories)) {
262
349
  console.log(`${utils.COLORS.bold}${category}${utils.COLORS.reset}`);
263
350
  for (const agent of agents) {
264
- console.log(` ${utils.COLORS.cyan}${agent.id}${utils.COLORS.reset}`);
351
+ const access = canAccessAgent(agent.id);
352
+ const tierBadge = AGENT_TIERS[agent.id]
353
+ ? ` ${utils.COLORS.yellow}[${AGENT_TIERS[agent.id]}]${utils.COLORS.reset}`
354
+ : '';
355
+ const lockIcon = access.allowed ? '' : ` ${utils.COLORS.red}🔒${utils.COLORS.reset}`;
356
+
357
+ if (access.allowed) {
358
+ accessibleCount++;
359
+ } else {
360
+ lockedCount++;
361
+ }
362
+
363
+ console.log(` ${utils.COLORS.cyan}${agent.id}${utils.COLORS.reset}${tierBadge}${lockIcon}`);
265
364
  console.log(` ${utils.COLORS.dim}${agent.description}${utils.COLORS.reset}`);
266
365
  }
267
366
  console.log();
268
367
  }
269
368
 
270
- utils.print.dim(`${Object.keys(AGENTS).length} agents available`);
369
+ utils.print.dim(`${accessibleCount} agents available, ${lockedCount} locked`);
271
370
  utils.print.dim('Use "bootspring agent show <name>" for details');
272
371
  }
273
372
 
@@ -304,7 +403,7 @@ ${utils.COLORS.bold}Usage${utils.COLORS.reset}
304
403
  /**
305
404
  * Invoke an agent
306
405
  */
307
- function invokeAgent(agentId, _args) {
406
+ async function invokeAgent(agentId, args) {
308
407
  const agent = AGENTS[agentId];
309
408
 
310
409
  if (!agent) {
@@ -313,29 +412,102 @@ function invokeAgent(agentId, _args) {
313
412
  return;
314
413
  }
315
414
 
415
+ // Check authentication first
416
+ if (!auth.isAuthenticated()) {
417
+ console.log(`
418
+ ${utils.COLORS.yellow}${utils.COLORS.bold}⚡ ${agent.name}${utils.COLORS.reset}
419
+ ${utils.COLORS.red}Authentication required${utils.COLORS.reset}
420
+
421
+ ${utils.COLORS.dim}Agent context is served from the API. Please log in:${utils.COLORS.reset}
422
+ ${utils.COLORS.cyan}bootspring auth login${utils.COLORS.reset}
423
+ `);
424
+ return;
425
+ }
426
+
427
+ // Check tier access (client-side check for UX, server enforces)
428
+ const access = canAccessAgent(agentId);
429
+ if (!access.allowed) {
430
+ console.log(`
431
+ ${utils.COLORS.yellow}${utils.COLORS.bold}⚡ ${agent.name}${utils.COLORS.reset}
432
+ ${utils.COLORS.red}This agent requires ${access.requiredTier} tier or higher.${utils.COLORS.reset}
433
+ `);
434
+ console.log(tierEnforcement.getUpgradePrompt(agent.name, access.requiredTier));
435
+ return;
436
+ }
437
+
438
+ const isMCP = utils.isMCPContext();
439
+ const parsedArgs = utils.parseArgs(args);
440
+ const topic = parsedArgs.topic || args.filter(a => !a.startsWith('--')).join(' ');
441
+
442
+ // Track agent invocation
443
+ trackAgentInvocation(agentId, topic);
444
+
316
445
  console.log(`
317
446
  ${utils.COLORS.cyan}${utils.COLORS.bold}⚡ ${agent.name}${utils.COLORS.reset}
318
447
  ${utils.COLORS.dim}${agent.description}${utils.COLORS.reset}
448
+ `);
449
+
450
+ // Fetch agent context from API (thin client - no local content)
451
+ const spinner = utils.createSpinner('Loading agent context...');
452
+ spinner.start();
453
+
454
+ const contextResult = await fetchAgentContext(agentId);
455
+
456
+ if (!contextResult) {
457
+ spinner.fail('Failed to load agent context');
458
+ console.log(`${utils.COLORS.dim}Check your internet connection and try again.${utils.COLORS.reset}`);
459
+ return;
460
+ }
461
+
462
+ if (contextResult.error === 'upgrade_required') {
463
+ spinner.fail('Upgrade required');
464
+ console.log(tierEnforcement.getUpgradePrompt(agent.name, contextResult.requiredTier || 'pro'));
465
+ return;
466
+ }
467
+
468
+ if (contextResult.error === 'auth_required') {
469
+ spinner.fail('Authentication required');
470
+ console.log(`${utils.COLORS.dim}Run: bootspring auth login${utils.COLORS.reset}`);
471
+ return;
472
+ }
473
+
474
+ spinner.succeed('Agent context loaded');
475
+
476
+ // In MCP mode, output the context for the AI to use
477
+ if (isMCP) {
478
+ console.log(`\n${utils.COLORS.bold}Agent Context:${utils.COLORS.reset}\n`);
479
+ console.log(contextResult.context);
480
+ return;
481
+ }
319
482
 
320
- ${utils.COLORS.yellow}${utils.COLORS.bold}MCP Integration Required${utils.COLORS.reset}
483
+ // CLI mode - show context and guidance
484
+ console.log(`\n${utils.COLORS.bold}Agent Context:${utils.COLORS.reset}`);
485
+ console.log(`${utils.COLORS.dim}─────────────────────────────────────${utils.COLORS.reset}`);
321
486
 
322
- Agent invocation requires MCP (Model Context Protocol) integration.
323
- With MCP enabled, agents are automatically invoked based on your prompts.
487
+ // Show truncated context in CLI mode
488
+ const contextLines = contextResult.context.split('\n');
489
+ const previewLines = contextLines.slice(0, 20);
490
+ console.log(previewLines.join('\n'));
324
491
 
325
- ${utils.COLORS.bold}Setup:${utils.COLORS.reset}
326
- 1. Start the MCP server:
327
- ${utils.COLORS.cyan}bootspring mcp start${utils.COLORS.reset}
492
+ if (contextLines.length > 20) {
493
+ console.log(`\n${utils.COLORS.dim}... (${contextLines.length - 20} more lines)${utils.COLORS.reset}`);
494
+ }
328
495
 
329
- 2. Configure your AI client (Claude Code, etc.) to connect to Bootspring MCP
496
+ console.log(`${utils.COLORS.dim}─────────────────────────────────────${utils.COLORS.reset}`);
330
497
 
331
- 3. Use natural language - agents activate automatically:
332
- ${utils.COLORS.dim}"Review my database schema for performance issues"${utils.COLORS.reset}
333
- ${utils.COLORS.dim}"Check this code for security vulnerabilities"${utils.COLORS.reset}
498
+ if (topic) {
499
+ console.log(`\n${utils.COLORS.bold}Your topic:${utils.COLORS.reset} "${topic}"
500
+ ${utils.COLORS.dim}Use this context with your AI assistant for the topic above.${utils.COLORS.reset}
501
+ `);
502
+ }
334
503
 
335
- ${utils.COLORS.bold}Documentation:${utils.COLORS.reset}
336
- https://bootspring.com/docs/mcp-setup
504
+ console.log(`
505
+ ${utils.COLORS.bold}Usage:${utils.COLORS.reset}
506
+ Copy the context above and use it with your AI assistant.
337
507
 
338
- ${utils.COLORS.dim}Run "bootspring mcp" for MCP server options${utils.COLORS.reset}
508
+ ${utils.COLORS.yellow}${utils.COLORS.bold}Enhanced Mode${utils.COLORS.reset}
509
+ ${utils.COLORS.dim}With MCP integration, agents activate automatically.${utils.COLORS.reset}
510
+ ${utils.COLORS.cyan}bootspring mcp start${utils.COLORS.reset}
339
511
  `);
340
512
  }
341
513
 
@@ -427,7 +599,7 @@ async function run(args) {
427
599
  utils.print.dim('Usage: bootspring agent invoke <name> --topic "your question"');
428
600
  return;
429
601
  }
430
- invokeAgent(subargs[0], subargs.slice(1));
602
+ await invokeAgent(subargs[0], subargs.slice(1));
431
603
  break;
432
604
 
433
605
  case 'search':