stagent 0.6.2 → 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.
- package/README.md +21 -2
- package/dist/cli.js +272 -1
- package/docs/.coverage-gaps.json +66 -16
- package/docs/.last-generated +1 -1
- package/docs/features/dashboard-kanban.md +13 -7
- package/docs/features/settings.md +15 -3
- package/docs/features/tables.md +122 -0
- package/docs/index.md +3 -2
- package/docs/journeys/developer.md +26 -16
- package/docs/journeys/personal-use.md +23 -9
- package/docs/journeys/power-user.md +40 -14
- package/docs/journeys/work-use.md +43 -15
- package/docs/manifest.json +27 -17
- package/package.json +3 -2
- package/src/app/api/chat/entities/search/route.ts +12 -3
- package/src/app/api/documents/[id]/route.ts +5 -1
- package/src/app/api/documents/[id]/versions/route.ts +53 -0
- package/src/app/api/documents/route.ts +5 -1
- package/src/app/api/projects/[id]/documents/route.ts +124 -0
- package/src/app/api/projects/[id]/route.ts +72 -3
- package/src/app/api/projects/__tests__/delete-project.test.ts +13 -0
- package/src/app/api/schedules/route.ts +19 -1
- package/src/app/api/snapshots/[id]/restore/route.ts +62 -0
- package/src/app/api/snapshots/[id]/route.ts +44 -0
- package/src/app/api/snapshots/route.ts +54 -0
- package/src/app/api/snapshots/settings/route.ts +67 -0
- package/src/app/api/tables/[id]/charts/[chartId]/route.ts +89 -0
- package/src/app/api/tables/[id]/charts/route.ts +72 -0
- package/src/app/api/tables/[id]/columns/route.ts +70 -0
- package/src/app/api/tables/[id]/export/route.ts +94 -0
- package/src/app/api/tables/[id]/history/route.ts +15 -0
- package/src/app/api/tables/[id]/import/route.ts +111 -0
- package/src/app/api/tables/[id]/route.ts +86 -0
- package/src/app/api/tables/[id]/rows/[rowId]/history/route.ts +32 -0
- package/src/app/api/tables/[id]/rows/[rowId]/route.ts +51 -0
- package/src/app/api/tables/[id]/rows/route.ts +101 -0
- package/src/app/api/tables/[id]/triggers/[triggerId]/route.ts +65 -0
- package/src/app/api/tables/[id]/triggers/route.ts +122 -0
- package/src/app/api/tables/route.ts +65 -0
- package/src/app/api/tables/templates/route.ts +92 -0
- package/src/app/api/tasks/[id]/route.ts +37 -2
- package/src/app/api/tasks/[id]/siblings/route.ts +48 -0
- package/src/app/api/tasks/route.ts +8 -9
- package/src/app/api/workflows/[id]/documents/route.ts +209 -0
- package/src/app/api/workflows/[id]/execute/route.ts +6 -2
- package/src/app/api/workflows/[id]/route.ts +16 -3
- package/src/app/api/workflows/[id]/status/route.ts +18 -2
- package/src/app/api/workflows/route.ts +13 -2
- package/src/app/documents/page.tsx +5 -1
- package/src/app/layout.tsx +0 -1
- package/src/app/manifest.ts +3 -3
- package/src/app/projects/[id]/page.tsx +62 -2
- package/src/app/settings/page.tsx +2 -0
- package/src/app/tables/[id]/page.tsx +67 -0
- package/src/app/tables/page.tsx +21 -0
- package/src/app/tables/templates/page.tsx +19 -0
- package/src/components/chat/chat-table-result.tsx +139 -0
- package/src/components/documents/document-browser.tsx +1 -1
- package/src/components/documents/document-chip-bar.tsx +17 -1
- package/src/components/documents/document-detail-view.tsx +51 -0
- package/src/components/documents/document-grid.tsx +5 -0
- package/src/components/documents/document-table.tsx +4 -0
- package/src/components/documents/types.ts +3 -0
- package/src/components/projects/project-form-sheet.tsx +109 -2
- package/src/components/schedules/schedule-form.tsx +91 -1
- package/src/components/settings/data-management-section.tsx +17 -12
- package/src/components/settings/database-snapshots-section.tsx +469 -0
- package/src/components/shared/app-sidebar.tsx +2 -0
- package/src/components/shared/document-picker-sheet.tsx +486 -0
- package/src/components/tables/table-browser.tsx +234 -0
- package/src/components/tables/table-cell-editor.tsx +226 -0
- package/src/components/tables/table-chart-builder.tsx +288 -0
- package/src/components/tables/table-chart-view.tsx +146 -0
- package/src/components/tables/table-column-header.tsx +103 -0
- package/src/components/tables/table-column-sheet.tsx +331 -0
- package/src/components/tables/table-create-sheet.tsx +240 -0
- package/src/components/tables/table-detail-sheet.tsx +144 -0
- package/src/components/tables/table-detail-tabs.tsx +278 -0
- package/src/components/tables/table-grid.tsx +61 -0
- package/src/components/tables/table-history-tab.tsx +148 -0
- package/src/components/tables/table-import-wizard.tsx +542 -0
- package/src/components/tables/table-list-table.tsx +95 -0
- package/src/components/tables/table-relation-combobox.tsx +217 -0
- package/src/components/tables/table-spreadsheet.tsx +499 -0
- package/src/components/tables/table-template-gallery.tsx +162 -0
- package/src/components/tables/table-template-preview.tsx +219 -0
- package/src/components/tables/table-toolbar.tsx +79 -0
- package/src/components/tables/table-triggers-tab.tsx +446 -0
- package/src/components/tables/types.ts +6 -0
- package/src/components/tables/use-spreadsheet-keys.ts +171 -0
- package/src/components/tables/utils.ts +29 -0
- package/src/components/tasks/task-card.tsx +8 -1
- package/src/components/tasks/task-create-panel.tsx +111 -14
- package/src/components/tasks/task-detail-view.tsx +47 -0
- package/src/components/tasks/task-edit-dialog.tsx +103 -2
- package/src/components/workflows/workflow-form-view.tsx +207 -7
- package/src/components/workflows/workflow-kanban-card.tsx +8 -1
- package/src/components/workflows/workflow-list.tsx +90 -45
- package/src/components/workflows/workflow-status-view.tsx +168 -23
- package/src/instrumentation.ts +3 -0
- package/src/lib/__tests__/npx-process-cwd.test.ts +17 -2
- package/src/lib/agents/__tests__/claude-agent.test.ts +5 -1
- package/src/lib/agents/claude-agent.ts +3 -1
- package/src/lib/agents/profiles/registry.ts +6 -3
- package/src/lib/agents/runtime/anthropic-direct.ts +29 -0
- package/src/lib/agents/runtime/openai-direct.ts +29 -0
- package/src/lib/book/__tests__/chapter-slugs.test.ts +80 -0
- package/src/lib/book/chapter-generator.ts +4 -19
- package/src/lib/book/chapter-mapping.ts +17 -0
- package/src/lib/book/content.ts +5 -16
- package/src/lib/book/update-detector.ts +3 -16
- package/src/lib/chat/engine.ts +1 -0
- package/src/lib/chat/stagent-tools.ts +2 -0
- package/src/lib/chat/system-prompt.ts +9 -1
- package/src/lib/chat/tool-catalog.ts +35 -0
- package/src/lib/chat/tools/settings-tools.ts +109 -0
- package/src/lib/chat/tools/table-tools.ts +955 -0
- package/src/lib/chat/tools/workflow-tools.ts +145 -2
- package/src/lib/constants/table-status.ts +68 -0
- package/src/lib/data/__tests__/clear.test.ts +1 -1
- package/src/lib/data/clear.ts +57 -0
- package/src/lib/data/seed-data/__tests__/profiles.test.ts +28 -23
- package/src/lib/data/seed-data/conversations.ts +350 -42
- package/src/lib/data/seed-data/documents.ts +564 -591
- package/src/lib/data/seed-data/learned-context.ts +101 -22
- package/src/lib/data/seed-data/notifications.ts +344 -70
- package/src/lib/data/seed-data/profile-test-results.ts +92 -11
- package/src/lib/data/seed-data/profiles.ts +144 -46
- package/src/lib/data/seed-data/projects.ts +50 -18
- package/src/lib/data/seed-data/repo-imports.ts +28 -13
- package/src/lib/data/seed-data/schedules.ts +208 -41
- package/src/lib/data/seed-data/table-templates.ts +234 -0
- package/src/lib/data/seed-data/tasks.ts +614 -116
- package/src/lib/data/seed-data/usage-ledger.ts +182 -103
- package/src/lib/data/seed-data/user-tables.ts +203 -0
- package/src/lib/data/seed-data/views.ts +52 -7
- package/src/lib/data/seed-data/workflows.ts +231 -84
- package/src/lib/data/seed.ts +55 -14
- package/src/lib/data/tables.ts +417 -0
- package/src/lib/db/bootstrap.ts +275 -0
- package/src/lib/db/index.ts +9 -0
- package/src/lib/db/migrations/0016_add_workflow_document_inputs.sql +13 -0
- package/src/lib/db/migrations/0017_add_document_picker_tables.sql +25 -0
- package/src/lib/db/migrations/0018_add_workflow_run_number.sql +2 -0
- package/src/lib/db/migrations/0019_add_tables_feature.sql +160 -0
- package/src/lib/db/migrations/0020_add_table_triggers.sql +19 -0
- package/src/lib/db/migrations/0021_add_row_history.sql +15 -0
- package/src/lib/db/schema.ts +445 -0
- package/src/lib/docs/reader.ts +2 -3
- package/src/lib/documents/context-builder.ts +75 -2
- package/src/lib/documents/document-resolver.ts +119 -0
- package/src/lib/documents/processors/spreadsheet.ts +2 -1
- package/src/lib/schedules/scheduler.ts +31 -1
- package/src/lib/snapshots/auto-backup.ts +132 -0
- package/src/lib/snapshots/retention.ts +64 -0
- package/src/lib/snapshots/snapshot-manager.ts +429 -0
- package/src/lib/tables/computed.ts +61 -0
- package/src/lib/tables/context-builder.ts +139 -0
- package/src/lib/tables/formula-engine.ts +415 -0
- package/src/lib/tables/history.ts +115 -0
- package/src/lib/tables/import.ts +343 -0
- package/src/lib/tables/query-builder.ts +152 -0
- package/src/lib/tables/trigger-evaluator.ts +146 -0
- package/src/lib/tables/types.ts +141 -0
- package/src/lib/tables/validation.ts +119 -0
- package/src/lib/utils/app-root.ts +20 -0
- package/src/lib/utils/stagent-paths.ts +20 -0
- package/src/lib/validators/__tests__/task.test.ts +43 -10
- package/src/lib/validators/task.ts +7 -1
- package/src/lib/workflows/blueprints/registry.ts +3 -3
- package/src/lib/workflows/engine.ts +24 -8
- package/src/lib/workflows/types.ts +14 -0
- package/tsconfig.json +3 -1
- package/public/icon.svg +0 -13
- package/src/components/tasks/file-upload.tsx +0 -120
- /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 -
|
|
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:
|
|
105
|
+
profileId: SAMPLE_PROFILE_IDS[1], // Content Production Editor
|
|
64
106
|
runtimeId: "claude-agent-sdk",
|
|
65
107
|
reportJson: JSON.stringify({
|
|
66
|
-
profileId:
|
|
108
|
+
profileId: SAMPLE_PROFILE_IDS[1],
|
|
67
109
|
runtimeId: "claude-agent-sdk",
|
|
68
110
|
results: [
|
|
69
111
|
{
|
|
70
|
-
task: "
|
|
112
|
+
task: "Write an SEO-optimized article outline for 'AI agent orchestration for small teams'",
|
|
71
113
|
passed: true,
|
|
72
|
-
matchedKeywords: ["
|
|
114
|
+
matchedKeywords: ["keyword", "outline", "heading", "SEO"],
|
|
73
115
|
},
|
|
74
116
|
{
|
|
75
|
-
task: "
|
|
117
|
+
task: "Create a distribution plan for a published blog post",
|
|
76
118
|
passed: true,
|
|
77
|
-
matchedKeywords: ["
|
|
119
|
+
matchedKeywords: ["LinkedIn", "newsletter", "distribution"],
|
|
78
120
|
},
|
|
79
121
|
{
|
|
80
|
-
task: "
|
|
122
|
+
task: "Research keyword clusters for a new topic area",
|
|
81
123
|
passed: true,
|
|
82
|
-
matchedKeywords: ["
|
|
124
|
+
matchedKeywords: ["keyword", "volume", "difficulty"],
|
|
83
125
|
},
|
|
84
126
|
{
|
|
85
|
-
task: "
|
|
127
|
+
task: "Edit an article draft for brand voice consistency",
|
|
86
128
|
passed: true,
|
|
87
|
-
matchedKeywords: ["
|
|
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://
|
|
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: "
|
|
31
|
+
name: "GTM Launch Strategist",
|
|
30
32
|
version: "1.0.0",
|
|
31
33
|
domain: "work",
|
|
32
|
-
tags: ["
|
|
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:
|
|
38
|
-
outputFormat: "
|
|
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: "
|
|
44
|
-
expectedKeywords: ["
|
|
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:
|
|
50
|
-
description:
|
|
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
|
-
#
|
|
59
|
+
# GTM Launch Strategist
|
|
54
60
|
|
|
55
|
-
You
|
|
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.
|
|
60
|
-
2.
|
|
61
|
-
3.
|
|
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: "
|
|
75
|
+
name: "Content Production Editor",
|
|
68
76
|
version: "1.0.0",
|
|
69
77
|
domain: "work",
|
|
70
|
-
tags: ["
|
|
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: "
|
|
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: "
|
|
82
|
-
expectedKeywords: ["
|
|
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:
|
|
88
|
-
description:
|
|
95
|
+
name: Content Production Editor
|
|
96
|
+
description: Runs the editorial pipeline from keyword research through publication and distribution.
|
|
89
97
|
---
|
|
90
98
|
|
|
91
|
-
#
|
|
99
|
+
# Content Production Editor
|
|
92
100
|
|
|
93
|
-
You
|
|
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.
|
|
98
|
-
2.
|
|
99
|
-
3.
|
|
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: "
|
|
115
|
+
name: "Customer Success Analyst",
|
|
106
116
|
version: "1.0.0",
|
|
107
|
-
domain: "
|
|
108
|
-
tags: ["
|
|
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: "
|
|
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: "
|
|
117
|
-
expectedKeywords: ["
|
|
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
|
|
123
|
-
description: Produces
|
|
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
|
|
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
|
|
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.
|
|
133
|
-
2.
|
|
134
|
-
3.
|
|
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: "
|
|
18
|
+
name: "Product Launch — AI Copilot v2",
|
|
18
19
|
description:
|
|
19
|
-
"
|
|
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 -
|
|
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: "
|
|
27
|
+
name: "Content Engine",
|
|
27
28
|
description:
|
|
28
|
-
"
|
|
29
|
+
"Weekly SEO articles, LinkedIn posts, and newsletter pipeline with agent-driven research and editorial",
|
|
29
30
|
status: "active",
|
|
30
|
-
createdAt: new Date(now -
|
|
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: "
|
|
36
|
+
name: "Customer Success Automation",
|
|
36
37
|
description:
|
|
37
|
-
"
|
|
38
|
+
"Onboarding sequences, churn risk detection, NPS monitoring, and support ticket triage",
|
|
38
39
|
status: "active",
|
|
39
|
-
createdAt: new Date(now -
|
|
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: "
|
|
47
|
+
name: "Client: TechVenture Partners",
|
|
45
48
|
description:
|
|
46
|
-
"
|
|
47
|
-
status: "
|
|
48
|
-
createdAt: new Date(now -
|
|
49
|
-
updatedAt: new Date(now -
|
|
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: "
|
|
56
|
+
name: "Client: GreenLeaf Commerce",
|
|
54
57
|
description:
|
|
55
|
-
"
|
|
58
|
+
"E-commerce client — product listing optimization, review sentiment monitoring, ad copy rotation",
|
|
56
59
|
status: "active",
|
|
57
|
-
createdAt: new Date(now -
|
|
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/
|
|
22
|
-
repoOwner: "
|
|
23
|
-
repoName: "
|
|
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-
|
|
28
|
-
"ext-
|
|
29
|
-
"ext-
|
|
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 -
|
|
33
|
+
createdAt: new Date(now - 21 * DAY),
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
id: crypto.randomUUID(),
|
|
37
|
-
repoUrl: "https://github.com/
|
|
38
|
-
repoOwner: "
|
|
39
|
-
repoName: "
|
|
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-
|
|
44
|
-
"ext-
|
|
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 -
|
|
63
|
+
createdAt: new Date(now - 10 * DAY),
|
|
49
64
|
},
|
|
50
65
|
];
|
|
51
66
|
}
|