@synap-core/workspace-templates 0.6.1 → 0.6.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synap-core/workspace-templates",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "type": "module",
5
5
  "packageManager": "pnpm@9.15.4",
6
6
  "description": "Canonical workspace definitions — YAML source + typed exports for browser, backend, CLI, and marketplace",
package/src/builder.yaml CHANGED
@@ -1258,6 +1258,27 @@ entityLinks:
1258
1258
  type: depends_on
1259
1259
  label: Depends on
1260
1260
 
1261
+ # Playbooks — session templates seeded with the workspace.
1262
+ # `subjectProfile` binds this playbook to the `devplane_feature` kind so the
1263
+ # Capture → Session matcher (playbooks.subject_profile->>'profileSlug') can offer
1264
+ # it when a feature/idea is captured. The captured feature is passed as the
1265
+ # `feature` entity param and substituted into the goalTemplate.
1266
+ playbooks:
1267
+ - name: Evaluate Feature
1268
+ description: Assess a feature — its current state, whether it's worth building, and how it fits the rest of the system.
1269
+ goalTemplate: >-
1270
+ Evaluate this feature ({feature}): where it stands today (its status,
1271
+ progress, and any blockers), whether it is actually useful (the problem it
1272
+ solves and for whom), and how it integrates with the existing apps,
1273
+ packages, services, and environments in this workspace. Finish with a clear
1274
+ recommendation — continue, cut, or reshape — and the reasoning behind it.
1275
+ subjectProfile:
1276
+ profileSlug: devplane_feature
1277
+ params:
1278
+ - { name: feature, type: entity, label: Feature, required: true }
1279
+ executor: is-agent
1280
+ status: active
1281
+
1261
1282
  onboarding:
1262
1283
  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.
1263
1284
  framing: >
@@ -473,6 +473,28 @@ entityLinks:
473
473
  type: sponsored_by
474
474
  label: Sponsor
475
475
 
476
+ # Playbooks — session templates seeded with the workspace.
477
+ # `subjectProfile` binds this playbook to the `post` kind so the Capture → Session
478
+ # matcher (playbooks.subject_profile->>'profileSlug') can offer it when a post is
479
+ # captured. The captured post is passed as the `post` entity param and substituted
480
+ # into the goalTemplate; the agent carries it from raw idea to a scheduled draft.
481
+ playbooks:
482
+ - name: Produce Content
483
+ description: Take a captured post idea and carry it from spark to a scheduled, platform-ready draft.
484
+ goalTemplate: >-
485
+ Produce content for {platform} from this idea ({post}). Take the raw idea,
486
+ shape it into a {format} draft with a scroll-stopping hook and a clear CTA,
487
+ keep it aligned to the post's pillar and the operator's brand voice, then
488
+ move it to Scheduled with a publish date.
489
+ subjectProfile:
490
+ profileSlug: post
491
+ params:
492
+ - { name: post, type: entity, label: Post, required: true }
493
+ - { name: platform, type: text, label: Platform, required: true }
494
+ - { name: format, type: text, label: Format }
495
+ executor: is-agent
496
+ status: active
497
+
476
498
  onboarding:
477
499
  goal: >
478
500
  Stand up the editorial engine — the pillars you're known for, the platforms
@@ -368,6 +368,35 @@ entityLinks:
368
368
  type: involves
369
369
  label: Involves
370
370
 
371
+ # Playbooks — session templates seeded with the workspace.
372
+ # Ported from the orphaned `deep-research.playbook.json` (CP templates/packs):
373
+ # same goalTemplate + companyContext param + is-agent executor + Web-Search /
374
+ # Entity-Creator grants + typed outputs (encoded via the {outputTypes} param).
375
+ # `subjectProfile` binds it to the shared `competitor` role so the Capture →
376
+ # Session matcher can offer it when a competitor is captured; the captured
377
+ # competitor is passed as the `competitor` entity param.
378
+ playbooks:
379
+ - name: Research Competitor
380
+ description: Deep-research a competitor and position it against us — strengths, weaknesses, pricing, and the gaps we can exploit.
381
+ goalTemplate: >-
382
+ Research this competitor ({competitor}) and compare them to us. Investigate
383
+ their {focus}: positioning, strengths, weaknesses, pricing, and recent
384
+ moves. Use the provided company context where relevant: {companyContext}.
385
+ Produce: {outputTypes}. Update the competitor entity with what you find and
386
+ make clear where we win and where we are exposed.
387
+ subjectProfile:
388
+ profileSlug: competitor
389
+ params:
390
+ - { name: competitor, type: entity, label: Competitor, required: true }
391
+ - { name: focus, type: text, label: Focus area, defaultValue: "product, pricing, and positioning" }
392
+ - { name: companyContext, type: text, label: Our company context }
393
+ - { name: outputTypes, type: text, label: Outputs, defaultValue: "a head-to-head comparison summary and an updated competitor profile" }
394
+ executor: is-agent
395
+ grants:
396
+ - Web Search
397
+ - Entity Creator
398
+ status: active
399
+
371
400
  onboarding:
372
401
  goal: >
373
402
  Map the real ecosystem — the key players (companies and people), who partners
@@ -10,6 +10,7 @@
10
10
  # • ecosystem — the market graph (partners, competitors, segments, trends)
11
11
  # • operations — how the company runs (the operational lens)
12
12
  # • crm — the pipeline (contacts, leads, clients, deals)
13
+ # • content-os — the editorial engine (pillars, posts, platforms, newsletters)
13
14
  #
14
15
  # It uses `require` (not `compose`): each constituent is a REAL workspace, not an
15
16
  # overlay. Deps-first resolution installs foundation first (the SSOT role
@@ -46,6 +47,10 @@ dependencies:
46
47
  kind: workspace
47
48
  relation: require
48
49
  reason: "The pipeline — contacts, leads, clients, and deals."
50
+ - slug: content-os
51
+ kind: workspace
52
+ relation: require
53
+ reason: "The editorial engine — pillars, posts, platforms, and newsletters — so the company's content operation is part of the operating core."
49
54
 
50
55
  workspace:
51
56
  name: Enterprise OS
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",
@@ -8558,6 +8578,37 @@ const DATA = {
8558
8578
  "label": "Sponsor"
8559
8579
  }
8560
8580
  ],
8581
+ "playbooks": [
8582
+ {
8583
+ "name": "Produce Content",
8584
+ "description": "Take a captured post idea and carry it from spark to a scheduled, platform-ready draft.",
8585
+ "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.",
8586
+ "subjectProfile": {
8587
+ "profileSlug": "post"
8588
+ },
8589
+ "params": [
8590
+ {
8591
+ "name": "post",
8592
+ "type": "entity",
8593
+ "label": "Post",
8594
+ "required": true
8595
+ },
8596
+ {
8597
+ "name": "platform",
8598
+ "type": "text",
8599
+ "label": "Platform",
8600
+ "required": true
8601
+ },
8602
+ {
8603
+ "name": "format",
8604
+ "type": "text",
8605
+ "label": "Format"
8606
+ }
8607
+ ],
8608
+ "executor": "is-agent",
8609
+ "status": "active"
8610
+ }
8611
+ ],
8561
8612
  "onboarding": {
8562
8613
  "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
8614
  "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",
@@ -11925,6 +11976,47 @@ const DATA = {
11925
11976
  "label": "Involves"
11926
11977
  }
11927
11978
  ],
11979
+ "playbooks": [
11980
+ {
11981
+ "name": "Research Competitor",
11982
+ "description": "Deep-research a competitor and position it against us — strengths, weaknesses, pricing, and the gaps we can exploit.",
11983
+ "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.",
11984
+ "subjectProfile": {
11985
+ "profileSlug": "competitor"
11986
+ },
11987
+ "params": [
11988
+ {
11989
+ "name": "competitor",
11990
+ "type": "entity",
11991
+ "label": "Competitor",
11992
+ "required": true
11993
+ },
11994
+ {
11995
+ "name": "focus",
11996
+ "type": "text",
11997
+ "label": "Focus area",
11998
+ "defaultValue": "product, pricing, and positioning"
11999
+ },
12000
+ {
12001
+ "name": "companyContext",
12002
+ "type": "text",
12003
+ "label": "Our company context"
12004
+ },
12005
+ {
12006
+ "name": "outputTypes",
12007
+ "type": "text",
12008
+ "label": "Outputs",
12009
+ "defaultValue": "a head-to-head comparison summary and an updated competitor profile"
12010
+ }
12011
+ ],
12012
+ "executor": "is-agent",
12013
+ "grants": [
12014
+ "Web Search",
12015
+ "Entity Creator"
12016
+ ],
12017
+ "status": "active"
12018
+ }
12019
+ ],
11928
12020
  "onboarding": {
11929
12021
  "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
12022
  "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 +12191,12 @@ const DATA = {
12099
12191
  "kind": "workspace",
12100
12192
  "relation": "require",
12101
12193
  "reason": "The pipeline — contacts, leads, clients, and deals."
12194
+ },
12195
+ {
12196
+ "slug": "content-os",
12197
+ "kind": "workspace",
12198
+ "relation": "require",
12199
+ "reason": "The editorial engine — pillars, posts, platforms, and newsletters — so the company's content operation is part of the operating core."
12102
12200
  }
12103
12201
  ],
12104
12202
  "workspace": {
package/src/types.ts CHANGED
@@ -299,6 +299,13 @@ export interface TemplatePlaybook {
299
299
  schedule?: { cron: string } | null;
300
300
  /** tool/skill keys this playbook grants. */
301
301
  grants?: string[];
302
+ /**
303
+ * The entity kind this playbook operates over, persisted to
304
+ * `playbooks.subject_profile`. Makes the playbook matchable by
305
+ * `playbooks.matchForEntity` (filters `subject_profile->>'profileSlug'`), so a
306
+ * captured entity of this kind can auto-launch the playbook as a session.
307
+ */
308
+ subjectProfile?: { profileSlug: string; filter?: Record<string, unknown> };
302
309
  status?: 'draft' | 'active' | 'paused';
303
310
  }
304
311