stagent 0.6.3 → 0.7.0

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 (123) hide show
  1. package/README.md +21 -2
  2. package/dist/cli.js +226 -1
  3. package/docs/.coverage-gaps.json +66 -16
  4. package/docs/.last-generated +1 -1
  5. package/docs/features/dashboard-kanban.md +13 -7
  6. package/docs/features/settings.md +15 -3
  7. package/docs/features/tables.md +122 -0
  8. package/docs/index.md +3 -2
  9. package/docs/journeys/developer.md +26 -16
  10. package/docs/journeys/personal-use.md +23 -9
  11. package/docs/journeys/power-user.md +40 -14
  12. package/docs/journeys/work-use.md +43 -15
  13. package/docs/manifest.json +27 -17
  14. package/package.json +3 -1
  15. package/src/app/api/chat/entities/search/route.ts +12 -3
  16. package/src/app/api/projects/[id]/route.ts +37 -0
  17. package/src/app/api/projects/__tests__/delete-project.test.ts +12 -0
  18. package/src/app/api/snapshots/[id]/restore/route.ts +62 -0
  19. package/src/app/api/snapshots/[id]/route.ts +44 -0
  20. package/src/app/api/snapshots/route.ts +54 -0
  21. package/src/app/api/snapshots/settings/route.ts +67 -0
  22. package/src/app/api/tables/[id]/charts/[chartId]/route.ts +89 -0
  23. package/src/app/api/tables/[id]/charts/route.ts +72 -0
  24. package/src/app/api/tables/[id]/columns/route.ts +70 -0
  25. package/src/app/api/tables/[id]/export/route.ts +94 -0
  26. package/src/app/api/tables/[id]/history/route.ts +15 -0
  27. package/src/app/api/tables/[id]/import/route.ts +111 -0
  28. package/src/app/api/tables/[id]/route.ts +86 -0
  29. package/src/app/api/tables/[id]/rows/[rowId]/history/route.ts +32 -0
  30. package/src/app/api/tables/[id]/rows/[rowId]/route.ts +51 -0
  31. package/src/app/api/tables/[id]/rows/route.ts +101 -0
  32. package/src/app/api/tables/[id]/triggers/[triggerId]/route.ts +65 -0
  33. package/src/app/api/tables/[id]/triggers/route.ts +122 -0
  34. package/src/app/api/tables/route.ts +65 -0
  35. package/src/app/api/tables/templates/route.ts +92 -0
  36. package/src/app/settings/page.tsx +2 -0
  37. package/src/app/tables/[id]/page.tsx +67 -0
  38. package/src/app/tables/page.tsx +21 -0
  39. package/src/app/tables/templates/page.tsx +19 -0
  40. package/src/components/chat/chat-table-result.tsx +139 -0
  41. package/src/components/documents/document-browser.tsx +1 -1
  42. package/src/components/projects/project-form-sheet.tsx +3 -27
  43. package/src/components/schedules/schedule-form.tsx +5 -27
  44. package/src/components/settings/data-management-section.tsx +17 -12
  45. package/src/components/settings/database-snapshots-section.tsx +469 -0
  46. package/src/components/shared/app-sidebar.tsx +2 -0
  47. package/src/components/shared/document-picker-sheet.tsx +214 -11
  48. package/src/components/tables/table-browser.tsx +234 -0
  49. package/src/components/tables/table-cell-editor.tsx +226 -0
  50. package/src/components/tables/table-chart-builder.tsx +288 -0
  51. package/src/components/tables/table-chart-view.tsx +146 -0
  52. package/src/components/tables/table-column-header.tsx +103 -0
  53. package/src/components/tables/table-column-sheet.tsx +331 -0
  54. package/src/components/tables/table-create-sheet.tsx +240 -0
  55. package/src/components/tables/table-detail-sheet.tsx +144 -0
  56. package/src/components/tables/table-detail-tabs.tsx +278 -0
  57. package/src/components/tables/table-grid.tsx +61 -0
  58. package/src/components/tables/table-history-tab.tsx +148 -0
  59. package/src/components/tables/table-import-wizard.tsx +542 -0
  60. package/src/components/tables/table-list-table.tsx +95 -0
  61. package/src/components/tables/table-relation-combobox.tsx +217 -0
  62. package/src/components/tables/table-spreadsheet.tsx +499 -0
  63. package/src/components/tables/table-template-gallery.tsx +162 -0
  64. package/src/components/tables/table-template-preview.tsx +219 -0
  65. package/src/components/tables/table-toolbar.tsx +79 -0
  66. package/src/components/tables/table-triggers-tab.tsx +446 -0
  67. package/src/components/tables/types.ts +6 -0
  68. package/src/components/tables/use-spreadsheet-keys.ts +171 -0
  69. package/src/components/tables/utils.ts +29 -0
  70. package/src/components/tasks/task-create-panel.tsx +5 -31
  71. package/src/components/tasks/task-edit-dialog.tsx +5 -27
  72. package/src/components/workflows/workflow-form-view.tsx +5 -29
  73. package/src/components/workflows/workflow-status-view.tsx +1 -1
  74. package/src/instrumentation.ts +3 -0
  75. package/src/lib/agents/__tests__/claude-agent.test.ts +5 -1
  76. package/src/lib/agents/claude-agent.ts +3 -1
  77. package/src/lib/agents/runtime/anthropic-direct.ts +29 -0
  78. package/src/lib/agents/runtime/openai-direct.ts +29 -0
  79. package/src/lib/chat/stagent-tools.ts +2 -0
  80. package/src/lib/chat/tool-catalog.ts +34 -0
  81. package/src/lib/chat/tools/table-tools.ts +955 -0
  82. package/src/lib/constants/table-status.ts +68 -0
  83. package/src/lib/data/__tests__/clear.test.ts +1 -1
  84. package/src/lib/data/clear.ts +45 -0
  85. package/src/lib/data/seed-data/__tests__/profiles.test.ts +28 -23
  86. package/src/lib/data/seed-data/conversations.ts +350 -42
  87. package/src/lib/data/seed-data/documents.ts +564 -591
  88. package/src/lib/data/seed-data/learned-context.ts +101 -22
  89. package/src/lib/data/seed-data/notifications.ts +344 -70
  90. package/src/lib/data/seed-data/profile-test-results.ts +92 -11
  91. package/src/lib/data/seed-data/profiles.ts +144 -46
  92. package/src/lib/data/seed-data/projects.ts +50 -18
  93. package/src/lib/data/seed-data/repo-imports.ts +28 -13
  94. package/src/lib/data/seed-data/schedules.ts +208 -41
  95. package/src/lib/data/seed-data/table-templates.ts +234 -0
  96. package/src/lib/data/seed-data/tasks.ts +614 -116
  97. package/src/lib/data/seed-data/usage-ledger.ts +182 -103
  98. package/src/lib/data/seed-data/user-tables.ts +203 -0
  99. package/src/lib/data/seed-data/views.ts +52 -7
  100. package/src/lib/data/seed-data/workflows.ts +231 -84
  101. package/src/lib/data/seed.ts +55 -14
  102. package/src/lib/data/tables.ts +417 -0
  103. package/src/lib/db/bootstrap.ts +227 -0
  104. package/src/lib/db/index.ts +9 -0
  105. package/src/lib/db/migrations/0019_add_tables_feature.sql +160 -0
  106. package/src/lib/db/migrations/0020_add_table_triggers.sql +19 -0
  107. package/src/lib/db/migrations/0021_add_row_history.sql +15 -0
  108. package/src/lib/db/schema.ts +368 -0
  109. package/src/lib/snapshots/auto-backup.ts +132 -0
  110. package/src/lib/snapshots/retention.ts +64 -0
  111. package/src/lib/snapshots/snapshot-manager.ts +429 -0
  112. package/src/lib/tables/computed.ts +61 -0
  113. package/src/lib/tables/context-builder.ts +139 -0
  114. package/src/lib/tables/formula-engine.ts +415 -0
  115. package/src/lib/tables/history.ts +115 -0
  116. package/src/lib/tables/import.ts +343 -0
  117. package/src/lib/tables/query-builder.ts +152 -0
  118. package/src/lib/tables/trigger-evaluator.ts +146 -0
  119. package/src/lib/tables/types.ts +141 -0
  120. package/src/lib/tables/validation.ts +119 -0
  121. package/src/lib/utils/stagent-paths.ts +20 -0
  122. package/tsconfig.json +3 -1
  123. /package/docs/features/{playbook.md → user-guide.md} +0 -0
@@ -1,3 +1,5 @@
1
+ import { SAMPLE_PROFILE_IDS } from "./profiles";
2
+
1
3
  export interface ProfileTestResultSeed {
2
4
  id: string;
3
5
  profileId: string;
@@ -56,40 +58,119 @@ export function createProfileTestResults(): ProfileTestResultSeed[] {
56
58
  }),
57
59
  totalPassed: 5,
58
60
  totalFailed: 1,
59
- createdAt: new Date(now - 4 * DAY),
61
+ createdAt: new Date(now - 8 * DAY),
62
+ },
63
+ {
64
+ id: crypto.randomUUID(),
65
+ profileId: SAMPLE_PROFILE_IDS[0], // GTM Launch Strategist
66
+ runtimeId: "claude-agent-sdk",
67
+ reportJson: JSON.stringify({
68
+ profileId: SAMPLE_PROFILE_IDS[0],
69
+ runtimeId: "claude-agent-sdk",
70
+ results: [
71
+ {
72
+ task: "Draft a launch plan for a B2B SaaS feature release targeting mid-market ops teams",
73
+ passed: true,
74
+ matchedKeywords: ["positioning", "channels", "timeline", "metrics"],
75
+ },
76
+ {
77
+ task: "Compare two headline variants and recommend which to A/B test first",
78
+ passed: true,
79
+ matchedKeywords: ["headline", "conversion", "test"],
80
+ },
81
+ {
82
+ task: "Write a 3-touch email sequence for a product launch",
83
+ passed: true,
84
+ matchedKeywords: ["email", "sequence", "CTA"],
85
+ },
86
+ {
87
+ task: "Analyze competitor positioning and identify messaging gaps",
88
+ passed: true,
89
+ matchedKeywords: ["competitor", "gap", "positioning"],
90
+ },
91
+ {
92
+ task: "Create a social media launch calendar with channel-specific hooks",
93
+ passed: false,
94
+ matchedKeywords: ["social", "calendar"],
95
+ missingKeywords: ["hook", "channel-specific"],
96
+ },
97
+ ],
98
+ }),
99
+ totalPassed: 4,
100
+ totalFailed: 1,
101
+ createdAt: new Date(now - 6 * DAY),
60
102
  },
61
103
  {
62
104
  id: crypto.randomUUID(),
63
- profileId: "researcher",
105
+ profileId: SAMPLE_PROFILE_IDS[1], // Content Production Editor
64
106
  runtimeId: "claude-agent-sdk",
65
107
  reportJson: JSON.stringify({
66
- profileId: "researcher",
108
+ profileId: SAMPLE_PROFILE_IDS[1],
67
109
  runtimeId: "claude-agent-sdk",
68
110
  results: [
69
111
  {
70
- task: "Research recent developments in battery technology",
112
+ task: "Write an SEO-optimized article outline for 'AI agent orchestration for small teams'",
71
113
  passed: true,
72
- matchedKeywords: ["source", "findings", "citation"],
114
+ matchedKeywords: ["keyword", "outline", "heading", "SEO"],
73
115
  },
74
116
  {
75
- task: "Compare three competing frameworks with citations",
117
+ task: "Create a distribution plan for a published blog post",
76
118
  passed: true,
77
- matchedKeywords: ["comparison", "source", "framework"],
119
+ matchedKeywords: ["LinkedIn", "newsletter", "distribution"],
78
120
  },
79
121
  {
80
- task: "Fact-check a set of claims and provide references",
122
+ task: "Research keyword clusters for a new topic area",
81
123
  passed: true,
82
- matchedKeywords: ["verified", "reference", "claim"],
124
+ matchedKeywords: ["keyword", "volume", "difficulty"],
83
125
  },
84
126
  {
85
- task: "Synthesize findings from multiple sources into a brief",
127
+ task: "Edit an article draft for brand voice consistency",
86
128
  passed: true,
87
- matchedKeywords: ["synthesis", "sources", "brief"],
129
+ matchedKeywords: ["voice", "consistency", "edit"],
88
130
  },
89
131
  ],
90
132
  }),
91
133
  totalPassed: 4,
92
134
  totalFailed: 0,
135
+ createdAt: new Date(now - 4 * DAY),
136
+ },
137
+ {
138
+ id: crypto.randomUUID(),
139
+ profileId: SAMPLE_PROFILE_IDS[4], // Revenue Operations Analyst
140
+ runtimeId: "claude-agent-sdk",
141
+ reportJson: JSON.stringify({
142
+ profileId: SAMPLE_PROFILE_IDS[4],
143
+ runtimeId: "claude-agent-sdk",
144
+ results: [
145
+ {
146
+ task: "Summarize weekly pipeline movement and highlight stalled deals",
147
+ passed: true,
148
+ matchedKeywords: ["pipeline", "stalled", "forecast"],
149
+ },
150
+ {
151
+ task: "Generate coaching notes for sales reps based on deal patterns",
152
+ passed: true,
153
+ matchedKeywords: ["coaching", "rep", "deal"],
154
+ },
155
+ {
156
+ task: "Calculate forecast confidence by pipeline stage",
157
+ passed: true,
158
+ matchedKeywords: ["forecast", "confidence", "committed"],
159
+ },
160
+ {
161
+ task: "Identify deals at risk of slipping from the current quarter",
162
+ passed: true,
163
+ matchedKeywords: ["risk", "slipping", "quarter"],
164
+ },
165
+ {
166
+ task: "Write an executive operating note with top 3 actions",
167
+ passed: true,
168
+ matchedKeywords: ["executive", "actions", "operating"],
169
+ },
170
+ ],
171
+ }),
172
+ totalPassed: 5,
173
+ totalFailed: 0,
93
174
  createdAt: new Date(now - 2 * DAY),
94
175
  },
95
176
  ];
@@ -13,12 +13,14 @@ export interface SampleProfileSeed {
13
13
  }
14
14
 
15
15
  const SAMPLE_PROFILE_AUTHOR = "Stagent Sample Data";
16
- const SAMPLE_PROFILE_SOURCE = "https://example.com/stagent/sample-data";
16
+ const SAMPLE_PROFILE_SOURCE = "https://stagent.io/profiles/samples";
17
17
 
18
18
  export const SAMPLE_PROFILE_IDS = [
19
+ "stagent-sample-gtm-launch-strategist",
20
+ "stagent-sample-content-production-editor",
21
+ "stagent-sample-customer-success-analyst",
22
+ "stagent-sample-due-diligence-analyst",
19
23
  "stagent-sample-revenue-ops-analyst",
20
- "stagent-sample-launch-copy-chief",
21
- "stagent-sample-portfolio-coach",
22
24
  ] as const;
23
25
 
24
26
  export function getSampleProfiles(): SampleProfileSeed[] {
@@ -26,112 +28,208 @@ export function getSampleProfiles(): SampleProfileSeed[] {
26
28
  {
27
29
  config: {
28
30
  id: SAMPLE_PROFILE_IDS[0],
29
- name: "Revenue Operations Analyst",
31
+ name: "GTM Launch Strategist",
30
32
  version: "1.0.0",
31
33
  domain: "work",
32
- tags: ["pipeline", "forecasting", "sales-ops", "reporting"],
33
- allowedTools: ["Read", "Write", "Grep", "Bash"],
34
+ tags: ["launches", "campaigns", "messaging", "experiments", "GTM"],
35
+ allowedTools: ["Read", "Write", "Grep", "Bash", "WebSearch"],
34
36
  canUseToolPolicy: {
35
- autoApprove: ["Read", "Grep"],
37
+ autoApprove: ["Read", "Grep", "WebSearch"],
36
38
  },
37
- maxTurns: 18,
38
- outputFormat: "Weekly operating note with metrics, risks, and next actions.",
39
+ maxTurns: 20,
40
+ outputFormat: "Campaign brief with positioning, channel mix, timeline, and success metrics.",
39
41
  author: SAMPLE_PROFILE_AUTHOR,
40
42
  source: SAMPLE_PROFILE_SOURCE,
41
43
  tests: [
42
44
  {
43
- task: "Summarize weekly pipeline movement and highlight follow-ups.",
44
- expectedKeywords: ["pipeline", "risks", "next actions"],
45
+ task: "Draft a launch plan for a B2B SaaS feature release targeting mid-market ops teams.",
46
+ expectedKeywords: ["positioning", "channels", "timeline", "metrics"],
47
+ },
48
+ {
49
+ task: "Compare two headline variants and recommend which to A/B test first.",
50
+ expectedKeywords: ["headline", "conversion", "test"],
45
51
  },
46
52
  ],
47
53
  },
48
54
  skillMd: `---
49
- name: Revenue Operations Analyst
50
- description: Turns pipeline changes into a concise operating note for GTM teams.
55
+ name: GTM Launch Strategist
56
+ description: Plans and executes multi-channel product launches with data-driven messaging and experiment design.
51
57
  ---
52
58
 
53
- # Revenue Operations Analyst
59
+ # GTM Launch Strategist
54
60
 
55
- You review pipeline movement, funnel risk, and rep follow-ups with a bias toward clear operating decisions.
61
+ You orchestrate product launches from positioning through execution, treating every launch as a series of testable hypotheses.
56
62
 
57
63
  ## Default workflow
58
64
 
59
- 1. Summarize changes in qualified pipeline, stage movement, and forecast confidence.
60
- 2. Call out deals that need executive unblockers or tighter next steps.
61
- 3. End with the three highest-leverage actions for this week.
65
+ 1. Start with the buyer's pain point not the feature list.
66
+ 2. Map channels to funnel stages: awareness (social, PR), consideration (email, landing page), conversion (demo, trial CTA).
67
+ 3. Write 2-3 message variants per channel and define the A/B test plan.
68
+ 4. Set measurable success criteria before launch day.
69
+ 5. Post-launch: summarize what worked, what didn't, and the next experiment.
62
70
  `,
63
71
  },
64
72
  {
65
73
  config: {
66
74
  id: SAMPLE_PROFILE_IDS[1],
67
- name: "Launch Copy Chief",
75
+ name: "Content Production Editor",
68
76
  version: "1.0.0",
69
77
  domain: "work",
70
- tags: ["copywriting", "launches", "messaging", "experiments"],
71
- allowedTools: ["Read", "Write", "Grep"],
78
+ tags: ["SEO", "editorial", "newsletter", "LinkedIn", "content-ops"],
79
+ allowedTools: ["Read", "Write", "Grep", "WebSearch"],
72
80
  canUseToolPolicy: {
73
- autoApprove: ["Read"],
81
+ autoApprove: ["Read", "Grep"],
74
82
  },
75
83
  maxTurns: 16,
76
- outputFormat: "Experiment summary with winning message angles and next tests.",
84
+ outputFormat: "Editorial brief or finished article with SEO metadata, internal links, and distribution notes.",
77
85
  author: SAMPLE_PROFILE_AUTHOR,
78
86
  source: SAMPLE_PROFILE_SOURCE,
79
87
  tests: [
80
88
  {
81
- task: "Review yesterday's landing page experiment results and propose the next headline test.",
82
- expectedKeywords: ["headline", "conversion", "next test"],
89
+ task: "Write an SEO-optimized article outline for 'AI agent orchestration for small teams'.",
90
+ expectedKeywords: ["keyword", "outline", "heading", "SEO"],
83
91
  },
84
92
  ],
85
93
  },
86
94
  skillMd: `---
87
- name: Launch Copy Chief
88
- description: Refines launch messaging based on conversion signals and customer language.
95
+ name: Content Production Editor
96
+ description: Runs the editorial pipeline from keyword research through publication and distribution.
89
97
  ---
90
98
 
91
- # Launch Copy Chief
99
+ # Content Production Editor
92
100
 
93
- You turn campaign performance and research inputs into sharper launch messaging.
101
+ You manage a content engine that produces SEO articles, LinkedIn posts, and newsletter editions on a weekly cadence.
94
102
 
95
103
  ## Default workflow
96
104
 
97
- 1. Compare message variants against performance data and qualitative feedback.
98
- 2. Identify the angle that best fits buyer pain, urgency, and proof.
99
- 3. Recommend one next test with a concrete success metric.
105
+ 1. Research keywords and trending topics in the target domain.
106
+ 2. Create a structured outline with H2/H3 headings, target word count (1,500-2,000), and internal link opportunities.
107
+ 3. Draft the article with clear topic sentences, data points, and a CTA.
108
+ 4. Prepare distribution: LinkedIn hook, newsletter intro, and tweet thread.
109
+ 5. Log the piece in the editorial calendar with publish date and performance tracking links.
100
110
  `,
101
111
  },
102
112
  {
103
113
  config: {
104
114
  id: SAMPLE_PROFILE_IDS[2],
105
- name: "Portfolio Review Coach",
115
+ name: "Customer Success Analyst",
106
116
  version: "1.0.0",
107
- domain: "personal",
108
- tags: ["investing", "portfolio", "risk", "habits"],
109
- allowedTools: ["Read", "Write"],
117
+ domain: "work",
118
+ tags: ["churn", "onboarding", "NPS", "support", "retention"],
119
+ allowedTools: ["Read", "Write", "Grep", "Bash"],
120
+ canUseToolPolicy: {
121
+ autoApprove: ["Read", "Grep"],
122
+ },
110
123
  maxTurns: 14,
111
- outputFormat: "Short investor brief with posture, risk notes, and watchlist changes.",
124
+ outputFormat: "Risk report with account health scores, churn signals, and recommended interventions.",
125
+ author: SAMPLE_PROFILE_AUTHOR,
126
+ source: SAMPLE_PROFILE_SOURCE,
127
+ tests: [
128
+ {
129
+ task: "Analyze customer usage data and flag accounts at risk of churning this quarter.",
130
+ expectedKeywords: ["churn", "risk", "usage", "intervention"],
131
+ },
132
+ ],
133
+ },
134
+ skillMd: `---
135
+ name: Customer Success Analyst
136
+ description: Monitors account health, detects churn risk, and generates proactive intervention plans.
137
+ ---
138
+
139
+ # Customer Success Analyst
140
+
141
+ You watch customer signals — usage drops, support ticket spikes, NPS declines — and convert them into actionable retention plays.
142
+
143
+ ## Default workflow
144
+
145
+ 1. Pull the latest usage, NPS, and support data for the account cohort.
146
+ 2. Score each account: green (healthy), yellow (watch), red (at-risk).
147
+ 3. For red accounts, identify the primary risk signal and draft an intervention (check-in call, feature walkthrough, escalation).
148
+ 4. Summarize trends across the portfolio: improving, stable, or declining.
149
+ `,
150
+ },
151
+ {
152
+ config: {
153
+ id: SAMPLE_PROFILE_IDS[3],
154
+ name: "Portfolio Due Diligence Analyst",
155
+ version: "1.0.0",
156
+ domain: "work",
157
+ tags: ["due-diligence", "financials", "competitive-analysis", "PE", "M&A"],
158
+ allowedTools: ["Read", "Write", "Grep", "WebSearch", "Bash"],
159
+ canUseToolPolicy: {
160
+ autoApprove: ["Read", "Grep", "WebSearch"],
161
+ },
162
+ maxTurns: 22,
163
+ outputFormat: "Due diligence memo with financial summary, market position, risks, and investment thesis.",
112
164
  author: SAMPLE_PROFILE_AUTHOR,
113
165
  source: SAMPLE_PROFILE_SOURCE,
114
166
  tests: [
115
167
  {
116
- task: "Create a weekday digest for a concentrated growth portfolio.",
117
- expectedKeywords: ["allocation", "risk", "watchlist"],
168
+ task: "Prepare a due diligence summary for a $15M ARR vertical SaaS company in healthcare.",
169
+ expectedKeywords: ["ARR", "market", "risk", "thesis"],
170
+ },
171
+ {
172
+ task: "Compare three portfolio companies on EBITDA margin and growth rate.",
173
+ expectedKeywords: ["EBITDA", "growth", "comparison"],
118
174
  },
119
175
  ],
120
176
  },
121
177
  skillMd: `---
122
- name: Portfolio Review Coach
123
- description: Produces disciplined portfolio check-ins focused on risk and watchlist decisions.
178
+ name: Portfolio Due Diligence Analyst
179
+ description: Produces structured due diligence memos for PE portfolio companies covering financials, market, and risk.
124
180
  ---
125
181
 
126
- # Portfolio Review Coach
182
+ # Portfolio Due Diligence Analyst
183
+
184
+ You perform buy-side and portfolio-monitoring due diligence, turning raw financial and market data into investment-grade analysis.
185
+
186
+ ## Default workflow
187
+
188
+ 1. Scope the analysis: what's the investment thesis and key questions?
189
+ 2. Pull and normalize financial data (ARR, margins, cohort retention, burn rate).
190
+ 3. Size the market and map competitive positioning.
191
+ 4. Identify top 3 risks and mitigants.
192
+ 5. Write a 1-page executive summary with go/no-go recommendation.
193
+ `,
194
+ },
195
+ {
196
+ config: {
197
+ id: SAMPLE_PROFILE_IDS[4],
198
+ name: "Revenue Operations Analyst",
199
+ version: "1.0.0",
200
+ domain: "work",
201
+ tags: ["pipeline", "forecasting", "deal-review", "sales-ops", "reporting"],
202
+ allowedTools: ["Read", "Write", "Grep", "Bash"],
203
+ canUseToolPolicy: {
204
+ autoApprove: ["Read", "Grep"],
205
+ },
206
+ maxTurns: 18,
207
+ outputFormat: "Weekly operating note with pipeline movement, deal risks, rep coaching notes, and forecast update.",
208
+ author: SAMPLE_PROFILE_AUTHOR,
209
+ source: SAMPLE_PROFILE_SOURCE,
210
+ tests: [
211
+ {
212
+ task: "Summarize weekly pipeline movement and highlight stalled deals needing executive attention.",
213
+ expectedKeywords: ["pipeline", "stalled", "forecast", "next actions"],
214
+ },
215
+ ],
216
+ },
217
+ skillMd: `---
218
+ name: Revenue Operations Analyst
219
+ description: Turns pipeline data into operating notes with deal risks, coaching cues, and forecast updates.
220
+ ---
221
+
222
+ # Revenue Operations Analyst
127
223
 
128
- You write practical investing reviews that stay grounded in allocation, concentration risk, and upcoming watchlist decisions.
224
+ You review pipeline movement, deal risk, and rep activity to produce a weekly operating rhythm for GTM leadership.
129
225
 
130
226
  ## Default workflow
131
227
 
132
- 1. Start with what changed in the portfolio and why it matters.
133
- 2. Separate signal from noise by focusing on exposure and downside risk.
134
- 3. Finish with watchlist actions instead of speculative predictions.
228
+ 1. Summarize net-new pipeline, stage movement, and closed-won/lost for the period.
229
+ 2. Flag stalled deals (>5 days no activity) with owner and recommended next step.
230
+ 3. Score forecast confidence: committed, best-case, and upside buckets.
231
+ 4. Write 1-2 coaching notes per rep based on deal patterns.
232
+ 5. End with the three highest-leverage actions for the week.
135
233
  `,
136
234
  },
137
235
  ];
@@ -2,7 +2,7 @@ export interface ProjectSeed {
2
2
  id: string;
3
3
  name: string;
4
4
  description: string;
5
- status: "active" | "completed";
5
+ status: "active" | "paused" | "completed";
6
6
  createdAt: Date;
7
7
  updatedAt: Date;
8
8
  }
@@ -12,50 +12,82 @@ export function createProjects(): ProjectSeed[] {
12
12
  const DAY = 86_400_000;
13
13
 
14
14
  return [
15
+ // --- Solo Founder (3 projects) ---
15
16
  {
16
17
  id: crypto.randomUUID(),
17
- name: "Investment Portfolio Analysis",
18
+ name: "Product Launch — AI Copilot v2",
18
19
  description:
19
- "Retail investor research analyze holdings, research ETFs, track performance",
20
+ "Multi-channel launch: landing page, email sequences, social campaigns, PR outreach for the v2 release",
20
21
  status: "active",
21
- createdAt: new Date(now - 14 * DAY),
22
+ createdAt: new Date(now - 21 * DAY),
22
23
  updatedAt: new Date(now - 1 * DAY),
23
24
  },
24
25
  {
25
26
  id: crypto.randomUUID(),
26
- name: "SaaS Landing Page Redesign",
27
+ name: "Content Engine",
27
28
  description:
28
- "Design and build a high-converting landing page for a B2B SaaS product",
29
+ "Weekly SEO articles, LinkedIn posts, and newsletter pipeline with agent-driven research and editorial",
29
30
  status: "active",
30
- createdAt: new Date(now - 12 * DAY),
31
+ createdAt: new Date(now - 18 * DAY),
31
32
  updatedAt: new Date(now - 1 * DAY),
32
33
  },
33
34
  {
34
35
  id: crypto.randomUUID(),
35
- name: "LinkedIn Lead Generation",
36
+ name: "Customer Success Automation",
36
37
  description:
37
- "Find and qualify decision-makers at target companies via social media",
38
+ "Onboarding sequences, churn risk detection, NPS monitoring, and support ticket triage",
38
39
  status: "active",
39
- createdAt: new Date(now - 10 * DAY),
40
+ createdAt: new Date(now - 16 * DAY),
40
41
  updatedAt: new Date(now - 2 * DAY),
41
42
  },
43
+
44
+ // --- Agency Owner (3 projects) ---
42
45
  {
43
46
  id: crypto.randomUUID(),
44
- name: "Q2 Business Trip — NYC",
47
+ name: "Client: TechVenture Partners",
45
48
  description:
46
- "Plan end-to-end business travel: flights, hotels, meetings, expenses",
47
- status: "completed",
48
- createdAt: new Date(now - 8 * DAY),
49
- updatedAt: new Date(now - 3 * DAY),
49
+ "PE portfolio company due diligence automation, board deck generation, KPI tracking across 4 portcos",
50
+ status: "active",
51
+ createdAt: new Date(now - 14 * DAY),
52
+ updatedAt: new Date(now - 1 * DAY),
50
53
  },
51
54
  {
52
55
  id: crypto.randomUUID(),
53
- name: "2025 Tax Filing Preparation",
56
+ name: "Client: GreenLeaf Commerce",
54
57
  description:
55
- "Organize documents, calculate deductions, prepare for CPA review",
58
+ "E-commerce client — product listing optimization, review sentiment monitoring, ad copy rotation",
56
59
  status: "active",
57
- createdAt: new Date(now - 6 * DAY),
60
+ createdAt: new Date(now - 12 * DAY),
61
+ updatedAt: new Date(now - 2 * DAY),
62
+ },
63
+ {
64
+ id: crypto.randomUUID(),
65
+ name: "Client: MedReach Health",
66
+ description:
67
+ "Healthcare marketing — HIPAA-compliant content review, referral campaign automation, provider outreach",
68
+ status: "paused",
69
+ createdAt: new Date(now - 10 * DAY),
70
+ updatedAt: new Date(now - 4 * DAY),
71
+ },
72
+
73
+ // --- PE Operating Partner (2 projects) ---
74
+ {
75
+ id: crypto.randomUUID(),
76
+ name: "Revenue Operations Command",
77
+ description:
78
+ "Pipeline forecasting, weekly deal review, rep coaching notes, and operating rhythm automation",
79
+ status: "active",
80
+ createdAt: new Date(now - 8 * DAY),
58
81
  updatedAt: new Date(now - 1 * DAY),
59
82
  },
83
+ {
84
+ id: crypto.randomUUID(),
85
+ name: "Compliance & Audit Trail",
86
+ description:
87
+ "Governed execution audit, policy drift detection, monthly compliance reports for SOC 2 readiness",
88
+ status: "completed",
89
+ createdAt: new Date(now - 6 * DAY),
90
+ updatedAt: new Date(now - 3 * DAY),
91
+ },
60
92
  ];
61
93
  }
@@ -18,34 +18,49 @@ export function createRepoImports(): RepoImportSeed[] {
18
18
  return [
19
19
  {
20
20
  id: crypto.randomUUID(),
21
- repoUrl: "https://github.com/example/agent-skills-library",
22
- repoOwner: "example",
23
- repoName: "agent-skills-library",
21
+ repoUrl: "https://github.com/stagent-community/marketing-agents",
22
+ repoOwner: "stagent-community",
23
+ repoName: "marketing-agents",
24
24
  branch: "main",
25
25
  commitSha: "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",
26
26
  profileIds: JSON.stringify([
27
- "ext-data-pipeline-analyst",
28
- "ext-customer-success-agent",
29
- "ext-incident-responder",
27
+ "ext-seo-content-writer",
28
+ "ext-social-media-scheduler",
29
+ "ext-email-campaign-manager",
30
30
  ]),
31
31
  skillCount: 3,
32
32
  lastCheckedAt: new Date(now - 2 * DAY),
33
- createdAt: new Date(now - 14 * DAY),
33
+ createdAt: new Date(now - 21 * DAY),
34
34
  },
35
35
  {
36
36
  id: crypto.randomUUID(),
37
- repoUrl: "https://github.com/example/marketing-agents",
38
- repoOwner: "example",
39
- repoName: "marketing-agents",
37
+ repoUrl: "https://github.com/stagent-community/sales-ops-agents",
38
+ repoOwner: "stagent-community",
39
+ repoName: "sales-ops-agents",
40
40
  branch: "main",
41
41
  commitSha: "f6e5d4c3b2a1f6e5d4c3b2a1f6e5d4c3b2a1f6e5",
42
42
  profileIds: JSON.stringify([
43
- "ext-seo-content-writer",
44
- "ext-social-media-scheduler",
43
+ "ext-pipeline-analyst",
44
+ "ext-deal-coach",
45
+ ]),
46
+ skillCount: 2,
47
+ lastCheckedAt: new Date(now - 3 * DAY),
48
+ createdAt: new Date(now - 14 * DAY),
49
+ },
50
+ {
51
+ id: crypto.randomUUID(),
52
+ repoUrl: "https://github.com/stagent-community/compliance-agents",
53
+ repoOwner: "stagent-community",
54
+ repoName: "compliance-agents",
55
+ branch: "main",
56
+ commitSha: "c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
57
+ profileIds: JSON.stringify([
58
+ "ext-hipaa-reviewer",
59
+ "ext-soc2-auditor",
45
60
  ]),
46
61
  skillCount: 2,
47
62
  lastCheckedAt: new Date(now - 5 * DAY),
48
- createdAt: new Date(now - 21 * DAY),
63
+ createdAt: new Date(now - 10 * DAY),
49
64
  },
50
65
  ];
51
66
  }