@synap-core/workspace-templates 0.5.0 → 0.6.1

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/types.d.ts DELETED
@@ -1,350 +0,0 @@
1
- /**
2
- * @synap-core/workspace-templates — Types
3
- *
4
- * Canonical shape of a workspace template.
5
- * YAML source files validate against these types.
6
- * Every consumer (browser, backend, CLI, marketplace) imports from here.
7
- */
8
- export type TemplateAppKind = 'native' | 'stored' | 'url';
9
- export interface TemplateAppRef {
10
- kind: TemplateAppKind;
11
- /** For kind='native': the appId registered in the browser manifest */
12
- appId?: string;
13
- /** For kind='native': how the platform renders the app */
14
- rendererType?: 'native' | 'external' | 'iframe-srcdoc';
15
- /** For kind='stored': the cell key registered in the cell registry */
16
- cellKey?: string;
17
- /** For kind='stored': default props passed to the cell */
18
- props?: Record<string, unknown>;
19
- /** For kind='url': external URL to open */
20
- url?: string;
21
- /** Human label */
22
- title?: string;
23
- }
24
- export interface TemplateProperty {
25
- slug: string;
26
- label: string;
27
- valueType: string;
28
- inputType?: string;
29
- placeholder?: string;
30
- enumValues?: string[];
31
- constraints?: Record<string, unknown>;
32
- targetProfileSlug?: string;
33
- }
34
- export interface TemplateProfile {
35
- slug: string;
36
- displayName: string;
37
- icon?: string;
38
- color?: string;
39
- description?: string;
40
- /** Visibility scope. Omit or "WORKSPACE" for workspace-scoped. */
41
- scope?: string;
42
- /** Semantic slug for system profiles. */
43
- semanticSlug?: string;
44
- properties: TemplateProperty[];
45
- }
46
- export interface TemplateView {
47
- name: string;
48
- slug?: string;
49
- type: string;
50
- scopeProfileSlug?: string;
51
- scopeProfileSlugs?: string[];
52
- config?: Record<string, unknown>;
53
- /** If true, this view auto-selected as the default view for this workspace */
54
- defaultView?: boolean;
55
- description?: string;
56
- groupBy?: string;
57
- }
58
- export interface TemplateEntityLink {
59
- sourceProfileSlug: string;
60
- targetProfileSlug: string;
61
- type: string;
62
- label?: string;
63
- }
64
- export interface TemplateSeedEntity {
65
- profileSlug: string;
66
- title: string;
67
- properties?: Record<string, unknown>;
68
- content?: string;
69
- }
70
- /**
71
- * Relations between seed entities, created on provisioning. `sourceRef`/
72
- * `targetRef` reference seed-entity titles (or refs) defined in `seedEntities`.
73
- * Mirrors `suggestedRelations` in synap-backend `create-workspace-from-definition.ts`.
74
- */
75
- export interface TemplateSuggestedRelation {
76
- sourceRef: string;
77
- targetRef: string;
78
- type: string;
79
- metadata?: Record<string, unknown>;
80
- }
81
- /**
82
- * Entity-card display templates. Mirrors `displayTemplates` in synap-backend
83
- * `create-workspace-from-definition.ts`.
84
- */
85
- export interface TemplateDisplayTemplate {
86
- name: string;
87
- description?: string;
88
- entityType?: string;
89
- targetType?: string;
90
- isDefault?: boolean;
91
- config: Record<string, unknown>;
92
- }
93
- export interface TemplateSidebarSurface {
94
- kind: 'cell' | 'view' | 'entity' | 'document' | 'channel' | 'app' | 'url';
95
- cellKey?: string;
96
- viewId?: string;
97
- viewName?: string;
98
- appId?: string;
99
- url?: string;
100
- rendererType?: 'native' | 'external' | 'iframe-srcdoc';
101
- placement?: 'main' | 'side' | 'floating' | 'modal' | 'popover' | 'embed';
102
- displayMode?: 'compact' | 'medium' | 'full';
103
- props?: Record<string, unknown>;
104
- title?: string;
105
- meta?: Record<string, unknown>;
106
- }
107
- export interface TemplateSidebarItem {
108
- kind: 'app' | 'view' | 'profile' | 'external' | 'cell';
109
- appId?: string;
110
- viewName?: string;
111
- viewId?: string;
112
- profileSlug?: string;
113
- url?: string;
114
- cellKey?: string;
115
- cellProps?: Record<string, unknown>;
116
- /** When present, bypasses kind-based dispatch — full surface control */
117
- surface?: TemplateSidebarSurface;
118
- label?: string;
119
- icon?: string;
120
- section?: string;
121
- matchUrls?: string[];
122
- }
123
- export interface TemplateLayoutConfig {
124
- pinnedApps?: string[];
125
- defaultView?: string;
126
- /** The first-screen app — auto-opened on workspace switch */
127
- defaultApp?: string | null;
128
- theme?: string;
129
- sidebarItems?: TemplateSidebarItem[];
130
- }
131
- export interface TemplateBentoBlock {
132
- kind: 'view' | 'widget';
133
- viewName?: string;
134
- widgetType?: string;
135
- pos: {
136
- x: number;
137
- y: number;
138
- w: number;
139
- h: number;
140
- };
141
- config?: Record<string, unknown>;
142
- overrides?: Record<string, unknown>;
143
- }
144
- export interface TemplateProfileEntityBentoTemplates {
145
- [profileSlug: string]: {
146
- blocks: Array<Record<string, unknown>>;
147
- };
148
- }
149
- export interface TemplateAutomation {
150
- name: string;
151
- description?: string;
152
- trigger: string;
153
- action: string;
154
- config?: Record<string, unknown>;
155
- }
156
- /** Mirrors `WorkspaceSourceRole` in synap-backend `schema/workspaces.ts`. */
157
- export type TemplateSourceRole = 'provider' | 'consumer' | 'provider-consumer';
158
- /** Mirrors `WorkspaceDefaultSource` in synap-backend `schema/workspaces.ts`. */
159
- export interface TemplateDefaultSource {
160
- /** The workspace id that supplies this capability domain. */
161
- workspaceId: string;
162
- /** The capability domain this source satisfies (e.g. "brand", "strategy"). */
163
- capability?: string;
164
- /** Optional profile slug the source resolves to. */
165
- profileSlug?: string;
166
- /** Human label for the source. */
167
- label?: string;
168
- }
169
- export interface TemplateOnboardingCollectTarget {
170
- /** Profile slug to populate (e.g. "audience", "competitor"). */
171
- profileSlug: string;
172
- /** Human description of what to capture for this target. */
173
- what: string;
174
- /** Roughly how many to expect — guides interview depth. */
175
- cardinality?: 'one' | 'few' | 'several';
176
- /** Key fields the agent should make sure to fill. */
177
- keyFields?: string[];
178
- }
179
- export interface TemplateOnboardingExpertise {
180
- /**
181
- * Concrete starting points the agent PROPOSES instead of asking blank —
182
- * "most X do Y, want that as a starting point?". Grounds the agent's
183
- * proposals in real domain knowledge (never fabricates strategy — for
184
- * mission/positioning these FRAME, they don't invent the answer).
185
- */
186
- starters?: string[];
187
- /**
188
- * Blind spots founders in this domain commonly miss. The agent proactively
189
- * surfaces these if the founder hasn't — catching what they don't say.
190
- */
191
- blindSpots?: string[];
192
- /** What a GREAT result looks like here — the bar the agent pushes toward. */
193
- bar?: string;
194
- }
195
- export interface TemplateOnboarding {
196
- /** The outcome this onboarding achieves, in one sentence. */
197
- goal: string;
198
- /** Domain framing/voice the agent adopts for THIS workspace (the persona). */
199
- framing: string;
200
- /**
201
- * Authored domain expertise the agent leads with (optional). Turns the
202
- * interview from "extract what the founder knows" into "resolve what they
203
- * lack". See the `onboard` skill's "Lead with your expertise" step.
204
- */
205
- expertise?: TemplateOnboardingExpertise;
206
- /** What structured data to collect (entities to create + their key fields). */
207
- collect: TemplateOnboardingCollectTarget[];
208
- /** A few opening questions — the agent adapts from here, never rigid. */
209
- openingQuestions?: string[];
210
- /** "Done" signal the agent self-evaluates against. */
211
- doneWhen?: string;
212
- }
213
- export interface TemplatePlaybookParam {
214
- name: string;
215
- type: 'text' | 'number' | 'entity' | 'choice' | 'boolean';
216
- label?: string;
217
- required?: boolean;
218
- defaultValue?: unknown;
219
- }
220
- export interface TemplatePlaybook {
221
- name: string;
222
- description?: string;
223
- goalTemplate: string;
224
- params?: TemplatePlaybookParam[];
225
- executor?: 'is-agent' | 'external-agent' | 'hybrid';
226
- inputStrategy?: 'none' | 'static' | 'rotating' | 'query';
227
- channelSpec?: {
228
- type: 'GROUP' | 'AGENT_COLLAB' | 'THREAD';
229
- members?: string[];
230
- aiReactionMode?: 'on_mention' | 'always' | 'never';
231
- };
232
- schedule?: {
233
- cron: string;
234
- } | null;
235
- /** tool/skill keys this playbook grants. */
236
- grants?: string[];
237
- status?: 'draft' | 'active' | 'paused';
238
- }
239
- export interface TemplateIntegration {
240
- /** Capability template key to install (matches a capability template). */
241
- templateKey: string;
242
- /** Override default params with {{var}} interpolation. */
243
- params?: Record<string, string>;
244
- /** "apply" (create+update) or "install" (create only). */
245
- mode?: 'apply' | 'install';
246
- }
247
- export interface TemplateExtendsRef {
248
- source: string;
249
- import?: {
250
- profiles?: string[];
251
- views?: string[];
252
- };
253
- }
254
- export interface TemplateMeta {
255
- slug: string;
256
- name: string;
257
- description: string;
258
- icon: string;
259
- color: string;
260
- tags?: string[];
261
- isPublic?: boolean;
262
- }
263
- export interface WorkspaceYaml {
264
- /** Template metadata — not sent to backend, used for listing/UI */
265
- meta: TemplateMeta;
266
- /** The workspace definition sent to createFromDefinition */
267
- workspace: {
268
- name: string;
269
- description: string;
270
- proposalId?: string;
271
- subtype?: string;
272
- /**
273
- * Workspace classifier — consumed by createFromDefinition (settings.workspaceType,
274
- * creator-role + agent-workspace behavior). Mirrors the backend union.
275
- */
276
- workspaceType?: 'personal' | 'agent' | 'project' | 'operational';
277
- visibility?: string;
278
- /** Capabilities this workspace provides (e.g. "brand.library", "content.pipeline") */
279
- capabilities?: string[];
280
- /**
281
- * Cross-workspace dependency roles.
282
- * E.g. { brand: "consumer", content: "provider" }
283
- * "consumer" = this workspace reads from another workspace of that capability
284
- * "provider" = this workspace provides that capability to others
285
- */
286
- sourceRoles?: Record<string, TemplateSourceRole>;
287
- /**
288
- * Pins which workspace supplies each capability domain for this workspace.
289
- * E.g. { brand: { workspaceId: "..." } } — read by the IS source resolver
290
- * (resolveBrandWorkspaceId / resolveFoundationWorkspaceId) before falling
291
- * back to provider role. Usually set at runtime, not in a template, but
292
- * carried here so it round-trips through the canonical seam.
293
- */
294
- defaultSources?: Record<string, TemplateDefaultSource>;
295
- };
296
- /** Entity profiles — the data schema */
297
- profiles: TemplateProfile[];
298
- /** Curated views — only the ones that add value */
299
- views?: TemplateView[];
300
- /** Schema-level links between entity types */
301
- entityLinks?: TemplateEntityLink[];
302
- /** Initial data to seed on workspace creation */
303
- seedEntities?: TemplateSeedEntity[];
304
- /** Relations between seed entities, created on provisioning */
305
- suggestedRelations?: TemplateSuggestedRelation[];
306
- /** Entity-card display templates */
307
- displayTemplates?: TemplateDisplayTemplate[];
308
- /** App reference — what opens as first screen */
309
- app?: TemplateAppRef;
310
- /** Browser sidebar + layout config */
311
- layout?: TemplateLayoutConfig;
312
- /** Bento dashboard */
313
- bento?: {
314
- viewName?: string;
315
- blocks?: TemplateBentoBlock[];
316
- };
317
- /** Per-profile entity bento layouts */
318
- profileEntityBentoTemplates?: TemplateProfileEntityBentoTemplates;
319
- /** Automations to install on workspace creation */
320
- automations?: TemplateAutomation[];
321
- /** Playbooks (session templates) seeded with the workspace */
322
- playbooks?: TemplatePlaybook[];
323
- /** Capability templates (tools/connectors) to install on provisioning */
324
- integrations?: TemplateIntegration[];
325
- /**
326
- * Per-workspace onboarding context. Written to workspace.settings.onboarding
327
- * and read by the shared `onboard` skill to run a domain-specific adaptive
328
- * interview — no per-domain skill file needed.
329
- */
330
- onboarding?: TemplateOnboarding;
331
- /** Inherit profiles/views from other workspaces */
332
- extends?: TemplateExtendsRef[];
333
- }
334
- export interface ResolvedWorkspaceTemplate {
335
- meta: TemplateMeta;
336
- definition: WorkspaceYaml['workspace'] & {
337
- profiles: TemplateProfile[];
338
- views: TemplateView[];
339
- entityLinks: TemplateEntityLink[];
340
- seedEntities: TemplateSeedEntity[];
341
- app: TemplateAppRef | null;
342
- layoutConfig: TemplateLayoutConfig | null;
343
- bentoViewName?: string;
344
- bentoViewBlocks?: TemplateBentoBlock[];
345
- profileEntityBentoTemplates?: TemplateProfileEntityBentoTemplates;
346
- automations: TemplateAutomation[];
347
- extends?: TemplateExtendsRef[];
348
- };
349
- }
350
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * @synap-core/workspace-templates — Types
3
- *
4
- * Canonical shape of a workspace template.
5
- * YAML source files validate against these types.
6
- * Every consumer (browser, backend, CLI, marketplace) imports from here.
7
- */
8
- export {};
package/src/radar.yaml DELETED
@@ -1,297 +0,0 @@
1
- # Radar workspace template
2
- # The EXTERNAL WORLD: competitors, market segments, trends, and inspirations.
3
- # Feeds the Foundation (positioning/audience evidence) and the CRM (segments).
4
-
5
- meta:
6
- slug: radar
7
- name: Radar
8
- description: Track the outside world — competitors, market segments, trends, and inspirations — that informs strategy.
9
- icon: radar
10
- color: "#0891B2"
11
- tags: [market, competitors, research, trends]
12
- isPublic: true
13
-
14
- workspace:
15
- name: Radar
16
- description: Track the outside world — competitors, market segments, trends, and inspirations — that informs strategy.
17
- proposalId: radar-v1
18
- subtype: radar
19
- visibility: pod_visible
20
- capabilities:
21
- - radar.signals
22
- sourceRoles:
23
- radar: provider
24
-
25
- profiles:
26
- - slug: competitor
27
- displayName: Competitor
28
- icon: crosshair
29
- color: red
30
- description: A rival or alternative a buyer would compare you to.
31
- properties:
32
- - slug: positioning
33
- label: Positioning
34
- valueType: string
35
- inputType: textarea
36
- - slug: strengths
37
- label: Strengths
38
- valueType: string
39
- inputType: textarea
40
- - slug: weaknesses
41
- label: Weaknesses
42
- valueType: string
43
- inputType: textarea
44
- - slug: pricing
45
- label: Pricing
46
- valueType: string
47
- inputType: text
48
- - slug: url
49
- label: URL
50
- valueType: string
51
- inputType: url
52
- - slug: status
53
- label: Status
54
- valueType: string
55
- inputType: select
56
- enumValues: [watching, active-threat, adjacent, archived]
57
- constraints: { defaultValue: watching }
58
-
59
- - slug: market-segment
60
- displayName: Market Segment
61
- icon: pie-chart
62
- color: blue
63
- description: A slice of the market with its own size, maturity, and dynamics.
64
- properties:
65
- - slug: description
66
- label: Description
67
- valueType: string
68
- inputType: textarea
69
- - slug: tam
70
- label: TAM
71
- valueType: string
72
- inputType: text
73
- - slug: sam
74
- label: SAM
75
- valueType: string
76
- inputType: text
77
- - slug: som
78
- label: SOM
79
- valueType: string
80
- inputType: text
81
- - slug: ocean
82
- label: Ocean
83
- valueType: string
84
- inputType: select
85
- enumValues: [blue, red]
86
- - slug: maturity
87
- label: Maturity
88
- valueType: string
89
- inputType: select
90
- enumValues: [emerging, growing, mature, declining]
91
-
92
- - slug: trend
93
- displayName: Trend
94
- icon: trending-up
95
- color: violet
96
- description: A directional shift in the market, tech, or behavior worth tracking.
97
- properties:
98
- - slug: description
99
- label: Description
100
- valueType: string
101
- inputType: textarea
102
- - slug: direction
103
- label: Direction
104
- valueType: string
105
- inputType: select
106
- enumValues: [rising, steady, fading]
107
- - slug: sources
108
- label: Sources
109
- valueType: array
110
- inputType: text
111
- - slug: relevance
112
- label: Relevance
113
- valueType: string
114
- inputType: select
115
- enumValues: [low, medium, high]
116
- constraints: { defaultValue: medium }
117
-
118
- - slug: inspiration
119
- displayName: Inspiration
120
- icon: sparkles
121
- color: amber
122
- description: A brand, founder, product, or campaign worth learning from.
123
- properties:
124
- - slug: kind
125
- label: Kind
126
- valueType: string
127
- inputType: select
128
- enumValues: [brand, founder, product, campaign]
129
- - slug: why
130
- label: Why
131
- valueType: string
132
- inputType: textarea
133
- - slug: url
134
- label: URL
135
- valueType: string
136
- inputType: url
137
-
138
- views:
139
- - name: Competitors
140
- slug: competitors
141
- type: table
142
- scopeProfileSlug: competitor
143
- description: Rivals and alternatives, with positioning and threat status.
144
- defaultView: true
145
- config:
146
- columns: [title, positioning, status, pricing, url]
147
- - name: Market Segments
148
- slug: market-segments
149
- type: kanban
150
- scopeProfileSlug: market-segment
151
- groupBy: ocean
152
- description: Market slices grouped by blue/red ocean.
153
- config:
154
- groupBy: ocean
155
- cardFields: [tam, maturity]
156
- - name: Trends
157
- slug: trends
158
- type: table
159
- scopeProfileSlug: trend
160
- description: Directional shifts to track, by relevance.
161
- config:
162
- columns: [title, direction, relevance, description]
163
- - name: Inspirations
164
- slug: inspirations
165
- type: grid
166
- scopeProfileSlug: inspiration
167
- description: Brands, founders, products, and campaigns to learn from.
168
- - name: Radar Map
169
- slug: radar-map
170
- type: graph
171
- scopeProfileSlugs: [competitor, market-segment, trend, inspiration]
172
- description: The landscape as a connected map of signals.
173
-
174
- # Schema-level relations — give the Radar Map and the relation picker
175
- # domain-specific links from day one (not just pod defaults).
176
- entityLinks:
177
- - sourceProfileSlug: competitor
178
- targetProfileSlug: market-segment
179
- type: competes_in
180
- label: Competes in
181
- - sourceProfileSlug: trend
182
- targetProfileSlug: market-segment
183
- type: shapes
184
- label: Shapes
185
-
186
- onboarding:
187
- goal: Map the competitive and market landscape so strategy is grounded in the real outside world.
188
- framing: |
189
- THE SCOUT: Act as a sharp market scout. Curious, factual, neutral. Surface who
190
- else plays here, where the market is moving, and who's worth learning from.
191
- Always cite a source when you can.
192
- expertise:
193
- starters:
194
- - >
195
- Don't just log named rivals — map the CATEGORY. Buyers compare across three
196
- tiers: direct competitors, adjacent tools that solve the same job
197
- differently, and the status quo ("a spreadsheet", "do nothing"). Propose
198
- entries in all three, because the status quo is usually the real competitor.
199
- - >
200
- Track positioning by CONTRAST, not features. For each rival, capture the
201
- one axis where you're deliberately opposite ("they're enterprise-heavy, we're
202
- self-serve") — that contrast is what a buyer remembers. If they only give you
203
- a feature list, reflect the underlying axis back and propose that.
204
- - >
205
- Separate LEADING from LAGGING signals. Pricing changes, hiring sprees, and
206
- docs/changelog velocity predict where a competitor is going; press releases
207
- and funding rounds only confirm where they've been. Prioritize the leading
208
- indicators when you propose what to watch.
209
- blindSpots:
210
- - >
211
- "We have no competitors" is a red flag, not a moat — it usually means the
212
- category is undefined or the buyer's alternative (a manual workaround) hasn't
213
- been named. Push to name what a buyer does TODAY instead of buying anything.
214
- - >
215
- Founders over-watch the loud incumbent and miss the fast-moving insurgent
216
- one tier down. The threat that kills you is rarely the market leader — it's
217
- the well-funded startup attacking your exact wedge. Surface the insurgents.
218
- - >
219
- A trend with no direction or timing is just a headline. Every trend needs a
220
- stance: is it rising, steady, or fading, and does it help or hurt you? An
221
- untimed "AI is big" tells strategy nothing — force the "so what for us".
222
- bar: >
223
- The landscape reads like a real map: every rival placed on a contrast axis, the
224
- status-quo alternative named, and each trend carrying a direction and a "so what"
225
- — so a strategist can see the open lane you should own, not just a list of logos.
226
- collect:
227
- - profileSlug: competitor
228
- what: Rivals and alternatives a buyer would seriously compare you to.
229
- cardinality: several
230
- keyFields: [positioning, strengths]
231
- - profileSlug: market-segment
232
- what: The market slices you play in, with rough size and ocean.
233
- cardinality: few
234
- keyFields: [tam, ocean]
235
- - profileSlug: trend
236
- what: Directional shifts in tech, market, or behavior that affect you.
237
- cardinality: several
238
- keyFields: [direction, relevance]
239
- - profileSlug: inspiration
240
- what: Brands, founders, products, or campaigns worth learning from.
241
- cardinality: few
242
- keyFields: [kind, why]
243
- openingQuestions:
244
- - "Who are the 3 closest alternatives a buyer would compare you to?"
245
- - "Which market segment matters most to you right now — and is it a blue or red ocean?"
246
- - "What's one trend that's quietly reshaping your space?"
247
- doneWhen: At least 3 competitors + 1 market segment + 2 trends captured.
248
-
249
- app:
250
- kind: stored
251
- cellKey: entity-detail
252
-
253
- layout:
254
- defaultView: Competitors
255
- defaultApp: null
256
- pinnedApps: [dashboard, data, chat]
257
- sidebarItems:
258
- - kind: view
259
- viewName: Competitors
260
- label: Competitors
261
- icon: crosshair
262
- - kind: view
263
- viewName: Market Segments
264
- label: Segments
265
- icon: pie-chart
266
- - kind: view
267
- viewName: Trends
268
- label: Trends
269
- icon: trending-up
270
- - kind: view
271
- viewName: Inspirations
272
- label: Inspirations
273
- icon: sparkles
274
- - kind: view
275
- viewName: Radar Map
276
- label: Radar Map
277
- icon: radar
278
- - kind: app
279
- appId: data
280
- label: Data
281
- icon: database
282
-
283
- bento:
284
- viewName: Radar Command Center
285
- blocks:
286
- - kind: view
287
- viewName: Competitors
288
- pos: { x: 0, y: 0, w: 7, h: 4 }
289
- - kind: view
290
- viewName: Trends
291
- pos: { x: 7, y: 0, w: 5, h: 4 }
292
- - kind: view
293
- viewName: Market Segments
294
- pos: { x: 0, y: 4, w: 6, h: 4 }
295
- - kind: view
296
- viewName: Inspirations
297
- pos: { x: 6, y: 4, w: 6, h: 4 }