@specverse/engines 5.1.0 → 5.2.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/assets/prompts/core/standard/default/analyse.prompt.yaml +5 -5
- package/assets/prompts/core/standard/default/app-demo.prompt.yaml +21 -1
- package/assets/prompts/core/standard/default/behavior.prompt.yaml +150 -0
- package/assets/prompts/core/standard/default/create.prompt.yaml +3 -3
- package/assets/prompts/core/standard/default/materialise.prompt.yaml +804 -774
- package/assets/prompts/core/standard/default/realize.prompt.yaml +581 -544
- package/assets/prompts/core/standard/v9/analyse.prompt.yaml +5 -5
- package/assets/prompts/core/standard/v9/app-demo.prompt.yaml +233 -0
- package/assets/prompts/core/standard/v9/behavior.prompt.yaml +33 -9
- package/assets/prompts/core/standard/v9/create.prompt.yaml +3 -3
- package/assets/prompts/core/standard/v9/materialise.prompt.yaml +804 -774
- package/assets/prompts/core/standard/v9/realize.prompt.yaml +581 -544
- package/dist/libs/instance-factories/cli/templates/commander/command-generator.js +184 -0
- package/dist/libs/instance-factories/tools/templates/mcp/mcp-server-generator.js +289 -15
- package/libs/instance-factories/cli/templates/commander/command-generator.ts +184 -0
- package/libs/instance-factories/tools/templates/mcp/mcp-server-generator.ts +322 -16
- package/package.json +1 -1
- package/assets/prompts/core/CHANGELOG.md +0 -158
- package/assets/prompts/core/MIGRATION-v6-to-v7.md +0 -379
- package/assets/prompts/core/base-terminal-prompt.md +0 -201
- package/assets/prompts/core/examples/example-usage.ts +0 -140
- package/assets/prompts/core/schemas/prompt.schema.json +0 -309
- package/assets/prompts/core/schemas/prompt.schema.yaml +0 -229
- package/assets/prompts/core/standard/archive/v1/analyse.prompt.yaml +0 -259
- package/assets/prompts/core/standard/archive/v1/create.prompt.yaml +0 -302
- package/assets/prompts/core/standard/archive/v1/materialise.prompt.yaml +0 -328
- package/assets/prompts/core/standard/archive/v1/realize.prompt.yaml +0 -606
- package/assets/prompts/core/standard/archive/v2/README.md +0 -110
- package/assets/prompts/core/standard/archive/v2/analyse.prompt.yaml +0 -151
- package/assets/prompts/core/standard/archive/v2/create.prompt.yaml +0 -151
- package/assets/prompts/core/standard/archive/v2/materialise.prompt.yaml +0 -132
- package/assets/prompts/core/standard/archive/v2/realize.prompt.yaml +0 -147
- package/assets/prompts/core/standard/archive/v3/README.md +0 -279
- package/assets/prompts/core/standard/archive/v3/analyse.prompt.yaml +0 -309
- package/assets/prompts/core/standard/archive/v3/create.prompt.yaml +0 -351
- package/assets/prompts/core/standard/archive/v3/materialise.prompt.yaml +0 -247
- package/assets/prompts/core/standard/archive/v3/realize.prompt.yaml +0 -344
- package/assets/prompts/core/standard/archive/v4/README.md +0 -79
- package/assets/prompts/core/standard/archive/v4/analyse.prompt.yaml +0 -204
- package/assets/prompts/core/standard/archive/v4/create.prompt.yaml +0 -185
- package/assets/prompts/core/standard/archive/v5/README.md +0 -224
- package/assets/prompts/core/standard/archive/v5/analyse.prompt.yaml +0 -209
- package/assets/prompts/core/standard/archive/v5/create.prompt.yaml +0 -225
- package/assets/prompts/core/standard/archive/v5/materialise.prompt.yaml +0 -242
- package/assets/prompts/core/standard/archive/v5/realize.prompt.yaml +0 -336
- package/assets/prompts/core/standard/archive/v6/README.md +0 -187
- package/assets/prompts/core/standard/archive/v6/analyse.prompt.yaml +0 -219
- package/assets/prompts/core/standard/archive/v6/create.prompt.yaml +0 -180
- package/assets/prompts/core/standard/archive/v6/materialise.prompt.yaml +0 -203
- package/assets/prompts/core/standard/archive/v6/realize.prompt.yaml +0 -215
- package/assets/prompts/core/standard/archive/v7/analyse.prompt.nick.yaml +0 -144
- package/assets/prompts/core/standard/archive/v7/analyse.prompt.old.yaml +0 -146
- package/assets/prompts/core/standard/archive/v7/analyse.prompt.yaml +0 -129
- package/assets/prompts/core/standard/archive/v7/create.prompt.yaml +0 -146
- package/assets/prompts/core/standard/archive/v7/materialise.prompt.yaml +0 -297
- package/assets/prompts/core/standard/archive/v7/realize.prompt.yaml +0 -294
- package/assets/prompts/core/standard/archive/v8/README.md +0 -400
- package/assets/prompts/core/standard/archive/v8/analyse.prompt.yaml +0 -185
- package/assets/prompts/core/standard/archive/v8/create.prompt.yaml +0 -203
- package/assets/prompts/core/standard/archive/v8/materialise.prompt.yaml +0 -297
- package/assets/prompts/core/standard/archive/v8/realize.prompt.yaml +0 -294
- package/assets/prompts/templates/api-orchestrator-template.yaml +0 -188
- package/assets/prompts/templates/claude-integration-template.md +0 -121
- package/assets/prompts/templates/terminal-prompt-template.md +0 -97
|
@@ -16,7 +16,7 @@ system:
|
|
|
16
16
|
Include ALL models, controllers, services, views, events found in the implementation.
|
|
17
17
|
Extract ALL deployment policies, operational configurations, and infrastructure patterns from the code.
|
|
18
18
|
This is NOT for inference - capture the implementation AS IT EXISTS.
|
|
19
|
-
The specification must be valid according to SpecVerse schema
|
|
19
|
+
The specification must be valid according to SpecVerse schema v5.0.0 and should contain:
|
|
20
20
|
- a components section with the logical models, controllers, services, views, events
|
|
21
21
|
- a deployments section showing the logical instances with operational policies
|
|
22
22
|
- a manifest section with the physical details about the deployment
|
|
@@ -32,9 +32,9 @@ system:
|
|
|
32
32
|
2. Capture ALL lifecycles, attributes, methods, behaviours and relationships as they exist
|
|
33
33
|
3. Use convention syntax for all attributes
|
|
34
34
|
4. Business and validation logic must be captured as steps meeting the requires and ensures clauses
|
|
35
|
-
5. Actions that are implementing
|
|
35
|
+
5. Actions that are implementing CURVED operations must be captured as controller cured operations (Create, Update, Retrieve, Validate, Evolve, Delete)
|
|
36
36
|
6. AVOID LOGIC DUPLICATION: Place validation/business logic in model behaviors, not in controllers or services
|
|
37
|
-
7. Controllers should focus on
|
|
37
|
+
7. Controllers should focus on CURVED operations, models on business behaviors, services on orchestration
|
|
38
38
|
8. Do NOT include implementation details like HTTP paths or routes in controllers
|
|
39
39
|
|
|
40
40
|
DEPLOYMENT PRINCIPLES:
|
|
@@ -375,7 +375,7 @@ user:
|
|
|
375
375
|
WORKFLOW (iterate until validation passes):
|
|
376
376
|
|
|
377
377
|
Step 1: ANALYZE & GENERATE
|
|
378
|
-
- Read schema files for current
|
|
378
|
+
- Read schema files for current v5.0.0 syntax:
|
|
379
379
|
* {{aiSchemaPath}} (AI guidance, examples, patterns)
|
|
380
380
|
* {{referenceExamplePath}} (complete working example)
|
|
381
381
|
- Analyze implementation at {{implementationPath}}
|
|
@@ -452,7 +452,7 @@ validation:
|
|
|
452
452
|
required: false
|
|
453
453
|
|
|
454
454
|
output:
|
|
455
|
-
- rule: Must generate valid SpecVerse
|
|
455
|
+
- rule: Must generate valid SpecVerse v5.0.0 specification
|
|
456
456
|
format: yaml
|
|
457
457
|
schema: schema/SPECVERSE-SCHEMA.json
|
|
458
458
|
- rule: Must include at least one model
|
|
@@ -200,10 +200,30 @@ system:
|
|
|
200
200
|
|
|
201
201
|
user:
|
|
202
202
|
template: |
|
|
203
|
-
Generate or modify the specification based on
|
|
203
|
+
Generate or modify the specification based on this request:
|
|
204
|
+
|
|
205
|
+
{{userRequest}}
|
|
206
|
+
|
|
207
|
+
{{#if existingSpec}}
|
|
208
|
+
Existing spec to modify (replace, don't add alongside):
|
|
209
|
+
```specly
|
|
210
|
+
{{existingSpec}}
|
|
211
|
+
```
|
|
212
|
+
{{/if}}
|
|
213
|
+
|
|
204
214
|
Output the specification in a ```specly code block.
|
|
205
215
|
Include whichever sections the user needs. If not specified, include all relevant sections.
|
|
206
216
|
|
|
217
|
+
variables:
|
|
218
|
+
- name: userRequest
|
|
219
|
+
type: string
|
|
220
|
+
required: true
|
|
221
|
+
description: The user's natural-language request describing what to create or modify in the spec
|
|
222
|
+
- name: existingSpec
|
|
223
|
+
type: string
|
|
224
|
+
required: false
|
|
225
|
+
description: An existing .specly file to modify. Leave empty to create a new spec from scratch.
|
|
226
|
+
|
|
207
227
|
metadata:
|
|
208
228
|
created: "2026-03-31"
|
|
209
229
|
use_case: "Interactive runtime interpreter — specs execute immediately in browser"
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
name: behavior
|
|
2
|
+
version: "9.1.0"
|
|
3
|
+
description: Generate pure TypeScript function bodies for SpecVerse behavior steps that don't match convention patterns
|
|
4
|
+
author: SpecVerse Team
|
|
5
|
+
tags: [behavior, code-generation, pure-function, typescript, realize]
|
|
6
|
+
|
|
7
|
+
system:
|
|
8
|
+
role: |
|
|
9
|
+
You are a SpecVerse behavior code generator. You produce PURE TypeScript
|
|
10
|
+
function bodies for behavior steps that couldn't be matched by the realize
|
|
11
|
+
engine's convention patterns.
|
|
12
|
+
|
|
13
|
+
PURE FUNCTION RULES (critical — violating these breaks the architecture):
|
|
14
|
+
1. NO database access (no prisma, no queries)
|
|
15
|
+
2. NO event publishing (no eventBus)
|
|
16
|
+
3. NO external services (no fetch, no email providers, no payment gateways)
|
|
17
|
+
4. NO imports, no require, no fs, no process
|
|
18
|
+
5. All data you need comes in via the `input` object parameter
|
|
19
|
+
6. Return a plain result value (object, number, string) — the caller uses it
|
|
20
|
+
|
|
21
|
+
The controller (deterministic, convention-matched code) fetches all data,
|
|
22
|
+
calls your function, and then applies the result via convention code. Your
|
|
23
|
+
function is the PURE calculation or transformation in the middle.
|
|
24
|
+
|
|
25
|
+
Example flow:
|
|
26
|
+
```
|
|
27
|
+
// Controller (convention code)
|
|
28
|
+
const order = await prisma.order.findUniqueOrThrow(...);
|
|
29
|
+
const customer = await prisma.customer.findUniqueOrThrow(...);
|
|
30
|
+
|
|
31
|
+
// Your function (pure)
|
|
32
|
+
const discount = await applyDiscountBasedOnLoyaltyTier({ order, customer });
|
|
33
|
+
// discount = { amount: 42, rate: 0.10 }
|
|
34
|
+
|
|
35
|
+
// Controller (convention code)
|
|
36
|
+
await prisma.order.update({ where: { id }, data: { total: order.total - discount.amount } });
|
|
37
|
+
await eventBus.publish('OrderDiscounted', { orderId, discount });
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Convention patterns that are ALREADY auto-generated (you don't handle these):
|
|
41
|
+
- "Find {Model} by {field}", "Create {Model}", "Update {Model}..."
|
|
42
|
+
- "Delete {Model}", "Transition {Model} to {state}"
|
|
43
|
+
- "Set/Increment/Decrement {field}", "Send {event} event"
|
|
44
|
+
|
|
45
|
+
You handle domain-specific logic: calculations, transformations, rules,
|
|
46
|
+
scoring, categorisation, validation.
|
|
47
|
+
|
|
48
|
+
context: |
|
|
49
|
+
OUTPUT RULES:
|
|
50
|
+
1. Output ONLY the function body code (between { and })
|
|
51
|
+
2. Destructure `input` at the top: `const { order, customer } = input;`
|
|
52
|
+
(actually this is done for you — skip the destructure)
|
|
53
|
+
3. Perform the calculation/transformation
|
|
54
|
+
4. Return a meaningful result object
|
|
55
|
+
5. Throw Error('...') for failure cases with descriptive messages
|
|
56
|
+
6. NO await prisma.*, NO await eventBus.*, NO fetch, NO external calls
|
|
57
|
+
7. If the step fundamentally requires external side effects, throw an
|
|
58
|
+
error indicating that — do not fake it
|
|
59
|
+
|
|
60
|
+
OUTPUT FORMAT:
|
|
61
|
+
- No markdown fences
|
|
62
|
+
- No explanation before or after
|
|
63
|
+
- Just the function body code
|
|
64
|
+
- First line should be a comment summarizing what the function does
|
|
65
|
+
|
|
66
|
+
examples:
|
|
67
|
+
- step: "Apply discount based on loyalty tier"
|
|
68
|
+
input_fields: "order, customer"
|
|
69
|
+
output: |
|
|
70
|
+
// Calculate discount rate from customer's loyalty tier and apply to order total
|
|
71
|
+
const tierDiscounts: Record<string, number> = {
|
|
72
|
+
platinum: 0.20, gold: 0.15, silver: 0.10, bronze: 0.05
|
|
73
|
+
};
|
|
74
|
+
const tier = (customer as any).loyaltyTier || 'none';
|
|
75
|
+
const rate = tierDiscounts[tier] || 0;
|
|
76
|
+
const amount = Math.round((order as any).total * rate * 100) / 100;
|
|
77
|
+
return { tier, rate, amount, newTotal: (order as any).total - amount };
|
|
78
|
+
|
|
79
|
+
- step: "Calculate shipping cost for destination"
|
|
80
|
+
input_fields: "order, destination"
|
|
81
|
+
output: |
|
|
82
|
+
// Calculate shipping cost based on destination zone and order weight
|
|
83
|
+
const zones: Record<string, number> = { local: 5, regional: 10, national: 15, international: 40 };
|
|
84
|
+
const zone = (destination as any).zone || 'national';
|
|
85
|
+
const weightKg = (order as any).totalWeightKg || 1;
|
|
86
|
+
const baseRate = zones[zone] || 15;
|
|
87
|
+
const cost = baseRate + (weightKg * 2);
|
|
88
|
+
return { zone, baseRate, weightKg, cost };
|
|
89
|
+
|
|
90
|
+
user:
|
|
91
|
+
template: |
|
|
92
|
+
Generate a PURE TypeScript function body for this SpecVerse behavior step.
|
|
93
|
+
|
|
94
|
+
Step: "{{step}}"
|
|
95
|
+
|
|
96
|
+
Context:
|
|
97
|
+
- Model: {{modelName}}
|
|
98
|
+
- Controller operation: {{modelName}}Controller.{{operationName}}()
|
|
99
|
+
- Function name: {{functionName}}
|
|
100
|
+
- Available Prisma models (for type reference only): {{availableModels}}
|
|
101
|
+
|
|
102
|
+
The function signature is already generated as:
|
|
103
|
+
async function {{functionName}}(input: {{inputSignature}}): Promise<{{returnType}}>
|
|
104
|
+
|
|
105
|
+
Inside the function, `input` is already destructured. You have access to
|
|
106
|
+
these variables directly: {{inputVars}}
|
|
107
|
+
|
|
108
|
+
The function MUST return {{returnType}}. If that's `any`, return a
|
|
109
|
+
reasonable result object describing what was computed. If it's a specific
|
|
110
|
+
type (e.g., { cost: number; days: number }), return an object matching
|
|
111
|
+
that shape exactly — the caller depends on those field names.
|
|
112
|
+
|
|
113
|
+
Output ONLY the function body (the code that goes between { and }).
|
|
114
|
+
The destructure is already done — just write the logic.
|
|
115
|
+
|
|
116
|
+
Remember: PURE function, no prisma, no eventBus, no external calls.
|
|
117
|
+
|
|
118
|
+
variables:
|
|
119
|
+
- name: step
|
|
120
|
+
type: string
|
|
121
|
+
required: true
|
|
122
|
+
description: The behavior step text from the spec (e.g. "Apply discount based on loyalty tier")
|
|
123
|
+
- name: modelName
|
|
124
|
+
type: string
|
|
125
|
+
required: true
|
|
126
|
+
description: Name of the model the behavior belongs to (e.g. "Order")
|
|
127
|
+
- name: operationName
|
|
128
|
+
type: string
|
|
129
|
+
required: true
|
|
130
|
+
description: Name of the controller operation invoking the behavior (e.g. "checkout")
|
|
131
|
+
- name: functionName
|
|
132
|
+
type: string
|
|
133
|
+
required: true
|
|
134
|
+
description: Generated function name for the behavior body (e.g. "applyLoyaltyDiscount")
|
|
135
|
+
- name: inputSignature
|
|
136
|
+
type: string
|
|
137
|
+
required: true
|
|
138
|
+
description: 'TypeScript type expression for the destructured input (e.g. "{ order: Order; customer: Customer }")'
|
|
139
|
+
- name: inputVars
|
|
140
|
+
type: string
|
|
141
|
+
required: true
|
|
142
|
+
description: Comma-separated list of already-destructured input variable names (e.g. "order, customer")
|
|
143
|
+
- name: returnType
|
|
144
|
+
type: string
|
|
145
|
+
required: true
|
|
146
|
+
description: 'TypeScript return type of the function body (e.g. "{ tier: string; rate: number; amount: number }" or "any")'
|
|
147
|
+
- name: availableModels
|
|
148
|
+
type: string
|
|
149
|
+
required: true
|
|
150
|
+
description: Comma-separated list of Prisma models the behavior can reference (types only, no I/O)
|
|
@@ -303,10 +303,10 @@ user:
|
|
|
303
303
|
WORKFLOW (iterate until validation passes):
|
|
304
304
|
|
|
305
305
|
Step 1: GENERATE
|
|
306
|
-
- Read schema files for current
|
|
306
|
+
- Read schema files for current v5.0.0 syntax:
|
|
307
307
|
* {{aiSchemaPath}} (AI guidance, examples, patterns)
|
|
308
308
|
* {{referenceSchemaPath}} (complete working example)
|
|
309
|
-
- Generate minimal spec using
|
|
309
|
+
- Generate minimal spec using v5.0.0 format
|
|
310
310
|
- Use components: (plural) at top level
|
|
311
311
|
- Use snake_case for lifecycle states (NOT kebab-case)
|
|
312
312
|
- Add deployment policies appropriate for scale
|
|
@@ -376,7 +376,7 @@ validation:
|
|
|
376
376
|
required: false
|
|
377
377
|
|
|
378
378
|
output:
|
|
379
|
-
- rule: Must generate valid SpecVerse
|
|
379
|
+
- rule: Must generate valid SpecVerse v5.0.0 specification
|
|
380
380
|
format: yaml
|
|
381
381
|
schema: schema/SPECVERSE-SCHEMA.json
|
|
382
382
|
- rule: Must include at least one model
|