@kywk/open-slide-core 2.3.1 → 2.3.3

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 (55) hide show
  1. package/dist/{build-CZ6Qtrng.js → build-46dO14h1.js} +1 -1
  2. package/dist/cli/bin.js +4 -4
  3. package/dist/{config-CpmGqpQi.d.ts → config-DJ8ZOe7C.d.ts} +6 -2
  4. package/dist/{config-B5LArqpp.js → config-KyYvWqq-.js} +2061 -355
  5. package/dist/{dev-CCgdakbZ.js → dev-C0n-o0-c.js} +2 -2
  6. package/dist/index.d.ts +3 -3
  7. package/dist/index.js +73 -32
  8. package/dist/locale/index.d.ts +1 -1
  9. package/dist/locale/index.js +1 -1
  10. package/dist/{preview-AwAqvG17.js → preview-CDWAGSfB.js} +1 -1
  11. package/dist/{types-CvAqFqsY.d.ts → types-tdaXSyah.d.ts} +111 -0
  12. package/dist/{update-C_RlnKu4.js → update-CqZqQRQk.js} +128 -7
  13. package/dist/vite/index.d.ts +1 -1
  14. package/dist/vite/index.js +1 -1
  15. package/dist/{zh-tw-B7_Oqv2q.js → zh-tw-DXcqQTrA.js} +540 -0
  16. package/package.json +10 -3
  17. package/src/agent/prompt.ts +141 -0
  18. package/src/agent/provider.ts +123 -0
  19. package/src/agent/types.ts +151 -0
  20. package/src/app/components/agent/agent-dock.tsx +35 -0
  21. package/src/app/components/agent/agent-markdown.tsx +45 -0
  22. package/src/app/components/agent/agent-panel.tsx +692 -0
  23. package/src/app/components/agent/agent-presence.tsx +74 -0
  24. package/src/app/components/agent/composer.tsx +120 -0
  25. package/src/app/components/agent/connect-view.tsx +184 -0
  26. package/src/app/components/agent/history-view.tsx +135 -0
  27. package/src/app/components/agent/provider-logo.tsx +34 -0
  28. package/src/app/components/agent/transcript.tsx +609 -0
  29. package/src/app/components/command/slide-command-menu.tsx +10 -0
  30. package/src/app/components/inline-svg.tsx +52 -21
  31. package/src/app/components/inspector/comment-layer.tsx +20 -1
  32. package/src/app/components/inspector/image-crop-dialog.tsx +1 -5
  33. package/src/app/components/inspector/inspector-panel.tsx +1 -1
  34. package/src/app/components/mermaid.tsx +42 -11
  35. package/src/app/components/panel/editor-sidebar.tsx +85 -16
  36. package/src/app/components/panel/panel-shell.tsx +2 -2
  37. package/src/app/components/panel/resize-handle.tsx +129 -0
  38. package/src/app/components/player.tsx +105 -23
  39. package/src/app/components/present/curtain.tsx +52 -0
  40. package/src/app/components/present/last-slide-hint.tsx +36 -0
  41. package/src/app/components/slide-canvas.tsx +1 -1
  42. package/src/app/components/thumbnail-rail.tsx +1 -1
  43. package/src/app/lib/agent/use-agent.ts +543 -0
  44. package/src/app/lib/use-auto-grow.ts +15 -0
  45. package/src/app/lib/utils.ts +4 -0
  46. package/src/app/routes/home.tsx +51 -7
  47. package/src/app/routes/slide.tsx +172 -116
  48. package/src/app/styles.css +170 -0
  49. package/src/editing/placeholder-id.ts +1 -0
  50. package/src/locale/en.ts +107 -0
  51. package/src/locale/es.ts +109 -0
  52. package/src/locale/ja.ts +100 -0
  53. package/src/locale/types.ts +110 -0
  54. package/src/locale/zh-cn.ts +97 -0
  55. package/src/locale/zh-tw.ts +97 -0
@@ -91,6 +91,7 @@ const en = {
91
91
  pickIcon: "Pick icon"
92
92
  },
93
93
  slide: {
94
+ resizeSidePanel: "Resize side panel",
94
95
  home: "Home",
95
96
  backToHome: "Back to home",
96
97
  agentConnected: "Agent connected",
@@ -167,6 +168,7 @@ const en = {
167
168
  helpAria: "Keyboard shortcuts (?)",
168
169
  exitAria: "Exit (Esc)",
169
170
  elapsedTime: "Elapsed time",
171
+ lastSlideHint: "Last slide · Press Esc to exit",
170
172
  helpEyebrow: "Present mode",
171
173
  helpTitle: "Keyboard shortcuts",
172
174
  shortcutNext: "Next slide",
@@ -516,6 +518,112 @@ const en = {
516
518
  usedByEmpty: "No slides use this theme yet.",
517
519
  expandPromptAria: "Expand prompt",
518
520
  collapsePromptAria: "Collapse prompt"
521
+ },
522
+ agent: {
523
+ title: "Agent",
524
+ beta: "Beta",
525
+ betaTitle: "Early preview",
526
+ betaHint: "Replies, edits and tool calls can occasionally fail or do something unexpected.",
527
+ open: "Agent",
528
+ openTitle: "Open the agent panel",
529
+ close: "Close agent panel",
530
+ newSession: "New chat",
531
+ sessions: "History",
532
+ noSessions: "No conversations yet.",
533
+ deleteSession: "Delete conversation",
534
+ historyThisDeck: "This deck",
535
+ historyOtherDecks: "Other decks",
536
+ historyEmptyHint: "Chats you start in this panel show up here.",
537
+ sessionRunning: "Working",
538
+ composerPlaceholder: "Ask {provider} to create or edit slides…",
539
+ send: "Send",
540
+ stop: "Stop",
541
+ working: "Working",
542
+ contextPage: "Page {n}",
543
+ contextSelection: "Selection",
544
+ pendingComments: {
545
+ one: "{count} comment",
546
+ other: "{count} comments"
547
+ },
548
+ applyComments: "Apply comments",
549
+ applyCommentsWith: "Apply with {provider}",
550
+ createDeck: "New deck",
551
+ createDeckWith: "Create a deck with {provider}",
552
+ quickCreate: "Draft a new deck",
553
+ quickCreateHint: "Opens a blank deck; describe it and the agent drafts it page by page.",
554
+ quickApply: "Apply pending comments",
555
+ quickApplyHint: "Resolves every @slide-comment marker in this slide.",
556
+ quickTheme: "Create a theme",
557
+ quickThemeHint: "Extracts or designs a reusable theme under themes/.",
558
+ quickEdit: "Edit this page",
559
+ quickEditHint: "Describe a change to the page you are viewing.",
560
+ emptyTitle: "What should we build?",
561
+ emptyHint: "Describe a deck, or pick a starting point.",
562
+ questionSubmit: "Continue",
563
+ questionOther: "Other",
564
+ questionOtherPlaceholder: "Type your own answer",
565
+ questionCancelled: "Dismissed",
566
+ permissionTitle: "Needs approval",
567
+ allow: "Allow",
568
+ deny: "Deny",
569
+ allowed: "Allowed",
570
+ denied: "Denied",
571
+ autoApprove: "Auto-approve",
572
+ autoApproveHint: "Run commands without asking. Edits inside the workspace are always allowed.",
573
+ resultDone: "Done",
574
+ resultStopped: "Stopped",
575
+ resultSeconds: "{seconds}s",
576
+ errorEyebrow: "Error",
577
+ statusLoading: "Checking agents",
578
+ disabled: "The agent panel is disabled in open-slide.config.ts.",
579
+ connectTitle: "Connect an agent",
580
+ connectDescription: "Drive your coding agent from here instead of a terminal. Agents installed on this machine connect automatically and reuse their sign-in.",
581
+ connect: "Connect",
582
+ connecting: "Connecting",
583
+ connected: "Connected",
584
+ connectInstallHint: "Adds {pkg} to this workspace with {pm}.",
585
+ cliFound: "CLI found · v{version}",
586
+ cliFoundNoVersion: "CLI found",
587
+ cliMissing: "CLI not found on PATH",
588
+ cliHint: "Install the {name} CLI and sign in once; the panel reuses its login.",
589
+ needCliTitle: "Install Claude Code or Codex first",
590
+ needCliDescription: "The panel drives the coding agent CLI on this machine, and none was found on your PATH. Install one, sign in once in a terminal, then check again.",
591
+ checkAgain: "Check again",
592
+ retry: "Retry",
593
+ toastConnected: "{name} connected",
594
+ toastConnectFailed: "Could not install {pkg}",
595
+ manageConnections: "Manage agents",
596
+ backToChat: "Back",
597
+ toastSendFailed: "Could not send message",
598
+ newDeckTitle: "What's this deck about?",
599
+ newDeckHint: "Describe the topic, audience and tone. {provider} drafts it page by page while you watch.",
600
+ newDeckPlaceholder: "A 10-minute talk on…",
601
+ toastCreateDeckFailed: "Could not create a deck",
602
+ steps: {
603
+ one: "{count} step",
604
+ other: "{count} steps"
605
+ },
606
+ questionSkip: "Skip",
607
+ copyMessage: "Copy",
608
+ copied: "Copied",
609
+ editMessage: "Edit",
610
+ cancelEdit: "Cancel",
611
+ sendEdit: "Send",
612
+ editHint: "Sending replaces the conversation after this message. Edits already made to files stay.",
613
+ modelDefault: "Default",
614
+ reasoning: "Reasoning",
615
+ effortAuto: "Auto",
616
+ efforts: {
617
+ minimal: "Minimal",
618
+ low: "Low",
619
+ medium: "Medium",
620
+ high: "High",
621
+ xhigh: "Extra high",
622
+ max: "Max"
623
+ },
624
+ presenceEditing: "{provider} is editing",
625
+ presenceThinking: "Thinking",
626
+ presenceWaiting: "Waiting for you"
519
627
  }
520
628
  };
521
629
  //#endregion
@@ -612,6 +720,7 @@ const es = {
612
720
  pickIcon: "Elegir icono"
613
721
  },
614
722
  slide: {
723
+ resizeSidePanel: "Redimensionar panel lateral",
615
724
  home: "Inicio",
616
725
  backToHome: "Volver al inicio",
617
726
  agentConnected: "Agente conectado",
@@ -688,6 +797,7 @@ const es = {
688
797
  helpAria: "Atajos de teclado (?)",
689
798
  exitAria: "Salir (Esc)",
690
799
  elapsedTime: "Tiempo transcurrido",
800
+ lastSlideHint: "Última diapositiva · Pulsa Esc para salir",
691
801
  helpEyebrow: "Modo presentación",
692
802
  helpTitle: "Atajos de teclado",
693
803
  shortcutNext: "Diapositiva siguiente",
@@ -1037,6 +1147,112 @@ const es = {
1037
1147
  usedByEmpty: "Ninguna presentación usa este tema todavía.",
1038
1148
  expandPromptAria: "Expandir prompt",
1039
1149
  collapsePromptAria: "Contraer prompt"
1150
+ },
1151
+ agent: {
1152
+ title: "Agente",
1153
+ beta: "Beta",
1154
+ betaTitle: "Versión preliminar",
1155
+ betaHint: "Las respuestas, ediciones y acciones pueden fallar o hacer algo inesperado de vez en cuando.",
1156
+ open: "Agente",
1157
+ openTitle: "Abrir el panel del agente",
1158
+ close: "Cerrar el panel del agente",
1159
+ newSession: "Nuevo chat",
1160
+ sessions: "Historial",
1161
+ noSessions: "Todavía no hay conversaciones.",
1162
+ deleteSession: "Eliminar conversación",
1163
+ historyThisDeck: "Esta presentación",
1164
+ historyOtherDecks: "Otras presentaciones",
1165
+ historyEmptyHint: "Los chats que empieces en este panel aparecen aquí.",
1166
+ sessionRunning: "En curso",
1167
+ composerPlaceholder: "Pídele a {provider} que cree o edite diapositivas…",
1168
+ send: "Enviar",
1169
+ stop: "Detener",
1170
+ working: "Trabajando",
1171
+ contextPage: "Página {n}",
1172
+ contextSelection: "Selección",
1173
+ pendingComments: {
1174
+ one: "{count} comentario",
1175
+ other: "{count} comentarios"
1176
+ },
1177
+ applyComments: "Aplicar comentarios",
1178
+ applyCommentsWith: "Aplicar con {provider}",
1179
+ createDeck: "Nueva presentación",
1180
+ createDeckWith: "Crear una presentación con {provider}",
1181
+ quickCreate: "Redactar una nueva presentación",
1182
+ quickCreateHint: "Abre una presentación en blanco; descríbela y el agente la redacta página a página.",
1183
+ quickApply: "Aplicar comentarios pendientes",
1184
+ quickApplyHint: "Resuelve todos los marcadores @slide-comment de esta presentación.",
1185
+ quickTheme: "Crear un tema",
1186
+ quickThemeHint: "Extrae o diseña un tema reutilizable en themes/.",
1187
+ quickEdit: "Editar esta página",
1188
+ quickEditHint: "Describe un cambio para la página que estás viendo.",
1189
+ emptyTitle: "¿Qué construimos?",
1190
+ emptyHint: "Describe una presentación o elige un punto de partida.",
1191
+ questionSubmit: "Continuar",
1192
+ questionOther: "Otra",
1193
+ questionOtherPlaceholder: "Escribe tu propia respuesta",
1194
+ questionCancelled: "Descartada",
1195
+ permissionTitle: "Requiere aprobación",
1196
+ allow: "Permitir",
1197
+ deny: "Denegar",
1198
+ allowed: "Permitido",
1199
+ denied: "Denegado",
1200
+ autoApprove: "Aprobar automáticamente",
1201
+ autoApproveHint: "Ejecuta comandos sin preguntar. Las ediciones dentro del workspace siempre se permiten.",
1202
+ resultDone: "Listo",
1203
+ resultStopped: "Detenido",
1204
+ resultSeconds: "{seconds}s",
1205
+ errorEyebrow: "Error",
1206
+ statusLoading: "Comprobando agentes",
1207
+ disabled: "El panel del agente está desactivado en open-slide.config.ts.",
1208
+ connectTitle: "Conectar un agente",
1209
+ connectDescription: "Dirige tu agente de código desde aquí en lugar de una terminal. Los agentes instalados en esta máquina se conectan solos y reutilizan su sesión.",
1210
+ connect: "Conectar",
1211
+ connecting: "Conectando",
1212
+ connected: "Conectado",
1213
+ connectInstallHint: "Añade {pkg} a este workspace con {pm}.",
1214
+ cliFound: "CLI encontrada · v{version}",
1215
+ cliFoundNoVersion: "CLI encontrada",
1216
+ cliMissing: "CLI no encontrada en el PATH",
1217
+ cliHint: "Instala la CLI de {name} e inicia sesión una vez; el panel reutiliza esa sesión.",
1218
+ needCliTitle: "Instala Claude Code o Codex primero",
1219
+ needCliDescription: "El panel dirige la CLI del agente de código de esta máquina y no se encontró ninguna en el PATH. Instala una, inicia sesión una vez en una terminal y vuelve a comprobar.",
1220
+ checkAgain: "Volver a comprobar",
1221
+ retry: "Reintentar",
1222
+ toastConnected: "{name} conectado",
1223
+ toastConnectFailed: "No se pudo instalar {pkg}",
1224
+ manageConnections: "Gestionar agentes",
1225
+ backToChat: "Volver",
1226
+ toastSendFailed: "No se pudo enviar el mensaje",
1227
+ newDeckTitle: "¿De qué trata esta presentación?",
1228
+ newDeckHint: "Describe el tema, la audiencia y el tono. {provider} la redacta página a página mientras miras.",
1229
+ newDeckPlaceholder: "Una charla de 10 minutos sobre…",
1230
+ toastCreateDeckFailed: "No se pudo crear la presentación",
1231
+ steps: {
1232
+ one: "{count} paso",
1233
+ other: "{count} pasos"
1234
+ },
1235
+ questionSkip: "Omitir",
1236
+ copyMessage: "Copiar",
1237
+ copied: "Copiado",
1238
+ editMessage: "Editar",
1239
+ cancelEdit: "Cancelar",
1240
+ sendEdit: "Enviar",
1241
+ editHint: "Al enviar se reemplaza la conversación posterior a este mensaje. Los cambios en archivos se mantienen.",
1242
+ modelDefault: "Predeterminado",
1243
+ reasoning: "Razonamiento",
1244
+ effortAuto: "Auto",
1245
+ efforts: {
1246
+ minimal: "Mínimo",
1247
+ low: "Bajo",
1248
+ medium: "Medio",
1249
+ high: "Alto",
1250
+ xhigh: "Muy alto",
1251
+ max: "Máximo"
1252
+ },
1253
+ presenceEditing: "{provider} está editando",
1254
+ presenceThinking: "Pensando",
1255
+ presenceWaiting: "Esperando tu respuesta"
1040
1256
  }
1041
1257
  };
1042
1258
  //#endregion
@@ -1133,6 +1349,7 @@ const ja = {
1133
1349
  pickIcon: "アイコンを選択"
1134
1350
  },
1135
1351
  slide: {
1352
+ resizeSidePanel: "サイドパネルの幅を調整",
1136
1353
  agentConnected: "エージェント接続中",
1137
1354
  agentConnectedTooltip: "現在のスライドと Inspector の選択はエージェントにリアルタイムで同期されています。",
1138
1355
  agentDisconnected: "エージェント切断",
@@ -1209,6 +1426,7 @@ const ja = {
1209
1426
  helpAria: "キーボードショートカット (?)",
1210
1427
  exitAria: "終了 (Esc)",
1211
1428
  elapsedTime: "経過時間",
1429
+ lastSlideHint: "最後のスライドです · Esc で終了",
1212
1430
  helpEyebrow: "発表モード",
1213
1431
  helpTitle: "キーボードショートカット",
1214
1432
  shortcutNext: "次のスライド",
@@ -1558,6 +1776,112 @@ const ja = {
1558
1776
  usedByEmpty: "このテーマを使うスライドはまだありません。",
1559
1777
  expandPromptAria: "プロンプトを展開",
1560
1778
  collapsePromptAria: "プロンプトを折りたたむ"
1779
+ },
1780
+ agent: {
1781
+ title: "エージェント",
1782
+ beta: "Beta",
1783
+ betaTitle: "プレビュー版",
1784
+ betaHint: "返答・編集・ツール実行が失敗したり、思わぬ動作をしたりすることがあります。",
1785
+ open: "エージェント",
1786
+ openTitle: "エージェントパネルを開く",
1787
+ close: "エージェントパネルを閉じる",
1788
+ newSession: "新しいチャット",
1789
+ sessions: "履歴",
1790
+ noSessions: "まだ会話はありません。",
1791
+ deleteSession: "会話を削除",
1792
+ historyThisDeck: "このデッキ",
1793
+ historyOtherDecks: "他のデッキ",
1794
+ historyEmptyHint: "このパネルで始めた会話がここに表示されます。",
1795
+ sessionRunning: "実行中",
1796
+ composerPlaceholder: "{provider} にスライドの作成や編集を依頼…",
1797
+ send: "送信",
1798
+ stop: "停止",
1799
+ working: "処理中",
1800
+ contextPage: "{n} ページ目",
1801
+ contextSelection: "選択中",
1802
+ pendingComments: {
1803
+ one: "{count} 件のコメント",
1804
+ other: "{count} 件のコメント"
1805
+ },
1806
+ applyComments: "コメントを適用",
1807
+ applyCommentsWith: "{provider} で適用",
1808
+ createDeck: "新しいデッキ",
1809
+ createDeckWith: "{provider} でデッキを作成",
1810
+ quickCreate: "新しいデッキを下書き",
1811
+ quickCreateHint: "空のデッキを開き、内容を伝えるとエージェントが 1 ページずつ作成します。",
1812
+ quickApply: "未処理のコメントを適用",
1813
+ quickApplyHint: "このスライドの @slide-comment マーカーをすべて処理します。",
1814
+ quickTheme: "テーマを作成",
1815
+ quickThemeHint: "themes/ に再利用できるテーマを抽出・設計します。",
1816
+ quickEdit: "このページを編集",
1817
+ quickEditHint: "表示中のページへの変更内容を書いてください。",
1818
+ emptyTitle: "何を作りますか?",
1819
+ emptyHint: "デッキの内容を書くか、下から出発点を選んでください。",
1820
+ questionSubmit: "続ける",
1821
+ questionOther: "その他",
1822
+ questionOtherPlaceholder: "自由に入力",
1823
+ questionCancelled: "スキップ",
1824
+ permissionTitle: "承認が必要です",
1825
+ allow: "許可",
1826
+ deny: "拒否",
1827
+ allowed: "許可済み",
1828
+ denied: "拒否済み",
1829
+ autoApprove: "自動承認",
1830
+ autoApproveHint: "確認なしでコマンドを実行します。ワークスペース内の編集は常に許可されます。",
1831
+ resultDone: "完了",
1832
+ resultStopped: "停止",
1833
+ resultSeconds: "{seconds} 秒",
1834
+ errorEyebrow: "エラー",
1835
+ statusLoading: "エージェントを確認中",
1836
+ disabled: "エージェントパネルは open-slide.config.ts で無効化されています。",
1837
+ connectTitle: "エージェントを接続",
1838
+ connectDescription: "ターミナルの代わりにここからコーディングエージェントを操作できます。このマシンにインストール済みのエージェントは自動で接続され、そのログインを再利用します。",
1839
+ connect: "接続",
1840
+ connecting: "接続中",
1841
+ connected: "接続済み",
1842
+ connectInstallHint: "{pm} で {pkg} をこのワークスペースに追加します。",
1843
+ cliFound: "CLI を検出 · v{version}",
1844
+ cliFoundNoVersion: "CLI を検出",
1845
+ cliMissing: "PATH に CLI が見つかりません",
1846
+ cliHint: "{name} CLI をインストールして一度ログインしてください。パネルはそのログインを再利用します。",
1847
+ needCliTitle: "先に Claude Code か Codex をインストールしてください",
1848
+ needCliDescription: "パネルはこのマシンのコーディングエージェント CLI を操作しますが、PATH に見つかりませんでした。どちらかをインストールしてターミナルで一度ログインし、もう一度確認してください。",
1849
+ checkAgain: "もう一度確認",
1850
+ retry: "再試行",
1851
+ toastConnected: "{name} を接続しました",
1852
+ toastConnectFailed: "{pkg} をインストールできませんでした",
1853
+ manageConnections: "エージェントを管理",
1854
+ backToChat: "戻る",
1855
+ toastSendFailed: "メッセージを送信できませんでした",
1856
+ newDeckTitle: "どんなデッキにしますか?",
1857
+ newDeckHint: "テーマ、対象、トーンを伝えてください。{provider} が 1 ページずつ作成する様子を見られます。",
1858
+ newDeckPlaceholder: "10 分間のトーク:…",
1859
+ toastCreateDeckFailed: "デッキを作成できませんでした",
1860
+ steps: {
1861
+ one: "{count} ステップ",
1862
+ other: "{count} ステップ"
1863
+ },
1864
+ questionSkip: "スキップ",
1865
+ copyMessage: "コピー",
1866
+ copied: "コピーしました",
1867
+ editMessage: "編集",
1868
+ cancelEdit: "キャンセル",
1869
+ sendEdit: "送信",
1870
+ editHint: "送信すると、このメッセージ以降の会話が置き換わります。ファイルへの変更は元に戻りません。",
1871
+ modelDefault: "デフォルト",
1872
+ reasoning: "推論",
1873
+ effortAuto: "自動",
1874
+ efforts: {
1875
+ minimal: "最小",
1876
+ low: "低",
1877
+ medium: "中",
1878
+ high: "高",
1879
+ xhigh: "最高",
1880
+ max: "最大"
1881
+ },
1882
+ presenceEditing: "{provider} が編集中",
1883
+ presenceThinking: "考え中",
1884
+ presenceWaiting: "あなたの回答待ち"
1561
1885
  }
1562
1886
  };
1563
1887
  //#endregion
@@ -1654,6 +1978,7 @@ const zhCN = {
1654
1978
  pickIcon: "选择图标"
1655
1979
  },
1656
1980
  slide: {
1981
+ resizeSidePanel: "调整侧栏宽度",
1657
1982
  agentConnected: "Agent 已连接",
1658
1983
  agentConnectedTooltip: "目前的 slide 与 Inspector 选择会即时同步给 agent。",
1659
1984
  agentDisconnected: "Agent 已断开",
@@ -1730,6 +2055,7 @@ const zhCN = {
1730
2055
  helpAria: "键盘快捷键 (?)",
1731
2056
  exitAria: "退出 (Esc)",
1732
2057
  elapsedTime: "已用时",
2058
+ lastSlideHint: "已是最后一页 · 按 Esc 退出放映",
1733
2059
  helpEyebrow: "演示模式",
1734
2060
  helpTitle: "键盘快捷键",
1735
2061
  shortcutNext: "下一张",
@@ -2079,6 +2405,112 @@ const zhCN = {
2079
2405
  usedByEmpty: "尚未有 slides 使用此主题。",
2080
2406
  expandPromptAria: "展开 prompt",
2081
2407
  collapsePromptAria: "收起 prompt"
2408
+ },
2409
+ agent: {
2410
+ title: "Agent",
2411
+ beta: "Beta",
2412
+ betaTitle: "抢先体验版",
2413
+ betaHint: "回复、编辑或工具调用偶尔可能失败,或出现预期之外的结果。",
2414
+ open: "Agent",
2415
+ openTitle: "打开 agent 面板",
2416
+ close: "关闭 agent 面板",
2417
+ newSession: "新对话",
2418
+ sessions: "对话记录",
2419
+ noSessions: "还没有任何对话。",
2420
+ deleteSession: "删除对话",
2421
+ historyThisDeck: "这份幻灯片",
2422
+ historyOtherDecks: "其他幻灯片",
2423
+ historyEmptyHint: "在这个面板开始的对话会列在这里。",
2424
+ sessionRunning: "进行中",
2425
+ composerPlaceholder: "让 {provider} 创建或修改幻灯片…",
2426
+ send: "发送",
2427
+ stop: "停止",
2428
+ working: "处理中",
2429
+ contextPage: "第 {n} 页",
2430
+ contextSelection: "选中元素",
2431
+ pendingComments: {
2432
+ one: "{count} 条评论",
2433
+ other: "{count} 条评论"
2434
+ },
2435
+ applyComments: "应用评论",
2436
+ applyCommentsWith: "用 {provider} 应用",
2437
+ createDeck: "新幻灯片",
2438
+ createDeckWith: "用 {provider} 创建幻灯片",
2439
+ quickCreate: "起草一份新幻灯片",
2440
+ quickCreateHint: "打开一份空白幻灯片,描述需求后 agent 会逐页生成。",
2441
+ quickApply: "应用待处理的评论",
2442
+ quickApplyHint: "处理这份幻灯片中所有的 @slide-comment 标记。",
2443
+ quickTheme: "创建主题",
2444
+ quickThemeHint: "在 themes/ 下提取或设计可复用的主题。",
2445
+ quickEdit: "编辑当前页",
2446
+ quickEditHint: "描述你想对当前页面做的修改。",
2447
+ emptyTitle: "想做什么?",
2448
+ emptyHint: "描述一份幻灯片,或从下面选一个起点。",
2449
+ questionSubmit: "继续",
2450
+ questionOther: "其他",
2451
+ questionOtherPlaceholder: "输入你自己的答案",
2452
+ questionCancelled: "已跳过",
2453
+ permissionTitle: "需要批准",
2454
+ allow: "允许",
2455
+ deny: "拒绝",
2456
+ allowed: "已允许",
2457
+ denied: "已拒绝",
2458
+ autoApprove: "自动批准",
2459
+ autoApproveHint: "不询问直接执行命令。工作区内的文件编辑始终允许。",
2460
+ resultDone: "完成",
2461
+ resultStopped: "已停止",
2462
+ resultSeconds: "{seconds} 秒",
2463
+ errorEyebrow: "错误",
2464
+ statusLoading: "正在检查 agent",
2465
+ disabled: "agent 面板已在 open-slide.config.ts 中禁用。",
2466
+ connectTitle: "连接 agent",
2467
+ connectDescription: "直接在这里驱动你的 coding agent,无需切换到终端。这台电脑上已安装的 agent 会自动连接,并复用它的登录状态。",
2468
+ connect: "连接",
2469
+ connecting: "连接中",
2470
+ connected: "已连接",
2471
+ connectInstallHint: "会用 {pm} 把 {pkg} 添加到这个工作区。",
2472
+ cliFound: "已找到 CLI · v{version}",
2473
+ cliFoundNoVersion: "已找到 CLI",
2474
+ cliMissing: "PATH 中找不到 CLI",
2475
+ cliHint: "请安装 {name} CLI 并登录一次;面板会复用它的登录状态。",
2476
+ needCliTitle: "请先安装 Claude Code 或 Codex",
2477
+ needCliDescription: "面板会驱动这台电脑上的 coding agent CLI,但 PATH 中找不到任何一个。请先安装其中一个并在终端登录一次,再重新检查。",
2478
+ checkAgain: "重新检查",
2479
+ retry: "重试",
2480
+ toastConnected: "{name} 已连接",
2481
+ toastConnectFailed: "无法安装 {pkg}",
2482
+ manageConnections: "管理 agent",
2483
+ backToChat: "返回",
2484
+ toastSendFailed: "消息发送失败",
2485
+ newDeckTitle: "这份幻灯片要讲什么?",
2486
+ newDeckHint: "描述主题、受众和风格,{provider} 会逐页生成,你可以边看边调整。",
2487
+ newDeckPlaceholder: "一场 10 分钟的分享,主题是…",
2488
+ toastCreateDeckFailed: "无法创建幻灯片",
2489
+ steps: {
2490
+ one: "{count} 个步骤",
2491
+ other: "{count} 个步骤"
2492
+ },
2493
+ questionSkip: "跳过",
2494
+ copyMessage: "复制",
2495
+ copied: "已复制",
2496
+ editMessage: "编辑",
2497
+ cancelEdit: "取消",
2498
+ sendEdit: "发送",
2499
+ editHint: "发送后会替换这条消息之后的对话,已改动的文件不会还原。",
2500
+ modelDefault: "默认",
2501
+ reasoning: "推理强度",
2502
+ effortAuto: "自动",
2503
+ efforts: {
2504
+ minimal: "最低",
2505
+ low: "低",
2506
+ medium: "中",
2507
+ high: "高",
2508
+ xhigh: "超高",
2509
+ max: "最高"
2510
+ },
2511
+ presenceEditing: "{provider} 正在编辑",
2512
+ presenceThinking: "思考中",
2513
+ presenceWaiting: "等待你的回复"
2082
2514
  }
2083
2515
  };
2084
2516
  //#endregion
@@ -2175,6 +2607,7 @@ const zhTW = {
2175
2607
  pickIcon: "選擇圖示"
2176
2608
  },
2177
2609
  slide: {
2610
+ resizeSidePanel: "調整側欄寬度",
2178
2611
  agentConnected: "Agent 已連線",
2179
2612
  agentConnectedTooltip: "目前的 slide 與 Inspector 選擇會即時同步給 agent。",
2180
2613
  agentDisconnected: "Agent 已斷線",
@@ -2251,6 +2684,7 @@ const zhTW = {
2251
2684
  helpAria: "鍵盤快速鍵 (?)",
2252
2685
  exitAria: "離開 (Esc)",
2253
2686
  elapsedTime: "已耗時",
2687
+ lastSlideHint: "已是最後一頁 · 按 Esc 結束播放",
2254
2688
  helpEyebrow: "簡報模式",
2255
2689
  helpTitle: "鍵盤快速鍵",
2256
2690
  shortcutNext: "下一張",
@@ -2600,6 +3034,112 @@ const zhTW = {
2600
3034
  usedByEmpty: "尚未有 slides 使用此主題。",
2601
3035
  expandPromptAria: "展開 prompt",
2602
3036
  collapsePromptAria: "收合 prompt"
3037
+ },
3038
+ agent: {
3039
+ title: "Agent",
3040
+ beta: "Beta",
3041
+ betaTitle: "搶先體驗版",
3042
+ betaHint: "回覆、編輯或工具呼叫偶爾可能失敗,或出現預期之外的結果。",
3043
+ open: "Agent",
3044
+ openTitle: "開啟 agent 面板",
3045
+ close: "關閉 agent 面板",
3046
+ newSession: "新對話",
3047
+ sessions: "對話紀錄",
3048
+ noSessions: "還沒有任何對話。",
3049
+ deleteSession: "刪除對話",
3050
+ historyThisDeck: "這份簡報",
3051
+ historyOtherDecks: "其他簡報",
3052
+ historyEmptyHint: "在這個面板開始的對話會列在這裡。",
3053
+ sessionRunning: "進行中",
3054
+ composerPlaceholder: "請 {provider} 建立或修改簡報…",
3055
+ send: "送出",
3056
+ stop: "停止",
3057
+ working: "處理中",
3058
+ contextPage: "第 {n} 頁",
3059
+ contextSelection: "選取元件",
3060
+ pendingComments: {
3061
+ one: "{count} 則留言",
3062
+ other: "{count} 則留言"
3063
+ },
3064
+ applyComments: "套用留言",
3065
+ applyCommentsWith: "用 {provider} 套用",
3066
+ createDeck: "新簡報",
3067
+ createDeckWith: "用 {provider} 建立簡報",
3068
+ quickCreate: "草擬一份新簡報",
3069
+ quickCreateHint: "開啟一份空白簡報,描述需求後 agent 會逐頁產生。",
3070
+ quickApply: "套用待處理的留言",
3071
+ quickApplyHint: "處理這份簡報裡所有的 @slide-comment 標記。",
3072
+ quickTheme: "建立主題",
3073
+ quickThemeHint: "在 themes/ 下萃取或設計可重用的主題。",
3074
+ quickEdit: "編輯這一頁",
3075
+ quickEditHint: "描述你想對目前頁面做的修改。",
3076
+ emptyTitle: "想做什麼?",
3077
+ emptyHint: "描述一份簡報,或從下面選一個起點。",
3078
+ questionSubmit: "繼續",
3079
+ questionOther: "其他",
3080
+ questionOtherPlaceholder: "輸入你自己的答案",
3081
+ questionCancelled: "已略過",
3082
+ permissionTitle: "需要核准",
3083
+ allow: "允許",
3084
+ deny: "拒絕",
3085
+ allowed: "已允許",
3086
+ denied: "已拒絕",
3087
+ autoApprove: "自動核准",
3088
+ autoApproveHint: "不詢問就執行指令。工作區內的檔案編輯一律允許。",
3089
+ resultDone: "完成",
3090
+ resultStopped: "已停止",
3091
+ resultSeconds: "{seconds} 秒",
3092
+ errorEyebrow: "錯誤",
3093
+ statusLoading: "正在檢查 agent",
3094
+ disabled: "agent 面板已在 open-slide.config.ts 中停用。",
3095
+ connectTitle: "連接 agent",
3096
+ connectDescription: "直接在這裡操作你的 coding agent,不用再切到終端機。這台電腦上已安裝的 agent 會自動連接,並沿用它的登入狀態。",
3097
+ connect: "連接",
3098
+ connecting: "連接中",
3099
+ connected: "已連接",
3100
+ connectInstallHint: "會用 {pm} 把 {pkg} 加進這個工作區。",
3101
+ cliFound: "已找到 CLI · v{version}",
3102
+ cliFoundNoVersion: "已找到 CLI",
3103
+ cliMissing: "PATH 中找不到 CLI",
3104
+ cliHint: "請安裝 {name} CLI 並登入一次;面板會沿用它的登入狀態。",
3105
+ needCliTitle: "請先安裝 Claude Code 或 Codex",
3106
+ needCliDescription: "面板會操作這台電腦上的 coding agent CLI,但 PATH 中找不到任何一個。請先安裝其中一個並在終端機登入一次,再重新檢查。",
3107
+ checkAgain: "重新檢查",
3108
+ retry: "重試",
3109
+ toastConnected: "{name} 已連接",
3110
+ toastConnectFailed: "無法安裝 {pkg}",
3111
+ manageConnections: "管理 agent",
3112
+ backToChat: "返回",
3113
+ toastSendFailed: "訊息送出失敗",
3114
+ newDeckTitle: "這份簡報要講什麼?",
3115
+ newDeckHint: "描述主題、對象和風格,{provider} 會逐頁產生,你可以邊看邊調整。",
3116
+ newDeckPlaceholder: "一場 10 分鐘的分享,主題是…",
3117
+ toastCreateDeckFailed: "無法建立簡報",
3118
+ steps: {
3119
+ one: "{count} 個步驟",
3120
+ other: "{count} 個步驟"
3121
+ },
3122
+ questionSkip: "略過",
3123
+ copyMessage: "複製",
3124
+ copied: "已複製",
3125
+ editMessage: "編輯",
3126
+ cancelEdit: "取消",
3127
+ sendEdit: "送出",
3128
+ editHint: "送出後會取代這則訊息之後的對話,已改動的檔案不會還原。",
3129
+ modelDefault: "預設",
3130
+ reasoning: "推理強度",
3131
+ effortAuto: "自動",
3132
+ efforts: {
3133
+ minimal: "最低",
3134
+ low: "低",
3135
+ medium: "中",
3136
+ high: "高",
3137
+ xhigh: "超高",
3138
+ max: "最高"
3139
+ },
3140
+ presenceEditing: "{provider} 正在編輯",
3141
+ presenceThinking: "思考中",
3142
+ presenceWaiting: "等待你的回覆"
2603
3143
  }
2604
3144
  };
2605
3145
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kywk/open-slide-core",
3
- "version": "2.3.1",
3
+ "version": "2.3.3",
4
4
  "description": "Runtime and CLI for open-slide — write slides in slides/, we handle the rest.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -29,6 +29,12 @@
29
29
  "env.d.ts",
30
30
  "src/app",
31
31
  "src/locale",
32
+ "src/agent/prompt.ts",
33
+ "src/agent/provider.ts",
34
+ "src/agent/types.ts",
35
+ "src/editing/placeholder-id.ts",
36
+ "!src/**/*.test.ts",
37
+ "!src/**/*.test.tsx",
32
38
  "skills",
33
39
  "README.md"
34
40
  ],
@@ -95,12 +101,12 @@
95
101
  "tailwind-merge": "^3.5.0",
96
102
  "tailwindcss": "^4.3.3",
97
103
  "tw-animate-css": "^1.4.0",
98
- "use-sync-external-store": "^1.6.0",
104
+ "use-sync-external-store": "^1.7.0",
99
105
  "vite": "^8.3.3"
100
106
  },
101
107
  "devDependencies": {
102
108
  "@playwright/test": "~1.63.0",
103
- "@types/node": "^26.6.2",
109
+ "@types/node": "^26.6.6",
104
110
  "@types/react": "^19.2.18",
105
111
  "@types/react-dom": "^19.2.5",
106
112
  "tsdown": "^0.22.14",
@@ -109,6 +115,7 @@
109
115
  "scripts": {
110
116
  "build": "tsdown",
111
117
  "typecheck": "tsc --noEmit",
118
+ "check:pack": "node scripts/check-pack.mjs",
112
119
  "test:e2e": "pnpm run build && playwright test"
113
120
  }
114
121
  }