akari-video 0.1.64 → 0.1.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/package.json +1 -1
  2. package/vendor/.akari-capability-sources.json +2 -0
  3. package/vendor/docs/contract-2026-08-02-preview-parity.md +6 -0
  4. package/vendor/packages/akari-launcher/package.json +1 -1
  5. package/vendor/packages/edit-lint/src/edit-lint.mjs +5 -1
  6. package/vendor/packages/edit-store/lib/caption-display.d.ts +22 -0
  7. package/vendor/packages/edit-store/lib/caption-display.js +397 -93
  8. package/vendor/packages/edit-store/lib/caption-store.d.ts +16 -0
  9. package/vendor/packages/edit-store/lib/caption-store.js +89 -2
  10. package/vendor/packages/edit-store/lib/caption-window.d.ts +7 -1
  11. package/vendor/packages/edit-store/lib/caption-window.js +31 -3
  12. package/vendor/packages/edit-store/lib/generated/textstyle-catalog.js +1 -1
  13. package/vendor/packages/edit-store/lib/generation-meta-node.d.ts +11 -0
  14. package/vendor/packages/edit-store/lib/generation-meta-node.js +101 -0
  15. package/vendor/packages/edit-store/lib/generation-meta.d.ts +42 -0
  16. package/vendor/packages/edit-store/lib/generation-meta.js +33 -0
  17. package/vendor/packages/edit-store/lib/index.d.ts +1 -0
  18. package/vendor/packages/edit-store/lib/index.js +1 -0
  19. package/vendor/packages/edit-store/lib/webview-kernel.d.ts +1 -1
  20. package/vendor/packages/edit-store/lib/webview-kernel.js +268 -3
  21. package/vendor/packages/edit-store/package.json +1 -0
  22. package/vendor/packages/generate/README.md +12 -0
  23. package/vendor/packages/generate/package.json +11 -0
  24. package/vendor/packages/schemas/bin/refresh-gen-models-openapi.mjs +118 -0
  25. package/vendor/packages/schemas/bin/validate-captions.mjs +13 -1
  26. package/vendor/packages/schemas/bin/validate-gen-models.mjs +145 -0
  27. package/vendor/packages/schemas/bin/validate-generation-meta.mjs +75 -0
  28. package/vendor/packages/schemas/captions.schema.json +9 -2
  29. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_grok-imagine-i2v.json +414 -0
  30. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_h3-i2v.json +401 -0
  31. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_h3-ref.json +421 -0
  32. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_kling-v3-pro-i2v.json +578 -0
  33. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_kling-v3-standard-i2v.json +578 -0
  34. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_nano-banana-pro-edit.json +463 -0
  35. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_seedance-2.0-i2v.json +406 -0
  36. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_seedance-2.0-ref.json +418 -0
  37. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_seedance-2.5-i2v.json +412 -0
  38. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_veo-3.1-flf.json +403 -0
  39. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_veo-3.1-ref.json +368 -0
  40. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_vidu-q3-i2v.json +360 -0
  41. package/vendor/packages/schemas/fixtures/gen-models/openapi/fal_wan-2.7-i2v.json +533 -0
  42. package/vendor/packages/schemas/fixtures/generation-meta/done.json +80 -0
  43. package/vendor/packages/schemas/fixtures/generation-meta/failed.json +18 -0
  44. package/vendor/packages/schemas/fixtures/generation-meta/generating.json +18 -0
  45. package/vendor/packages/schemas/fixtures/generation-meta/planned.json +25 -0
  46. package/vendor/packages/schemas/fixtures/generation-meta/stale.json +18 -0
  47. package/vendor/packages/schemas/fixtures/generation-meta/still.json +20 -0
  48. package/vendor/packages/schemas/gen-models.json +425 -0
  49. package/vendor/packages/schemas/gen-models.schema.json +207 -0
  50. package/vendor/packages/schemas/generation-meta.schema.json +170 -0
  51. package/vendor/packages/schemas/test/gen-models-drift.test.mjs +286 -0
  52. package/vendor/packages/schemas/test/gen-models.test.mjs +84 -0
  53. package/vendor/packages/schemas/test/generation-meta.test.mjs +72 -0
  54. package/vendor/packages/schemas/test/validate-captions.test.mjs +24 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akari-video",
3
- "version": "0.1.64",
3
+ "version": "0.1.66",
4
4
  "description": "AKARI Video launcher CLI — start an AI-edited video project from any directory: scaffold, connection check, then hand over to Claude Code (or opencode). AKARI Video を opencode や Claude Code で、どのディレクトリからでも始めるための `akari` ランチャー CLI。接続確認(doctor)→ 未セットアップならプロジェクト雛形を作成 → AI エージェントを起動する。外部 npm 依存ゼロ(Node.js 組み込みモジュールのみ)。",
5
5
  "type": "module",
6
6
  "bin": {
@@ -91,6 +91,8 @@
91
91
  "packages/frame-engine/package.json",
92
92
  "packages/frame-engine/README.ja.md",
93
93
  "packages/frame-engine/README.md",
94
+ "packages/generate/package.json",
95
+ "packages/generate/README.md",
94
96
  "packages/gpu-export/package.json",
95
97
  "packages/gpu-export/README.ja.md",
96
98
  "packages/gpu-export/README.md",
@@ -137,6 +137,12 @@ finalFrameNumber **239**、lookahead hits **8**を要求する。
137
137
  shell のプレビューでは DOM 層として提示し、書き出しでは同じ DOM 規約から overlay sheet を構成する。
138
138
  器専用の字幕 HTML や出口専用の再レイアウトを持たない。
139
139
 
140
+ 行用 `style_vars` は `packages/edit-store/src/caption-display.ts` の
141
+ `resolveCaptionLineStyleVars` / `mergeCaptionLineTextStyles` をカーネル単一定義とし、shell、Web UI、
142
+ render-cut、`display_policy` の 4 面が同じ関数を呼ぶ。`display_policy` 経路の stroke も
143
+ `-webkit-text-stroke` として `width_px × 2` を出し、`paint-order: stroke fill` で描く
144
+ (2026-09-13 裁定)。
145
+
140
146
  active cue の判定は両プレビューとも**出力秒**で行う。source 秒の cue(`time_domain: "source"` と未宣言の
141
147
  legacy)は共有カーネル `packages/edit-store/src/caption-clock.ts` の `normalizeCaptionClock` が cut map
142
148
  で出力秒へ射影し、削除区間をまたぐ cue は 1 本ずつに分割する(`<id>-output-<n>`、元 id は
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akari-video",
3
- "version": "0.1.64",
3
+ "version": "0.1.66",
4
4
  "description": "AKARI Video launcher CLI — start an AI-edited video project from any directory: scaffold, connection check, then hand over to Claude Code (or opencode). AKARI Video を opencode や Claude Code で、どのディレクトリからでも始めるための `akari` ランチャー CLI。接続確認(doctor)→ 未セットアップならプロジェクト雛形を作成 → AI エージェントを起動する。外部 npm 依存ゼロ(Node.js 組み込みモジュールのみ)。 [akari-video npm vendor: bin/akari.mjs is reference-only. These CLI entrypoints are not included in the akari-video npm package. Use `akari doctor --json` and run the path reported in `render_cut.path`. Full installations provide it in a monorepo checkout, ~/.akari/app, /Applications/AKARI Video.app/Contents/Resources/packages, or %LOCALAPPDATA%\\Programs\\@akari-videoshell\\resources\\packages.]",
5
5
  "type": "module",
6
6
  "files": [
@@ -4086,7 +4086,7 @@ function validateCaptions(captions, edit, analysis, findings, paths, cutsEndSeco
4086
4086
  continue;
4087
4087
  }
4088
4088
  const required = ["id", "start", "end", "text", "speaker", "sourceRef", "edited"];
4089
- const optional = ["src", "time_domain", "words", "unrecognized", "style", "display_text", "display_fragments", "style_preset", "text_style"];
4089
+ const optional = ["src", "time_domain", "words", "unrecognized", "style", "display_text", "display_fragments", "display_timing", "style_preset", "text_style"];
4090
4090
  for (const field of required) {
4091
4091
  if (!Object.hasOwn(caption, field)) {
4092
4092
  captionFinding(findings, "captions.schema", `${field} is required`, itemPath);
@@ -4180,6 +4180,10 @@ function validateCaptions(captions, edit, analysis, findings, paths, cutsEndSeco
4180
4180
  if (Object.hasOwn(caption, "display_fragments") && !Array.isArray(caption.display_fragments)) {
4181
4181
  captionFinding(findings, "captions.schema", "display_fragments must be an array when present", itemPath);
4182
4182
  }
4183
+ if (Object.hasOwn(caption, "display_timing")
4184
+ && caption.display_timing !== "full" && caption.display_timing !== "speech-tight") {
4185
+ captionFinding(findings, "captions.schema", 'display_timing must be "full" or "speech-tight" when present', itemPath);
4186
+ }
4183
4187
  if (Object.hasOwn(caption, "style_preset")) {
4184
4188
  if (typeof caption.style_preset !== "string"
4185
4189
  || !/^[a-z0-9][a-z0-9-]*$/.test(caption.style_preset)) {
@@ -43,6 +43,11 @@ export interface CaptionDisplayCue {
43
43
  layout?: ResolvedCaptionLayout;
44
44
  words?: CaptionDisplayWord[];
45
45
  word_styles?: CaptionDisplayWordStyle[];
46
+ overflow?: CaptionDisplayOverflow;
47
+ }
48
+ export interface CaptionDisplayOverflow {
49
+ code: 'NO_WORD_BOUNDARY_SPLIT' | 'INVALID_MANUAL_FRAGMENTS';
50
+ units: number;
46
51
  }
47
52
  export interface CaptionDisplayWord {
48
53
  start: number;
@@ -117,6 +122,13 @@ export declare class CaptionDisplayError extends Error {
117
122
  constructor(code: string, message: string);
118
123
  }
119
124
  export declare function measureCaptionUnits(text: string): number;
125
+ export interface CaptionWordSpan {
126
+ start: number;
127
+ end: number;
128
+ wordLike: boolean;
129
+ }
130
+ /** 自動分割で採用してはいけない、Latin/数字または Segmenter 語の内部境界を判定する。 */
131
+ export declare function captionBreakBoundaryBlocked(text: string, boundary: number, wordSpans: readonly CaptionWordSpan[]): boolean;
120
132
  export declare function joinCaptionLines(lines: string[], locale: string): string;
121
133
  export declare function validateCaptionDisplayPolicy(value: unknown): CaptionDisplayPolicy;
122
134
  export declare function resolveCaptionDisplay(captionsRoot: unknown, edit: UnknownRecord, options?: {
@@ -152,6 +164,7 @@ export declare function dedupeCaptionOccurrences<T extends {
152
164
  export declare function splitCaptionFragments(text: string, policy: CaptionDisplayPolicy): {
153
165
  fragments: string[];
154
166
  boundaries: number[];
167
+ overflow?: CaptionDisplayOverflow;
155
168
  };
156
169
  export declare function foldCaptionLines(text: string, maxLineUnits: number, lines: number, locale?: string): string[];
157
170
  export declare function scheduleCaptionFragments(start: number, end: number, fragments: string[], minimumSeconds: number): Array<{
@@ -160,6 +173,10 @@ export declare function scheduleCaptionFragments(start: number, end: number, fra
160
173
  text: string;
161
174
  }>;
162
175
  export declare function mergeCaptionDisplayStyles(base: unknown, override: unknown): UnknownRecord | undefined;
176
+ /** Merge the snake_case captions.json line style vocabulary used by every renderer. */
177
+ export declare function mergeCaptionLineTextStyles(base: unknown, override: unknown): UnknownRecord | null;
178
+ export declare function usesPercentageBackground(background: unknown): boolean;
179
+ export declare function usesExtendedPerLineBackground(background: unknown): boolean;
163
180
  /**
164
181
  * zone 方式の px 系フィールドに掛ける scale(issue #40 §2)。`reference_height_px` が無ければ 1
165
182
  * (既存出力はバイト同一)。あれば output.height / reference_height_px — 基準は高さ(文字サイズは
@@ -186,6 +203,11 @@ export declare function scaleCaptionPx(value: number, scale: number): number;
186
203
  * 不正な anchor / vertical_align は未宣言として無視する(書き込み時検証済みが前提の防御)。
187
204
  */
188
205
  export declare function captionAnchorPositionVars(anchorValue: unknown, positionValue: unknown, verticalAlignValue: unknown): Record<string, string>;
206
+ /** Resolve the complete snake_case captions.json line style vocabulary to CSS variables. */
207
+ export declare function resolveCaptionLineStyleVars(style: UnknownRecord | null | undefined, output: {
208
+ width: number;
209
+ height: number;
210
+ } | undefined): Record<string, string>;
189
211
  export declare function resolveCaptionStyleForOutput(style: UnknownRecord, output: {
190
212
  width: number;
191
213
  height: number;