@azure-id/orc 1.6.0 → 1.7.1
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 +152 -0
- package/README-id.md +206 -125
- package/README.md +202 -74
- package/bin/cli.js +1595 -2
- package/bin/mockrun-catalog.js +272 -267
- package/bin/verify-contracts.js +4553 -4509
- package/bin/verify-package.js +6 -0
- package/bin/webui/api.js +26 -0
- package/bin/webui/app.html +10 -0
- package/bin/webui/css/panels/knowledge.css +30 -0
- package/bin/webui/css/panels/rules.css +145 -0
- package/bin/webui/fixtures/index.js +27 -0
- package/bin/webui/fixtures/rules.js +1002 -0
- package/bin/webui/fixtures/wiki-one.js +198 -0
- package/bin/webui/i18n/en/knowledge.json +127 -117
- package/bin/webui/i18n/en/nav.json +1 -0
- package/bin/webui/i18n/en/rules.json +55 -0
- package/bin/webui/i18n/id/knowledge.json +127 -117
- package/bin/webui/i18n/id/nav.json +1 -0
- package/bin/webui/i18n/id/rules.json +55 -0
- package/bin/webui/js/01-i18n.js +1 -0
- package/bin/webui/js/panels/knowledge.js +117 -1
- package/bin/webui/js/panels/rules.js +351 -0
- package/mock-run/INDEX.md +107 -106
- package/mock-run/orc-rules.md +254 -0
- package/package.json +1 -1
- package/templates/agents/orc-executor-haiku-4-5.md +9 -1
- package/templates/agents/orc-executor-opus-4-7-high.md +9 -1
- package/templates/agents/orc-executor-opus-4-7-med.md +9 -1
- package/templates/agents/orc-executor-opus-4-8-high.md +9 -1
- package/templates/agents/orc-executor-opus-5-high.md +9 -1
- package/templates/agents/orc-executor-opus-5-low.md +9 -1
- package/templates/agents/orc-executor-opus-5-med.md +9 -1
- package/templates/agents/orc-executor-sonnet-4-6-high.md +9 -1
- package/templates/agents/orc-executor-sonnet-4-6-med.md +9 -1
- package/templates/agents/orc-executor-sonnet-5-high.md +9 -1
- package/templates/commands/orc-rules.md +66 -0
- package/templates/commands/orc-wiki.md +23 -1
- package/templates/skills/_shared/README.md +61 -54
- package/templates/skills/_shared/extra-dispatch.md +1 -1
- package/templates/skills/_shared/phases/README.md +1 -0
- package/templates/skills/_shared/phases/execution.md +3 -1
- package/templates/skills/_shared/phases/preflight.md +20 -0
- package/templates/skills/_shared/phases/rules.md +159 -0
- package/templates/skills/_shared/return-validation.md +28 -0
- package/templates/skills/_shared/rules/CREDITS.md +141 -0
- package/templates/skills/_shared/rules/INDEX.md +107 -0
- package/templates/skills/_shared/rules/code.md +229 -0
- package/templates/skills/_shared/rules/delivery.md +114 -0
- package/templates/skills/_shared/rules/ui.md +139 -0
- package/templates/skills/_shared/rules/writing.md +223 -0
- package/templates/skills/context-combiner/SKILL.md +9 -1
- package/templates/skills/orc/SKILL.md +8 -1
- package/templates/skills/orc/references/preflight-report.md +6 -0
- package/templates/skills/orc/subskills/orc-execution/SKILL.md +2 -1
- package/templates/skills/orc/subskills/orc-execution/core.md +9 -1
- package/templates/skills/orc-aftermath/SKILL.md +7 -0
- package/templates/skills/orc-analyze/SKILL.md +7 -0
- package/templates/skills/orc-analyze-mini/SKILL.md +9 -1
- package/templates/skills/orc-boundary/SKILL.md +7 -0
- package/templates/skills/orc-brainstorm/SKILL.md +7 -0
- package/templates/skills/orc-budget/SKILL.md +7 -0
- package/templates/skills/orc-challenge/SKILL.md +7 -0
- package/templates/skills/orc-claude/SKILL.md +7 -0
- package/templates/skills/orc-diy/SKILL.md +7 -0
- package/templates/skills/orc-explain/SKILL.md +7 -0
- package/templates/skills/orc-export/SKILL.md +7 -0
- package/templates/skills/orc-fast/SKILL.md +9 -2
- package/templates/skills/orc-grill/SKILL.md +7 -0
- package/templates/skills/orc-handoff/SKILL.md +9 -1
- package/templates/skills/orc-learn/SKILL.md +7 -0
- package/templates/skills/orc-mini/SKILL.md +10 -3
- package/templates/skills/orc-pact/SKILL.md +7 -0
- package/templates/skills/orc-poly/SKILL.md +7 -0
- package/templates/skills/orc-pr-driver/SKILL.md +9 -1
- package/templates/skills/orc-pr-setup/SKILL.md +9 -1
- package/templates/skills/orc-quick/SKILL.md +9 -1
- package/templates/skills/orc-retro/SKILL.md +7 -0
- package/templates/skills/orc-route/SKILL.md +7 -0
- package/templates/skills/orc-test/SKILL.md +7 -0
- package/templates/skills/orc-verify/SKILL.md +7 -0
- package/templates/skills/orc-wiki/SKILL.md +15 -0
- package/templates/skills/orc-wiki/references/partial-refresh.md +68 -0
- package/templates/skills/orc-wiki/references/phases/phase-0.md +15 -1
|
@@ -1,141 +1,151 @@
|
|
|
1
1
|
{
|
|
2
|
-
"knowledge.
|
|
3
|
-
"knowledge.
|
|
4
|
-
"knowledge.
|
|
5
|
-
"knowledge.
|
|
6
|
-
"knowledge.
|
|
7
|
-
"knowledge.
|
|
8
|
-
"knowledge.
|
|
9
|
-
"knowledge.
|
|
10
|
-
"knowledge.
|
|
11
|
-
"knowledge.
|
|
12
|
-
"knowledge.
|
|
2
|
+
"knowledge.archive.empty": "Belum ada yang diarsipkan.",
|
|
3
|
+
"knowledge.archive.load": "Tampilkan arsip",
|
|
4
|
+
"knowledge.archive.note": "Tidak ada yang pernah dihapus di sini. Entri yang terdorong keluar oleh batas hanya dipindahkan, dan idnya tetap selamanya.",
|
|
5
|
+
"knowledge.archive.title": "Arsip",
|
|
6
|
+
"knowledge.blind.none": "Tidak ada perubahan yang tidak dibahas dokumen mana pun.",
|
|
7
|
+
"knowledge.blind.note": "Berkas ini berubah dan tidak ada dokumen yang mengakuinya. Itu berarti ada yang belum ditulis, bukan berarti yang sudah ada jadi salah — jadi ini sendiri tidak pernah membuat wiki basi.",
|
|
8
|
+
"knowledge.blind.title": "Berubah, dan belum ada dokumen yang membahasnya",
|
|
9
|
+
"knowledge.coverage.col.dir": "Folder",
|
|
10
|
+
"knowledge.coverage.col.files": "Berkas",
|
|
11
|
+
"knowledge.coverage.col.last": "Terakhir disentuh",
|
|
12
|
+
"knowledge.coverage.na": "Tidak bisa diukur di sini.",
|
|
13
|
+
"knowledge.coverage.naHint": "Butuh wiki yang terdaftar dan repositori git.",
|
|
14
|
+
"knowledge.coverage.notATarget": "Ini laporan, bukan target. Tidak ada ambang batas, tidak ada yang bereaksi terhadap angka ini, dan repo yang sengaja hanya menulis empat bagian dari empat puluh tidak berarti rusak.",
|
|
15
|
+
"knowledge.coverage.sub": "{covered} dari {tracked} berkas terlacak dicakup setidaknya satu dokumen",
|
|
16
|
+
"knowledge.coverage.title": "Seberapa banyak kode yang sudah ditulis",
|
|
17
|
+
"knowledge.coverage.uncovered": "Belum tercakup",
|
|
18
|
+
"knowledge.coverage.uncoveredNote": "Dikelompokkan per folder, yang terbesar dulu, karena \"240 berkas, semuanya di vendor\" dan \"12 berkas, semuanya di pembayaran\" adalah dua situasi yang berlawanan.",
|
|
19
|
+
"knowledge.debt.none": "Tidak ada pembaruan yang tertunda.",
|
|
20
|
+
"knowledge.debt.nothingBroken": "Tidak ada yang rusak. Halaman-halaman ini tertinggal, bukan salah - dan membereskan bagian teratas jauh lebih murah daripada memindai ulang semuanya.",
|
|
21
|
+
"knowledge.debt.oldest": "tertua tertinggal 1 commit",
|
|
22
|
+
"knowledge.debt.oldestPlural": "tertua tertinggal {n} commit",
|
|
23
|
+
"knowledge.debt.pending": "1 halaman menunggu",
|
|
24
|
+
"knowledge.debt.pendingPlural": "{n} halaman menunggu",
|
|
25
|
+
"knowledge.docs.col.covers": "Mencakup",
|
|
26
|
+
"knowledge.docs.col.distance": "Tertinggal",
|
|
27
|
+
"knowledge.docs.col.doc": "Dokumen",
|
|
28
|
+
"knowledge.docs.col.tags": "Tag",
|
|
29
|
+
"knowledge.docs.col.tier": "Status",
|
|
30
|
+
"knowledge.docs.col.used": "Dipakai",
|
|
31
|
+
"knowledge.docs.field.coveredFiles": "Berkas yang disebut",
|
|
32
|
+
"knowledge.docs.field.covers": "Mencakup",
|
|
33
|
+
"knowledge.docs.field.lastUsed": "Terakhir dipakai",
|
|
34
|
+
"knowledge.docs.field.scanned": "Dipindai pada commit",
|
|
35
|
+
"knowledge.docs.field.title": "Judul",
|
|
36
|
+
"knowledge.docs.field.type": "Jenis",
|
|
37
|
+
"knowledge.docs.none": "Belum ada yang terdaftar.",
|
|
38
|
+
"knowledge.docs.noneHint": "Dokumen di disk harus didaftarkan dulu sebelum ada yang bisa membacanya, dan mendaftarkannya gratis dan seketika.",
|
|
39
|
+
"knowledge.docs.note": "Semua dokumen terdaftar, urut seperti yang dikirim CLI. Buka satu baris untuk melihat apa yang dicakupnya dan pada commit mana ia dipindai. Jarak setiap dokumen dihitung dari berkasnya sendiri, jadi dokumen tentang pembayaran tidak menua hanya karena README berubah.",
|
|
40
|
+
"knowledge.docs.title": "Isi wiki",
|
|
41
|
+
"knowledge.field.anchor": "anchor",
|
|
42
|
+
"knowledge.field.blind": "titik buta struktural",
|
|
43
|
+
"knowledge.field.distance": "jarak",
|
|
44
|
+
"knowledge.field.distanceValue": "{n} commit pada berkas yang dicakup dokumen terburuk",
|
|
45
|
+
"knowledge.field.docs": "dokumen",
|
|
46
|
+
"knowledge.field.edges": "batas",
|
|
47
|
+
"knowledge.field.lastScan": "scan terakhir",
|
|
48
|
+
"knowledge.field.tags": "tag crosslink",
|
|
49
|
+
"knowledge.field.unmeasurable": "tidak terukur",
|
|
50
|
+
"knowledge.field.worst": "Dokumen tertua (ini yang menentukan status)",
|
|
51
|
+
"knowledge.gotchas.headroom": "{n} dari {max} disimpan",
|
|
52
|
+
"knowledge.gotchas.none": "Belum ada yang tercatat.",
|
|
53
|
+
"knowledge.gotchas.noneHint": "Satu putaran perbaikan yang merah → hijau menulis yang pertama.",
|
|
54
|
+
"knowledge.gotchas.note": "Satu entri untuk tiap kegagalan khas proyek yang pernah diperbaiki. Pruning MENGARSIPKAN ekor bernilai rendah — tidak pernah menghapus.",
|
|
55
|
+
"knowledge.gotchas.preview": "Lihat apa yang akan diarsipkan",
|
|
56
|
+
"knowledge.gotchas.prune": "Pangkas ke gotchas_max",
|
|
57
|
+
"knowledge.gotchas.pruneNone": "Tidak ada yang akan diarsipkan — Anda masih di bawah batas.",
|
|
58
|
+
"knowledge.gotchas.pruneWould": "{n} entri akan dipindahkan ke arsip:",
|
|
59
|
+
"knowledge.gotchas.title": "Memori perbaikan (gotchas)",
|
|
13
60
|
"knowledge.impact.blind": "Titik buta struktural — berkas berubah yang tidak dicakup dokumen mana pun:",
|
|
61
|
+
"knowledge.impact.col.detail": "Detail",
|
|
14
62
|
"knowledge.impact.col.doc": "Dokumen",
|
|
15
63
|
"knowledge.impact.col.state": "Kondisi",
|
|
16
|
-
"knowledge.impact.
|
|
17
|
-
"knowledge.
|
|
18
|
-
"knowledge.
|
|
64
|
+
"knowledge.impact.counts": "{registered} terdaftar · {touched} tersentuh · {structural} struktural · {pct}% terdampak (ambang {threshold}%)",
|
|
65
|
+
"knowledge.impact.title": "Cakupan refresh (orc wiki impact)",
|
|
66
|
+
"knowledge.one.cannot": "Topik itu tidak dapat dicocokkan.",
|
|
67
|
+
"knowledge.one.files": "1 berkas",
|
|
68
|
+
"knowledge.one.filesPlural": "{n} berkas",
|
|
69
|
+
"knowledge.one.lead": "Perbarui satu dokumen, atau tambah satu topik, tanpa merencanakan ulang area lain mana pun. Kedua pemeriksaan di bawah gratis dan tidak memindai apa pun. Penyegaran atau penambahan yang menyusul adalah sebuah lane, jadi disajikan sebagai perintah untuk disalin, bukan sebagai tombol.",
|
|
70
|
+
"knowledge.one.next": "Jalankan ini di Claude Code. Perintah ini memakai token model, jadi tidak ada yang memulainya untuk Anda dari sini.",
|
|
71
|
+
"knowledge.one.placeholder": "Sebuah topik, dengan kata-kata Anda sendiri — \"fitur remitansi\"",
|
|
72
|
+
"knowledge.one.proposed": "Titik awal, hanya dari nama jalur. Perbaiki dulu sebelum apa pun dipindai.",
|
|
73
|
+
"knowledge.one.resolve": "Sudah ada di wiki?",
|
|
74
|
+
"knowledge.one.sweep": "Rujukan turunan, diperiksa",
|
|
75
|
+
"knowledge.one.title": "Satu dokumen sekaligus",
|
|
76
|
+
"knowledge.orientation.missing": "Belum ada dokumen pengantar. Setiap pembaca membukanya lebih dulu, jadi ini layak dibuat — dan membuatnya ulang gratis.",
|
|
77
|
+
"knowledge.orientation.present": "Dokumen pengantar ada: {file}. Setiap pembaca membukanya lebih dulu.",
|
|
78
|
+
"knowledge.patterns.conflicts": "Tempat proyek dan panduan berbeda pendapat",
|
|
79
|
+
"knowledge.patterns.field.codified": "Ditulis pada",
|
|
80
|
+
"knowledge.patterns.field.counts": "Kebiasaan · aturan wajib",
|
|
81
|
+
"knowledge.patterns.field.playbook": "Panduan pembandingnya",
|
|
82
|
+
"knowledge.patterns.field.size": "Baris · byte",
|
|
83
|
+
"knowledge.patterns.field.source": "Dari commit",
|
|
84
|
+
"knowledge.patterns.inspect": "Lihat isinya",
|
|
85
|
+
"knowledge.patterns.known": "Kunci bahasa yang dikenal: {list}",
|
|
86
|
+
"knowledge.patterns.literalNote": "Teks persis ini diberikan ke setiap agen yang menulis kode di sini. Kalau Anda tidak bisa membacanya, Anda tidak bisa memercayainya.",
|
|
19
87
|
"knowledge.patterns.none": "Belum ada pattern tersimpan.",
|
|
20
88
|
"knowledge.patterns.noneHint": "Jalankan /orc-pattern di Claude Code untuk merangkumnya. Itu memakai model, jadi panel ini tidak pernah melakukannya.",
|
|
21
|
-
"knowledge.patterns.
|
|
22
|
-
"knowledge.
|
|
23
|
-
"knowledge.
|
|
24
|
-
"knowledge.
|
|
25
|
-
"knowledge.
|
|
26
|
-
"knowledge.
|
|
27
|
-
"knowledge.
|
|
28
|
-
"knowledge.
|
|
29
|
-
"knowledge.
|
|
30
|
-
"knowledge.
|
|
31
|
-
"knowledge.
|
|
32
|
-
"knowledge.
|
|
33
|
-
"knowledge.field.edges": "batas",
|
|
34
|
-
"knowledge.field.tags": "tag crosslink",
|
|
35
|
-
"knowledge.field.blind": "titik buta struktural",
|
|
89
|
+
"knowledge.patterns.note": "Konvensi per bahasa yang sudah direkonsiliasi, disuntikkan apa adanya ke slice executor. Konvensi proyek menang; invarian keamanan dan kebenaran selalu dipertahankan.",
|
|
90
|
+
"knowledge.patterns.paidWhy": "Mempelajari kebiasaan satu bahasa berarti membaca banyak kode Anda, jadi ini memakan token model — perintah untuk disalin, bukan tombol.",
|
|
91
|
+
"knowledge.patterns.title": "Code pattern",
|
|
92
|
+
"knowledge.patterns.unheadered": "Berkas ini tidak punya header yang bisa dibaca, jadi tidak ada tanggal yang bisa ditampilkan. Tanggal tidak pernah ditebak dari kapan berkas terakhir disimpan.",
|
|
93
|
+
"knowledge.peers.col.repo": "Repo",
|
|
94
|
+
"knowledge.peers.col.state": "Status",
|
|
95
|
+
"knowledge.peers.col.tags": "Tag yang ditawarkan",
|
|
96
|
+
"knowledge.peers.col.tier": "Kesegaran",
|
|
97
|
+
"knowledge.peers.none": "Belum ada repo yang tertaut.",
|
|
98
|
+
"knowledge.peers.note": "Repo yang tertaut, hanya dibaca. Semua kata di sini berasal dari repo sebelah — sisi ini tidak pernah menghitung ulang. Menyunting tautan dilakukan di Crosslink; hanya ada satu gambar batas, dan tempatnya di sana.",
|
|
99
|
+
"knowledge.peers.open": "Buka Crosslink",
|
|
100
|
+
"knowledge.peers.title": "Yang ORC ketahui dari sebelah",
|
|
36
101
|
"knowledge.plan": "Rencana pembaruan",
|
|
37
|
-
"knowledge.plan.na": "Tidak ada yang perlu direncanakan",
|
|
38
|
-
"knowledge.plan.naHint": "Buat wiki dulu, atau daftarkan halaman yang sudah ada di disk - keduanya gratis.",
|
|
39
102
|
"knowledge.plan.clean": "Semua halaman masih sesuai kode saat ini. Tidak ada yang perlu diperbarui.",
|
|
40
|
-
"knowledge.
|
|
41
|
-
"knowledge.debt.pendingPlural": "{n} halaman menunggu",
|
|
42
|
-
"knowledge.debt.oldest": "tertua tertinggal 1 commit",
|
|
43
|
-
"knowledge.debt.oldestPlural": "tertua tertinggal {n} commit",
|
|
44
|
-
"knowledge.debt.nothingBroken": "Tidak ada yang rusak. Halaman-halaman ini tertinggal, bukan salah - dan membereskan bagian teratas jauh lebih murah daripada memindai ulang semuanya.",
|
|
45
|
-
"knowledge.debt.none": "Tidak ada pembaruan yang tertunda.",
|
|
46
|
-
"knowledge.plan.freeFirst": "Perbaikan gratis dulu - jangan pernah membayar untuk yang bisa dibereskan langkah gratis",
|
|
47
|
-
"knowledge.plan.free": "gratis",
|
|
103
|
+
"knowledge.plan.col.delta": "berubah",
|
|
48
104
|
"knowledge.plan.col.doc": "halaman",
|
|
49
105
|
"knowledge.plan.col.state": "keadaan",
|
|
50
|
-
"knowledge.plan.col.delta": "berubah",
|
|
51
|
-
"knowledge.plan.col.used": "dipakai",
|
|
52
106
|
"knowledge.plan.col.tier": "pindai",
|
|
53
107
|
"knowledge.plan.col.tokens": "perkiraan token",
|
|
54
108
|
"knowledge.plan.col.usd": "perkiraan $",
|
|
109
|
+
"knowledge.plan.col.used": "dipakai",
|
|
110
|
+
"knowledge.plan.free": "gratis",
|
|
111
|
+
"knowledge.plan.freeFirst": "Perbaikan gratis dulu - jangan pernah membayar untuk yang bisa dibereskan langkah gratis",
|
|
55
112
|
"knowledge.plan.gone": "Sebuah berkas yang didokumentasikan halaman ini sudah hilang: {files}",
|
|
56
|
-
"knowledge.plan.
|
|
113
|
+
"knowledge.plan.na": "Tidak ada yang perlu direncanakan",
|
|
114
|
+
"knowledge.plan.naHint": "Buat wiki dulu, atau daftarkan halaman yang sudah ada di disk - keduanya gratis.",
|
|
57
115
|
"knowledge.plan.noEstimate": "Belum ada perkiraan biaya - riwayatnya belum cukup untuk mengukur, dan tidak akan dikarang.",
|
|
58
|
-
"knowledge.plan.tierNote": "Mode pemindaian {mode}: {deep} dalam, {light} ringan. Pemindaian yang lebih murah selalu ditampilkan, tidak pernah diganti diam-diam.",
|
|
59
116
|
"knowledge.plan.refreshWhy": "Pembaruan membaca ulang kode Anda dengan model, jadi ada biayanya. Karena itu ia berupa perintah yang Anda jalankan, bukan tombol di sini.",
|
|
117
|
+
"knowledge.plan.retireHint": "Tidak ada run yang memakai halaman ini dalam {n} run terakhir. Memensiunkannya mungkin lebih berharga daripada memperbaruinya.",
|
|
118
|
+
"knowledge.plan.tierNote": "Mode pemindaian {mode}: {deep} dalam, {light} ringan. Pemindaian yang lebih murah selalu ditampilkan, tidak pernah diganti diam-diam.",
|
|
119
|
+
"knowledge.reveal": "Tampilkan isinya",
|
|
120
|
+
"knowledge.strip.blind": "belum ditulis",
|
|
121
|
+
"knowledge.strip.covered": "tercakup",
|
|
122
|
+
"knowledge.strip.docs": "dokumen",
|
|
123
|
+
"knowledge.strip.gotchas": "catatan perbaikan",
|
|
124
|
+
"knowledge.strip.patterns": "pola",
|
|
125
|
+
"knowledge.strip.pending": "menunggu",
|
|
126
|
+
"knowledge.strip.wiki": "wiki",
|
|
127
|
+
"knowledge.sub": "Yang sudah diketahui ORC tentang repo ini: wiki, code-pattern tersimpan, dan memori perbaikan.",
|
|
60
128
|
"knowledge.syncFree": "Daftarkan halaman (gratis)",
|
|
61
129
|
"knowledge.syncOk": "Halaman terdaftar",
|
|
130
|
+
"knowledge.tab.coverage": "Cakupan",
|
|
131
|
+
"knowledge.tab.memory": "Ingatan",
|
|
132
|
+
"knowledge.tab.patterns": "Pola kode",
|
|
133
|
+
"knowledge.tab.peers": "Repo tetangga",
|
|
134
|
+
"knowledge.tab.wiki": "Wiki",
|
|
135
|
+
"knowledge.title": "Pengetahuan",
|
|
62
136
|
"knowledge.usage": "Halaman mana yang dipakai",
|
|
63
|
-
"knowledge.usage.rebuild": "Hitung ulang",
|
|
64
|
-
"knowledge.usage.rebuilt": "Dihitung ulang dari jejak",
|
|
65
|
-
"knowledge.usage.registered": "{n} terdaftar",
|
|
66
137
|
"knowledge.usage.active": "{n} aktif dipakai",
|
|
67
138
|
"knowledge.usage.never": "{n} tak terpakai dalam {runs} run",
|
|
68
139
|
"knowledge.usage.neverUsed": "belum pernah",
|
|
69
140
|
"knowledge.usage.note": "Dihitung dari apa yang benar-benar dimasukkan run ke dalam slice. Halaman yang tak pernah dibaca tetap memakan biaya di setiap pemindaian penuh, dan memakan ruang konteks setiap kali disertakan.",
|
|
70
|
-
"knowledge.
|
|
71
|
-
"knowledge.
|
|
72
|
-
"knowledge.
|
|
73
|
-
"knowledge.
|
|
74
|
-
"knowledge.
|
|
75
|
-
"knowledge.
|
|
76
|
-
"knowledge.
|
|
77
|
-
"knowledge.
|
|
78
|
-
"knowledge.
|
|
79
|
-
"knowledge.
|
|
80
|
-
"knowledge.strip.patterns": "pola",
|
|
81
|
-
"knowledge.strip.gotchas": "catatan perbaikan",
|
|
82
|
-
"knowledge.field.worst": "Dokumen tertua (ini yang menentukan status)",
|
|
83
|
-
"knowledge.orientation.present": "Dokumen pengantar ada: {file}. Setiap pembaca membukanya lebih dulu.",
|
|
84
|
-
"knowledge.orientation.missing": "Belum ada dokumen pengantar. Setiap pembaca membukanya lebih dulu, jadi ini layak dibuat — dan membuatnya ulang gratis.",
|
|
85
|
-
"knowledge.docs.title": "Isi wiki",
|
|
86
|
-
"knowledge.docs.note": "Semua dokumen terdaftar, urut seperti yang dikirim CLI. Buka satu baris untuk melihat apa yang dicakupnya dan pada commit mana ia dipindai. Jarak setiap dokumen dihitung dari berkasnya sendiri, jadi dokumen tentang pembayaran tidak menua hanya karena README berubah.",
|
|
87
|
-
"knowledge.docs.none": "Belum ada yang terdaftar.",
|
|
88
|
-
"knowledge.docs.noneHint": "Dokumen di disk harus didaftarkan dulu sebelum ada yang bisa membacanya, dan mendaftarkannya gratis dan seketika.",
|
|
89
|
-
"knowledge.docs.col.doc": "Dokumen",
|
|
90
|
-
"knowledge.docs.col.tier": "Status",
|
|
91
|
-
"knowledge.docs.col.distance": "Tertinggal",
|
|
92
|
-
"knowledge.docs.col.covers": "Mencakup",
|
|
93
|
-
"knowledge.docs.col.used": "Dipakai",
|
|
94
|
-
"knowledge.docs.col.tags": "Tag",
|
|
95
|
-
"knowledge.docs.field.title": "Judul",
|
|
96
|
-
"knowledge.docs.field.type": "Jenis",
|
|
97
|
-
"knowledge.docs.field.scanned": "Dipindai pada commit",
|
|
98
|
-
"knowledge.docs.field.covers": "Mencakup",
|
|
99
|
-
"knowledge.docs.field.coveredFiles": "Berkas yang disebut",
|
|
100
|
-
"knowledge.docs.field.lastUsed": "Terakhir dipakai",
|
|
101
|
-
"knowledge.reveal": "Tampilkan isinya",
|
|
102
|
-
"knowledge.coverage.title": "Seberapa banyak kode yang sudah ditulis",
|
|
103
|
-
"knowledge.coverage.sub": "{covered} dari {tracked} berkas terlacak dicakup setidaknya satu dokumen",
|
|
104
|
-
"knowledge.coverage.notATarget": "Ini laporan, bukan target. Tidak ada ambang batas, tidak ada yang bereaksi terhadap angka ini, dan repo yang sengaja hanya menulis empat bagian dari empat puluh tidak berarti rusak.",
|
|
105
|
-
"knowledge.coverage.na": "Tidak bisa diukur di sini.",
|
|
106
|
-
"knowledge.coverage.naHint": "Butuh wiki yang terdaftar dan repositori git.",
|
|
107
|
-
"knowledge.coverage.uncovered": "Belum tercakup",
|
|
108
|
-
"knowledge.coverage.uncoveredNote": "Dikelompokkan per folder, yang terbesar dulu, karena \"240 berkas, semuanya di vendor\" dan \"12 berkas, semuanya di pembayaran\" adalah dua situasi yang berlawanan.",
|
|
109
|
-
"knowledge.coverage.col.dir": "Folder",
|
|
110
|
-
"knowledge.coverage.col.files": "Berkas",
|
|
111
|
-
"knowledge.coverage.col.last": "Terakhir disentuh",
|
|
112
|
-
"knowledge.blind.title": "Berubah, dan belum ada dokumen yang membahasnya",
|
|
113
|
-
"knowledge.blind.none": "Tidak ada perubahan yang tidak dibahas dokumen mana pun.",
|
|
114
|
-
"knowledge.blind.note": "Berkas ini berubah dan tidak ada dokumen yang mengakuinya. Itu berarti ada yang belum ditulis, bukan berarti yang sudah ada jadi salah — jadi ini sendiri tidak pernah membuat wiki basi.",
|
|
115
|
-
"knowledge.patterns.inspect": "Lihat isinya",
|
|
116
|
-
"knowledge.patterns.field.codified": "Ditulis pada",
|
|
117
|
-
"knowledge.patterns.field.source": "Dari commit",
|
|
118
|
-
"knowledge.patterns.field.playbook": "Panduan pembandingnya",
|
|
119
|
-
"knowledge.patterns.field.size": "Baris · byte",
|
|
120
|
-
"knowledge.patterns.field.counts": "Kebiasaan · aturan wajib",
|
|
121
|
-
"knowledge.patterns.unheadered": "Berkas ini tidak punya header yang bisa dibaca, jadi tidak ada tanggal yang bisa ditampilkan. Tanggal tidak pernah ditebak dari kapan berkas terakhir disimpan.",
|
|
122
|
-
"knowledge.patterns.conflicts": "Tempat proyek dan panduan berbeda pendapat",
|
|
123
|
-
"knowledge.patterns.literalNote": "Teks persis ini diberikan ke setiap agen yang menulis kode di sini. Kalau Anda tidak bisa membacanya, Anda tidak bisa memercayainya.",
|
|
124
|
-
"knowledge.patterns.paidWhy": "Mempelajari kebiasaan satu bahasa berarti membaca banyak kode Anda, jadi ini memakan token model — perintah untuk disalin, bukan tombol.",
|
|
125
|
-
"knowledge.gotchas.headroom": "{n} dari {max} disimpan",
|
|
126
|
-
"knowledge.gotchas.preview": "Lihat apa yang akan diarsipkan",
|
|
127
|
-
"knowledge.gotchas.pruneWould": "{n} entri akan dipindahkan ke arsip:",
|
|
128
|
-
"knowledge.gotchas.pruneNone": "Tidak ada yang akan diarsipkan — Anda masih di bawah batas.",
|
|
129
|
-
"knowledge.archive.title": "Arsip",
|
|
130
|
-
"knowledge.archive.note": "Tidak ada yang pernah dihapus di sini. Entri yang terdorong keluar oleh batas hanya dipindahkan, dan idnya tetap selamanya.",
|
|
131
|
-
"knowledge.archive.load": "Tampilkan arsip",
|
|
132
|
-
"knowledge.archive.empty": "Belum ada yang diarsipkan.",
|
|
133
|
-
"knowledge.peers.title": "Yang ORC ketahui dari sebelah",
|
|
134
|
-
"knowledge.peers.note": "Repo yang tertaut, hanya dibaca. Semua kata di sini berasal dari repo sebelah — sisi ini tidak pernah menghitung ulang. Menyunting tautan dilakukan di Crosslink; hanya ada satu gambar batas, dan tempatnya di sana.",
|
|
135
|
-
"knowledge.peers.open": "Buka Crosslink",
|
|
136
|
-
"knowledge.peers.none": "Belum ada repo yang tertaut.",
|
|
137
|
-
"knowledge.peers.col.repo": "Repo",
|
|
138
|
-
"knowledge.peers.col.state": "Status",
|
|
139
|
-
"knowledge.peers.col.tier": "Kesegaran",
|
|
140
|
-
"knowledge.peers.col.tags": "Tag yang ditawarkan"
|
|
141
|
+
"knowledge.usage.rebuild": "Hitung ulang",
|
|
142
|
+
"knowledge.usage.rebuilt": "Dihitung ulang dari jejak",
|
|
143
|
+
"knowledge.usage.registered": "{n} terdaftar",
|
|
144
|
+
"knowledge.wiki": "Wiki",
|
|
145
|
+
"knowledge.wiki.freshNote": "Kesegaran itu relatif terhadap cakupan: sebuah dokumen baru dianggap basi kalau commit sejak anchor-nya SENDIRI menyentuh berkas yang DIA cakup.",
|
|
146
|
+
"knowledge.wiki.none": "Belum ada wiki.",
|
|
147
|
+
"knowledge.wiki.noneHint": "Jalankan /orc-wiki di Claude Code untuk membangunnya. Panel ini tidak pernah melakukan scan — itu memakai model.",
|
|
148
|
+
"knowledge.wiki.syncHint": "`orc wiki sync` memperbaikinya seketika: registrasi diturunkan dari dokumen, jadi gratis dan bukan scan ulang.",
|
|
149
|
+
"knowledge.wiki.unregistered": "Wiki berstatus {state} — tidak ada yang bisa membacanya sampai terdaftar.",
|
|
150
|
+
"knowledge.wiki.why": "sebab: {reason}"
|
|
141
151
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"rules.title": "Aturan",
|
|
3
|
+
"rules.sub": "Aturan anti-slop. ORC mengirim 65 aturan, hanya-baca. Aturan Anda yang menang.",
|
|
4
|
+
"rules.unavailable": "Aturan tidak dapat dibaca",
|
|
5
|
+
"rules.unavailableHint": "`orc rules --json` tidak mengembalikan apa pun yang dapat diurai panel ini. Jalankan perintah itu di terminal untuk melihat jawabannya.",
|
|
6
|
+
|
|
7
|
+
"rules.precedence.title": "Urutan kuasa",
|
|
8
|
+
"rules.precedence.lead": "Tiga lapis, dan urutannya tidak pernah berubah.",
|
|
9
|
+
"rules.precedence.beats": "mengalahkan {what}",
|
|
10
|
+
"rules.precedence.houseScope": "Aturan rumah hanya untuk KODE dan perilaku. Aturan itu mengatur cara sebuah perubahan dibuat — bedah, sederhana, jujur. Aturan itu tidak berbicara tentang kata-kata yang ditulis agen, jadi tidak pernah mengalahkan aturan penulisan.",
|
|
11
|
+
|
|
12
|
+
"rules.overrides.head": "1 aturan ORC diganti oleh aturan Anda",
|
|
13
|
+
"rules.overrides.headPlural": "{n} aturan ORC diganti oleh aturan Anda",
|
|
14
|
+
"rules.overrides.unknownId": "bukan id aturan ORC yang dikenal",
|
|
15
|
+
|
|
16
|
+
"rules.user.title": "Aturan Anda",
|
|
17
|
+
"rules.user.wins": "Instruksi tetap milik proyek ini. Aturan ini dibaca SEBELUM aturan ORC, dan menang bila keduanya berbeda.",
|
|
18
|
+
"rules.user.howto": "Tiga judul — P0, P1, P2 — dan sebanyak apa pun teks di bawah masing-masing. Seluruh blok diserahkan ke setiap agen apa adanya, jadi tulislah seperti Anda mengatakannya. Apa pun di atas judul pertama adalah catatan untuk diri sendiri dan tidak pernah dikirim.",
|
|
19
|
+
"rules.user.turnOff": "Untuk mematikan satu aturan ORC, sebut id-nya di dalam aturan Anda sendiri: \"OSW-13: tanda pisah em adalah suara rumah kami.\" Penggantian itu lalu dihitung, dicetak saat preflight, dan dinyatakan di dalam setiap slice.",
|
|
20
|
+
"rules.user.staged": "aturan Anda, ditulis ulang",
|
|
21
|
+
"rules.user.refresh": "Muat ulang dari disk",
|
|
22
|
+
|
|
23
|
+
"rules.packs.title": "Aturan ORC",
|
|
24
|
+
"rules.packs.readOnly": "hanya-baca",
|
|
25
|
+
"rules.packs.lead": "{n} aturan dalam empat paket, dikirim bersama ORC. Diadaptasi, dengan kredit, dari karya orang lain — lihat di bawah.",
|
|
26
|
+
"rules.packs.filter": "Saring berdasarkan id, judul, atau teks",
|
|
27
|
+
"rules.packs.tier": "Tingkat",
|
|
28
|
+
"rules.packs.allTiers": "Semua tingkat",
|
|
29
|
+
"rules.packs.rules": "1 aturan",
|
|
30
|
+
"rules.packs.rulesPlural": "{n} aturan",
|
|
31
|
+
"rules.packs.off": "mati di sini",
|
|
32
|
+
"rules.packs.showing": "Menampilkan {shown} dari {total}.",
|
|
33
|
+
"rules.packs.noMatch": "Tidak ada aturan yang cocok dengan saringan itu.",
|
|
34
|
+
"rules.packs.changeHow": "Aturan ini berubah dengan `orc update` dan tidak dengan cara lain. Untuk mengubah apa yang ditulis ORC di proyek ini, tulis aturan Anda sendiri di atas.",
|
|
35
|
+
"rules.packs.englishOnly": "Teks aturan tetap berbahasa Inggris dalam setiap bahasa. Teks itu adalah isi kiriman yang ditunjuk oleh id aturan, dan aturan yang diterjemahkan akan menjadi aturan yang berbeda.",
|
|
36
|
+
|
|
37
|
+
"rules.credits.title": "Kredit",
|
|
38
|
+
"rules.credits.lead": "Aturan ini adalah karya orang lain. Setiap sumber disebut dengan lisensinya dan apa yang diambil ORC darinya.",
|
|
39
|
+
"rules.credits.readOn": "dibaca {date}",
|
|
40
|
+
"rules.credits.none": "Tidak ada data kredit — jalankan `orc update`.",
|
|
41
|
+
|
|
42
|
+
"rules.lint.title": "Lint",
|
|
43
|
+
"rules.lint.lead": "Pemeriksaan gratis, nol token. Lint ini hanya membaca apa yang dapat dibuktikan oleh pencocokan teks, dan selalu menyebut berapa aturan yang tidak dapat diperiksanya. Lint melapor; lint tidak pernah memperbaiki.",
|
|
44
|
+
"rules.lint.pathPlaceholder": "Sebuah berkas atau folder, relatif terhadap proyek",
|
|
45
|
+
"rules.lint.run": "Jalankan lint",
|
|
46
|
+
"rules.lint.files": "1 berkas",
|
|
47
|
+
"rules.lint.filesPlural": "{n} berkas",
|
|
48
|
+
"rules.lint.findings": "1 temuan",
|
|
49
|
+
"rules.lint.findingsPlural": "{n} temuan",
|
|
50
|
+
"rules.lint.clean": "Bersih, untuk aturan yang dapat dibuktikan pencocokan teks.",
|
|
51
|
+
"rules.lint.nothing": "Tidak ada yang dapat di-lint di sana.",
|
|
52
|
+
"rules.lint.suppressed": "Mati di sini, karena aturan Anda sendiri menyebut id ini: {ids}",
|
|
53
|
+
"rules.lint.skipped": "1 berkas dilewati",
|
|
54
|
+
"rules.lint.skippedPlural": "{n} berkas dilewati"
|
|
55
|
+
}
|
package/bin/webui/js/01-i18n.js
CHANGED
|
@@ -35,7 +35,7 @@ let KN_TAB = "wiki";
|
|
|
35
35
|
|
|
36
36
|
async function renderKnowledge(body) {
|
|
37
37
|
body.replaceChildren(skeleton(6));
|
|
38
|
-
const [wikiRes, impactRes, patRes, gotRes, planRes, debtRes, usageRes, docsRes, covRes] = await Promise.all([
|
|
38
|
+
const [wikiRes, impactRes, patRes, gotRes, planRes, debtRes, usageRes, docsRes, covRes, refsRes] = await Promise.all([
|
|
39
39
|
read("/api/wiki").catch((e) => ({ data: null, error: e })),
|
|
40
40
|
read("/api/wiki/impact").catch((e) => ({ data: null, error: e })),
|
|
41
41
|
read("/api/patterns").catch((e) => ({ data: null, error: e })),
|
|
@@ -45,6 +45,9 @@ async function renderKnowledge(body) {
|
|
|
45
45
|
read("/api/wiki/usage").catch((e) => ({ data: null, error: e })),
|
|
46
46
|
read("/api/wiki/docs").catch((e) => ({ data: null, error: e })),
|
|
47
47
|
read("/api/wiki/coverage").catch((e) => ({ data: null, error: e })),
|
|
48
|
+
// v1.7.0 — the derived-reference sweep. `--check`, always: opening a panel
|
|
49
|
+
// must never write to a repo.
|
|
50
|
+
read("/api/wiki/refs").catch((e) => ({ data: null, error: e })),
|
|
48
51
|
]);
|
|
49
52
|
const d = {
|
|
50
53
|
wiki: wikiRes.data || {},
|
|
@@ -56,6 +59,7 @@ async function renderKnowledge(body) {
|
|
|
56
59
|
usage: usageRes.data,
|
|
57
60
|
docs: docsRes.data,
|
|
58
61
|
coverage: covRes.data,
|
|
62
|
+
refs: refsRes.data,
|
|
59
63
|
// A read that FAILED is not the same as a read that came back empty, and
|
|
60
64
|
// rendering them identically is what turned a truncated 30 KB payload into
|
|
61
65
|
// "this repo has no wiki and no git" (v0.49.4). The server already puts the
|
|
@@ -136,6 +140,7 @@ function knowledgeHeaderStrip(d) {
|
|
|
136
140
|
function knWikiTab(d, body) {
|
|
137
141
|
const out = frag();
|
|
138
142
|
out.append(wikiPlanCard(d.plan, d.debt, body));
|
|
143
|
+
out.append(wikiOneDocCard(d.refs));
|
|
139
144
|
if (d.usage && d.usage.rows) out.append(wikiUsageCard(d.usage, body));
|
|
140
145
|
|
|
141
146
|
const w = d.wiki;
|
|
@@ -875,6 +880,117 @@ function wikiUsageCard(u, body) {
|
|
|
875
880
|
return c;
|
|
876
881
|
}
|
|
877
882
|
|
|
883
|
+
/* ONE DOC AT A TIME (v1.7.0).
|
|
884
|
+
Two halves of the same question, and neither of them scans.
|
|
885
|
+
|
|
886
|
+
The RESOLVER answers "is this topic already in the wiki?" — free, from the
|
|
887
|
+
doc headers. It is a probe, so the panel runs it; the refresh or the add that
|
|
888
|
+
follows is a LANE, so the panel prints the command and stops. That is the
|
|
889
|
+
panel's standing line, visible here rather than implied: a free action gets a
|
|
890
|
+
button, a paid one gets a command you can copy.
|
|
891
|
+
|
|
892
|
+
The SWEEP is `orc wiki refs --check`. It exists because after ONE doc changes,
|
|
893
|
+
the surfaces DERIVED from the doc set are behind it — and on a small run
|
|
894
|
+
nobody remembers to look. `--check`, always: opening a panel must never write
|
|
895
|
+
to a repo. */
|
|
896
|
+
const REFS_STATE_KIND = { clean: "ok", repaired: "ok", absent: "", behind: "warn", outstanding: "warn", missing: "warn", drifted: "bad", dead: "warn" };
|
|
897
|
+
|
|
898
|
+
function wikiOneDocCard(refs) {
|
|
899
|
+
const c = card(t("knowledge.one.title"));
|
|
900
|
+
c.append(el("div", "note", t("knowledge.one.lead")));
|
|
901
|
+
|
|
902
|
+
// ── the resolver ──────────────────────────────────────────────────────────
|
|
903
|
+
const row = el("div", "row-actions");
|
|
904
|
+
const input = el("input", "text-input kn-one-topic");
|
|
905
|
+
input.type = "text";
|
|
906
|
+
input.placeholder = t("knowledge.one.placeholder");
|
|
907
|
+
input.setAttribute("aria-label", t("knowledge.one.placeholder"));
|
|
908
|
+
const go = el("button", "btn btn-sm btn-primary", t("knowledge.one.resolve"));
|
|
909
|
+
go.type = "button";
|
|
910
|
+
row.append(input, go);
|
|
911
|
+
c.append(row);
|
|
912
|
+
|
|
913
|
+
const out = el("div", "kn-one-out");
|
|
914
|
+
c.append(out);
|
|
915
|
+
|
|
916
|
+
const resolve = async () => {
|
|
917
|
+
const topic = input.value.trim();
|
|
918
|
+
if (!topic) return;
|
|
919
|
+
go.disabled = true;
|
|
920
|
+
out.replaceChildren(skeleton(1));
|
|
921
|
+
try {
|
|
922
|
+
const r = await read("/api/wiki/resolve?topic=" + encodeURIComponent(topic));
|
|
923
|
+
const d = r.data || {};
|
|
924
|
+
out.replaceChildren();
|
|
925
|
+
if (!d.ok) {
|
|
926
|
+
out.append(el("div", "note warn", d.hint || t("knowledge.one.cannot")));
|
|
927
|
+
return;
|
|
928
|
+
}
|
|
929
|
+
const head = el("div", "row-actions");
|
|
930
|
+
// The CLI's own verdict word, never a friendlier synonym.
|
|
931
|
+
head.append(chip(d.verdict, d.verdict === "match" ? "ok" : d.verdict === "ambiguous" ? "warn" : ""));
|
|
932
|
+
if (d.verdict === "match") head.append(el("span", "mono", d.match.file));
|
|
933
|
+
out.append(head);
|
|
934
|
+
|
|
935
|
+
if (d.verdict === "match") out.append(el("div", "note", d.match.why.slice(0, 4).join(" · ")));
|
|
936
|
+
// AMBIGUOUS is a question, not a guess: every candidate is listed with its
|
|
937
|
+
// score, and no command is offered until a human picks one.
|
|
938
|
+
if (d.verdict === "ambiguous")
|
|
939
|
+
for (const cand of d.candidates || []) {
|
|
940
|
+
const cr = el("div", "kn-one-cand");
|
|
941
|
+
cr.append(el("span", "note mono", String(cand.score)));
|
|
942
|
+
cr.append(el("span", "mono", cand.file));
|
|
943
|
+
cr.append(el("span", "note", (cand.why || []).slice(0, 3).join(" · ")));
|
|
944
|
+
out.append(cr);
|
|
945
|
+
}
|
|
946
|
+
if (d.verdict === "new" && (d.suggested_covers || []).length) {
|
|
947
|
+
out.append(el("div", "note", t("knowledge.one.proposed")));
|
|
948
|
+
for (const s of d.suggested_covers) {
|
|
949
|
+
const sr = el("div", "kn-one-cand");
|
|
950
|
+
sr.append(el("span", "mono", s.glob));
|
|
951
|
+
sr.append(el("span", "note", tn(s.matches, "knowledge.one.files")));
|
|
952
|
+
out.append(sr);
|
|
953
|
+
}
|
|
954
|
+
// The CLI's own caveat, relayed. A proposal that arrives without it
|
|
955
|
+
// reads as an answer.
|
|
956
|
+
out.append(el("div", "note", d.note));
|
|
957
|
+
}
|
|
958
|
+
// A LANE costs money, so it is a command to copy, never a button.
|
|
959
|
+
out.append(laneCommand(d.next, t("knowledge.one.next")));
|
|
960
|
+
} catch (e) {
|
|
961
|
+
out.replaceChildren(failBox(e));
|
|
962
|
+
} finally {
|
|
963
|
+
go.disabled = false;
|
|
964
|
+
}
|
|
965
|
+
};
|
|
966
|
+
go.addEventListener("click", resolve);
|
|
967
|
+
input.addEventListener("keydown", (ev) => {
|
|
968
|
+
if (ev.key === "Enter") resolve();
|
|
969
|
+
});
|
|
970
|
+
|
|
971
|
+
// ── the sweep ─────────────────────────────────────────────────────────────
|
|
972
|
+
if (refs && refs.items) {
|
|
973
|
+
const sweep = el("div", "kn-one-sweep");
|
|
974
|
+
sweep.append(el("div", "checklist-head", t("knowledge.one.sweep")));
|
|
975
|
+
for (const i of refs.items) {
|
|
976
|
+
const ir = el("div", "kn-one-ref");
|
|
977
|
+
ir.append(chip(i.state, REFS_STATE_KIND[i.state] || ""));
|
|
978
|
+
ir.append(el("span", "mono", i.id));
|
|
979
|
+
ir.append(el("span", "note", i.what));
|
|
980
|
+
sweep.append(ir);
|
|
981
|
+
if (i.fix) sweep.append(el("div", "note kn-one-fix", "→ " + i.fix + " (" + i.cost + ")"));
|
|
982
|
+
}
|
|
983
|
+
// WHY only one surface is ever repaired. Relayed from the CLI, because a
|
|
984
|
+
// sweep that looked like it fixed everything would be the more dangerous
|
|
985
|
+
// reading.
|
|
986
|
+
sweep.append(el("div", "note", refs.note));
|
|
987
|
+
c.append(sweep);
|
|
988
|
+
} else if (refs && refs.hint) {
|
|
989
|
+
c.append(el("div", "note", refs.hint));
|
|
990
|
+
}
|
|
991
|
+
return c;
|
|
992
|
+
}
|
|
993
|
+
|
|
878
994
|
function wikiActions(body, w) {
|
|
879
995
|
if (!w || !w.state || w.state === "none") return null;
|
|
880
996
|
const wrap = el("div", "row-actions");
|