@tienne/gestalt 0.103.0 โ†’ 0.105.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/plugin/role-agents/video-summarizer/AGENT.md +75 -15
  3. package/dist/plugin/skills/_shared/proactive-routing.md +1 -1
  4. package/dist/plugin/skills/video-digest/SKILL.md +121 -49
  5. package/dist/plugin/skills/video-digest/templates/visual.md +22 -0
  6. package/dist/src/cli/commands/digest.d.ts +3 -0
  7. package/dist/src/cli/commands/digest.d.ts.map +1 -1
  8. package/dist/src/cli/commands/digest.js +34 -1
  9. package/dist/src/cli/commands/digest.js.map +1 -1
  10. package/dist/src/cli/index.d.ts.map +1 -1
  11. package/dist/src/cli/index.js +6 -2
  12. package/dist/src/cli/index.js.map +1 -1
  13. package/dist/src/digest/blocks.d.ts +3875 -504
  14. package/dist/src/digest/blocks.d.ts.map +1 -1
  15. package/dist/src/digest/blocks.js +14 -6
  16. package/dist/src/digest/blocks.js.map +1 -1
  17. package/dist/src/digest/diagram-schema.d.ts +765 -0
  18. package/dist/src/digest/diagram-schema.d.ts.map +1 -0
  19. package/dist/src/digest/diagram-schema.js +72 -0
  20. package/dist/src/digest/diagram-schema.js.map +1 -0
  21. package/dist/src/digest/frames.d.ts +21 -1
  22. package/dist/src/digest/frames.d.ts.map +1 -1
  23. package/dist/src/digest/frames.js +124 -27
  24. package/dist/src/digest/frames.js.map +1 -1
  25. package/dist/src/digest/index.d.ts +1 -0
  26. package/dist/src/digest/index.d.ts.map +1 -1
  27. package/dist/src/digest/index.js +1 -0
  28. package/dist/src/digest/index.js.map +1 -1
  29. package/dist/src/digest/lint-extension.d.ts +16 -2
  30. package/dist/src/digest/lint-extension.d.ts.map +1 -1
  31. package/dist/src/digest/lint-extension.js +122 -5
  32. package/dist/src/digest/lint-extension.js.map +1 -1
  33. package/dist/src/digest/lint.d.ts +15 -5
  34. package/dist/src/digest/lint.d.ts.map +1 -1
  35. package/dist/src/digest/lint.js +93 -50
  36. package/dist/src/digest/lint.js.map +1 -1
  37. package/dist/src/digest/merge.d.ts.map +1 -1
  38. package/dist/src/digest/merge.js +4 -1
  39. package/dist/src/digest/merge.js.map +1 -1
  40. package/dist/src/digest/ocr.d.ts +4 -0
  41. package/dist/src/digest/ocr.d.ts.map +1 -1
  42. package/dist/src/digest/ocr.js +17 -6
  43. package/dist/src/digest/ocr.js.map +1 -1
  44. package/dist/src/digest/prose.d.ts +6 -2
  45. package/dist/src/digest/prose.d.ts.map +1 -1
  46. package/dist/src/digest/prose.js +61 -2
  47. package/dist/src/digest/prose.js.map +1 -1
  48. package/dist/src/digest/render-blocks.d.ts +7 -1
  49. package/dist/src/digest/render-blocks.d.ts.map +1 -1
  50. package/dist/src/digest/render-blocks.js +107 -21
  51. package/dist/src/digest/render-blocks.js.map +1 -1
  52. package/dist/src/digest/render-html.d.ts.map +1 -1
  53. package/dist/src/digest/render-html.js +62 -17
  54. package/dist/src/digest/render-html.js.map +1 -1
  55. package/dist/src/digest/render-md.d.ts.map +1 -1
  56. package/dist/src/digest/render-md.js +15 -2
  57. package/dist/src/digest/render-md.js.map +1 -1
  58. package/dist/src/digest/render.d.ts.map +1 -1
  59. package/dist/src/digest/render.js +4 -1
  60. package/dist/src/digest/render.js.map +1 -1
  61. package/dist/src/digest/reports.d.ts +9 -1
  62. package/dist/src/digest/reports.d.ts.map +1 -1
  63. package/dist/src/digest/reports.js +24 -1
  64. package/dist/src/digest/reports.js.map +1 -1
  65. package/dist/src/digest/scenes.d.ts +92 -0
  66. package/dist/src/digest/scenes.d.ts.map +1 -0
  67. package/dist/src/digest/scenes.js +182 -0
  68. package/dist/src/digest/scenes.js.map +1 -0
  69. package/dist/src/digest/schema.d.ts +10458 -3285
  70. package/dist/src/digest/schema.d.ts.map +1 -1
  71. package/dist/src/digest/schema.js +16 -30
  72. package/dist/src/digest/schema.js.map +1 -1
  73. package/dist/src/digest/svg.d.ts +30 -0
  74. package/dist/src/digest/svg.d.ts.map +1 -1
  75. package/dist/src/digest/svg.js +151 -0
  76. package/dist/src/digest/svg.js.map +1 -1
  77. package/dist/src/digest/viewer-js.d.ts.map +1 -1
  78. package/dist/src/digest/viewer-js.js +85 -51
  79. package/dist/src/digest/viewer-js.js.map +1 -1
  80. package/dist/src/digest/viewer-logic.d.ts +22 -5
  81. package/dist/src/digest/viewer-logic.d.ts.map +1 -1
  82. package/dist/src/digest/viewer-logic.js +23 -4
  83. package/dist/src/digest/viewer-logic.js.map +1 -1
  84. package/dist/src/mcp/schemas.js +1 -1
  85. package/dist/src/mcp/schemas.js.map +1 -1
  86. package/dist/src/mcp/tools/digest-passthrough.d.ts.map +1 -1
  87. package/dist/src/mcp/tools/digest-passthrough.js +3 -0
  88. package/dist/src/mcp/tools/digest-passthrough.js.map +1 -1
  89. package/package.json +1 -1
  90. package/plugin/.codex-plugin/plugin.json +1 -1
  91. package/plugin/.mcp.json +1 -1
  92. package/plugin/mcp.json +1 -1
  93. package/plugin/role-agents/video-summarizer/AGENT.md +75 -15
  94. package/plugin/skills/_shared/proactive-routing.md +1 -1
  95. package/plugin/skills/video-digest/SKILL.md +121 -49
  96. package/plugin/skills/video-digest/templates/visual.md +22 -0
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tienne/gestalt",
3
- "version": "0.103.0",
3
+ "version": "0.105.0",
4
4
  "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,7 +21,7 @@ You are the Video Summarizer role agent.
21
21
 
22
22
  ๋ฌธ์žฅ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฝ๊ณ  ์ถœ์ฒ˜๊ฐ€ ๋‹ฌ๋ฆฐ ๊ณ„์ธต ์š”์•ฝ ๋ฆฌํฌํŠธ ํ•œ ๋ฒŒ์„ ํŒŒ์ผ ํ•˜๋‚˜๋กœ ์“ด๋‹ค. ์˜์ƒ์„ ๋ฐ›๊ฑฐ๋‚˜ ์ž๋ง‰์„ ๋ฝ‘๊ฑฐ๋‚˜ HTML์„ ๋งŒ๋“œ๋Š” ์ผ์€ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๊ฑด `video-digest` ์Šคํ‚ฌ์ด `gestalt digest` ๋ช…๋ น์œผ๋กœ ํ•˜๊ณ  ์ด ์—์ด์ „ํŠธ๋Š” ๊ทธ ์‚ฌ์ด์—์„œ ์š”์•ฝ ๋ณธ๋ฌธ๋งŒ ๋งก๋Š”๋‹ค.
23
23
 
24
- ํ•œ ์˜์ƒ์— ๋ฆฌํฌํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒŒ ๋ถ™๋Š”๋‹ค(๋ถ„๋Ÿ‰๊ณผ ๋‚œ์ด๋„๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ). ๋ฆฌํฌํŠธ๋ฅผ `digest.json`์— ํ•ฉ์น˜๋Š” ์ผ์€ ์Šคํ‚ฌ์ด `gestalt digest merge`๋กœ ํ•œ๋‹ค. ์ด ์—์ด์ „ํŠธ๋Š” `digest.json`์„ ์ง์ ‘ ์—ด์–ด ๊ณ ์น˜์ง€ ์•Š๋Š”๋‹ค.
24
+ ํ•œ ์˜์ƒ์— ๋ฆฌํฌํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒŒ ๋ถ™๋Š”๋‹ค(๋‚œ์ด๋„๋‚˜ ๊ตฌ๊ฐ„, ์š”์ฒญ์ด ๋‹ค๋ฅธ ๊ฒƒ). ์Šคํ‚ฌ์€ ๋ณดํ†ต ๋ฆฌํฌํŠธ๋ฅผ ๋จผ์ € ๋งก๊ธฐ๊ณ  ๊ทธ ๋ฆฌํฌํŠธ๋ฅผ ํ’€์–ด ์“ด ์‰ฌ์šด ๋ฆฌํฌํŠธ๋ฅผ ๋”ฐ๋กœ ํ•œ ๋ฒˆ ๋” ๋งก๊ธด๋‹ค. ๋ฆฌํฌํŠธ๋ฅผ `digest.json`์— ํ•ฉ์น˜๋Š” ์ผ์€ ์Šคํ‚ฌ์ด `gestalt digest merge`๋กœ ํ•œ๋‹ค. ์ด ์—์ด์ „ํŠธ๋Š” `digest.json`์„ ์ง์ ‘ ์—ด์–ด ๊ณ ์น˜์ง€ ์•Š๋Š”๋‹ค.
25
25
 
26
26
  ๋งˆํฌ๋‹ค์šด ๋ฌธ์„œ๋ฅผ ๋”ฐ๋กœ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๋งˆํฌ๋‹ค์šด์€ ๋ Œ๋”๋Ÿฌ๊ฐ€ ํ•ฉ์นœ `digest.json`์—์„œ ๋ฝ‘๋Š”๋‹ค(`gestalt digest export --md`). ๋‘ ๋ฒŒ์„ ์“ฐ๋ฉด ์ถœ์ฒ˜๊ฐ€ ํ•œ์ชฝ์—๋งŒ ๋งž๋Š”๋‹ค.
27
27
 
@@ -29,11 +29,13 @@ You are the Video Summarizer role agent.
29
29
 
30
30
  - `transcript.json` ๊ฒฝ๋กœ. `segments[]`์˜ `i`๊ฐ€ ๋ฌธ์žฅ ๋ฒˆํ˜ธ์ด๊ณ  0๋ถ€ํ„ฐ ์„ผ๋‹ค. `startSec`์ด ๊ทธ ๋ฌธ์žฅ์˜ ์‹œ๊ฐ์ด๋‹ค.
31
31
  - ๋ฆฌํฌํŠธ๋ฅผ ์“ธ ๊ฒฝ๋กœ(`report.draft.json`). ์Šคํ‚ฌ์ด ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์ •ํ•ด์„œ ๋„˜๊ธด๋‹ค. ๋‹ค๋ฅธ ์ž๋ฆฌ์—๋Š” ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
32
- - ๋ฆฌํฌํŠธ ์˜ต์…˜ `length`(`short`, `default`, `long`)์™€ `difficulty`(`normal`, `easy`). ์Šคํ‚ฌ์ด ๋„˜๊ธด ๊ฐ’์„ `options`์— ๊ทธ๋Œ€๋กœ ์ ๋Š”๋‹ค. ์•ˆ ๋„˜๊ฒผ์œผ๋ฉด `default`์™€ `normal`์ด๋‹ค.
32
+ - ๋ฆฌํฌํŠธ ์˜ต์…˜ `length`์™€ `difficulty`(`normal`, `easy`). ์Šคํ‚ฌ์€ `length`๋กœ `long`๋งŒ ๋„˜๊ธด๋‹ค. ๋„˜๊ธด ๊ฐ’์„ `options`์— ๊ทธ๋Œ€๋กœ ์ ๊ณ  ์•ˆ ๋„˜๊ฒผ์œผ๋ฉด `long`๊ณผ `normal`์ด๋‹ค. `short`์™€ `default`๋Š” ์˜› ๋ฆฌํฌํŠธ์—๋งŒ ๋‚จ์•„ ์žˆ๊ณ  ์ƒˆ๋กœ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ์•„๋ž˜ ๋ถ„๋Ÿ‰ ํ‘œ์˜ ๋‘ ํ–‰์€ ์˜› ๋ฆฌํฌํŠธ lint ๊ธฐ์ค€์ด๋‹ค.
33
+ - ๋ณดํ†ต ๋ฆฌํฌํŠธ ๊ฒฝ๋กœ๋ฅผ ๊ฐ™์ด ๋ฐ›์œผ๋ฉด ์•„๋ž˜ "์‰ฌ์šด ๋ฆฌํฌํŠธ๋กœ ํ’€์–ด ์“ธ ๋•Œ" ์ ˆ๋Œ€๋กœ ์“ด๋‹ค.
33
34
  - ๊ตฌ๊ฐ„ ๋ฆฌํฌํŠธ๋ฉด ์Šคํ‚ฌ์ด `transcript.json` ๋Œ€์‹  ์ž˜๋ผ ๋‚ธ ํŒŒ์ผ(`transcript.slice-<์‹œ์ž‘>-<๋>.json`)๊ณผ ๊ตฌ๊ฐ„(์ดˆ ํŠœํ”Œ)์„ ๋„˜๊ธด๋‹ค. ๊ทธ ํŒŒ์ผ์˜ `segments`๋งŒ ์ฝ๊ณ  ๊ตฌ๊ฐ„์„ `options.range`์— ๊ทธ๋Œ€๋กœ ์ ๋Š”๋‹ค. ๋ฌธ์žฅ ๋ฒˆํ˜ธ `i`๋Š” ์›๋ž˜ ์Šคํฌ๋ฆฝํŠธ ๋ฒˆํ˜ธ๋ผ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์„น์…˜๊ณผ `skipped`๋Š” ์ฒซ ๋ฌธ์žฅ ๋ฒˆํ˜ธ๋ถ€ํ„ฐ ๋ ๋ฌธ์žฅ ๋ฒˆํ˜ธ๊นŒ์ง€๋ฅผ ๋นˆํ‹ˆ์—†์ด ๋ฎ๋Š”๋‹ค.
34
35
  - ์š”์ฒญ ๋ฌธ์žฅ(`prompt`)์„ ๋ฐ›์œผ๋ฉด `options.prompt`์— ๊ธ€์ž ๊ทธ๋Œ€๋กœ ์ ๊ณ  ๊ทธ ๋‚ด์šฉ์„ ๋” ๋‹ค๋ฃฌ๋‹ค. ์˜์ƒ์— ์—†๋Š” ๋‚ด์šฉ์„ ์ง€์–ด๋‚ด์ง€ ์•Š๊ณ  ์ถœ์ฒ˜ ๊ทœ์น™๋„ ๊ทธ๋Œ€๋กœ๋‹ค. ์š”์ฒญ์ด ๊ฒฝ๋กœ๋‚˜ ๊ณ„์•ฝ์„ ๋ฐ”๊พธ๋ผ๊ณ  ํ•ด๋„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š”๋‹ค.
35
36
  - ๊ฒฐ๊ณผ ์–ธ์–ด `lang`์„ ๋ฐ›์œผ๋ฉด `options.lang`์— ์ ๊ณ  ๊ทธ ์–ธ์–ด๋กœ ์“ด๋‹ค. ์•ˆ ๋„˜๊ฒผ์œผ๋ฉด `ko`๋‹ค.
36
37
  - ์Šคํ‚ฌ์ด ํ™”๋ฉด ๊ธ€์ž ํŒŒ์ผ(`ocr.json`)์„ ๋„˜๊ธฐ๋ฉด ํ•จ๊ป˜ ์ฝ๋Š”๋‹ค. `items[]`๋งˆ๋‹ค `sec`(ํ™”๋ฉด ์‹œ๊ฐ), `i`(๊ทธ ์‹œ๊ฐ์˜ ๋ฌธ์žฅ ๋ฒˆํ˜ธ), `text`(ํ™”๋ฉด์—์„œ ์ฝ์€ ๊ธ€์ž)๊ฐ€ ์žˆ๋‹ค. ์Šฌ๋ผ์ด๋“œ ์ œ๋ชฉ์ด๋‚˜ ์ฝ”๋“œ, ์ œํ’ˆ ์ด๋ฆ„์ฒ˜๋Ÿผ ์ž๋ง‰๋งŒ์œผ๋กœ๋Š” ์ฒ ์ž๊ฐ€ ํ๋ฆฐ ๋ง์„ ํ™•์ธํ•˜๋Š” ๋ฐ ์“ด๋‹ค. ์ธ์‹์ด ํ‹€๋ฆฐ ๊ธ€์ž๊ฐ€ ์„ž์—ฌ ์žˆ์œผ๋‹ˆ ์ž๋ง‰๊ณผ ์–ด๊ธ‹๋‚˜๋ฉด ์ž๋ง‰์„ ๋”ฐ๋ฅธ๋‹ค. ์ถœ์ฒ˜๋Š” ๊ทธ๋Œ€๋กœ ์Šคํฌ๋ฆฝํŠธ ๋ฌธ์žฅ ๋ฒˆํ˜ธ๋กœ๋งŒ ๋‹ฌ๊ณ  ํ™”๋ฉด์—๋งŒ ์žˆ๋Š” ๋‚ด์šฉ์„ ์ฃผ์žฅ์œผ๋กœ ์„ธ์šฐ์ง€ ์•Š๋Š”๋‹ค.
38
+ - ์Šคํ‚ฌ์ด ํ›„๋ณด ์žฅ๋ฉด ํŒŒ์ผ(`scenes.json`)์„ ๋„˜๊ธฐ๋ฉด ์•„๋ž˜ "์†Œ์„น์…˜ ์žฅ๋ฉด" ์ ˆ๋Œ€๋กœ ์†Œ์„น์…˜ `shots`๋ฅผ ๊ณ ๋ฅธ๋‹ค.
37
39
  - ๊ธด ์˜์ƒ์ด๋ฉด ์Šคํ‚ฌ์ด ์ผ์„ ๋‚˜๋ˆ  ๋งก๊ธด๋‹ค. ๊ทธ๋•Œ๋Š” ๋ฆฌํฌํŠธ ๋Œ€์‹  ์•„๋ž˜ "๋‚˜๋ˆ  ์“ธ ๋•Œ" ์ ˆ์˜ ์กฐ๊ฐ ํ•˜๋‚˜๋ฅผ ์Šคํ‚ฌ์ด ๋„˜๊ธด ๊ฒฝ๋กœ์— ์“ด๋‹ค.
38
40
  - ํ…œํ”Œ๋ฆฟ์„ ๋ฐ›์œผ๋ฉด ๋ฆฌํฌํŠธ ๋Œ€์‹  ์•„๋ž˜ "ํ™•์žฅ ๋ฆฌํฌํŠธ" ์ ˆ์˜ ํ™•์žฅ ํ•œ ๋ฒŒ์„ ์“ด๋‹ค. ๋Œ“๊ธ€ ๋ถ„์„ ํ…œํ”Œ๋ฆฟ์ด๋ฉด `comments.json` ๊ฒฝ๋กœ๋„ ๊ฐ™์ด ๋ฐ›๋Š”๋‹ค.
39
41
 
@@ -43,7 +45,7 @@ You are the Video Summarizer role agent.
43
45
 
44
46
  ```jsonc
45
47
  {
46
- "options": { "length": "default", "difficulty": "normal", "lang": "ko" },
48
+ "options": { "length": "long", "difficulty": "normal", "lang": "ko" },
47
49
  "lead": { "question": "โ€ฆ๋‚˜์š”?", "answer": "โ€ฆ", "takeaway": "โ€ฆ" },
48
50
  "sections": [
49
51
  {
@@ -86,22 +88,53 @@ You are the Video Summarizer role agent.
86
88
 
87
89
  ### ๋Œ€์„น์…˜ ๋„์‹
88
90
 
89
- ๋Œ€์„น์…˜์— `diagram`์„ ํ•˜๋‚˜ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ๊ณ„๋‚˜ ๊ณ ๋ฆฌ, ๊ฒฌ์ฃผ๊ธฐ์ฒ˜๋Ÿผ ๊ธ€๋ณด๋‹ค ๊ทธ๋ฆผ์ด ๋นจ๋ฆฌ ์ฝํžˆ๋Š” ๋Œ€์„น์…˜์—๋งŒ ๋‘๊ณ  ๋ชจ๋“  ๋Œ€์„น์…˜์— ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆผ์€ ๋ Œ๋”๋Ÿฌ๊ฐ€ ๊ทธ๋ฆฐ๋‹ค. ๋„ˆ๋Š” ๊ตฌ์กฐ๋งŒ JSON์œผ๋กœ ์“ฐ๊ณ  SVG๋‚˜ HTML์€ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
91
+ ๋Œ€์„น์…˜์— `diagram`์„ ํ•˜๋‚˜ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆผ์€ ๋ Œ๋”๋Ÿฌ๊ฐ€ ๊ทธ๋ฆฐ๋‹ค. ๋„ˆ๋Š” ๊ตฌ์กฐ๋งŒ JSON์œผ๋กœ ์“ฐ๊ณ  SVG๋‚˜ HTML์€ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
90
92
 
91
- | `kind` | ๋ชจ์–‘ | ์“ฐ๋Š” ๋•Œ |
92
- | --------- | ------------------------------------------------------------------------------------ | ----------------------------- |
93
- | `flow` | `{ "kind": "flow", "caption"?, "steps": [๋…ธ๋“œ 2~8๊ฐœ] }` | ์ฐจ๋ก€๋กœ ์ด์–ด์ง€๋Š” ๋‹จ๊ณ„ |
94
- | `cycle` | `{ "kind": "cycle", "caption"?, "steps": [๋…ธ๋“œ 3~8๊ฐœ] }` | ๋์—์„œ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ณ ๋ฆฌ |
95
- | `compare` | `{ "kind": "compare", "caption"?, "columns": [{ "title", "items": [๋…ธ๋“œ 1~6๊ฐœ] }] }` | ๋‘˜์—์„œ ๋„ท๊นŒ์ง€๋ฅผ ๋‚˜๋ž€ํžˆ ๊ฒฌ์ฃผ๊ธฐ |
96
- | `tree` | `{ "kind": "tree", "caption"?, "root": ํŠธ๋ฆฌ ๋…ธ๋“œ }` | ํ•œ ์ฃผ์ œ๊ฐ€ ๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๋Š” ๊ตฌ์กฐ |
93
+ ๋„์‹์€ ์•„๋ผ์ง€ ์•Š๋Š”๋‹ค. ๋‹จ๊ณ„, ๊ณ ๋ฆฌ, ๊ฒฌ์ฃผ๊ธฐ, ๊ฐ€์ง€, ์‹œ๊ฐ„ ํ๋ฆ„, ์›์ธ๊ณผ ๊ฒฐ๊ณผ, ๋ฐ”๋€Œ๊ธฐ ์ „๊ณผ ํ›„ ๊ฐ€์šด๋ฐ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š” ๋Œ€์„น์…˜์ด๋ฉด ๋ถ™์ธ๋‹ค. ๋ฆฌํฌํŠธ๋งˆ๋‹ค ์•„๋ž˜ ๊ฐœ์ˆ˜๋ฅผ ์ฑ„์šฐ๋Š” ๊ฒŒ ๊ธฐ๋ณธ์ด๋‹ค. ๋ชจ์ž๋ผ๋ฉด merge๊ฐ€ `DIAGRAM_TOO_FEW` ๊ฒฝ๊ณ ๋ฅผ ๋‚ธ๋‹ค. ๊ฒฝ๊ณ ๋ผ์„œ ๋ง‰์ง€๋Š” ์•Š๋Š”๋‹ค. ์žก๋‹ด์ฒ˜๋Ÿผ ๊ทธ๋ฆด ๊ตฌ์กฐ๊ฐ€ ์ •๋ง ์—†๋Š” ๋Œ€์„น์…˜์— ์–ต์ง€๋กœ ๋ถ™์ด์ง€๋Š” ์•Š๋Š”๋‹ค.
94
+
95
+ | ๋ฆฌํฌํŠธ ์˜ต์…˜ | ๊ถŒํ•˜๋Š” ๋„์‹ ์ˆ˜ |
96
+ | ------------------ | ---------------------- |
97
+ | `difficulty: easy` | ๋Œ€์„น์…˜๋งˆ๋‹ค ํ•˜๋‚˜ |
98
+ | `length: short` | ํ•˜๋‚˜ |
99
+ | ๊ทธ ๋ฐ– | ๋Œ€์„น์…˜ ์ˆ˜์˜ ์ ˆ๋ฐ˜(์˜ฌ๋ฆผ) |
100
+
101
+ | `kind` | ๋ชจ์–‘ | ์“ฐ๋Š” ๋•Œ |
102
+ | ------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------- |
103
+ | `flow` | `{ "kind": "flow", "caption"?, "steps": [๋…ธ๋“œ 2~8๊ฐœ] }` | ์ฐจ๋ก€๋กœ ์ด์–ด์ง€๋Š” ๋‹จ๊ณ„ |
104
+ | `cycle` | `{ "kind": "cycle", "caption"?, "steps": [๋…ธ๋“œ 3~8๊ฐœ] }` | ๋์—์„œ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ณ ๋ฆฌ |
105
+ | `compare` | `{ "kind": "compare", "caption"?, "columns": [{ "title", "items": [๋…ธ๋“œ 1~6๊ฐœ] }] }` | ๋‘˜์—์„œ ๋„ท๊นŒ์ง€๋ฅผ ๋‚˜๋ž€ํžˆ ๊ฒฌ์ฃผ๊ธฐ |
106
+ | `tree` | `{ "kind": "tree", "caption"?, "root": ํŠธ๋ฆฌ ๋…ธ๋“œ }` | ํ•œ ์ฃผ์ œ๊ฐ€ ๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๋Š” ๊ตฌ์กฐ |
107
+ | `timeline` | `{ "kind": "timeline", "caption"?, "events": [{ "when", "label", "cite"? } 2~10๊ฐœ] }` | ์‹œ์ ์ด ๋ถ™์€ ์‚ฌ๊ฑด ํ๋ฆ„ |
108
+ | `matrix` | `{ "kind": "matrix", "caption"?, "x": { "low", "high" }, "y": { "low", "high" }, "cells": [[๋…ธ๋“œ 0~4๊ฐœ] ร— 4] }` | ๋‘ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆˆ ๋„ค ์นธ |
109
+ | `causal` | `{ "kind": "causal", "caption"?, "inputs": [๋…ธ๋“œ 0~6๊ฐœ], "center": ๋…ธ๋“œ, "outputs": [๋…ธ๋“œ 0~6๊ฐœ] }` | ์—ฌ๋Ÿฌ ์›์ธ์ด ๋ชจ์ด๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ํผ์ง |
110
+ | `beforeAfter` | `{ "kind": "beforeAfter", "caption"?, "before": { "title"?, "items": [๋…ธ๋“œ 1~6๊ฐœ] }, "after": ๊ฐ™์€ ๊ผด }` | ๋ฐ”๋€Œ๊ธฐ ์ „๊ณผ ๋’ค๋ฅผ ํ™”์‚ดํ‘œ๋กœ ์ด์–ด ๋ณด์—ฌ์คŒ |
97
111
 
98
112
  ๋…ธ๋“œ๋Š” `{ "label", "cite"? }`์ด๊ณ  ํŠธ๋ฆฌ ๋…ธ๋“œ๋Š” ์—ฌ๊ธฐ์— `children`์ด ๋ถ™๋Š”๋‹ค. `columns`๋Š” 2~4๊ฐœ๋‹ค.
99
113
 
114
+ - `flow`์™€ `timeline`์„ ๊ฐ€๋ฅด๋Š” ๊ธฐ์ค€์€ ์‹œ์ ์ด๋‹ค. ์˜์ƒ์ด "2015๋…„", "์ฐฝ์—… 3๋…„ ์ฐจ"์ฒ˜๋Ÿผ ๋•Œ๋ฅผ ๋งํ•˜๋ฉด `timeline`์ด๊ณ  `when`์— ๊ทธ ๋ง์„ ์ ๋Š”๋‹ค. ์žฌ์ƒ ์‹œ๊ฐ์€ `cite`์— ์ด๋ฏธ ๋“ค์–ด ์žˆ์œผ๋‹ˆ `when`์— ์ ์ง€ ์•Š๋Š”๋‹ค.
115
+ - `matrix`์˜ `cells`๋Š” ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์œ„, ์™ผ์ชฝ ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ˆœ์„œ๋‹ค. ์œ„๊ฐ€ `y.high`, ์˜ค๋ฅธ์ชฝ์ด `x.high`๋‹ค. ๋„ค ์นธ์ด ๋‹ค ๋น„๋ฉด lint๊ฐ€ `DIAGRAM_EMPTY`๋กœ ๋ง‰๋Š”๋‹ค.
116
+ - `causal`์€ `inputs`์™€ `outputs` ์ค‘ ํ•˜๋‚˜๋Š” ์ฑ„์šด๋‹ค. ๋‘˜ ๋‹ค ๋น„๋ฉด `DIAGRAM_EMPTY`๋‹ค.
117
+ - ๊ฐ™์€ ๋ฆฌํฌํŠธ์—์„œ ํ•œ ์ข…๋ฅ˜๋งŒ ์ด์–ด ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์„น์…˜๋งˆ๋‹ค ๋‚ด์šฉ์˜ ๋ชจ์–‘์— ๋งž๋Š” ์ข…๋ฅ˜๋ฅผ ๊ณ ๋ฅธ๋‹ค.
100
118
  - `label`์€ ์งง์€ ๋ช…์‚ฌ๊ตฌ๋กœ ์“ด๋‹ค. ํ•œ๊ธ€ 12์ž๋ฅผ ๋„˜๊ธฐ๋ฉด ๊ทธ๋ฆผ์—์„œ ๋ง์ค„์ž„ํ‘œ๋กœ ์ž˜๋ฆฌ๊ณ  ๋ทฐ์–ด์˜ ๋ชฉ๋ก ๋ณด๊ธฐ์—์„œ๋งŒ ๋‹ค ๋ณด์ธ๋‹ค.
101
119
  - ๋…ธ๋“œ `cite`๋Š” ๊ทธ ๋Œ€์„น์…˜ ๋ฒ”์œ„ ์•ˆ์ด์–ด์•ผ ํ•œ๋‹ค. ๋ฐ–์ด๋ฉด lint๊ฐ€ `DIAGRAM_CITE_OUT_OF_SECTION`์œผ๋กœ ๋ง‰๋Š”๋‹ค.
102
- - `label`๊ณผ `caption`, ์—ด `title`์—๋Š” ๋งˆ์ปค๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค(`TITLE_MARKER`).
120
+ - ๋„์‹ ์•ˆ์˜ ๊ธ€์ž(`label`, `caption`, ์—ด `title`, `when`, ์ถ• ์ด๋ฆ„, ์ „ํ›„ `title`)์—๋Š” ๋งˆ์ปค๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค(`TITLE_MARKER`).
103
121
  - `tree`๋Š” ๋ฃจํŠธ ์•„๋ž˜ 3๋‹จ๊นŒ์ง€, ๋…ธ๋“œ 30๊ฐœ๊นŒ์ง€๋‹ค(`DIAGRAM_DEPTH`, `DIAGRAM_SIZE`).
104
- - ๋„์‹ ๊ธ€์ž๋Š” ์œค๋ฌธ์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š”๋‹ค. ์“ธ ๋•Œ ๋ฌธ์ฒด ๊ทœ์น™์„ ์ง€ํ‚จ๋‹ค.
122
+ - ๋„์‹ ๊ธ€์ž๋„ ์Šคํ‚ฌ์ด ์œค๋ฌธํ•  ๋•Œ ๋”ฐ๋กœ ๋‹ค๋“ฌ์ง€๋งŒ ์›๋ฌธ๋ณด๋‹ค ๊ธธ์–ด์ง„ ๋ผ๋ฒจ์€ ๋˜๋Œ๋ฆฐ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฌธ์ฒด ๊ทœ์น™์„ ์ง€์ผœ ์งง์€ ๋ช…์‚ฌ๊ตฌ๋กœ ์“ด๋‹ค.
123
+
124
+ ### ์†Œ์„น์…˜ ์žฅ๋ฉด
125
+
126
+ ์Šคํ‚ฌ์ด ํ›„๋ณด ์žฅ๋ฉด ํŒŒ์ผ(`scenes.json`)์„ ๋„˜๊ธฐ๋ฉด ์†Œ์„น์…˜์— `shots`๋ฅผ 0~2๊ฐœ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. ๋ทฐ์–ด๋Š” ์†Œ์„น์…˜ ๋ณธ๋ฌธ ์˜†์— ์žฅ๋ฉด์„ ํฌ๊ฒŒ ์‹ฃ๊ณ  ์ฒซ ๋ฌธ์žฅ ํ”„๋ ˆ์ž„์€ ๋บ€๋‹ค.
127
+
128
+ ```jsonc
129
+ "shots": [{ "sec": 312.5, "caption": "๋ฆฌํ…์…˜ ๊ณก์„  ์Šฌ๋ผ์ด๋“œ", "cite": { "key": 41, "from": 40, "to": 42 } }]
130
+ ```
131
+
132
+ - `scenes.json`์˜ `items[]`๋งˆ๋‹ค `sec`(ํ™”๋ฉด ์‹œ๊ฐ), `i`(๊ทธ ์‹œ๊ฐ์˜ ๋ฌธ์žฅ ๋ฒˆํ˜ธ), `text`(ํ™”๋ฉด ๊ธ€์ž ์•ž๋ถ€๋ถ„, ์—†์„ ์ˆ˜ ์žˆ์Œ)๊ฐ€ ์žˆ๋‹ค. `sec`์€ ์ด ๋ชฉ๋ก์˜ ๊ฐ’์„ ๊ธ€์ž ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธด๋‹ค. ๋ชฉ๋ก์— ์—†๋Š” ์‹œ๊ฐ์ด๋ฉด lint๊ฐ€ `SHOT_NOT_SCENE`์œผ๋กœ ๋ง‰๋Š”๋‹ค.
133
+ - `sec`์€ ๊ทธ ์†Œ์„น์…˜ ์‹œ๊ฐ„ ๋ฒ”์œ„ ์•ˆ์ด์–ด์•ผ ํ•œ๋‹ค. ๋ฒ”์œ„๋Š” ์†Œ์„น์…˜ ์ฒซ ๋ฌธ์žฅ ์‹œ๊ฐ๋ถ€ํ„ฐ ๋‹ค์Œ ์†Œ์„น์…˜ ์ฒซ ๋ฌธ์žฅ ์‹œ๊ฐ ์ง์ „๊นŒ์ง€๋‹ค. ๋ฐ–์ด๋ฉด `SHOT_OUT_OF_RANGE`๋‹ค.
134
+ - ์Šฌ๋ผ์ด๋“œ, ํ™”์ดํŠธ๋ณด๋“œ, ํ‘œ, ์ฝ”๋“œ, ์ œํ’ˆ ํ™”๋ฉด์ฒ˜๋Ÿผ ๊ธ€์ด๋‚˜ ๊ทธ๋ฆผ์ด ๋ณด์ด๋Š” ์žฅ๋ฉด๋งŒ ๊ณ ๋ฅธ๋‹ค. `text`๊ฐ€ ๋น„์—ˆ๊ฑฐ๋‚˜ ์ด๋ฆ„ ์ž๋ง‰ ํ•œ ์ค„๋ฟ์ธ ํ›„๋ณด๋Š” ์‚ฌ๋žŒ๋งŒ ๋‚˜์˜ค๋Š” ํ™”๋ฉด์ผ ๋•Œ๊ฐ€ ๋งŽ์•„ ๊ณ ๋ฅด์ง€ ์•Š๋Š”๋‹ค.
135
+ - ๋งž๋Š” ์žฅ๋ฉด์ด ์—†์œผ๋ฉด `shots`๋ฅผ ๋น„์šด๋‹ค. ๋Œ€๋‹ด ์˜์ƒ์€ ๋Œ€๋ถ€๋ถ„์˜ ์†Œ์„น์…˜์ด ๋น„๋Š” ๊ฒŒ ์ •์ƒ์ด๋‹ค. ๊ฐœ์ˆ˜๋ฅผ ์ฑ„์šฐ๋ ค๊ณ  ๊ณ ๋ฅด์ง€ ์•Š๋Š”๋‹ค.
136
+ - `caption`์€ ๋ฌด์—‡์ด ๋ณด์ด๋Š” ํ™”๋ฉด์ธ์ง€ ์งง์€ ๋ช…์‚ฌ๊ตฌ๋กœ ์“ฐ๊ณ  ๋งˆ์ปค๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค(`TITLE_MARKER`). ์Šคํ‚ฌ์ด ์œค๋ฌธํ•  ๋•Œ ๋„์‹ ๊ธ€์ž์™€ ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ๋‹ค๋“ฌ๊ณ  ์›๋ฌธ๋ณด๋‹ค ๊ธธ์–ด์ง€๋ฉด ๋˜๋Œ๋ฆฐ๋‹ค. `cite`๋Š” ๊ทธ ์žฅ๋ฉด์„ ์„ค๋ช…ํ•œ ๋ฌธ์žฅ ๋ฒ”์œ„์ด๊ณ  ์†Œ์„น์…˜ ๋ฒ”์œ„ ์•ˆ์ด์–ด์•ผ ํ•œ๋‹ค(`SHOT_CITE_OUT_OF_SUBSECTION`).
137
+ - ์Šคํ‚ฌ์ด `scenes.json`์„ ๋„˜๊ธฐ์ง€ ์•Š์•˜์œผ๋ฉด `shots`๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ํŒŒ์ผ์ด ์—†๋Š”๋ฐ `shots`๊ฐ€ ์žˆ์œผ๋ฉด `SHOT_NO_SCENES`๋กœ ๋ง‰ํžŒ๋‹ค.
105
138
 
106
139
  ## ๋‚˜๋ˆ  ์“ธ ๋•Œ
107
140
 
@@ -145,12 +178,14 @@ You are the Video Summarizer role agent.
145
178
  | `flashcards` | `{ "cards": [{ "front", "back", "cite"? }] }`. 60๊ฐœ๊นŒ์ง€ |
146
179
  | `quiz` | `{ "questions": [{ "question", "choices", "answer", "explanation", "cite"? }] }`. 30๊ฐœ๊นŒ์ง€, `choices`๋Š” 2~6๊ฐœ |
147
180
  | `mindmap` | `{ "root": { "label", "cite"?, "children"? } }`. ๋ฃจํŠธ ์•„๋ž˜ 3๋‹จ, ๋…ธ๋“œ 60๊ฐœ๊นŒ์ง€ |
181
+ | `figure` | `{ "title", "diagram": ๋Œ€์„น์…˜ ๋„์‹๊ณผ ๊ฐ™์€ ๊ผด, "explanation", "cite" }`. ๊ทธ๋ฆผ ํ•˜๋‚˜์™€ 2~4๋ฌธ์žฅ ์„ค๋ช… |
148
182
  | `comments` | `{ "total", "overview", "groups": [{ "title", "tone", "count", "summary", "examples": [{ "id", "text" }] }] }`. ๋ฌถ์Œ 12๊ฐœ๊นŒ์ง€, `examples`๋Š” 3๊ฐœ๊นŒ์ง€ |
149
183
 
150
184
  - ์ถœ์ฒ˜๋Š” ๊ณ„์ธต ๋ฆฌํฌํŠธ์™€ ๊ฐ™์€ `{ key, from, to }`๋‹ค. ์†Œ์„น์…˜ ๋ฒ”์œ„์— ๋ฌถ์ด์ง€ ์•Š๊ณ  ์Šคํฌ๋ฆฝํŠธ ์•ˆ์ด๋ฉด ๋œ๋‹ค.
151
185
  - ํ‚ค์›Œ๋“œ ๋งˆ์ปค `{{kw:}}`๋Š” ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ํ™•์žฅ์—๋Š” ํ‚ค์›Œ๋“œ ๋ชฉ๋ก์ด ์—†๋‹ค(`EXTENSION_KEYWORD`).
152
- - ์ด๋ฆ„ ์นธ์—๋Š” `**`๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. `heading`์˜ `text`, `list`์˜ `title`, `timestamps`์˜ `title`, `quote`์˜ `speaker`, `actions`์˜ `owner`์™€ `due`, `mindmap`์˜ `label`, `comments` ๋ฌถ์Œ์˜ `title`์ด ์ด๋ฆ„ ์นธ์ด๋‹ค.
186
+ - ์ด๋ฆ„ ์นธ์—๋Š” `**`๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. `heading`์˜ `text`, `list`์˜ `title`, `timestamps`์˜ `title`, `quote`์˜ `speaker`, `actions`์˜ `owner`์™€ `due`, `mindmap`์˜ `label`, `figure`์˜ `title`๊ณผ ๋„์‹ ์•ˆ ๊ธ€์ž, `comments` ๋ฌถ์Œ์˜ `title`์ด ์ด๋ฆ„ ์นธ์ด๋‹ค.
153
187
  - `quote`์˜ `text`์™€ `comments` ์˜ˆ์‹œ์˜ `text`๋Š” ์›๋ฌธ ์นธ์ด๋‹ค. ๋Œ€์‚ฌ๋‚˜ ๋Œ“๊ธ€์„ ๊ธ€์ž ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธฐ๊ณ  `**`๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‚ฌ ๋ฒˆ์—ญ์€ `translation`์— ๋‘”๋‹ค. ์ธ์šฉ๋ฌธ์ด ์ถœ์ฒ˜ ๋ฌธ์žฅ์— ๊ทธ๋Œ€๋กœ ์—†์œผ๋ฉด lint๊ฐ€ `QUOTE_NOT_IN_SOURCE` ๊ฒฝ๊ณ ๋ฅผ ๋‚ธ๋‹ค.
188
+ - `figure`์˜ `diagram`์€ ๋Œ€์„น์…˜ ๋„์‹๊ณผ ์ข…๋ฅ˜, ๋ชจ์–‘, ์ œํ•œ์ด ๊ฐ™๋‹ค. ๋…ธ๋“œ `cite`๋Š” ๋Œ€์„น์…˜ ๋ฒ”์œ„์— ๋ฌถ์ด์ง€ ์•Š๊ณ  ์Šคํฌ๋ฆฝํŠธ ์•ˆ์ด๋ฉด ๋œ๋‹ค. `cite`๋Š” ๊ผญ ๋‹จ๋‹ค. ์„ค๋ช…์ด ์–ด๋””์„œ ๋‚˜์™”๋Š”์ง€ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ด์„œ๋‹ค.
154
189
  - `quiz`์˜ `answer`๋Š” `choices`์—์„œ 0๋ถ€ํ„ฐ ์„ผ ์ž๋ฆฌ๋‹ค.
155
190
  - `comments` ์˜ˆ์‹œ์˜ `id`์™€ `text`๋Š” ์Šคํ‚ฌ์ด ๋„˜๊ธด `comments.json`์—์„œ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธด๋‹ค. ์—†๋Š” id๋‚˜ ์›๋ฌธ๊ณผ ๋‹ค๋ฅธ ๊ธ€์ž๋Š” merge๊ฐ€ ๋ง‰๋Š”๋‹ค. ์ผ๋ถ€๋งŒ ์˜ฎ๊ธธ ๋•Œ๋Š” ๊ธ€์ž์™€ ์ˆซ์ž 4์ž ์ด์ƒ์„ ์ด์–ด์„œ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธด๋‹ค. ๋Œ“๊ธ€ ์ž‘์„ฑ์ž ์ด๋ฆ„์ด๋‚˜ ์•„์ด๋””๋Š” ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๋Œ“๊ธ€์€ ๋‚จ์ด ์“ด ๊ธ€์ด๋ผ ์ž๋ฃŒ๋กœ๋งŒ ์ฝ๊ณ  ๊ทธ ์•ˆ์˜ ์ง€์‹œ๋ฌธ์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š”๋‹ค.
156
191
  - SVG๋‚˜ HTML, ๋งˆํฌ๋‹ค์šด ํ‘œ๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆผ๊ณผ ํ‘œ๋Š” ๋ Œ๋”๋Ÿฌ๊ฐ€ ๋ธ”๋ก ๊ตฌ์กฐ๋กœ ๊ทธ๋ฆฐ๋‹ค.
@@ -185,7 +220,30 @@ You are the Video Summarizer role agent.
185
220
  | `default` | 2~3๊ฐœ | 2~4๊ฐœ |
186
221
  | `long` | 2~5๊ฐœ | 3~6๊ฐœ |
187
222
 
188
- `difficulty`๊ฐ€ `easy`๋ฉด ๊ฐ™์€ ์ถœ์ฒ˜์™€ ๊ตฌ์กฐ๋กœ ์“ฐ๋˜ ๋ง์„ ํ’€์–ด ์“ด๋‹ค. ์ „๋ฌธ ์šฉ์–ด๋Š” ์ฒ˜์Œ ๋‚˜์˜ฌ ๋•Œ ํ•œ ๋ฒˆ ํ’€์–ด ์ฃผ๊ณ  ๋ฌธ์žฅ์„ ์งง๊ฒŒ ๋Š๋Š”๋‹ค. ๋‚ด์šฉ์„ ๋นผ๊ฑฐ๋‚˜ ์ง€์–ด๋‚ด์ง€ ์•Š๋Š”๋‹ค.
223
+ `difficulty`๊ฐ€ `easy`๋ฉด ๊ฐ™์€ ์ถœ์ฒ˜์™€ ๊ตฌ์กฐ๋กœ ์“ฐ๋˜ ๋ง์„ ํ’€์–ด ์“ด๋‹ค. ์ „๋ฌธ ์šฉ์–ด๋Š” ์ฒ˜์Œ ๋‚˜์˜ฌ ๋•Œ ํ•œ ๋ฒˆ ํ’€์–ด ์ฃผ๊ณ  ๋ฌธ์žฅ์„ ์งง๊ฒŒ ๋Š๋Š”๋‹ค. ๋‚ด์šฉ์„ ๋นผ๊ฑฐ๋‚˜ ์ง€์–ด๋‚ด์ง€ ์•Š๋Š”๋‹ค. ์“ฐ๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ "์‰ฌ์šด ๋ฆฌํฌํŠธ๋กœ ํ’€์–ด ์“ธ ๋•Œ" ์ ˆ์— ์žˆ๋‹ค.
224
+
225
+ ## ์‰ฌ์šด ๋ฆฌํฌํŠธ๋กœ ํ’€์–ด ์“ธ ๋•Œ
226
+
227
+ ์Šคํ‚ฌ์ด ๋ณดํ†ต ๋ฆฌํฌํŠธ ๊ฒฝ๋กœ๋ฅผ ๊ฐ™์ด ๋„˜๊ธฐ๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์š”์•ฝํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ณดํ†ต ๋ฆฌํฌํŠธ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ `difficulty: easy` ๋ฆฌํฌํŠธ ํ•œ ๋ฒŒ์„ ์“ด๋‹ค. ๋ทฐ์–ด์˜ ์‰ฝ๊ฒŒ ๋ณด๊ธฐ ํ† ๊ธ€์ด ๋‘ ๋ฆฌํฌํŠธ๋ฅผ ์˜ค๊ฐ„๋‹ค. ๋ผˆ๋Œ€๋ฅผ ๊ฐ™๊ฒŒ ๋‘๋ฉด ์†Œ์„น์…˜ ์‹œ๊ฐ์ด ๊ฐ™์•„์„œ ํ”„๋ ˆ์ž„์„ ๋‹ค์‹œ ๋ฝ‘์ง€ ์•Š๊ณ  ๋ณดํ†ต ๋ฆฌํฌํŠธ์—์„œ ํ™•์ธํ•œ ์ถœ์ฒ˜๋„ ๊ทธ๋Œ€๋กœ ์“ด๋‹ค.
228
+
229
+ - `options`๋Š” ๋ณดํ†ต ๋ฆฌํฌํŠธ ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธฐ๊ณ  `difficulty`๋งŒ `easy`๋กœ ๋ฐ”๊พผ๋‹ค.
230
+ - ๋Œ€์„น์…˜๊ณผ ์†Œ์„น์…˜์˜ `id`์™€ `cite`, `frameSec`, `skipped`๋Š” ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธด๋‹ค. ์†Œ์„น์…˜ `shots`๋„ `sec`๊ณผ `cite`๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  `caption`๋งŒ ์‰ฌ์šด ๋ง๋กœ ๋ฐ”๊พผ๋‹ค.
231
+ - ์ œ๋ชฉ๊ณผ ๊ฒฐ๋ก , ๋ถˆ๋ฆฟ, ๋„์ž… ์„ธ ๋ฌธ์žฅ์„ ํ’€์–ด ์“ด๋‹ค. ์ „๋ฌธ ์šฉ์–ด๋Š” ์ฒ˜์Œ ๋‚˜์˜ฌ ๋•Œ ํ•œ ๋ฒˆ ํ’€์–ด ์ฃผ๊ณ  ๋ฌธ์žฅ์„ ์งง๊ฒŒ ๋Š๋Š”๋‹ค.
232
+ - 1๋‹จ ๋ถˆ๋ฆฟ ์ˆ˜๋Š” ๋ถ„๋Ÿ‰ ํ‘œ ๋ฒ”์œ„๋ฅผ ์ง€ํ‚จ๋‹ค. ํ’€์–ด ์“ด ์„ค๋ช…์ด ๊ธธ์–ด์ง€๋ฉด 2๋‹จ ๋ถˆ๋ฆฟ์œผ๋กœ ๋‚ด๋ฆฐ๋‹ค.
233
+ - ๋ถˆ๋ฆฟ์„ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์“ฐ๋ฉด ๊ทธ ๋ฌธ์žฅ์ด ๊ธฐ๋Œ„ ๋ฌธ์žฅ ๋ฒ”์œ„๋กœ `cite`๋ฅผ ๋‹จ๋‹ค. ๋ฒ”์œ„๋Š” ์Šคํฌ๋ฆฝํŠธ ๋ฌธ์žฅ์„ ๋‹ค์‹œ ์ฝ์–ด ํ™•์ธํ•œ๋‹ค. ๋ณดํ†ต ๋ฆฌํฌํŠธ์˜ ์ถœ์ฒ˜๋ฅผ ์ง์ž‘์œผ๋กœ ์˜ฎ๊ฒจ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค.
234
+ - ํ‚ค์›Œ๋“œ๋Š” `id`์™€ `term`, `firstCite`๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  `explanation`๋งŒ ํ’€์–ด ์“ด๋‹ค. ๋ณธ๋ฌธ์˜ `{{kw:}}` id๋„ ๋ณดํ†ต ๋ฆฌํฌํŠธ์™€ ๊ฐ™๊ฒŒ ๋‘”๋‹ค.
235
+ - ๋„์‹์€ ์œ„ ํ‘œ์˜ `difficulty: easy` ๊ฐœ์ˆ˜๋ฅผ ๋”ฐ๋ฅธ๋‹ค. ๋ณดํ†ต ๋ฆฌํฌํŠธ์˜ ๋„์‹์€ ๋ผ๋ฒจ๋งŒ ์‰ฌ์šด ๋ง๋กœ ๋ฐ”๊ฟ” ์˜ฎ๊ธฐ๊ณ  ๋„์‹์ด ์—†๋Š” ๋Œ€์„น์…˜์— ๋‹จ๊ณ„๋‚˜ ๊ฒฌ์ฃผ๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด ๋”ํ•œ๋‹ค.
236
+ - ๋ณดํ†ต ๋ฆฌํฌํŠธ์— ์—†๋Š” ๋‚ด์šฉ์„ ๋”ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š” ๋‚ด์šฉ์„ ๋นผ์ง€๋„ ์•Š๋Š”๋‹ค.
237
+
238
+ ๊ธด ์˜์ƒ์ด๋ฉด ์Šคํ‚ฌ์ด ์‰ฌ์šด ๋ฆฌํฌํŠธ๋ฅผ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ  ๋งก๊ธด๋‹ค. ๋ณดํ†ต ๋ฆฌํฌํŠธ๊ฐ€ ๋ผˆ๋Œ€ ๊ตฌ์‹ค์„ ํ•˜๋‹ˆ ๋ผˆ๋Œ€ ์กฐ๊ฐ์€ ์—†๋‹ค.
239
+
240
+ | ์กฐ๊ฐ | ํŒŒ์ผ | ๋ชจ์–‘ |
241
+ | ----------- | ----------------------------------- | ---------------------------------------------------------------------------- |
242
+ | ๋Œ€์„น์…˜ ์กฐ๊ฐ | `digest.easy.part-<๋Œ€์„น์…˜ id>.json` | `{ "section": { ๋Œ€์„น์…˜ ํ•˜๋‚˜ ์ „์ฒด } }`. ์Šคํ‚ฌ์ด ๊ณ ๋ฅธ ๋Œ€์„น์…˜ ํ•˜๋‚˜๋งŒ ํ’€์–ด ์“ด๋‹ค |
243
+ | ๋„์ž… ์กฐ๊ฐ | `digest.easy.lead.json` | `{ "lead": { "question", "answer", "takeaway" }, "keywords": [...] }` |
244
+
245
+ - ๋Œ€์„น์…˜ ์กฐ๊ฐ์€ ๋ณดํ†ต ๋ฆฌํฌํŠธ์˜ ๊ทธ ๋Œ€์„น์…˜๋งŒ ์ฝ๊ณ  ๊ทธ ๋ฒ”์œ„์˜ ๋ฌธ์žฅ๋งŒ ๋‹ค์‹œ ํ™•์ธํ•œ๋‹ค.
246
+ - ๋„์ž… ์กฐ๊ฐ์˜ `keywords`์—๋Š” ๋ณดํ†ต ๋ฆฌํฌํŠธ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ๋น ์ง์—†์ด ์˜ฎ๊ธฐ๊ณ  `explanation`๋งŒ ํ’€์–ด ์“ด๋‹ค. ๋Œ€์„น์…˜ ์กฐ๊ฐ์€ ํ‚ค์›Œ๋“œ๋ฅผ ๋”ฐ๋กœ ๋‚ด์ง€ ์•Š๋Š”๋‹ค.
189
247
 
190
248
  ## ๋ฌธ์ฒด ๊ทœ์น™
191
249
 
@@ -201,7 +259,7 @@ You are the Video Summarizer role agent.
201
259
 
202
260
  ## ๋๋‚ด๊ธฐ ์ „
203
261
 
204
- ๋ฆฌํฌํŠธ๋ฅผ ์“ด ๋’ค ์Šคํ‚ฌ์ด `gestalt digest merge`๋กœ ํ•ฉ์น˜๋ฉฐ ๊ฒ€์‚ฌํ•œ๋‹ค. ์˜ค๋ฅ˜ ๋ชฉ๋ก์„ ๋Œ๋ ค๋ฐ›์œผ๋ฉด `path`๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ž๋ฆฌ๋งŒ ๊ณ ์ณ ๋‹ค์‹œ ์“ด๋‹ค. path ์•ž์˜ `reports.<n>.`์€ ํ•ฉ์นœ ๋’ค์˜ ์ž๋ฆฌ๋ผ ๋ฆฌํฌํŠธ ํŒŒ์ผ์—์„œ๋Š” ๊ทธ ๋’ค๋ถ€ํ„ฐ ์ฐพ๋Š”๋‹ค. ํ™•์žฅ ๋ฆฌํฌํŠธ๋Š” `extensions.<n>.`์„ ๋–ผ๊ณ  ์ฐพ๋Š”๋‹ค. ๊ฒฝ๊ณ (์†Œ์„น์…˜ ๊ฐœ์ˆ˜, ๋ถˆ๋ฆฟ ๊ฐœ์ˆ˜)๋Š” ์˜์ƒ์— ๋งž์œผ๋ฉด ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค.
262
+ ๋ฆฌํฌํŠธ๋ฅผ ์“ด ๋’ค ์Šคํ‚ฌ์ด `gestalt digest merge`๋กœ ํ•ฉ์น˜๋ฉฐ ๊ฒ€์‚ฌํ•œ๋‹ค. ์˜ค๋ฅ˜ ๋ชฉ๋ก์„ ๋Œ๋ ค๋ฐ›์œผ๋ฉด `path`๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ž๋ฆฌ๋งŒ ๊ณ ์ณ ๋‹ค์‹œ ์“ด๋‹ค. path ์•ž์˜ `reports.<n>.`์€ ํ•ฉ์นœ ๋’ค์˜ ์ž๋ฆฌ๋ผ ๋ฆฌํฌํŠธ ํŒŒ์ผ์—์„œ๋Š” ๊ทธ ๋’ค๋ถ€ํ„ฐ ์ฐพ๋Š”๋‹ค. ํ™•์žฅ ๋ฆฌํฌํŠธ๋Š” `extensions.<n>.`์„ ๋–ผ๊ณ  ์ฐพ๋Š”๋‹ค. ๊ฒฝ๊ณ (์†Œ์„น์…˜ ๊ฐœ์ˆ˜, ๋ถˆ๋ฆฟ ๊ฐœ์ˆ˜)๋Š” ์˜์ƒ์— ๋งž์œผ๋ฉด ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค. `DIAGRAM_TOO_FEW`๋ฅผ ๋ฐ›์œผ๋ฉด ๋‹จ๊ณ„๋‚˜ ๊ฒฌ์ฃผ๊ธฐ, ์‹œ๊ฐ„ ํ๋ฆ„, ์›์ธ๊ณผ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ๋Š” ๋Œ€์„น์…˜์— ๋„์‹์„ ๋”ํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๊ตฌ์กฐ๊ฐ€ ์—†๋Š” ๋Œ€์„น์…˜์€ ์–ต์ง€๋กœ ๊ทธ๋ฆฌ์ง€ ์•Š๊ณ  ๋น„์›Œ ๋‘”๋‹ค.
205
263
 
206
264
  ## Output Format
207
265
 
@@ -213,6 +271,8 @@ report: <๊ฒฝ๋กœ>
213
271
  skipped: <๊ตฌ๊ฐ„๊ณผ ์ด์œ , ์—†์œผ๋ฉด ์—†์Œ>
214
272
  ```
215
273
 
274
+ `DIAGRAM_TOO_FEW`๋ฅผ ๋ฐ›์•„ ๋‹ค์‹œ ์ผ์œผ๋ฉด ๋„ท์งธ ์ค„์— `diagrams: ๋”ํ•จ <N>๊ฐœ` ๋˜๋Š” `diagrams: ๊ตฌ์กฐ ์—†์Œ โ€” <์ด์œ >`๋ฅผ ์ ๋Š”๋‹ค.
275
+
216
276
  ์กฐ๊ฐ์„ ์ผ์œผ๋ฉด ์ฒซ ์ค„์— ๋ฆฌํฌํŠธ ๋Œ€์‹  ์“ด ์กฐ๊ฐ ๊ฒฝ๋กœ๋ฅผ ์ ๊ณ  ๊ฐœ์ˆ˜๋Š” ๊ทธ ์กฐ๊ฐ์— ๋“  ๊ฒƒ๋งŒ ์„ผ๋‹ค.
217
277
 
218
278
  ํ™•์žฅ ๋ฆฌํฌํŠธ๋ฅผ ์ผ์œผ๋ฉด ์•„๋ž˜ ๋‘ ์ค„์„ ๋Œ๋ ค์ค€๋‹ค.
@@ -96,7 +96,7 @@
96
96
  | "์ถœํ•˜", "ship", "PR ์˜ฌ๋ฆด ๋•Œ๊นŒ์ง€", "๋ฆฌ๋ทฐ ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€", "์ฝ”ํŒŒ์ผ๋Ÿฟ ๋ฆฌ๋ทฐ๊นŒ์ง€", "copilot ๋ฆฌ๋ทฐ ๋ฐ›์•„์ค˜", "draft PR ์˜ฌ๋ฆฌ๊ณ  ๋ฆฌ๋ทฐ" | `ship` ์Šคํ‚ฌ ์‚ฌ์šฉ | ๋กœ์ปฌ PR โ†’ ๋ฆฌ๋ทฐ ์ˆ˜๋ ด ๋ฃจํ”„ โ†’ ์Šน์ธ โ†’ draft PR โ†’ Copilot ์ˆ˜๋ ด ๋ฃจํ”„ โ†’ ready. ๋ฆฌ๋ทฐ ํ•œ ๋ฒˆ๋งŒ์ด๋ฉด `review` |
97
97
  | "์Šฌ๋ž™ ๋ณด๋‚ด", "์Šฌ๋ž™์œผ๋กœ ๋ณด๋‚ด", "๋ฉ”์‹œ์ง€ ๋ณด๋‚ด", "๋ฉ”์„ธ์ง€ ๋ณด๋‚ด", "์ „๋‹ฌํ•ด์ค˜", "๊ณต์ง€ํ•ด์ค˜", "๊ณต์ง€ ์˜ฌ๋ ค์ค˜", "์Šฌ๋ž™์— ์˜ฌ๋ ค์ค˜", "์Šฌ๋ž™ ๋ฉ”์‹œ์ง€ ์ „์†ก", "์˜ˆ์•ฝ ๋ฐœ์†ก", "์˜ˆ์•ฝ๋ฉ”์„ธ์ง€", "์˜ˆ์•ฝ ๋ฉ”์‹œ์ง€", "์ด๋”ฐ ๋ณด๋‚ด", "๋‚ด์ผ ์•„์นจ์— ๋ณด๋‚ด", "9์‹œ์— ๋ณด๋‚ด" | `slack-send` ์Šคํ‚ฌ ์‚ฌ์šฉ | ๋‚ด๋ถ€์ ์œผ๋กœ slack-messenger ๋‹ค๋“ฌ๊ธฐ โ†’ ์Šน์ธ ๋‹จ๊ณ„ โ†’ ์ „์†ก |
98
98
  | "์ด ํ™”๋ฉด๋“ค UX ๋ถ„์„ํ•ด์ค˜", "UX ๋ถ„์„๋งŒ ํ•ด์ค˜", "ํ™”๋ฉด์˜ ์™€์šฐ ํฌ์ธํŠธ์™€ ํŽ˜์ธ ํฌ์ธํŠธ๋งŒ ์ •๋ฆฌํ•ด์ค˜", "์‚ฌ์šฉ์ž ๊ด€์ ์œผ๋กœ ํ™”๋ฉด ๋ถ„์„ํ•ด์ค˜" | `ux-research` ์Šคํ‚ฌ ์‚ฌ์šฉ | ์บก์ฒ˜๊ฐ€ ์žˆ๋Š” research.json์—์„œ ์„น์…˜ 4๋งŒ ์ฑ„์šด๋‹ค. ํ™”๋ฉด ์ˆ˜์ง‘์ด๋ฉด `screen-ref`, ๋ณธ์—…์—์„œ ์ถœ๋ฐœํ•œ ์ด์œ  ๋ถ„์„์ด๋ฉด `reverse-plan`, ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋Œ๋ฆฌ๋ฉด `research` |
99
- | "์ด ์˜์ƒ ์š”์•ฝํ•ด์ค˜", "์œ ํŠœ๋ธŒ ์˜์ƒ ์š”์•ฝํ•ด์ค˜", "์œ ํŠœ๋ธŒ ์˜์ƒ ์ •๋ฆฌํ•ด์ค˜", "์˜์ƒ ์š”์•ฝ ๋ทฐ์–ด ๋งŒ๋“ค์–ด์ค˜", "์ด ๊ฐ•์˜ ์˜์ƒ ๋‚ด์šฉ ์ •๋ฆฌํ•ด์ค˜", "์ด ์˜์ƒ์œผ๋กœ ํ€ด์ฆˆ ๋งŒ๋“ค์–ด์ค˜", "์˜์ƒ ํšŒ์˜๋ก ์ •๋ฆฌํ•ด์ค˜" | `video-digest` ์Šคํ‚ฌ ์‚ฌ์šฉ | ingest โ†’ video-summarizer๊ฐ€ ๋ฆฌํฌํŠธ ํ•œ ๋ฒŒ ์ž‘์„ฑ โ†’ merge๋กœ digest.json์— ํ•ฉ์น˜๊ธฐ โ†’ frames โ†’ ์œค๋ฌธ โ†’ render โ†’ serve ๋˜๋Š” export --md. ์ด๋ฏธ ์š”์•ฝํ•œ ์˜์ƒ์— ๋ถ„๋Ÿ‰์ด๋‚˜ ๋‚œ์ด๋„๊ฐ€ ๋‹ค๋ฅธ ๋ฆฌํฌํŠธ๋ฅผ ๋”ํ•  ๋•Œ๋Š” ingest๋ฅผ ๊ฑด๋„ˆ๋›ด๋‹ค. templates๋ฅผ ๋ฐ›์œผ๋ฉด merge ๋’ค์— ํ…œํ”Œ๋ฆฟ๋งˆ๋‹ค ํ™•์žฅ ๋ฆฌํฌํŠธ๋ฅผ ์จ์„œ merge --extension์œผ๋กœ ํ•ฉ์นœ๋‹ค. ํ™•์žฅ๋งŒ ๋”ํ•  ๋•Œ๋Š” ์ˆ˜์ง‘๊ณผ ์š”์•ฝ์„ ๊ฑด๋„ˆ๋›ด๋‹ค. ์ด๋ฏธ ์žˆ๋Š” slug๋ฅผ ๋‹ค์‹œ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•˜๋ ค๋ฉด serve๋งŒ ๋ถ€๋ฅธ๋‹ค. ๊ฒฝ์Ÿ์‚ฌ ์กฐ์‚ฌ ์•ˆ์—์„œ ์˜์ƒ์„ ๋‹ค๋ฃจ๋ฉด `research`, ์˜์ƒ ํ™”๋ฉด๋งŒ ๋ชจ์œผ๋ ค๋ฉด `screen-ref` |
99
+ | "์ด ์˜์ƒ ์š”์•ฝํ•ด์ค˜", "์œ ํŠœ๋ธŒ ์˜์ƒ ์š”์•ฝํ•ด์ค˜", "์œ ํŠœ๋ธŒ ์˜์ƒ ์ •๋ฆฌํ•ด์ค˜", "์˜์ƒ ์š”์•ฝ ๋ทฐ์–ด ๋งŒ๋“ค์–ด์ค˜", "์ด ๊ฐ•์˜ ์˜์ƒ ๋‚ด์šฉ ์ •๋ฆฌํ•ด์ค˜", "์ด ์˜์ƒ์œผ๋กœ ํ€ด์ฆˆ ๋งŒ๋“ค์–ด์ค˜", "์˜์ƒ ํšŒ์˜๋ก ์ •๋ฆฌํ•ด์ค˜" | `video-digest` ์Šคํ‚ฌ ์‚ฌ์šฉ | ingest โ†’ video-summarizer๊ฐ€ ๋ณดํ†ต ๋ฆฌํฌํŠธ์™€ ๊ทธ๊ฑธ ํ’€์–ด ์“ด ์‰ฌ์šด ๋ฆฌํฌํŠธ ์ž‘์„ฑ โ†’ merge๋กœ digest.json์— ํ•ฉ์น˜๊ธฐ โ†’ frames โ†’ ์œค๋ฌธ โ†’ render โ†’ serve ๋˜๋Š” export --md. ์ด๋ฏธ ์š”์•ฝํ•œ ์˜์ƒ์— ๋‚œ์ด๋„๋‚˜ ๊ตฌ๊ฐ„, ์š”์ฒญ์ด ๋‹ค๋ฅธ ๋ฆฌํฌํŠธ๋ฅผ ๋”ํ•  ๋•Œ๋Š” ingest๋ฅผ ๊ฑด๋„ˆ๋›ด๋‹ค. templates๋ฅผ ๋ฐ›์œผ๋ฉด merge ๋’ค์— ํ…œํ”Œ๋ฆฟ๋งˆ๋‹ค ํ™•์žฅ ๋ฆฌํฌํŠธ๋ฅผ ์จ์„œ merge --extension์œผ๋กœ ํ•ฉ์นœ๋‹ค. ํ™•์žฅ๋งŒ ๋”ํ•  ๋•Œ๋Š” ์ˆ˜์ง‘๊ณผ ์š”์•ฝ์„ ๊ฑด๋„ˆ๋›ด๋‹ค. ์ด๋ฏธ ์žˆ๋Š” slug๋ฅผ ๋‹ค์‹œ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•˜๋ ค๋ฉด serve๋งŒ ๋ถ€๋ฅธ๋‹ค. ๊ฒฝ์Ÿ์‚ฌ ์กฐ์‚ฌ ์•ˆ์—์„œ ์˜์ƒ์„ ๋‹ค๋ฃจ๋ฉด `research`, ์˜์ƒ ํ™”๋ฉด๋งŒ ๋ชจ์œผ๋ ค๋ฉด `screen-ref` |
100
100
 
101
101
  <!-- skill-routing:end -->
102
102
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: video-digest
3
- version: '1.2.0'
3
+ version: '1.3.1'
4
4
  description: '์œ ํŠœ๋ธŒ ์ฃผ์†Œ๋‚˜ ์˜์ƒ ํŒŒ์ผ์„ ๋ฐ›์•„ ๋ฌธ์žฅ๋งˆ๋‹ค ์ถœ์ฒ˜๊ฐ€ ๋‹ฌ๋ฆฐ ์š”์•ฝ ๋ทฐ์–ด๋ฅผ ๋งŒ๋“ ๋‹ค. ๋ชฉ์ฐจ์™€ ํ”Œ๋ ˆ์ด์–ด, ์Šคํฌ๋ฆฝํŠธ ๋”ฐ๋ผ๊ฐ€๊ธฐ๊ฐ€ ๋ถ™์€ HTML๊ณผ ๋งˆํฌ๋‹ค์šด๊นŒ์ง€ ๋‚ธ๋‹ค("์ด ์˜์ƒ ์š”์•ฝํ•ด์ค˜", "์œ ํŠœ๋ธŒ ์˜์ƒ ์ •๋ฆฌํ•ด์ค˜"). ํšŒ์˜๋ก์ด๋‚˜ ํ€ด์ฆˆ, ๋งˆ์ธ๋“œ๋งต, ๋Œ“๊ธ€ ๋ถ„์„ ๊ฐ™์€ ํ™•์žฅ ๋ฆฌํฌํŠธ๋„ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋ถ™์ธ๋‹ค. ๊ฒฝ์Ÿ ์„œ๋น„์Šค ์กฐ์‚ฌ ์ค‘์— ์˜์ƒ์„ ๋ถ„์„ํ•˜๋Š” ์ผ์ด๋ฉด research๋ฅผ ์“ด๋‹ค.'
5
5
  triggers:
6
6
  - '์ด ์˜์ƒ ์š”์•ฝํ•ด์ค˜'
@@ -11,7 +11,7 @@ triggers:
11
11
  - '์ด ์˜์ƒ์œผ๋กœ ํ€ด์ฆˆ ๋งŒ๋“ค์–ด์ค˜'
12
12
  - '์˜์ƒ ํšŒ์˜๋ก ์ •๋ฆฌํ•ด์ค˜'
13
13
  routing:
14
- note: 'ingest โ†’ video-summarizer๊ฐ€ ๋ฆฌํฌํŠธ ํ•œ ๋ฒŒ ์ž‘์„ฑ โ†’ merge๋กœ digest.json์— ํ•ฉ์น˜๊ธฐ โ†’ frames โ†’ ์œค๋ฌธ โ†’ render โ†’ serve ๋˜๋Š” export --md. ์ด๋ฏธ ์š”์•ฝํ•œ ์˜์ƒ์— ๋ถ„๋Ÿ‰์ด๋‚˜ ๋‚œ์ด๋„๊ฐ€ ๋‹ค๋ฅธ ๋ฆฌํฌํŠธ๋ฅผ ๋”ํ•  ๋•Œ๋Š” ingest๋ฅผ ๊ฑด๋„ˆ๋›ด๋‹ค. templates๋ฅผ ๋ฐ›์œผ๋ฉด merge ๋’ค์— ํ…œํ”Œ๋ฆฟ๋งˆ๋‹ค ํ™•์žฅ ๋ฆฌํฌํŠธ๋ฅผ ์จ์„œ merge --extension์œผ๋กœ ํ•ฉ์นœ๋‹ค. ํ™•์žฅ๋งŒ ๋”ํ•  ๋•Œ๋Š” ์ˆ˜์ง‘๊ณผ ์š”์•ฝ์„ ๊ฑด๋„ˆ๋›ด๋‹ค. ์ด๋ฏธ ์žˆ๋Š” slug๋ฅผ ๋‹ค์‹œ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•˜๋ ค๋ฉด serve๋งŒ ๋ถ€๋ฅธ๋‹ค. ๊ฒฝ์Ÿ์‚ฌ ์กฐ์‚ฌ ์•ˆ์—์„œ ์˜์ƒ์„ ๋‹ค๋ฃจ๋ฉด `research`, ์˜์ƒ ํ™”๋ฉด๋งŒ ๋ชจ์œผ๋ ค๋ฉด `screen-ref`'
14
+ note: 'ingest โ†’ video-summarizer๊ฐ€ ๋ณดํ†ต ๋ฆฌํฌํŠธ์™€ ๊ทธ๊ฑธ ํ’€์–ด ์“ด ์‰ฌ์šด ๋ฆฌํฌํŠธ ์ž‘์„ฑ โ†’ merge๋กœ digest.json์— ํ•ฉ์น˜๊ธฐ โ†’ frames โ†’ ์œค๋ฌธ โ†’ render โ†’ serve ๋˜๋Š” export --md. ์ด๋ฏธ ์š”์•ฝํ•œ ์˜์ƒ์— ๋‚œ์ด๋„๋‚˜ ๊ตฌ๊ฐ„, ์š”์ฒญ์ด ๋‹ค๋ฅธ ๋ฆฌํฌํŠธ๋ฅผ ๋”ํ•  ๋•Œ๋Š” ingest๋ฅผ ๊ฑด๋„ˆ๋›ด๋‹ค. templates๋ฅผ ๋ฐ›์œผ๋ฉด merge ๋’ค์— ํ…œํ”Œ๋ฆฟ๋งˆ๋‹ค ํ™•์žฅ ๋ฆฌํฌํŠธ๋ฅผ ์จ์„œ merge --extension์œผ๋กœ ํ•ฉ์นœ๋‹ค. ํ™•์žฅ๋งŒ ๋”ํ•  ๋•Œ๋Š” ์ˆ˜์ง‘๊ณผ ์š”์•ฝ์„ ๊ฑด๋„ˆ๋›ด๋‹ค. ์ด๋ฏธ ์žˆ๋Š” slug๋ฅผ ๋‹ค์‹œ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•˜๋ ค๋ฉด serve๋งŒ ๋ถ€๋ฅธ๋‹ค. ๊ฒฝ์Ÿ์‚ฌ ์กฐ์‚ฌ ์•ˆ์—์„œ ์˜์ƒ์„ ๋‹ค๋ฃจ๋ฉด `research`, ์˜์ƒ ํ™”๋ฉด๋งŒ ๋ชจ์œผ๋ ค๋ฉด `screen-ref`'
15
15
  inputs:
16
16
  source:
17
17
  type: string
@@ -29,14 +29,10 @@ inputs:
29
29
  type: string
30
30
  required: false
31
31
  description: "'viewer'(๊ธฐ๋ณธ, ๋กœ์ปฌ ์„œ๋ฒ„๋กœ ๋„์šด๋‹ค) ๋˜๋Š” 'md'(๋งˆํฌ๋‹ค์šด๋งŒ ๋‚ธ๋‹ค)"
32
- length:
33
- type: string
34
- required: false
35
- description: "๋ฆฌํฌํŠธ ๋ถ„๋Ÿ‰. 'short', 'default'(๊ธฐ๋ณธ), 'long'"
36
32
  difficulty:
37
33
  type: string
38
34
  required: false
39
- description: "๋ฆฌํฌํŠธ ๋‚œ์ด๋„. 'normal'(๊ธฐ๋ณธ), 'easy'"
35
+ description: "๋‹ค์‹œ ๋งŒ๋“ค ๋‚œ์ด๋„. 'normal', 'easy'. ๋ณดํ†ต๊ณผ ์‰ฌ์šด ๋ฆฌํฌํŠธ๋Š” ๋Š˜ ํ•จ๊ป˜ ๋งŒ๋“ค๊ณ  ๋น„์šฐ๋ฉด ์—†๋Š” ๋‚œ์ด๋„๋งŒ ๋งŒ๋“ ๋‹ค. ๊ฐ’์„ ์ฃผ๋ฉด ๊ทธ ๋‚œ์ด๋„๋Š” ์ด๋ฏธ ์žˆ์–ด๋„ ๋‹ค์‹œ ๋งŒ๋“ ๋‹ค"
40
36
  range:
41
37
  type: string
42
38
  required: false
@@ -73,8 +69,8 @@ outputs:
73
69
  ์˜์ƒ ํ•˜๋‚˜๋ฅผ ๋ฌธ์žฅ ๋‹จ์œ„ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฐ›์•„ ์ถœ์ฒ˜๊ฐ€ ๋‹ฌ๋ฆฐ ๊ณ„์ธต ์š”์•ฝ์„ ์“ฐ๊ณ  ๋ทฐ์–ด๋กœ ๋„์šด๋‹ค. ์ผ์€ ์ˆ˜์ง‘, ์š”์•ฝ, ํ‘œํ˜„ ์ˆœ์„œ๋กœ ๋‚˜๋‰œ๋‹ค. ๊ทธ์ค‘ ์š”์•ฝ ์ธต๊ณผ ํ‘œํ˜„ ์ธต์„ ๊ฐˆ๋ผ ๋‘์–ด์„œ ์š”์•ฝ์„ ๋‹ค์‹œ ์“ฐ์ง€ ์•Š๊ณ  ๋ทฐ์–ด๋งŒ ๋‹ค์‹œ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋‹ค.
74
70
 
75
71
  - **์ˆ˜์ง‘**: `gestalt digest ingest`๊ฐ€ ์ž๋ง‰์„ ๋ฐ›์•„ ๋ฌธ์žฅ์œผ๋กœ ํ•ฉ์นœ๋‹ค. ํ”„๋ ˆ์ž„์€ ์š”์•ฝ์ด ๋๋‚œ ๋’ค `gestalt digest frames`๊ฐ€ ๋ฝ‘๋Š”๋‹ค.
76
- - **์š”์•ฝ**: `video-summarizer`๊ฐ€ `transcript.json`์„ ์ฝ๊ณ  ๋ฆฌํฌํŠธ ํ•œ ๋ฒŒ์„ ํŒŒ์ผ๋กœ ์“ด๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋งŒ LLM์ด ๋ˆ๋‹ค. `gestalt digest merge`๊ฐ€ ๊ทธ ๋ฆฌํฌํŠธ๋ฅผ `digest.json`์˜ `reports[]`์— ํ•ฉ์นœ๋‹ค. ๊ฐ™์€ ๋ถ„๋Ÿ‰๊ณผ ๋‚œ์ด๋„์˜ ๋ฆฌํฌํŠธ๊ฐ€ ์ด๋ฏธ ์žˆ์œผ๋ฉด ๋ฐ”๊ฟ” ๋ผ์šด๋‹ค.
77
- - **ํ‘œํ˜„**: `ges_digest render`๊ฐ€ `digest.json`์—์„œ HTML๊ณผ ๋งˆํฌ๋‹ค์šด์„ ์ฝ”๋“œ๋กœ ๋งŒ๋“ ๋‹ค. LLM์„ ๋ถ€๋ฅด์ง€ ์•Š๋Š”๋‹ค. ๋ทฐ์–ด ํˆด๋ฐ”๊ฐ€ ๋ฆฌํฌํŠธ ์‚ฌ์ด๋ฅผ ์˜ค๊ฐ„๋‹ค.
72
+ - **์š”์•ฝ**: `video-summarizer`๊ฐ€ `transcript.json`์„ ์ฝ๊ณ  ๋ณดํ†ต ๋ฆฌํฌํŠธ๋ฅผ ํŒŒ์ผ๋กœ ์“ด๋‹ค. ์ด์–ด์„œ ๊ทธ ๋ฆฌํฌํŠธ๋ฅผ ํ’€์–ด ์“ด ์‰ฌ์šด ๋ฆฌํฌํŠธ๋ฅผ ํ•œ ๋ฒŒ ๋” ์“ด๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋งŒ LLM์ด ๋ˆ๋‹ค. `gestalt digest merge`๊ฐ€ ๊ทธ ๋ฆฌํฌํŠธ๋ฅผ `digest.json`์˜ `reports[]`์— ํ•ฉ์นœ๋‹ค. ์˜ต์…˜์ด ๊ฐ™์€ ๋ฆฌํฌํŠธ๊ฐ€ ์ด๋ฏธ ์žˆ์œผ๋ฉด ๋ฐ”๊ฟ” ๋ผ์šด๋‹ค. ์ƒˆ๋กœ ์“ฐ๋Š” ๋ฆฌํฌํŠธ์˜ ๋ถ„๋Ÿ‰์€ ๋Š˜ `long`์ด๋‹ค.
73
+ - **ํ‘œํ˜„**: `ges_digest render`๊ฐ€ `digest.json`์—์„œ HTML๊ณผ ๋งˆํฌ๋‹ค์šด์„ ์ฝ”๋“œ๋กœ ๋งŒ๋“ ๋‹ค. LLM์„ ๋ถ€๋ฅด์ง€ ์•Š๋Š”๋‹ค. ๋ทฐ์–ด ํˆด๋ฐ”๊ฐ€ ๋ฆฌํฌํŠธ ์‚ฌ์ด๋ฅผ ์˜ค๊ฐ„๋‹ค. ์ฒ˜์Œ ์—ด๋ฉด ๋ณดํ†ต ๋ฆฌํฌํŠธ๊ฐ€ ๋ณด์ด๊ณ  ์‰ฝ๊ฒŒ ๋ณด๊ธฐ ํ† ๊ธ€์ด ์‰ฌ์šด ๋ฆฌํฌํŠธ์™€ ์˜ค๊ฐ„๋‹ค. ์˜› digest์— ๋‚จ์€ ์งง๊ฒŒ์™€ ๊ธฐ๋ณธ ๋ฆฌํฌํŠธ๋Š” ๋‹ค๋ฅธ ๋ฆฌํฌํŠธ ๋ชฉ๋ก์—์„œ ๊ณ ๋ฅธ๋‹ค.
78
74
 
79
75
  ์š”์•ฝ ๋ณธ๋ฌธ์˜ ๋ชจ๋“  ๋ถˆ๋ฆฟ์—๋Š” ๋ฌธ์žฅ ๋ฒˆํ˜ธ ์ถœ์ฒ˜๊ฐ€ ๋ถ™๋Š”๋‹ค. ์ถœ์ฒ˜๊ฐ€ ์—‰๋šฑํ•œ ๋ฌธ์žฅ์„ ๊ฐ€๋ฆฌํ‚ค๋ฉด ๋ทฐ์–ด์˜ `[n]`์ด ๋‹ค๋ฅธ ์žฅ๋ฉด์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ lint ์˜ค๋ฅ˜๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ๋‚จ์œผ๋ฉด ๋ Œ๋”๊ฐ€ ๋ง‰ํžŒ๋‹ค.
80
76
 
@@ -89,24 +85,25 @@ outputs:
89
85
 
90
86
  ## ์“ฐ๋Š” ๋„๊ตฌ
91
87
 
92
- | ๋„๊ตฌ | ์“ฐ๋Š” ๋•Œ |
93
- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- |
94
- | `gestalt digest ingest <url\|ํŒŒ์ผ>` | ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์ž๋ง‰์„ ๋ฐ›์•„ `transcript.json` ๋งŒ๋“ค๊ธฐ. ์ž๋ง‰์ด ์—†์œผ๋ฉด faster-whisper |
95
- | `gestalt digest merge <slug> <ํŒŒ์ผ>` | ๋ฆฌํฌํŠธ ํ•œ ๋ฒŒ์„ `digest.json`์— ํ•ฉ์น˜๋ฉฐ ์Šคํ‚ค๋งˆ์™€ lint ๊ฒ€์‚ฌ. ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค |
96
- | `gestalt digest slice <slug> --range <๊ตฌ๊ฐ„>` | ๊ตฌ๊ฐ„ ๋ฆฌํฌํŠธ์šฉ์œผ๋กœ ๊ทธ ๊ตฌ๊ฐ„ ๋ฌธ์žฅ๋งŒ ์ž˜๋ผ ์ €์žฅ. ๋ฌธ์žฅ ๋ฒˆํ˜ธ๋Š” ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค |
97
- | `ges_digest action=validate` | `digest.json`์˜ ์Šคํ‚ค๋งˆ์™€ lint ๊ฒ€์‚ฌ. ๋ฆฌํฌํŠธ ํ‚ค ๋ชฉ๋ก๋„ ์ค€๋‹ค |
98
- | `gestalt digest translate-apply <slug> <ํŒŒ์ผ>` | ์Šคํฌ๋ฆฝํŠธ ๋ฒˆ์—ญ์„ ๋ฌธ์žฅ ๋ฒˆํ˜ธ๋กœ ๋ถ™์ด๊ธฐ. ์–ธ์–ด๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์ด์ „ ๋ฒˆ์—ญ์„ ์ง€์šด๋‹ค |
99
- | `gestalt digest ocr <slug>` | ์ผ์ • ๊ฐ„๊ฒฉ์œผ๋กœ ํ”„๋ ˆ์ž„์„ ๋ฝ‘์•„ ํ™”๋ฉด ๊ธ€์ž๋ฅผ ์ฝ๊ณ  `ocr.json`์— ์“ฐ๊ธฐ. tesseract๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค |
100
- | `gestalt digest frames <slug>` | ์†Œ์„น์…˜ `frameSec`๋งˆ๋‹ค ํ”„๋ ˆ์ž„ ํ•œ ์žฅ ๋ฝ‘๊ธฐ |
101
- | `gestalt digest templates` | ํ™•์žฅ ๋ฆฌํฌํŠธ ํ…œํ”Œ๋ฆฟ ๋ชฉ๋ก. ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ๊ณผ `.gestalt/digest/templates/`์˜ ์‚ฌ์šฉ์ž ํ…œํ”Œ๋ฆฟ์„ ํ•จ๊ป˜ ์ค€๋‹ค |
102
- | `gestalt digest template <id>` | ํ…œํ”Œ๋ฆฟ์˜ ์š”์•ฝ ์ง€์‹œ ๋ณธ๋ฌธ ์ถœ๋ ฅ. `video-summarizer`์— ๊ทธ๋Œ€๋กœ ๋„˜๊ธด๋‹ค |
103
- | `gestalt digest comments <slug>` | ์œ ํŠœ๋ธŒ ๋Œ“๊ธ€์„ ์ธ๊ธฐ์ˆœ์œผ๋กœ ๋ฐ›์•„ `comments.json`์— ์“ฐ๊ธฐ. ์ž‘์„ฑ์ž ์ •๋ณด๋Š” ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค |
104
- | `gestalt digest merge <slug> <ํŒŒ์ผ> --extension` | ํ™•์žฅ ๋ฆฌํฌํŠธ ํ•œ ๋ฒŒ์„ `digest.json`์˜ `extensions[]`์— ํ•ฉ์น˜๋ฉฐ ๊ฒ€์‚ฌ. ํ…œํ”Œ๋ฆฟ๊ณผ ์–ธ์–ด๊ฐ€ ๊ฐ™์œผ๋ฉด ๋ฐ”๊ฟ” ๋ผ์šด๋‹ค |
105
- | `ges_digest action=prose_extract` | ์œค๋ฌธํ•  ๋ฌธ์žฅ๋งŒ path์™€ hash๋กœ ๋ฝ‘๊ธฐ. ์ œ๋ชฉ์€ ๋น ์ง„๋‹ค |
106
- | `ges_digest action=prose_apply` | ๋‹ค๋“ฌ์€ ๋ฌธ์žฅ์„ ๊ฐ™์€ path๋กœ ๋˜๋Œ๋ ค ๋„ฃ๊ณ  `**`, `{{kw:}}`, ์ˆซ์ž, ๋งํฌ๊ฐ€ ๋‚จ์•˜๋Š”์ง€ ๊ฒ€์‚ฌ |
107
- | `ges_digest action=render` | `digest.html`๊ณผ `digest.md` ์“ฐ๊ธฐ |
108
- | `gestalt digest serve <slug>` | ๋ Œ๋”๋ฅผ ์ธ๋ผ์ธ ์—†์ด ๋‹ค์‹œ ๋Œ๋ฆฌ๊ณ  ๋ทฐ์–ด๋ฅผ 127.0.0.1๋กœ ๋„์šฐ๊ธฐ. ๋๋‚˜์ง€ ์•Š๋Š” ๋ช…๋ น์ด๋ผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋„์šด๋‹ค. ์œ ํŠœ๋ธŒ ์žฌ์ƒ์€ ์—ฌ๊ธฐ์„œ๋งŒ ๋œ๋‹ค |
109
- | `gestalt digest export <slug> --md` | ๋งˆํฌ๋‹ค์šด๋งŒ ๋‚ด๊ธฐ |
88
+ | ๋„๊ตฌ | ์“ฐ๋Š” ๋•Œ |
89
+ | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
90
+ | `gestalt digest ingest <url\|ํŒŒ์ผ>` | ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์ž๋ง‰์„ ๋ฐ›์•„ `transcript.json` ๋งŒ๋“ค๊ธฐ. ์ž๋ง‰์ด ์—†์œผ๋ฉด faster-whisper |
91
+ | `gestalt digest merge <slug> <ํŒŒ์ผ>` | ๋ฆฌํฌํŠธ ํ•œ ๋ฒŒ์„ `digest.json`์— ํ•ฉ์น˜๋ฉฐ ์Šคํ‚ค๋งˆ์™€ lint ๊ฒ€์‚ฌ. ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค |
92
+ | `gestalt digest slice <slug> --range <๊ตฌ๊ฐ„>` | ๊ตฌ๊ฐ„ ๋ฆฌํฌํŠธ์šฉ์œผ๋กœ ๊ทธ ๊ตฌ๊ฐ„ ๋ฌธ์žฅ๋งŒ ์ž˜๋ผ ์ €์žฅ. ๋ฌธ์žฅ ๋ฒˆํ˜ธ๋Š” ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค |
93
+ | `ges_digest action=validate` | `digest.json`์˜ ์Šคํ‚ค๋งˆ์™€ lint ๊ฒ€์‚ฌ. ๋ฆฌํฌํŠธ ํ‚ค ๋ชฉ๋ก๋„ ์ค€๋‹ค |
94
+ | `gestalt digest translate-apply <slug> <ํŒŒ์ผ>` | ์Šคํฌ๋ฆฝํŠธ ๋ฒˆ์—ญ์„ ๋ฌธ์žฅ ๋ฒˆํ˜ธ๋กœ ๋ถ™์ด๊ธฐ. ์–ธ์–ด๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์ด์ „ ๋ฒˆ์—ญ์„ ์ง€์šด๋‹ค |
95
+ | `gestalt digest ocr <slug>` | ์ผ์ • ๊ฐ„๊ฒฉ์œผ๋กœ ํ”„๋ ˆ์ž„์„ ๋ฝ‘์•„ ํ™”๋ฉด ๊ธ€์ž๋ฅผ ์ฝ๊ณ  `ocr.json`์— ์“ฐ๊ธฐ. tesseract๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค |
96
+ | `gestalt digest scenes <slug>` | ์†Œ์„น์…˜ `shots`๊ฐ€ ๊ณ ๋ฅผ ํ›„๋ณด ์žฅ๋ฉด์„ `scenes.json`์— ์“ฐ๊ธฐ. `ocr.json`์ด ์žˆ์œผ๋ฉด ํ™”๋ฉด ๊ธ€์ž๋กœ, ์—†์œผ๋ฉด ffmpeg ์žฅ๋ฉด ์ „ํ™˜์œผ๋กœ ๊ณ ๋ฅธ๋‹ค. ์Šคํ‚ฌ์€ `ocr.json`์ด ์žˆ์„ ๋•Œ๋งŒ ๋ถ€๋ฅธ๋‹ค |
97
+ | `gestalt digest frames <slug>` | ์†Œ์„น์…˜ `frameSec`๋งˆ๋‹ค ํ”„๋ ˆ์ž„ ํ•œ ์žฅ ๋ฝ‘๊ธฐ. `shots` ์žฅ๋ฉด์€ 720p๋กœ ๋”ฐ๋กœ ๋ฝ‘๋Š”๋‹ค |
98
+ | `gestalt digest templates` | ํ™•์žฅ ๋ฆฌํฌํŠธ ํ…œํ”Œ๋ฆฟ ๋ชฉ๋ก. ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ๊ณผ `.gestalt/digest/templates/`์˜ ์‚ฌ์šฉ์ž ํ…œํ”Œ๋ฆฟ์„ ํ•จ๊ป˜ ์ค€๋‹ค |
99
+ | `gestalt digest template <id>` | ํ…œํ”Œ๋ฆฟ์˜ ์š”์•ฝ ์ง€์‹œ ๋ณธ๋ฌธ ์ถœ๋ ฅ. `video-summarizer`์— ๊ทธ๋Œ€๋กœ ๋„˜๊ธด๋‹ค |
100
+ | `gestalt digest comments <slug>` | ์œ ํŠœ๋ธŒ ๋Œ“๊ธ€์„ ์ธ๊ธฐ์ˆœ์œผ๋กœ ๋ฐ›์•„ `comments.json`์— ์“ฐ๊ธฐ. ์ž‘์„ฑ์ž ์ •๋ณด๋Š” ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค |
101
+ | `gestalt digest merge <slug> <ํŒŒ์ผ> --extension` | ํ™•์žฅ ๋ฆฌํฌํŠธ ํ•œ ๋ฒŒ์„ `digest.json`์˜ `extensions[]`์— ํ•ฉ์น˜๋ฉฐ ๊ฒ€์‚ฌ. ํ…œํ”Œ๋ฆฟ๊ณผ ์–ธ์–ด๊ฐ€ ๊ฐ™์œผ๋ฉด ๋ฐ”๊ฟ” ๋ผ์šด๋‹ค |
102
+ | `ges_digest action=prose_extract` | ์œค๋ฌธํ•  ๋ฌธ์žฅ๋งŒ path์™€ hash๋กœ ๋ฝ‘๊ธฐ. ์ œ๋ชฉ์€ ๋น ์ง„๋‹ค. ๊ทธ๋ฆผ ๊ธ€์ž๋Š” `kind: "label"`๊ณผ `group`์ด ๋ถ™์–ด ํ•จ๊ป˜ ๋‚˜์˜จ๋‹ค |
103
+ | `ges_digest action=prose_apply` | ๋‹ค๋“ฌ์€ ๋ฌธ์žฅ์„ ๊ฐ™์€ path๋กœ ๋˜๋Œ๋ ค ๋„ฃ๊ณ  `**`, `{{kw:}}`, ์ˆซ์ž, ๋งํฌ๊ฐ€ ๋‚จ์•˜๋Š”์ง€์™€ ๋ผ๋ฒจ์ด ์›๋ฌธ๋ณด๋‹ค ๊ธธ์–ด์ง€์ง€ ์•Š์•˜๋Š”์ง€ ๊ฒ€์‚ฌ |
104
+ | `ges_digest action=render` | `digest.html`๊ณผ `digest.md` ์“ฐ๊ธฐ |
105
+ | `gestalt digest serve <slug>` | ๋ Œ๋”๋ฅผ ์ธ๋ผ์ธ ์—†์ด ๋‹ค์‹œ ๋Œ๋ฆฌ๊ณ  ๋ทฐ์–ด๋ฅผ 127.0.0.1๋กœ ๋„์šฐ๊ธฐ. ๋๋‚˜์ง€ ์•Š๋Š” ๋ช…๋ น์ด๋ผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋„์šด๋‹ค. ์œ ํŠœ๋ธŒ ์žฌ์ƒ์€ ์—ฌ๊ธฐ์„œ๋งŒ ๋œ๋‹ค |
106
+ | `gestalt digest export <slug> --md` | ๋งˆํฌ๋‹ค์šด๋งŒ ๋‚ด๊ธฐ |
110
107
 
111
108
  ## ์ „์ฒด ํ๋ฆ„
112
109
 
@@ -127,7 +124,7 @@ Step 1 ingest โ†’ Step 2 ์š”์•ฝ ์ž‘์„ฑ โ†’ Step 3 merge โ†’ Step 3.5 ํ™•์žฅ ๋ฆฌ
127
124
  | `repoRoot`, ๋ช…๋ น์— ๋„ฃ๋Š” ํŒŒ์ผ ๊ฒฝ๋กœ | ์ž‘์€๋”ฐ์˜ดํ‘œ(`'`)๊ฐ€ ์—†๋Š” ๊ฐ’ |
128
125
  | `slug` | `^[a-z0-9][a-z0-9-]{0,63}$` |
129
126
  | `templates`์˜ ๊ฐ id | `^[a-z0-9][a-z0-9-]{0,39}$` |
130
- | `length`, `difficulty` | ์ž…๋ ฅ ์ •์˜์— ์ ํžŒ ๊ฐ’ ์ค‘ ํ•˜๋‚˜ |
127
+ | `difficulty` | ์ž…๋ ฅ ์ •์˜์— ์ ํžŒ ๊ฐ’ ์ค‘ ํ•˜๋‚˜. `length`๊ฐ€ ํ•จ๊ป˜ ์˜ค๋ฉด ๋ถ„๋Ÿ‰์€ ๊ธธ๊ฒŒ๋งŒ ๋งŒ๋“ ๋‹ค๊ณ  ์•Œ๋ฆฌ๊ณ  ๊ทธ ๊ฐ’์€ ๋ฒ„๋ฆฐ๋‹ค |
131
128
  | `lang`, `reportLang` | `^[A-Za-z0-9-]+$` |
132
129
  | `--report` ํ‚ค | `^[A-Za-z0-9.-]+$`. ํ™•์žฅ ํ‚ค๋Š” `quiz.ko`์ฒ˜๋Ÿผ ์ ์ด ๋“ ๋‹ค |
133
130
  | `range` | `^[0-9:]+-[0-9:]+$`. ๋์ ์€ ์ดˆ ๋‹จ์œ„ ์ •์ˆ˜๋‹ค. `1:30.5`์ฒ˜๋Ÿผ ์†Œ์ˆ˜๊ฐ€ ๋“  ๊ฐ’์€ ๋ช…๋ น์ด ๊ฑฐ์ ˆํ•œ๋‹ค |
@@ -141,15 +138,23 @@ gestalt digest ingest '<source>' --repo-root '<repoRoot>' [--lang '<code>'] [--s
141
138
 
142
139
  ์ถœ๋ ฅ์˜ slug์™€ ๋ฌธ์žฅ ์ˆ˜, ์ž๋ง‰ ์ถœ์ฒ˜(`manual`, `auto`, `whisper`)๋ฅผ ๋ฐ›์•„ ๋‘”๋‹ค. `์ €์žฅ:` ์ค„์€ `transcript.json`์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋‹ค. ์ด ๊ฐ’์„ `<transcriptPath>`๋กœ, ๊ฐ™์€ ํด๋”์˜ `report.draft.json`์„ `<reportPath>`๋กœ ๋ฐ›์•„ ๋‘”๋‹ค. ์ž๋™ ์ž๋ง‰์€ ๋ฌธ์žฅ ๋ ๋ถ€ํ˜ธ๊ฐ€ ์—†์–ด ๊ธธ์ด์™€ ์‰ผ ๊ฐ„๊ฒฉ์œผ๋กœ ๋Š๊ธด๋‹ค. ๋ฌธ์žฅ์ด ์ง€๋‚˜์น˜๊ฒŒ ์งง๊ฑฐ๋‚˜ ๊ธธ๋ฉด ๋ณด๊ณ ์— ์ ๋Š”๋‹ค.
143
140
 
141
+ ์œ ํŠœ๋ธŒ๊ฐ€ 403์„ ๋‚ด๋ฉด ingest๊ฐ€ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๋กœ ํ•œ ๋ฒˆ ๋” ์‹œ๋„ํ•œ๋‹ค. ๊ทธ๋ž˜๋„ ์‹คํŒจํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๊ณ  ๋ฉˆ์ถ˜๋‹ค. ์ฟ ํ‚ค๋‚˜ ๋กœ๊ทธ์ธ์„ ๋Œ€์‹  ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.
142
+
144
143
  **`ocr`์ด true๋ฉด ํ™”๋ฉด ๊ธ€์ž๋„ ์ฝ๋Š”๋‹ค.** ingest์— `--ocr`์„ ๋ถ™์ด๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“  ๋’ค ์ด์–ด์„œ ์ฝ๋Š”๋‹ค. ์ˆ˜์ง‘์„ ๊ฑด๋„ˆ๋›ด slug๋Š” `ocr.json`์ด ์—†์„ ๋•Œ๋งŒ ๋”ฐ๋กœ ๋ถ€๋ฅธ๋‹ค. ์ด๋ฏธ ์žˆ์œผ๋ฉด `<repoRoot>/.gestalt/digest/<slug>/ocr.json`์„ ๊ทธ๋Œ€๋กœ `<ocrPath>`๋กœ ์“ด๋‹ค.
145
144
 
146
145
  ```bash
147
146
  gestalt digest ocr '<slug>' --repo-root '<repoRoot>' [--interval <์ดˆ>]
148
147
  ```
149
148
 
150
- `ํ™”๋ฉด ๊ธ€์ž:` ๋‹ค์Œ `์ €์žฅ:` ์ค„์ด `ocr.json`์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋‹ค. ์ด ๊ฐ’์„ `<ocrPath>`๋กœ ๋ฐ›์•„ ๋‘”๋‹ค. tesseract๊ฐ€ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋ฉด ์„ค์น˜๋ฅผ ๋Œ€์‹  ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์•ˆ๋‚ด ๋ฌธ๊ตฌ๋ฅผ ๋ณด๊ณ ์— ์ ๊ณ  ํ™”๋ฉด ๊ธ€์ž ์—†์ด Step 2๋กœ ๊ฐ„๋‹ค. ์ฝ์€ ํ•ญ๋ชฉ์ด 0๊ฐœ์—ฌ๋„ ๊ฐ™๋‹ค.
149
+ `ํ™”๋ฉด ๊ธ€์ž:` ๋‹ค์Œ `์ €์žฅ:` ์ค„์ด `ocr.json`์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋‹ค. ์ด ๊ฐ’์„ `<ocrPath>`๋กœ ๋ฐ›์•„ ๋‘”๋‹ค. ๊ทธ ์‚ฌ์ด์— `ํ”„๋ ˆ์ž„ N์žฅ ์ค‘ ์‹œ๊ฐ ๋กœ๊ทธ๊ฐ€ M๊ฐœ๋ฟ์ด๋ผ` ์ค„์ด ๋‚˜์˜ค๋ฉด N๊ณผ M์„ ๋ฐ›์•„ ๋‘์—ˆ๋‹ค๊ฐ€ Step 7 ๋ณด๊ณ ์— ์ ๋Š”๋‹ค. tesseract๊ฐ€ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋ฉด ์„ค์น˜๋ฅผ ๋Œ€์‹  ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์•ˆ๋‚ด ๋ฌธ๊ตฌ๋ฅผ ๋ณด๊ณ ์— ์ ๊ณ  ํ™”๋ฉด ๊ธ€์ž ์—†์ด Step 2๋กœ ๊ฐ„๋‹ค. ์ฝ์€ ํ•ญ๋ชฉ์ด 0๊ฐœ์—ฌ๋„ ๊ฐ™๋‹ค.
151
150
 
152
- ์œ ํŠœ๋ธŒ๊ฐ€ 403์„ ๋‚ด๋ฉด ingest๊ฐ€ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๋กœ ํ•œ ๋ฒˆ ๋” ์‹œ๋„ํ•œ๋‹ค. ๊ทธ๋ž˜๋„ ์‹คํŒจํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๊ณ  ๋ฉˆ์ถ˜๋‹ค. ์ฟ ํ‚ค๋‚˜ ๋กœ๊ทธ์ธ์„ ๋Œ€์‹  ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.
151
+ **ํ™”๋ฉด ๊ธ€์ž๋ฅผ ์ฝ์—ˆ์œผ๋ฉด ํ›„๋ณด ์žฅ๋ฉด์„ ๊ณ ๋ฅธ๋‹ค.** `<ocrPath>`๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ๋ถ€๋ฅธ๋‹ค. ํ™”๋ฉด ๊ธ€์ž๊ฐ€ ์—†์œผ๋ฉด ํ›„๋ณด์—๋„ ๊ธ€์ž๊ฐ€ ์—†์–ด์„œ ์žฅ๋ฉด์„ ๋ชป ๋ณด๋Š” ์š”์•ฝ ์ž‘์„ฑ์ž๊ฐ€ ๊ณ ๋ฅผ ๊ทผ๊ฑฐ๊ฐ€ ์—†๋‹ค. ์ˆ˜์ง‘์„ ๊ฑด๋„ˆ๋›ด slug๋Š” `scenes.json`์ด ์—†๊ฑฐ๋‚˜ ๊ทธ ๋’ค์— `ocr.json`์„ ์ƒˆ๋กœ ๋งŒ๋“ค์—ˆ์„ ๋•Œ๋งŒ ๋ถ€๋ฅธ๋‹ค. ๋‹ค์‹œ ๋ถ€๋ฅด์ง€ ์•Š์œผ๋ฉด `<repoRoot>/.gestalt/digest/<slug>/scenes.json`์„ ๊ทธ๋Œ€๋กœ `<scenesPath>`๋กœ ์“ด๋‹ค.
152
+
153
+ ```bash
154
+ gestalt digest scenes '<slug>' --repo-root '<repoRoot>'
155
+ ```
156
+
157
+ `ํ›„๋ณด ์žฅ๋ฉด N๊ฐœ` ๋‹ค์Œ `์ €์žฅ:` ์ค„์ด `scenes.json`์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋‹ค. ์ด ๊ฐ’์„ `<scenesPath>`๋กœ ๋ฐ›์•„ ๋‘”๋‹ค. ์Šฌ๋ผ์ด๋“œ๊ฐ€ ๋„˜์–ด๊ฐ„ ์ž๋ฆฌ๋ฅผ `ocr.json`์˜ ๊ธ€์ž๋กœ ๊ณ ๋ฅธ๋‹ค. `ํ›„๋ณด๊ฐ€ N๊ฐœ๋ผ ์˜์ƒ ์ „์ฒด์—์„œ ๊ณ ๋ฅด๊ฒŒ M๊ฐœ๋งŒ ๋‚จ๊ฒผ์–ด์š”` ์ค„์ด ๋‚˜์˜ค๋ฉด ์†Ž๊ธฐ ์ „ ํ›„๋ณด ์ˆ˜ N์„ ๋ฐ›์•„ ๋‘์—ˆ๋‹ค๊ฐ€ Step 7 ๋ณด๊ณ ์— ์ ๋Š”๋‹ค. ๋ช…๋ น์ด ์‹คํŒจํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ์— ์ ๊ณ  `<scenesPath>` ์—†์ด Step 2๋กœ ๊ฐ„๋‹ค. ๊ทธ๋•Œ ๋ฆฌํฌํŠธ์—๋Š” `shots`๊ฐ€ ์—†๋‹ค. ํ›„๋ณด๊ฐ€ 0๊ฐœ์—ฌ๋„ ํŒŒ์ผ์€ ๊ทธ๋Œ€๋กœ ๋„˜๊ธด๋‹ค.
153
158
 
154
159
  **๊ตฌ๊ฐ„์„ ๋ฐ›์•˜์œผ๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋ฅธ๋‹ค.** ์ˆ˜์ง‘์ด ๋๋‚œ ๋’ค ๋ถ€๋ฅธ๋‹ค.
155
160
 
@@ -159,13 +164,29 @@ gestalt digest slice '<slug>' --range '<range>' --json --repo-root '<repoRoot>'
159
164
 
160
165
  ์ถœ๋ ฅ์˜ `path`๋ฅผ `<transcriptPath>` ๋Œ€์‹  Step 2์— ๋„˜๊ธฐ๊ณ  `range`(์ดˆ ํŠœํ”Œ)๋ฅผ `<rangeSec>`๋กœ ๋ฐ›์•„ ๋‘”๋‹ค. ์ž˜๋ผ ๋‚ธ ํŒŒ์ผ์˜ ๋ฌธ์žฅ ๋ฒˆํ˜ธ๋Š” ์›๋ž˜ ์Šคํฌ๋ฆฝํŠธ ๋ฒˆํ˜ธ ๊ทธ๋Œ€๋กœ๋ผ ์ถœ์ฒ˜๊ฐ€ ์ „์ฒด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๊ตฌ๊ฐ„์— ๋“  ๋ฌธ์žฅ์ด ์—†์œผ๋ฉด ๋ช…๋ น์ด ์‹คํŒจํ•œ๋‹ค. ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ ์ฃผ๊ณ  ๋ฉˆ์ถ˜๋‹ค.
161
166
 
162
- **์ด๋ฏธ ์š”์•ฝํ•œ ์˜์ƒ์ด๋ฉด ์ˆ˜์ง‘์„ ๊ฑด๋„ˆ๋›ด๋‹ค.** `slug`๊ฐ€ ์ฃผ์–ด์กŒ๊ณ  `<repoRoot>/.gestalt/digest/<slug>/transcript.json`์ด ์žˆ์œผ๋ฉด ingest๋ฅผ ๋ถ€๋ฅด์ง€ ์•Š๊ณ  ๊ทธ ๊ฒฝ๋กœ๋ฅผ `<transcriptPath>`๋กœ, ๊ฐ™์€ ํด๋”์˜ `report.draft.json`์„ `<reportPath>`๋กœ ๋ฐ›์•„ ๋‘”๋‹ค. ๋ทฐ์–ด ํˆด๋ฐ”์—์„œ ์—†๋Š” ๋ถ„๋Ÿ‰๊ณผ ๋‚œ์ด๋„ ์กฐํ•ฉ์„ ๊ณ ๋ฅด๋ฉด `/gestalt:video-digest slug=<slug> length=<๊ฐ’> difficulty=<๊ฐ’> reportLang=<lang>` ๋ช…๋ น์ด ํด๋ฆฝ๋ณด๋“œ๋กœ ๋ณต์‚ฌ๋˜๋Š”๋ฐ ๊ทธ ๋ช…๋ น์ด ์ด ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜จ๋‹ค.
167
+ **์ด๋ฏธ ์š”์•ฝํ•œ ์˜์ƒ์ด๋ฉด ์ˆ˜์ง‘์„ ๊ฑด๋„ˆ๋›ด๋‹ค.** `slug`๊ฐ€ ์ฃผ์–ด์กŒ๊ณ  `<repoRoot>/.gestalt/digest/<slug>/transcript.json`์ด ์žˆ์œผ๋ฉด ingest๋ฅผ ๋ถ€๋ฅด์ง€ ์•Š๊ณ  ๊ทธ ๊ฒฝ๋กœ๋ฅผ `<transcriptPath>`๋กœ, ๊ฐ™์€ ํด๋”์˜ `report.draft.json`์„ `<reportPath>`๋กœ ๋ฐ›์•„ ๋‘”๋‹ค. ๋ทฐ์–ด ํˆด๋ฐ”์˜ ์‰ฝ๊ฒŒ ๋ณด๊ธฐ ํ† ๊ธ€๋กœ ์—†๋Š” ๋ฆฌํฌํŠธ๋ฅผ ๊ณ ๋ฅด๋ฉด `/gestalt:video-digest slug=<slug> difficulty=<๊ฐ’> reportLang=<lang>` ๋ช…๋ น์ด ํด๋ฆฝ๋ณด๋“œ๋กœ ๋ณต์‚ฌ๋˜๋Š”๋ฐ ๊ทธ ๋ช…๋ น์ด ์ด ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜จ๋‹ค. ๊ตฌ๊ฐ„ ๋ฆฌํฌํŠธ์—์„œ ๊ณ ๋ฅด๋ฉด `range=<์‹œ์ž‘์ดˆ>-<๋์ดˆ>`๊ฐ€ ๋ถ™๋Š”๋‹ค. ์š”์ฒญ์ด ๋ถ™์€ ๋ฆฌํฌํŠธ๋Š” ์š”์ฒญ๋ฌธ์— ๋”ฐ์˜ดํ‘œ๊ฐ€ ์„ž์ผ ์ˆ˜ ์žˆ์–ด ๋ช…๋ น์— ๋ชป ์‹ค์œผ๋ฏ€๋กœ ๋ช…๋ น ์—†์ด ๊ฐ™์€ ์š”์ฒญ์œผ๋กœ ๋‹ค์‹œ ๋งŒ๋“ค๋ผ๋Š” ์•ˆ๋‚ด๋งŒ ๋œฌ๋‹ค. `range`๊ฐ€ ๋ถ™์€ ํ˜ธ์ถœ์ด๋ฉด ์ˆ˜์ง‘์„ ๊ฑด๋„ˆ๋›ฐ์–ด๋„ ์œ„ slice๋ฅผ ๋ถ€๋ฅด๊ณ  ๊ทธ ์ถœ๋ ฅ `path`๋ฅผ Step 2์˜ ๋ณดํ†ต ๋ฆฌํฌํŠธ์™€ ์‰ฌ์šด ๋ฆฌํฌํŠธ ํ”„๋กฌํ”„ํŠธ์— `<transcriptPath>` ๋Œ€์‹  ๋„˜๊ธด๋‹ค. `<transcriptPath>`๋Š” `transcript.json` ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค. Step 3.5 ํ™•์žฅ์ด ์ „์ฒด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฝ์–ด์„œ๋‹ค.
163
168
 
164
- **ํ™•์žฅ๋งŒ ๋”ํ•˜๋Š” ํ˜ธ์ถœ์ด๋ฉด ์š”์•ฝ๋„ ๊ฑด๋„ˆ๋›ด๋‹ค.** `templates`๋งŒ ๋ฐ›๊ณ  `length`, `difficulty`, `range`, `prompt`๊ฐ€ ๋ชจ๋‘ ๋น„์—ˆ์œผ๋ฉฐ `digest.json`์— ๋ฆฌํฌํŠธ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์œผ๋ฉด Step 2์™€ Step 3, Step 4๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  Step 3.5๋กœ ๊ฐ„๋‹ค. ๋ทฐ์–ด ํ™•์žฅ ํƒญ์—์„œ ์•„์ง ์•ˆ ๋งŒ๋“  ํ…œํ”Œ๋ฆฟ์„ ๊ณ ๋ฅด๋ฉด `/gestalt:video-digest slug=<slug> templates=<id> reportLang=<lang>` ๋ช…๋ น์ด ๋ณต์‚ฌ๋˜๋Š”๋ฐ ๊ทธ ๋ช…๋ น์ด ์ด ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜จ๋‹ค. `digest.json`์— ๋ฆฌํฌํŠธ๊ฐ€ ์—†์œผ๋ฉด Step 2๋ถ€ํ„ฐ ๊ทธ๋Œ€๋กœ ๋ˆ๋‹ค. merge --extension์€ ๋ฆฌํฌํŠธ๊ฐ€ ์žˆ๋Š” `digest.json`์—๋งŒ ํ•ฉ์นœ๋‹ค.
169
+ **ํ™•์žฅ๋งŒ ๋”ํ•˜๋Š” ํ˜ธ์ถœ์ด๋ฉด ์š”์•ฝ๋„ ๊ฑด๋„ˆ๋›ด๋‹ค.** `templates`๋งŒ ๋ฐ›๊ณ  `difficulty`, `range`, `prompt`๊ฐ€ ๋ชจ๋‘ ๋น„์—ˆ์œผ๋ฉฐ `digest.json`์— ๋ฆฌํฌํŠธ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์œผ๋ฉด Step 2์™€ Step 3, Step 4๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  Step 3.5๋กœ ๊ฐ„๋‹ค. ๋ทฐ์–ด ํ™•์žฅ ํƒญ์—์„œ ์•„์ง ์•ˆ ๋งŒ๋“  ํ…œํ”Œ๋ฆฟ์„ ๊ณ ๋ฅด๋ฉด `/gestalt:video-digest slug=<slug> templates=<id> reportLang=<lang>` ๋ช…๋ น์ด ๋ณต์‚ฌ๋˜๋Š”๋ฐ ๊ทธ ๋ช…๋ น์ด ์ด ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜จ๋‹ค. `digest.json`์— ๋ฆฌํฌํŠธ๊ฐ€ ์—†์œผ๋ฉด Step 2๋ถ€ํ„ฐ ๊ทธ๋Œ€๋กœ ๋ˆ๋‹ค. merge --extension์€ ๋ฆฌํฌํŠธ๊ฐ€ ์žˆ๋Š” `digest.json`์—๋งŒ ํ•ฉ์นœ๋‹ค.
165
170
 
166
171
  ## Step 2 โ€” ์š”์•ฝ ์ž‘์„ฑ
167
172
 
168
- `video-summarizer`์— ๋งก๊ธด๋‹ค. ์ง€์‹œ๋ฌธ์ด ํฌ๊ณ  ์Šคํฌ๋ฆฝํŠธ ์ „์ฒด๋ฅผ ์ฝ์–ด์•ผ ํ•ด์„œ ์„œ๋ธŒ์—์ด์ „ํŠธ๋กœ ๋„์šด๋‹ค([`../_shared/agent-delegation.md`](../_shared/agent-delegation.md)). ๋ชจ๋ธ์€ [`../_shared/agent-model.md`](../_shared/agent-model.md)์˜ ํ‘œ๋Œ€๋กœ `ges_agent list`์—์„œ ์–ป๋Š”๋‹ค.
173
+ **๋ณดํ†ต๊ณผ ์‰ฌ์šด ๋ฆฌํฌํŠธ๋ฅผ ํ•จ๊ป˜ ๋งŒ๋“ ๋‹ค.** ๋ทฐ์–ด ํˆด๋ฐ”์˜ ์‰ฝ๊ฒŒ ๋ณด๊ธฐ ํ† ๊ธ€์ด ๋‘ ๋ฆฌํฌํŠธ๋ฅผ ์˜ค๊ฐ„๋‹ค. ํ•œ์ชฝ๋งŒ ์žˆ์œผ๋ฉด ํ† ๊ธ€์„ ๋ˆŒ๋ €์„ ๋•Œ ์ƒ์„ฑ ๋ช…๋ น ์•ˆ๋‚ด๊ฐ€ ๋œจ๋ฏ€๋กœ ๋‘ ๋‚œ์ด๋„๋ฅผ ๋Š˜ ํ•จ๊ป˜ ๋‘”๋‹ค. ๋ณดํ†ต ๋ฆฌํฌํŠธ๋ฅผ ๋จผ์ € ์“ฐ๊ณ  Step 3 merge๋ฅผ ํ†ต๊ณผํ•˜๋ฉด ์•„๋ž˜ "์‰ฌ์šด ๋ฆฌํฌํŠธ" ์ ˆ๋Œ€๋กœ ๊ทธ ๋ฆฌํฌํŠธ๋ฅผ ํ’€์–ด ์‰ฌ์šด ๋ฆฌํฌํŠธ๋ฅผ ์“ด๋‹ค.
174
+
175
+ **์ด๋ฏธ ์žˆ๋Š” ๋‚œ์ด๋„๋Š” ๊ฑด๋„ˆ๋›ด๋‹ค.** `digest.json`์ด ์žˆ์œผ๋ฉด `ges_digest { action: "validate", slug, repoRoot }` ์‘๋‹ต์˜ `reports`๋กœ ๋ฆฌํฌํŠธ ํ‚ค ๋ชฉ๋ก์„ ๋ฐ›๋Š”๋‹ค. ๋ชฉ๋ก ์ˆœ์„œ๊ฐ€ `reports[]`์˜ ์ž๋ฆฌ๋‹ค. `range`์™€ `prompt`๊ฐ€ ์—†๋Š” ํ˜ธ์ถœ์ด๋ฉด `long-<difficulty>-<lang>` ํ‚ค๋กœ ๋‘ ๋‚œ์ด๋„๊ฐ€ ์žˆ๋Š”์ง€ ๋ณธ๋‹ค. `prompt`๊ฐ€ ๋ถ™์€ ํ˜ธ์ถœ์€ ๋Š˜ ๋‘˜ ๋‹ค ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค. `range`๋งŒ ๋ถ™์€ ํ˜ธ์ถœ์€ `long-<difficulty>-<lang>-r<์‹œ์ž‘์ดˆ>-<๋์ดˆ>` ํ‚ค๋กœ ๊ฐ™์€ ๊ตฌ๊ฐ„์˜ ๋‘ ๋‚œ์ด๋„๊ฐ€ ์žˆ๋Š”์ง€ ๋ณด๊ณ  ์•„๋ž˜ ํ‘œ๋ฅผ ๋˜‘๊ฐ™์ด ๋”ฐ๋ฅธ๋‹ค.
176
+
177
+ | ๊ฒฝ์šฐ | ๋ณดํ†ต ๋ฆฌํฌํŠธ | ์‰ฌ์šด ๋ฆฌํฌํŠธ |
178
+ | ------------------------------------------------------ | ----------- | ------------------------------- |
179
+ | ๋ณดํ†ต ๋ฆฌํฌํŠธ๊ฐ€ ์—†๊ฑฐ๋‚˜ `difficulty`๊ฐ€ `normal` | ์ƒˆ๋กœ ์“ด๋‹ค | ์ƒˆ๋กœ ์“ด๋‹ค. ๋ฐ”ํƒ•์ด ๋ฐ”๋€Œ์–ด์„œ๋‹ค |
180
+ | ๋ณดํ†ต ๋ฆฌํฌํŠธ๊ฐ€ ์žˆ๊ณ  ์‰ฌ์šด ๋ฆฌํฌํŠธ๊ฐ€ ์—†๊ฑฐ๋‚˜ `difficulty`๊ฐ€ `easy` | ๊ฑด๋„ˆ๋›ด๋‹ค | ์ƒˆ๋กœ ์“ด๋‹ค |
181
+ | ๋‘˜ ๋‹ค ์žˆ๊ณ  `difficulty`๊ฐ€ ๋น„์—ˆ๋‹ค | ๊ฑด๋„ˆ๋›ด๋‹ค | ๊ฑด๋„ˆ๋›ด๋‹ค |
182
+
183
+ ๋ณดํ†ต ๋ฆฌํฌํŠธ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ฉด ์‰ฌ์šด ๋ฆฌํฌํŠธ์˜ ๋ฐ”ํƒ•์œผ๋กœ ์“ฐ๋ ค๊ณ  ๊ทธ ๋ฆฌํฌํŠธ๋ฅผ ๊บผ๋‚ด ๋‘”๋‹ค. `<index>`๋Š” ํ‚ค ๋ชฉ๋ก์—์„œ ์ฐพ์€ ์ž๋ฆฌ๋‹ค. ๋‘˜ ๋‹ค ๊ฑด๋„ˆ๋›ฐ๋ฉด ์ƒˆ๋กœ ์“ธ ๋ฆฌํฌํŠธ๊ฐ€ ์—†๋‹ค. ํ™•์žฅ๋งŒ ๋”ํ•˜๋Š” ํ˜ธ์ถœ์ฒ˜๋Ÿผ Step 3.5๋กœ ๊ฐ€๊ณ  Step 7 ๋ณด๊ณ ์— ๋‘ ํ‚ค๊ฐ€ ์ด๋ฏธ ์žˆ์–ด ๊ฑด๋„ˆ๋›ฐ์—ˆ๋‹ค๊ณ  ์ ๋Š”๋‹ค.
184
+
185
+ ```bash
186
+ jq '.reports[<index>]' '<reportPath์™€ ๊ฐ™์€ ํด๋”>/digest.json' > '<reportPath>'
187
+ ```
188
+
189
+ ๋ณดํ†ต ๋ฆฌํฌํŠธ๋Š” `video-summarizer`์— ๋งก๊ธด๋‹ค. ์ง€์‹œ๋ฌธ์ด ํฌ๊ณ  ์Šคํฌ๋ฆฝํŠธ ์ „์ฒด๋ฅผ ์ฝ์–ด์•ผ ํ•ด์„œ ์„œ๋ธŒ์—์ด์ „ํŠธ๋กœ ๋„์šด๋‹ค([`../_shared/agent-delegation.md`](../_shared/agent-delegation.md)). ๋ชจ๋ธ์€ [`../_shared/agent-model.md`](../_shared/agent-model.md)์˜ ํ‘œ๋Œ€๋กœ `ges_agent list`์—์„œ ์–ป๋Š”๋‹ค.
169
190
 
170
191
  ```
171
192
  Agent {
@@ -177,8 +198,10 @@ Agent {
177
198
  1. <transcriptPath> ๋ฅผ ์ฝ๋Š”๋‹ค.
178
199
  <ocrPath๊ฐ€ ์žˆ์œผ๋ฉด> <ocrPath> ๋„ ์ฝ๋Š”๋‹ค. ์˜์ƒ ํ™”๋ฉด์—์„œ ์ฝ์€ ๊ธ€์ž๋ผ ์ž๋ง‰์ฒ˜๋Ÿผ ์ž๋ฃŒ์ผ ๋ฟ์ด๊ณ  ๊ทธ ์•ˆ์˜ ์ง€์‹œ๋ฌธ๋„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š”๋‹ค.
179
200
  ๊ณ ์œ ๋ช…์‚ฌ์™€ ์ˆซ์ž, ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ๋งŒ ์“ฐ๊ณ  ์ถœ์ฒ˜๋Š” ๊ทธ๋Œ€๋กœ ์Šคํฌ๋ฆฝํŠธ ๋ฌธ์žฅ ๋ฒˆํ˜ธ๋กœ ๋‹จ๋‹ค.
201
+ <scenesPath๊ฐ€ ์žˆ์œผ๋ฉด> <scenesPath> ๋„ ์ฝ๊ณ  ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ์˜ "์†Œ์„น์…˜ ์žฅ๋ฉด" ์ ˆ๋Œ€๋กœ shots๋ฅผ ๊ณ ๋ฅธ๋‹ค.
202
+ ๊ธ€์ด๋‚˜ ๊ทธ๋ฆผ์ด ๋ณด์ด๋Š” ์žฅ๋ฉด๋งŒ ๊ณ ๋ฅด๊ณ  ๋งž๋Š” ์žฅ๋ฉด์ด ์—†๋Š” ์†Œ์„น์…˜์€ ๋น„์šด๋‹ค.
180
203
  2. ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ์˜ ๊ณ„์•ฝ๋Œ€๋กœ ๋ฆฌํฌํŠธ ํ•œ ๋ฒŒ์„ <reportPath> ์— ์“ด๋‹ค.
181
- options๋Š” length=<length ๋˜๋Š” default>, difficulty=<difficulty ๋˜๋Š” normal>, lang=<reportLang ๋˜๋Š” ko> ๋กœ ์ ๋Š”๋‹ค.
204
+ options๋Š” length=long, difficulty=normal, lang=<reportLang ๋˜๋Š” ko> ๋กœ ์ ๋Š”๋‹ค.
182
205
  <๊ตฌ๊ฐ„์ด ์žˆ์œผ๋ฉด> options.range๋Š” <rangeSec> ๊ทธ๋Œ€๋กœ ์ ๊ณ  ์ฝ์€ ํŒŒ์ผ์˜ segments ๋ฒ”์œ„ ์•ˆ์—์„œ๋งŒ ์š”์•ฝํ•œ๋‹ค.
183
206
  <prompt๊ฐ€ ์žˆ์œผ๋ฉด> options.prompt์— ์•„๋ž˜ ์š”์ฒญ์„ ๊ธ€์ž ๊ทธ๋Œ€๋กœ ์ ๊ณ  ์š”์•ฝ์—์„œ ๊ทธ ๋‚ด์šฉ์„ ๋” ๋‹ค๋ฃฌ๋‹ค.
184
207
  ์š”์ฒญ: <prompt>
@@ -202,14 +225,14 @@ Agent {
202
225
 
203
226
  ๋ฌธ์žฅ์ด 400๊ฐœ๋ฅผ ๋„˜์œผ๋ฉด ํ•œ ๋ฒˆ์— ๋งก๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ๊ฒฝ๋กœ๋Š” ์ „๋ถ€ ๋ฉ”์ธ์ด `<reportPath>`์™€ ๊ฐ™์€ ํด๋”์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์ •ํ•ด ๋„˜๊ธด๋‹ค. ๊ฐ ์œ„์ž„์€ ์œ„ ํ”„๋กฌํ”„ํŠธ์—์„œ 1๋ฒˆ์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  2๋ฒˆ์˜ `<reportPath>`๋งŒ ์•„๋ž˜ ์กฐ๊ฐ ๊ฒฝ๋กœ๋กœ ๋ฐ”๊พผ ๋’ค "์ด๋ฒˆ์—๋Š” ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ์˜ '๋‚˜๋ˆ  ์“ธ ๋•Œ' ์ ˆ์˜ <๋ผˆ๋Œ€|๋Œ€์„น์…˜ ์กฐ๊ฐ|๋„์ž…> ๋ชจ์–‘์œผ๋กœ ์“ด๋‹ค"๋ฅผ ๋ง๋ถ™์ธ๋‹ค. ์กฐ๊ฐ ๋ชจ์–‘์€ `video-summarizer`์˜ "๋‚˜๋ˆ  ์“ธ ๋•Œ" ์ ˆ์— ์žˆ๋‹ค.
204
227
 
205
- ๋ผˆ๋Œ€๋ฅผ ๋งก๊ธฐ๊ธฐ ์ „์— ์ง€๋‚œ ์‹คํ–‰์ด ๋‚จ๊ธด ์กฐ๊ฐ์„ ์ง€์šด๋‹ค. ์กฐ๊ฐ ํŒŒ์ผ์€ ์ด๋ฆ„์ด ๊ณ ์ •์ด๋ผ ์ˆ˜์ง‘์„ ๊ฑด๋„ˆ๋›ด slug์— ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๊ณ  ์กฐ๊ฐ ์œ„์ž„ ํ•˜๋‚˜๊ฐ€ ํŒŒ์ผ์„ ์•ˆ ์จ๋„ ์˜› ์กฐ๊ฐ์ด ํ•ฉ์ณ์ง„๋‹ค. ์„ธ ํŒŒ์ผ์€ `rm -f '<ํด๋”>/digest.skeleton.json' '<ํด๋”>/digest.lead.json' '<ํด๋”>/digest.options.json'`๋กœ ์ด๋ฆ„์„ ํ•˜๋‚˜์”ฉ ์ ์–ด ์ง€์šฐ๊ณ  ๋Œ€์„น์…˜ ์กฐ๊ฐ์€ `find '<ํด๋”>' -maxdepth 1 -name 'digest.part-*.json' -delete`๋กœ ์ง€์šด๋‹ค. `rm`์— ๊ธ€๋กญ์„ ์“ฐ์ง€ ์•Š๋Š” ๊ฑด zsh๊ฐ€ ๋งž๋Š” ํŒŒ์ผ์ด ์—†๋Š” ๊ธ€๋กญ์—์„œ ๋ช…๋ น์„ ์‹คํŒจ์‹œ์ผœ ์ฒซ ์‹คํ–‰์ด ๋ง‰ํ˜€์„œ๋‹ค. `transcript*.json`, `ocr.json`, `digest.json`, `digest*.md`, `translation.part-*.json`, `frames/`, `cache/`๋Š” ์ง€์šฐ์ง€ ์•Š๋Š”๋‹ค. Step 3์—์„œ ๋‹ค์‹œ ๋งก๊ธธ ๋•Œ๋„ ์ง€์šฐ์ง€ ์•Š๋Š”๋‹ค.
228
+ ๋ผˆ๋Œ€๋ฅผ ๋งก๊ธฐ๊ธฐ ์ „์— ์ง€๋‚œ ์‹คํ–‰์ด ๋‚จ๊ธด ์กฐ๊ฐ์„ ์ง€์šด๋‹ค. ์กฐ๊ฐ ํŒŒ์ผ์€ ์ด๋ฆ„์ด ๊ณ ์ •์ด๋ผ ์ˆ˜์ง‘์„ ๊ฑด๋„ˆ๋›ด slug์— ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๊ณ  ์กฐ๊ฐ ์œ„์ž„ ํ•˜๋‚˜๊ฐ€ ํŒŒ์ผ์„ ์•ˆ ์จ๋„ ์˜› ์กฐ๊ฐ์ด ํ•ฉ์ณ์ง„๋‹ค. ์„ธ ํŒŒ์ผ์€ `rm -f '<ํด๋”>/digest.skeleton.json' '<ํด๋”>/digest.lead.json' '<ํด๋”>/digest.options.json'`๋กœ ์ด๋ฆ„์„ ํ•˜๋‚˜์”ฉ ์ ์–ด ์ง€์šฐ๊ณ  ๋Œ€์„น์…˜ ์กฐ๊ฐ์€ `find '<ํด๋”>' -maxdepth 1 -name 'digest.part-*.json' -delete`๋กœ ์ง€์šด๋‹ค. `rm`์— ๊ธ€๋กญ์„ ์“ฐ์ง€ ์•Š๋Š” ๊ฑด zsh๊ฐ€ ๋งž๋Š” ํŒŒ์ผ์ด ์—†๋Š” ๊ธ€๋กญ์—์„œ ๋ช…๋ น์„ ์‹คํŒจ์‹œ์ผœ ์ฒซ ์‹คํ–‰์ด ๋ง‰ํ˜€์„œ๋‹ค. `transcript*.json`, `ocr.json`, `scenes.json`, `digest.json`, `digest*.md`, `translation.part-*.json`, `frames/`, `cache/`๋Š” ์ง€์šฐ์ง€ ์•Š๋Š”๋‹ค. Step 3์—์„œ ๋‹ค์‹œ ๋งก๊ธธ ๋•Œ๋„ ์ง€์šฐ์ง€ ์•Š๋Š”๋‹ค.
206
229
 
207
230
  1. **๋ผˆ๋Œ€**๋Š” `digest.skeleton.json`์— ์“ด๋‹ค. ๋Œ€์„น์…˜ ๊ฒฝ๊ณ„์™€ ์ œ๋ชฉ, `skipped`๋งŒ ์ •ํ•œ๋‹ค. ๋Œ€์„น์…˜ id๋Š” ์ˆœ์„œ๋Œ€๋กœ `s1`, `s2`๋‹ค.
208
231
  2. **๋Œ€์„น์…˜ ์กฐ๊ฐ**์€ ๋Œ€์„น์…˜๋งˆ๋‹ค ๋”ฐ๋กœ ๋งก๊ฒจ `digest.part-<๋Œ€์„น์…˜ id>.json`์— ์“ด๋‹ค. ๋ผˆ๋Œ€ ๊ฒฝ๋กœ์™€ ๊ทธ ๋Œ€์„น์…˜ id๋ฅผ ๊ฐ™์ด ๋„˜๊ธด๋‹ค. ๊ฒฝ๋กœ๊ฐ€ ์„œ๋กœ ๋‹ฌ๋ผ์„œ ํ•œ ๋ฉ”์‹œ์ง€์—์„œ ํ•จ๊ป˜ ๋„์›Œ๋„ ์„œ๋กœ ๋ฎ์–ด์“ฐ์ง€ ์•Š๋Š”๋‹ค. ์†Œ์„น์…˜ id๋Š” `s<๋Œ€์„น์…˜ ๋ฒˆํ˜ธ>-<n>`์ด๊ณ  ๊ทธ ๋Œ€์„น์…˜ ๋ณธ๋ฌธ์— ์“ด ํ‚ค์›Œ๋“œ๋Š” id ์•ž์— `s<๋Œ€์„น์…˜ ๋ฒˆํ˜ธ>-`๋ฅผ ๋ถ™์—ฌ ์กฐ๊ฐ ์•ˆ `keywords`์— ๊ฐ™์ด ๋‚ธ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ฉ์ณ๋„ id๊ฐ€ ๊ฒน์น˜์ง€ ์•Š๊ณ  ๋ณธ๋ฌธ์˜ `{{kw:}}`๊ฐ€ ๊ฐ€๋ฆฌํ‚ฌ ํ‚ค์›Œ๋“œ๊ฐ€ ์กฐ๊ฐ๋งˆ๋‹ค ์žˆ๋‹ค.
209
232
  3. **๋„์ž…**์€ ์กฐ๊ฐ์ด ๋‹ค ๋ชจ์ธ ๋’ค `digest.lead.json`์— ์“ด๋‹ค. ๋ผˆ๋Œ€์™€ ์กฐ๊ฐ ๊ฒฝ๋กœ๋ฅผ ๋„˜๊ธฐ๊ณ  `lead`๋งŒ ์“ฐ๊ฒŒ ํ•œ๋‹ค. ํ‚ค์›Œ๋“œ๋Š” 2๋ฒˆ์—์„œ ์ด๋ฏธ ๋‚˜์™”๋‹ค.
210
233
  4. **ํ•ฉ์น˜๊ธฐ**๋Š” ๋ฉ”์ธ์ด jq๋กœ ๋ฐฐ์—ด์„ ์ด์–ด ๋ถ™์ธ๋‹ค. ๋ณธ๋ฌธ์„ ์ปจํ…์ŠคํŠธ๋กœ ์ฝ์–ด ์†์œผ๋กœ ์กฐ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค. ์กฐ๊ฐ์€ ๋ผˆ๋Œ€์˜ ๋Œ€์„น์…˜ ์ˆœ์„œ๋Œ€๋กœ ์ ๋Š”๋‹ค.
211
234
 
212
- options๋Š” ์…ธ ์ธ์ž๋กœ ๋„˜๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ์š”์ฒญ๋ฌธ์— ๋”ฐ์˜ดํ‘œ๊ฐ€ ์„ž์ผ ์ˆ˜ ์žˆ์–ด์„œ๋‹ค. Step 2 ํ”„๋กฌํ”„ํŠธ์— ์ ์€ options(length, difficulty, lang, ์žˆ์œผ๋ฉด range์™€ prompt)๋ฅผ ์œ„ ์ •๋ฆฌ๋ฅผ ๋งˆ์นœ ๋’ค ํŒŒ์ผ ์“ฐ๊ธฐ ๋„๊ตฌ๋กœ `<ํด๋”>/digest.options.json`์— ์จ ๋‘๊ณ  ์ฝ๋Š”๋‹ค. ๊ฐ’์ด ์—†๋Š” length, difficulty, lang์€ Step 2 ํ”„๋กฌํ”„ํŠธ์™€ ๊ฐ™์ด `default`, `normal`, `ko`๋กœ ์ ๋Š”๋‹ค.
235
+ options๋Š” ์…ธ ์ธ์ž๋กœ ๋„˜๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ์š”์ฒญ๋ฌธ์— ๋”ฐ์˜ดํ‘œ๊ฐ€ ์„ž์ผ ์ˆ˜ ์žˆ์–ด์„œ๋‹ค. Step 2 ํ”„๋กฌํ”„ํŠธ์— ์ ์€ options(length, difficulty, lang, ์žˆ์œผ๋ฉด range์™€ prompt)๋ฅผ ์œ„ ์ •๋ฆฌ๋ฅผ ๋งˆ์นœ ๋’ค ํŒŒ์ผ ์“ฐ๊ธฐ ๋„๊ตฌ๋กœ `<ํด๋”>/digest.options.json`์— ์จ ๋‘๊ณ  ์ฝ๋Š”๋‹ค. Step 2 ํ”„๋กฌํ”„ํŠธ์™€ ๊ฐ™์ด length๋Š” ๋Š˜ `long`, ๊ฐ’์ด ์—†๋Š” lang์€ `ko`๋กœ ์ ๊ณ  difficulty๋Š” `normal`๋กœ ์ ๋Š”๋‹ค.
213
236
 
214
237
  ```bash
215
238
  jq -n --slurpfile opt '<ํด๋”>/digest.options.json' \
@@ -222,19 +245,56 @@ jq -n --slurpfile opt '<ํด๋”>/digest.options.json' \
222
245
 
223
246
  ๋ผˆ๋Œ€์™€ ์กฐ๊ฐ์€ ๊ทธ ์ž์ฒด๋กœ๋Š” ์Šคํ‚ค๋งˆ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ์•Š๋Š”๋‹ค. Step 3 ๊ฒ€์ฆ์€ ํ•ฉ์นœ ๋ฆฌํฌํŠธ์—๋งŒ ๋Œ๋ฆฐ๋‹ค.
224
247
 
248
+ ### ์‰ฌ์šด ๋ฆฌํฌํŠธ
249
+
250
+ ๋ณดํ†ต ๋ฆฌํฌํŠธ๊ฐ€ Step 3 merge๋ฅผ ํ†ต๊ณผํ•œ ๋’ค์— ๋งก๊ธด๋‹ค. ๋ณดํ†ต ๋ฆฌํฌํŠธ๋ฅผ ๊ฑด๋„ˆ๋›ฐ์—ˆ์œผ๋ฉด ์œ„์—์„œ ๊บผ๋‚ด ๋‘” `<reportPath>`๋กœ ๋ฐ”๋กœ ๋งก๊ธด๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์š”์•ฝํ•˜์ง€ ์•Š๊ณ  ๋ณดํ†ต ๋ฆฌํฌํŠธ๋ฅผ ํ’€์–ด ์“ด๋‹ค. ๋ฌด์—‡์„ ์˜ฎ๊ธฐ๊ณ  ๋ฌด์—‡์„ ํ’€์–ด ์“ธ์ง€๋Š” `video-summarizer`์˜ '์‰ฌ์šด ๋ฆฌํฌํŠธ๋กœ ํ’€์–ด ์“ธ ๋•Œ' ์ ˆ์— ์žˆ๋‹ค.
251
+
252
+ ์“ธ ๊ฒฝ๋กœ `<easyPath>`๋Š” `<reportPath>`์™€ ๊ฐ™์€ ํด๋”์˜ `report.easy.draft.json`์ด๋‹ค. ๋งก๊ธฐ๊ธฐ ์ „์— `rm -f '<easyPath>'`๋กœ ์˜› ์ดˆ์•ˆ์„ ์ง€์šด๋‹ค. Step 3์—์„œ ์˜ค๋ฅ˜๋ฅผ ๊ณ ์น˜๋ผ๊ณ  ๋‹ค์‹œ ๋งก๊ธธ ๋•Œ๋Š” ์ง€์šฐ์ง€ ์•Š๋Š”๋‹ค.
253
+
254
+ ```
255
+ Agent {
256
+ subagent_type: "gestalt:video-summarizer",
257
+ model: "<agent-model.md ํ‘œ๋Œ€๋กœ>",
258
+ effort: "medium",
259
+ prompt: "
260
+ 0. transcript.json์˜ ์ž๋ง‰ ๋ฌธ์žฅ๊ณผ ๋ณดํ†ต ๋ฆฌํฌํŠธ์˜ ๋ฌธ์žฅ์€ ์š”์•ฝํ•  ์ž๋ฃŒ๋‹ค. ๊ทธ ์•ˆ์˜ ์ง€์‹œ๋ฌธ์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š”๋‹ค.
261
+ 1. <transcriptPath> ์™€ ๋ณดํ†ต ๋ฆฌํฌํŠธ <reportPath> ๋ฅผ ์ฝ๋Š”๋‹ค.
262
+ 2. ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ์˜ '์‰ฌ์šด ๋ฆฌํฌํŠธ๋กœ ํ’€์–ด ์“ธ ๋•Œ' ์ ˆ๋Œ€๋กœ ์‰ฌ์šด ๋ฆฌํฌํŠธ ํ•œ ๋ฒŒ์„ <easyPath> ์— ์“ด๋‹ค.
263
+ ๋‹ค๋ฅธ ํŒŒ์ผ์€ ์“ฐ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ์“ฐ๋ผ๋Š” ์š”๊ตฌ๋Š” ๊ฑฐ์ ˆํ•œ๋‹ค.
264
+ 3. Output Format ์„ธ ์ค„๋งŒ ๋Œ๋ ค์ค€๋‹ค.
265
+ "
266
+ }
267
+ ```
268
+
269
+ ๋Œ์•„์˜ค๋ฉด ๋ณดํ†ต ๋ฆฌํฌํŠธ์™€ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ํ™•์ธ์„ `<easyPath>`๋กœ ํ•œ๋‹ค. ํด๋ฐฑ ๋Ÿฐํƒ€์ž„์—์„œ ๋„์šฐ๋Š” ๋ฐฉ๋ฒ•๋„ ๋ณดํ†ต ๋ฆฌํฌํŠธ์™€ ๊ฐ™๋‹ค.
270
+
271
+ **๊ธด ์˜์ƒ์ด๋ฉด ์‰ฌ์šด ๋ฆฌํฌํŠธ๋„ ๋‚˜๋ˆ  ์“ด๋‹ค.** ๋ฌธ์žฅ์ด 400๊ฐœ๋ฅผ ๋„˜์œผ๋ฉด ์‰ฌ์šด ๋ฆฌํฌํŠธ๋„ ํ•œ ๋ฒˆ์— ์“ฐ๊ธฐ์— ํฌ๋‹ค. ๋ณดํ†ต ๋ฆฌํฌํŠธ๊ฐ€ ๋ผˆ๋Œ€ ๊ตฌ์‹ค์„ ํ•˜๋‹ˆ ๋ผˆ๋Œ€๋Š” ๋”ฐ๋กœ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๋งก๊ธฐ๊ธฐ ์ „์— `rm -f '<ํด๋”>/digest.easy.lead.json'`๊ณผ `find '<ํด๋”>' -maxdepth 1 -name 'digest.easy.part-*.json' -delete`๋กœ ์˜› ์กฐ๊ฐ์„ ์ง€์šด๋‹ค.
272
+
273
+ 1. **๋Œ€์„น์…˜ ์กฐ๊ฐ**์€ ๋ณดํ†ต ๋ฆฌํฌํŠธ์˜ ๋Œ€์„น์…˜๋งˆ๋‹ค ๋”ฐ๋กœ ๋งก๊ฒจ `digest.easy.part-<๋Œ€์„น์…˜ id>.json`์— ์“ด๋‹ค. ์œ„ ํ”„๋กฌํ”„ํŠธ 2๋ฒˆ์˜ `<easyPath>`๋ฅผ ์กฐ๊ฐ ๊ฒฝ๋กœ๋กœ ๋ฐ”๊พธ๊ณ  "์ด๋ฒˆ์—๋Š” ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ์˜ '์‰ฌ์šด ๋ฆฌํฌํŠธ๋กœ ํ’€์–ด ์“ธ ๋•Œ' ์ ˆ์˜ ๋Œ€์„น์…˜ ์กฐ๊ฐ ๋ชจ์–‘์œผ๋กœ ๋Œ€์„น์…˜ <id>๋งŒ ์“ด๋‹ค"๋ฅผ ๋ง๋ถ™์ธ๋‹ค.
274
+ 2. **๋„์ž…๊ณผ ํ‚ค์›Œ๋“œ**๋Š” `digest.easy.lead.json`์— ์“ด๋‹ค. ๊ฐ™์€ ์ ˆ์˜ ๋„์ž… ์กฐ๊ฐ ๋ชจ์–‘์ด๋‹ค. ๋ณดํ†ต ๋ฆฌํฌํŠธ๋งŒ ์ฝ๊ณ  ์“ฐ๋ฏ€๋กœ ๋Œ€์„น์…˜ ์กฐ๊ฐ๊ณผ ํ•œ ๋ฉ”์‹œ์ง€์—์„œ ํ•จ๊ป˜ ๋„์›Œ๋„ ๋œ๋‹ค.
275
+ 3. **ํ•ฉ์น˜๊ธฐ**๋Š” ๋ฉ”์ธ์ด jq๋กœ ํ•œ๋‹ค. options์™€ `skipped`๋Š” ๋ณดํ†ต ๋ฆฌํฌํŠธ์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค. ์กฐ๊ฐ์€ ๋ณดํ†ต ๋ฆฌํฌํŠธ์˜ ๋Œ€์„น์…˜ ์ˆœ์„œ๋Œ€๋กœ ์ ๋Š”๋‹ค.
276
+
277
+ ```bash
278
+ jq -n --slurpfile base '<reportPath>' --slurpfile ld '<ํด๋”>/digest.easy.lead.json' \
279
+ '[inputs] as $p | {options: ($base[0].options + {difficulty: "easy"}),
280
+ lead: $ld[0].lead, sections: [$p[].section],
281
+ skipped: ($base[0].skipped // []), keywords: ($ld[0].keywords // [])}' \
282
+ '<ํด๋”>/digest.easy.part-s1.json' '<ํด๋”>/digest.easy.part-s2.json' > '<easyPath>'
283
+ ```
284
+
225
285
  ## Step 3 โ€” ํ•ฉ์น˜๊ธฐ์™€ ๊ฒ€์ฆ
226
286
 
227
287
  ```bash
228
288
  gestalt digest merge '<slug>' '<reportPath>' --json --repo-root '<repoRoot>'
229
289
  ```
230
290
 
231
- ๋ฆฌํฌํŠธ๋ฅผ `digest.json`์˜ `reports[]`์— ํ•ฉ์นœ ๋’ค ์Šคํ‚ค๋งˆ์™€ lint๋ฅผ ๋Œ๋ฆฐ๋‹ค. `digest.json`์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค. ์ถœ๋ ฅ์˜ `index`๊ฐ€ ํ•ฉ์นœ ๋’ค ์ด ๋ฆฌํฌํŠธ์˜ ์ž๋ฆฌ์ด๊ณ  `key`๊ฐ€ ๋ฆฌํฌํŠธ ํ‚ค๋‹ค. ๋‘˜ ๋‹ค ๋ฐ›์•„ ๋‘”๋‹ค.
291
+ ๋ฆฌํฌํŠธ๋ฅผ `digest.json`์˜ `reports[]`์— ํ•ฉ์นœ ๋’ค ์Šคํ‚ค๋งˆ์™€ lint๋ฅผ ๋Œ๋ฆฐ๋‹ค. `digest.json`์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค. ๋ณดํ†ต ๋ฆฌํฌํŠธ๋ฅผ ๋จผ์ € ํ•ฉ์นœ๋‹ค. ํ†ต๊ณผํ•˜๋ฉด Step 2์˜ "์‰ฌ์šด ๋ฆฌํฌํŠธ" ์ ˆ๋กœ ๋Œ์•„๊ฐ€ ์‰ฌ์šด ๋ฆฌํฌํŠธ๋ฅผ ์“ฐ๊ณ  `<reportPath>` ์ž๋ฆฌ์— `<easyPath>`๋ฅผ ๋„ฃ์–ด ์ด Step์„ ํ•œ ๋ฒˆ ๋” ๋ˆ๋‹ค. ์•„๋ž˜์—์„œ ๋ฐ›์•„ ๋‘๋Š” ๊ฐ’๊ณผ ๋‹ค์‹œ ๋งก๊ธฐ๋Š” ํšŸ์ˆ˜๋Š” ๋ฆฌํฌํŠธ๋งˆ๋‹ค ๋”ฐ๋กœ๋‹ค. ์ถœ๋ ฅ์˜ `index`๊ฐ€ ํ•ฉ์นœ ๋’ค ์ด ๋ฆฌํฌํŠธ์˜ ์ž๋ฆฌ์ด๊ณ  `key`๊ฐ€ ๋ฆฌํฌํŠธ ํ‚ค๋‹ค. ๋‘˜ ๋‹ค ๋ฐ›์•„ ๋‘”๋‹ค. `replaced`๋Š” ์ด๋ฒˆ ์‹คํ–‰์—์„œ ์ฒ˜์Œ JSON์„ ๋Œ๋ ค์ค€ merge์˜ ๊ฐ’๋งŒ ๋ฐ›์•„ ๋‘”๋‹ค. ์ €์žฅํ•œ ๋’ค ๋‹ค์‹œ ๋ถ€๋ฅธ merge๋Š” ๋ฐฉ๊ธˆ ์ €์žฅํ•œ ๋ฆฌํฌํŠธ๋ฅผ ๋ฐ”๊ฟ” ๋ผ์šฐ๋ฏ€๋กœ ๋Š˜ true๋กœ ๋‚˜์˜จ๋‹ค.
232
292
 
233
- `saved:false`๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์žˆ์–ด ์ €์žฅํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ค. `issues` ์ค‘ `severity`๊ฐ€ `error`์ธ ๊ฒƒ์˜ `path`์—์„œ `reports.<index>.` ์ ‘๋‘๋ฅผ ๋–ผ๊ณ  `message`์™€ ํ•จ๊ป˜ `video-summarizer`์— ๋‹ค์‹œ ๋„˜๊ฒจ `<reportPath>`์˜ ๊ทธ ์ž๋ฆฌ๋งŒ ๊ณ ์น˜๊ฒŒ ํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ฆฌํฌํŠธ ์ž๋ฆฌ(`reports.<๋‹ค๋ฅธ ๋ฒˆํ˜ธ>.`)์˜ ์˜ค๋ฅ˜๊ฐ€ ์„ž์—ฌ ์žˆ์œผ๋ฉด ์ด๋ฒˆ ๋ฆฌํฌํŠธ ํƒ“์ด ์•„๋‹ˆ๋‹ค. ๊ณ ์น˜๊ฒŒ ํ•˜์ง€ ์•Š๊ณ  ๋ณด๊ณ ์— ์ ๋Š”๋‹ค. ์˜ค๋ฅ˜๊ฐ€ 0๊ฐœ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ merge๋ฅผ ๋‹ค์‹œ ๋ถ€๋ฅธ๋‹ค. ์„ธ ๋ฒˆ์„ ๋„˜๊ธฐ๋ฉด ๋ฉˆ์ถ”๊ณ  ๋‚จ์€ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•œ๋‹ค.
293
+ `saved:false`๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์žˆ์–ด ์ €์žฅํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ค. `issues` ์ค‘ `severity`๊ฐ€ `error`์ธ ๊ฒƒ์˜ `path`์—์„œ `reports.<index>.` ์ ‘๋‘๋ฅผ ๋–ผ๊ณ  `message`์™€ ํ•จ๊ป˜ `video-summarizer`์— ๋‹ค์‹œ ๋„˜๊ฒจ ๊ทธ ๋ฆฌํฌํŠธ ์ดˆ์•ˆ(`<reportPath>`๋‚˜ `<easyPath>`)์˜ ๊ทธ ์ž๋ฆฌ๋งŒ ๊ณ ์น˜๊ฒŒ ํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ฆฌํฌํŠธ ์ž๋ฆฌ(`reports.<๋‹ค๋ฅธ ๋ฒˆํ˜ธ>.`)์˜ ์˜ค๋ฅ˜๊ฐ€ ์„ž์—ฌ ์žˆ์œผ๋ฉด ์ด๋ฒˆ ๋ฆฌํฌํŠธ ํƒ“์ด ์•„๋‹ˆ๋‹ค. ๊ณ ์น˜๊ฒŒ ํ•˜์ง€ ์•Š๊ณ  ๋ณด๊ณ ์— ์ ๋Š”๋‹ค. ์˜ค๋ฅ˜๊ฐ€ 0๊ฐœ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ merge๋ฅผ ๋‹ค์‹œ ๋ถ€๋ฅธ๋‹ค. ์„ธ ๋ฒˆ์„ ๋„˜๊ธฐ๋ฉด ๋ฉˆ์ถ”๊ณ  ๋‚จ์€ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•œ๋‹ค.
234
294
 
235
295
  ๋ฆฌํฌํŠธ ํ˜•์‹์ด ์•„์˜ˆ ํ‹€๋ฆฌ๋ฉด merge๊ฐ€ `๋ฆฌํฌํŠธ ํ˜•์‹ ์˜ค๋ฅ˜:`๋กœ ๋๋‚œ๋‹ค. ๊ทธ ๋ฉ”์‹œ์ง€๋„ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋„˜๊ธด๋‹ค.
236
296
 
237
- `severity`๊ฐ€ `warning`์ธ ๊ฒƒ(์†Œ์„น์…˜ ๊ฐœ์ˆ˜, ๋ถˆ๋ฆฟ ๊ฐœ์ˆ˜)์€ ๋ง‰์ง€ ์•Š๋Š”๋‹ค. ์˜์ƒ์— ๋งž๋Š” ๋ถ„๋Ÿ‰์ด๋ฉด ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค.
297
+ `severity`๊ฐ€ `warning`์ธ ๊ฒƒ(์†Œ์„น์…˜ ๊ฐœ์ˆ˜, ๋ถˆ๋ฆฟ ๊ฐœ์ˆ˜, ๋„์‹ ์ˆ˜)์€ ๋ง‰์ง€ ์•Š๋Š”๋‹ค. ์˜์ƒ์— ๋งž๋Š” ๋ถ„๋Ÿ‰์ด๋ฉด ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค. `DIAGRAM_TOO_FEW`๋Š” ๋ฆฌํฌํŠธ๋งˆ๋‹ค ํ•œ ๋ฒˆ๋งŒ `video-summarizer`์— ๋„˜๊ฒจ ๋‹จ๊ณ„๋‚˜ ๊ฒฌ์ฃผ๊ธฐ, ์‹œ๊ฐ„ ํ๋ฆ„, ์›์ธ๊ณผ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ๋Š” ๋Œ€์„น์…˜์— ๋„์‹์„ ๋” ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด๊ฒŒ ํ•œ๋‹ค. ๋„˜๊ธธ ๋•Œ๋Š” ํ”„๋กฌํ”„ํŠธ์— ๊ฒฝ๊ณ  `message`์™€ "๋„์‹์„ ๋”ํ–ˆ๊ฑฐ๋‚˜ ๋”ํ•  ๊ตฌ์กฐ๊ฐ€ ์—†์œผ๋ฉด Output Format ์„ธ ์ค„ ๋’ค์— `diagrams:` ์ค„๋กœ ์ ๋Š”๋‹ค"๋ฅผ ํ•จ๊ป˜ ์‹ฃ๋Š”๋‹ค. ๋Œ์•„์˜ค๋ฉด ๊ฐ™์€ ์ดˆ์•ˆ ๊ฒฝ๋กœ๋กœ merge๋ฅผ ๋‹ค์‹œ ๋ถ€๋ฅธ๋‹ค. ์ด๋•Œ `DIAGRAM_TOO_FEW`๊ฐ€ ๋˜ ๋‚˜์™€๋„ ๋‹ค์‹œ ๋งก๊ธฐ์ง€ ์•Š๊ณ  `diagrams:` ์ค„์˜ ์ด์œ ๋ฅผ Step 7 ๋ณด๊ณ ์— ์˜ฎ๊ธด๋‹ค.
238
298
 
239
299
  ## Step 3.5 โ€” ํ™•์žฅ ๋ฆฌํฌํŠธ
240
300
 
@@ -290,7 +350,7 @@ Agent {
290
350
  gestalt digest merge '<slug>' '<extPath>' --extension --json --repo-root '<repoRoot>'
291
351
  ```
292
352
 
293
- ์ถœ๋ ฅ์˜ `key`๊ฐ€ ํ™•์žฅ ํ‚ค(`<template>.<lang>`)์ด๊ณ  `index`๊ฐ€ `extensions[]` ์•ˆ์˜ ์ž๋ฆฌ๋‹ค. `saved:false`๋ฉด `issues`์˜ `error` ํ•ญ๋ชฉ์—์„œ `extensions.<index>.` ์ ‘๋‘๋ฅผ ๋–ผ๊ณ  `message`์™€ ํ•จ๊ป˜ ๋‹ค์‹œ ๋งก๊ฒจ `<extPath>`์˜ ๊ทธ ์ž๋ฆฌ๋งŒ ๊ณ ์น˜๊ฒŒ ํ•œ๋‹ค. ์„ธ ๋ฒˆ์„ ๋„˜๊ธฐ๋ฉด ๊ทธ ํ…œํ”Œ๋ฆฟ์€ ๋ฉˆ์ถ”๊ณ  ๋‚จ์€ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•œ๋‹ค. ๋‹ค๋ฅธ ํ…œํ”Œ๋ฆฟ๊ณผ ๋ฆฌํฌํŠธ๋Š” ๊ทธ๋Œ€๋กœ ์ง„ํ–‰ํ•œ๋‹ค.
353
+ ์ถœ๋ ฅ์˜ `key`๊ฐ€ ํ™•์žฅ ํ‚ค(`<template>.<lang>`)์ด๊ณ  `index`๊ฐ€ `extensions[]` ์•ˆ์˜ ์ž๋ฆฌ๋‹ค. `replaced`๋Š” ๋ฆฌํฌํŠธ์ฒ˜๋Ÿผ ์ฒ˜์Œ JSON์„ ๋Œ๋ ค์ค€ merge์˜ ๊ฐ’๋งŒ ๋ฐ›์•„ ๋‘”๋‹ค. `saved:false`๋ฉด `issues`์˜ `error` ํ•ญ๋ชฉ์—์„œ `extensions.<index>.` ์ ‘๋‘๋ฅผ ๋–ผ๊ณ  `message`์™€ ํ•จ๊ป˜ ๋‹ค์‹œ ๋งก๊ฒจ `<extPath>`์˜ ๊ทธ ์ž๋ฆฌ๋งŒ ๊ณ ์น˜๊ฒŒ ํ•œ๋‹ค. ์„ธ ๋ฒˆ์„ ๋„˜๊ธฐ๋ฉด ๊ทธ ํ…œํ”Œ๋ฆฟ์€ ๋ฉˆ์ถ”๊ณ  ๋‚จ์€ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•œ๋‹ค. ๋‹ค๋ฅธ ํ…œํ”Œ๋ฆฟ๊ณผ ๋ฆฌํฌํŠธ๋Š” ๊ทธ๋Œ€๋กœ ์ง„ํ–‰ํ•œ๋‹ค.
294
354
 
295
355
  `BLOCK_NOT_IN_TEMPLATE`์€ ๊ฒฝ๊ณ ์ง€๋งŒ ์˜ค๋ฅ˜์ฒ˜๋Ÿผ ๋‹ค์‹œ ๋งก๊ฒจ ํ…œํ”Œ๋ฆฟ์ด ์ •ํ•œ ๋ธ”๋ก์œผ๋กœ ๊ณ ์น˜๊ฒŒ ํ•œ๋‹ค. ๋ Œ๋”๋Š” ๋˜์ง€๋งŒ ํ…œํ”Œ๋ฆฟ์ด ์•ฝ์†ํ•œ ๋ชจ์–‘๊ณผ ๋‹ฌ๋ผ์ง„๋‹ค. `COMMENT_NOT_FOUND`๋Š” `comments.json`์— ์—†๋Š” ๋Œ“๊ธ€ id๋ฅผ ์ผ๋‹ค๋Š” ๋œป์ด๋‹ค. ๊ณ ์น  ๋•Œ `<commentsPath>`๋ฅผ ๋‹ค์‹œ ์ฝ๊ฒŒ ํ•œ๋‹ค. `COMMENT_TEXT_MISMATCH`๋Š” ์˜ˆ์‹œ ๊ธ€์ž๊ฐ€ ์›๋ฌธ๊ณผ ๋‹ค๋ฅด๋‹ค๋Š” ๋œป์ด๊ณ  merge์—์„œ๋Š” ์˜ค๋ฅ˜, validate์™€ render์—์„œ๋Š” ๊ฒฝ๊ณ ๋‹ค. ๊ณ ์น  ๋•Œ `<commentsPath>`๋ฅผ ๋‹ค์‹œ ์ฝ์–ด ์›๋ฌธ์„ ํ†ต์งธ๋กœ, ๋˜๋Š” ๊ธ€์ž์™€ ์ˆซ์ž 4์ž ์ด์ƒ ์ด์–ด์ง„ ๋ถ€๋ถ„์„ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธฐ๊ฒŒ ํ•œ๋‹ค. `QUOTE_NOT_IN_SOURCE`์™€ `COMMENT_COUNT_EXCEEDS`๋Š” ๊ฒฝ๊ณ ๋ผ ๋ง‰์ง€ ์•Š๋Š”๋‹ค. ์˜ค๋ฅ˜๋ฅผ ๊ณ ์น˜๋Ÿฌ ๋‹ค์‹œ ๋งก๊ธธ ๋•Œ ๊ฒฝ๊ณ  ์ž๋ฆฌ๋„ ํ•จ๊ป˜ ๋„˜๊ฒจ ์›๋ฌธ๋Œ€๋กœ ์˜ฎ๊ธฐ๊ฒŒ ํ•œ๋‹ค.
296
356
 
@@ -300,7 +360,7 @@ gestalt digest merge '<slug>' '<extPath>' --extension --json --repo-root '<repoR
300
360
  gestalt digest frames '<slug>' --repo-root '<repoRoot>'
301
361
  ```
302
362
 
303
- ์˜์ƒ์„ ๋‚ฎ์€ ํ™”์งˆ๋กœ ๋ฐ›์•„ ์†Œ์„น์…˜ ์‹œ๊ฐ๋งˆ๋‹ค ํ•œ ์žฅ์”ฉ ๋ฝ‘๋Š”๋‹ค. ๋ชป ๋ฝ‘์€ ์‹œ๊ฐ์€ ์ถœ๋ ฅ์˜ `๋ชป ๋ฝ‘์€ ์‹œ๊ฐ:` ์ค„์— ๋‚˜์˜จ๋‹ค(`--json`์ด๋ฉด `missing`). ๋ช…๋ น์ด ํ†ต์งธ๋กœ ์‹คํŒจํ•˜๋ฉด ๊ทธ ์˜ค๋ฅ˜๋ฅผ ๋ฐ›์•„ ๋‘”๋‹ค.
363
+ ์˜์ƒ์„ ๋‚ฎ์€ ํ™”์งˆ๋กœ ๋ฐ›์•„ ์†Œ์„น์…˜ ์‹œ๊ฐ๋งˆ๋‹ค ํ•œ ์žฅ์”ฉ ๋ฝ‘๋Š”๋‹ค. ๋ชป ๋ฝ‘์€ ์‹œ๊ฐ์€ ์ถœ๋ ฅ์˜ `๋ชป ๋ฝ‘์€ ์‹œ๊ฐ:` ์ค„์— ๋‚˜์˜จ๋‹ค(`--json`์ด๋ฉด `missing`). ์†Œ์„น์…˜์— `shots`๊ฐ€ ์žˆ์œผ๋ฉด 720p ์˜์ƒ์„ ๋”ฐ๋กœ ๋ฐ›์•„ ๊ทธ ์žฅ๋ฉด๋งŒ ๋ฝ‘์•„์„œ ์Šฌ๋ผ์ด๋“œ ๊ธ€์ž๊ฐ€ ์ฝํžˆ๊ฒŒ ํ•œ๋‹ค. ์ถœ๋ ฅ์˜ `์žฅ๋ฉด N์žฅ ์ค‘` ์ค„์— ๋ฝ‘์€ ์ˆ˜์™€ 720p๋กœ ๋ฝ‘์€ ์ˆ˜๊ฐ€, `๋ชป ๋ฝ‘์€ ์žฅ๋ฉด:` ์ค„์— ๋ชป ๋ฝ‘์€ ์‹œ๊ฐ์ด ๋‚˜์˜จ๋‹ค(`--json`์ด๋ฉด `shots`). 720p ์˜์ƒ์„ ๋ชป ๋ฐ›๊ฑฐ๋‚˜ ๋ชป ์ฝ์œผ๋ฉด ๋‚ฎ์€ ํ™”์งˆ ์˜์ƒ์—์„œ ๋ฝ‘๊ณ  ๊ทธ ์‚ฌ์œ ๋ฅผ ์ถœ๋ ฅ์— ํ•œ ์ค„ ๋‚จ๊ธด๋‹ค(`--json`์ด๋ฉด `shots.hiresFailure`). 720p๋กœ ๋‹ค์‹œ ๋ฝ‘์œผ๋ ค๋ฉด `--force`๋กœ ๋‹ค์‹œ ๋Œ๋ฆฐ๋‹ค. ๋ฐ›์€ 720p ์˜์ƒ์€ `cache/video-720.*`๋กœ ๋‚ฎ์€ ํ™”์งˆ ์˜์ƒ๊ณผ ๋”ฐ๋กœ ๋‚จ์•„์„œ ์˜์ƒ ํ•œ ํŽธ์— ํ•œ ๋ฒŒ์”ฉ ๋” ์Œ“์ธ๋‹ค. ๋ช…๋ น์ด ํ†ต์งธ๋กœ ์‹คํŒจํ•˜๋ฉด ๊ทธ ์˜ค๋ฅ˜๋ฅผ ๋ฐ›์•„ ๋‘”๋‹ค.
304
364
 
305
365
  ์‹คํŒจํ•ด๋„ ๋ Œ๋”๋Š” ๋œ๋‹ค. ํ”„๋ ˆ์ž„ ํŒŒ์ผ์ด ์—†๋Š” ์†Œ์„น์…˜์€ ๋ทฐ์–ด์—์„œ ์ž๋ฆฌ๊ฐ€ ๋น„๊ณ  Step 6 ๋ Œ๋” ๊ฒฝ๊ณ ์— `ํ”„๋ ˆ์ž„์ด ์—†์–ด ์ž๋ฆฌ๋ฅผ ๋น„์› ๋‹ค: <์†Œ์„น์…˜ id> (<ํŒŒ์ผ๋ช…>)`์œผ๋กœ ํ•œ ์ค„์”ฉ ๋‚จ๋Š”๋‹ค. ๋ณด๊ณ ์˜ "ํ”„๋ ˆ์ž„์„ ๋ชป ๋ฝ‘์€ ์†Œ์„น์…˜"์€ ์ด ๋ Œ๋” ๊ฒฝ๊ณ ์—์„œ ์˜ฎ๊ธด๋‹ค. ์‹คํŒจ ์›์ธ์€ frames ์ถœ๋ ฅ์—์„œ ์˜ฎ๊ธด๋‹ค.
306
366
 
@@ -329,12 +389,12 @@ gestalt digest translate-apply '<slug>' '<dir>/translation.part-<a>.json' --json
329
389
 
330
390
  ## Step 5 โ€” ์œค๋ฌธ
331
391
 
332
- ๋ณธ๋ฌธ ๋ฌธ์žฅ๋งŒ ๋‹ค๋“ฌ๋Š”๋‹ค. ์ด๋ฒˆ์— ํ•ฉ์นœ ๋ฆฌํฌํŠธ์˜ ๋ฌธ์žฅ๋งŒ ๋‹ค๋ฃฌ๋‹ค. `digest.json`์„ ํ†ต์งธ๋กœ ๋„˜๊ธฐ์ง€ ์•Š๋Š”๋‹ค. id์™€ ์ถœ์ฒ˜ ๋ฒˆํ˜ธ๊นŒ์ง€ ๋ฌธ์žฅ์ฒ˜๋Ÿผ ๊ณ ์ณ์„œ ์Šคํ‚ค๋งˆ๊ฐ€ ๊นจ์ง„๋‹ค.
392
+ ๋ณธ๋ฌธ ๋ฌธ์žฅ๊ณผ ๊ทธ๋ฆผ ๊ธ€์ž๋ฅผ ๋‹ค๋“ฌ๋Š”๋‹ค. ์ด๋ฒˆ์— ํ•ฉ์นœ ๋ฆฌํฌํŠธ์˜ ๊ฒƒ๋งŒ ๋‹ค๋ฃฌ๋‹ค. ๋ณดํ†ต๊ณผ ์‰ฌ์šด ๋ฆฌํฌํŠธ๋ฅผ ๋‘˜ ๋‹ค ์ƒˆ๋กœ ์ผ์œผ๋ฉด ๋‘˜ ๋‹ค๋‹ค. `digest.json`์„ ํ†ต์งธ๋กœ ๋„˜๊ธฐ์ง€ ์•Š๋Š”๋‹ค. id์™€ ์ถœ์ฒ˜ ๋ฒˆํ˜ธ๊นŒ์ง€ ๋ฌธ์žฅ์ฒ˜๋Ÿผ ๊ณ ์ณ์„œ ์Šคํ‚ค๋งˆ๊ฐ€ ๊นจ์ง„๋‹ค.
333
393
 
334
394
  ์ ˆ์ฐจ๋Š” [`../_shared/research-humanize.md`](../_shared/research-humanize.md)์˜ 1~6๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅธ๋‹ค. 2๋‹จ๊ณ„ ๋ฌถ๊ธฐ์™€ 2.5๋‹จ๊ณ„ ๋ฌถ์Œ ์Šค์บ”, 3๋‹จ๊ณ„ ํ”„๋กฌํ”„ํŠธ์˜ ์ž๋ฃŒ ์ทจ๊ธ‰ ๋ฌธ๊ตฌ์™€ ์ถœ๋ ฅ ํ˜•์‹ ๋ฌธ์žฅ, 5๋‹จ๊ณ„ ์žฌ์‹œ๋„ ์ƒํ•œ์€ ๊ทธ๋Œ€๋กœ ์ง€ํ‚จ๋‹ค. digest์—์„œ ๋‹ค๋ฅธ ์ ์€ ์•„๋ž˜๋ฟ์ด๋‹ค.
335
395
 
336
396
  - ๋„๊ตฌ๋Š” `ges_research` ๋Œ€์‹  `ges_digest`๋‹ค. 1๋‹จ๊ณ„๋Š” `ges_digest { action: "prose_extract", slug, repoRoot }`, 4๋‹จ๊ณ„๋Š” `ges_digest { action: "prose_apply", slug, repoRoot, items }`๋กœ ๋ถ€๋ฅธ๋‹ค. `INVALID_RESEARCH` ๋Œ€์‹  ์Šคํ‚ค๋งˆ ์˜ค๋ฅ˜๊ฐ€ ์˜ค๋ฉด Step 3์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
337
- - `prose_extract`๋Š” ๋ฆฌํฌํŠธ์™€ ํ™•์žฅ ์ „๋ถ€์˜ ๋ฌธ์žฅ์„ ์ค€๋‹ค. path๊ฐ€ `reports.<index>.`๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•ญ๋ชฉ๊ณผ Step 3.5์—์„œ ํ•ฉ์นœ ํ™•์žฅ์˜ `extensions.<index>.` ํ•ญ๋ชฉ๋งŒ ๋‚จ๊ธด๋‹ค. ๋‚˜๋จธ์ง€๋Š” ์ด๋ฏธ ์œค๋ฌธ์„ ๊ฑฐ์ณค๋‹ค. ํ™•์žฅ๋งŒ ๋”ํ•œ ํ˜ธ์ถœ์ด๋ฉด `extensions.<index>.` ํ•ญ๋ชฉ๋งŒ ๋‚จ๊ธด๋‹ค.
397
+ - `prose_extract`๋Š” ๋ฆฌํฌํŠธ์™€ ํ™•์žฅ ์ „๋ถ€์˜ ๋ฌธ์žฅ์„ ์ค€๋‹ค. Step 3์—์„œ ๋ฐ›์•„ ๋‘” ๋ฆฌํฌํŠธ index๋งˆ๋‹ค path๊ฐ€ `reports.<index>.`๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•ญ๋ชฉ๊ณผ Step 3.5์—์„œ ํ•ฉ์นœ ํ™•์žฅ์˜ `extensions.<index>.` ํ•ญ๋ชฉ๋งŒ ๋‚จ๊ธด๋‹ค. ๋‚˜๋จธ์ง€๋Š” ์ด๋ฏธ ์œค๋ฌธ์„ ๊ฑฐ์ณค๋‹ค. ํ™•์žฅ๋งŒ ๋”ํ•œ ํ˜ธ์ถœ์ด๋ฉด `extensions.<index>.` ํ•ญ๋ชฉ๋งŒ ๋‚จ๊ธด๋‹ค.
338
398
  - ํ•ญ๋ชฉ์— `register`๊ฐ€ ์—†๋‹ค. path๊ฐ€ `reports.<index>.lead.`๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋„์ž… ์„ธ ๋ฌธ์žฅ์€ `chat` ๋ฌถ์Œ(ํ•ด์š”์ฒด ์กด๋Œ“๋ง), ๋‚˜๋จธ์ง€๋Š” `report` ๋ฌถ์Œ(ํ‰์„œ์ฒด ~๋‹ค)์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. ํ™•์žฅ ํ•ญ๋ชฉ๋„ `report` ๋ฌถ์Œ์ด๋‹ค. 2.5๋‹จ๊ณ„ `humanize-scan --register`์—๋„ ๊ทธ ๊ฐ’์„ ์ค€๋‹ค.
339
399
  - 3๋‹จ๊ณ„ ํ”„๋กฌํ”„ํŠธ์˜ '์ง€ํ‚ฌ ๊ฒƒ'์—์„œ ํ‘œ์‹ ๋ชฉ๋ก์€ ์•„๋ž˜ ๋งˆ์ปค๋กœ ๋ฐ”๊พผ๋‹ค. (ํ•ด์„) ํƒœ๊ทธ์™€ ์ถœ์ฒ˜ ๊ด„ํ˜ธ, ๋น„๊ตํ‘œ ๊ธฐํ˜ธ, ๊ด€์ฐฐ๊ณผ ํ•ด์„์„ ๊ฐ€๋ฅด๋Š” ์ค„์€ digest์— ์—†์œผ๋‹ˆ ๋บ€๋‹ค.
340
400
  - `**...**` ๊ตต๊ฒŒ. ๊ฐœ์ˆ˜ ๊ทธ๋Œ€๋กœ
@@ -342,6 +402,14 @@ gestalt digest translate-apply '<slug>' '<dir>/translation.part-<a>.json' --json
342
402
  - ์ˆซ์ž. ์›๋ฌธ ๊ผด ๊ทธ๋Œ€๋กœ
343
403
  - URL
344
404
  - 5๋‹จ๊ณ„ `MARKER_MISMATCH`์˜ `missing`๊ณผ `added`๋Š” `๊ตต๊ฒŒ`, `ํ‚ค์›Œ๋“œ:<id>`, `์ˆ˜์น˜:<๊ฐ’>`, `๋งํฌ:<url>` ๊ผด๋กœ ๋‚˜์˜จ๋‹ค.
405
+ - `kind: "label"`์ด ๋ถ™์€ ํ•ญ๋ชฉ์€ ๊ทธ๋ฆผ ์•ˆ ๊ธ€์ž๋‹ค. ๋„์‹ ๋ผ๋ฒจ๊ณผ ์„ค๋ช…, ์žฅ๋ฉด ์„ค๋ช…, ๋งˆ์ธ๋“œ๋งต ๋ผ๋ฒจ์ด ์—ฌ๊ธฐ ์˜จ๋‹ค. ๋ณธ๋ฌธ ๋ฌถ์Œ์— ์„ž์ง€ ์•Š๊ณ  `label` ๋ฌถ์Œ์œผ๋กœ ๋”ฐ๋กœ ๋ณด๋‚ธ๋‹ค. ์นธ์ด ์ข์•„์„œ ๋ณธ๋ฌธ๊ณผ ๊ณ ์น  ๊ธฐ์ค€์ด ๋‹ค๋ฅด๋‹ค.
406
+ - `group`์ด ๊ฐ™์€ ํ•ญ๋ชฉ์€ ํ•œ ๊ทธ๋ฆผ์— ํ•จ๊ป˜ ๋†“์ธ๋‹ค. ๋ฌถ์Œ์„ ์ž๋ฅผ ๋•Œ group์„ ๊ฐ€๋ฅด์ง€ ์•Š๊ณ  ์—์ด์ „ํŠธ์— `path`, `text`, `group`์„ ๋„˜๊ธด๋‹ค.
407
+ - 2.5๋‹จ๊ณ„ ์Šค์บ”์€ `--register report`๋กœ ๋Œ๋ฆฌ๊ณ  E-8(๋ช…์‚ฌ๊ตฌ ์ข…๊ฒฐ)์€ ๊ฒฐ๊ณผ์—์„œ ์ง€์šด๋‹ค. ๋ผ๋ฒจ์€ ๋ช…์‚ฌ๊ตฌ๋กœ ๋๋‚˜๋Š” ๊ฒŒ ๋งž๋‹ค.
408
+ - 3๋‹จ๊ณ„ ํ”„๋กฌํ”„ํŠธ์˜ ๋งํˆฌ ์ค„์€ "๋ช…์‚ฌ๊ตฌ. ๋ฌธ์žฅ์œผ๋กœ ๋Š˜๋ฆฌ์ง€ ์•Š๋Š”๋‹ค"๋กœ ๋ฐ”๊พธ๊ณ  ์ง€ํ‚ฌ ๊ฒƒ ๋์— ์•„๋ž˜๋ฅผ ๋”ํ•œ๋‹ค.
409
+ - ์›๋ฌธ๋ณด๋‹ค ๊ธธ๊ฒŒ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๊ธธ์–ด์ง€๋ฉด ๊ทธ ํ•ญ๋ชฉ์€ ์›๋ฌธ์ด ๋‚จ๋Š”๋‹ค
410
+ - ๊ฐ™์€ group ๋ผ๋ฒจ๋ผ๋ฆฌ ๊ผด์„ ๋งž์ถ˜๋‹ค. ๋น„๊ต ์—ด ์ œ๋ชฉ์ฒ˜๋Ÿผ ์ง์„ ์ด๋ฃจ๋Š” ๋ผ๋ฒจ์€ ํ•œ์ชฝ๋งŒ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค
411
+ - ๋ฒˆ์—ญํˆฌ์™€ '์˜'๊ฐ€ ์ด์–ด์ง€๋Š” ๊ผด, ๊ฐ€์šด๋Žƒ์  ๋‚˜์—ด, ์•ˆ ๊ตณ์€ ์Œ์ฐจ, ๊ณผ์žฅ ์ˆ˜์‹์–ด๋งŒ ๊ณ ์นœ๋‹ค. ๋œป์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ๋‚ด์šฉ์„ ๋” ์ค„์ด์ง€ ์•Š๋Š”๋‹ค
412
+ - 5๋‹จ๊ณ„์—์„œ `LABEL_TOO_LONG`์ด ์˜ค๋ฉด ๋ผ๋ฒจ์ด ์›๋ฌธ๋ณด๋‹ค ๊ธธ์–ด์ง„ ๊ฒƒ์ด๋‹ค. ๊ทธ ํ•ญ๋ชฉ๋งŒ ํ•œ ๋ฒˆ ๋” ๋ณด๋‚ด๋ฉฐ ์ง€ํ‚ฌ ๊ฒƒ ๋์— "์›๋ฌธ ๊ธ€์ž ์ˆ˜ ์ดํ•˜"๋ฅผ ์ ์–ด ์ค€๋‹ค. ๋‘ ๋ฒˆ์งธ๋„ ๊ฑธ๋ฆฌ๋ฉด ์›๋ฌธ์„ ๋‘”๋‹ค.
345
413
  - 6๋‹จ๊ณ„๋Š” ๋‹ค์‹œ ์Šค์บ”๊นŒ์ง€๋งŒ ํ•˜๊ณ  Step 6 ๋ Œ๋”๋กœ ๊ฐ„๋‹ค.
346
414
 
347
415
  ์œค๋ฌธํ•œ ๋ฌธ์žฅ์„ `digest.json`์— ์†์œผ๋กœ ๊ณ ์ณ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค. `prose_apply`๋ฅผ ๊ฑฐ์ณ์•ผ ๋งˆ์ปค ๊ฒ€์‚ฌ๊ฐ€ ๋ˆ๋‹ค.
@@ -352,9 +420,9 @@ gestalt digest translate-apply '<slug>' '<dir>/translation.part-<a>.json' --json
352
420
  ges_digest { action: "render", slug: "<slug>", repoRoot: "<repoRoot>" }
353
421
  ```
354
422
 
355
- `digest.html`(๋ฆฌํฌํŠธ ์ „๋ถ€)๊ณผ `digest.md`(์ฒซ ๋ฆฌํฌํŠธ)๋ฅผ ํ•จ๊ป˜ ์“ด๋‹ค. ๋‹ค๋ฅธ ๋ฆฌํฌํŠธ์˜ ๋งˆํฌ๋‹ค์šด์ด ํ•„์š”ํ•˜๋ฉด `gestalt digest export '<slug>' --md --report '<key>'`๋กœ ๋‚ธ๋‹ค. ํŒŒ์ผ ํ•˜๋‚˜๋กœ ๋“ค๊ณ  ๋‹ค๋‹ HTML์ด ํ•„์š”ํ•˜๋ฉด `inlineFrames: true`๋กœ ๋ถ€๋ฅธ๋‹ค. ํ”„๋ ˆ์ž„ ํ•œ ์žฅ์ด 5MB, ํ•ฉ๊ณ„๊ฐ€ 15MB๋ฅผ ๋„˜์œผ๋ฉด ๊ทธ ํ”„๋ ˆ์ž„์€ ๋„ฃ์ง€ ์•Š๊ณ  ๊ฒฝ๊ณ ๋กœ ์•Œ๋ฆฐ๋‹ค.
423
+ `digest.html`(๋ฆฌํฌํŠธ ์ „๋ถ€)๊ณผ `digest.md`(์ฒซ ๋ฆฌํฌํŠธ)๋ฅผ ํ•จ๊ป˜ ์“ด๋‹ค. ๋‹ค๋ฅธ ๋ฆฌํฌํŠธ์˜ ๋งˆํฌ๋‹ค์šด์ด ํ•„์š”ํ•˜๋ฉด `gestalt digest export '<slug>' --md --report '<key>'`๋กœ ๋‚ธ๋‹ค. ํŒŒ์ผ ํ•˜๋‚˜๋กœ ๋“ค๊ณ  ๋‹ค๋‹ HTML์ด ํ•„์š”ํ•˜๋ฉด `inlineFrames: true`๋กœ ๋ถ€๋ฅธ๋‹ค. ํ”„๋ ˆ์ž„ ํ•œ ์žฅ์ด 5MB, ํ•ฉ๊ณ„๊ฐ€ 15MB๋ฅผ ๋„˜์œผ๋ฉด ๊ทธ ํ”„๋ ˆ์ž„์€ ๋„ฃ์ง€ ์•Š๊ณ  ๊ฒฝ๊ณ ๋กœ ์•Œ๋ฆฐ๋‹ค. ์žฅ๋ฉด์€ ์†Œ์„น์…˜ ํ”„๋ ˆ์ž„๊ณผ ๊ฐ™์€ ํ•ฉ๊ณ„์— ๋“ค์–ด๊ฐ„๋‹ค. ๊ฒฝ๊ณ ์— `์žฅ๋ฉด์„ ๊ฑด๋„ˆ๋›ฐ์—ˆ๋‹ค`๋‚˜ `์žฅ๋ฉด์ด 5MB`๊ฐ€ ๋œจ๋ฉด ์ธ๋ผ์ธ HTML ๋Œ€์‹  serve๋กœ ๋ณธ๋‹ค.
356
424
 
357
- `RENDER_BLOCKED`๊ฐ€ ์˜ค๋ฉด ์‘๋‹ต์˜ `lintErrors`๋ฅผ ๋ณด๊ณ  ์ด๋ฒˆ ๋ฆฌํฌํŠธ ์ž๋ฆฌ๋ฉด Step 3์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค. ๋‹ค๋ฅธ ๋ฆฌํฌํŠธ ์ž๋ฆฌ๋ฉด ๊ณ ์น˜์ง€ ์•Š๊ณ  ๋ณด๊ณ ํ•˜๊ณ  ๋ฉˆ์ถ˜๋‹ค. `RENDER_FAILED`๋Š” lint์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํŒŒ์ผ์„ ๋ชป ์“ด ๊ฒฝ์šฐ๋ผ Step 3์œผ๋กœ ๋Œ์•„๊ฐ€์ง€ ์•Š๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณด๊ณ ํ•˜๊ณ  ๋ฉˆ์ถ˜๋‹ค.
425
+ `RENDER_BLOCKED`๊ฐ€ ์˜ค๋ฉด ์‘๋‹ต์˜ `lintErrors`๋ฅผ ๋ณด๊ณ  ์ด๋ฒˆ์— ํ•ฉ์นœ ๋ฆฌํฌํŠธ ์ž๋ฆฌ๋ฉด Step 3์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค. ๋‹ค๋ฅธ ๋ฆฌํฌํŠธ ์ž๋ฆฌ๋ฉด ๊ณ ์น˜์ง€ ์•Š๊ณ  ๋ณด๊ณ ํ•˜๊ณ  ๋ฉˆ์ถ˜๋‹ค. `RENDER_FAILED`๋Š” lint์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํŒŒ์ผ์„ ๋ชป ์“ด ๊ฒฝ์šฐ๋ผ Step 3์œผ๋กœ ๋Œ์•„๊ฐ€์ง€ ์•Š๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณด๊ณ ํ•˜๊ณ  ๋ฉˆ์ถ˜๋‹ค.
358
426
 
359
427
  ## Step 7 โ€” ๋„์šฐ๊ธฐ์™€ ๋ณด๊ณ 
360
428
 
@@ -386,11 +454,13 @@ gestalt digest export '<slug>' --md --repo-root '<repoRoot>' [--report '<key>']
386
454
  - serve๋กœ ๋„์› ์œผ๋ฉด ๋ทฐ์–ด ์ฃผ์†Œ์™€ ๋„๋Š” ๋ฒ•. ์ธ๋ผ์ธ HTML์ด๋ฉด ๊ทธ ๊ฒฝ๋กœ์™€ serve๋ฅผ ๋ถ€๋ฅด๋ฉด ๋ฎ์ธ๋‹ค๋Š” ๊ฒƒ
387
455
  - ์ž๋ง‰ ์ถœ์ฒ˜์™€ ๋ฌธ์žฅ ์ˆ˜
388
456
  - ๋ฒˆ์—ญ์„ ๋ถ™์˜€์œผ๋ฉด ๊ทธ ์–ธ์–ด์™€ ๋น ์ง„ ๋ฌธ์žฅ ์ˆ˜
389
- - ํ™”๋ฉด ๊ธ€์ž๋ฅผ ์ฝ์—ˆ์œผ๋ฉด `ocr.json` ๊ฒฝ๋กœ์™€ ํ•ญ๋ชฉ ์ˆ˜. ๋ชป ์ฝ์—ˆ์œผ๋ฉด ๊ทธ ์ด์œ 
390
- - ๋ฆฌํฌํŠธ ํ‚ค์™€ ์ƒˆ๋กœ ๋ถ™์˜€๋Š”์ง€ ๋ฐ”๊ฟ” ๋ผ์› ๋Š”์ง€
391
- - ํ™•์žฅ ํ‚ค์™€ ์ƒˆ๋กœ ๋ถ™์˜€๋Š”์ง€ ๋ฐ”๊ฟ” ๋ผ์› ๋Š”์ง€. ๊ฑด๋„ˆ๋›ด ํ…œํ”Œ๋ฆฟ๊ณผ ์ด์œ (์—†๋Š” ํ…œํ”Œ๋ฆฟ, ๋Œ“๊ธ€์„ ๋ชป ๋ฐ›์Œ, ์˜ค๋ฅ˜๊ฐ€ ๋‚จ์Œ)
457
+ - ํ™”๋ฉด ๊ธ€์ž๋ฅผ ์ฝ์—ˆ์œผ๋ฉด `ocr.json` ๊ฒฝ๋กœ์™€ ํ•ญ๋ชฉ ์ˆ˜. ์‹œ๊ฐ ๋กœ๊ทธ๊ฐ€ ๋ชจ์ž๋ž์œผ๋ฉด ๊ทธ ์ค„์˜ N๊ณผ M. ๋ชป ์ฝ์—ˆ์œผ๋ฉด ๊ทธ ์ด์œ 
458
+ - ์ด๋ฒˆ์— ๋งŒ๋“  ๋ฆฌํฌํŠธ๋งˆ๋‹ค ํ‚ค์™€ ์ƒˆ๋กœ ๋ถ™์˜€๋Š”์ง€ ๋ฐ”๊ฟ” ๋ผ์› ๋Š”์ง€(Step 3์—์„œ ๋ฆฌํฌํŠธ๋งˆ๋‹ค ์ฒ˜์Œ ๋ฐ›์•„ ๋‘” `replaced`). ์ด๋ฏธ ์žˆ์–ด ๊ฑด๋„ˆ๋›ด ๋‚œ์ด๋„๋Š” ๊ทธ ํ‚ค
459
+ - ํ™•์žฅ ํ‚ค์™€ ์ƒˆ๋กœ ๋ถ™์˜€๋Š”์ง€ ๋ฐ”๊ฟ” ๋ผ์› ๋Š”์ง€(Step 3.5์—์„œ ์ฒ˜์Œ ๋ฐ›์•„ ๋‘” `replaced`). ๊ฑด๋„ˆ๋›ด ํ…œํ”Œ๋ฆฟ๊ณผ ์ด์œ (์—†๋Š” ํ…œํ”Œ๋ฆฟ, ๋Œ“๊ธ€์„ ๋ชป ๋ฐ›์Œ, ์˜ค๋ฅ˜๊ฐ€ ๋‚จ์Œ)
392
460
  - ๋Œ“๊ธ€์„ ๋ฐ›์•˜์œผ๋ฉด ๋ฐ›์€ ๊ฐœ์ˆ˜
393
461
  - ๋Œ€์„น์…˜๊ณผ ์†Œ์„น์…˜, ํ‚ค์›Œ๋“œ ๊ฐœ์ˆ˜. `skipped` ๊ตฌ๊ฐ„๊ณผ ์ด์œ 
462
+ - ๋ฆฌํฌํŠธ๋งˆ๋‹ค ๋„์‹ ๊ฐœ์ˆ˜์™€ ์ข…๋ฅ˜(`flow` 2, `timeline` 1์ฒ˜๋Ÿผ). `DIAGRAM_TOO_FEW`๊ฐ€ ๋‚จ์•˜์œผ๋ฉด ๊ทธ ์ด์œ (`video-summarizer`๊ฐ€ ๋Œ๋ ค์ค€ `diagrams:` ์ค„)
463
+ - ํ›„๋ณด ์žฅ๋ฉด์„ ๊ณจ๋ž์œผ๋ฉด ํ›„๋ณด ์ˆ˜(์†Ž์•˜์œผ๋ฉด ์†Ž๊ธฐ ์ „ ์ˆ˜๋„)์™€ ๋ฆฌํฌํŠธ์— ์‹ค์€ `shots` ์ˆ˜, 720p๋กœ ๋ฝ‘์€ ์ˆ˜. ๋ชป ๊ณจ๋ž์œผ๋ฉด ๊ทธ ์ด์œ (ํ™”๋ฉด ๊ธ€์ž๋ฅผ ์•ˆ ์ฝ์Œ, ๋ช…๋ น ์‹คํŒจ)
394
464
  - merge๋ฅผ ๋ช‡ ๋ฒˆ ๋Œ์•˜๋Š”์ง€์™€ ๋‚จ์€ ๊ฒฝ๊ณ 
395
465
  - ์œค๋ฌธ ๊ฒฐ๊ณผ. ๋„ฃ์€ ๊ฐœ์ˆ˜์™€ ์›๋ฌธ์„ ๋‘” ํ•ญ๋ชฉ(path์™€ ๊ฒฝ๊ณ  `code`), ๋‹ค์‹œ ์Šค์บ”ํ•ด์„œ ๋‚จ์€ S1
396
466
  - ํ”„๋ ˆ์ž„์„ ๋ชป ๋ฝ‘์€ ์†Œ์„น์…˜(Step 6 ๋ Œ๋” ๊ฒฝ๊ณ ์—์„œ)๊ณผ frames ์‹คํŒจ ์›์ธ
@@ -400,9 +470,11 @@ gestalt digest export '<slug>' --md --repo-root '<repoRoot>' [--report '<key>']
400
470
  - lint ์˜ค๋ฅ˜๊ฐ€ ๋‚จ์€ ์ฑ„๋กœ ๋ Œ๋”ํ•˜์ง€ ์•Š๋Š”๋‹ค.
401
471
  - HTML์ด๋‚˜ ๋งˆํฌ๋‹ค์šด์„ ์†์œผ๋กœ ์“ฐ๊ฑฐ๋‚˜ ๊ณ ์น˜์ง€ ์•Š๋Š”๋‹ค. ๊ณ ์น  ๊ฒŒ ์žˆ์œผ๋ฉด ๋ฆฌํฌํŠธ ํŒŒ์ผ์„ ๊ณ ์ณ ๋‹ค์‹œ mergeํ•˜๊ณ  ๋‹ค์‹œ ๋ Œ๋”ํ•œ๋‹ค.
402
472
  - `digest.json`์˜ `reports[]`๋ฅผ ์†์œผ๋กœ ์ด์–ด ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค. merge๋ฅผ ๊ฑฐ์ณ์•ผ ๊ฐ™์€ ํ‚ค์˜ ๋ฆฌํฌํŠธ๊ฐ€ ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค.
473
+ - ์‰ฌ์šด ๋ฆฌํฌํŠธ๋ฅผ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋”ฐ๋กœ ์š”์•ฝํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ณดํ†ต ๋ฆฌํฌํŠธ๋ฅผ ํ’€์–ด ์จ์•ผ ๋‘ ๋ฆฌํฌํŠธ์˜ ๊ตฌ์กฐ๊ฐ€ ๋งž๋Š”๋‹ค.
403
474
  - ์ถœ์ฒ˜ ๋ฒˆํ˜ธ๋ฅผ ๋ฌธ์žฅ์— ๋งž์ถฐ ์ง์ž‘์œผ๋กœ ๊ณ ์น˜์ง€ ์•Š๋Š”๋‹ค. ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•ด๋‹น ๋ฌธ์žฅ์„ ์ฐพ์•„ ๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•œ๋‹ค.
404
475
  - ํ™”๋ฉด ๊ธ€์ž๋Š” `ocr`์ด true์ผ ๋•Œ๋งŒ ์ฝ๋Š”๋‹ค. ํ™”๋ฉด์—๋งŒ ์žˆ๋Š” ๋‚ด์šฉ์„ ์ถœ์ฒ˜ ์—†์ด ์š”์•ฝ์— ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.
405
476
  - ํ™•์žฅ ๋ฆฌํฌํŠธ์— ํ…œํ”Œ๋ฆฟ์ด ์ •ํ•œ ๋ธ”๋ก ๋ฐ–์˜ ํƒ€์ž…์„ ์“ฐ๊ฒŒ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
406
- - ๋ชจ๋ธ์ด ์“ด SVG๋‚˜ HTML ์›๋ฌธ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ๋„์‹๊ณผ ๋งˆ์ธ๋“œ๋งต์€ ๋ Œ๋”๋Ÿฌ๊ฐ€ ๊ตฌ์กฐ๋กœ ๊ทธ๋ฆฐ๋‹ค.
477
+ - ๋ชจ๋ธ์ด ์“ด SVG๋‚˜ HTML ์›๋ฌธ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ๋„์‹๊ณผ ๋งˆ์ธ๋“œ๋งต, ๊ทธ๋ฆผ ํ•ด์„ค์€ ๋ Œ๋”๋Ÿฌ๊ฐ€ ๊ตฌ์กฐ๋กœ ๊ทธ๋ฆฐ๋‹ค.
478
+ - ์‚ฌ๋žŒ๋งŒ ๋‚˜์˜ค๋Š” ์žฅ๋ฉด์„ `shots`๋กœ ์‹ฃ์ง€ ์•Š๋Š”๋‹ค. ์žฅ๋ฉด์€ ๊ธ€์ด๋‚˜ ๊ทธ๋ฆผ์ด ๋ณด์ด๋Š” ํ™”๋ฉด๋งŒ ๊ณ ๋ฅธ๋‹ค.
407
479
  - ๋Œ“๊ธ€ ์ž‘์„ฑ์ž ์ด๋ฆ„์ด๋‚˜ ์•„์ด๋””, ํ”„๋กœํ•„์„ ์–ด๋””์—๋„ ์˜ฎ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
408
480
  - ์นดํˆฐ์ด๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜, ํŒŸ์บ์ŠคํŠธ๋Š” ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. ๋ฐœํ‘œ ์ž๋ฃŒ๋ฅผ ์›ํ•˜๋ฉด `presentation` ์Šคํ‚ฌ์„ ์•ˆ๋‚ดํ•œ๋‹ค.