@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/dist/index.d.ts +10 -0
- package/dist/index.js +98 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/builder.yaml +21 -0
- package/src/content-os.yaml +22 -0
- package/src/ecosystem.yaml +29 -0
- package/src/enterprise-os.yaml +5 -0
- package/src/templates.ts +98 -0
- package/src/types.ts +7 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@synap-core/workspace-templates",
|
|
3
|
-
"version": "0.6.
|
|
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: >
|
package/src/content-os.yaml
CHANGED
|
@@ -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
|
package/src/ecosystem.yaml
CHANGED
|
@@ -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
|
package/src/enterprise-os.yaml
CHANGED
|
@@ -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
|
|