@lemonriver/core 0.1.0 → 0.2.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/dist/{build-f-fM2ZY4.js → build-Df_xwIpg.js} +1 -1
  3. package/dist/cli/bin.js +4 -4
  4. package/dist/{config-DO45GU3e.js → config-BjWCLoMQ.js} +2343 -363
  5. package/dist/{config-B6JaKJM4.d.ts → config-rMGCkz6i.d.ts} +6 -2
  6. package/dist/{dev-CqS2xpgE.js → dev-Ctsx9IeO.js} +2 -2
  7. package/dist/index.d.ts +3 -3
  8. package/dist/index.js +4 -3
  9. package/dist/locale/index.d.ts +5 -2
  10. package/dist/locale/index.js +2 -2
  11. package/dist/{preview-BihgMlEl.js → preview-CJgcqsPk.js} +1 -1
  12. package/dist/{types-BjW4glip.d.ts → types-8VUyA2bu.d.ts} +133 -5
  13. package/dist/{update-C_R0ycVC.js → update-BKOA3Z6o.js} +153 -21
  14. package/dist/vite/index.d.ts +1 -1
  15. package/dist/vite/index.js +1 -1
  16. package/dist/{zh-tw-Ci0jK8eg.js → zh-tw-CeLrYwRE.js} +1178 -25
  17. package/package.json +21 -15
  18. package/skills/apply-comments/SKILL.md +10 -6
  19. package/skills/create-slide/SKILL.md +2 -0
  20. package/skills/current-slide/SKILL.md +1 -0
  21. package/skills/slide-authoring/SKILL.md +31 -1
  22. package/src/agent/prompt.ts +141 -0
  23. package/src/agent/provider.ts +123 -0
  24. package/src/agent/types.ts +151 -0
  25. package/src/app/app.tsx +2 -0
  26. package/src/app/assets/open-slide.svg +39 -0
  27. package/src/app/components/agent/agent-dock.tsx +35 -0
  28. package/src/app/components/agent/agent-markdown.tsx +45 -0
  29. package/src/app/components/agent/agent-panel.tsx +692 -0
  30. package/src/app/components/agent/agent-presence.tsx +74 -0
  31. package/src/app/components/agent/composer.tsx +120 -0
  32. package/src/app/components/agent/connect-view.tsx +184 -0
  33. package/src/app/components/agent/history-view.tsx +135 -0
  34. package/src/app/components/agent/provider-logo.tsx +34 -0
  35. package/src/app/components/agent/transcript.tsx +609 -0
  36. package/src/app/components/board/board-canvas.tsx +143 -12
  37. package/src/app/components/board/board.css +51 -0
  38. package/src/app/components/board/layout.test.ts +53 -1
  39. package/src/app/components/board/layout.ts +50 -2
  40. package/src/app/components/board/page-node.tsx +287 -13
  41. package/src/app/components/board/use-board-cards.ts +210 -0
  42. package/src/app/components/board/use-page-order.ts +17 -9
  43. package/src/app/components/command/slide-command-menu.tsx +10 -0
  44. package/src/app/components/icon-switcher-indicator.tsx +1 -1
  45. package/src/app/components/inspector/comment-layer.tsx +1011 -0
  46. package/src/app/components/inspector/image-crop-dialog.tsx +1 -5
  47. package/src/app/components/inspector/inspect-overlay.tsx +2 -39
  48. package/src/app/components/inspector/inspector-panel.tsx +10 -93
  49. package/src/app/components/inspector/inspector-provider.tsx +121 -47
  50. package/src/app/components/panel/editor-sidebar.tsx +85 -16
  51. package/src/app/components/panel/panel-shell.tsx +2 -2
  52. package/src/app/components/panel/resize-handle.tsx +129 -0
  53. package/src/app/components/player.tsx +0 -1
  54. package/src/app/components/preview-step-host.tsx +16 -0
  55. package/src/app/components/sidebar/sidebar.tsx +2 -2
  56. package/src/app/components/style-panel/style-panel.tsx +3 -2
  57. package/src/app/components/thumbnail-rail.tsx +76 -1
  58. package/src/app/favicon.ico +0 -0
  59. package/src/app/favicon.svg +39 -0
  60. package/src/app/index.html +2 -1
  61. package/src/app/lib/agent/use-agent.ts +543 -0
  62. package/src/app/lib/inspector/freeze-motion.ts +61 -0
  63. package/src/app/lib/inspector/use-comments.ts +32 -3
  64. package/src/app/lib/locale-store.ts +6 -1
  65. package/src/app/lib/print-ready.ts +9 -6
  66. package/src/app/lib/use-auto-grow.ts +15 -0
  67. package/src/app/lib/utils.ts +4 -0
  68. package/src/app/routes/board.tsx +48 -11
  69. package/src/app/routes/home.tsx +43 -7
  70. package/src/app/routes/presenter.tsx +1 -16
  71. package/src/app/routes/preview.tsx +169 -0
  72. package/src/app/routes/slide.tsx +221 -173
  73. package/src/app/styles.css +234 -80
  74. package/src/editing/placeholder-id.ts +1 -0
  75. package/src/locale/en.ts +127 -5
  76. package/src/locale/es.ts +692 -0
  77. package/src/locale/index.ts +1 -0
  78. package/src/locale/ja.ts +120 -6
  79. package/src/locale/types.ts +132 -5
  80. package/src/locale/zh-cn.ts +117 -5
  81. package/src/locale/zh-tw.ts +117 -5
  82. package/src/app/assets/open-slide.png +0 -0
  83. package/src/app/components/inspector/comment-widget.tsx +0 -119
@@ -1,4 +1,5 @@
1
1
  export { en } from './en';
2
+ export { es } from './es';
2
3
  export { format, plural } from './format';
3
4
  export { ja } from './ja';
4
5
  export type { Locale, Plural } from './types';
package/src/locale/ja.ts CHANGED
@@ -96,6 +96,7 @@ export const ja: Locale = {
96
96
  },
97
97
 
98
98
  slide: {
99
+ resizeSidePanel: 'サイドパネルの幅を調整',
99
100
  agentConnected: 'エージェント接続中',
100
101
  agentConnectedTooltip:
101
102
  '現在のスライドと Inspector の選択はエージェントにリアルタイムで同期されています。',
@@ -290,10 +291,9 @@ export const ja: Locale = {
290
291
  agentNotWatching: 'エージェント未接続',
291
292
  agentNotWatchingTooltip:
292
293
  'dev server との接続が切れたため、選択中の要素がエージェントに見えなくなっています。dev server を再起動して接続を復旧してください。',
293
- leaveComment: 'コメント',
294
+ commentMode: 'コメント',
294
295
  commentPlaceholder: 'エージェントに依頼する変更を記述…',
295
- commentShortcutHint: '⌘/ でフォーカス · ⌘↵ で追加',
296
- addComment: 'コメントを追加',
296
+ commentPost: '投稿',
297
297
  unsavedChanges: {
298
298
  one: '未保存の変更 {count} 件',
299
299
  other: '未保存の変更 {count} 件',
@@ -303,11 +303,14 @@ export const ja: Locale = {
303
303
  other: 'コメント {count} 件',
304
304
  },
305
305
  commentLineLabel: '行 {n}',
306
- commentsEmpty:
307
- 'まだコメントはありません。インスペクトを有効にしてスライド要素をクリックしてください。',
306
+ commentRegionLabel: '範囲',
307
+ commentEmptyHint: '要素をクリックするか、範囲をドラッグしてコメントを残せます。',
308
308
  commentsApplyHintPrefix: 'エージェントで ',
309
309
  commentsApplyHintSuffix: ' を実行して適用してください。',
310
310
  commentDeleteAria: '削除',
311
+ commentUpdateFailed: 'コメントを更新できませんでした:',
312
+ commentAddFailed: 'コメントを追加できませんでした:',
313
+ commentRegionNoTarget: 'この範囲を付けられる要素が見つかりませんでした。',
311
314
  saveFailed: '保存に失敗しました:',
312
315
  decreaseFontSize: 'フォントサイズを縮小',
313
316
  increaseFontSize: 'フォントサイズを拡大',
@@ -461,7 +464,7 @@ export const ja: Locale = {
461
464
  title: 'ストーリーボード',
462
465
  openBoard: 'ストーリーボード (B)',
463
466
  backToDeck: 'スライドに戻る',
464
- hint: 'カードをドラッグして並べ替え · ダブルクリックで編集',
467
+ hint: 'カードをドラッグして並べ替え · ダブルクリックで編集 · 丸をドラッグして関連付け',
465
468
  loading: '読み込み中…',
466
469
  columnFallback: 'パート {n}',
467
470
  moveToEnd: '最後に移動',
@@ -476,6 +479,19 @@ export const ja: Locale = {
476
479
  notesPlaceholder: '発表者ノート…',
477
480
  toastInserted: 'ページ {n} に白紙ページを追加しました',
478
481
  insertFailed: 'ページを追加できませんでした',
482
+ cardTitlePlaceholder: 'カードに名前を付ける',
483
+ renameCard: 'カード名を変更',
484
+ status: 'ステータス',
485
+ statusNone: 'なし',
486
+ statusTodo: '未着手',
487
+ statusDoing: '進行中',
488
+ statusReview: '確認待ち',
489
+ statusDone: '完了',
490
+ memoPlaceholder: '作業メモ…(ボードだけに残ります)',
491
+ linkHandle: '別のカードにドラッグして関連付け',
492
+ showLinks: '関連線を表示',
493
+ hideLinks: '関連線を隠す',
494
+ removeLink: 'この関連を削除',
479
495
  },
480
496
 
481
497
  pdfToast: {
@@ -566,4 +582,102 @@ export const ja: Locale = {
566
582
  expandPromptAria: 'プロンプトを展開',
567
583
  collapsePromptAria: 'プロンプトを折りたたむ',
568
584
  },
585
+ agent: {
586
+ title: 'エージェント',
587
+ beta: 'Beta',
588
+ betaTitle: 'プレビュー版',
589
+ betaHint: '返答・編集・ツール実行が失敗したり、思わぬ動作をしたりすることがあります。',
590
+ open: 'エージェント',
591
+ openTitle: 'エージェントパネルを開く',
592
+ close: 'エージェントパネルを閉じる',
593
+ newSession: '新しいチャット',
594
+ sessions: '履歴',
595
+ noSessions: 'まだ会話はありません。',
596
+ deleteSession: '会話を削除',
597
+ historyThisDeck: 'このデッキ',
598
+ historyOtherDecks: '他のデッキ',
599
+ historyEmptyHint: 'このパネルで始めた会話がここに表示されます。',
600
+ sessionRunning: '実行中',
601
+ composerPlaceholder: '{provider} にスライドの作成や編集を依頼…',
602
+ send: '送信',
603
+ stop: '停止',
604
+ working: '処理中',
605
+ contextPage: '{n} ページ目',
606
+ contextSelection: '選択中',
607
+ pendingComments: { one: '{count} 件のコメント', other: '{count} 件のコメント' },
608
+ applyComments: 'コメントを適用',
609
+ applyCommentsWith: '{provider} で適用',
610
+ createDeck: '新しいデッキ',
611
+ createDeckWith: '{provider} でデッキを作成',
612
+ quickCreate: '新しいデッキを下書き',
613
+ quickCreateHint: '空のデッキを開き、内容を伝えるとエージェントが 1 ページずつ作成します。',
614
+ quickApply: '未処理のコメントを適用',
615
+ quickApplyHint: 'このスライドの @slide-comment マーカーをすべて処理します。',
616
+ quickTheme: 'テーマを作成',
617
+ quickThemeHint: 'themes/ に再利用できるテーマを抽出・設計します。',
618
+ quickEdit: 'このページを編集',
619
+ quickEditHint: '表示中のページへの変更内容を書いてください。',
620
+ emptyTitle: '何を作りますか?',
621
+ emptyHint: 'デッキの内容を書くか、下から出発点を選んでください。',
622
+ questionSubmit: '続ける',
623
+ questionOther: 'その他',
624
+ questionOtherPlaceholder: '自由に入力',
625
+ questionCancelled: 'スキップ',
626
+ permissionTitle: '承認が必要です',
627
+ allow: '許可',
628
+ deny: '拒否',
629
+ allowed: '許可済み',
630
+ denied: '拒否済み',
631
+ autoApprove: '自動承認',
632
+ autoApproveHint: '確認なしでコマンドを実行します。ワークスペース内の編集は常に許可されます。',
633
+ resultDone: '完了',
634
+ resultStopped: '停止',
635
+ resultSeconds: '{seconds} 秒',
636
+ errorEyebrow: 'エラー',
637
+ statusLoading: 'エージェントを確認中',
638
+ disabled: 'エージェントパネルは lemonriver.config.ts で無効化されています。',
639
+ connectTitle: 'エージェントを接続',
640
+ connectDescription:
641
+ 'ターミナルの代わりにここからコーディングエージェントを操作できます。このマシンにインストール済みのエージェントは自動で接続され、そのログインを再利用します。',
642
+ connect: '接続',
643
+ connecting: '接続中',
644
+ connected: '接続済み',
645
+ connectInstallHint: '{pm} で {pkg} をこのワークスペースに追加します。',
646
+ cliFound: 'CLI を検出 · v{version}',
647
+ cliFoundNoVersion: 'CLI を検出',
648
+ cliMissing: 'PATH に CLI が見つかりません',
649
+ cliHint:
650
+ '{name} CLI をインストールして一度ログインしてください。パネルはそのログインを再利用します。',
651
+ needCliTitle: '先に Claude Code か Codex をインストールしてください',
652
+ needCliDescription:
653
+ 'パネルはこのマシンのコーディングエージェント CLI を操作しますが、PATH に見つかりませんでした。どちらかをインストールしてターミナルで一度ログインし、もう一度確認してください。',
654
+ checkAgain: 'もう一度確認',
655
+ retry: '再試行',
656
+ toastConnected: '{name} を接続しました',
657
+ toastConnectFailed: '{pkg} をインストールできませんでした',
658
+ manageConnections: 'エージェントを管理',
659
+ backToChat: '戻る',
660
+ toastSendFailed: 'メッセージを送信できませんでした',
661
+ newDeckTitle: 'どんなデッキにしますか?',
662
+ newDeckHint:
663
+ 'テーマ、対象、トーンを伝えてください。{provider} が 1 ページずつ作成する様子を見られます。',
664
+ newDeckPlaceholder: '10 分間のトーク:…',
665
+ toastCreateDeckFailed: 'デッキを作成できませんでした',
666
+ steps: { one: '{count} ステップ', other: '{count} ステップ' },
667
+ questionSkip: 'スキップ',
668
+ copyMessage: 'コピー',
669
+ copied: 'コピーしました',
670
+ editMessage: '編集',
671
+ cancelEdit: 'キャンセル',
672
+ sendEdit: '送信',
673
+ editHint:
674
+ '送信すると、このメッセージ以降の会話が置き換わります。ファイルへの変更は元に戻りません。',
675
+ modelDefault: 'デフォルト',
676
+ reasoning: '推論',
677
+ effortAuto: '自動',
678
+ efforts: { minimal: '最小', low: '低', medium: '中', high: '高', xhigh: '最高', max: '最大' },
679
+ presenceEditing: '{provider} が編集中',
680
+ presenceThinking: '考え中',
681
+ presenceWaiting: 'あなたの回答待ち',
682
+ },
569
683
  };
@@ -1,7 +1,9 @@
1
+ import type { AgentEffort } from '../agent/types.ts';
2
+
1
3
  export type Plural = { one: string; other: string };
2
4
 
3
5
  export type Locale = {
4
- id: 'en' | 'zh-TW' | 'zh-CN' | 'ja';
6
+ id: 'en' | 'zh-TW' | 'zh-CN' | 'ja' | 'es';
5
7
 
6
8
  common: {
7
9
  cancel: string;
@@ -100,6 +102,7 @@ export type Locale = {
100
102
  };
101
103
 
102
104
  slide: {
105
+ resizeSidePanel: string;
103
106
  home: string;
104
107
  backToHome: string;
105
108
  agentConnected: string;
@@ -287,20 +290,25 @@ export type Locale = {
287
290
  cropFitCover: string;
288
291
  cropFitContain: string;
289
292
  cropApply: string;
290
- leaveComment: string;
293
+ commentMode: string;
291
294
  commentPlaceholder: string;
292
- commentShortcutHint: string;
293
- addComment: string;
295
+ commentPost: string;
294
296
  /** templates: "{count} unsaved change" / "{count} unsaved changes" */
295
297
  unsavedChanges: Plural;
296
298
  /** templates: "{count} comment" / "{count} comments" */
297
299
  commentsCount: Plural;
298
300
  /** template: "line {n}" */
299
301
  commentLineLabel: string;
300
- commentsEmpty: string;
302
+ commentRegionLabel: string;
303
+ commentEmptyHint: string;
301
304
  commentsApplyHintPrefix: string;
302
305
  commentsApplyHintSuffix: string;
303
306
  commentDeleteAria: string;
307
+ /** Prefix for the toast shown when a comment edit fails to write to disk. */
308
+ commentUpdateFailed: string;
309
+ /** Prefix for the toast shown when a comment fails to write to disk. */
310
+ commentAddFailed: string;
311
+ commentRegionNoTarget: string;
304
312
  /** Prefix for the toast shown when one or more buffered edits fail to write to disk. */
305
313
  saveFailed: string;
306
314
  decreaseFontSize: string;
@@ -495,6 +503,19 @@ export type Locale = {
495
503
  /** template: "Added a blank page at {n}" */
496
504
  toastInserted: string;
497
505
  insertFailed: string;
506
+ cardTitlePlaceholder: string;
507
+ renameCard: string;
508
+ status: string;
509
+ statusNone: string;
510
+ statusTodo: string;
511
+ statusDoing: string;
512
+ statusReview: string;
513
+ statusDone: string;
514
+ memoPlaceholder: string;
515
+ linkHandle: string;
516
+ showLinks: string;
517
+ hideLinks: string;
518
+ removeLink: string;
498
519
  };
499
520
 
500
521
  pdfToast: {
@@ -593,4 +614,110 @@ export type Locale = {
593
614
  expandPromptAria: string;
594
615
  collapsePromptAria: string;
595
616
  };
617
+
618
+ agent: {
619
+ title: string;
620
+ beta: string;
621
+ betaTitle: string;
622
+ betaHint: string;
623
+ open: string;
624
+ openTitle: string;
625
+ close: string;
626
+ newSession: string;
627
+ sessions: string;
628
+ noSessions: string;
629
+ deleteSession: string;
630
+ historyThisDeck: string;
631
+ historyOtherDecks: string;
632
+ historyEmptyHint: string;
633
+ sessionRunning: string;
634
+ /** template: "Ask {provider} to create or edit slides…" */
635
+ composerPlaceholder: string;
636
+ send: string;
637
+ stop: string;
638
+ working: string;
639
+ /** template: "Page {n}" */
640
+ contextPage: string;
641
+ contextSelection: string;
642
+ /** plural, template: "{count} comments" */
643
+ pendingComments: Plural;
644
+ applyComments: string;
645
+ /** template: "Apply with {provider}" */
646
+ applyCommentsWith: string;
647
+ createDeck: string;
648
+ /** template: "Create a deck with {provider}" */
649
+ createDeckWith: string;
650
+ quickCreate: string;
651
+ quickCreateHint: string;
652
+ quickApply: string;
653
+ quickApplyHint: string;
654
+ quickTheme: string;
655
+ quickThemeHint: string;
656
+ quickEdit: string;
657
+ quickEditHint: string;
658
+ emptyTitle: string;
659
+ emptyHint: string;
660
+ questionSubmit: string;
661
+ questionOther: string;
662
+ questionOtherPlaceholder: string;
663
+ questionCancelled: string;
664
+ permissionTitle: string;
665
+ allow: string;
666
+ deny: string;
667
+ allowed: string;
668
+ denied: string;
669
+ autoApprove: string;
670
+ autoApproveHint: string;
671
+ resultDone: string;
672
+ resultStopped: string;
673
+ /** template: "{seconds}s" */
674
+ resultSeconds: string;
675
+ errorEyebrow: string;
676
+ statusLoading: string;
677
+ disabled: string;
678
+ connectTitle: string;
679
+ connectDescription: string;
680
+ connect: string;
681
+ connecting: string;
682
+ connected: string;
683
+ /** template: "Adds {pkg} to this workspace with {pm}." */
684
+ connectInstallHint: string;
685
+ /** template: "CLI found · v{version}" */
686
+ cliFound: string;
687
+ cliFoundNoVersion: string;
688
+ cliMissing: string;
689
+ /** template: "Install the {name} CLI and sign in once; the panel reuses its login." */
690
+ cliHint: string;
691
+ needCliTitle: string;
692
+ needCliDescription: string;
693
+ checkAgain: string;
694
+ retry: string;
695
+ /** template: "{name} connected" */
696
+ toastConnected: string;
697
+ /** template: "Could not install {pkg}" */
698
+ toastConnectFailed: string;
699
+ manageConnections: string;
700
+ backToChat: string;
701
+ toastSendFailed: string;
702
+ newDeckTitle: string;
703
+ newDeckHint: string;
704
+ newDeckPlaceholder: string;
705
+ toastCreateDeckFailed: string;
706
+ steps: Plural;
707
+ questionSkip: string;
708
+ copyMessage: string;
709
+ copied: string;
710
+ editMessage: string;
711
+ cancelEdit: string;
712
+ sendEdit: string;
713
+ editHint: string;
714
+ modelDefault: string;
715
+ reasoning: string;
716
+ effortAuto: string;
717
+ efforts: Record<AgentEffort, string>;
718
+ /** template: "{provider} is editing" */
719
+ presenceEditing: string;
720
+ presenceThinking: string;
721
+ presenceWaiting: string;
722
+ };
596
723
  };
@@ -96,6 +96,7 @@ export const zhCN: Locale = {
96
96
  },
97
97
 
98
98
  slide: {
99
+ resizeSidePanel: '调整侧栏宽度',
99
100
  agentConnected: 'Agent 已连接',
100
101
  agentConnectedTooltip: '目前的 slide 与 Inspector 选择会即时同步给 agent。',
101
102
  agentDisconnected: 'Agent 已断开',
@@ -284,10 +285,9 @@ export const zhCN: Locale = {
284
285
  agentNotWatching: 'Agent 没在关注',
285
286
  agentNotWatchingTooltip:
286
287
  '已和 dev server 断开连接,agent 看不到你选的元素了。请重新启动 dev server 来恢复连接。',
287
- leaveComment: '评论',
288
+ commentMode: '评论',
288
289
  commentPlaceholder: '描述你希望代理执行的更改…',
289
- commentShortcutHint: '⌘/ 聚焦 · ⌘↵ 添加',
290
- addComment: '添加 comment',
290
+ commentPost: '发送',
291
291
  unsavedChanges: {
292
292
  one: '{count} 项未保存的更改',
293
293
  other: '{count} 项未保存的更改',
@@ -297,10 +297,14 @@ export const zhCN: Locale = {
297
297
  other: '{count} 条评论',
298
298
  },
299
299
  commentLineLabel: '第 {n} 行',
300
- commentsEmpty: '还没有评论。选中对象后,在格式面板中打开“评论”。',
300
+ commentRegionLabel: '区域',
301
+ commentEmptyHint: '点击元素或拖拽框选一个区域来评论。',
301
302
  commentsApplyHintPrefix: '在你的代理中运行 ',
302
303
  commentsApplyHintSuffix: ' 以应用这些更改。',
303
304
  commentDeleteAria: '删除',
305
+ commentUpdateFailed: '无法更新评论:',
306
+ commentAddFailed: '无法添加评论:',
307
+ commentRegionNoTarget: '找不到可以附加该区域的元素。',
304
308
  saveFailed: '保存失败:',
305
309
  decreaseFontSize: '缩小字号',
306
310
  increaseFontSize: '放大字号',
@@ -451,7 +455,7 @@ export const zhCN: Locale = {
451
455
  title: '故事看板',
452
456
  openBoard: '故事看板 (B)',
453
457
  backToDeck: '返回幻灯片',
454
- hint: '拖动卡片调整顺序 · 双击进入该页编辑',
458
+ hint: '拖动卡片调整顺序 · 双击进入该页编辑 · 拖动圆点关联两页',
455
459
  loading: '正在加载…',
456
460
  columnFallback: '第 {n} 部分',
457
461
  moveToEnd: '移到末尾',
@@ -466,6 +470,19 @@ export const zhCN: Locale = {
466
470
  notesPlaceholder: '讲稿…',
467
471
  toastInserted: '已在第 {n} 页新建空白页',
468
472
  insertFailed: '新建页面失败',
473
+ cardTitlePlaceholder: '给这张卡片起个名字',
474
+ renameCard: '重命名这张卡片',
475
+ status: '状态',
476
+ statusNone: '无状态',
477
+ statusTodo: '待做',
478
+ statusDoing: '进行中',
479
+ statusReview: '待确认',
480
+ statusDone: '已完成',
481
+ memoPlaceholder: '工作备注…(只在看板上,不进材料)',
482
+ linkHandle: '拖到另一张卡片上建立关联',
483
+ showLinks: '显示关联线',
484
+ hideLinks: '隐藏关联线',
485
+ removeLink: '删除这条关联',
469
486
  },
470
487
 
471
488
  pdfToast: {
@@ -555,4 +572,99 @@ export const zhCN: Locale = {
555
572
  expandPromptAria: '展开 prompt',
556
573
  collapsePromptAria: '收起 prompt',
557
574
  },
575
+ agent: {
576
+ title: 'Agent',
577
+ beta: 'Beta',
578
+ betaTitle: '抢先体验版',
579
+ betaHint: '回复、编辑或工具调用偶尔可能失败,或出现预期之外的结果。',
580
+ open: 'Agent',
581
+ openTitle: '打开 agent 面板',
582
+ close: '关闭 agent 面板',
583
+ newSession: '新对话',
584
+ sessions: '对话记录',
585
+ noSessions: '还没有任何对话。',
586
+ deleteSession: '删除对话',
587
+ historyThisDeck: '这份幻灯片',
588
+ historyOtherDecks: '其他幻灯片',
589
+ historyEmptyHint: '在这个面板开始的对话会列在这里。',
590
+ sessionRunning: '进行中',
591
+ composerPlaceholder: '让 {provider} 创建或修改幻灯片…',
592
+ send: '发送',
593
+ stop: '停止',
594
+ working: '处理中',
595
+ contextPage: '第 {n} 页',
596
+ contextSelection: '选中元素',
597
+ pendingComments: { one: '{count} 条评论', other: '{count} 条评论' },
598
+ applyComments: '应用评论',
599
+ applyCommentsWith: '用 {provider} 应用',
600
+ createDeck: '新幻灯片',
601
+ createDeckWith: '用 {provider} 创建幻灯片',
602
+ quickCreate: '起草一份新幻灯片',
603
+ quickCreateHint: '打开一份空白幻灯片,描述需求后 agent 会逐页生成。',
604
+ quickApply: '应用待处理的评论',
605
+ quickApplyHint: '处理这份幻灯片中所有的 @slide-comment 标记。',
606
+ quickTheme: '创建主题',
607
+ quickThemeHint: '在 themes/ 下提取或设计可复用的主题。',
608
+ quickEdit: '编辑当前页',
609
+ quickEditHint: '描述你想对当前页面做的修改。',
610
+ emptyTitle: '想做什么?',
611
+ emptyHint: '描述一份幻灯片,或从下面选一个起点。',
612
+ questionSubmit: '继续',
613
+ questionOther: '其他',
614
+ questionOtherPlaceholder: '输入你自己的答案',
615
+ questionCancelled: '已跳过',
616
+ permissionTitle: '需要批准',
617
+ allow: '允许',
618
+ deny: '拒绝',
619
+ allowed: '已允许',
620
+ denied: '已拒绝',
621
+ autoApprove: '自动批准',
622
+ autoApproveHint: '不询问直接执行命令。工作区内的文件编辑始终允许。',
623
+ resultDone: '完成',
624
+ resultStopped: '已停止',
625
+ resultSeconds: '{seconds} 秒',
626
+ errorEyebrow: '错误',
627
+ statusLoading: '正在检查 agent',
628
+ disabled: 'agent 面板已在 lemonriver.config.ts 中禁用。',
629
+ connectTitle: '连接 agent',
630
+ connectDescription:
631
+ '直接在这里驱动你的 coding agent,无需切换到终端。这台电脑上已安装的 agent 会自动连接,并复用它的登录状态。',
632
+ connect: '连接',
633
+ connecting: '连接中',
634
+ connected: '已连接',
635
+ connectInstallHint: '会用 {pm} 把 {pkg} 添加到这个工作区。',
636
+ cliFound: '已找到 CLI · v{version}',
637
+ cliFoundNoVersion: '已找到 CLI',
638
+ cliMissing: 'PATH 中找不到 CLI',
639
+ cliHint: '请安装 {name} CLI 并登录一次;面板会复用它的登录状态。',
640
+ needCliTitle: '请先安装 Claude Code 或 Codex',
641
+ needCliDescription:
642
+ '面板会驱动这台电脑上的 coding agent CLI,但 PATH 中找不到任何一个。请先安装其中一个并在终端登录一次,再重新检查。',
643
+ checkAgain: '重新检查',
644
+ retry: '重试',
645
+ toastConnected: '{name} 已连接',
646
+ toastConnectFailed: '无法安装 {pkg}',
647
+ manageConnections: '管理 agent',
648
+ backToChat: '返回',
649
+ toastSendFailed: '消息发送失败',
650
+ newDeckTitle: '这份幻灯片要讲什么?',
651
+ newDeckHint: '描述主题、受众和风格,{provider} 会逐页生成,你可以边看边调整。',
652
+ newDeckPlaceholder: '一场 10 分钟的分享,主题是…',
653
+ toastCreateDeckFailed: '无法创建幻灯片',
654
+ steps: { one: '{count} 个步骤', other: '{count} 个步骤' },
655
+ questionSkip: '跳过',
656
+ copyMessage: '复制',
657
+ copied: '已复制',
658
+ editMessage: '编辑',
659
+ cancelEdit: '取消',
660
+ sendEdit: '发送',
661
+ editHint: '发送后会替换这条消息之后的对话,已改动的文件不会还原。',
662
+ modelDefault: '默认',
663
+ reasoning: '推理强度',
664
+ effortAuto: '自动',
665
+ efforts: { minimal: '最低', low: '低', medium: '中', high: '高', xhigh: '超高', max: '最高' },
666
+ presenceEditing: '{provider} 正在编辑',
667
+ presenceThinking: '思考中',
668
+ presenceWaiting: '等待你的回复',
669
+ },
558
670
  };
@@ -96,6 +96,7 @@ export const zhTW: Locale = {
96
96
  },
97
97
 
98
98
  slide: {
99
+ resizeSidePanel: '調整側欄寬度',
99
100
  agentConnected: 'Agent 已連線',
100
101
  agentConnectedTooltip: '目前的 slide 與 Inspector 選擇會即時同步給 agent。',
101
102
  agentDisconnected: 'Agent 已斷線',
@@ -284,10 +285,9 @@ export const zhTW: Locale = {
284
285
  agentNotWatching: 'Agent 沒在關注',
285
286
  agentNotWatchingTooltip:
286
287
  '已和 dev server 斷線,agent 看不到你選的元素了。請重新啟動 dev server 來恢復連線。',
287
- leaveComment: '留言',
288
+ commentMode: '留言',
288
289
  commentPlaceholder: '描述你希望代理進行的修改…',
289
- commentShortcutHint: '⌘/ 聚焦 · ⌘↵ 新增',
290
- addComment: '新增 comment',
290
+ commentPost: '送出',
291
291
  unsavedChanges: {
292
292
  one: '{count} 項未儲存的變更',
293
293
  other: '{count} 項未儲存的變更',
@@ -297,10 +297,14 @@ export const zhTW: Locale = {
297
297
  other: '{count} 則留言',
298
298
  },
299
299
  commentLineLabel: '第 {n} 行',
300
- commentsEmpty: '還沒有留言。選取物件後,在格式面板中開啟「留言」。',
300
+ commentRegionLabel: '範圍',
301
+ commentEmptyHint: '點選元件或拖曳框選一個範圍來留言。',
301
302
  commentsApplyHintPrefix: '在你的代理中執行 ',
302
303
  commentsApplyHintSuffix: ' 以套用這些變更。',
303
304
  commentDeleteAria: '刪除',
305
+ commentUpdateFailed: '無法更新留言:',
306
+ commentAddFailed: '無法新增留言:',
307
+ commentRegionNoTarget: '找不到可以附加這個範圍的元件。',
304
308
  saveFailed: '儲存失敗:',
305
309
  decreaseFontSize: '縮小字級',
306
310
  increaseFontSize: '放大字級',
@@ -451,7 +455,7 @@ export const zhTW: Locale = {
451
455
  title: '故事看板',
452
456
  openBoard: '故事看板 (B)',
453
457
  backToDeck: '返回投影片',
454
- hint: '拖動卡片調整順序 · 雙擊進入該頁編輯',
458
+ hint: '拖動卡片調整順序 · 雙擊進入該頁編輯 · 拖動圓點關聯兩頁',
455
459
  loading: '正在載入…',
456
460
  columnFallback: '第 {n} 部分',
457
461
  moveToEnd: '移到最後',
@@ -466,6 +470,19 @@ export const zhTW: Locale = {
466
470
  notesPlaceholder: '講稿…',
467
471
  toastInserted: '已於第 {n} 頁新增空白頁',
468
472
  insertFailed: '新增頁面失敗',
473
+ cardTitlePlaceholder: '幫這張卡片取個名字',
474
+ renameCard: '重新命名這張卡片',
475
+ status: '狀態',
476
+ statusNone: '無狀態',
477
+ statusTodo: '待做',
478
+ statusDoing: '進行中',
479
+ statusReview: '待確認',
480
+ statusDone: '已完成',
481
+ memoPlaceholder: '工作備註…(只在看板上,不進投影片)',
482
+ linkHandle: '拖到另一張卡片上建立關聯',
483
+ showLinks: '顯示關聯線',
484
+ hideLinks: '隱藏關聯線',
485
+ removeLink: '刪除這條關聯',
469
486
  },
470
487
 
471
488
  pdfToast: {
@@ -555,4 +572,99 @@ export const zhTW: Locale = {
555
572
  expandPromptAria: '展開 prompt',
556
573
  collapsePromptAria: '收合 prompt',
557
574
  },
575
+ agent: {
576
+ title: 'Agent',
577
+ beta: 'Beta',
578
+ betaTitle: '搶先體驗版',
579
+ betaHint: '回覆、編輯或工具呼叫偶爾可能失敗,或出現預期之外的結果。',
580
+ open: 'Agent',
581
+ openTitle: '開啟 agent 面板',
582
+ close: '關閉 agent 面板',
583
+ newSession: '新對話',
584
+ sessions: '對話紀錄',
585
+ noSessions: '還沒有任何對話。',
586
+ deleteSession: '刪除對話',
587
+ historyThisDeck: '這份簡報',
588
+ historyOtherDecks: '其他簡報',
589
+ historyEmptyHint: '在這個面板開始的對話會列在這裡。',
590
+ sessionRunning: '進行中',
591
+ composerPlaceholder: '請 {provider} 建立或修改簡報…',
592
+ send: '送出',
593
+ stop: '停止',
594
+ working: '處理中',
595
+ contextPage: '第 {n} 頁',
596
+ contextSelection: '選取元件',
597
+ pendingComments: { one: '{count} 則留言', other: '{count} 則留言' },
598
+ applyComments: '套用留言',
599
+ applyCommentsWith: '用 {provider} 套用',
600
+ createDeck: '新簡報',
601
+ createDeckWith: '用 {provider} 建立簡報',
602
+ quickCreate: '草擬一份新簡報',
603
+ quickCreateHint: '開啟一份空白簡報,描述需求後 agent 會逐頁產生。',
604
+ quickApply: '套用待處理的留言',
605
+ quickApplyHint: '處理這份簡報裡所有的 @slide-comment 標記。',
606
+ quickTheme: '建立主題',
607
+ quickThemeHint: '在 themes/ 下萃取或設計可重用的主題。',
608
+ quickEdit: '編輯這一頁',
609
+ quickEditHint: '描述你想對目前頁面做的修改。',
610
+ emptyTitle: '想做什麼?',
611
+ emptyHint: '描述一份簡報,或從下面選一個起點。',
612
+ questionSubmit: '繼續',
613
+ questionOther: '其他',
614
+ questionOtherPlaceholder: '輸入你自己的答案',
615
+ questionCancelled: '已略過',
616
+ permissionTitle: '需要核准',
617
+ allow: '允許',
618
+ deny: '拒絕',
619
+ allowed: '已允許',
620
+ denied: '已拒絕',
621
+ autoApprove: '自動核准',
622
+ autoApproveHint: '不詢問就執行指令。工作區內的檔案編輯一律允許。',
623
+ resultDone: '完成',
624
+ resultStopped: '已停止',
625
+ resultSeconds: '{seconds} 秒',
626
+ errorEyebrow: '錯誤',
627
+ statusLoading: '正在檢查 agent',
628
+ disabled: 'agent 面板已在 lemonriver.config.ts 中停用。',
629
+ connectTitle: '連接 agent',
630
+ connectDescription:
631
+ '直接在這裡操作你的 coding agent,不用再切到終端機。這台電腦上已安裝的 agent 會自動連接,並沿用它的登入狀態。',
632
+ connect: '連接',
633
+ connecting: '連接中',
634
+ connected: '已連接',
635
+ connectInstallHint: '會用 {pm} 把 {pkg} 加進這個工作區。',
636
+ cliFound: '已找到 CLI · v{version}',
637
+ cliFoundNoVersion: '已找到 CLI',
638
+ cliMissing: 'PATH 中找不到 CLI',
639
+ cliHint: '請安裝 {name} CLI 並登入一次;面板會沿用它的登入狀態。',
640
+ needCliTitle: '請先安裝 Claude Code 或 Codex',
641
+ needCliDescription:
642
+ '面板會操作這台電腦上的 coding agent CLI,但 PATH 中找不到任何一個。請先安裝其中一個並在終端機登入一次,再重新檢查。',
643
+ checkAgain: '重新檢查',
644
+ retry: '重試',
645
+ toastConnected: '{name} 已連接',
646
+ toastConnectFailed: '無法安裝 {pkg}',
647
+ manageConnections: '管理 agent',
648
+ backToChat: '返回',
649
+ toastSendFailed: '訊息送出失敗',
650
+ newDeckTitle: '這份簡報要講什麼?',
651
+ newDeckHint: '描述主題、對象和風格,{provider} 會逐頁產生,你可以邊看邊調整。',
652
+ newDeckPlaceholder: '一場 10 分鐘的分享,主題是…',
653
+ toastCreateDeckFailed: '無法建立簡報',
654
+ steps: { one: '{count} 個步驟', other: '{count} 個步驟' },
655
+ questionSkip: '略過',
656
+ copyMessage: '複製',
657
+ copied: '已複製',
658
+ editMessage: '編輯',
659
+ cancelEdit: '取消',
660
+ sendEdit: '送出',
661
+ editHint: '送出後會取代這則訊息之後的對話,已改動的檔案不會還原。',
662
+ modelDefault: '預設',
663
+ reasoning: '推理強度',
664
+ effortAuto: '自動',
665
+ efforts: { minimal: '最低', low: '低', medium: '中', high: '高', xhigh: '超高', max: '最高' },
666
+ presenceEditing: '{provider} 正在編輯',
667
+ presenceThinking: '思考中',
668
+ presenceWaiting: '等待你的回覆',
669
+ },
558
670
  };