privateboard 0.1.11 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/public/i18n.js CHANGED
@@ -42,6 +42,24 @@
42
42
  ib_pause_tip: "Pause · you can resume later",
43
43
  ib_adjourn_label: "Adjourn the room",
44
44
  ib_adjourn_tip: "Adjourn · file the report and end",
45
+ ib_vote_label: "Open vote phase",
46
+ ib_vote_tip: "Call the vote · end the round and tally directors",
47
+ ib_vote_label_queued: "Vote queued",
48
+ ib_vote_tip_queued: "Vote queued · will open after current speaker finishes",
49
+
50
+ vt_kicker: "vote trigger",
51
+ vt_title: "Open the vote phase?",
52
+ vt_intro_idle: "No director is mid-stream. The chair will summarise the round, file key points, and open the vote prompt.",
53
+ vt_intro_speaking: "{who} is mid-stream. Choose how to time the vote phase.",
54
+ vt_intro_speaking_fallback: "A director",
55
+ vt_now_label: "Interrupt now",
56
+ vt_now_desc_speaking: "Cancel the current speaker and open the vote immediately.",
57
+ vt_now_desc_idle: "Skip any queued directors and open the vote immediately.",
58
+ vt_after_label: "After current speaker",
59
+ vt_after_desc_speaking: "Let the current speaker finish their turn, then open the vote.",
60
+ vt_after_desc_idle: "No one is speaking — pick Interrupt now.",
61
+ vt_cancel: "Cancel",
62
+ vt_cancel_desc: "Keep the room running · don't open the vote.",
45
63
 
46
64
  paused_bar_template: "// discussion paused.",
47
65
  adjourned_strong: "// room adjourned.",
@@ -372,6 +390,17 @@
372
390
  cmp_voice_tooltip: "Enable voice meeting",
373
391
  cmp_voice_label: "Voice Mode",
374
392
 
393
+ rt_speaking: "Speaking",
394
+ rt_thinking: "Thinking",
395
+ rt_user_title: "Chairman",
396
+ rt_toggle_transcript: "Transcript",
397
+ rt_toggle_roundtable: "Round table",
398
+ rt_toggle_enable_voice: "Voice mode",
399
+ rt_aria_stage: "Speaker round-table",
400
+ rt_aria_speaking: "currently speaking: {name}",
401
+ rt_aria_queue: "up next: {names}",
402
+ rt_aria_idle: "no one speaking",
403
+
375
404
  conv_stage_analyzing_title: "Analyzing topic",
376
405
  conv_stage_analyzing_deck: "Routing your topic to the right perspectives",
377
406
  conv_stage_seating_title: "Seating directors",
@@ -742,42 +771,15 @@ When the room ___, raise an objection.`,
742
771
  onb_show: "show",
743
772
  onb_hide: "hide",
744
773
 
745
- /* ─── Backfill · keys referenced by app.js but not yet defined
746
- in the i18n bundle. The PR introducing i18n was based on an
747
- older fork that didn't include the v0.1.9 session-analytics
748
- card / brief retry banner / various adjourn + composer paths.
749
- English-only for now · the Chinese block falls back here via
750
- the `STR[loc][key] ?? STR.en[key] ?? key` lookup chain. */
751
-
752
- // Adjourn modal
753
- adj_classify_adjourn: "room · adjourn",
754
- adj_classify_generate: "room · generate report",
755
- adj_classify_right_terminal: "// terminal",
756
- adj_classify_right_posthoc: "// post-hoc",
757
- adj_title_file: "File the report?",
758
- adj_title_generate: "Generate a report",
759
- adj_close_aria: "Close",
760
- adj_meta_room_kicker: "// room #",
761
- adj_meta_sep: "·",
762
- adj_meta_turns: "turns",
763
- adj_key_subject: "// subject",
764
- adj_key_authors: "// authors",
765
- adj_key_turns: "// turns",
766
- adj_agents_count: "{n} agents",
767
- adj_note_adjourn:
768
- "The chair compiles a report from the room's transcript. Pick the format below — the room is marked adjourned and the report is filed in the chat once it's ready.",
769
- adj_note_generate:
770
- "Generate a report for this adjourned room. Pick the format below — the report lands in the chat once it's ready.",
771
- adj_skip: "End without report",
772
- adj_cancel: "[ Cancel ]",
773
- adj_confirm_file: "[ Adjourn & file ]",
774
- adj_confirm_generate: "[ Generate ]",
775
- adj_busy_adjourn: "[ Adjourning… ]",
776
- adj_busy_generate: "[ Generating… ]",
777
- adj_err_adjourn: "Adjourn failed: ",
778
- adj_err_generate: "Generate failed: ",
779
-
780
- // Agent composer
774
+ /* ─── Late-add keys · only for keys genuinely missing from the
775
+ original i18n bundle. The earlier rev of this section
776
+ duplicated ~328 already-defined keys (a wrong-shape grep
777
+ declared them missing); 327 of those duplicates were
778
+ identical to the originals so harmless, but `rep_load_more`
779
+ had a `{batch}` placeholder vs the original's `{load}`,
780
+ which never substituted and broke the All Reports load-more
781
+ button. Keep this section minimal · only the keys that
782
+ truly don't exist above. */
781
783
  ag_cmp_prompt: "Describe the director you want",
782
784
  ag_cmp_placeholder:
783
785
  "A custom director can be your hard contrarian, your domain specialist, your missing senior advisor — anyone you keep wishing was at the table.",
@@ -787,355 +789,6 @@ When the room ___, raise an objection.`,
787
789
  ag_cmp_manual: "or configure manually",
788
790
  ag_cmp_model_label: "model",
789
791
  ag_cmp_generating: "drafting…",
790
- ag_gen_header: "drafting your director",
791
- ag_gen_step: "step {n} of 5",
792
- ag_gen_elapsed: "{s}s elapsed",
793
- ag_preview_kicker: "// preview · review and save",
794
- ag_preview_name: "name",
795
- ag_preview_role: "role",
796
- ag_preview_bio: "bio",
797
- ag_preview_quote: "cover quote",
798
- ag_preview_instruction: "instruction",
799
- ag_preview_radar_aria: "ability radar",
800
- ag_preview_save: "[ Save director ]",
801
- ag_preview_reroll: "↻ reroll avatar",
802
- ag_preview_redo: "↻ redo from scratch",
803
- ag_preview_discard: "✕ discard",
804
- ag_err_title_fail: "Generation failed",
805
- ag_err_title_timeout: "Generation timed out",
806
- ag_err_kicker_fail: "// error",
807
- ag_err_kicker_timeout: "// timeout",
808
- ag_err_desc:
809
- "Your description didn't make it through — the model returned an error.",
810
- ag_err_hint_fail:
811
- "Could be a transient API issue. Retry, or simplify the description.",
812
- ag_err_hint_timeout:
813
- "The request took longer than 90 seconds. Try a shorter description, or pick a faster model.",
814
- ag_err_prompt: "what you described:",
815
- ag_err_retry: "[ ↻ Retry ]",
816
- ag_err_discard: "[ ✕ Discard ]",
817
- ag_ws_label: "web search",
818
- ag_ws_enabled: "ON",
819
- ag_ws_disabled: "OFF",
820
- ag_ws_needs_key: "needs key",
821
- ag_ws_title_on: "Web search enabled · this director can search the web during rooms",
822
- ag_ws_title_off: "Web search disabled · enable to let this director search the web",
823
- ag_ws_title_needs:
824
- "Web search needs a Brave Search API key · configure in user settings",
825
-
826
- // Sidebar
827
- sidebar_host: "// host",
828
- sidebar_expand: "Expand sidebar",
829
- sidebar_chair_badge: "chair",
830
- sidebar_chair_badge_title: "Chair · the moderator agent",
831
- sidebar_chair_note: "// the chair convenes every room",
832
- sidebar_chair_role_fallback: "Moderator",
833
- sidebar_paused: "paused",
834
- sidebar_pin: "Pin",
835
- sidebar_unpin: "Unpin",
836
- sidebar_role_director: "Director",
837
- sidebar_status_active: "active",
838
- sidebar_section_live: "// live",
839
- sidebar_section_paused: "// paused",
840
- sidebar_section_adjourned: "// adjourned",
841
- sidebar_sec_chair: "// chair",
842
- sidebar_sec_pinned: "// pinned",
843
- sidebar_sec_core: "// core",
844
- sidebar_sec_custom: "// custom",
845
- sidebar_no_adjourned_title: "No adjourned rooms yet",
846
- sidebar_no_adjourned_deck: "Adjourned rooms with filed briefs land here.",
847
- sidebar_delete_room: "Delete room",
848
-
849
- // Room header (system chrome · English-only)
850
- room_settings: "Room settings",
851
- room_pause_verb: "Pause",
852
- room_resume_verb: "Resume",
853
- room_view_report: "[ View Report ]",
854
- room_view_report_multi: "[ View Report · {n} ▾ ]",
855
- room_view_report_title_multi: "{n} reports · click to choose",
856
- room_generate_report: "Generate Report",
857
- room_generate_report_title: "File a brief from this session",
858
- room_stamp_paused: "paused {ago}",
859
- room_stamp_adjourned: "adjourned {ago}",
860
- room_stamp_opened: "opened {ago}",
861
- room_chair_pick_title: "Chair has selected the next speaker",
862
- room_cast_n: "{n} directors",
863
- rooms_one: "{n} room",
864
- rooms_many: "{n} rooms",
865
-
866
- // Composer (new room)
867
- cmp_tone_label: "tone",
868
- cmp_intensity_label: "intensity",
869
- cmp_voice_label: "Voice Mode",
870
- cmp_voice_tooltip: "Voice mode · directors speak aloud during the room",
871
-
872
- // Convene · seating + opener
873
- conv_banner_convening: "Convening directors…",
874
- conv_seated_label: "seated",
875
- conv_stage_preparing_title: "preparing room",
876
- conv_stage_preparing_deck: "the chair is gathering context…",
877
- conv_stage_analyzing_title: "analyzing your question",
878
- conv_stage_analyzing_deck: "the chair is reading the room's seed…",
879
- conv_stage_seating_title: "seating directors",
880
- conv_stage_seating_deck: "the cast is taking their places…",
881
- convene_eyebrow: "▸ Convene · Initial Question",
882
- convene_followup_label: "follow-up",
883
- convene_room_label: "room #{number}",
884
- convene_meta_to: "to {names}",
885
- convene_parent_session_title: "from session #{number}",
886
- convene_show_more: "Show more ↓",
887
- convene_show_less: "Show less ↑",
888
-
889
- // Round-open (RO) + round-prompt (RP)
890
- ro_round: "round {n}",
891
- ro_mode_parallel: "parallel",
892
- ro_mode_reactive: "reactive",
893
- rp_chair_recommends: "the chair recommends:",
894
- rp_continue_next: "▸ Continue to next round",
895
- rp_adjourn_room_file: "▸ Adjourn & file brief",
896
- rp_spent_label: "spent",
897
- rp_spent_round: "this round",
898
- round_clarifying: "the chair is clarifying your question…",
899
- round_end_open_vote: "open the round-end vote",
900
- round_end_vote_above: "vote on the highlights above",
901
-
902
- // Key points (KP) round-end card
903
- kp_eyebrow_drafting: "// chair · drafting recap",
904
- kp_eyebrow_vote: "// chair · round recap",
905
- kp_eyebrow_degraded: "// chair · partial recap",
906
- kp_pending_drafting: "the chair is drafting…",
907
- kp_btn_continue_next: "[ ▸ Continue ]",
908
- kp_btn_adjourn: "[ ⊘ Adjourn ]",
909
- kp_btn_adjourn_brief: "[ ⊘ Adjourn & file brief ]",
910
- kp_ctas_spent: "spent {tokens} this round",
911
- kp_keep_mode: "keep current",
912
- kp_mode_current_fallback: "current",
913
- kp_shift_eyebrow_prefix: "the chair suggests shifting →",
914
- kp_switch_to: "switch to {mode}",
915
- kp_vote_aria_up: "Upvote",
916
- kp_vote_aria_down: "Downvote",
917
- kp_vote_drop: "drop",
918
- kp_vote_more: "more",
919
-
920
- // Brief card / tabs / banners
921
- brief_chair_fallback: "Chair",
922
- brief_filed_by: "filed by {name}",
923
- brief_filed_stamp: "filed {ago}",
924
- brief_filed_generating: "generating…",
925
- brief_meta_authors: "authors",
926
- brief_open_report: "[ ▸ Open report ]",
927
- brief_supplement_btn: "[ + Add a perspective ]",
928
- brief_report_tag: "report",
929
- brief_untitled: "(untitled)",
930
- brief_total_line: "{count} {unit}",
931
- brief_output_head: "// output",
932
- brief_stage_kicker: "// composing",
933
- brief_stat_writing: "writing",
934
- brief_timing_eta: "{s}s remaining",
935
- brief_timing_inband: "in band",
936
- brief_timing_over: "{s}s over",
937
- brief_fmt_min: "{m}m",
938
- brief_fmt_min_sec: "{m}m {s}s",
939
- brief_fmt_sec: "{s}s",
940
- brief_range_min: "{lo}–{hi} min",
941
- brief_range_sec: "{lo}–{hi}s",
942
- brief_hard_timeout_msg:
943
- "the brief writer didn't finish in {minutes} minutes — likely a stuck stream.",
944
- brief_wc_words: "{n} words",
945
- brief_wc_one_word: "1 word",
946
- brief_wc_approx_chars: "~{n} chars",
947
- brief_tab_initial: "initial",
948
- brief_tab_supplement_prefix: "supplement: ",
949
- brief_tab_tooltip_initial: "Initial brief filed at adjourn",
950
- brief_tab_delete_title: "Delete this brief",
951
- brief_delete_label: "Delete",
952
- brief_retry: "Retry",
953
- brief_dismiss: "Dismiss",
954
- brief_regen_failed: "Regeneration failed.",
955
- brief_regen_timeout: "Regeneration took too long and was cancelled.",
956
- brief_regen_interrupted: "Regeneration was interrupted before it finished.",
957
- brief_err_stamp_failed: "// failed",
958
- brief_err_stamp_timeout: "// timed out",
959
- brief_err_stamp_interrupted: "// interrupted",
960
- brief_err_kicker_failed: "couldn't compose",
961
- brief_err_kicker_timeout: "took too long",
962
- brief_err_kicker_interrupted: "stopped mid-write",
963
- brief_err_detail_timeout:
964
- "The brief writer didn't finish in time. This is usually a slow / stuck model — retrying often works.",
965
- brief_err_detail_interrupted:
966
- "The previous attempt was interrupted before it finished — likely a server restart while the brief was streaming.",
967
- brief_err_hint_failed_html: "Pick a different model in your <a href=\"#\" data-open-user-settings>user settings</a>, then retry.",
968
- brief_err_hint_generic_html: "Make sure your model API key is configured in <a href=\"#\" data-open-user-settings>user settings</a>.",
969
- brief_err_hint_scaffold_html: "The structured spine couldn't compose. Switch to the report mode in <a href=\"#\" data-open-user-settings>settings</a> or retry.",
970
- brief_err_cta_regenerate: "[ ↻ Regenerate ]",
971
-
972
- // Brief harvest categories (sectioned brief composer)
973
- brief_harvest_claims: "claims",
974
- brief_harvest_evidence: "evidence",
975
- brief_harvest_assumptions: "assumptions",
976
- brief_harvest_risks: "risks",
977
- brief_harvest_open_questions: "open questions",
978
- brief_harvest_actions: "actions",
979
- brief_harvest_quotes: "quotes",
980
- brief_harvest_tensions: "tensions",
981
- brief_harvest_opportunities: "opportunities",
982
-
983
- // No-brief panel + nudge card on adjourned-no-brief rooms
984
- nb_eyebrow: "adjourned · no brief filed",
985
- nb_body:
986
- "this room ended without filing a report. you can generate one now — the chair will compile from the transcript.",
987
- nb_cta: "[ ▸ Generate Report ]",
988
- nb_chair_fallback: "Chair",
989
- nk_classification: "ROOM · ADJOURNED",
990
- nk_tag: "// no report",
991
- nk_title: "Walk away with a report",
992
- nk_deck:
993
- "the room is closed but no report was filed. compile one now — the chair will draft from the transcript.",
994
- nk_primary: "[ ▸ Generate Report ]",
995
- nk_primary_deck: "compile a report from this transcript",
996
- nk_dismiss: "[ ✕ Dismiss ]",
997
- nk_frontend_gate: "// generation in flight…",
998
-
999
- // Session-analytics card · post-adjourn summary
1000
- sa_head: "// session",
1001
- sa_stamp: "completed {ago}",
1002
- sa_seg_title: "this session",
1003
- sa_tokens: "tokens",
1004
- sa_messages: "messages",
1005
- sa_rounds: "rounds",
1006
- sa_minutes: "min",
1007
- sa_model_head: "model usage",
1008
- sa_value_head: "what stuck",
1009
- sa_value_empty: "no upvoted highlights · the chair's recap stood unchallenged.",
1010
- sa_voted: "{n} ▲ voted",
1011
- sa_seconded: "{n} seconded",
1012
- sa_probed: "{n} probed",
1013
-
1014
- // Pause / send-confirm modals
1015
- pause_class: "ROOM · PAUSE",
1016
- pause_right: "// confirm",
1017
- pause_tag: "// pause room",
1018
- pause_title: "Pause the room?",
1019
- pause_deck:
1020
- "the room state is preserved — you can resume from this exact spot later.",
1021
- pause_soft_mark: "soft pause",
1022
- pause_soft_deck: "queue stays · directors finish their current turn",
1023
- pause_hard_mark: "hard stop",
1024
- pause_hard_deck: "abort streams immediately · no graceful finish",
1025
- pause_cancel_mark: "✕",
1026
- pause_cancel_deck: "keep the room running",
1027
- pause_bar_paused: "// discussion paused.",
1028
- pause_bar_resume: "[ ▶ Resume Discussion ]",
1029
- pause_bar_adjourn: "[ ⏏ Adjourn ]",
1030
- pause_bar_next: "next turn:",
1031
- pause_bar_add_input: "add a prompt for resume",
1032
-
1033
- sc_send_class: "ROOM · INPUT",
1034
- sc_send_right: "// dispatch",
1035
- sc_send_tag: "// send",
1036
- sc_send_title: "How should this land?",
1037
- sc_send_deck: "the queue is mid-turn · pick how your input enters the room.",
1038
- sc_queue_mark: "▼ queue",
1039
- sc_queue_deck: "your message lands after {speaker} finishes speaking.",
1040
- sc_interrupt_mark: "⊘ interrupt",
1041
- sc_interrupt_deck: "stop the current speaker · your message takes the floor.",
1042
- sc_cancel_mark: "✕",
1043
- sc_cancel_deck: "back out · don't send.",
1044
- sc_speaker_fallback: "the current speaker",
1045
-
1046
- // Queue
1047
- q_speaking: "speaking",
1048
- q_state_speaking: "speaking",
1049
- q_queued: "queued · {n}",
1050
- q_pending_chair: "the chair is preparing…",
1051
- q_pending_vote: "round-end vote pending",
1052
- q_pending_waits_chair: "waiting on the chair…",
1053
- q_pending_your_vote: "your vote · cast above",
1054
- q_user_queued: "you · queued",
1055
- q_more_queued: "+{n} more queued",
1056
- q_idle: "idle · type to interject",
1057
- q_cancel: "cancel",
1058
-
1059
- // Reports list (All Reports view)
1060
- rep_kicker: "// archive",
1061
- rep_title: "All Reports",
1062
- rep_meta: "{total} {unit}{rooms}",
1063
- rep_meta_room_n: "{n} rooms",
1064
- rep_meta_room_one: "{n} room",
1065
- rep_total_n: "{n} reports",
1066
- rep_total_one: "{n} report",
1067
- rep_showing: "showing {n}",
1068
- rep_filter_all: "All",
1069
- rep_filter_today: "Today",
1070
- rep_filter_week: "This week",
1071
- rep_filter_earlier: "Earlier",
1072
- rep_filter_archive_label: "the archive",
1073
- rep_aria_filters: "Filter reports by recency",
1074
- rep_group_today: "Today",
1075
- rep_group_yesterday: "Yesterday",
1076
- rep_group_week: "This week",
1077
- rep_group_earlier: "Earlier",
1078
- rep_empty_kicker_archive: "// archive empty",
1079
- rep_empty_kicker_window: "// window empty",
1080
- rep_empty_title_none:
1081
- "Run a session and adjourn — once the chair files, every brief across every room lands here.",
1082
- rep_empty_title_window:
1083
- "Run a session and adjourn — once the chair files, briefs in this window land here.",
1084
- rep_empty_deck_all: "Nothing's been filed yet.",
1085
- rep_empty_deck_window: "No reports in this window.",
1086
- rep_empty_deck_filter: "No reports in {label}.",
1087
- rep_cta_show_all: "Show all reports",
1088
- rep_cta_convene: "[ + Convene a room ]",
1089
- rep_load_more: "Load {batch} more · {remaining} remaining",
1090
-
1091
- // Notes (All Notes view + per-room notes)
1092
- notes_kicker: "// chairman · saved excerpts",
1093
- notes_title: "All Notes",
1094
- notes_meta: "{total} {unit}{rooms}",
1095
- notes_one: "1 note",
1096
- notes_many: "{n} notes",
1097
- notes_aria_filters: "Filter notes by recency",
1098
- notes_filter_all: "All",
1099
- notes_director_fallback: "Director",
1100
- notes_item_room: "from {room}",
1101
- notes_empty_window: "this window",
1102
- notes_empty_title: "No notes in {label}",
1103
- notes_empty_deck: "Pick a different filter, or jump back to the full archive.",
1104
- notes_empty_filter_deck: "No notes in {label}",
1105
- notes_cta_show_all: "Show all notes",
1106
- note_saved: "Note saved",
1107
-
1108
- // Messages · chair / web-search / context bubble
1109
- msg_tag_you: "you",
1110
- msg_tag_chair: "chair",
1111
- msg_chair_pick: "the chair picked the next speaker",
1112
- msg_chair_billing_kicker: "// chair",
1113
- msg_chair_direct_kicker: "// directed",
1114
- msg_chair_intervention_kicker: "// chair · stepping in",
1115
- msg_chair_display_fallback: "Chair",
1116
- msg_ctx_title: "Context",
1117
- msg_ctx_inline: "with context",
1118
- msg_model_title: "Model · {modelV}",
1119
- msg_skills_used: "skills · {names}",
1120
- msg_ws_banner: "web search",
1121
- msg_ws_btn: "{n} sources",
1122
- msg_ws_btn_one: "1 source",
1123
- msg_ws_done: "{n} sources fetched",
1124
- msg_ws_done_one: "1 source fetched",
1125
- msg_ws_query_label: "query:",
1126
- msg_ws_searching: "searching…",
1127
- msg_ws_failed: "search failed",
1128
- msg_ws_failed_elapsed: "search failed after {s}s",
1129
- msg_ws_secs: "{s}s",
1130
- msg_ws_title: "Web search results",
1131
- msg_ws_toggle: "toggle results",
1132
- msg_ws_expand_show: "show",
1133
- msg_ws_expand_hide: "hide",
1134
-
1135
- // Chat-level chrome
1136
- chat_banner: "// chat",
1137
- chair_pend_banner: "the chair is preparing the next move…",
1138
- ending_session_foot: "// session ended",
1139
792
 
1140
793
  // Structured-mode write-stage labels · used by renderBriefStages
1141
794
  // when the brief is magazine / newspaper / ppt. The write step
@@ -1518,6 +1171,17 @@ When the room ___, raise an objection.`,
1518
1171
  cmp_voice_tooltip: "开启语音会议",
1519
1172
  cmp_voice_label: "Voice Mode",
1520
1173
 
1174
+ rt_speaking: "正在说话",
1175
+ rt_thinking: "思考中",
1176
+ rt_user_title: "董事长",
1177
+ rt_toggle_transcript: "字幕",
1178
+ rt_toggle_roundtable: "圆桌",
1179
+ rt_toggle_enable_voice: "语音模式",
1180
+ rt_aria_stage: "圆桌发言席",
1181
+ rt_aria_speaking: "正在发言:{name}",
1182
+ rt_aria_queue: "接下来:{names}",
1183
+ rt_aria_idle: "暂无发言",
1184
+
1521
1185
  conv_stage_analyzing_title: "分析议题",
1522
1186
  conv_stage_analyzing_deck: "haiku 路由器在拆解你提的话题",
1523
1187
  conv_stage_seating_title: "邀请董事",