takomi 2.1.45 → 2.5.4
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/.pi/README.md +5 -5
- package/.pi/agents/architect.md +2 -2
- package/.pi/agents/designer.md +2 -2
- package/.pi/agents/worker.md +32 -0
- package/.pi/extensions/oauth-router/README.md +3 -3
- package/.pi/extensions/oauth-router/config.ts +34 -34
- package/.pi/extensions/oauth-router/report-ui.ts +205 -205
- package/.pi/extensions/oauth-router/scripts/vibe-verify.py +5 -5
- package/.pi/extensions/takomi-context-manager/diagnostics.ts +560 -560
- package/.pi/extensions/takomi-context-manager/model-policy-gate.ts +15 -103
- package/.pi/extensions/takomi-context-manager/policy-tools.ts +93 -93
- package/.pi/extensions/takomi-context-manager/skill-categories.d.ts +11 -11
- package/.pi/extensions/takomi-context-manager/skill-tools.ts +208 -208
- package/.pi/extensions/takomi-context-manager/tool-renderers.ts +112 -112
- package/.pi/extensions/takomi-runtime/command-text.ts +5 -4
- package/.pi/extensions/takomi-runtime/commands.ts +17 -17
- package/.pi/extensions/takomi-runtime/gate-provenance.ts +24 -24
- package/.pi/extensions/takomi-runtime/index.ts +278 -86
- package/.pi/extensions/takomi-runtime/model-routing-defaults.ts +168 -232
- package/.pi/extensions/takomi-runtime/profile.ts +9 -8
- package/.pi/extensions/takomi-runtime/routing-policy.ts +84 -65
- package/.pi/extensions/takomi-runtime/shared.ts +7 -30
- package/.pi/extensions/takomi-runtime/tool-renderers.ts +234 -234
- package/.pi/extensions/takomi-runtime/workflow-catalog.ts +54 -54
- package/.pi/extensions/takomi-subagents/agents.ts +5 -0
- package/.pi/extensions/takomi-subagents/async-lifecycle.ts +401 -401
- package/.pi/extensions/takomi-subagents/detached-results.ts +940 -940
- package/.pi/extensions/takomi-subagents/index.ts +4 -0
- package/.pi/extensions/takomi-subagents/native-render.ts +253 -250
- package/.pi/extensions/takomi-subagents/pi-subagents-engine.ts +7 -1
- package/.pi/extensions/takomi-subagents/result-heartbeat.ts +55 -55
- package/.pi/extensions/takomi-subagents/subagent-ux.ts +162 -162
- package/.pi/extensions/takomi-subagents/tool-runner.ts +65 -1
- package/.pi/settings.json +39 -36
- package/.pi/takomi/model-routing.md +6 -0
- package/.pi/takomi-profile.json +8 -4
- package/README.md +1 -1
- package/assets/.agent/skills/embedded-captions/CATALOG.md +93 -93
- package/assets/.agent/skills/embedded-captions/SKILL.md +286 -286
- package/assets/.agent/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -35
- package/assets/.agent/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -115
- package/assets/.agent/skills/embedded-captions/assets/fonts/char-widths.json +2211 -2211
- package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +241 -241
- package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +241 -241
- package/assets/.agent/skills/embedded-captions/dna/README.md +148 -148
- package/assets/.agent/skills/embedded-captions/dna/chrome.json +68 -68
- package/assets/.agent/skills/embedded-captions/dna/cream.json +69 -69
- package/assets/.agent/skills/embedded-captions/dna/documentary.json +62 -62
- package/assets/.agent/skills/embedded-captions/dna/editorial.json +70 -70
- package/assets/.agent/skills/embedded-captions/dna/glitch.json +82 -82
- package/assets/.agent/skills/embedded-captions/dna/ink.json +65 -65
- package/assets/.agent/skills/embedded-captions/dna/keynote.json +62 -62
- package/assets/.agent/skills/embedded-captions/dna/loud.json +75 -75
- package/assets/.agent/skills/embedded-captions/dna/neon.json +58 -58
- package/assets/.agent/skills/embedded-captions/dna/velocity.json +89 -89
- package/assets/.agent/skills/embedded-captions/modes/cinematic/README.md +48 -48
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -98
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -188
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -134
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -179
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -81
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -170
- package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -16
- package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -226
- package/assets/.agent/skills/embedded-captions/modes/cinematic/engine.html +355 -355
- package/assets/.agent/skills/embedded-captions/modes/standard/_anatomy.md +233 -233
- package/assets/.agent/skills/embedded-captions/modes/standard/_motion.md +192 -192
- package/assets/.agent/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -97
- package/assets/.agent/skills/embedded-captions/references/aesthetic-principles.md +168 -168
- package/assets/.agent/skills/embedded-captions/references/anti-patterns.md +188 -188
- package/assets/.agent/skills/embedded-captions/references/bespoke-vs-presets.md +178 -178
- package/assets/.agent/skills/embedded-captions/references/caption-grouping.md +130 -130
- package/assets/.agent/skills/embedded-captions/references/composition-craft.md +522 -522
- package/assets/.agent/skills/embedded-captions/references/direction-catalog.md +138 -138
- package/assets/.agent/skills/embedded-captions/references/example-renders/champion.html +371 -371
- package/assets/.agent/skills/embedded-captions/references/example-renders/memory-wall.html +334 -334
- package/assets/.agent/skills/embedded-captions/references/failure-modes.md +145 -145
- package/assets/.agent/skills/embedded-captions/references/layout-heuristics.md +238 -238
- package/assets/.agent/skills/embedded-captions/references/motion-vocabulary.md +148 -148
- package/assets/.agent/skills/embedded-captions/references/rail.md +68 -68
- package/assets/.agent/skills/embedded-captions/references/reference-bar.md +47 -47
- package/assets/.agent/skills/embedded-captions/references/scene-types.md +94 -94
- package/assets/.agent/skills/embedded-captions/references/test-set.md +66 -66
- package/assets/.agent/skills/embedded-captions/references/typographic-moves.md +266 -266
- package/assets/.agent/skills/embedded-captions/references/typography-presets.md +63 -63
- package/assets/.agent/skills/embedded-captions/scripts/audio-envelope.cjs +95 -95
- package/assets/.agent/skills/embedded-captions/scripts/check-occlusion.cjs +250 -250
- package/assets/.agent/skills/embedded-captions/scripts/check-overflow.cjs +194 -194
- package/assets/.agent/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -233
- package/assets/.agent/skills/embedded-captions/scripts/check-timing.cjs +173 -173
- package/assets/.agent/skills/embedded-captions/scripts/fill-timings.cjs +124 -124
- package/assets/.agent/skills/embedded-captions/scripts/fit-fonts.cjs +158 -158
- package/assets/.agent/skills/embedded-captions/scripts/gen-stroke-path.py +46 -46
- package/assets/.agent/skills/embedded-captions/scripts/inject-fonts.cjs +169 -169
- package/assets/.agent/skills/embedded-captions/scripts/lib-dna.cjs +201 -201
- package/assets/.agent/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -1205
- package/assets/.agent/skills/embedded-captions/scripts/make-composition.cjs +404 -404
- package/assets/.agent/skills/embedded-captions/scripts/make-theme.cjs +8781 -8781
- package/assets/.agent/skills/embedded-captions/scripts/matte.cjs +279 -279
- package/assets/.agent/skills/embedded-captions/scripts/measure-layout.cjs +293 -293
- package/assets/.agent/skills/embedded-captions/scripts/prepare.sh +39 -39
- package/assets/.agent/skills/embedded-captions/scripts/preview-frames.cjs +268 -268
- package/assets/.agent/skills/embedded-captions/scripts/render-and-composite.sh +469 -469
- package/assets/.agent/skills/embedded-captions/scripts/render-theme.sh +34 -34
- package/assets/.agent/skills/embedded-captions/scripts/safe-zones.cjs +813 -813
- package/assets/.agent/skills/embedded-captions/scripts/transcribe.cjs +332 -332
- package/assets/.agent/skills/embedded-captions/themes/PORTING.md +49 -49
- package/assets/.agent/skills/embedded-captions/themes/README.md +244 -244
- package/assets/.agent/skills/embedded-captions/themes/anchor.json +27 -27
- package/assets/.agent/skills/embedded-captions/themes/arcade.json +51 -51
- package/assets/.agent/skills/embedded-captions/themes/aurora.json +41 -41
- package/assets/.agent/skills/embedded-captions/themes/biolume.json +35 -35
- package/assets/.agent/skills/embedded-captions/themes/brush.json +74 -74
- package/assets/.agent/skills/embedded-captions/themes/chalkboard.json +52 -52
- package/assets/.agent/skills/embedded-captions/themes/dossier.json +56 -56
- package/assets/.agent/skills/embedded-captions/themes/graffiti.json +62 -62
- package/assets/.agent/skills/embedded-captions/themes/hologram.json +41 -41
- package/assets/.agent/skills/embedded-captions/themes/inkwater.json +43 -43
- package/assets/.agent/skills/embedded-captions/themes/laser.json +46 -46
- package/assets/.agent/skills/embedded-captions/themes/lastpage.json +33 -33
- package/assets/.agent/skills/embedded-captions/themes/neonsign.json +53 -53
- package/assets/.agent/skills/embedded-captions/themes/nightcity.json +56 -56
- package/assets/.agent/skills/embedded-captions/themes/ordnance.json +54 -54
- package/assets/.agent/skills/embedded-captions/themes/papercut.json +37 -37
- package/assets/.agent/skills/embedded-captions/themes/popup.json +46 -46
- package/assets/.agent/skills/embedded-captions/themes/ransom.json +62 -62
- package/assets/.agent/skills/embedded-captions/themes/scoreboard.json +54 -54
- package/assets/.agent/skills/embedded-captions/themes/spectrum.json +46 -46
- package/assets/.agent/skills/embedded-captions/themes/stardust.json +29 -29
- package/assets/.agent/skills/embedded-captions/themes/stomp.json +43 -43
- package/assets/.agent/skills/embedded-captions/themes/terminal.json +49 -49
- package/assets/.agent/skills/embedded-captions/themes/thunder.json +44 -44
- package/assets/.agent/skills/embedded-captions/themes/transit.json +44 -44
- package/assets/.agent/skills/embedded-captions/themes/vhs.json +47 -47
- package/assets/.agent/skills/faceless-explainer/SKILL.md +209 -209
- package/assets/.agent/skills/faceless-explainer/references/cut-catalog.md +215 -215
- package/assets/.agent/skills/faceless-explainer/references/motion-language.md +156 -156
- package/assets/.agent/skills/faceless-explainer/references/story-design.md +248 -248
- package/assets/.agent/skills/faceless-explainer/references/visual-design.md +146 -146
- package/assets/.agent/skills/faceless-explainer/scripts/assemble-index.mjs +570 -570
- package/assets/.agent/skills/faceless-explainer/scripts/audio.mjs +253 -253
- package/assets/.agent/skills/faceless-explainer/scripts/build-frame.mjs +536 -536
- package/assets/.agent/skills/faceless-explainer/scripts/captions.mjs +508 -508
- package/assets/.agent/skills/faceless-explainer/scripts/lib/assets.mjs +55 -55
- package/assets/.agent/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -45
- package/assets/.agent/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -204
- package/assets/.agent/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -38
- package/assets/.agent/skills/faceless-explainer/scripts/lib/transitions.json +71 -71
- package/assets/.agent/skills/faceless-explainer/scripts/transitions.mjs +320 -320
- package/assets/.agent/skills/faceless-explainer/sub-agents/frame-worker.md +75 -75
- package/assets/.agent/skills/figma/SKILL.md +121 -121
- package/assets/.agent/skills/general-video/SKILL.md +143 -143
- package/assets/.agent/skills/hyperframes/SKILL.md +164 -164
- package/assets/.agent/skills/hyperframes-animation/SKILL.md +84 -84
- package/assets/.agent/skills/hyperframes-animation/adapters/animate-text.md +64 -64
- package/assets/.agent/skills/hyperframes-animation/adapters/animejs.md +114 -114
- package/assets/.agent/skills/hyperframes-animation/adapters/css-animations.md +143 -143
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -118
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -96
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -96
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap.md +105 -105
- package/assets/.agent/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -507
- package/assets/.agent/skills/hyperframes-animation/adapters/lottie.md +117 -117
- package/assets/.agent/skills/hyperframes-animation/adapters/three.md +131 -131
- package/assets/.agent/skills/hyperframes-animation/adapters/typegpu.md +178 -178
- package/assets/.agent/skills/hyperframes-animation/adapters/waapi.md +101 -101
- package/assets/.agent/skills/hyperframes-animation/blueprints/comparison-split.md +27 -27
- package/assets/.agent/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -44
- package/assets/.agent/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -28
- package/assets/.agent/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -57
- package/assets/.agent/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -46
- package/assets/.agent/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -53
- package/assets/.agent/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -66
- package/assets/.agent/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -78
- package/assets/.agent/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -69
- package/assets/.agent/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -28
- package/assets/.agent/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -37
- package/assets/.agent/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -29
- package/assets/.agent/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -42
- package/assets/.agent/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -51
- package/assets/.agent/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -30
- package/assets/.agent/skills/hyperframes-animation/blueprints-index.md +146 -146
- package/assets/.agent/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -382
- package/assets/.agent/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -649
- package/assets/.agent/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -520
- package/assets/.agent/skills/hyperframes-animation/examples/cta-morph-press.html +468 -468
- package/assets/.agent/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -1298
- package/assets/.agent/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -759
- package/assets/.agent/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -729
- package/assets/.agent/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -352
- package/assets/.agent/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -779
- package/assets/.agent/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -1374
- package/assets/.agent/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -861
- package/assets/.agent/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -347
- package/assets/.agent/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -606
- package/assets/.agent/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -227
- package/assets/.agent/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -297
- package/assets/.agent/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -382
- package/assets/.agent/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -305
- package/assets/.agent/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -286
- package/assets/.agent/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -371
- package/assets/.agent/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -246
- package/assets/.agent/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -267
- package/assets/.agent/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -227
- package/assets/.agent/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -257
- package/assets/.agent/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -332
- package/assets/.agent/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -283
- package/assets/.agent/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -373
- package/assets/.agent/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -262
- package/assets/.agent/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -313
- package/assets/.agent/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -303
- package/assets/.agent/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -273
- package/assets/.agent/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -307
- package/assets/.agent/skills/hyperframes-animation/rules/gsap-effects.md +299 -299
- package/assets/.agent/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -223
- package/assets/.agent/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -183
- package/assets/.agent/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -328
- package/assets/.agent/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -273
- package/assets/.agent/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -301
- package/assets/.agent/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -350
- package/assets/.agent/skills/hyperframes-animation/rules/press-release-spring.md +296 -296
- package/assets/.agent/skills/hyperframes-animation/rules/reactive-displacement.md +277 -277
- package/assets/.agent/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -298
- package/assets/.agent/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -278
- package/assets/.agent/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -277
- package/assets/.agent/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -273
- package/assets/.agent/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -156
- package/assets/.agent/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -329
- package/assets/.agent/skills/hyperframes-animation/rules/svg-path-draw.md +274 -274
- package/assets/.agent/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -239
- package/assets/.agent/skills/hyperframes-animation/rules/viewport-change.md +349 -349
- package/assets/.agent/skills/hyperframes-animation/rules-index.md +86 -86
- package/assets/.agent/skills/hyperframes-animation/scripts/animation-map.mjs +606 -606
- package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.mjs +288 -288
- package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -62
- package/assets/.agent/skills/hyperframes-animation/techniques.md +507 -507
- package/assets/.agent/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -167
- package/assets/.agent/skills/hyperframes-animation/transitions/catalog.md +127 -127
- package/assets/.agent/skills/hyperframes-animation/transitions/css-3d.md +12 -12
- package/assets/.agent/skills/hyperframes-animation/transitions/css-blur.md +51 -51
- package/assets/.agent/skills/hyperframes-animation/transitions/css-cover.md +43 -43
- package/assets/.agent/skills/hyperframes-animation/transitions/css-destruction.md +95 -95
- package/assets/.agent/skills/hyperframes-animation/transitions/css-dissolve.md +66 -66
- package/assets/.agent/skills/hyperframes-animation/transitions/css-distortion.md +45 -45
- package/assets/.agent/skills/hyperframes-animation/transitions/css-grid.md +10 -10
- package/assets/.agent/skills/hyperframes-animation/transitions/css-light.md +49 -49
- package/assets/.agent/skills/hyperframes-animation/transitions/css-mechanical.md +30 -30
- package/assets/.agent/skills/hyperframes-animation/transitions/css-other.md +25 -25
- package/assets/.agent/skills/hyperframes-animation/transitions/css-push.md +41 -41
- package/assets/.agent/skills/hyperframes-animation/transitions/css-radial.md +37 -37
- package/assets/.agent/skills/hyperframes-animation/transitions/css-scale.md +24 -24
- package/assets/.agent/skills/hyperframes-animation/transitions/overview.md +153 -153
- package/assets/.agent/skills/hyperframes-cli/SKILL.md +113 -113
- package/assets/.agent/skills/hyperframes-cli/references/doctor-browser.md +45 -45
- package/assets/.agent/skills/hyperframes-cli/references/init-and-scaffold.md +51 -51
- package/assets/.agent/skills/hyperframes-cli/references/lambda.md +132 -132
- package/assets/.agent/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -121
- package/assets/.agent/skills/hyperframes-cli/references/preview-render.md +164 -164
- package/assets/.agent/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -75
- package/assets/.agent/skills/hyperframes-core/SKILL.md +78 -78
- package/assets/.agent/skills/hyperframes-core/references/composition-patterns.md +263 -263
- package/assets/.agent/skills/hyperframes-core/references/data-attributes.md +70 -70
- package/assets/.agent/skills/hyperframes-core/references/determinism-rules.md +68 -68
- package/assets/.agent/skills/hyperframes-core/references/full-screen-motion.md +62 -62
- package/assets/.agent/skills/hyperframes-core/references/minimal-composition.md +66 -66
- package/assets/.agent/skills/hyperframes-core/references/script-format.md +49 -49
- package/assets/.agent/skills/hyperframes-core/references/storyboard-format.md +95 -95
- package/assets/.agent/skills/hyperframes-core/references/sub-compositions.md +237 -237
- package/assets/.agent/skills/hyperframes-core/references/subagent-dispatch.md +41 -41
- package/assets/.agent/skills/hyperframes-core/references/tailwind.md +125 -125
- package/assets/.agent/skills/hyperframes-core/references/tracks-and-clips.md +76 -76
- package/assets/.agent/skills/hyperframes-core/references/variables-and-media.md +90 -90
- package/assets/.agent/skills/hyperframes-creative/SKILL.md +70 -70
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -289
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -221
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -1214
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -275
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -224
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -1347
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -307
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -223
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -1372
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -275
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -230
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -1140
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -284
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -225
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -1166
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -284
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -224
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -1465
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -278
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -222
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -1263
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -277
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -224
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -1439
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -265
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -238
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -1468
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -314
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -226
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -1268
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -333
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -227
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -1330
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -274
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -230
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -1444
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -265
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -223
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -1273
- package/assets/.agent/skills/hyperframes-creative/palettes/bold-energetic.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/clean-corporate.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/dark-premium.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/jewel-rich.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/monochrome.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/nature-earth.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/neon-electric.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/pastel-soft.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/warm-editorial.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/references/audio-reactive.md +76 -76
- package/assets/.agent/skills/hyperframes-creative/references/beat-direction.md +164 -164
- package/assets/.agent/skills/hyperframes-creative/references/composition-patterns.md +199 -199
- package/assets/.agent/skills/hyperframes-creative/references/data-in-motion.md +19 -19
- package/assets/.agent/skills/hyperframes-creative/references/design-adherence.md +19 -19
- package/assets/.agent/skills/hyperframes-creative/references/design-picker.md +123 -123
- package/assets/.agent/skills/hyperframes-creative/references/design-spec.md +55 -55
- package/assets/.agent/skills/hyperframes-creative/references/house-style.md +73 -73
- package/assets/.agent/skills/hyperframes-creative/references/motion-principles.md +150 -150
- package/assets/.agent/skills/hyperframes-creative/references/narration.md +92 -92
- package/assets/.agent/skills/hyperframes-creative/references/prompt-expansion.md +68 -68
- package/assets/.agent/skills/hyperframes-creative/references/typography.md +218 -218
- package/assets/.agent/skills/hyperframes-creative/references/video-composition.md +63 -63
- package/assets/.agent/skills/hyperframes-creative/references/visual-styles.md +457 -457
- package/assets/.agent/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -353
- package/assets/.agent/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -188
- package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.mjs +288 -288
- package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -62
- package/assets/.agent/skills/hyperframes-creative/templates/design-picker.html +1432 -1432
- package/assets/.agent/skills/hyperframes-keyframes/SKILL.md +237 -237
- package/assets/.agent/skills/hyperframes-keyframes/agents/openai.yaml +4 -4
- package/assets/.agent/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -106
- package/assets/.agent/skills/hyperframes-media/SKILL.md +97 -97
- package/assets/.agent/skills/hyperframes-media/assets/sfx/CREDITS.md +35 -35
- package/assets/.agent/skills/hyperframes-media/assets/sfx/manifest.json +97 -97
- package/assets/.agent/skills/hyperframes-media/references/bgm.md +72 -72
- package/assets/.agent/skills/hyperframes-media/references/captions/authoring.md +159 -159
- package/assets/.agent/skills/hyperframes-media/references/captions/motion.md +87 -87
- package/assets/.agent/skills/hyperframes-media/references/captions/transcript-handling.md +97 -97
- package/assets/.agent/skills/hyperframes-media/references/remove-background.md +143 -143
- package/assets/.agent/skills/hyperframes-media/references/requirements.md +29 -29
- package/assets/.agent/skills/hyperframes-media/references/sfx.md +42 -42
- package/assets/.agent/skills/hyperframes-media/references/transcribe.md +52 -52
- package/assets/.agent/skills/hyperframes-media/references/tts-to-captions.md +24 -24
- package/assets/.agent/skills/hyperframes-media/references/tts.md +135 -135
- package/assets/.agent/skills/hyperframes-media/scripts/audio.mjs +293 -293
- package/assets/.agent/skills/hyperframes-media/scripts/heygen-tts.mjs +121 -121
- package/assets/.agent/skills/hyperframes-media/scripts/lib/bgm.mjs +235 -235
- package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.mjs +14 -14
- package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.test.mjs +41 -41
- package/assets/.agent/skills/hyperframes-media/scripts/lib/heygen.mjs +131 -131
- package/assets/.agent/skills/hyperframes-media/scripts/lib/sfx.mjs +128 -128
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.mjs +298 -298
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.spawn.test.mjs +97 -97
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.test.mjs +66 -66
- package/assets/.agent/skills/hyperframes-media/scripts/lyria-recipe.py +128 -128
- package/assets/.agent/skills/hyperframes-media/scripts/wait-bgm.mjs +167 -167
- package/assets/.agent/skills/hyperframes-registry/SKILL.md +101 -101
- package/assets/.agent/skills/hyperframes-registry/examples/add-block.md +51 -51
- package/assets/.agent/skills/hyperframes-registry/examples/add-component.md +73 -73
- package/assets/.agent/skills/hyperframes-registry/references/contributing.md +166 -166
- package/assets/.agent/skills/hyperframes-registry/references/demo-html-pattern.md +54 -54
- package/assets/.agent/skills/hyperframes-registry/references/discovery.md +215 -215
- package/assets/.agent/skills/hyperframes-registry/references/install-locations.md +45 -45
- package/assets/.agent/skills/hyperframes-registry/references/templates.md +417 -417
- package/assets/.agent/skills/hyperframes-registry/references/wiring-blocks.md +61 -61
- package/assets/.agent/skills/hyperframes-registry/references/wiring-components.md +39 -39
- package/assets/.agent/skills/media-use/SKILL.md +124 -124
- package/assets/.agent/skills/media-use/scripts/eval.mjs +369 -369
- package/assets/.agent/skills/media-use/scripts/lib/adopt.mjs +112 -112
- package/assets/.agent/skills/media-use/scripts/lib/bgm-provider.mjs +20 -20
- package/assets/.agent/skills/media-use/scripts/lib/brand-provider.mjs +59 -59
- package/assets/.agent/skills/media-use/scripts/lib/cache.mjs +114 -114
- package/assets/.agent/skills/media-use/scripts/lib/freeze.mjs +26 -26
- package/assets/.agent/skills/media-use/scripts/lib/heygen-search.mjs +51 -51
- package/assets/.agent/skills/media-use/scripts/lib/image-provider.mjs +44 -44
- package/assets/.agent/skills/media-use/scripts/lib/index-gen.mjs +63 -63
- package/assets/.agent/skills/media-use/scripts/lib/manifest.mjs +91 -91
- package/assets/.agent/skills/media-use/scripts/lib/manifest.test.mjs +293 -293
- package/assets/.agent/skills/media-use/scripts/lib/probe.mjs +39 -39
- package/assets/.agent/skills/media-use/scripts/lib/probe.test.mjs +31 -31
- package/assets/.agent/skills/media-use/scripts/lib/providers.mjs +29 -29
- package/assets/.agent/skills/media-use/scripts/lib/sfx-provider.mjs +23 -23
- package/assets/.agent/skills/media-use/scripts/resolve.mjs +247 -247
- package/assets/.agent/skills/media-use/scripts/resolve.test.mjs +247 -247
- package/assets/.agent/skills/motion-graphics/SKILL.md +172 -172
- package/assets/.agent/skills/motion-graphics/agents/builder.md +40 -40
- package/assets/.agent/skills/motion-graphics/agents/director.md +53 -53
- package/assets/.agent/skills/motion-graphics/agents/finalize.md +17 -17
- package/assets/.agent/skills/motion-graphics/catalog-map.md +40 -40
- package/assets/.agent/skills/motion-graphics/categories/asset-fusion/module.md +37 -37
- package/assets/.agent/skills/motion-graphics/categories/charts/module.md +21 -21
- package/assets/.agent/skills/motion-graphics/categories/kinetic-type/module.md +19 -19
- package/assets/.agent/skills/motion-graphics/categories/logo-reveal/module.md +17 -17
- package/assets/.agent/skills/motion-graphics/categories/lower-thirds/module.md +16 -16
- package/assets/.agent/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -273
- package/assets/.agent/skills/motion-graphics/categories/maps/module.md +61 -61
- package/assets/.agent/skills/motion-graphics/categories/news/module.md +56 -56
- package/assets/.agent/skills/motion-graphics/categories/stat/module.md +21 -21
- package/assets/.agent/skills/motion-graphics/categories/tweet/module.md +16 -16
- package/assets/.agent/skills/motion-graphics/categories/webpage/module.md +21 -21
- package/assets/.agent/skills/motion-graphics/grounding/PROTOCOL.md +64 -64
- package/assets/.agent/skills/motion-graphics/grounding/locate.mjs +227 -227
- package/assets/.agent/skills/motion-graphics/phases/source/guide.md +21 -21
- package/assets/.agent/skills/motion-graphics/references/builder-contract.md +38 -38
- package/assets/.agent/skills/motion-graphics/references/motion-vocabulary.md +43 -43
- package/assets/.agent/skills/motion-graphics/references/shot-plan-ir.md +54 -54
- package/assets/.agent/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -306
- package/assets/.agent/skills/music-to-video/SKILL.md +197 -197
- package/assets/.agent/skills/music-to-video/references/frame-skeleton.md +100 -100
- package/assets/.agent/skills/music-to-video/references/montage.md +58 -58
- package/assets/.agent/skills/music-to-video/references/motion-primitive-catalog.md +75 -75
- package/assets/.agent/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +154 -154
- package/assets/.agent/skills/music-to-video/references/motion-primitives/assets/gsap.min.js +11 -11
- package/assets/.agent/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +326 -326
- package/assets/.agent/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +120 -120
- package/assets/.agent/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +95 -95
- package/assets/.agent/skills/music-to-video/references/motion-primitives/braam-punch/index.html +135 -135
- package/assets/.agent/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +146 -146
- package/assets/.agent/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +103 -103
- package/assets/.agent/skills/music-to-video/references/motion-primitives/counting-punch/index.html +154 -154
- package/assets/.agent/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +155 -155
- package/assets/.agent/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +166 -166
- package/assets/.agent/skills/music-to-video/references/motion-primitives/directional-fill/index.html +133 -133
- package/assets/.agent/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +137 -137
- package/assets/.agent/skills/music-to-video/references/motion-primitives/electric-arc/index.html +144 -144
- package/assets/.agent/skills/music-to-video/references/motion-primitives/flash-cut/index.html +132 -132
- package/assets/.agent/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +241 -241
- package/assets/.agent/skills/music-to-video/references/motion-primitives/hard-cut/index.html +117 -117
- package/assets/.agent/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +79 -79
- package/assets/.agent/skills/music-to-video/references/motion-primitives/iris-open/index.html +104 -104
- package/assets/.agent/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +92 -92
- package/assets/.agent/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +131 -131
- package/assets/.agent/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +109 -109
- package/assets/.agent/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +124 -124
- package/assets/.agent/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +108 -108
- package/assets/.agent/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +117 -117
- package/assets/.agent/skills/music-to-video/references/motion-primitives/palette-flip/index.html +132 -132
- package/assets/.agent/skills/music-to-video/references/motion-primitives/particle-burst/index.html +141 -141
- package/assets/.agent/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +121 -121
- package/assets/.agent/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +160 -160
- package/assets/.agent/skills/music-to-video/references/motion-primitives/screen-shake/index.html +113 -113
- package/assets/.agent/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +130 -130
- package/assets/.agent/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +137 -137
- package/assets/.agent/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +117 -117
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +42 -42
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +313 -313
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +136 -136
- package/assets/.agent/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +144 -144
- package/assets/.agent/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +122 -122
- package/assets/.agent/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +126 -126
- package/assets/.agent/skills/music-to-video/references/planning.md +104 -104
- package/assets/.agent/skills/music-to-video/references/storyboard-format.md +94 -94
- package/assets/.agent/skills/music-to-video/references/template-catalog.md +106 -106
- package/assets/.agent/skills/music-to-video/references/templates/card-flyby/index.html +527 -527
- package/assets/.agent/skills/music-to-video/references/templates/card-flyby/program.json +13 -13
- package/assets/.agent/skills/music-to-video/references/templates/held-message-living-field/index.html +485 -485
- package/assets/.agent/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +302 -302
- package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +610 -610
- package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +41 -41
- package/assets/.agent/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +596 -596
- package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +589 -589
- package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +25 -25
- package/assets/.agent/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +267 -267
- package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +594 -594
- package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +39 -39
- package/assets/.agent/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +238 -238
- package/assets/.agent/skills/music-to-video/scripts/analyze-beatgrid.py +531 -531
- package/assets/.agent/skills/music-to-video/scripts/assemble-index.mjs +218 -218
- package/assets/.agent/skills/music-to-video/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/music-to-video/scripts/stage-assets.mjs +58 -58
- package/assets/.agent/skills/music-to-video/scripts/validate-plan.mjs +161 -161
- package/assets/.agent/skills/music-to-video/sub-agents/frame-worker.md +75 -75
- package/assets/.agent/skills/pr-to-video/SKILL.md +240 -240
- package/assets/.agent/skills/pr-to-video/references/code-vocabulary.md +111 -111
- package/assets/.agent/skills/pr-to-video/references/cut-catalog.md +215 -215
- package/assets/.agent/skills/pr-to-video/references/motion-language.md +156 -156
- package/assets/.agent/skills/pr-to-video/references/story-design.md +211 -211
- package/assets/.agent/skills/pr-to-video/references/visual-design.md +164 -164
- package/assets/.agent/skills/pr-to-video/scripts/assemble-index.mjs +570 -570
- package/assets/.agent/skills/pr-to-video/scripts/audio.mjs +253 -253
- package/assets/.agent/skills/pr-to-video/scripts/build-frame.mjs +536 -536
- package/assets/.agent/skills/pr-to-video/scripts/captions.mjs +508 -508
- package/assets/.agent/skills/pr-to-video/scripts/fetch-people-avatars.mjs +157 -157
- package/assets/.agent/skills/pr-to-video/scripts/fetch-pr.mjs +164 -164
- package/assets/.agent/skills/pr-to-video/scripts/ingest.mjs +539 -539
- package/assets/.agent/skills/pr-to-video/scripts/lib/assets.mjs +55 -55
- package/assets/.agent/skills/pr-to-video/scripts/lib/dimensions.mjs +45 -45
- package/assets/.agent/skills/pr-to-video/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/pr-to-video/scripts/lib/tokens.mjs +204 -204
- package/assets/.agent/skills/pr-to-video/scripts/lib/transition-registry.mjs +38 -38
- package/assets/.agent/skills/pr-to-video/scripts/lib/transitions.json +71 -71
- package/assets/.agent/skills/pr-to-video/scripts/transitions.mjs +320 -320
- package/assets/.agent/skills/pr-to-video/sub-agents/frame-worker.md +95 -95
- package/assets/.agent/skills/product-launch-video/SKILL.md +208 -208
- package/assets/.agent/skills/product-launch-video/references/cut-catalog.md +220 -220
- package/assets/.agent/skills/product-launch-video/references/motion-language.md +156 -156
- package/assets/.agent/skills/product-launch-video/references/story-design.md +373 -373
- package/assets/.agent/skills/product-launch-video/references/visual-design.md +126 -126
- package/assets/.agent/skills/product-launch-video/scripts/assemble-index.mjs +570 -570
- package/assets/.agent/skills/product-launch-video/scripts/audio.mjs +253 -253
- package/assets/.agent/skills/product-launch-video/scripts/build-frame.mjs +536 -536
- package/assets/.agent/skills/product-launch-video/scripts/captions.mjs +508 -508
- package/assets/.agent/skills/product-launch-video/scripts/lib/assets.mjs +55 -55
- package/assets/.agent/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -45
- package/assets/.agent/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/product-launch-video/scripts/lib/tokens.mjs +204 -204
- package/assets/.agent/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -38
- package/assets/.agent/skills/product-launch-video/scripts/lib/transitions.json +71 -71
- package/assets/.agent/skills/product-launch-video/scripts/stage-assets.mjs +39 -39
- package/assets/.agent/skills/product-launch-video/scripts/transitions.mjs +320 -320
- package/assets/.agent/skills/product-launch-video/sub-agents/frame-worker.md +75 -75
- package/assets/.agent/skills/remotion/SKILL.md +357 -38
- package/assets/.agent/skills/remotion/rules/3d.md +5 -5
- package/assets/.agent/skills/remotion/rules/assets/text-animations-word-highlight.tsx +1 -6
- package/assets/.agent/skills/remotion/rules/audio-visualization.md +198 -0
- package/assets/.agent/skills/remotion/rules/audio.md +1 -4
- package/assets/.agent/skills/remotion/rules/calculate-metadata.md +48 -18
- package/assets/.agent/skills/remotion/rules/compositions.md +16 -24
- package/assets/.agent/skills/remotion/rules/display-captions.md +79 -21
- package/assets/.agent/skills/remotion/rules/effects.md +235 -0
- package/assets/.agent/skills/remotion/rules/ffmpeg.md +34 -0
- package/assets/.agent/skills/remotion/rules/get-audio-duration.md +13 -13
- package/assets/.agent/skills/remotion/rules/get-video-dimensions.md +1 -1
- package/assets/.agent/skills/remotion/rules/get-video-duration.md +12 -10
- package/assets/.agent/skills/remotion/rules/gifs.md +21 -18
- package/assets/.agent/skills/remotion/rules/google-fonts.md +72 -0
- package/assets/.agent/skills/remotion/rules/html-in-canvas.md +122 -0
- package/assets/.agent/skills/remotion/rules/images.md +5 -64
- package/assets/.agent/skills/remotion/rules/import-srt-captions.md +9 -7
- package/assets/.agent/skills/remotion/rules/light-leaks.md +73 -0
- package/assets/.agent/skills/remotion/rules/local-fonts.md +65 -0
- package/assets/.agent/skills/remotion/rules/lottie.md +10 -8
- package/assets/.agent/skills/remotion/rules/maplibre.md +458 -0
- package/assets/.agent/skills/remotion/rules/measuring-dom-nodes.md +0 -1
- package/assets/.agent/skills/remotion/rules/measuring-text.md +2 -5
- package/assets/.agent/skills/remotion/rules/parameters.md +21 -10
- package/assets/.agent/skills/remotion/rules/sequencing.md +35 -9
- package/assets/.agent/skills/remotion/rules/sfx.md +51 -0
- package/assets/.agent/skills/remotion/rules/silence-detection.md +71 -0
- package/assets/.agent/skills/remotion/rules/subtitles.md +36 -0
- package/assets/.agent/skills/remotion/rules/tailwind.md +2 -2
- package/assets/.agent/skills/remotion/rules/timing.md +89 -106
- package/assets/.agent/skills/remotion/rules/transcribe-captions.md +58 -7
- package/assets/.agent/skills/remotion/rules/transitions.md +117 -42
- package/assets/.agent/skills/remotion/rules/transparent-videos.md +106 -0
- package/assets/.agent/skills/remotion/rules/trimming.md +1 -3
- package/assets/.agent/skills/remotion/rules/video-layout.md +68 -0
- package/assets/.agent/skills/remotion/rules/voiceover.md +99 -0
- package/assets/.agent/skills/remotion-real-ui-video/SKILL.md +264 -264
- package/assets/.agent/skills/remotion-real-ui-video/references/anti-patterns.md +114 -114
- package/assets/.agent/skills/remotion-real-ui-video/references/completion-checklist.md +75 -75
- package/assets/.agent/skills/remotion-real-ui-video/references/real-ui-bridge-example.md +93 -93
- package/assets/.agent/skills/remotion-to-hyperframes/SKILL.md +127 -127
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/run.sh +249 -249
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -41
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -26
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +61 -61
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -14
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx +34 -34
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts +4 -4
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -54
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -29
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +118 -118
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -14
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx +105 -105
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts +4 -4
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/setup.sh +34 -34
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -85
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -41
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +269 -269
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx +27 -27
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx +37 -37
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx +23 -23
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx +59 -59
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx +47 -47
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts +4 -4
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx +18 -18
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx +34 -34
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx +55 -55
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -51
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx +29 -29
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx +29 -29
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx +39 -39
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx +30 -30
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx +38 -38
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx +36 -36
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx +28 -28
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx +41 -41
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -85
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/validate.sh +110 -110
- package/assets/.agent/skills/remotion-to-hyperframes/references/api-map.md +142 -142
- package/assets/.agent/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -115
- package/assets/.agent/skills/remotion-to-hyperframes/references/eval.md +140 -140
- package/assets/.agent/skills/remotion-to-hyperframes/references/fonts.md +112 -112
- package/assets/.agent/skills/remotion-to-hyperframes/references/limitations.md +136 -136
- package/assets/.agent/skills/remotion-to-hyperframes/references/lottie.md +121 -121
- package/assets/.agent/skills/remotion-to-hyperframes/references/media.md +149 -149
- package/assets/.agent/skills/remotion-to-hyperframes/references/parameters.md +167 -167
- package/assets/.agent/skills/remotion-to-hyperframes/references/sequencing.md +195 -195
- package/assets/.agent/skills/remotion-to-hyperframes/references/timing.md +165 -165
- package/assets/.agent/skills/remotion-to-hyperframes/references/transitions.md +114 -114
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/frame_strip.sh +107 -107
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/lint_source.py +358 -358
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/render_diff.sh +103 -103
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx +50 -50
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx +46 -46
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/smoke.sh +90 -90
- package/assets/.agent/skills/shared-resend-portfolio/SKILL.md +124 -124
- package/assets/.agent/skills/slideshow/SKILL.md +550 -550
- package/assets/.agent/skills/slideshow/references/standalone-harness.md +1020 -1020
- package/assets/.agent/skills/talking-head-recut/NOTICE.md +39 -39
- package/assets/.agent/skills/talking-head-recut/SKILL.md +1191 -1191
- package/assets/.agent/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -10
- package/assets/.agent/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -145
- package/assets/.agent/skills/talking-head-recut/references/frames/clean.html +92 -92
- package/assets/.agent/skills/talking-head-recut/references/frames/hairline.html +171 -171
- package/assets/.agent/skills/talking-head-recut/references/frames/polaroid.html +131 -131
- package/assets/.agent/skills/talking-head-recut/references/layouts/overlay.html +164 -164
- package/assets/.agent/skills/talking-head-recut/references/layouts/pip.html +143 -143
- package/assets/.agent/skills/talking-head-recut/references/layouts/split.html +121 -121
- package/assets/.agent/skills/talking-head-recut/references/layouts/stack.html +109 -109
- package/assets/.agent/skills/talking-head-recut/references/styles/academic.html +172 -172
- package/assets/.agent/skills/talking-head-recut/references/styles/audit.html +170 -170
- package/assets/.agent/skills/talking-head-recut/references/styles/editorial.html +189 -189
- package/assets/.agent/skills/talking-head-recut/references/styles/geom.html +181 -181
- package/assets/.agent/skills/talking-head-recut/references/styles/minimal.html +130 -130
- package/assets/.agent/skills/talking-head-recut/references/styles/spotlight.html +142 -142
- package/assets/.agent/skills/talking-head-recut/references/styles/swiss.html +188 -188
- package/assets/.agent/skills/talking-head-recut/references/styles/terminal.html +196 -196
- package/assets/.agent/skills/talking-head-recut/references/styles/whiteboard.html +170 -170
- package/assets/.agent/skills/talking-head-recut/references/styles/xhs.html +206 -206
- package/assets/.agent/skills/website-to-video/SKILL.md +145 -145
- package/assets/.agent/skills/website-to-video/assets/sfx/CREDITS.md +35 -35
- package/assets/.agent/skills/website-to-video/assets/sfx/manifest.json +97 -97
- package/assets/.agent/skills/website-to-video/references/beat-builder-guide.md +263 -263
- package/assets/.agent/skills/website-to-video/references/capabilities.md +713 -713
- package/assets/.agent/skills/website-to-video/references/step-0-capture.md +55 -55
- package/assets/.agent/skills/website-to-video/references/step-1-design.md +333 -333
- package/assets/.agent/skills/website-to-video/references/step-2-brief.md +178 -178
- package/assets/.agent/skills/website-to-video/references/step-3-storyboard.md +572 -572
- package/assets/.agent/skills/website-to-video/references/step-4-vo.md +230 -230
- package/assets/.agent/skills/website-to-video/references/step-5-build.md +483 -483
- package/assets/.agent/skills/website-to-video/references/step-6-validate.md +341 -341
- package/assets/.agent/skills/website-to-video/scripts/w2h-verify.mjs +759 -759
- package/package.json +6 -5
- package/src/pi-takomi-core/orchestration.ts +39 -21
- package/src/pi-takomi-core/routing.ts +8 -8
- package/src/pi-takomi-core/types.ts +25 -5
- package/src/pi-takomi-core/workflows.ts +86 -86
- package/src/takomi-stats.js +5 -5
- package/assets/.agent/skills/remotion/rules/animations.md +0 -29
- package/assets/.agent/skills/remotion/rules/assets.md +0 -78
- package/assets/.agent/skills/remotion/rules/can-decode.md +0 -75
- package/assets/.agent/skills/remotion/rules/charts.md +0 -58
- package/assets/.agent/skills/remotion/rules/extract-frames.md +0 -229
- package/assets/.agent/skills/remotion/rules/fonts.md +0 -152
- package/assets/.agent/skills/remotion/rules/maps.md +0 -403
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
1
|
+
import { mkdir, readdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
3
|
import path from "node:path";
|
|
3
4
|
import { fileURLToPath } from "node:url";
|
|
4
5
|
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
@@ -6,6 +7,7 @@ import { StringEnum } from "@earendil-works/pi-ai";
|
|
|
6
7
|
import { Type } from "typebox";
|
|
7
8
|
import {
|
|
8
9
|
buildSessionState,
|
|
10
|
+
canonicalizeTakomiPersona,
|
|
9
11
|
createSessionId,
|
|
10
12
|
createLifecycleStarterSession,
|
|
11
13
|
createTask,
|
|
@@ -27,6 +29,7 @@ import {
|
|
|
27
29
|
type TakomiDispatchPolicy,
|
|
28
30
|
type TakomiLaunchMode,
|
|
29
31
|
type TakomiProfile,
|
|
32
|
+
type TakomiPersona,
|
|
30
33
|
type TakomiRole,
|
|
31
34
|
type TakomiThinkingLevel,
|
|
32
35
|
type TakomiWorkflowId,
|
|
@@ -55,7 +58,15 @@ import {
|
|
|
55
58
|
getProfileDefaults,
|
|
56
59
|
loadTakomiProfile,
|
|
57
60
|
} from "./profile";
|
|
58
|
-
import {
|
|
61
|
+
import {
|
|
62
|
+
installTakomiRoutingConfig,
|
|
63
|
+
installTakomiRoutingPolicy,
|
|
64
|
+
previewTakomiRoutingConfig,
|
|
65
|
+
previewTakomiRoutingPolicy,
|
|
66
|
+
renderRoutingPolicyPreview,
|
|
67
|
+
renderTakomiRoutingConfigPreview,
|
|
68
|
+
resolveTakomiRoutingPolicy,
|
|
69
|
+
} from "./routing-policy";
|
|
59
70
|
import {
|
|
60
71
|
discoverWorkflowPlaybooks,
|
|
61
72
|
showWorkflowCatalogForBoard,
|
|
@@ -182,7 +193,7 @@ const ThinkingSchema = Type.Union([
|
|
|
182
193
|
Type.Literal("xhigh"),
|
|
183
194
|
]);
|
|
184
195
|
|
|
185
|
-
const TakomiModeSchema = StringEnum(["idle", "code", "
|
|
196
|
+
const TakomiModeSchema = StringEnum(["idle", "code", "review", "orchestrate"] as const);
|
|
186
197
|
|
|
187
198
|
function cloneState(state: TakomiState): TakomiState {
|
|
188
199
|
return { ...state };
|
|
@@ -204,12 +215,9 @@ function formatState(state: TakomiState): string {
|
|
|
204
215
|
].filter(Boolean).join(" | ");
|
|
205
216
|
}
|
|
206
217
|
|
|
207
|
-
function setStageAndWorkflow(state: TakomiState, stage: VibeLifecycleStage,
|
|
218
|
+
function setStageAndWorkflow(state: TakomiState, stage: VibeLifecycleStage, _options?: { preserveRole?: boolean }) {
|
|
208
219
|
state.stage = stage;
|
|
209
220
|
state.workflow = stage === "genesis" ? "vibe-genesis" : stage === "design" ? "vibe-design" : "vibe-build";
|
|
210
|
-
if (!options?.preserveRole) {
|
|
211
|
-
state.role = stage === "design" ? "design" : stage === "build" ? "orchestrator" : "architect";
|
|
212
|
-
}
|
|
213
221
|
state.enabled = true;
|
|
214
222
|
}
|
|
215
223
|
|
|
@@ -226,17 +234,22 @@ function fallbackRolePrompt(role: TakomiRole): string {
|
|
|
226
234
|
"You are operating in Takomi architect mode.",
|
|
227
235
|
"Clarify scope, define acceptance criteria, and build the project foundation before design or implementation.",
|
|
228
236
|
].join("\n");
|
|
229
|
-
case "
|
|
237
|
+
case "designer":
|
|
230
238
|
return [
|
|
231
|
-
"You are operating
|
|
232
|
-
"Translate genesis context into build-ready UX and visual direction.",
|
|
239
|
+
"You are operating as the Takomi UI/UX designer.",
|
|
240
|
+
"Translate genesis context into build-ready UI, UX, mockups, and visual direction; never use Design for application architecture.",
|
|
233
241
|
].join("\n");
|
|
234
|
-
case "
|
|
242
|
+
case "coder":
|
|
235
243
|
return [
|
|
236
244
|
"You are operating in Takomi code mode.",
|
|
237
245
|
"Implement directly, keep scope controlled, and verify after changes.",
|
|
238
246
|
].join("\n");
|
|
239
|
-
case "
|
|
247
|
+
case "worker":
|
|
248
|
+
return [
|
|
249
|
+
"You are operating as the Takomi worker.",
|
|
250
|
+
"Execute clear non-coding repository tasks and produce requested artifacts without inventing product or architecture decisions.",
|
|
251
|
+
].join("\n");
|
|
252
|
+
case "reviewer":
|
|
240
253
|
return [
|
|
241
254
|
"You are operating in Takomi review mode.",
|
|
242
255
|
"Focus on correctness, risk, omissions, and actionable review feedback.",
|
|
@@ -253,9 +266,10 @@ function agentFileNameForRole(role: TakomiRole): string | undefined {
|
|
|
253
266
|
switch (role) {
|
|
254
267
|
case "orchestrator": return "orchestrator.md";
|
|
255
268
|
case "architect": return "architect.md";
|
|
256
|
-
case "
|
|
257
|
-
case "
|
|
258
|
-
case "
|
|
269
|
+
case "designer": return "designer.md";
|
|
270
|
+
case "coder": return "coder.md";
|
|
271
|
+
case "worker": return "worker.md";
|
|
272
|
+
case "reviewer": return "reviewer.md";
|
|
259
273
|
default: return undefined;
|
|
260
274
|
}
|
|
261
275
|
}
|
|
@@ -577,8 +591,33 @@ async function writeTaskArtifact(paths: ReturnType<typeof getSessionPaths>, stat
|
|
|
577
591
|
if (existingPath !== targetPath) await rm(existingPath, { force: true });
|
|
578
592
|
}
|
|
579
593
|
|
|
580
|
-
|
|
581
|
-
|
|
594
|
+
type MasterPlanDisposition = "written" | "preserved" | "unchanged" | "generated";
|
|
595
|
+
|
|
596
|
+
function sha256(content: string): string {
|
|
597
|
+
return createHash("sha256").update(content).digest("hex");
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
async function atomicWrite(filePath: string, content: string): Promise<void> {
|
|
601
|
+
const temporary = `${filePath}.${randomUUID()}.tmp`;
|
|
602
|
+
await writeFile(temporary, content, "utf8");
|
|
603
|
+
await rename(temporary, filePath);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
async function atomicReplaceExpected(filePath: string, content: string, expectedSha256: string): Promise<{ ok: true } | { ok: false; currentSha256: string }> {
|
|
607
|
+
const temporary = `${filePath}.${randomUUID()}.tmp`;
|
|
608
|
+
await writeFile(temporary, content, "utf8");
|
|
609
|
+
const current = await readFile(filePath, "utf8");
|
|
610
|
+
const currentSha256 = sha256(current);
|
|
611
|
+
if (currentSha256 !== expectedSha256) {
|
|
612
|
+
await rm(temporary, { force: true });
|
|
613
|
+
return { ok: false, currentSha256 };
|
|
614
|
+
}
|
|
615
|
+
await rename(temporary, filePath);
|
|
616
|
+
return { ok: true };
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
async function syncTaskArtifacts(cwd: string, session: OrchestratorSessionState, incomingMasterPlan?: string) {
|
|
620
|
+
let normalizedState = normalizeSessionState(session);
|
|
582
621
|
assertSafeSessionId(normalizedState.sessionId);
|
|
583
622
|
assertSafeTasks(normalizedState.tasks);
|
|
584
623
|
const paths = getSessionPaths(cwd, normalizedState.sessionId);
|
|
@@ -587,10 +626,51 @@ async function syncTaskArtifacts(cwd: string, session: OrchestratorSessionState)
|
|
|
587
626
|
await mkdir(paths.completed, { recursive: true });
|
|
588
627
|
await mkdir(paths.blocked, { recursive: true });
|
|
589
628
|
await mkdir(paths.stateDir, { recursive: true });
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
629
|
+
|
|
630
|
+
const existing = await readFile(paths.masterPlan, "utf8").catch(() => undefined);
|
|
631
|
+
const existingHash = existing === undefined ? undefined : sha256(existing);
|
|
632
|
+
const recorded = normalizedState.artifacts?.masterPlan;
|
|
633
|
+
const recordedStillMatches = Boolean(recorded && existingHash === recorded.sha256);
|
|
634
|
+
const existingOwner = recordedStillMatches
|
|
635
|
+
? recorded!.owner
|
|
636
|
+
: existing?.includes("takomi-generated-master-plan")
|
|
637
|
+
? "board" as const
|
|
638
|
+
: "human" as const;
|
|
639
|
+
let finalContent = existing;
|
|
640
|
+
let owner = existingOwner;
|
|
641
|
+
let masterPlanDisposition: MasterPlanDisposition;
|
|
642
|
+
let masterPlanWarning: string | undefined;
|
|
643
|
+
|
|
644
|
+
if (existing === undefined) {
|
|
645
|
+
if (incomingMasterPlan !== undefined) {
|
|
646
|
+
finalContent = incomingMasterPlan;
|
|
647
|
+
owner = "caller";
|
|
648
|
+
masterPlanDisposition = "written";
|
|
649
|
+
} else {
|
|
650
|
+
finalContent = renderMasterPlan(normalizedState);
|
|
651
|
+
owner = "board";
|
|
652
|
+
masterPlanDisposition = "generated";
|
|
653
|
+
}
|
|
654
|
+
await atomicWrite(paths.masterPlan, finalContent);
|
|
655
|
+
} else if (incomingMasterPlan === undefined) {
|
|
656
|
+
masterPlanDisposition = existingOwner === "board" ? "unchanged" : "preserved";
|
|
657
|
+
} else if (incomingMasterPlan === existing) {
|
|
658
|
+
masterPlanDisposition = "unchanged";
|
|
659
|
+
} else if (existingOwner === "board") {
|
|
660
|
+
finalContent = incomingMasterPlan;
|
|
661
|
+
owner = "caller";
|
|
662
|
+
masterPlanDisposition = "written";
|
|
663
|
+
await atomicWrite(paths.masterPlan, finalContent);
|
|
664
|
+
} else {
|
|
665
|
+
masterPlanDisposition = "preserved";
|
|
666
|
+
masterPlanWarning = "Preserved the existing human/caller-authored master_plan.md because incoming content differed. Use replace_master_plan with confirmation and the current SHA-256 for an intentional replacement.";
|
|
593
667
|
}
|
|
668
|
+
|
|
669
|
+
const finalHash = sha256(finalContent ?? "");
|
|
670
|
+
normalizedState = normalizeSessionState({
|
|
671
|
+
...normalizedState,
|
|
672
|
+
artifacts: { masterPlan: { owner, sha256: finalHash, lastSeenAt: new Date().toISOString() } },
|
|
673
|
+
});
|
|
594
674
|
const validation = validateSessionState(normalizedState);
|
|
595
675
|
await writeFile(paths.summary, [
|
|
596
676
|
`# Orchestrator Summary: ${normalizedState.title}`,
|
|
@@ -600,6 +680,7 @@ async function syncTaskArtifacts(cwd: string, session: OrchestratorSessionState)
|
|
|
600
680
|
`- Machine state: ${paths.stateFile}`,
|
|
601
681
|
`- Runtime mode: ${normalizedState.mode}`,
|
|
602
682
|
`- Session intent: ${normalizedState.sessionIntent ?? "full-project"}`,
|
|
683
|
+
`- Master plan: ${masterPlanDisposition} (${owner}, sha256 ${finalHash})`,
|
|
603
684
|
`- Validation: ${validation.ok ? "PASS" : "ERRORS"} (${validation.errors.length} errors, ${validation.warnings.length} warnings)`,
|
|
604
685
|
"",
|
|
605
686
|
"## Validation",
|
|
@@ -608,15 +689,13 @@ async function syncTaskArtifacts(cwd: string, session: OrchestratorSessionState)
|
|
|
608
689
|
].join("\n"), "utf8");
|
|
609
690
|
await writeFile(paths.stateFile, serializeSessionState(normalizedState), "utf8");
|
|
610
691
|
|
|
611
|
-
for (const task of normalizedState.tasks)
|
|
612
|
-
await writeTaskArtifact(paths, normalizedState, task);
|
|
613
|
-
}
|
|
692
|
+
for (const task of normalizedState.tasks) await writeTaskArtifact(paths, normalizedState, task);
|
|
614
693
|
|
|
615
|
-
return paths;
|
|
694
|
+
return { ...paths, masterPlanDisposition, masterPlanWarning, masterPlanSha256: finalHash };
|
|
616
695
|
}
|
|
617
696
|
|
|
618
|
-
async function writeOrchestratorSession(cwd: string, session: OrchestratorSessionState) {
|
|
619
|
-
return syncTaskArtifacts(cwd, session);
|
|
697
|
+
async function writeOrchestratorSession(cwd: string, session: OrchestratorSessionState, incomingMasterPlan?: string) {
|
|
698
|
+
return syncTaskArtifacts(cwd, session, incomingMasterPlan);
|
|
620
699
|
}
|
|
621
700
|
|
|
622
701
|
type IncomingTask = {
|
|
@@ -624,12 +703,13 @@ type IncomingTask = {
|
|
|
624
703
|
title: string;
|
|
625
704
|
taskMarkdown?: string;
|
|
626
705
|
status?: OrchestratorTaskStatus;
|
|
627
|
-
role:
|
|
706
|
+
role: TakomiPersona | "general" | "design" | "code" | "review";
|
|
628
707
|
stage?: VibeLifecycleStage;
|
|
629
708
|
workflow?: TakomiWorkflowId;
|
|
630
709
|
parentTaskId?: string;
|
|
631
710
|
preferredAgent?: string;
|
|
632
711
|
preferredModel?: string;
|
|
712
|
+
preferredModelConfirmed?: boolean;
|
|
633
713
|
preferredModelHint?: string;
|
|
634
714
|
preferredThinking?: TakomiThinkingLevel;
|
|
635
715
|
fallbackModels?: string[];
|
|
@@ -641,12 +721,21 @@ type IncomingTask = {
|
|
|
641
721
|
scope?: string[];
|
|
642
722
|
definitionOfDone?: string[];
|
|
643
723
|
expectedArtifacts?: string[];
|
|
724
|
+
requiredCapabilities?: string[];
|
|
644
725
|
dependencies?: string[];
|
|
645
726
|
reviewCheckpoint?: string;
|
|
646
727
|
instructions?: string[];
|
|
647
728
|
conversationId?: string;
|
|
648
729
|
};
|
|
649
730
|
|
|
731
|
+
const CANONICAL_TAKOMI_PERSONAS = new Set(["architect", "designer", "coder", "worker", "reviewer", "orchestrator"]);
|
|
732
|
+
const WRITE_CAPABLE_PERSONAS = new Set(["architect", "designer", "coder", "worker"]);
|
|
733
|
+
|
|
734
|
+
function incomingTaskRequiresWrite(task: IncomingTask): boolean {
|
|
735
|
+
if (task.requiredCapabilities?.some((capability) => /^(write|edit|write-docs|write-code)$/i.test(capability))) return true;
|
|
736
|
+
return (task.expectedArtifacts ?? []).some((artifact) => /(?:\.md\b|\bmarkdown\b|\bfile\b|\bdocument\b)/i.test(artifact));
|
|
737
|
+
}
|
|
738
|
+
|
|
650
739
|
async function materializeTasksFromInput(
|
|
651
740
|
ctx: ExtensionContext,
|
|
652
741
|
currentTasks: OrchestratorTask[],
|
|
@@ -658,20 +747,33 @@ async function materializeTasksFromInput(
|
|
|
658
747
|
for (const task of incoming) {
|
|
659
748
|
if (task.id) assertSafeTaskId(task.id);
|
|
660
749
|
const stage = task.stage ?? stageOverride;
|
|
661
|
-
const
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
750
|
+
const persona = canonicalizeTakomiPersona(task.role);
|
|
751
|
+
if (task.preferredModel && task.preferredModelConfirmed !== true) {
|
|
752
|
+
throw new Error(`Task '${task.title}' specifies preferredModel '${task.preferredModel}' without preferredModelConfirmed=true.`);
|
|
753
|
+
}
|
|
754
|
+
const defaults = getProfileDefaults(activeProfile, persona, stage);
|
|
755
|
+
const selectedAgent = task.preferredAgent ?? defaults.agent ?? persona;
|
|
756
|
+
if (!CANONICAL_TAKOMI_PERSONAS.has(selectedAgent)) {
|
|
757
|
+
throw new Error(`Task '${task.title}' requested hidden or unknown agent '${selectedAgent}'. Use architect, designer, coder, worker, reviewer, or orchestrator.`);
|
|
758
|
+
}
|
|
759
|
+
if (incomingTaskRequiresWrite(task) && !WRITE_CAPABLE_PERSONAS.has(selectedAgent)) {
|
|
760
|
+
throw new Error(`Task '${task.title}' requires writable artifacts, but '${selectedAgent}' is inspection/coordination-only.`);
|
|
761
|
+
}
|
|
762
|
+
const fallbackModels = task.fallbackModels !== undefined
|
|
763
|
+
? task.fallbackModels
|
|
764
|
+
: task.preferredModel
|
|
765
|
+
? []
|
|
766
|
+
: defaults.fallbackModels ?? [];
|
|
666
767
|
const requestedModel = task.preferredModel ?? defaults.model;
|
|
667
768
|
const resolvedModel = await resolvePreferredModel(ctx, requestedModel, fallbackModels);
|
|
668
769
|
const id = task.id ?? getNextTaskId(nextTasks);
|
|
669
|
-
nextTasks.push(createTask(id, task.title,
|
|
770
|
+
nextTasks.push(createTask(id, task.title, persona, {
|
|
670
771
|
stage,
|
|
671
772
|
workflow: task.workflow,
|
|
672
773
|
parentTaskId: task.parentTaskId,
|
|
673
|
-
preferredAgent:
|
|
774
|
+
preferredAgent: selectedAgent,
|
|
674
775
|
preferredModel: resolvedModel.model,
|
|
776
|
+
preferredModelConfirmed: task.preferredModel ? true : undefined,
|
|
675
777
|
preferredModelHint: [task.preferredModelHint, resolvedModel.warning].filter(Boolean).join(" ").trim() || undefined,
|
|
676
778
|
preferredThinking: task.preferredThinking ?? defaults.thinking,
|
|
677
779
|
fallbackModels: fallbackModels.length ? fallbackModels : undefined,
|
|
@@ -683,6 +785,7 @@ async function materializeTasksFromInput(
|
|
|
683
785
|
scope: task.scope,
|
|
684
786
|
definitionOfDone: task.definitionOfDone,
|
|
685
787
|
expectedArtifacts: task.expectedArtifacts,
|
|
788
|
+
requiredCapabilities: task.requiredCapabilities,
|
|
686
789
|
dependencies: task.dependencies,
|
|
687
790
|
reviewCheckpoint: task.reviewCheckpoint,
|
|
688
791
|
instructions: task.instructions,
|
|
@@ -697,10 +800,11 @@ async function applyProfileDefaultsToTasks(ctx: ExtensionContext, tasks: Orchest
|
|
|
697
800
|
const nextTasks: OrchestratorTask[] = [];
|
|
698
801
|
for (const task of tasks) {
|
|
699
802
|
const defaults = getProfileDefaults(activeProfile, task.role, task.stage);
|
|
700
|
-
const fallbackModels =
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
803
|
+
const fallbackModels = task.fallbackModels !== undefined
|
|
804
|
+
? task.fallbackModels
|
|
805
|
+
: task.preferredModel
|
|
806
|
+
? []
|
|
807
|
+
: defaults.fallbackModels ?? [];
|
|
704
808
|
const requestedModel = task.preferredModel ?? defaults.model;
|
|
705
809
|
const resolvedModel = await resolvePreferredModel(ctx, requestedModel, fallbackModels);
|
|
706
810
|
nextTasks.push({
|
|
@@ -915,7 +1019,6 @@ export default function takomiRuntime(pi: ExtensionAPI) {
|
|
|
915
1019
|
|
|
916
1020
|
|
|
917
1021
|
async function applyTakomiMode(ctx: ExtensionContext, mode: string, source: TakomiModeSource, reason?: string): Promise<string> {
|
|
918
|
-
const hasGenesis = await hasGenesisArtifacts(ctx.cwd);
|
|
919
1022
|
state.enabled = true;
|
|
920
1023
|
state.modeSource = source;
|
|
921
1024
|
state.modeReason = reason?.trim() || undefined;
|
|
@@ -933,30 +1036,17 @@ export default function takomiRuntime(pi: ExtensionAPI) {
|
|
|
933
1036
|
case "code":
|
|
934
1037
|
state.autoOrch = false;
|
|
935
1038
|
state.planMode = false;
|
|
936
|
-
state.role = "
|
|
937
|
-
state.stage = undefined;
|
|
938
|
-
state.workflow = undefined;
|
|
1039
|
+
state.role = "coder";
|
|
939
1040
|
break;
|
|
940
1041
|
case "review":
|
|
941
1042
|
state.autoOrch = false;
|
|
942
1043
|
state.planMode = true;
|
|
943
|
-
state.role = "
|
|
944
|
-
state.stage = undefined;
|
|
945
|
-
state.workflow = undefined;
|
|
1044
|
+
state.role = "reviewer";
|
|
946
1045
|
break;
|
|
947
1046
|
case "orchestrate":
|
|
948
1047
|
state.autoOrch = true;
|
|
949
1048
|
state.planMode = true;
|
|
950
1049
|
state.role = "orchestrator";
|
|
951
|
-
state.stage = hasGenesis ? "build" : "genesis";
|
|
952
|
-
state.workflow = hasGenesis ? "vibe-build" : "vibe-genesis";
|
|
953
|
-
break;
|
|
954
|
-
case "genesis":
|
|
955
|
-
case "design":
|
|
956
|
-
case "build":
|
|
957
|
-
setStageAndWorkflow(state, mode);
|
|
958
|
-
state.autoOrch = mode === "build";
|
|
959
|
-
state.planMode = mode !== "build";
|
|
960
1050
|
break;
|
|
961
1051
|
}
|
|
962
1052
|
|
|
@@ -972,8 +1062,8 @@ export default function takomiRuntime(pi: ExtensionAPI) {
|
|
|
972
1062
|
pi.registerTool({
|
|
973
1063
|
name: "takomi_mode",
|
|
974
1064
|
label: "Takomi Mode",
|
|
975
|
-
description: "Set or clear the
|
|
976
|
-
promptSnippet: "Optional:
|
|
1065
|
+
description: "Set or clear the main-agent Takomi mode. Lifecycle stages are managed separately.",
|
|
1066
|
+
promptSnippet: "Optional: set the main-agent mode to idle, code, review, or orchestrate. Genesis, Design, and Build are lifecycle stages, never modes.",
|
|
977
1067
|
promptGuidelines: [
|
|
978
1068
|
"Let the user's request drive the choice; do not switch modes just because a vague word like code/review/build appears alone.",
|
|
979
1069
|
"Prefer mode=code for direct coding in the current chat, mode=orchestrate only for broad/multi-step durable work, and mode=review for critique/audit/QA.",
|
|
@@ -997,11 +1087,11 @@ export default function takomiRuntime(pi: ExtensionAPI) {
|
|
|
997
1087
|
pi.registerTool({
|
|
998
1088
|
name: "takomi_apply_routing_policy",
|
|
999
1089
|
label: "Takomi Routing",
|
|
1000
|
-
description: "
|
|
1001
|
-
promptSnippet: "Save reviewed
|
|
1090
|
+
description: "Save human-readable Takomi model-routing guidance. Markdown remains advisory and is never converted into executable defaults.",
|
|
1091
|
+
promptSnippet: "Save reviewed natural-language routing guidance without changing executable model settings.",
|
|
1002
1092
|
promptGuidelines: [
|
|
1003
|
-
"
|
|
1004
|
-
"
|
|
1093
|
+
"Preserve the complete authored guidance.",
|
|
1094
|
+
"Use takomi_config_routing, not Markdown prose, for executable providers, allowlists, and role defaults.",
|
|
1005
1095
|
],
|
|
1006
1096
|
parameters: Type.Object({
|
|
1007
1097
|
policyText: Type.String({ description: "Original routing policy text to save" }),
|
|
@@ -1045,6 +1135,52 @@ export default function takomiRuntime(pi: ExtensionAPI) {
|
|
|
1045
1135
|
renderResult: (result, options, theme) => renderTakomiRoutingResult(result, options, theme),
|
|
1046
1136
|
});
|
|
1047
1137
|
|
|
1138
|
+
pi.registerTool({
|
|
1139
|
+
name: "takomi_config_routing",
|
|
1140
|
+
label: "Takomi Routing Config",
|
|
1141
|
+
description: "Preview or write structured global/project Takomi routing settings.",
|
|
1142
|
+
promptSnippet: "Configure exact provider-qualified allowlists and persona defaults. Preview first; write only with confirmWrite=true.",
|
|
1143
|
+
parameters: Type.Object({
|
|
1144
|
+
scope: StringEnum(["global", "project"] as const),
|
|
1145
|
+
defaultProvider: Type.Optional(Type.String()),
|
|
1146
|
+
approvedModels: Type.Optional(Type.Array(Type.String())),
|
|
1147
|
+
roleDefaults: Type.Optional(Type.Record(Type.String(), Type.Object({
|
|
1148
|
+
model: Type.Optional(Type.String()),
|
|
1149
|
+
thinking: Type.Optional(ThinkingSchema),
|
|
1150
|
+
fallbackModels: Type.Optional(Type.Array(Type.String())),
|
|
1151
|
+
}))),
|
|
1152
|
+
dryRunAgent: Type.Optional(Type.String()),
|
|
1153
|
+
confirmWrite: Type.Optional(Type.Boolean()),
|
|
1154
|
+
}),
|
|
1155
|
+
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
|
|
1156
|
+
const availableModels = (() => {
|
|
1157
|
+
try {
|
|
1158
|
+
return ((ctx as typeof ctx & { modelRegistry?: { getAvailable?: () => Array<{ provider?: string; id?: string; name?: string }> } }).modelRegistry?.getAvailable?.() ?? [])
|
|
1159
|
+
.map((model) => `${model.provider ? `${model.provider}/` : ""}${model.id ?? model.name ?? ""}`)
|
|
1160
|
+
.filter(Boolean);
|
|
1161
|
+
} catch { return []; }
|
|
1162
|
+
})();
|
|
1163
|
+
const preview = await previewTakomiRoutingConfig(ctx.cwd, params.scope, {
|
|
1164
|
+
defaultProvider: params.defaultProvider,
|
|
1165
|
+
approvedModels: params.approvedModels,
|
|
1166
|
+
roleDefaults: params.roleDefaults,
|
|
1167
|
+
}, availableModels);
|
|
1168
|
+
const dryRun = params.dryRunAgent
|
|
1169
|
+
? (preview.after.roleDefaults as Record<string, { model?: string }> | undefined)?.[params.dryRunAgent]?.model ?? "Pi/harness default"
|
|
1170
|
+
: undefined;
|
|
1171
|
+
if (params.confirmWrite === true) await installTakomiRoutingConfig(preview);
|
|
1172
|
+
return {
|
|
1173
|
+
content: [{ type: "text", text: [
|
|
1174
|
+
params.confirmWrite === true ? "Takomi routing settings written." : "Takomi routing settings preview only; no files changed.",
|
|
1175
|
+
"",
|
|
1176
|
+
renderTakomiRoutingConfigPreview(preview),
|
|
1177
|
+
dryRun ? `\nDry-run ${params.dryRunAgent}: ${dryRun}` : "",
|
|
1178
|
+
].filter(Boolean).join("\n") }],
|
|
1179
|
+
details: { preview, written: params.confirmWrite === true, dryRunAgent: params.dryRunAgent, resolvedModel: dryRun },
|
|
1180
|
+
};
|
|
1181
|
+
},
|
|
1182
|
+
});
|
|
1183
|
+
|
|
1048
1184
|
pi.registerTool({
|
|
1049
1185
|
name: "takomi_workflow",
|
|
1050
1186
|
label: "Takomi Workflow",
|
|
@@ -1078,7 +1214,7 @@ export default function takomiRuntime(pi: ExtensionAPI) {
|
|
|
1078
1214
|
"If a reviewed task needs more work, reuse the task conversationId when you call takomi_subagent again, then update the board with the new result.",
|
|
1079
1215
|
],
|
|
1080
1216
|
parameters: Type.Object({
|
|
1081
|
-
action: StringEnum(["init_session", "expand_stage", "show_workflows", "show_session", "update_task"] as const),
|
|
1217
|
+
action: StringEnum(["init_session", "expand_stage", "show_workflows", "show_session", "update_task", "replace_master_plan"] as const),
|
|
1082
1218
|
title: Type.Optional(Type.String()),
|
|
1083
1219
|
sessionId: Type.Optional(Type.String()),
|
|
1084
1220
|
taskId: Type.Optional(Type.String()),
|
|
@@ -1095,17 +1231,20 @@ export default function takomiRuntime(pi: ExtensionAPI) {
|
|
|
1095
1231
|
done: Type.Optional(Type.Boolean()),
|
|
1096
1232
|
}))),
|
|
1097
1233
|
masterPlanMarkdown: Type.Optional(Type.String()),
|
|
1234
|
+
confirmReplaceMasterPlan: Type.Optional(Type.Boolean()),
|
|
1235
|
+
expectedCurrentSha256: Type.Optional(Type.String()),
|
|
1098
1236
|
tasks: Type.Optional(Type.Array(Type.Object({
|
|
1099
1237
|
id: Type.Optional(Type.String()),
|
|
1100
1238
|
title: Type.String(),
|
|
1101
1239
|
taskMarkdown: Type.Optional(Type.String()),
|
|
1102
1240
|
status: Type.Optional(StringEnum(["pending", "in-progress", "completed", "blocked"] as const)),
|
|
1103
|
-
role: StringEnum(["
|
|
1241
|
+
role: StringEnum(["orchestrator", "architect", "designer", "coder", "worker", "reviewer", "general", "design", "code", "review"] as const),
|
|
1104
1242
|
stage: Type.Optional(StringEnum(["genesis", "design", "build"] as const)),
|
|
1105
1243
|
workflow: Type.Optional(StringEnum(["vibe-genesis", "vibe-design", "vibe-build"] as const)),
|
|
1106
1244
|
parentTaskId: Type.Optional(Type.String()),
|
|
1107
1245
|
preferredAgent: Type.Optional(Type.String()),
|
|
1108
1246
|
preferredModel: Type.Optional(Type.String()),
|
|
1247
|
+
preferredModelConfirmed: Type.Optional(Type.Boolean()),
|
|
1109
1248
|
preferredModelHint: Type.Optional(Type.String()),
|
|
1110
1249
|
preferredThinking: Type.Optional(ThinkingSchema),
|
|
1111
1250
|
fallbackModels: Type.Optional(Type.Array(Type.String())),
|
|
@@ -1119,6 +1258,7 @@ export default function takomiRuntime(pi: ExtensionAPI) {
|
|
|
1119
1258
|
scope: Type.Optional(Type.Array(Type.String())),
|
|
1120
1259
|
definitionOfDone: Type.Optional(Type.Array(Type.String())),
|
|
1121
1260
|
expectedArtifacts: Type.Optional(Type.Array(Type.String())),
|
|
1261
|
+
requiredCapabilities: Type.Optional(Type.Array(Type.String())),
|
|
1122
1262
|
dependencies: Type.Optional(Type.Array(Type.String())),
|
|
1123
1263
|
reviewCheckpoint: Type.Optional(Type.String()),
|
|
1124
1264
|
instructions: Type.Optional(Type.Array(Type.String())),
|
|
@@ -1149,6 +1289,46 @@ ${stateJson}`
|
|
|
1149
1289
|
};
|
|
1150
1290
|
}
|
|
1151
1291
|
|
|
1292
|
+
if (params.action === "replace_master_plan") {
|
|
1293
|
+
if (!params.sessionId || params.masterPlanMarkdown === undefined || params.confirmReplaceMasterPlan !== true || !params.expectedCurrentSha256) {
|
|
1294
|
+
return createBoardErrorResult(
|
|
1295
|
+
"replace_master_plan requires sessionId, masterPlanMarkdown, confirmReplaceMasterPlan=true, and expectedCurrentSha256",
|
|
1296
|
+
"replacement-confirmation-required",
|
|
1297
|
+
"warning",
|
|
1298
|
+
);
|
|
1299
|
+
}
|
|
1300
|
+
const { state: sessionState, paths } = await loadSessionState(ctx.cwd, params.sessionId);
|
|
1301
|
+
const current = await readFile(paths.masterPlan, "utf8").catch(() => undefined);
|
|
1302
|
+
if (current === undefined) return createBoardErrorResult("Current master_plan.md was not found.", "master-plan-missing", "error");
|
|
1303
|
+
const currentHash = sha256(current);
|
|
1304
|
+
if (currentHash !== params.expectedCurrentSha256) {
|
|
1305
|
+
return createBoardErrorResult(
|
|
1306
|
+
`Master plan SHA-256 mismatch. Expected ${params.expectedCurrentSha256}, current ${currentHash}. No files changed.`,
|
|
1307
|
+
"master-plan-hash-mismatch",
|
|
1308
|
+
"error",
|
|
1309
|
+
{ expectedCurrentSha256: params.expectedCurrentSha256, currentSha256: currentHash },
|
|
1310
|
+
);
|
|
1311
|
+
}
|
|
1312
|
+
const replacement = await atomicReplaceExpected(paths.masterPlan, params.masterPlanMarkdown, params.expectedCurrentSha256);
|
|
1313
|
+
if (!replacement.ok) {
|
|
1314
|
+
return createBoardErrorResult(
|
|
1315
|
+
`Master plan changed during replacement. Current SHA-256 is ${replacement.currentSha256}. No replacement was applied.`,
|
|
1316
|
+
"master-plan-hash-mismatch",
|
|
1317
|
+
"error",
|
|
1318
|
+
{ expectedCurrentSha256: params.expectedCurrentSha256, currentSha256: replacement.currentSha256 },
|
|
1319
|
+
);
|
|
1320
|
+
}
|
|
1321
|
+
const nextHash = sha256(params.masterPlanMarkdown);
|
|
1322
|
+
const synced = await syncTaskArtifacts(ctx.cwd, {
|
|
1323
|
+
...sessionState,
|
|
1324
|
+
artifacts: { masterPlan: { owner: "caller", sha256: nextHash, lastSeenAt: new Date().toISOString() } },
|
|
1325
|
+
});
|
|
1326
|
+
return {
|
|
1327
|
+
content: [{ type: "text", text: `Replaced master_plan.md for ${params.sessionId}.\nSHA-256: ${nextHash}` }],
|
|
1328
|
+
details: { sessionId: params.sessionId, paths: synced, masterPlanDisposition: "written", masterPlanSha256: nextHash },
|
|
1329
|
+
};
|
|
1330
|
+
}
|
|
1331
|
+
|
|
1152
1332
|
if (params.action === "update_task") {
|
|
1153
1333
|
if (!params.sessionId || !params.taskId) {
|
|
1154
1334
|
return createBoardErrorResult("sessionId and taskId are required for update_task", "missing-task-context", "warning");
|
|
@@ -1198,6 +1378,7 @@ ${stateJson}`
|
|
|
1198
1378
|
{
|
|
1199
1379
|
sessionIntent: sessionState.sessionIntent,
|
|
1200
1380
|
lifecycle: sessionState.lifecycle,
|
|
1381
|
+
artifacts: sessionState.artifacts,
|
|
1201
1382
|
},
|
|
1202
1383
|
);
|
|
1203
1384
|
const paths = await syncTaskArtifacts(ctx.cwd, nextState);
|
|
@@ -1226,7 +1407,12 @@ ${stateJson}`
|
|
|
1226
1407
|
}
|
|
1227
1408
|
|
|
1228
1409
|
const { state: sessionState } = await loadSessionState(ctx.cwd, params.sessionId);
|
|
1229
|
-
|
|
1410
|
+
let tasks: OrchestratorTask[];
|
|
1411
|
+
try {
|
|
1412
|
+
tasks = await materializeTasksFromInput(ctx, sessionState.tasks, params.tasks as IncomingTask[], params.stage);
|
|
1413
|
+
} catch (error) {
|
|
1414
|
+
return createBoardErrorResult(error instanceof Error ? error.message : String(error), "invalid-task-routing", "error");
|
|
1415
|
+
}
|
|
1230
1416
|
let nextState = buildSessionState(
|
|
1231
1417
|
sessionState.sessionId,
|
|
1232
1418
|
sessionState.title,
|
|
@@ -1235,13 +1421,11 @@ ${stateJson}`
|
|
|
1235
1421
|
{
|
|
1236
1422
|
sessionIntent: sessionState.sessionIntent,
|
|
1237
1423
|
lifecycle: sessionState.lifecycle,
|
|
1424
|
+
artifacts: sessionState.artifacts,
|
|
1238
1425
|
},
|
|
1239
1426
|
);
|
|
1240
1427
|
nextState = markStageExpanded(nextState, params.stage, params.notes);
|
|
1241
|
-
const paths = await writeOrchestratorSession(ctx.cwd, nextState);
|
|
1242
|
-
if (params.masterPlanMarkdown?.trim()) {
|
|
1243
|
-
await writeFile(paths.masterPlan, params.masterPlanMarkdown.trimEnd() + "\n", "utf8");
|
|
1244
|
-
}
|
|
1428
|
+
const paths = await writeOrchestratorSession(ctx.cwd, nextState, params.masterPlanMarkdown);
|
|
1245
1429
|
for (const task of nextState.tasks) {
|
|
1246
1430
|
const authored = (params.tasks as IncomingTask[] | undefined)?.find((input) => (input.id ?? task.id) === task.id)?.taskMarkdown;
|
|
1247
1431
|
if (authored?.trim()) {
|
|
@@ -1256,20 +1440,30 @@ ${stateJson}`
|
|
|
1256
1440
|
await refreshUi(ctx, state, footerStateRef);
|
|
1257
1441
|
|
|
1258
1442
|
return {
|
|
1259
|
-
content: [{ type: "text", text: `Expanded ${params.stage} stage in session ${nextState.sessionId}.\n\nDocs: ${paths.root}\nState: ${paths.stateFile}\n\n${buildTaskRows(nextState.tasks)}` }],
|
|
1260
|
-
details: { sessionId: nextState.sessionId, paths, tasks: nextState.tasks, lifecycle: nextState.lifecycle, mode: nextState.mode },
|
|
1443
|
+
content: [{ type: "text", text: `Expanded ${params.stage} stage in session ${nextState.sessionId}.\nMaster plan: ${paths.masterPlanDisposition}.${paths.masterPlanWarning ? `\nWARNING: ${paths.masterPlanWarning}` : ""}\n\nDocs: ${paths.root}\nState: ${paths.stateFile}\n\n${buildTaskRows(nextState.tasks)}` }],
|
|
1444
|
+
details: { sessionId: nextState.sessionId, paths, tasks: nextState.tasks, lifecycle: nextState.lifecycle, mode: nextState.mode, masterPlanDisposition: paths.masterPlanDisposition },
|
|
1261
1445
|
};
|
|
1262
1446
|
}
|
|
1263
1447
|
|
|
1264
1448
|
const sessionId = params.sessionId || createSessionId();
|
|
1265
1449
|
assertSafeSessionId(sessionId);
|
|
1450
|
+
const existingStatePath = getSessionPaths(ctx.cwd, sessionId).stateFile;
|
|
1451
|
+
const sessionAlreadyExists = await readFile(existingStatePath, "utf8").then(() => true).catch(() => false);
|
|
1452
|
+
if (sessionAlreadyExists) {
|
|
1453
|
+
return createBoardErrorResult(`Session ${sessionId} already exists. Use expand_stage or update_task instead of reinitializing it.`, "session-already-exists", "warning");
|
|
1454
|
+
}
|
|
1266
1455
|
const title = params.title || "Takomi Session";
|
|
1267
1456
|
const baseState = params.tasks?.length
|
|
1268
1457
|
? buildSessionState(sessionId, title, [], new Date())
|
|
1269
1458
|
: createLifecycleStarterSession(title, { sessionId });
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1459
|
+
let tasks: OrchestratorTask[];
|
|
1460
|
+
try {
|
|
1461
|
+
tasks = params.tasks?.length
|
|
1462
|
+
? await materializeTasksFromInput(ctx, baseState.tasks, params.tasks as IncomingTask[], params.stage)
|
|
1463
|
+
: await applyProfileDefaultsToTasks(ctx, baseState.tasks);
|
|
1464
|
+
} catch (error) {
|
|
1465
|
+
return createBoardErrorResult(error instanceof Error ? error.message : String(error), "invalid-task-routing", "error");
|
|
1466
|
+
}
|
|
1273
1467
|
const nextState = buildSessionState(
|
|
1274
1468
|
baseState.sessionId,
|
|
1275
1469
|
baseState.title,
|
|
@@ -1280,10 +1474,7 @@ ${stateJson}`
|
|
|
1280
1474
|
lifecycle: baseState.lifecycle,
|
|
1281
1475
|
},
|
|
1282
1476
|
);
|
|
1283
|
-
const paths = await writeOrchestratorSession(ctx.cwd, nextState);
|
|
1284
|
-
if (params.masterPlanMarkdown?.trim()) {
|
|
1285
|
-
await writeFile(paths.masterPlan, params.masterPlanMarkdown.trimEnd() + "\n", "utf8");
|
|
1286
|
-
}
|
|
1477
|
+
const paths = await writeOrchestratorSession(ctx.cwd, nextState, params.masterPlanMarkdown);
|
|
1287
1478
|
for (const task of nextState.tasks) {
|
|
1288
1479
|
const authored = (params.tasks as IncomingTask[] | undefined)?.find((input) => (input.id ?? task.id) === task.id)?.taskMarkdown;
|
|
1289
1480
|
if (authored?.trim()) {
|
|
@@ -1301,8 +1492,8 @@ ${stateJson}`
|
|
|
1301
1492
|
await refreshUi(ctx, state, footerStateRef);
|
|
1302
1493
|
|
|
1303
1494
|
return {
|
|
1304
|
-
content: [{ type: "text", text: `Created Takomi orchestrator session ${nextState.sessionId} in hybrid mode\n\nDocs: ${paths.root}\nState: ${paths.stateFile}\n\n${buildTaskRows(nextState.tasks) || "No tasks provided."}` }],
|
|
1305
|
-
details: { sessionId: nextState.sessionId, paths, tasks: nextState.tasks, lifecycle: nextState.lifecycle, mode: nextState.mode },
|
|
1495
|
+
content: [{ type: "text", text: `Created Takomi orchestrator session ${nextState.sessionId} in hybrid mode\nMaster plan: ${paths.masterPlanDisposition}.${paths.masterPlanWarning ? `\nWARNING: ${paths.masterPlanWarning}` : ""}\n\nDocs: ${paths.root}\nState: ${paths.stateFile}\n\n${buildTaskRows(nextState.tasks) || "No tasks provided."}` }],
|
|
1496
|
+
details: { sessionId: nextState.sessionId, paths, tasks: nextState.tasks, lifecycle: nextState.lifecycle, mode: nextState.mode, masterPlanDisposition: paths.masterPlanDisposition },
|
|
1306
1497
|
};
|
|
1307
1498
|
},
|
|
1308
1499
|
renderCall: renderTakomiBoardCall,
|
|
@@ -1335,19 +1526,18 @@ ${stateJson}`
|
|
|
1335
1526
|
? `WARNING: This input is much shorter than the active policy (${preview.policy.length} vs ${activePolicy.text.length} characters). It will replace the file, not merge into it. Inspect any referenced full source before applying.`
|
|
1336
1527
|
: "The supplied text replaces the policy file exactly; it is not merged with the current policy.";
|
|
1337
1528
|
return { action: "transform", text: [
|
|
1338
|
-
"Review this Takomi routing
|
|
1529
|
+
"Review this advisory Takomi model-routing guidance before it is saved.",
|
|
1339
1530
|
"",
|
|
1340
1531
|
"Rules:",
|
|
1341
|
-
"-
|
|
1342
|
-
"-
|
|
1343
|
-
"-
|
|
1344
|
-
"-
|
|
1345
|
-
"- Valid role-wide Takomi overrides are: general, orchestrator, architect, designer, coder, reviewer. Other headings may be policy concepts or execution routes.",
|
|
1532
|
+
"- Providerless names such as Sol, Terra, and Luna are valid advisory routing concepts.",
|
|
1533
|
+
"- Do not infer executable providers, allowlists, fallbacks, or persona defaults from this prose.",
|
|
1534
|
+
"- Executable changes belong in takomi.routing settings through takomi_config_routing.",
|
|
1535
|
+
"- Canonical Takomi personas are: architect, designer, coder, worker, reviewer, orchestrator.",
|
|
1346
1536
|
"- Preserve the user's complete authored policy. If this is a summary/excerpt and a referenced full source exists, inspect and apply that source rather than overwriting it with the excerpt.",
|
|
1347
1537
|
"- If correct and safe, call takomi_apply_routing_policy with scope=global and the complete intended policy text.",
|
|
1348
1538
|
"- Ask only for unresolved provider/account choices or genuine ambiguity; do not ask for facts available in registry or files.",
|
|
1349
1539
|
"",
|
|
1350
|
-
"
|
|
1540
|
+
"Advisory preview:",
|
|
1351
1541
|
renderRoutingPolicyPreview(preview),
|
|
1352
1542
|
"",
|
|
1353
1543
|
replacementWarning,
|
|
@@ -1377,7 +1567,7 @@ ${stateJson}`
|
|
|
1377
1567
|
state.modeReason = "explicit user request";
|
|
1378
1568
|
const route = decideRoute(text.slice("use takomi ".length));
|
|
1379
1569
|
if (route.stage) setStageAndWorkflow(state, route.stage, { preserveRole: state.role === "orchestrator" && route.stage === "genesis" });
|
|
1380
|
-
else
|
|
1570
|
+
else state.role = route.role;
|
|
1381
1571
|
return { action: "transform", text: `Use the Takomi runtime for this request: ${text.slice("use takomi ".length)}` };
|
|
1382
1572
|
}
|
|
1383
1573
|
|
|
@@ -1520,6 +1710,8 @@ ${stateJson}`
|
|
|
1520
1710
|
const entry = entries[i] as { type: string; customType?: string; data?: TakomiState };
|
|
1521
1711
|
if (entry.type === "custom" && entry.customType === STATE_ENTRY && entry.data) {
|
|
1522
1712
|
state = { ...DEFAULT_STATE, ...entry.data };
|
|
1713
|
+
const legacyRole = String((entry.data as { role?: unknown }).role ?? "general");
|
|
1714
|
+
state.role = legacyRole === "general" ? "general" : canonicalizeTakomiPersona(legacyRole as TakomiPersona | "design" | "code" | "review");
|
|
1523
1715
|
break;
|
|
1524
1716
|
}
|
|
1525
1717
|
}
|