@pantion/dialogs 0.2.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/dialogs/dialog-builder/convergence-rules.md +64 -0
- package/dialogs/dialog-builder/dialog.json +10 -0
- package/dialogs/dialog-builder/prompts/convergence-intro.md +21 -0
- package/dialogs/dialog-builder/prompts/translate-intro.md +17 -0
- package/dialogs/dialog-builder/translate.md +46 -0
- package/dialogs/image/convergence-rules.md +55 -0
- package/dialogs/image/dialog.json +12 -0
- package/dialogs/image/prompts/convergence-intro.md +25 -0
- package/dialogs/image/prompts/translate-intro.md +37 -0
- package/dialogs/image/translate.md +67 -0
- package/dialogs/software/convergence-rules.md +29 -0
- package/dialogs/software/dialog.json +12 -0
- package/dialogs/software/prompts/convergence-intro.md +22 -0
- package/dialogs/software/prompts/translate-intro.md +19 -0
- package/dialogs/software/translate.md +74 -0
- package/dialogs/software-brownfield/convergence-rules.md +109 -0
- package/dialogs/software-brownfield/dialog.json +12 -0
- package/dialogs/software-brownfield/prompts/convergence-intro.md +26 -0
- package/dialogs/software-brownfield/prompts/translate-intro.md +13 -0
- package/dialogs/software-brownfield/translate.md +56 -0
- package/dialogs/video/convergence-rules.md +96 -0
- package/dialogs/video/dialog.json +12 -0
- package/dialogs/video/prompts/convergence-intro.md +28 -0
- package/dialogs/video/prompts/translate-intro.md +41 -0
- package/dialogs/video/translate.md +81 -0
- package/dist/core/canon/index-manager.d.ts +27 -0
- package/dist/core/canon/index-manager.d.ts.map +1 -0
- package/dist/core/canon/index-manager.js +127 -0
- package/dist/core/canon/index-manager.js.map +1 -0
- package/dist/core/canon/manifest.d.ts +21 -0
- package/dist/core/canon/manifest.d.ts.map +1 -0
- package/dist/core/canon/manifest.js +56 -0
- package/dist/core/canon/manifest.js.map +1 -0
- package/dist/core/canon/validator.d.ts +12 -0
- package/dist/core/canon/validator.d.ts.map +1 -0
- package/dist/core/canon/validator.js +320 -0
- package/dist/core/canon/validator.js.map +1 -0
- package/dist/core/dialog/canon-writer.d.ts +22 -0
- package/dist/core/dialog/canon-writer.d.ts.map +1 -0
- package/dist/core/dialog/canon-writer.js +96 -0
- package/dist/core/dialog/canon-writer.js.map +1 -0
- package/dist/core/dialog/registry.d.ts +10 -0
- package/dist/core/dialog/registry.d.ts.map +1 -0
- package/dist/core/dialog/registry.js +102 -0
- package/dist/core/dialog/registry.js.map +1 -0
- package/dist/core/dialog/selector.d.ts +11 -0
- package/dist/core/dialog/selector.d.ts.map +1 -0
- package/dist/core/dialog/selector.js +32 -0
- package/dist/core/dialog/selector.js.map +1 -0
- package/dist/core/index.d.ts +20 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +30 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/protocol/convergence.d.ts +11 -0
- package/dist/core/protocol/convergence.d.ts.map +1 -0
- package/dist/core/protocol/convergence.js +30 -0
- package/dist/core/protocol/convergence.js.map +1 -0
- package/dist/core/protocol/loader.d.ts +6 -0
- package/dist/core/protocol/loader.d.ts.map +1 -0
- package/dist/core/protocol/loader.js +31 -0
- package/dist/core/protocol/loader.js.map +1 -0
- package/dist/core/protocol/stamp-parser.d.ts +46 -0
- package/dist/core/protocol/stamp-parser.d.ts.map +1 -0
- package/dist/core/protocol/stamp-parser.js +333 -0
- package/dist/core/protocol/stamp-parser.js.map +1 -0
- package/dist/core/protocol/system-prompt.d.ts +16 -0
- package/dist/core/protocol/system-prompt.d.ts.map +1 -0
- package/dist/core/protocol/system-prompt.js +68 -0
- package/dist/core/protocol/system-prompt.js.map +1 -0
- package/dist/core/session/canon-writer.d.ts +33 -0
- package/dist/core/session/canon-writer.d.ts.map +1 -0
- package/dist/core/session/canon-writer.js +152 -0
- package/dist/core/session/canon-writer.js.map +1 -0
- package/dist/core/session/manager.d.ts +10 -0
- package/dist/core/session/manager.d.ts.map +1 -0
- package/dist/core/session/manager.js +105 -0
- package/dist/core/session/manager.js.map +1 -0
- package/dist/core/skill/canon-writer.d.ts +22 -0
- package/dist/core/skill/canon-writer.d.ts.map +1 -0
- package/dist/core/skill/canon-writer.js +96 -0
- package/dist/core/skill/canon-writer.js.map +1 -0
- package/dist/core/skill/registry.d.ts +10 -0
- package/dist/core/skill/registry.d.ts.map +1 -0
- package/dist/core/skill/registry.js +102 -0
- package/dist/core/skill/registry.js.map +1 -0
- package/dist/core/skill/selector.d.ts +11 -0
- package/dist/core/skill/selector.d.ts.map +1 -0
- package/dist/core/skill/selector.js +32 -0
- package/dist/core/skill/selector.js.map +1 -0
- package/dist/core/soul/registry.d.ts +10 -0
- package/dist/core/soul/registry.d.ts.map +1 -0
- package/dist/core/soul/registry.js +73 -0
- package/dist/core/soul/registry.js.map +1 -0
- package/dist/core/types.d.ts +154 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils/fs.d.ts +14 -0
- package/dist/core/utils/fs.d.ts.map +1 -0
- package/dist/core/utils/fs.js +44 -0
- package/dist/core/utils/fs.js.map +1 -0
- package/dist/core/utils/project-detect.d.ts +3 -0
- package/dist/core/utils/project-detect.d.ts.map +1 -0
- package/dist/core/utils/project-detect.js +38 -0
- package/dist/core/utils/project-detect.js.map +1 -0
- package/dist/feature-set.d.ts +14 -0
- package/dist/feature-set.d.ts.map +1 -0
- package/dist/feature-set.js +38 -0
- package/dist/feature-set.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/convergence-prompts.d.ts +4 -0
- package/dist/prompts/convergence-prompts.d.ts.map +1 -0
- package/dist/prompts/convergence-prompts.js +76 -0
- package/dist/prompts/convergence-prompts.js.map +1 -0
- package/dist/prompts/index.d.ts +4 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +7 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/workflow-prompts.d.ts +9 -0
- package/dist/prompts/workflow-prompts.d.ts.map +1 -0
- package/dist/prompts/workflow-prompts.js +265 -0
- package/dist/prompts/workflow-prompts.js.map +1 -0
- package/dist/resources/canon-resources.d.ts +4 -0
- package/dist/resources/canon-resources.d.ts.map +1 -0
- package/dist/resources/canon-resources.js +164 -0
- package/dist/resources/canon-resources.js.map +1 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +47 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/amend.d.ts +4 -0
- package/dist/tools/amend.d.ts.map +1 -0
- package/dist/tools/amend.js +106 -0
- package/dist/tools/amend.js.map +1 -0
- package/dist/tools/approve.d.ts +4 -0
- package/dist/tools/approve.d.ts.map +1 -0
- package/dist/tools/approve.js +60 -0
- package/dist/tools/approve.js.map +1 -0
- package/dist/tools/check-convergence.d.ts +4 -0
- package/dist/tools/check-convergence.d.ts.map +1 -0
- package/dist/tools/check-convergence.js +50 -0
- package/dist/tools/check-convergence.js.map +1 -0
- package/dist/tools/check.d.ts +4 -0
- package/dist/tools/check.d.ts.map +1 -0
- package/dist/tools/check.js +190 -0
- package/dist/tools/check.js.map +1 -0
- package/dist/tools/create-dialog.d.ts +4 -0
- package/dist/tools/create-dialog.d.ts.map +1 -0
- package/dist/tools/create-dialog.js +58 -0
- package/dist/tools/create-dialog.js.map +1 -0
- package/dist/tools/create-skill.d.ts +4 -0
- package/dist/tools/create-skill.d.ts.map +1 -0
- package/dist/tools/create-skill.js +58 -0
- package/dist/tools/create-skill.js.map +1 -0
- package/dist/tools/decompose.d.ts +4 -0
- package/dist/tools/decompose.d.ts.map +1 -0
- package/dist/tools/decompose.js +56 -0
- package/dist/tools/decompose.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +49 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-canons.d.ts +4 -0
- package/dist/tools/list-canons.d.ts.map +1 -0
- package/dist/tools/list-canons.js +28 -0
- package/dist/tools/list-canons.js.map +1 -0
- package/dist/tools/migrate.d.ts +4 -0
- package/dist/tools/migrate.d.ts.map +1 -0
- package/dist/tools/migrate.js +38 -0
- package/dist/tools/migrate.js.map +1 -0
- package/dist/tools/onboard.d.ts +4 -0
- package/dist/tools/onboard.d.ts.map +1 -0
- package/dist/tools/onboard.js +27 -0
- package/dist/tools/onboard.js.map +1 -0
- package/dist/tools/reconverge.d.ts +4 -0
- package/dist/tools/reconverge.d.ts.map +1 -0
- package/dist/tools/reconverge.js +68 -0
- package/dist/tools/reconverge.js.map +1 -0
- package/dist/tools/redialog.d.ts +4 -0
- package/dist/tools/redialog.d.ts.map +1 -0
- package/dist/tools/redialog.js +63 -0
- package/dist/tools/redialog.js.map +1 -0
- package/dist/tools/reflect.d.ts +4 -0
- package/dist/tools/reflect.d.ts.map +1 -0
- package/dist/tools/reflect.js +86 -0
- package/dist/tools/reflect.js.map +1 -0
- package/dist/tools/reject.d.ts +4 -0
- package/dist/tools/reject.d.ts.map +1 -0
- package/dist/tools/reject.js +57 -0
- package/dist/tools/reject.js.map +1 -0
- package/dist/tools/reskill.d.ts +4 -0
- package/dist/tools/reskill.d.ts.map +1 -0
- package/dist/tools/reskill.js +63 -0
- package/dist/tools/reskill.js.map +1 -0
- package/dist/tools/resume.d.ts +4 -0
- package/dist/tools/resume.d.ts.map +1 -0
- package/dist/tools/resume.js +56 -0
- package/dist/tools/resume.js.map +1 -0
- package/dist/tools/reverse.d.ts +4 -0
- package/dist/tools/reverse.d.ts.map +1 -0
- package/dist/tools/reverse.js +32 -0
- package/dist/tools/reverse.js.map +1 -0
- package/dist/tools/save-canon.d.ts +4 -0
- package/dist/tools/save-canon.d.ts.map +1 -0
- package/dist/tools/save-canon.js +97 -0
- package/dist/tools/save-canon.js.map +1 -0
- package/dist/tools/start.d.ts +4 -0
- package/dist/tools/start.d.ts.map +1 -0
- package/dist/tools/start.js +83 -0
- package/dist/tools/start.js.map +1 -0
- package/dist/tools/translate.d.ts +4 -0
- package/dist/tools/translate.d.ts.map +1 -0
- package/dist/tools/translate.js +102 -0
- package/dist/tools/translate.js.map +1 -0
- package/dist/tools/update.d.ts +4 -0
- package/dist/tools/update.d.ts.map +1 -0
- package/dist/tools/update.js +42 -0
- package/dist/tools/update.js.map +1 -0
- package/dist/tools/validate.d.ts +4 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +86 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/utils/response.d.ts +12 -0
- package/dist/utils/response.d.ts.map +1 -0
- package/dist/utils/response.js +18 -0
- package/dist/utils/response.js.map +1 -0
- package/package.json +37 -0
- package/protocol/commands/amend.md +188 -0
- package/protocol/commands/build.md +90 -0
- package/protocol/commands/check.md +255 -0
- package/protocol/commands/create-dialog.md +81 -0
- package/protocol/commands/decompose.md +230 -0
- package/protocol/commands/dialog.md +173 -0
- package/protocol/commands/help.md +121 -0
- package/protocol/commands/migrate.md +173 -0
- package/protocol/commands/onboard.md +210 -0
- package/protocol/commands/quick.md +170 -0
- package/protocol/commands/redialog.md +73 -0
- package/protocol/commands/reflect.md +136 -0
- package/protocol/commands/resume.md +148 -0
- package/protocol/commands/reverse.md +312 -0
- package/protocol/commands/start.md +220 -0
- package/protocol/commands/translate.md +157 -0
- package/protocol/commands/update.md +205 -0
- package/protocol/core-advanced.md +188 -0
- package/protocol/core.md +274 -0
- package/protocol/pantion-future-prompt.md +88 -0
- package/protocol/pantion-intent.md +78 -0
- package/protocol/templates/acceptance-tests.md +116 -0
- package/protocol/templates/behavior-map.md +135 -0
- package/protocol/templates/traceability-map.md +56 -0
- package/souls/beginner/rules.md +34 -0
- package/souls/beginner/soul.json +6 -0
- package/souls/default/rules.md +25 -0
- package/souls/default/soul.json +6 -0
- package/souls/young/rules.md +67 -0
- package/souls/young/soul.json +6 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Software Brownfield — Convergence Opening
|
|
2
|
+
|
|
3
|
+
You are converging a change to an existing software system. Your goal is to reach an unambiguous description of the change through targeted questions.
|
|
4
|
+
|
|
5
|
+
## Opening approach
|
|
6
|
+
|
|
7
|
+
1. Ask the user: **what do you want to change** in the existing system?
|
|
8
|
+
2. Once you understand the intent, **analyze the relevant codebase surface** (Phase 1):
|
|
9
|
+
- Read the affected code area
|
|
10
|
+
- Identify tech stack, patterns, constraints, and conventions
|
|
11
|
+
- Present a brief summary to the user for confirmation
|
|
12
|
+
3. Then systematically cover the delta convergence elements (Phase 2):
|
|
13
|
+
- What is the current behavior?
|
|
14
|
+
- What should the new behavior be?
|
|
15
|
+
- What must not break? (regression boundaries)
|
|
16
|
+
- What components are affected?
|
|
17
|
+
- Does this fit the existing architecture?
|
|
18
|
+
- Is migration needed?
|
|
19
|
+
|
|
20
|
+
## Tone
|
|
21
|
+
|
|
22
|
+
- Be direct and efficient — ask one question at a time
|
|
23
|
+
- Do not suggest replacing existing technologies
|
|
24
|
+
- Do not propose "improvements" beyond the stated change
|
|
25
|
+
- If the user's answer is ambiguous, ask again — do not guess
|
|
26
|
+
- Respect the existing codebase — it represents prior decisions
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Software Brownfield — Translation Opening
|
|
2
|
+
|
|
3
|
+
You are translating a brownfield convergence canon into delta specification files.
|
|
4
|
+
|
|
5
|
+
## Key principles
|
|
6
|
+
|
|
7
|
+
- Generate DELTA specs, not full system descriptions
|
|
8
|
+
- The change-request.md is the central document: IST → SOLL
|
|
9
|
+
- Impact analysis maps every affected component
|
|
10
|
+
- Regression boundaries define what must stay intact
|
|
11
|
+
- All generated files trace back to the dialog canon via Canon Anchors
|
|
12
|
+
|
|
13
|
+
Read the full dialog canon first. Then generate the specification files as described in the translation instructions.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Software Brownfield — Translation Instructions
|
|
2
|
+
|
|
3
|
+
After convergence, generate DELTA SPECIFICATION files from the dialog canon.
|
|
4
|
+
These files describe the CHANGE to an existing system — not the full system.
|
|
5
|
+
|
|
6
|
+
The canon itself (served via MCP) is the authoritative instruction set for any connected agent.
|
|
7
|
+
|
|
8
|
+
## Always Generate
|
|
9
|
+
|
|
10
|
+
1. **`canon/{naam}/spec/change-request.md`**
|
|
11
|
+
- Current situation (IST): what the system does now
|
|
12
|
+
- Desired situation (SOLL): what it should do after the change
|
|
13
|
+
- Motivation: why this change is needed
|
|
14
|
+
- Scope: what is included and excluded from this change
|
|
15
|
+
- Constraints inherited from the existing codebase
|
|
16
|
+
|
|
17
|
+
2. **`canon/{naam}/spec/impact-analysis.md`**
|
|
18
|
+
- Affected modules and components
|
|
19
|
+
- Affected files, APIs, and endpoints
|
|
20
|
+
- Affected data entities and schemas
|
|
21
|
+
- Dependencies that need to adapt
|
|
22
|
+
- Risk assessment per affected area (high/medium/low)
|
|
23
|
+
|
|
24
|
+
3. **`canon/{naam}/spec/regression-boundaries.md`**
|
|
25
|
+
- Existing behavior that must remain intact
|
|
26
|
+
- Existing tests that must continue to pass
|
|
27
|
+
- Existing contracts (API, data formats) that must not break
|
|
28
|
+
- Rollback criteria: when should the change be reverted?
|
|
29
|
+
|
|
30
|
+
## Generate If Applicable
|
|
31
|
+
|
|
32
|
+
4. **`canon/{naam}/spec/migration.md`** — if breaking changes exist
|
|
33
|
+
- Data migration steps
|
|
34
|
+
- API versioning or deprecation plan
|
|
35
|
+
- Backwards-compatibility period
|
|
36
|
+
- Rollback procedure
|
|
37
|
+
|
|
38
|
+
5. **`canon/{naam}/spec/constraints.md`** — if significant constraints from the codebase
|
|
39
|
+
- HARD constraints inherited from existing architecture
|
|
40
|
+
- Conventions that must be followed
|
|
41
|
+
- Technology constraints from existing stack
|
|
42
|
+
|
|
43
|
+
6. **`canon/{naam}/spec/acceptance-tests.md`** — delta tests
|
|
44
|
+
- Tests for NEW behavior introduced by the change
|
|
45
|
+
- Regression tests confirming existing behavior is preserved
|
|
46
|
+
- Each test cites Canon Anchors and is labeled HARD or FLEX
|
|
47
|
+
- Use AT-### format
|
|
48
|
+
|
|
49
|
+
## Rules
|
|
50
|
+
|
|
51
|
+
- Source is ALWAYS the dialog, not the summary
|
|
52
|
+
- Codebase analysis from Phase 1 is part of the canon (captured in dialog)
|
|
53
|
+
- Each file starts with: `<!-- Derived from: canon/{naam}/dialog.md, [date] -->`
|
|
54
|
+
- Focus on the DELTA — do not describe the full system
|
|
55
|
+
- Canon Anchors use the notation: H[N] for HUMAN turn N, A[N] for ASSISTANT turn N (1-indexed)
|
|
56
|
+
- The change-request.md is the most important output — it must be complete and unambiguous
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Video Generation — Additional Convergence Rules
|
|
2
|
+
|
|
3
|
+
In addition to the standard Pantion convergence elements, always cover:
|
|
4
|
+
|
|
5
|
+
## Video Intent
|
|
6
|
+
- What is the core emotion, concept, or story?
|
|
7
|
+
- What should the viewer feel or understand?
|
|
8
|
+
- What happens in this video? (action, transformation, journey, reveal)
|
|
9
|
+
- If the intent is abstract (e.g., "speed", "calm", "power"), ask: "How would you visualize that in motion? For example, a racing camera, slow-motion water, an explosion of particles — or do you want me to suggest options?"
|
|
10
|
+
- Always arrive at concrete visual AND motion descriptions. Abstract concepts must be translated into something a viewer can see and experience over time.
|
|
11
|
+
|
|
12
|
+
## Context and Usage (ask early — determines duration and format)
|
|
13
|
+
- Where will this video be used? (social media, website, presentation, film, advertisement)
|
|
14
|
+
- Which platform? (TikTok, Instagram Reels, YouTube, cinema, internal)
|
|
15
|
+
- Who is the audience?
|
|
16
|
+
- This determines duration, aspect ratio, pacing, and appropriate style — ask BEFORE detailed questions.
|
|
17
|
+
|
|
18
|
+
## Duration (ask early — determines complexity)
|
|
19
|
+
- How long should the video be?
|
|
20
|
+
- A 3-second loop requires a fundamentally different approach than a 60-second narrative.
|
|
21
|
+
- Duration determines: number of scenes, pacing, whether a story arc is possible, and generator capabilities.
|
|
22
|
+
- If the user doesn't know, help them decide based on context and platform norms.
|
|
23
|
+
|
|
24
|
+
## Subject and Action
|
|
25
|
+
- What are the key visual elements? What is the main subject?
|
|
26
|
+
- What happens? What moves? What changes over time?
|
|
27
|
+
- Is there a transformation (A → B)?
|
|
28
|
+
- Are there characters, objects, or environments that need to be described?
|
|
29
|
+
|
|
30
|
+
## Camera and Motion
|
|
31
|
+
- Camera movement? (static, pan, tilt, zoom, dolly, tracking, orbit, aerial, handheld)
|
|
32
|
+
- Shot type? (wide/establishing, medium, close-up, extreme close-up, bird's eye)
|
|
33
|
+
- Shot transitions? (cut, dissolve, morph, continuous — or single-shot?)
|
|
34
|
+
- Speed? (real-time, slow-motion, time-lapse, speed ramp)
|
|
35
|
+
- If the user doesn't specify camera work, ask — it is the most impactful video-specific decision.
|
|
36
|
+
|
|
37
|
+
## Temporal Structure
|
|
38
|
+
- Is this a single continuous shot or multiple scenes?
|
|
39
|
+
- Is it linear (beginning → middle → end) or looping (seamless repeat)?
|
|
40
|
+
- If multiple scenes: what is the sequence? How do they connect?
|
|
41
|
+
- What is the pacing? (gradual build, sudden impact, steady rhythm)
|
|
42
|
+
- Is there a climax or key moment?
|
|
43
|
+
|
|
44
|
+
## Visual Style
|
|
45
|
+
- Art style or aesthetic? (photorealistic, cinematic, animated, 3D render, abstract, documentary, retro, etc.)
|
|
46
|
+
- Color palette or mood? (warm, cold, muted, vibrant, monochrome)
|
|
47
|
+
- Lighting? (natural, dramatic, neon, golden hour, dark/moody)
|
|
48
|
+
- References? ("like X" — helps generators understand the target)
|
|
49
|
+
|
|
50
|
+
## Audio (ask explicitly — silence is also a choice)
|
|
51
|
+
- Should the video have audio?
|
|
52
|
+
- Music? (genre, mood, tempo — or a specific reference track?)
|
|
53
|
+
- Sound effects? (ambient, foley, impact sounds)
|
|
54
|
+
- Voice-over or narration?
|
|
55
|
+
- Silence? (deliberate silence is a valid and powerful choice)
|
|
56
|
+
- Note: not all generators support audio. If the chosen generator doesn't, audio intent is still captured for post-production.
|
|
57
|
+
|
|
58
|
+
## Anti-References (CRITICAL — drives negative prompts)
|
|
59
|
+
- What should this NOT look like? Be specific.
|
|
60
|
+
- What visual or motion clichés to avoid?
|
|
61
|
+
- What tonal boundaries? (e.g., "not corporate", "not cheesy", "not AI-looking")
|
|
62
|
+
- What movement to avoid? (e.g., "no shaky cam", "no fast cuts", "no morphing artifacts")
|
|
63
|
+
- These are HARD constraints. They MUST appear in the generated prompt as negative guidance.
|
|
64
|
+
|
|
65
|
+
## Technical
|
|
66
|
+
- Target aspect ratio? (16:9, 9:16, 1:1, 4:3, 2.35:1 — may follow from Context)
|
|
67
|
+
- Frame rate? (24fps cinematic, 30fps standard, 60fps smooth — FLEX)
|
|
68
|
+
- Resolution? (HD, 4K — depends on generator capabilities)
|
|
69
|
+
- Generator preference? (Sora, Runway, Kling, Pika, Luma, Minimax, Veo — FLEX)
|
|
70
|
+
|
|
71
|
+
## Question Order
|
|
72
|
+
|
|
73
|
+
Follow this order to avoid redundant questions:
|
|
74
|
+
|
|
75
|
+
1. **Video intent** — what, why, and what happens
|
|
76
|
+
2. **Context/usage** — where and for whom (determines duration and format)
|
|
77
|
+
3. **Duration** — how long (determines complexity and structure)
|
|
78
|
+
4. **Subject and action** — what we see, what moves
|
|
79
|
+
5. **Camera and motion** — how we see it (movement, angles, speed)
|
|
80
|
+
6. **Temporal structure** — how it's built (scenes, pacing, loop)
|
|
81
|
+
7. **Visual style** — how it looks (aesthetic, colors, lighting)
|
|
82
|
+
8. **Audio** — what we hear (music, sfx, voice, silence)
|
|
83
|
+
9. **Anti-references** — what it must NOT be
|
|
84
|
+
10. **Technical** — generator preference, fps, resolution (only if user cares)
|
|
85
|
+
|
|
86
|
+
Skip questions whose answers are already implied by earlier answers. If aspect ratio follows logically from platform (e.g., "TikTok" → 9:16), confirm rather than ask.
|
|
87
|
+
|
|
88
|
+
## IMPORTANT
|
|
89
|
+
- Do NOT choose a generator unless the user insists — mark as FLEX
|
|
90
|
+
- Focus on the VISUAL AND TEMPORAL INTENT, not the technical prompt syntax
|
|
91
|
+
- The canon describes what the video should express and how it moves, not prompt engineering
|
|
92
|
+
- Abstract concepts MUST be translated into concrete visual AND motion descriptions before convergence is complete
|
|
93
|
+
- Anti-references are HARD constraints, not suggestions — treat them with the same weight as positive requirements
|
|
94
|
+
- Camera movement is the single most impactful video-specific decision — never leave it unresolved
|
|
95
|
+
- Duration determines everything — always establish it early
|
|
96
|
+
- Audio intent should be captured even if the chosen generator doesn't support it — it informs post-production
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "video",
|
|
3
|
+
"displayName": "Video Generation",
|
|
4
|
+
"description": "Converge intent for video generation. Translates canon to detailed video generation prompts.",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"video", "animation", "motion", "film", "clip", "scene", "cinematic",
|
|
8
|
+
"short film", "reel", "footage", "commercial", "trailer", "intro",
|
|
9
|
+
"sora", "runway", "kling", "pika", "luma", "minimax", "veo",
|
|
10
|
+
"animatie", "scène"
|
|
11
|
+
]
|
|
12
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Video Generation — Convergence Opening
|
|
2
|
+
|
|
3
|
+
You are converging a video generation intent. Your goal is to reach an unambiguous visual and temporal description through targeted questions.
|
|
4
|
+
|
|
5
|
+
## Opening approach
|
|
6
|
+
|
|
7
|
+
1. Acknowledge what the user wants to create
|
|
8
|
+
2. Ask for the **core video intent**: what should the viewer feel or understand? What happens?
|
|
9
|
+
3. If the intent is abstract, immediately ask how to visualize it in motion — don't leave abstract concepts unresolved
|
|
10
|
+
4. Then systematically cover (in this order):
|
|
11
|
+
- Context: where will it be shown? Which platform? (determines duration and format)
|
|
12
|
+
- Duration: how long? (determines complexity and structure — establish early)
|
|
13
|
+
- Subject and action: what we see, what moves, what changes
|
|
14
|
+
- Camera and motion: how we see it (movement, angles, speed, transitions)
|
|
15
|
+
- Temporal structure: single shot or multiple scenes? Linear or loop? Pacing?
|
|
16
|
+
- Visual style and aesthetic (cinematic, animated, abstract, etc.)
|
|
17
|
+
- Color palette, lighting, and mood
|
|
18
|
+
- Audio: music, sound effects, voice-over, or deliberate silence?
|
|
19
|
+
- What should it NOT look like or feel like? (anti-references — be specific, these become negative prompts)
|
|
20
|
+
|
|
21
|
+
## Tone
|
|
22
|
+
|
|
23
|
+
- Be direct — ask one question at a time
|
|
24
|
+
- Do not suggest a generator unless the user asks — mark as FLEX
|
|
25
|
+
- If the user's motion description is vague ("dynamic", "energetic"), ask for a concrete reference or specific camera movement
|
|
26
|
+
- Focus on the visual and temporal intent, not on prompt engineering syntax
|
|
27
|
+
- Camera movement is the most impactful video-specific decision — always resolve it explicitly
|
|
28
|
+
- Skip questions whose answers are already implied by earlier answers
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Video Generation — Translation Opening
|
|
2
|
+
|
|
3
|
+
You are translating a converged video canon into generation-ready files.
|
|
4
|
+
|
|
5
|
+
## Process
|
|
6
|
+
|
|
7
|
+
1. Read the complete dialog (canon) — this is the only source of truth
|
|
8
|
+
2. Generate the required files as described in `translate.md`:
|
|
9
|
+
- `canon/{naam}/prompt.md` — detailed, generator-agnostic video description
|
|
10
|
+
- `canon/{naam}/brief.md` — human-readable creative brief
|
|
11
|
+
- Generator-specific prompts if applicable
|
|
12
|
+
3. Every file starts with: `<!-- Derived from: canon/{naam}/dialog.md, [date] -->`
|
|
13
|
+
|
|
14
|
+
## Key rules
|
|
15
|
+
|
|
16
|
+
- Source is ALWAYS the dialog, never the summary
|
|
17
|
+
- The prompt describes WHAT the video should express AND HOW IT MOVES, derived from the converged intent
|
|
18
|
+
- Write the prompt in plain English, even if the dialog was in another language
|
|
19
|
+
- Do not add visual elements, motion, or audio that are not in the dialog
|
|
20
|
+
|
|
21
|
+
## Critical translation steps
|
|
22
|
+
|
|
23
|
+
### 1. Negative prompts (never skip)
|
|
24
|
+
- Find ALL anti-references in the dialog ("niet X", "geen Y", "vermijd Z")
|
|
25
|
+
- Translate each into explicit negative guidance in the prompt
|
|
26
|
+
- Include both visual AND motion negatives (e.g., "no shaky cam" is different from "no dark colors")
|
|
27
|
+
- Be specific and use multiple phrasings — generators need redundancy to respect negation
|
|
28
|
+
|
|
29
|
+
### 2. Abstract → Concrete motion (never copy literally)
|
|
30
|
+
- Find abstract concepts used as video intent ("snelheid", "rust", "chaos", "kracht")
|
|
31
|
+
- Translate each into concrete visual elements AND specific camera/motion descriptions
|
|
32
|
+
- If the dialog doesn't specify the motion metaphor, choose the most direct one and mark as FLEX
|
|
33
|
+
|
|
34
|
+
### 3. Audio intent (don't forget)
|
|
35
|
+
- Include audio descriptions in the universal prompt even if the target generator doesn't support audio
|
|
36
|
+
- Audio intent informs post-production and future regeneration with audio-capable generators
|
|
37
|
+
|
|
38
|
+
### 4. Prompt structure
|
|
39
|
+
- Structure as: subject/action, camera/motion, visual style, mood/color, temporal structure, audio, technical
|
|
40
|
+
- Follow with: negative prompt section
|
|
41
|
+
- Include generator-specific formatting where applicable
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Video Generation — Translation Instructions
|
|
2
|
+
|
|
3
|
+
After convergence, generate the following files from the dialog canon.
|
|
4
|
+
|
|
5
|
+
## Always Generate
|
|
6
|
+
|
|
7
|
+
1. **`canon/{naam}/prompt.md`**
|
|
8
|
+
- A detailed, generator-agnostic video description
|
|
9
|
+
- Structured sections (see Prompt Structure below)
|
|
10
|
+
- Written in plain English (even if dialog was in another language)
|
|
11
|
+
- Anti-references as explicit negative guidance section
|
|
12
|
+
- Audio intent included (even if generator doesn't support audio)
|
|
13
|
+
|
|
14
|
+
2. **`canon/{naam}/brief.md`**
|
|
15
|
+
- A human-readable creative brief
|
|
16
|
+
- Captures the intent, context, duration, style, and constraints
|
|
17
|
+
- Useful for sharing with directors, editors, or for future reference
|
|
18
|
+
|
|
19
|
+
## Generate If Applicable
|
|
20
|
+
|
|
21
|
+
3. **Generator-specific prompts** (if a generator was chosen or for convenience):
|
|
22
|
+
- `canon/{naam}/prompt-sora.md` — optimized for OpenAI Sora
|
|
23
|
+
- `canon/{naam}/prompt-runway.md` — optimized for Runway Gen-3/4
|
|
24
|
+
- `canon/{naam}/prompt-kling.md` — optimized for Kling AI
|
|
25
|
+
- `canon/{naam}/prompt-pika.md` — optimized for Pika
|
|
26
|
+
- `canon/{naam}/prompt-luma.md` — optimized for Luma Dream Machine
|
|
27
|
+
- `canon/{naam}/prompt-minimax.md` — optimized for Minimax/Hailuo
|
|
28
|
+
- `canon/{naam}/prompt-veo.md` — optimized for Google Veo
|
|
29
|
+
|
|
30
|
+
## Prompt Structure
|
|
31
|
+
|
|
32
|
+
Every prompt (universal and generator-specific) MUST include these sections:
|
|
33
|
+
|
|
34
|
+
### Positive prompt
|
|
35
|
+
- **Subject/Action**: what is depicted, what happens, what moves (concrete, visual, temporal)
|
|
36
|
+
- **Camera/Motion**: camera movement, shot type, speed, transitions
|
|
37
|
+
- **Visual Style**: art style, aesthetic, rendering approach
|
|
38
|
+
- **Mood/Color**: palette, lighting, atmosphere
|
|
39
|
+
- **Temporal**: duration, pacing, scene structure, loop behavior
|
|
40
|
+
- **Audio**: music, sound effects, voice-over (if applicable — note: some generators don't support audio)
|
|
41
|
+
- **Technical**: aspect ratio, fps, resolution
|
|
42
|
+
|
|
43
|
+
### Negative prompt (CRITICAL)
|
|
44
|
+
- Translate ALL anti-references from the dialog into explicit negative guidance
|
|
45
|
+
- "Niet corporate" → "not corporate, no stock footage look, no generic business imagery"
|
|
46
|
+
- "Geen snelle cuts" → "no rapid cuts, no fast editing, no jump cuts, no montage"
|
|
47
|
+
- "Niet AI-achtig" → "no morphing artifacts, no uncanny motion, no warping, no flickering"
|
|
48
|
+
- Be specific and redundant — generators need multiple phrasings to respect negation
|
|
49
|
+
|
|
50
|
+
### Generator-specific formatting
|
|
51
|
+
- **Sora**: Single descriptive paragraph with camera and motion woven in, negative guidance as separate instruction
|
|
52
|
+
- **Runway**: Scene description with motion parameters, style reference support
|
|
53
|
+
- **Kling**: Scene description with camera control parameters, motion intensity settings
|
|
54
|
+
- **Pika**: Concise motion description, motion strength parameter
|
|
55
|
+
- **Luma**: Natural language scene description with camera movement keywords
|
|
56
|
+
- **Minimax**: Detailed scene description, supports longer generation
|
|
57
|
+
- **Veo**: Detailed descriptive prompt with cinematic language, style keywords
|
|
58
|
+
|
|
59
|
+
## Abstract → Concrete Translation (CRITICAL)
|
|
60
|
+
|
|
61
|
+
The dialog may contain abstract concepts as video intent (e.g., "speed", "calm", "chaos"). These MUST be translated into concrete visual AND motion elements in the prompt:
|
|
62
|
+
|
|
63
|
+
- **Abstract concept in dialog** → **Concrete visual + motion in prompt**
|
|
64
|
+
- "snelheid" → "rapid camera push forward, motion blur on surroundings, objects streaking past, accelerating movement"
|
|
65
|
+
- "rust" → "slow dolly out, static wide shot, minimal subject movement, soft dissolve transitions, long holds"
|
|
66
|
+
- "chaos" → "shaky handheld camera, rapid cuts between angles, overlapping elements, distorted perspectives, unstable framing"
|
|
67
|
+
- "groei" → "time-lapse upward movement, expanding forms, slow zoom out revealing scale, gradual brightening"
|
|
68
|
+
- "kracht" → "low-angle shot, slow-motion impact, dramatic lighting shift, camera shake on impact"
|
|
69
|
+
|
|
70
|
+
If the dialog does not specify how to visualize an abstract concept in motion, choose the most direct visual + motion metaphor and note it as a FLEX choice.
|
|
71
|
+
|
|
72
|
+
## Rules
|
|
73
|
+
|
|
74
|
+
- Source is ALWAYS the dialog, not the summary
|
|
75
|
+
- Each file starts with: `<!-- Derived from: canon/{naam}/dialog.md, [date] -->`
|
|
76
|
+
- The prompt captures WHAT the video should express AND HOW IT MOVES, derived from the converged intent
|
|
77
|
+
- Anti-references MUST appear as negative prompt/guidance — never omit them
|
|
78
|
+
- Abstract concepts MUST be translated to concrete visuals AND motion — never copy them literally
|
|
79
|
+
- Audio intent is always included in the universal prompt, even when the generator doesn't support audio
|
|
80
|
+
- Camera movement descriptions must be specific (not "dynamic camera" but "slow tracking shot from left to right")
|
|
81
|
+
- Update `canon/{naam}/traceability.md` with complete mapping
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CanonEntry } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read the canon index by scanning the canon/ directory.
|
|
4
|
+
* Does not rely on index.md being present — scans subdirectories containing dialog.md.
|
|
5
|
+
*/
|
|
6
|
+
export declare function readCanonIndex(projectPath: string): CanonEntry[];
|
|
7
|
+
/**
|
|
8
|
+
* Regenerate index.md from the filesystem state.
|
|
9
|
+
* Scans all canons via readCanonIndex() and renders a fresh index.md.
|
|
10
|
+
*/
|
|
11
|
+
export declare function regenerateIndex(projectPath: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* Add a new canon entry to the index.
|
|
14
|
+
*/
|
|
15
|
+
export declare function addCanonToIndex(projectPath: string, _meta: {
|
|
16
|
+
name: string;
|
|
17
|
+
status: string;
|
|
18
|
+
date: string;
|
|
19
|
+
}): void;
|
|
20
|
+
/**
|
|
21
|
+
* Update a canon entry in the index.
|
|
22
|
+
*/
|
|
23
|
+
export declare function updateCanonInIndex(projectPath: string, _name: string, _updates: {
|
|
24
|
+
status?: string;
|
|
25
|
+
date?: string;
|
|
26
|
+
}): void;
|
|
27
|
+
//# sourceMappingURL=index-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-manager.d.ts","sourceRoot":"","sources":["../../../src/core/canon/index-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,EAAE,CAiDhE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,IAAI,CAEN"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { canonDir, readFileSafe, writeFile, ensureDir } from '../utils/fs.js';
|
|
4
|
+
import { extractConvergenceStamp, extractHumanStamp } from '../protocol/stamp-parser.js';
|
|
5
|
+
/**
|
|
6
|
+
* Read the canon index by scanning the canon/ directory.
|
|
7
|
+
* Does not rely on index.md being present — scans subdirectories containing dialog.md.
|
|
8
|
+
*/
|
|
9
|
+
export function readCanonIndex(projectPath) {
|
|
10
|
+
const dir = canonDir(projectPath);
|
|
11
|
+
if (!existsSync(dir))
|
|
12
|
+
return [];
|
|
13
|
+
// Scan for subdirectories that contain a dialog.md file
|
|
14
|
+
const subdirs = readdirSync(dir, { withFileTypes: true })
|
|
15
|
+
.filter((d) => d.isDirectory() && existsSync(resolve(dir, d.name, 'dialog.md')));
|
|
16
|
+
const entries = [];
|
|
17
|
+
for (const subdir of subdirs) {
|
|
18
|
+
const name = subdir.name;
|
|
19
|
+
const dialogPath = resolve(dir, name, 'dialog.md');
|
|
20
|
+
const summaryPath = resolve(dir, name, 'summary.md');
|
|
21
|
+
const hasSummary = existsSync(summaryPath);
|
|
22
|
+
let status = 'unknown';
|
|
23
|
+
let date = '';
|
|
24
|
+
let openQuestions = [];
|
|
25
|
+
let type = 'standalone';
|
|
26
|
+
const content = readFileSafe(dialogPath);
|
|
27
|
+
let humanStampStatus;
|
|
28
|
+
if (content) {
|
|
29
|
+
const stamp = extractConvergenceStamp(content);
|
|
30
|
+
if (stamp) {
|
|
31
|
+
status = stamp.type;
|
|
32
|
+
date = stamp.date;
|
|
33
|
+
openQuestions = stamp.openQuestions;
|
|
34
|
+
type = stamp.canonType || 'standalone';
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
status = 'draft';
|
|
38
|
+
}
|
|
39
|
+
const humanStamp = extractHumanStamp(content);
|
|
40
|
+
humanStampStatus = humanStamp?.status ?? 'PENDING';
|
|
41
|
+
}
|
|
42
|
+
entries.push({
|
|
43
|
+
name,
|
|
44
|
+
type,
|
|
45
|
+
status,
|
|
46
|
+
date,
|
|
47
|
+
hasSummary,
|
|
48
|
+
openQuestions,
|
|
49
|
+
humanStampStatus,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return entries;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Regenerate index.md from the filesystem state.
|
|
56
|
+
* Scans all canons via readCanonIndex() and renders a fresh index.md.
|
|
57
|
+
*/
|
|
58
|
+
export function regenerateIndex(projectPath) {
|
|
59
|
+
const entries = readCanonIndex(projectPath);
|
|
60
|
+
const content = renderIndexFile(entries);
|
|
61
|
+
const dir = canonDir(projectPath);
|
|
62
|
+
ensureDir(dir);
|
|
63
|
+
writeFile(resolve(dir, 'index.md'), content);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Add a new canon entry to the index.
|
|
67
|
+
*/
|
|
68
|
+
export function addCanonToIndex(projectPath, _meta) {
|
|
69
|
+
regenerateIndex(projectPath);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Update a canon entry in the index.
|
|
73
|
+
*/
|
|
74
|
+
export function updateCanonInIndex(projectPath, _name, _updates) {
|
|
75
|
+
regenerateIndex(projectPath);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Render a full index.md from CanonEntry[].
|
|
79
|
+
*/
|
|
80
|
+
function renderIndexFile(entries) {
|
|
81
|
+
const lines = [
|
|
82
|
+
'# Canon Index',
|
|
83
|
+
'<!-- Single pane of glass for all canons in this project -->',
|
|
84
|
+
'',
|
|
85
|
+
'## Overview',
|
|
86
|
+
'',
|
|
87
|
+
];
|
|
88
|
+
if (entries.length > 0) {
|
|
89
|
+
lines.push('| Dialog (Canon) | Summary (Derived) | Type | Status | Open Questions | Last Modified | Amendments |');
|
|
90
|
+
lines.push('|-----------------|-------------------|------|--------|---------------|--------------|------------|');
|
|
91
|
+
for (const entry of entries) {
|
|
92
|
+
lines.push(renderIndexRow(entry));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
lines.push('_No canons yet._');
|
|
97
|
+
}
|
|
98
|
+
lines.push('');
|
|
99
|
+
lines.push('## Open Questions Backlog');
|
|
100
|
+
lines.push('');
|
|
101
|
+
lines.push('| # | Question | Source Canon | Status |');
|
|
102
|
+
lines.push('|---|----------|-------------|--------|');
|
|
103
|
+
lines.push('');
|
|
104
|
+
lines.push('## Rules');
|
|
105
|
+
lines.push('');
|
|
106
|
+
lines.push('1. This index is updated with EVERY canon change (start, resume, amend, decompose)');
|
|
107
|
+
lines.push('2. The dialog file is THE CANON — the summary is derived');
|
|
108
|
+
lines.push('3. Open questions from all canons are collected in the backlog above');
|
|
109
|
+
lines.push('4. Status lifecycle: DRAFT → CONVERGED → AMENDED');
|
|
110
|
+
lines.push('5. Each canon has TWO files: the dialog (canon) and the summary (derived)');
|
|
111
|
+
lines.push('6. If dialog and summary conflict, the dialog wins');
|
|
112
|
+
lines.push('');
|
|
113
|
+
return lines.join('\n');
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Render a single index table row from a CanonEntry.
|
|
117
|
+
*/
|
|
118
|
+
function renderIndexRow(entry) {
|
|
119
|
+
const questions = entry.openQuestions.length > 0
|
|
120
|
+
? entry.openQuestions.join(', ')
|
|
121
|
+
: '—';
|
|
122
|
+
const summaryLink = entry.hasSummary
|
|
123
|
+
? `[${entry.name}/summary.md](${entry.name}/summary.md)`
|
|
124
|
+
: '—';
|
|
125
|
+
return `| [${entry.name}/dialog.md](${entry.name}/dialog.md) | ${summaryLink} | ${entry.type} | ${entry.status.toUpperCase()} | ${questions} | ${entry.date || '—'} | — |`;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=index-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-manager.js","sourceRoot":"","sources":["../../../src/core/canon/index-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implementation Manifest generator.
|
|
3
|
+
*
|
|
4
|
+
* Records the "collapse" from canon to concrete implementation
|
|
5
|
+
* as a traceable artifact written during translate.
|
|
6
|
+
*/
|
|
7
|
+
export interface ManifestInput {
|
|
8
|
+
canonName: string;
|
|
9
|
+
canonStatus: string;
|
|
10
|
+
humanStampStatus: string;
|
|
11
|
+
date: string;
|
|
12
|
+
model?: string;
|
|
13
|
+
dialog?: string;
|
|
14
|
+
mode?: string;
|
|
15
|
+
checkResult?: string;
|
|
16
|
+
specFiles: string[];
|
|
17
|
+
rationale?: string;
|
|
18
|
+
deviations?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function generateManifest(input: ManifestInput): string;
|
|
21
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/core/canon/manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAsD7D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implementation Manifest generator.
|
|
3
|
+
*
|
|
4
|
+
* Records the "collapse" from canon to concrete implementation
|
|
5
|
+
* as a traceable artifact written during translate.
|
|
6
|
+
*/
|
|
7
|
+
export function generateManifest(input) {
|
|
8
|
+
const lines = [];
|
|
9
|
+
lines.push(`<!-- Derived from: canon/${input.canonName}/dialog.md, ${input.date} -->`);
|
|
10
|
+
lines.push('');
|
|
11
|
+
lines.push('# Implementation Manifest');
|
|
12
|
+
lines.push('');
|
|
13
|
+
// Meta
|
|
14
|
+
lines.push('## Meta');
|
|
15
|
+
lines.push(`- **Canon**: ${input.canonName}`);
|
|
16
|
+
lines.push(`- **Canon Status**: ${input.canonStatus} (HUMAN STAMP: ${input.humanStampStatus})`);
|
|
17
|
+
lines.push(`- **Collapse Date**: ${input.date}`);
|
|
18
|
+
lines.push(`- **Model**: ${input.model ?? '[unknown]'}`);
|
|
19
|
+
lines.push(`- **Dialog**: ${input.dialog ?? '[none]'}`);
|
|
20
|
+
lines.push(`- **Mode**: ${input.mode ?? '[unknown]'}`);
|
|
21
|
+
if (input.checkResult) {
|
|
22
|
+
lines.push(`- **Check Result**: ${input.checkResult}`);
|
|
23
|
+
}
|
|
24
|
+
lines.push('');
|
|
25
|
+
// Inputs
|
|
26
|
+
lines.push('## Inputs');
|
|
27
|
+
lines.push(`- Canon dialog: canon/${input.canonName}/dialog.md`);
|
|
28
|
+
if (input.specFiles.length > 0) {
|
|
29
|
+
lines.push('- Spec files:');
|
|
30
|
+
for (const file of input.specFiles) {
|
|
31
|
+
lines.push(` - ${file}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
lines.push('');
|
|
35
|
+
// Outputs
|
|
36
|
+
lines.push('## Outputs');
|
|
37
|
+
if (input.specFiles.length > 0) {
|
|
38
|
+
for (const file of input.specFiles) {
|
|
39
|
+
lines.push(`- ${file}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
lines.push('- [no files generated]');
|
|
44
|
+
}
|
|
45
|
+
lines.push('');
|
|
46
|
+
// Rationale
|
|
47
|
+
lines.push('## Rationale');
|
|
48
|
+
lines.push(input.rationale ?? '[To be filled by implementing agent]');
|
|
49
|
+
lines.push('');
|
|
50
|
+
// Deviations
|
|
51
|
+
lines.push('## Deviations');
|
|
52
|
+
lines.push(input.deviations ?? 'none');
|
|
53
|
+
lines.push('');
|
|
54
|
+
return lines.join('\n');
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/core/canon/manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,MAAM,UAAU,gBAAgB,CAAC,KAAoB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,SAAS,eAAe,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC;IACvF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO;IACP,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,WAAW,kBAAkB,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAChG,KAAK,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,KAAK,IAAI,WAAW,EAAE,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,yBAAyB,KAAK,CAAC,SAAS,YAAY,CAAC,CAAC;IACjE,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,UAAU;IACV,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,YAAY;IACZ,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,sCAAsC,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,aAAa;IACb,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Message, ValidationResult } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Structural convergence validation (Level 2).
|
|
4
|
+
* Checks the dialog for required convergence elements with 12-category scoring.
|
|
5
|
+
*/
|
|
6
|
+
export declare function validateConvergence(dialog: Message[]): ValidationResult;
|
|
7
|
+
/**
|
|
8
|
+
* Validate an existing canon file on disk (used by pantion_check).
|
|
9
|
+
* Parses the dialog from the file content and validates.
|
|
10
|
+
*/
|
|
11
|
+
export declare function validateCanonFile(dialogContent: string): ValidationResult;
|
|
12
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/core/canon/validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAuF,MAAM,aAAa,CAAC;AA2MlJ;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CA4GvE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,gBAAgB,CAGzE"}
|