@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.
Files changed (260) hide show
  1. package/dialogs/dialog-builder/convergence-rules.md +64 -0
  2. package/dialogs/dialog-builder/dialog.json +10 -0
  3. package/dialogs/dialog-builder/prompts/convergence-intro.md +21 -0
  4. package/dialogs/dialog-builder/prompts/translate-intro.md +17 -0
  5. package/dialogs/dialog-builder/translate.md +46 -0
  6. package/dialogs/image/convergence-rules.md +55 -0
  7. package/dialogs/image/dialog.json +12 -0
  8. package/dialogs/image/prompts/convergence-intro.md +25 -0
  9. package/dialogs/image/prompts/translate-intro.md +37 -0
  10. package/dialogs/image/translate.md +67 -0
  11. package/dialogs/software/convergence-rules.md +29 -0
  12. package/dialogs/software/dialog.json +12 -0
  13. package/dialogs/software/prompts/convergence-intro.md +22 -0
  14. package/dialogs/software/prompts/translate-intro.md +19 -0
  15. package/dialogs/software/translate.md +74 -0
  16. package/dialogs/software-brownfield/convergence-rules.md +109 -0
  17. package/dialogs/software-brownfield/dialog.json +12 -0
  18. package/dialogs/software-brownfield/prompts/convergence-intro.md +26 -0
  19. package/dialogs/software-brownfield/prompts/translate-intro.md +13 -0
  20. package/dialogs/software-brownfield/translate.md +56 -0
  21. package/dialogs/video/convergence-rules.md +96 -0
  22. package/dialogs/video/dialog.json +12 -0
  23. package/dialogs/video/prompts/convergence-intro.md +28 -0
  24. package/dialogs/video/prompts/translate-intro.md +41 -0
  25. package/dialogs/video/translate.md +81 -0
  26. package/dist/core/canon/index-manager.d.ts +27 -0
  27. package/dist/core/canon/index-manager.d.ts.map +1 -0
  28. package/dist/core/canon/index-manager.js +127 -0
  29. package/dist/core/canon/index-manager.js.map +1 -0
  30. package/dist/core/canon/manifest.d.ts +21 -0
  31. package/dist/core/canon/manifest.d.ts.map +1 -0
  32. package/dist/core/canon/manifest.js +56 -0
  33. package/dist/core/canon/manifest.js.map +1 -0
  34. package/dist/core/canon/validator.d.ts +12 -0
  35. package/dist/core/canon/validator.d.ts.map +1 -0
  36. package/dist/core/canon/validator.js +320 -0
  37. package/dist/core/canon/validator.js.map +1 -0
  38. package/dist/core/dialog/canon-writer.d.ts +22 -0
  39. package/dist/core/dialog/canon-writer.d.ts.map +1 -0
  40. package/dist/core/dialog/canon-writer.js +96 -0
  41. package/dist/core/dialog/canon-writer.js.map +1 -0
  42. package/dist/core/dialog/registry.d.ts +10 -0
  43. package/dist/core/dialog/registry.d.ts.map +1 -0
  44. package/dist/core/dialog/registry.js +102 -0
  45. package/dist/core/dialog/registry.js.map +1 -0
  46. package/dist/core/dialog/selector.d.ts +11 -0
  47. package/dist/core/dialog/selector.d.ts.map +1 -0
  48. package/dist/core/dialog/selector.js +32 -0
  49. package/dist/core/dialog/selector.js.map +1 -0
  50. package/dist/core/index.d.ts +20 -0
  51. package/dist/core/index.d.ts.map +1 -0
  52. package/dist/core/index.js +30 -0
  53. package/dist/core/index.js.map +1 -0
  54. package/dist/core/protocol/convergence.d.ts +11 -0
  55. package/dist/core/protocol/convergence.d.ts.map +1 -0
  56. package/dist/core/protocol/convergence.js +30 -0
  57. package/dist/core/protocol/convergence.js.map +1 -0
  58. package/dist/core/protocol/loader.d.ts +6 -0
  59. package/dist/core/protocol/loader.d.ts.map +1 -0
  60. package/dist/core/protocol/loader.js +31 -0
  61. package/dist/core/protocol/loader.js.map +1 -0
  62. package/dist/core/protocol/stamp-parser.d.ts +46 -0
  63. package/dist/core/protocol/stamp-parser.d.ts.map +1 -0
  64. package/dist/core/protocol/stamp-parser.js +333 -0
  65. package/dist/core/protocol/stamp-parser.js.map +1 -0
  66. package/dist/core/protocol/system-prompt.d.ts +16 -0
  67. package/dist/core/protocol/system-prompt.d.ts.map +1 -0
  68. package/dist/core/protocol/system-prompt.js +68 -0
  69. package/dist/core/protocol/system-prompt.js.map +1 -0
  70. package/dist/core/session/canon-writer.d.ts +33 -0
  71. package/dist/core/session/canon-writer.d.ts.map +1 -0
  72. package/dist/core/session/canon-writer.js +152 -0
  73. package/dist/core/session/canon-writer.js.map +1 -0
  74. package/dist/core/session/manager.d.ts +10 -0
  75. package/dist/core/session/manager.d.ts.map +1 -0
  76. package/dist/core/session/manager.js +105 -0
  77. package/dist/core/session/manager.js.map +1 -0
  78. package/dist/core/skill/canon-writer.d.ts +22 -0
  79. package/dist/core/skill/canon-writer.d.ts.map +1 -0
  80. package/dist/core/skill/canon-writer.js +96 -0
  81. package/dist/core/skill/canon-writer.js.map +1 -0
  82. package/dist/core/skill/registry.d.ts +10 -0
  83. package/dist/core/skill/registry.d.ts.map +1 -0
  84. package/dist/core/skill/registry.js +102 -0
  85. package/dist/core/skill/registry.js.map +1 -0
  86. package/dist/core/skill/selector.d.ts +11 -0
  87. package/dist/core/skill/selector.d.ts.map +1 -0
  88. package/dist/core/skill/selector.js +32 -0
  89. package/dist/core/skill/selector.js.map +1 -0
  90. package/dist/core/soul/registry.d.ts +10 -0
  91. package/dist/core/soul/registry.d.ts.map +1 -0
  92. package/dist/core/soul/registry.js +73 -0
  93. package/dist/core/soul/registry.js.map +1 -0
  94. package/dist/core/types.d.ts +154 -0
  95. package/dist/core/types.d.ts.map +1 -0
  96. package/dist/core/types.js +6 -0
  97. package/dist/core/types.js.map +1 -0
  98. package/dist/core/utils/fs.d.ts +14 -0
  99. package/dist/core/utils/fs.d.ts.map +1 -0
  100. package/dist/core/utils/fs.js +44 -0
  101. package/dist/core/utils/fs.js.map +1 -0
  102. package/dist/core/utils/project-detect.d.ts +3 -0
  103. package/dist/core/utils/project-detect.d.ts.map +1 -0
  104. package/dist/core/utils/project-detect.js +38 -0
  105. package/dist/core/utils/project-detect.js.map +1 -0
  106. package/dist/feature-set.d.ts +14 -0
  107. package/dist/feature-set.d.ts.map +1 -0
  108. package/dist/feature-set.js +38 -0
  109. package/dist/feature-set.js.map +1 -0
  110. package/dist/index.d.ts +3 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +56 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/prompts/convergence-prompts.d.ts +4 -0
  115. package/dist/prompts/convergence-prompts.d.ts.map +1 -0
  116. package/dist/prompts/convergence-prompts.js +76 -0
  117. package/dist/prompts/convergence-prompts.js.map +1 -0
  118. package/dist/prompts/index.d.ts +4 -0
  119. package/dist/prompts/index.d.ts.map +1 -0
  120. package/dist/prompts/index.js +7 -0
  121. package/dist/prompts/index.js.map +1 -0
  122. package/dist/prompts/workflow-prompts.d.ts +9 -0
  123. package/dist/prompts/workflow-prompts.d.ts.map +1 -0
  124. package/dist/prompts/workflow-prompts.js +265 -0
  125. package/dist/prompts/workflow-prompts.js.map +1 -0
  126. package/dist/resources/canon-resources.d.ts +4 -0
  127. package/dist/resources/canon-resources.d.ts.map +1 -0
  128. package/dist/resources/canon-resources.js +164 -0
  129. package/dist/resources/canon-resources.js.map +1 -0
  130. package/dist/server.d.ts +9 -0
  131. package/dist/server.d.ts.map +1 -0
  132. package/dist/server.js +47 -0
  133. package/dist/server.js.map +1 -0
  134. package/dist/tools/amend.d.ts +4 -0
  135. package/dist/tools/amend.d.ts.map +1 -0
  136. package/dist/tools/amend.js +106 -0
  137. package/dist/tools/amend.js.map +1 -0
  138. package/dist/tools/approve.d.ts +4 -0
  139. package/dist/tools/approve.d.ts.map +1 -0
  140. package/dist/tools/approve.js +60 -0
  141. package/dist/tools/approve.js.map +1 -0
  142. package/dist/tools/check-convergence.d.ts +4 -0
  143. package/dist/tools/check-convergence.d.ts.map +1 -0
  144. package/dist/tools/check-convergence.js +50 -0
  145. package/dist/tools/check-convergence.js.map +1 -0
  146. package/dist/tools/check.d.ts +4 -0
  147. package/dist/tools/check.d.ts.map +1 -0
  148. package/dist/tools/check.js +190 -0
  149. package/dist/tools/check.js.map +1 -0
  150. package/dist/tools/create-dialog.d.ts +4 -0
  151. package/dist/tools/create-dialog.d.ts.map +1 -0
  152. package/dist/tools/create-dialog.js +58 -0
  153. package/dist/tools/create-dialog.js.map +1 -0
  154. package/dist/tools/create-skill.d.ts +4 -0
  155. package/dist/tools/create-skill.d.ts.map +1 -0
  156. package/dist/tools/create-skill.js +58 -0
  157. package/dist/tools/create-skill.js.map +1 -0
  158. package/dist/tools/decompose.d.ts +4 -0
  159. package/dist/tools/decompose.d.ts.map +1 -0
  160. package/dist/tools/decompose.js +56 -0
  161. package/dist/tools/decompose.js.map +1 -0
  162. package/dist/tools/index.d.ts +4 -0
  163. package/dist/tools/index.d.ts.map +1 -0
  164. package/dist/tools/index.js +49 -0
  165. package/dist/tools/index.js.map +1 -0
  166. package/dist/tools/list-canons.d.ts +4 -0
  167. package/dist/tools/list-canons.d.ts.map +1 -0
  168. package/dist/tools/list-canons.js +28 -0
  169. package/dist/tools/list-canons.js.map +1 -0
  170. package/dist/tools/migrate.d.ts +4 -0
  171. package/dist/tools/migrate.d.ts.map +1 -0
  172. package/dist/tools/migrate.js +38 -0
  173. package/dist/tools/migrate.js.map +1 -0
  174. package/dist/tools/onboard.d.ts +4 -0
  175. package/dist/tools/onboard.d.ts.map +1 -0
  176. package/dist/tools/onboard.js +27 -0
  177. package/dist/tools/onboard.js.map +1 -0
  178. package/dist/tools/reconverge.d.ts +4 -0
  179. package/dist/tools/reconverge.d.ts.map +1 -0
  180. package/dist/tools/reconverge.js +68 -0
  181. package/dist/tools/reconverge.js.map +1 -0
  182. package/dist/tools/redialog.d.ts +4 -0
  183. package/dist/tools/redialog.d.ts.map +1 -0
  184. package/dist/tools/redialog.js +63 -0
  185. package/dist/tools/redialog.js.map +1 -0
  186. package/dist/tools/reflect.d.ts +4 -0
  187. package/dist/tools/reflect.d.ts.map +1 -0
  188. package/dist/tools/reflect.js +86 -0
  189. package/dist/tools/reflect.js.map +1 -0
  190. package/dist/tools/reject.d.ts +4 -0
  191. package/dist/tools/reject.d.ts.map +1 -0
  192. package/dist/tools/reject.js +57 -0
  193. package/dist/tools/reject.js.map +1 -0
  194. package/dist/tools/reskill.d.ts +4 -0
  195. package/dist/tools/reskill.d.ts.map +1 -0
  196. package/dist/tools/reskill.js +63 -0
  197. package/dist/tools/reskill.js.map +1 -0
  198. package/dist/tools/resume.d.ts +4 -0
  199. package/dist/tools/resume.d.ts.map +1 -0
  200. package/dist/tools/resume.js +56 -0
  201. package/dist/tools/resume.js.map +1 -0
  202. package/dist/tools/reverse.d.ts +4 -0
  203. package/dist/tools/reverse.d.ts.map +1 -0
  204. package/dist/tools/reverse.js +32 -0
  205. package/dist/tools/reverse.js.map +1 -0
  206. package/dist/tools/save-canon.d.ts +4 -0
  207. package/dist/tools/save-canon.d.ts.map +1 -0
  208. package/dist/tools/save-canon.js +97 -0
  209. package/dist/tools/save-canon.js.map +1 -0
  210. package/dist/tools/start.d.ts +4 -0
  211. package/dist/tools/start.d.ts.map +1 -0
  212. package/dist/tools/start.js +83 -0
  213. package/dist/tools/start.js.map +1 -0
  214. package/dist/tools/translate.d.ts +4 -0
  215. package/dist/tools/translate.d.ts.map +1 -0
  216. package/dist/tools/translate.js +102 -0
  217. package/dist/tools/translate.js.map +1 -0
  218. package/dist/tools/update.d.ts +4 -0
  219. package/dist/tools/update.d.ts.map +1 -0
  220. package/dist/tools/update.js +42 -0
  221. package/dist/tools/update.js.map +1 -0
  222. package/dist/tools/validate.d.ts +4 -0
  223. package/dist/tools/validate.d.ts.map +1 -0
  224. package/dist/tools/validate.js +86 -0
  225. package/dist/tools/validate.js.map +1 -0
  226. package/dist/utils/response.d.ts +12 -0
  227. package/dist/utils/response.d.ts.map +1 -0
  228. package/dist/utils/response.js +18 -0
  229. package/dist/utils/response.js.map +1 -0
  230. package/package.json +37 -0
  231. package/protocol/commands/amend.md +188 -0
  232. package/protocol/commands/build.md +90 -0
  233. package/protocol/commands/check.md +255 -0
  234. package/protocol/commands/create-dialog.md +81 -0
  235. package/protocol/commands/decompose.md +230 -0
  236. package/protocol/commands/dialog.md +173 -0
  237. package/protocol/commands/help.md +121 -0
  238. package/protocol/commands/migrate.md +173 -0
  239. package/protocol/commands/onboard.md +210 -0
  240. package/protocol/commands/quick.md +170 -0
  241. package/protocol/commands/redialog.md +73 -0
  242. package/protocol/commands/reflect.md +136 -0
  243. package/protocol/commands/resume.md +148 -0
  244. package/protocol/commands/reverse.md +312 -0
  245. package/protocol/commands/start.md +220 -0
  246. package/protocol/commands/translate.md +157 -0
  247. package/protocol/commands/update.md +205 -0
  248. package/protocol/core-advanced.md +188 -0
  249. package/protocol/core.md +274 -0
  250. package/protocol/pantion-future-prompt.md +88 -0
  251. package/protocol/pantion-intent.md +78 -0
  252. package/protocol/templates/acceptance-tests.md +116 -0
  253. package/protocol/templates/behavior-map.md +135 -0
  254. package/protocol/templates/traceability-map.md +56 -0
  255. package/souls/beginner/rules.md +34 -0
  256. package/souls/beginner/soul.json +6 -0
  257. package/souls/default/rules.md +25 -0
  258. package/souls/default/soul.json +6 -0
  259. package/souls/young/rules.md +67 -0
  260. 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"}