@azure-id/orc 1.9.1 → 2.0.2
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/CHANGELOG.md +390 -0
- package/README-id.md +20 -36
- package/README.md +24 -34
- package/bin/build-agents.js +206 -109
- package/bin/cli.js +760 -62
- package/bin/gotcha-import.js +1081 -0
- package/bin/gotcha.js +1286 -0
- package/bin/graph-query.js +1 -1
- package/bin/graph.js +717 -717
- package/bin/habit.js +1453 -0
- package/bin/mockrun-catalog.js +281 -276
- package/bin/onboarding-content.js +4 -4
- package/bin/pricing.json +207 -200
- package/bin/run-undo.js +398 -0
- package/bin/trace-write.js +657 -0
- package/bin/verify-contracts.js +527 -81
- package/bin/verify-package.js +58 -11
- package/bin/webui/api.js +26 -0
- package/bin/webui/app.html +239 -232
- package/bin/webui/css/00-tokens.css +110 -92
- package/bin/webui/css/04-motion.css +249 -152
- package/bin/webui/css/06-responsive.css +203 -178
- package/bin/webui/css/panels/behaviour.css +205 -0
- package/bin/webui/css/panels/knowledge.css +563 -116
- package/bin/webui/fixtures/behaviour.js +532 -0
- package/bin/webui/fixtures/extra.js +2036 -2036
- package/bin/webui/fixtures/hookui.js +5 -5
- package/bin/webui/fixtures/index.js +34 -0
- package/bin/webui/fixtures/knowledge.js +7 -1
- package/bin/webui/fixtures/settings.js +305 -305
- package/bin/webui/fixtures/stats.js +16 -0
- package/bin/webui/i18n/en/behaviour.json +143 -0
- package/bin/webui/i18n/en/knowledge.json +117 -2
- package/bin/webui/i18n/en/nav.json +25 -24
- package/bin/webui/i18n/en/tour.json +37 -35
- package/bin/webui/i18n/id/behaviour.json +143 -0
- package/bin/webui/i18n/id/knowledge.json +117 -2
- package/bin/webui/i18n/id/nav.json +25 -24
- package/bin/webui/i18n/id/tour.json +37 -35
- package/bin/webui/js/01-i18n.js +155 -154
- package/bin/webui/js/90-tour.js +498 -494
- package/bin/webui/js/91-shortcuts.js +126 -126
- package/bin/webui/js/99-boot.js +121 -118
- package/bin/webui/js/panels/behaviour.js +1022 -0
- package/bin/webui/js/panels/knowledge.js +552 -7
- package/bin/webui/js/panels/overview.js +13 -4
- package/mock-run/INDEX.md +109 -107
- package/mock-run/context-combiner.md +100 -100
- package/mock-run/gotcha-import.md +118 -0
- package/mock-run/habits.md +129 -0
- package/mock-run/orc-budget.md +534 -534
- package/mock-run/orc-challenge-council.md +262 -262
- package/mock-run/orc-quick.md +6 -1
- package/mock-run/orc-ultra.md +103 -103
- package/package.json +1 -1
- package/templates/agents/MODEL-MAPPING.md +49 -49
- package/templates/agents/orc-advisor-opus-5-xhigh.md +50 -56
- package/templates/agents/orc-analyze-mini-opus-5-med.md +55 -60
- package/templates/agents/orc-analyze-mini-sonnet-5-high.md +55 -58
- package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -75
- package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -110
- package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -114
- package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -112
- package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -132
- package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -109
- package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -109
- package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -90
- package/templates/agents/orc-claude-writer-opus-4-8-high.md +48 -53
- package/templates/agents/orc-claude-writer-opus-5-med.md +48 -55
- package/templates/agents/orc-context-combiner-opus-5-high.md +78 -88
- package/templates/agents/orc-doc-checker-opus-5-low.md +108 -108
- package/templates/agents/orc-doc-writer-opus-5-med.md +134 -134
- package/templates/agents/orc-executor-haiku-4-5.md +14 -6
- package/templates/agents/orc-executor-opus-4-7-high.md +14 -6
- package/templates/agents/orc-executor-opus-4-7-med.md +14 -6
- package/templates/agents/orc-executor-opus-4-8-high.md +14 -6
- package/templates/agents/orc-executor-opus-5-high.md +15 -7
- package/templates/agents/orc-executor-opus-5-low.md +15 -7
- package/templates/agents/orc-executor-opus-5-med.md +15 -7
- package/templates/agents/orc-executor-sonnet-4-6-high.md +14 -6
- package/templates/agents/orc-executor-sonnet-4-6-med.md +14 -6
- package/templates/agents/orc-executor-sonnet-5-high.md +14 -6
- package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -10
- package/templates/agents/orc-judge-opus-5-xhigh.md +81 -85
- package/templates/agents/orc-learn-writer-opus-5-low.md +67 -73
- package/templates/agents/orc-pattern-codifier-opus-5-med.md +58 -65
- package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +58 -63
- package/templates/agents/orc-planner-mini-opus-5-med.md +4 -7
- package/templates/agents/orc-planner-mini-sonnet-5-high.md +2 -3
- package/templates/agents/orc-planner-opus-5-med.md +157 -160
- package/templates/agents/orc-recon-opus-5-low.md +3 -10
- package/templates/agents/orc-recon-sonnet-4-6-med.md +1 -8
- package/templates/agents/orc-retro-opus-5-med.md +8 -10
- package/templates/agents/orc-retro-sonnet-5-high.md +6 -7
- package/templates/agents/orc-reviewer-opus-5-med.md +96 -60
- package/templates/agents/orc-scout-opus-5-low.md +35 -40
- package/templates/agents/orc-scout-sonnet-4-6-high.md +35 -39
- package/templates/agents/orc-system-analyst-opus-5-high.md +115 -120
- package/templates/agents/orc-test-author-opus-5-med.md +70 -71
- package/templates/agents/orc-test-designer-opus-5-high.md +158 -158
- package/templates/agents/orc-test-interpreter-opus-5-low.md +130 -130
- package/templates/agents/orc-trace-writer-haiku-4-5.md +3 -7
- package/templates/agents/orc-verifier-opus-5-med.md +77 -69
- package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +74 -79
- package/templates/agents/orc-wiki-scanner-opus-5-med.md +74 -81
- package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +97 -106
- package/templates/commands/orc-analyze.md +13 -21
- package/templates/commands/orc-fast.md +10 -15
- package/templates/commands/orc-poly.md +12 -21
- package/templates/commands/orc-pr-driver.md +11 -30
- package/templates/commands/orc-pr-setup.md +10 -31
- package/templates/commands/orc-route.md +11 -41
- package/templates/commands/orc-test.md +5 -60
- package/templates/commands/orc-ultra.md +17 -17
- package/templates/commands/orc-verify.md +11 -11
- package/templates/hooks/README.md +36 -2
- package/templates/hooks/orc-effort-guard.js +178 -178
- package/templates/hooks/orc-session-hook.js +264 -0
- package/templates/hooks/orc-statusline.js +9 -7
- package/templates/skills/_shared/README.md +9 -0
- package/templates/skills/_shared/code-graph.md +48 -56
- package/templates/skills/_shared/config-precedence.md +200 -198
- package/templates/skills/_shared/extra-dispatch.md +1331 -1346
- package/templates/skills/_shared/gotchas.md +228 -177
- package/templates/skills/_shared/habits.md +101 -0
- package/templates/skills/_shared/lane-contract.md +84 -0
- package/templates/skills/_shared/opus5-only.md +8 -8
- package/templates/skills/_shared/phases/README.md +142 -83
- package/templates/skills/_shared/phases/analyst-gates.md +125 -136
- package/templates/skills/_shared/phases/execution.md +8 -14
- package/templates/skills/_shared/phases/house-rules.md +27 -32
- package/templates/skills/_shared/phases/intake.md +127 -133
- package/templates/skills/_shared/phases/mock-example.md +46 -56
- package/templates/skills/_shared/phases/plan-handoff.md +91 -97
- package/templates/skills/_shared/phases/planning.md +7 -17
- package/templates/skills/_shared/phases/preflight.md +19 -42
- package/templates/skills/_shared/phases/review.md +23 -27
- package/templates/skills/_shared/phases/rules.md +18 -42
- package/templates/skills/_shared/phases/scoring.md +55 -65
- package/templates/skills/_shared/phases/security-checklist.md +46 -50
- package/templates/skills/_shared/phases/security.md +45 -55
- package/templates/skills/_shared/phases/ship.md +6 -15
- package/templates/skills/_shared/phases/stop-resume.md +2 -5
- package/templates/skills/_shared/phases/summary.md +73 -48
- package/templates/skills/_shared/phases/testgen.md +41 -51
- package/templates/skills/_shared/phases/trace-verbs.md +433 -0
- package/templates/skills/_shared/phases/trace.md +136 -367
- package/templates/skills/_shared/phases/verify.md +62 -70
- package/templates/skills/_shared/phases/wave-grouping.md +128 -133
- package/templates/skills/_shared/phases/wiki-consult.md +10 -6
- package/templates/skills/_shared/read-ladder.md +2 -55
- package/templates/skills/_shared/return-validation.md +17 -70
- package/templates/skills/_shared/review-slice.md +79 -0
- package/templates/skills/_shared/smoke-gate.md +46 -28
- package/templates/skills/context-combiner/SKILL.md +16 -45
- package/templates/skills/context-combiner/schemas/combined-report.md +78 -78
- package/templates/skills/orc/README.md +2 -2
- package/templates/skills/orc/SKILL.md +41 -69
- package/templates/skills/orc/config.md +9 -9
- package/templates/skills/orc/examples/full-run-mock.md +73 -73
- package/templates/skills/orc/references/effort-and-mode.md +222 -222
- package/templates/skills/orc/references/pattern-gate.md +89 -89
- package/templates/skills/orc/references/phases/intake.md +41 -47
- package/templates/skills/orc/references/phases/integration.md +13 -19
- package/templates/skills/orc/references/preflight-report.md +10 -11
- package/templates/skills/orc/references/ultra-mode.md +11 -9
- package/templates/skills/orc/subskills/orc-execution/SKILL.md +27 -73
- package/templates/skills/orc/subskills/orc-execution/core.md +12 -99
- package/templates/skills/orc/subskills/orc-execution/subagent.md +14 -13
- package/templates/skills/orc/subskills/orc-planner/SKILL.md +2 -2
- package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -121
- package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +35 -76
- package/templates/skills/orc/subskills/orc-review-verify/core.md +52 -135
- package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -7
- package/templates/skills/orc/subskills/orc-testgen/SKILL.md +34 -45
- package/templates/skills/orc/subskills/orc-testgen/core.md +20 -59
- package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -7
- package/templates/skills/orc-advisor/SKILL.md +56 -60
- package/templates/skills/orc-analyze/SKILL.md +32 -68
- package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -42
- package/templates/skills/orc-analyze/schemas/report-audit.md +84 -83
- package/templates/skills/orc-analyze/schemas/report-prose.md +64 -63
- package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -78
- package/templates/skills/orc-analyze-mini/SKILL.md +35 -70
- package/templates/skills/orc-challenge/README.md +142 -142
- package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -273
- package/templates/skills/orc-challenge/references/council.md +315 -315
- package/templates/skills/orc-challenge/references/intake.md +171 -171
- package/templates/skills/orc-claude/SKILL.md +14 -14
- package/templates/skills/orc-diy/README.md +174 -143
- package/templates/skills/orc-diy/SKILL.md +23 -74
- package/templates/skills/orc-diy/references/blocks/pattern.md +18 -18
- package/templates/skills/orc-diy/references/flow-schema.md +1 -1
- package/templates/skills/orc-doc/README.md +229 -229
- package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -325
- package/templates/skills/orc-doc/references/chunking.md +527 -527
- package/templates/skills/orc-fast/SKILL.md +45 -73
- package/templates/skills/orc-judge/SKILL.md +77 -82
- package/templates/skills/orc-learn/SKILL.md +14 -14
- package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -61
- package/templates/skills/orc-mini/SKILL.md +65 -113
- package/templates/skills/orc-pattern/SKILL.md +27 -48
- package/templates/skills/orc-poly/SKILL.md +32 -61
- package/templates/skills/orc-pr-driver/SKILL.md +25 -51
- package/templates/skills/orc-pr-driver/references/green-gate.md +113 -105
- package/templates/skills/orc-pr-setup/SKILL.md +20 -45
- package/templates/skills/orc-quick/README.md +43 -2
- package/templates/skills/orc-quick/SKILL.md +76 -107
- package/templates/skills/orc-quick/references/dispatch-gate.md +16 -5
- package/templates/skills/orc-quick/references/gh-mode.md +48 -1
- package/templates/skills/orc-quick/references/look.md +3 -1
- package/templates/skills/orc-retro/SKILL.md +19 -18
- package/templates/skills/orc-retro/examples/retro-mock.md +1 -1
- package/templates/skills/orc-route/SKILL.md +25 -45
- package/templates/skills/orc-test/SKILL.md +16 -37
- package/templates/skills/orc-verify/SKILL.md +21 -39
- package/templates/skills/orc-verify/examples/verify-mock.md +33 -33
- package/templates/skills/orc-wait/SKILL.md +156 -163
- package/templates/skills/orc-wiki/references/extra.md +1 -1
- package/templates/skills/orc-wiki/references/phases/phase-0.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-1.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-2.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-3.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-3c.md +1 -6
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
"knowledge.strip.patterns": "pola",
|
|
141
141
|
"knowledge.strip.pending": "menunggu",
|
|
142
142
|
"knowledge.strip.wiki": "wiki",
|
|
143
|
-
"knowledge.sub": "
|
|
143
|
+
"knowledge.sub": "Apa yang sudah ORC ketahui tentang repo ini: wiki, graf kode, code-pattern yang tersimpan, dan memori perbaikan.",
|
|
144
144
|
"knowledge.syncFree": "Daftarkan halaman (gratis)",
|
|
145
145
|
"knowledge.syncOk": "Halaman terdaftar",
|
|
146
146
|
"knowledge.tab.coverage": "Cakupan",
|
|
@@ -181,5 +181,120 @@
|
|
|
181
181
|
"knowledge.gain.execCalls": "pembacaan pekerja",
|
|
182
182
|
"knowledge.gain.execTokens": "hasil alat pekerja",
|
|
183
183
|
"knowledge.gain.sessionTokens": "hasil alat sesi",
|
|
184
|
-
"knowledge.gain.noise": "perubahan yang lebih kecil dari sebarannya adalah derau, bukan hasil"
|
|
184
|
+
"knowledge.gain.noise": "perubahan yang lebih kecil dari sebarannya adalah derau, bukan hasil",
|
|
185
|
+
"knowledge.tab.graph": "Graf kode",
|
|
186
|
+
"knowledge.cg.exact.title": "Semua angka, persis seperti yang dikirim CLI",
|
|
187
|
+
"knowledge.cg.exact.lead": "Angka yang sama dengan gambar di atas, tanpa gambar. Pakai kartu ini jika Anda butuh nilai yang persis.",
|
|
188
|
+
"knowledge.cg.state.title": "Posisi graf kode Anda sekarang",
|
|
189
|
+
"knowledge.cg.state.lead": "Graf kode selalu berada di salah satu dari empat status. Kotak yang menyala adalah status repo ini sekarang.",
|
|
190
|
+
"knowledge.cg.state.off": "Fiturnya mati. Tidak ada yang dibuat dan tidak ada yang dibaca.",
|
|
191
|
+
"knowledge.cg.state.none": "Fiturnya menyala, tetapi petanya belum dibuat.",
|
|
192
|
+
"knowledge.cg.state.fresh": "Peta cocok dengan setiap file di disk. Lane bisa memercayainya.",
|
|
193
|
+
"knowledge.cg.state.drifted": "Ada file yang berubah setelah pembuatan terakhir. Lane memakai peta hanya sebagai petunjuk.",
|
|
194
|
+
"knowledge.cg.state.toNone": "nyalakan",
|
|
195
|
+
"knowledge.cg.state.toFresh": "pembuatan pertama (gratis)",
|
|
196
|
+
"knowledge.cg.state.toDrifted": "Anda mengubah kode",
|
|
197
|
+
"knowledge.cg.state.loop": "↺ DRIFTED kembali ke FRESH dengan satu update gratis.",
|
|
198
|
+
"knowledge.cg.state.here": "sekarang",
|
|
199
|
+
"knowledge.cg.state.lineNote": "Ini baris yang dicetak lane di chat saat membaca graf:",
|
|
200
|
+
"knowledge.cg.now.off": "Untuk memakai graf kode, jalankan perintah ini di terminal. Menyalakan fitur adalah keputusan Anda, jadi tidak ada tombol.",
|
|
201
|
+
"knowledge.cg.now.none": "Buat petanya sekarang. Gratis: parser membaca file, dan tidak ada model yang berjalan.",
|
|
202
|
+
"knowledge.cg.now.drifted": "Update petanya sekarang, atau biarkan lane berikutnya melakukannya. Update-nya gratis.",
|
|
203
|
+
"knowledge.cg.now.fresh": "Tidak ada yang perlu dilakukan. Petanya terbaru.",
|
|
204
|
+
"knowledge.cg.flow.title": "Cara kerja graf kode",
|
|
205
|
+
"knowledge.cg.flow.lead": "Graf kode adalah peta lokal kode Anda: letak setiap fungsi, dan apa yang terhubung dengannya. Peta dibuat dalam lima langkah.",
|
|
206
|
+
"knowledge.cg.flow.code": "Kode Anda",
|
|
207
|
+
"knowledge.cg.flow.codeWhat": "File yang dilacak git di repo ini.",
|
|
208
|
+
"knowledge.cg.flow.files": "{n} file",
|
|
209
|
+
"knowledge.cg.flow.parse": "Parser",
|
|
210
|
+
"knowledge.cg.flow.parseWhat": "Membaca setiap file dan menemukan fungsi, kelas, route, pemanggilan, dan import.",
|
|
211
|
+
"knowledge.cg.flow.parseCost": "0 token model",
|
|
212
|
+
"knowledge.cg.flow.store": "Peta",
|
|
213
|
+
"knowledge.cg.flow.storeWhat": "Disimpan di mesin ini, di dalam folder ORC repo ini. Hanya file yang berubah yang dibaca ulang.",
|
|
214
|
+
"knowledge.cg.flow.symbols": "{n} simbol",
|
|
215
|
+
"knowledge.cg.flow.ask": "Pertanyaan",
|
|
216
|
+
"knowledge.cg.flow.askWhat": "Lane bertanya: di mana ini? Siapa yang memanggilnya? Apa yang rusak jika ini berubah?",
|
|
217
|
+
"knowledge.cg.flow.card": "Kartu singkat",
|
|
218
|
+
"knowledge.cg.flow.cardWhat": "Agent mendapat jawaban kecil dengan file:baris. Lalu agent hanya membaca baris itu.",
|
|
219
|
+
"knowledge.cg.flow.cardCost": "memakai token konteks",
|
|
220
|
+
"knowledge.cg.flow.notesTag": "lapisan opsional",
|
|
221
|
+
"knowledge.cg.flow.notes": "Catatan: model kecil bisa menulis satu kalimat untuk setiap fungsi yang berubah. Hanya bagian ini yang bisa memakan biaya model. Mode catatan di sini: {mode}.",
|
|
222
|
+
"knowledge.cg.anatomy.title": "Seperti apa graf kode (contoh, bukan kode Anda)",
|
|
223
|
+
"knowledge.cg.anatomy.lead": "Empat file kecil dari toko rekaan, digambar seperti graf melihatnya. Arahkan pointer ke sebuah titik untuk melihat apa yang graf ketahui tentangnya.",
|
|
224
|
+
"knowledge.cg.anatomy.hint": "Arahkan pointer ke sebuah titik, atau pindah ke titik itu dengan tombol Tab.",
|
|
225
|
+
"knowledge.cg.anatomy.route": "Sebuah route. Route ini memakai requireAuth sebagai middleware (ref) dan memanggil findOrder.",
|
|
226
|
+
"knowledge.cg.anatomy.list": "Sebuah fungsi. Fungsi ini memanggil findOrder. Tidak ada yang memanggilnya di contoh ini.",
|
|
227
|
+
"knowledge.cg.anatomy.auth": "Middleware. Route menyebutnya dengan nama, jadi perubahan di sini berdampak ke route itu.",
|
|
228
|
+
"knowledge.cg.anatomy.find": "Dua simbol memanggilnya, dan ia memanggil query. Perubahan di sini berdampak ke kedua pemanggilnya.",
|
|
229
|
+
"knowledge.cg.anatomy.query": "Ujung rantai. Perubahan di sini berdampak ke findOrder, dan lewat itu, ke dua simbol lagi.",
|
|
230
|
+
"knowledge.cg.legend.file": "File",
|
|
231
|
+
"knowledge.cg.legend.fileWhat": "Satu file sumber. Graf tahu path-nya dan simbol apa saja di dalamnya.",
|
|
232
|
+
"knowledge.cg.legend.symbol": "Simbol",
|
|
233
|
+
"knowledge.cg.legend.symbolWhat": "Sesuatu yang bernama di sebuah file: fungsi, kelas, method, atau route.",
|
|
234
|
+
"knowledge.cg.legend.call": "Pemanggilan",
|
|
235
|
+
"knowledge.cg.legend.callWhat": "Satu simbol memanggil simbol lain. Titik yang bergerak berjalan dari pemanggil ke yang dipanggil.",
|
|
236
|
+
"knowledge.cg.legend.ref": "Ref",
|
|
237
|
+
"knowledge.cg.legend.refWhat": "Sebuah simbol diberikan lewat namanya, misalnya sebagai middleware atau callback.",
|
|
238
|
+
"knowledge.cg.legend.import": "Import",
|
|
239
|
+
"knowledge.cg.legend.importWhat": "Satu file meng-import file lain.",
|
|
240
|
+
"knowledge.cg.num.title": "Graf Anda, dalam angka",
|
|
241
|
+
"knowledge.cg.num.filesWhat": "File yang dibaca parser.",
|
|
242
|
+
"knowledge.cg.num.symbolsWhat": "Hal bernama yang ditemukan di file itu.",
|
|
243
|
+
"knowledge.cg.num.perFile": "Simbol per file",
|
|
244
|
+
"knowledge.cg.num.perFileWhat": "Rata-ratanya. Nilai rendah berarti sebagian besar pertanyaan tidak menemukan apa pun.",
|
|
245
|
+
"knowledge.cg.num.generationWhat": "Nomor pembuatan. Naik satu setiap kali peta berubah.",
|
|
246
|
+
"knowledge.cg.num.behind": "Berubah sejak pembuatan terakhir",
|
|
247
|
+
"knowledge.cg.num.added": "ditambah",
|
|
248
|
+
"knowledge.cg.num.changed": "diubah",
|
|
249
|
+
"knowledge.cg.num.deleted": "dihapus",
|
|
250
|
+
"knowledge.cg.num.densityTitle": "Berapa banyak file yang punya simbol bernama",
|
|
251
|
+
"knowledge.cg.num.hasSymbols": "{pct} % punya simbol",
|
|
252
|
+
"knowledge.cg.num.empty": "{pct} % kosong ({n} file)",
|
|
253
|
+
"knowledge.cg.num.lang": "{files} file · {symbols} simbol · {zero} kosong",
|
|
254
|
+
"knowledge.cg.num.densityNote": "File kosong bukan kesalahan. Itu file yang tidak punya fungsi atau kelas bernama menurut parser, misalnya template atau file config.",
|
|
255
|
+
"knowledge.cg.gain.title": "Biaya graf, dan perkiraan hematnya",
|
|
256
|
+
"knowledge.cg.gain.noneHint": "Saat lane membaca graf, biaya dan perkiraannya muncul di sini.",
|
|
257
|
+
"knowledge.cg.gain.lead": "Kedua bar memakai skala yang sama. Bar atas adalah apa yang graf masukkan ke konteks agent. Bar bawah adalah pencarian yang kemungkinan tidak perlu lagi.",
|
|
258
|
+
"knowledge.cg.gain.paid": "Dibayar (persis)",
|
|
259
|
+
"knowledge.cg.gain.avoided": "Dihindari (perkiraan)",
|
|
260
|
+
"knowledge.cg.gain.card": "kartu",
|
|
261
|
+
"knowledge.cg.gain.source": "baris sumber",
|
|
262
|
+
"knowledge.cg.gain.hintsPart": "petunjuk",
|
|
263
|
+
"knowledge.cg.gain.envelope": "amplop",
|
|
264
|
+
"knowledge.cg.gain.range": "bagian bergaris adalah rentang antara perkiraan rendah dan tinggi",
|
|
265
|
+
"knowledge.cg.gain.readsTitle": "Pertanyaan yang diajukan lane ({n} panggilan · {runs} run)",
|
|
266
|
+
"knowledge.cg.gain.never": "belum pernah",
|
|
267
|
+
"knowledge.cg.read.ctx": "Letak sebuah simbol, siapa yang memanggilnya, dan apa yang dipanggilnya.",
|
|
268
|
+
"knowledge.cg.read.forSlice": "Tampilan luar setiap file dalam sebuah tugas, sebelum executor mulai.",
|
|
269
|
+
"knowledge.cg.read.impact": "Apa lagi yang terdampak jika file ini berubah.",
|
|
270
|
+
"knowledge.cg.read.map": "File yang paling banyak terhubung lebih dulu. Dipakai untuk perencanaan.",
|
|
271
|
+
"knowledge.cg.read.changes": "Simbol yang disentuh diff saat ini, dengan tingkat risikonya.",
|
|
272
|
+
"knowledge.cg.read.cochange": "File yang menurut riwayat git selalu berubah bersama.",
|
|
273
|
+
"knowledge.cg.read.coverage": "Test mana yang menjangkau file ini.",
|
|
274
|
+
"knowledge.cg.read.path": "Rantai pemanggilan dari satu simbol ke simbol lain.",
|
|
275
|
+
"knowledge.cg.gloss.title": "Arti setiap kata",
|
|
276
|
+
"knowledge.cg.gloss.lead": "Setiap kata di tab ini dan di kartu angka persis, dengan kata-kata sederhana.",
|
|
277
|
+
"knowledge.cg.gloss.gStructure": "Isi peta",
|
|
278
|
+
"knowledge.cg.gloss.gFresh": "Apakah peta terbaru",
|
|
279
|
+
"knowledge.cg.gloss.gQuality": "Apakah peta berguna",
|
|
280
|
+
"knowledge.cg.gloss.gCost": "Biayanya",
|
|
281
|
+
"knowledge.cg.gloss.file": "File sumber yang dilacak git. File yang sangat besar dan folder hasil generate dilewati.",
|
|
282
|
+
"knowledge.cg.gloss.symbol": "Fungsi, kelas, method, atau route bernama yang ditemukan parser.",
|
|
283
|
+
"knowledge.cg.gloss.call": "Garis dari satu simbol ke simbol lain. Graf memakai garis ini untuk menemukan pemanggil dan dampak.",
|
|
284
|
+
"knowledge.cg.gloss.generation": "Nomor pembuatan peta. Setiap jawaban menyebutnya, jadi Anda bisa melihat pembuatan mana yang dipakai agent.",
|
|
285
|
+
"knowledge.cg.gloss.freshDrifted": "FRESH: peta cocok dengan file. DRIFTED: ada file yang berubah sejak pembuatan, jadi jawaban hanya petunjuk dan kode yang menang.",
|
|
286
|
+
"knowledge.cg.gloss.noneOff": "NONE: fitur menyala dan peta belum ada. OFF: fitur mati.",
|
|
287
|
+
"knowledge.cg.gloss.behind": "Berapa file yang ditambah, diubah, dan dihapus setelah pembuatan terakhir.",
|
|
288
|
+
"knowledge.cg.gloss.selfHealTerm": "Perbaikan sendiri",
|
|
289
|
+
"knowledge.cg.gloss.density": "Simbol dibagi file. Nilai rendah membuat sebagian besar pertanyaan kembali kosong.",
|
|
290
|
+
"knowledge.cg.gloss.thin": "CLI menyebut THIN jika sebagian besar file tidak punya simbol bernama. `orc graph audit` menunjukkan file mana, dan alasannya.",
|
|
291
|
+
"knowledge.cg.gloss.notes": "Nilai code_graph_notes. Nilai ini menentukan kapan model kecil menulis satu kalimat untuk setiap fungsi yang berubah.",
|
|
292
|
+
"knowledge.cg.gloss.paid": "Token yang graf masukkan ke konteks agent. Dicatat, jadi persis.",
|
|
293
|
+
"knowledge.cg.gloss.envelope": "Bagian jawaban yang bukan kartu: label, hitungan, dan baris yang dicetak lane.",
|
|
294
|
+
"knowledge.cg.gloss.avoided": "Pencarian dan pembacaan file yang kemungkinan tidak perlu lagi karena graf. Ini perkiraan, jadi selalu berupa rentang.",
|
|
295
|
+
"knowledge.cg.gloss.netTerm": "Bersih",
|
|
296
|
+
"knowledge.cg.gloss.net": "Dihindari dikurangi dibayar, dalam token dan dalam panggilan tool. Ini juga rentang.",
|
|
297
|
+
"knowledge.cg.gloss.hintsTerm": "Petunjuk",
|
|
298
|
+
"knowledge.cg.gloss.hints": "Catatan singkat yang ditambahkan hook saat agent mencari atau membaca file besar. Catatan ini menunjuk ke graf.",
|
|
299
|
+
"knowledge.cg.gloss.measured": "Tombol yang membandingkan run Anda yang asli dengan graf menyala dan mati. Butuh tiga run di setiap kelompok."
|
|
185
300
|
}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
{
|
|
2
|
-
"nav.overview": "Ringkasan",
|
|
3
|
-
"nav.settings": "Pengaturan",
|
|
4
|
-
"nav.rules": "Aturan",
|
|
5
|
-
"nav.lanes": "Lane",
|
|
6
|
-
"nav.runs": "Run",
|
|
7
|
-
"nav.knowledge": "Pengetahuan",
|
|
8
|
-
"nav.stats": "Statistik",
|
|
9
|
-
"nav.
|
|
10
|
-
"nav.
|
|
11
|
-
"nav.
|
|
12
|
-
"nav.
|
|
13
|
-
"nav.
|
|
14
|
-
"nav.
|
|
15
|
-
"nav.
|
|
16
|
-
"nav.
|
|
17
|
-
"nav.
|
|
18
|
-
"nav.
|
|
19
|
-
"nav.
|
|
20
|
-
"nav.
|
|
21
|
-
"nav.
|
|
22
|
-
"nav.
|
|
23
|
-
"nav.
|
|
24
|
-
|
|
1
|
+
{
|
|
2
|
+
"nav.overview": "Ringkasan",
|
|
3
|
+
"nav.settings": "Pengaturan",
|
|
4
|
+
"nav.rules": "Aturan",
|
|
5
|
+
"nav.lanes": "Lane",
|
|
6
|
+
"nav.runs": "Run",
|
|
7
|
+
"nav.knowledge": "Pengetahuan",
|
|
8
|
+
"nav.stats": "Statistik",
|
|
9
|
+
"nav.behaviour": "Perilaku",
|
|
10
|
+
"nav.flow": "Flow",
|
|
11
|
+
"nav.crosslink": "Crosslink",
|
|
12
|
+
"nav.learn": "Belajar",
|
|
13
|
+
"nav.mockrun": "Contoh Penggunaan Skill",
|
|
14
|
+
"nav.experiment": "Eksperimen",
|
|
15
|
+
"nav.maintenance": "Pemeliharaan",
|
|
16
|
+
"nav.pact": "Janji",
|
|
17
|
+
"nav.boundary": "Batas",
|
|
18
|
+
"nav.handoff": "Ubah Sendiri",
|
|
19
|
+
"nav.challenge": "Challenge",
|
|
20
|
+
"nav.extra": "Extra",
|
|
21
|
+
"nav.wait": "Tunggu",
|
|
22
|
+
"nav.test": "Test",
|
|
23
|
+
"nav.docs": "Dokumen",
|
|
24
|
+
"nav.hookui": "Antarmuka CLI Hook"
|
|
25
|
+
}
|
|
@@ -1,35 +1,37 @@
|
|
|
1
|
-
{
|
|
2
|
-
"tour.finished": "Tur selesai — tekan ? kapan saja untuk daftar pintasan",
|
|
3
|
-
"tour.1.title": "Semua yang bukan AI",
|
|
4
|
-
"tour.1.text": "Panel ini mengendalikan separuh ORC yang deterministik — pengaturan, kesehatan, run, pengetahuan, statistik. Ia tidak pernah menjalankan lane dan tidak pernah memanggil model. Tekan 1–9 atau 0 untuk berpindah panel; arahkan kursor ke sini untuk melihat angkanya.",
|
|
5
|
-
"tour.2.title": "Ada yang bermasalah sekarang?",
|
|
6
|
-
"tour.2.text": "Kesehatan instalasi, kesegaran wiki, run yang masih menunggu, dan versi ORC Anda dengan pemeriksaan pembaruan langsung. Kalau salah satunya kuning, itu yang paling layak dibaca duluan.",
|
|
7
|
-
"tour.3.title": "Satu saringan untuk semua kunci",
|
|
8
|
-
"tour.3.text": "Saring berdasarkan kunci atau deskripsi di semua bagian sekaligus — Anda tidak perlu tahu kunci itu ditaruh di tier mana. 'Hanya yang diubah' menampilkan hanya yang Anda override.",
|
|
9
|
-
"tour.4.title": "Tangga skor → model",
|
|
10
|
-
"tour.4.text": "Ini diagram, bukan editor. Datanya dari tabel milik CLI, dan ia menggambar ulang dirinya saat pengaturan seperti opus5_only mengubah siapa yang menang — begitulah aturan presedensi diajarkan, bukan sekadar dijelaskan.",
|
|
11
|
-
"tour.5.title": "Semua run yang dicatat ORC",
|
|
12
|
-
"tour.5.text": "'waiting' berarti penunjuk resume masih ada di disk — run itu bisa dilanjutkan di sesi baru. Klik satu dan ia terbuka di tempat: checkpoint, kondisi terakhir, dan trace, tanpa kehilangan daftarnya.",
|
|
13
|
-
"tour.6.title": "Yang sudah diketahui ORC",
|
|
14
|
-
"tour.6.text": "Wiki, code pattern tersimpan, dan gotchas. Kesegaran dihitung terhadap berkas yang benar-benar dicakup tiap dokumen, jadi 'stale' di sini berarti sesuatu yang didokumentasikannya memang berubah.",
|
|
15
|
-
"tour.7.title": "Pilih lane",
|
|
16
|
-
"tour.7.text": "Salin perintah lane mana pun, atau buka sesi Claude di repo ini. Panel menyerahkannya ke terminal lalu melupakannya — tidak ada apa pun dari sesi itu yang kembali ke sini.",
|
|
17
|
-
"tour.8.title": "Pratinjau dulu, baru terapkan",
|
|
18
|
-
"tour.8.text": "Tidak ada di sini yang jalan sendiri. Setiap aksi menampilkan pratinjau hanya-baca milik CLI beserta perintah persisnya — dan prune menyebut setiap berkas, karena angka bukanlah persetujuan.",
|
|
19
|
-
"tour.upgrade.title": "Upgrade ada di sini",
|
|
20
|
-
"tour.upgrade.text": "Klik Pratinjau… untuk melihat persis apa yang akan dipasang dan dijalankan. Tidak ada yang terjadi sampai Anda menyetujuinya.",
|
|
21
|
-
"tour.9.title": "Janji-janji itu",
|
|
22
|
-
"tour.9.text": "Ini aturan yang dijanjikan proyek Anda. ORC memeriksanya untuk Anda dan memberi tahu mana yang kodenya sudah bergeser.",
|
|
23
|
-
"tour.10.title": "Di mana ORC berhenti",
|
|
24
|
-
"tour.10.text": "Ini pekerjaan yang belum akan dikerjakan ORC sendiri. Daftar syaratnya menyebut persis apa yang mengubah itu - dan Anda selalu bisa menyuruhnya tetap jalan.",
|
|
25
|
-
"tour.11.title": "Hal yang bisa Anda ubah sendiri",
|
|
26
|
-
"tour.11.text": "Tanpa kode, tanpa terminal. Pemeriksaan berjalan setelahnya, dan perintah pembatalan ditampilkan sebelum apa pun ditulis.",
|
|
27
|
-
"tour.12.title": "Bagian wiki yang murah",
|
|
28
|
-
"tour.12.text": "Memperbarui seluruh wiki itu mahal. Ini daftar pendek dan terurut yang benar-benar penting - dan perbaikan gratis selalu didahulukan.",
|
|
29
|
-
"tour.13.title": "Dokumen panjang, dalam satu gambar",
|
|
30
|
-
"tour.13.text": "Setiap blok adalah satu bagian, seukuran panjangnya dan diberi warna sesuai keadaannya. Tidak ada yang memuat dokumen itu sendiri di sini - ORC bekerja dari peta ini, dan itulah sebabnya dokumen panjang tidak menghabiskan sesi.",
|
|
31
|
-
"tour.14.title": "Pekerjaan yang berjalan di tempat lain",
|
|
32
|
-
"tour.14.text": "Satu garis dari nol sampai seratus: seberapa berat skor sebuah tugas. Setiap bagiannya menunjukkan di mana pekerjaan itu benar-benar berjalan — Claude berwarna biru, penyedia yang Anda hubungkan berwarna hijau. Rentang yang belum Anda hubungkan tetap punya tempatnya, jadi \"saya sengaja meninggalkan pekerjaan berat di Claude\" tidak pernah terlihat seperti \"tidak ada pekerjaan berat\". Tidak ada yang keluar dari mesin ini sampai Anda menghubungkan sesuatu, mengujinya, dan menekan Apply.",
|
|
33
|
-
"tour.15.title": "Bangun baris status Anda sendiri",
|
|
34
|
-
"tour.15.text": "Tiga baris, tiap baris memuat sampai enam bagian. Baris 1 harus terisi sebelum baris 2 bisa. Pratinjau di atas persis seperti yang akan tampil di terminal Anda - digambar oleh kode yang sama dengan yang dijalankan bilah itu."
|
|
35
|
-
|
|
1
|
+
{
|
|
2
|
+
"tour.finished": "Tur selesai — tekan ? kapan saja untuk daftar pintasan",
|
|
3
|
+
"tour.1.title": "Semua yang bukan AI",
|
|
4
|
+
"tour.1.text": "Panel ini mengendalikan separuh ORC yang deterministik — pengaturan, kesehatan, run, pengetahuan, statistik. Ia tidak pernah menjalankan lane dan tidak pernah memanggil model. Tekan 1–9 atau 0 untuk berpindah panel; arahkan kursor ke sini untuk melihat angkanya.",
|
|
5
|
+
"tour.2.title": "Ada yang bermasalah sekarang?",
|
|
6
|
+
"tour.2.text": "Kesehatan instalasi, kesegaran wiki, run yang masih menunggu, dan versi ORC Anda dengan pemeriksaan pembaruan langsung. Kalau salah satunya kuning, itu yang paling layak dibaca duluan.",
|
|
7
|
+
"tour.3.title": "Satu saringan untuk semua kunci",
|
|
8
|
+
"tour.3.text": "Saring berdasarkan kunci atau deskripsi di semua bagian sekaligus — Anda tidak perlu tahu kunci itu ditaruh di tier mana. 'Hanya yang diubah' menampilkan hanya yang Anda override.",
|
|
9
|
+
"tour.4.title": "Tangga skor → model",
|
|
10
|
+
"tour.4.text": "Ini diagram, bukan editor. Datanya dari tabel milik CLI, dan ia menggambar ulang dirinya saat pengaturan seperti opus5_only mengubah siapa yang menang — begitulah aturan presedensi diajarkan, bukan sekadar dijelaskan.",
|
|
11
|
+
"tour.5.title": "Semua run yang dicatat ORC",
|
|
12
|
+
"tour.5.text": "'waiting' berarti penunjuk resume masih ada di disk — run itu bisa dilanjutkan di sesi baru. Klik satu dan ia terbuka di tempat: checkpoint, kondisi terakhir, dan trace, tanpa kehilangan daftarnya.",
|
|
13
|
+
"tour.6.title": "Yang sudah diketahui ORC",
|
|
14
|
+
"tour.6.text": "Wiki, code pattern tersimpan, dan gotchas. Kesegaran dihitung terhadap berkas yang benar-benar dicakup tiap dokumen, jadi 'stale' di sini berarti sesuatu yang didokumentasikannya memang berubah.",
|
|
15
|
+
"tour.7.title": "Pilih lane",
|
|
16
|
+
"tour.7.text": "Salin perintah lane mana pun, atau buka sesi Claude di repo ini. Panel menyerahkannya ke terminal lalu melupakannya — tidak ada apa pun dari sesi itu yang kembali ke sini.",
|
|
17
|
+
"tour.8.title": "Pratinjau dulu, baru terapkan",
|
|
18
|
+
"tour.8.text": "Tidak ada di sini yang jalan sendiri. Setiap aksi menampilkan pratinjau hanya-baca milik CLI beserta perintah persisnya — dan prune menyebut setiap berkas, karena angka bukanlah persetujuan.",
|
|
19
|
+
"tour.upgrade.title": "Upgrade ada di sini",
|
|
20
|
+
"tour.upgrade.text": "Klik Pratinjau… untuk melihat persis apa yang akan dipasang dan dijalankan. Tidak ada yang terjadi sampai Anda menyetujuinya.",
|
|
21
|
+
"tour.9.title": "Janji-janji itu",
|
|
22
|
+
"tour.9.text": "Ini aturan yang dijanjikan proyek Anda. ORC memeriksanya untuk Anda dan memberi tahu mana yang kodenya sudah bergeser.",
|
|
23
|
+
"tour.10.title": "Di mana ORC berhenti",
|
|
24
|
+
"tour.10.text": "Ini pekerjaan yang belum akan dikerjakan ORC sendiri. Daftar syaratnya menyebut persis apa yang mengubah itu - dan Anda selalu bisa menyuruhnya tetap jalan.",
|
|
25
|
+
"tour.11.title": "Hal yang bisa Anda ubah sendiri",
|
|
26
|
+
"tour.11.text": "Tanpa kode, tanpa terminal. Pemeriksaan berjalan setelahnya, dan perintah pembatalan ditampilkan sebelum apa pun ditulis.",
|
|
27
|
+
"tour.12.title": "Bagian wiki yang murah",
|
|
28
|
+
"tour.12.text": "Memperbarui seluruh wiki itu mahal. Ini daftar pendek dan terurut yang benar-benar penting - dan perbaikan gratis selalu didahulukan.",
|
|
29
|
+
"tour.13.title": "Dokumen panjang, dalam satu gambar",
|
|
30
|
+
"tour.13.text": "Setiap blok adalah satu bagian, seukuran panjangnya dan diberi warna sesuai keadaannya. Tidak ada yang memuat dokumen itu sendiri di sini - ORC bekerja dari peta ini, dan itulah sebabnya dokumen panjang tidak menghabiskan sesi.",
|
|
31
|
+
"tour.14.title": "Pekerjaan yang berjalan di tempat lain",
|
|
32
|
+
"tour.14.text": "Satu garis dari nol sampai seratus: seberapa berat skor sebuah tugas. Setiap bagiannya menunjukkan di mana pekerjaan itu benar-benar berjalan — Claude berwarna biru, penyedia yang Anda hubungkan berwarna hijau. Rentang yang belum Anda hubungkan tetap punya tempatnya, jadi \"saya sengaja meninggalkan pekerjaan berat di Claude\" tidak pernah terlihat seperti \"tidak ada pekerjaan berat\". Tidak ada yang keluar dari mesin ini sampai Anda menghubungkan sesuatu, mengujinya, dan menekan Apply.",
|
|
33
|
+
"tour.15.title": "Bangun baris status Anda sendiri",
|
|
34
|
+
"tour.15.text": "Tiga baris, tiap baris memuat sampai enam bagian. Baris 1 harus terisi sebelum baris 2 bisa. Pratinjau di atas persis seperti yang akan tampil di terminal Anda - digambar oleh kode yang sama dengan yang dijalankan bilah itu.",
|
|
35
|
+
"tour.16.title": "Apa yang dipelajari ORC dari Anda",
|
|
36
|
+
"tour.16.text": "Inilah yang dipelajari ORC dari jawaban Anda. ORC mengusulkan; Anda yang memutuskan."
|
|
37
|
+
}
|
package/bin/webui/js/01-i18n.js
CHANGED
|
@@ -1,154 +1,155 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* 01-i18n.js — orc ui client
|
|
3
|
-
LANGS, loadLang, setLang, t, applyStaticText, cycleLang.
|
|
4
|
-
|
|
5
|
-
Keys are written out IN FULL, never assembled from a fragment. The v0.48.1
|
|
6
|
-
file split is by key PREFIX only; `docs.ship.confirm` is still spelled
|
|
7
|
-
`docs.ship.confirm` at every call site.
|
|
8
|
-
|
|
9
|
-
Loaded by app.html in the order its numeric prefix names. Classic
|
|
10
|
-
script, no import/export: an ES module import carries no query string,
|
|
11
|
-
and every static request here needs the per-launch session token. */
|
|
12
|
-
|
|
13
|
-
/* ------------------------------------------------------------------- i18n -- */
|
|
14
|
-
/*
|
|
15
|
-
THE SCOPE RULE, and it is deliberately narrow: only the panel's OWN prose is
|
|
16
|
-
translated. Everything that arrives from `bin/cli.js --json` stays exactly as
|
|
17
|
-
the CLI wrote it — config keys and their descriptions, values, agent names,
|
|
18
|
-
model ids, file paths, commands, `orc doctor` messages, command output. Those
|
|
19
|
-
are identifiers, not sentences: a translated config key is a key that does not
|
|
20
|
-
exist, and a translated command is a command you cannot type. So `t()` is
|
|
21
|
-
never applied to a value read out of a payload, and neither string table
|
|
22
|
-
contains a single ORC key name.
|
|
23
|
-
|
|
24
|
-
The tables are plain JSON served as static assets. Adding a language is a
|
|
25
|
-
FOLDER in i18n/ plus one row in LANGS — no build step, no library, no
|
|
26
|
-
dependency, and no server change (serve.js walks i18n/ at boot).
|
|
27
|
-
*/
|
|
28
|
-
const LANGS = [
|
|
29
|
-
{ code: "en", label: "English" },
|
|
30
|
-
{ code: "id", label: "Bahasa Indonesia" },
|
|
31
|
-
];
|
|
32
|
-
const LANG_KEY = "orc-ui-lang";
|
|
33
|
-
|
|
34
|
-
// v0.48.1 — one file per namespace instead of one 53 KB table, so changing the
|
|
35
|
-
// Docs panel's wording means opening i18n/en/docs.json rather than paging
|
|
36
|
-
// through every string in the panel.
|
|
37
|
-
//
|
|
38
|
-
// A plain array, and deliberately NOT an index file to fetch: an index would be
|
|
39
|
-
// one more round trip and one more thing to forget to update. A namespace owns
|
|
40
|
-
// one or more key PREFIXES (`stats` owns `stats.*` and `cost.*`), which the
|
|
41
|
-
// test suite asserts — a key whose prefix belongs to no namespace would load
|
|
42
|
-
// nowhere and render as a raw dotted string.
|
|
43
|
-
const NAMESPACES = [
|
|
44
|
-
"common",
|
|
45
|
-
"nav",
|
|
46
|
-
"banner",
|
|
47
|
-
"overview",
|
|
48
|
-
"settings",
|
|
49
|
-
"lanes",
|
|
50
|
-
"rules",
|
|
51
|
-
"runs",
|
|
52
|
-
"knowledge",
|
|
53
|
-
"stats",
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
//
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
|
|
78
|
-
let
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
//
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (s === undefined) s = key;
|
|
127
|
-
if (
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
//
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
/* 01-i18n.js — orc ui client
|
|
3
|
+
LANGS, loadLang, setLang, t, applyStaticText, cycleLang.
|
|
4
|
+
|
|
5
|
+
Keys are written out IN FULL, never assembled from a fragment. The v0.48.1
|
|
6
|
+
file split is by key PREFIX only; `docs.ship.confirm` is still spelled
|
|
7
|
+
`docs.ship.confirm` at every call site.
|
|
8
|
+
|
|
9
|
+
Loaded by app.html in the order its numeric prefix names. Classic
|
|
10
|
+
script, no import/export: an ES module import carries no query string,
|
|
11
|
+
and every static request here needs the per-launch session token. */
|
|
12
|
+
|
|
13
|
+
/* ------------------------------------------------------------------- i18n -- */
|
|
14
|
+
/*
|
|
15
|
+
THE SCOPE RULE, and it is deliberately narrow: only the panel's OWN prose is
|
|
16
|
+
translated. Everything that arrives from `bin/cli.js --json` stays exactly as
|
|
17
|
+
the CLI wrote it — config keys and their descriptions, values, agent names,
|
|
18
|
+
model ids, file paths, commands, `orc doctor` messages, command output. Those
|
|
19
|
+
are identifiers, not sentences: a translated config key is a key that does not
|
|
20
|
+
exist, and a translated command is a command you cannot type. So `t()` is
|
|
21
|
+
never applied to a value read out of a payload, and neither string table
|
|
22
|
+
contains a single ORC key name.
|
|
23
|
+
|
|
24
|
+
The tables are plain JSON served as static assets. Adding a language is a
|
|
25
|
+
FOLDER in i18n/ plus one row in LANGS — no build step, no library, no
|
|
26
|
+
dependency, and no server change (serve.js walks i18n/ at boot).
|
|
27
|
+
*/
|
|
28
|
+
const LANGS = [
|
|
29
|
+
{ code: "en", label: "English" },
|
|
30
|
+
{ code: "id", label: "Bahasa Indonesia" },
|
|
31
|
+
];
|
|
32
|
+
const LANG_KEY = "orc-ui-lang";
|
|
33
|
+
|
|
34
|
+
// v0.48.1 — one file per namespace instead of one 53 KB table, so changing the
|
|
35
|
+
// Docs panel's wording means opening i18n/en/docs.json rather than paging
|
|
36
|
+
// through every string in the panel.
|
|
37
|
+
//
|
|
38
|
+
// A plain array, and deliberately NOT an index file to fetch: an index would be
|
|
39
|
+
// one more round trip and one more thing to forget to update. A namespace owns
|
|
40
|
+
// one or more key PREFIXES (`stats` owns `stats.*` and `cost.*`), which the
|
|
41
|
+
// test suite asserts — a key whose prefix belongs to no namespace would load
|
|
42
|
+
// nowhere and render as a raw dotted string.
|
|
43
|
+
const NAMESPACES = [
|
|
44
|
+
"common",
|
|
45
|
+
"nav",
|
|
46
|
+
"banner",
|
|
47
|
+
"overview",
|
|
48
|
+
"settings",
|
|
49
|
+
"lanes",
|
|
50
|
+
"rules",
|
|
51
|
+
"runs",
|
|
52
|
+
"knowledge",
|
|
53
|
+
"stats",
|
|
54
|
+
"behaviour",
|
|
55
|
+
"flow",
|
|
56
|
+
"crosslink",
|
|
57
|
+
"learn",
|
|
58
|
+
"mockrun",
|
|
59
|
+
"maintenance",
|
|
60
|
+
"pact",
|
|
61
|
+
"boundary",
|
|
62
|
+
"wait",
|
|
63
|
+
"hookui",
|
|
64
|
+
"handoff",
|
|
65
|
+
"challenge",
|
|
66
|
+
"docs",
|
|
67
|
+
"test",
|
|
68
|
+
"extra",
|
|
69
|
+
"experiment",
|
|
70
|
+
"tour",
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
let lang = "en";
|
|
74
|
+
// English is loaded first and kept as the FALLBACK table: a key the other
|
|
75
|
+
// language has not translated yet renders in English rather than as a raw
|
|
76
|
+
// dotted key. A half-finished translation degrades to mixed prose, never to
|
|
77
|
+
// debug output on somebody's screen.
|
|
78
|
+
let DICT = {};
|
|
79
|
+
let DICT_EN = {};
|
|
80
|
+
|
|
81
|
+
// The namespaces are fetched in parallel and merged into ONE flat table, so
|
|
82
|
+
// `t()` is unchanged and no call site knows the split happened.
|
|
83
|
+
//
|
|
84
|
+
// A namespace that fails to load falls back to ENGLISH for its keys rather than
|
|
85
|
+
// rejecting the whole language: a network hiccup on one file should cost that
|
|
86
|
+
// file's prose, not the entire panel. English itself has no fallback below it,
|
|
87
|
+
// so a failure there rejects and boot() lands on raw keys — ugly, never blank.
|
|
88
|
+
function loadLang(code) {
|
|
89
|
+
return Promise.all(
|
|
90
|
+
NAMESPACES.map((ns) =>
|
|
91
|
+
fetch(`/i18n/${code}/${ns}.json`, { headers: { "x-orc-token": TOKEN }, cache: "no-store" })
|
|
92
|
+
.then((r) => {
|
|
93
|
+
if (!r.ok) throw new Error(`i18n ${code}/${ns} ${r.status}`);
|
|
94
|
+
return r.json();
|
|
95
|
+
})
|
|
96
|
+
.catch((e) => {
|
|
97
|
+
if (code === "en") throw e;
|
|
98
|
+
return null;
|
|
99
|
+
})
|
|
100
|
+
)
|
|
101
|
+
).then((parts) => Object.assign({}, ...parts.filter(Boolean)));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// A missing or broken table must never blank the UI. Every failure path here
|
|
105
|
+
// lands on English, so the worst case is untranslated text — never empty text.
|
|
106
|
+
async function setLang(code, opts) {
|
|
107
|
+
const rerender = !opts || opts.rerender !== false;
|
|
108
|
+
const want = LANGS.some((l) => l.code === code) ? code : "en";
|
|
109
|
+
try {
|
|
110
|
+
DICT = want === "en" ? DICT_EN : await loadLang(want);
|
|
111
|
+
lang = want;
|
|
112
|
+
} catch (_) {
|
|
113
|
+
DICT = DICT_EN;
|
|
114
|
+
lang = "en";
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
localStorage.setItem(LANG_KEY, lang);
|
|
118
|
+
} catch (_) {}
|
|
119
|
+
document.documentElement.setAttribute("lang", lang);
|
|
120
|
+
applyStaticText();
|
|
121
|
+
if (rerender) route();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function t(key, vars) {
|
|
125
|
+
let s = DICT[key];
|
|
126
|
+
if (s === undefined) s = DICT_EN[key];
|
|
127
|
+
if (s === undefined) s = key;
|
|
128
|
+
if (vars) for (const k of Object.keys(vars)) s = s.split("{" + k + "}").join(String(vars[k]));
|
|
129
|
+
return s;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// English has one plural form and Indonesian has none, so count-aware lookup is
|
|
133
|
+
// a second key rather than a plural-rules engine: `n === 1` picks the singular.
|
|
134
|
+
const tn = (n, key, vars) => t(n === 1 ? key : key + "Plural", Object.assign({ n }, vars || {}));
|
|
135
|
+
|
|
136
|
+
// The parts of the shell that are markup rather than a render function. Called
|
|
137
|
+
// on every language change; panels re-render themselves through `route()`.
|
|
138
|
+
function applyStaticText() {
|
|
139
|
+
for (const node of document.querySelectorAll("[data-i18n]")) node.textContent = t(node.dataset.i18n);
|
|
140
|
+
const tt = $("#theme-toggle");
|
|
141
|
+
if (tt) tt.textContent = document.documentElement.getAttribute("data-theme") === "light" ? t("rail.dark") : t("rail.light");
|
|
142
|
+
const hint = $("#shortcut-hint");
|
|
143
|
+
if (hint) hint.title = t("rail.shortcuts");
|
|
144
|
+
const label = $("#lang-label");
|
|
145
|
+
if (label) label.textContent = (LANGS.find((l) => l.code === lang) || LANGS[0]).label;
|
|
146
|
+
const btn = $("#lang-toggle");
|
|
147
|
+
if (btn) btn.title = t("lang.title");
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Two languages, so the control is a TOGGLE rather than a menu: one click, no
|
|
151
|
+
// dropdown to open. A third language would make this a <select>; two do not.
|
|
152
|
+
function cycleLang() {
|
|
153
|
+
const i = LANGS.findIndex((l) => l.code === lang);
|
|
154
|
+
setLang(LANGS[(i + 1) % LANGS.length].code);
|
|
155
|
+
}
|