@synap-core/workspace-templates 0.6.1 → 0.6.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/src/templates.ts CHANGED
@@ -6514,6 +6514,26 @@ const DATA = {
6514
6514
  "label": "Depends on"
6515
6515
  }
6516
6516
  ],
6517
+ "playbooks": [
6518
+ {
6519
+ "name": "Evaluate Feature",
6520
+ "description": "Assess a feature — its current state, whether it's worth building, and how it fits the rest of the system.",
6521
+ "goalTemplate": "Evaluate this feature ({feature}): where it stands today (its status, progress, and any blockers), whether it is actually useful (the problem it solves and for whom), and how it integrates with the existing apps, packages, services, and environments in this workspace. Finish with a clear recommendation — continue, cut, or reshape — and the reasoning behind it.",
6522
+ "subjectProfile": {
6523
+ "profileSlug": "devplane_feature"
6524
+ },
6525
+ "params": [
6526
+ {
6527
+ "name": "feature",
6528
+ "type": "entity",
6529
+ "label": "Feature",
6530
+ "required": true
6531
+ }
6532
+ ],
6533
+ "executor": "is-agent",
6534
+ "status": "active"
6535
+ }
6536
+ ],
6517
6537
  "onboarding": {
6518
6538
  "goal": "Capture the real engineering surface — the apps that are shipped, where their code lives, what runs behind them, where they deploy, and what's in flight — so the workspace mirrors what the team actually builds and runs, not a generic template.",
6519
6539
  "framing": "THE STAFF ENGINEER: Act as a pragmatic, precise staff/platform engineer standing up a developer command center. Tease out what's actually shipped vs. planned, where the code lives (repos + local paths), what runs behind each app, where it deploys, and what's on the bench right now. Prefer concrete over aspirational — a repo URL beats a wish. Tie the roadmap back to the Foundation's mission and audiences: the surface exists to serve them.\n",
@@ -8452,6 +8472,16 @@ const DATA = {
8452
8472
  "groupBy": "post-status",
8453
8473
  "description": "Content posts by status."
8454
8474
  },
8475
+ {
8476
+ "name": "Content Calendar",
8477
+ "slug": "content-calendar",
8478
+ "type": "calendar",
8479
+ "scopeProfileSlug": "post",
8480
+ "description": "Your editorial calendar — every post on the day it publishes.",
8481
+ "config": {
8482
+ "dateField": "properties.publish-date"
8483
+ }
8484
+ },
8455
8485
  {
8456
8486
  "name": "Pillars",
8457
8487
  "slug": "content-pillars",
@@ -8493,6 +8523,12 @@ const DATA = {
8493
8523
  "label": "Posts",
8494
8524
  "icon": "file-edit"
8495
8525
  },
8526
+ {
8527
+ "kind": "view",
8528
+ "viewName": "Content Calendar",
8529
+ "label": "Calendar",
8530
+ "icon": "calendar"
8531
+ },
8496
8532
  {
8497
8533
  "kind": "view",
8498
8534
  "viewName": "Pillars",
@@ -8518,10 +8554,20 @@ const DATA = {
8518
8554
  "blocks": [
8519
8555
  {
8520
8556
  "kind": "view",
8521
- "viewName": "Pillars",
8557
+ "viewName": "Content Calendar",
8522
8558
  "pos": {
8523
8559
  "x": 0,
8524
8560
  "y": 0,
8561
+ "w": 12,
8562
+ "h": 6
8563
+ }
8564
+ },
8565
+ {
8566
+ "kind": "view",
8567
+ "viewName": "Pillars",
8568
+ "pos": {
8569
+ "x": 0,
8570
+ "y": 6,
8525
8571
  "w": 6,
8526
8572
  "h": 5
8527
8573
  }
@@ -8531,7 +8577,7 @@ const DATA = {
8531
8577
  "viewName": "Newsletters",
8532
8578
  "pos": {
8533
8579
  "x": 6,
8534
- "y": 0,
8580
+ "y": 6,
8535
8581
  "w": 6,
8536
8582
  "h": 5
8537
8583
  }
@@ -8558,6 +8604,37 @@ const DATA = {
8558
8604
  "label": "Sponsor"
8559
8605
  }
8560
8606
  ],
8607
+ "playbooks": [
8608
+ {
8609
+ "name": "Produce Content",
8610
+ "description": "Take a captured post idea and carry it from spark to a scheduled, platform-ready draft.",
8611
+ "goalTemplate": "Produce content for {platform} from this idea ({post}). Take the raw idea, shape it into a {format} draft with a scroll-stopping hook and a clear CTA, keep it aligned to the post's pillar and the operator's brand voice, then move it to Scheduled with a publish date.",
8612
+ "subjectProfile": {
8613
+ "profileSlug": "post"
8614
+ },
8615
+ "params": [
8616
+ {
8617
+ "name": "post",
8618
+ "type": "entity",
8619
+ "label": "Post",
8620
+ "required": true
8621
+ },
8622
+ {
8623
+ "name": "platform",
8624
+ "type": "text",
8625
+ "label": "Platform",
8626
+ "required": true
8627
+ },
8628
+ {
8629
+ "name": "format",
8630
+ "type": "text",
8631
+ "label": "Format"
8632
+ }
8633
+ ],
8634
+ "executor": "is-agent",
8635
+ "status": "active"
8636
+ }
8637
+ ],
8561
8638
  "onboarding": {
8562
8639
  "goal": "Stand up the editorial engine — the pillars you're known for, the platforms you publish on, the cadence you can actually sustain, and a first post placed in the system — so the workspace mirrors how you turn thinking into published content, not a blank calendar.\n",
8563
8640
  "framing": "THE EDITOR-IN-CHIEF: Act as a seasoned content strategist who has grown owned audiences from zero. Anchor everything on PILLARS — the two-to-four recurring themes an audience comes to you for — because pillars are what make a content engine compound instead of drift. Pull voice and identity from Brand and the target audience from Foundation so every piece lands on-strategy. Push for a cadence they can hold for a year, not a heroic month. Be concrete: real platforms, real formats, a real first post — a fuzzy \"I'll post more\" helps no one.\n",
@@ -9678,6 +9755,62 @@ const DATA = {
9678
9755
  "targetProfileSlug": "deal",
9679
9756
  "type": "linked_to_deal"
9680
9757
  }
9758
+ ],
9759
+ "playbooks": [
9760
+ {
9761
+ "name": "Enrich this lead",
9762
+ "description": "Take a thin, freshly-captured lead and fill it out — company, title, LinkedIn, and the relationships around it.",
9763
+ "goalTemplate": "Enrich this lead ({lead}). Starting from whatever is known, fill out the missing detail — company, job title, LinkedIn URL, location, and the people and companies around them — and record it on the lead. Draw on whatever enrichment capability this workspace has connected (e.g. an Apify or Unipile/LinkedIn tool); if none is available, enrich from the public web and what is already in the pod. Link the lead to its company and any related contacts, and note where information is still missing.",
9764
+ "subjectProfile": {
9765
+ "profileSlug": "lead"
9766
+ },
9767
+ "params": [
9768
+ {
9769
+ "name": "lead",
9770
+ "type": "entity",
9771
+ "label": "Lead",
9772
+ "required": true
9773
+ }
9774
+ ],
9775
+ "executor": "is-agent",
9776
+ "status": "active"
9777
+ },
9778
+ {
9779
+ "name": "Qualify this lead",
9780
+ "description": "Assess a lead against the ICP, score the fit, and decide the next step — advance, nurture, or disqualify.",
9781
+ "goalTemplate": "Qualify this lead ({lead}). Assess how well they fit our ideal customer profile — company, role, industry, size, and the signals of intent or need — and set an ICP score. Decide the next step: advance them toward a deal, keep nurturing, or disqualify. Write the reasoning and the decision back onto the lead (its stage, score, and next step) so the call is auditable.",
9782
+ "subjectProfile": {
9783
+ "profileSlug": "lead"
9784
+ },
9785
+ "params": [
9786
+ {
9787
+ "name": "lead",
9788
+ "type": "entity",
9789
+ "label": "Lead",
9790
+ "required": true
9791
+ }
9792
+ ],
9793
+ "executor": "is-agent",
9794
+ "status": "active"
9795
+ },
9796
+ {
9797
+ "name": "Work this deal",
9798
+ "description": "Move a deal toward Won — read the current stage, find the blocker, and propose the next step and owner.",
9799
+ "goalTemplate": "Work this deal ({deal}) toward Won. Assess where it stands — its current stage, value, and close date — and identify the single thing blocking it from advancing. Propose the concrete next step, who owns it, and by when, and update the deal's next step accordingly. If the stage should change, say so and why.",
9800
+ "subjectProfile": {
9801
+ "profileSlug": "deal"
9802
+ },
9803
+ "params": [
9804
+ {
9805
+ "name": "deal",
9806
+ "type": "entity",
9807
+ "label": "Deal",
9808
+ "required": true
9809
+ }
9810
+ ],
9811
+ "executor": "is-agent",
9812
+ "status": "active"
9813
+ }
9681
9814
  ]
9682
9815
  },
9683
9816
  "dev-dashboard": {
@@ -11925,6 +12058,79 @@ const DATA = {
11925
12058
  "label": "Involves"
11926
12059
  }
11927
12060
  ],
12061
+ "playbooks": [
12062
+ {
12063
+ "name": "Research Competitor",
12064
+ "description": "Deep-research a competitor and position it against us — strengths, weaknesses, pricing, and the gaps we can exploit.",
12065
+ "goalTemplate": "Research this competitor ({competitor}) and compare them to us. Investigate their {focus}: positioning, strengths, weaknesses, pricing, and recent moves. Use the provided company context where relevant: {companyContext}. Produce: {outputTypes}. Update the competitor entity with what you find and make clear where we win and where we are exposed.",
12066
+ "subjectProfile": {
12067
+ "profileSlug": "competitor"
12068
+ },
12069
+ "params": [
12070
+ {
12071
+ "name": "competitor",
12072
+ "type": "entity",
12073
+ "label": "Competitor",
12074
+ "required": true
12075
+ },
12076
+ {
12077
+ "name": "focus",
12078
+ "type": "text",
12079
+ "label": "Focus area",
12080
+ "defaultValue": "product, pricing, and positioning"
12081
+ },
12082
+ {
12083
+ "name": "companyContext",
12084
+ "type": "text",
12085
+ "label": "Our company context"
12086
+ },
12087
+ {
12088
+ "name": "outputTypes",
12089
+ "type": "text",
12090
+ "label": "Outputs",
12091
+ "defaultValue": "a head-to-head comparison summary and an updated competitor profile"
12092
+ }
12093
+ ],
12094
+ "executor": "is-agent",
12095
+ "schedule": {
12096
+ "cron": "0 9 * * 1",
12097
+ "enabled": false
12098
+ },
12099
+ "grants": [
12100
+ "Web Search",
12101
+ "Entity Creator"
12102
+ ],
12103
+ "status": "active"
12104
+ },
12105
+ {
12106
+ "name": "Discover Competitors",
12107
+ "description": "Scan the market for competitors we don't track yet and add them to the ecosystem — the self-generating half of the radar.",
12108
+ "goalTemplate": "Find companies that compete with us in {ourSpace}. Use neural web search (the exa_search skill with category \"company\") to surface real, named companies — direct competitors, adjacent tools that solve the same job a different way, and emerging players. For each genuinely NEW one (not already a competitor in our ecosystem), propose it as a `competitor` entity and ALWAYS include its `website` (its canonical URL) so it de-duplicates against what we already track — never create a company that already exists. Skip anything already known. Report what you added and why each one matters.",
12109
+ "schedule": {
12110
+ "cron": "0 9 * * 1",
12111
+ "enabled": false
12112
+ },
12113
+ "params": [
12114
+ {
12115
+ "name": "ourSpace",
12116
+ "type": "text",
12117
+ "label": "Our market / category",
12118
+ "required": true
12119
+ }
12120
+ ],
12121
+ "executor": "is-agent",
12122
+ "grants": [
12123
+ "exa_search",
12124
+ "Entity Creator"
12125
+ ],
12126
+ "status": "active"
12127
+ }
12128
+ ],
12129
+ "integrations": [
12130
+ {
12131
+ "templateKey": "exa"
12132
+ }
12133
+ ],
11928
12134
  "onboarding": {
11929
12135
  "goal": "Map the real ecosystem — the key players (companies and people), who partners and competes with whom, and the segments and trends that matter — so strategy is grounded in the actual market, not a vague \"the market\".\n",
11930
12136
  "framing": "THE ECOSYSTEM LEAD: Act as a sharp ecosystem lead who maps the market\nlandscape AND the relationships inside it. Push for REAL named players — not\n\"the incumbents\", but the actual companies — and for the concrete edges\nbetween them: who partners with whom, who competes, who invested in whom.\nA map with no edges is just a list; the value is in the relationships.\n",
@@ -12099,6 +12305,12 @@ const DATA = {
12099
12305
  "kind": "workspace",
12100
12306
  "relation": "require",
12101
12307
  "reason": "The pipeline — contacts, leads, clients, and deals."
12308
+ },
12309
+ {
12310
+ "slug": "content-os",
12311
+ "kind": "workspace",
12312
+ "relation": "require",
12313
+ "reason": "The editorial engine — pillars, posts, platforms, and newsletters — so the company's content operation is part of the operating core."
12102
12314
  }
12103
12315
  ],
12104
12316
  "workspace": {
package/src/types.ts CHANGED
@@ -176,18 +176,6 @@ export interface TemplateProfileEntityBentoTemplates {
176
176
  };
177
177
  }
178
178
 
179
- // ============================================================================
180
- // Automations
181
- // ============================================================================
182
-
183
- export interface TemplateAutomation {
184
- name: string;
185
- description?: string;
186
- trigger: string;
187
- action: string;
188
- config?: Record<string, unknown>;
189
- }
190
-
191
179
  // ============================================================================
192
180
  // Cross-workspace source pinning
193
181
  // ============================================================================
@@ -299,6 +287,13 @@ export interface TemplatePlaybook {
299
287
  schedule?: { cron: string } | null;
300
288
  /** tool/skill keys this playbook grants. */
301
289
  grants?: string[];
290
+ /**
291
+ * The entity kind this playbook operates over, persisted to
292
+ * `playbooks.subject_profile`. Makes the playbook matchable by
293
+ * `playbooks.matchForEntity` (filters `subject_profile->>'profileSlug'`), so a
294
+ * captured entity of this kind can auto-launch the playbook as a session.
295
+ */
296
+ subjectProfile?: { profileSlug: string; filter?: Record<string, unknown> };
302
297
  status?: 'draft' | 'active' | 'paused';
303
298
  }
304
299
 
@@ -508,9 +503,6 @@ export interface WorkspaceYaml {
508
503
  /** Per-profile entity bento layouts */
509
504
  profileEntityBentoTemplates?: TemplateProfileEntityBentoTemplates;
510
505
 
511
- /** Automations to install on workspace creation */
512
- automations?: TemplateAutomation[];
513
-
514
506
  /** Playbooks (session templates) seeded with the workspace */
515
507
  playbooks?: TemplatePlaybook[];
516
508
 
@@ -552,7 +544,6 @@ export interface ResolvedWorkspaceTemplate {
552
544
  bentoViewName?: string;
553
545
  bentoViewBlocks?: TemplateBentoBlock[];
554
546
  profileEntityBentoTemplates?: TemplateProfileEntityBentoTemplates;
555
- automations: TemplateAutomation[];
556
547
  extends?: TemplateExtendsRef[];
557
548
  };
558
549
  }