@azure-id/orc 1.9.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +722 -0
- package/README-id.md +56 -42
- package/README.md +58 -41
- package/bin/build-agents.js +125 -29
- package/bin/clear-logs.js +620 -0
- package/bin/cli.js +1873 -180
- package/bin/fix.js +459 -0
- package/bin/gotcha-import.js +1081 -0
- package/bin/gotcha.js +1566 -0
- package/bin/graph-query.js +1 -1
- package/bin/graph.js +717 -717
- package/bin/habit.js +1538 -0
- package/bin/mockrun-catalog.js +284 -276
- package/bin/onboarding-content.js +2 -1
- package/bin/pricing.json +28 -21
- package/bin/run-undo.js +398 -0
- package/bin/trace-write.js +869 -0
- package/bin/verify-contracts.js +627 -100
- package/bin/verify-package.js +68 -10
- package/bin/webui/api.js +151 -6
- package/bin/webui/app.html +239 -232
- package/bin/webui/css/00-tokens.css +110 -92
- package/bin/webui/css/04-motion.css +87 -0
- package/bin/webui/css/06-responsive.css +203 -178
- package/bin/webui/css/panels/behaviour.css +205 -0
- package/bin/webui/css/panels/hookui.css +79 -0
- package/bin/webui/fixtures/behaviour.js +562 -0
- package/bin/webui/fixtures/extra.js +9 -9
- package/bin/webui/fixtures/flow.js +81 -81
- package/bin/webui/fixtures/hookui.js +506 -431
- package/bin/webui/fixtures/index.js +66 -3
- package/bin/webui/fixtures/knowledge.js +9 -3
- package/bin/webui/fixtures/maintenance.js +123 -42
- package/bin/webui/fixtures/rules.js +1007 -1002
- package/bin/webui/fixtures/settings.js +6 -7
- package/bin/webui/fixtures/stats.js +25 -6
- package/bin/webui/fixtures/wait.js +98 -97
- package/bin/webui/i18n/en/behaviour.json +156 -0
- package/bin/webui/i18n/en/hookui.json +290 -194
- package/bin/webui/i18n/en/maintenance.json +71 -52
- package/bin/webui/i18n/en/nav.json +25 -24
- package/bin/webui/i18n/en/settings.json +60 -60
- package/bin/webui/i18n/en/tour.json +37 -35
- package/bin/webui/i18n/id/behaviour.json +156 -0
- package/bin/webui/i18n/id/hookui.json +290 -194
- package/bin/webui/i18n/id/maintenance.json +71 -52
- package/bin/webui/i18n/id/nav.json +25 -24
- package/bin/webui/i18n/id/settings.json +60 -60
- package/bin/webui/i18n/id/tour.json +37 -35
- package/bin/webui/js/01-i18n.js +155 -154
- package/bin/webui/js/05-banners.js +181 -172
- package/bin/webui/js/06-edit.js +193 -183
- 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 +1087 -0
- package/bin/webui/js/panels/hookui.js +2196 -1691
- package/bin/webui/js/panels/maintenance.js +336 -235
- package/bin/webui/js/panels/settings.js +726 -719
- package/mock-run/INDEX.md +110 -107
- package/mock-run/extra-slots.md +1 -1
- package/mock-run/gotcha-import.md +118 -0
- package/mock-run/habits.md +129 -0
- package/mock-run/orc-aftermath.md +392 -392
- package/mock-run/orc-budget.md +29 -33
- package/mock-run/orc-cli.md +200 -200
- package/mock-run/orc-explain.md +86 -86
- package/mock-run/orc-extra.md +389 -392
- package/mock-run/orc-fix.md +87 -0
- package/mock-run/orc-pattern.md +112 -112
- package/mock-run/orc-quick.md +6 -1
- package/mock-run/orc.md +157 -157
- package/package.json +1 -1
- package/templates/agents/MODEL-MAPPING.md +37 -34
- package/templates/agents/orc-advisor-opus-5-xhigh.md +1 -7
- package/templates/agents/orc-analyze-mini-opus-5-med.md +1 -6
- package/templates/agents/orc-analyze-mini-sonnet-5-high.md +2 -5
- package/templates/agents/{orc-claude-writer-opus-4-8-high.md → orc-claude-writer-opus-5-low.md} +48 -53
- package/templates/agents/orc-context-combiner-opus-5-high.md +1 -11
- 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 +14 -6
- package/templates/agents/orc-executor-opus-5-low.md +14 -6
- package/templates/agents/orc-executor-opus-5-med.md +14 -6
- 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 +15 -7
- package/templates/agents/orc-executor-sonnet-5-low.md +155 -0
- package/templates/agents/orc-executor-sonnet-5-med.md +155 -0
- package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -10
- package/templates/agents/orc-judge-opus-5-xhigh.md +5 -9
- package/templates/agents/orc-learn-writer-opus-5-low.md +1 -7
- package/templates/agents/orc-pattern-codifier-opus-5-med.md +1 -8
- package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +58 -63
- package/templates/agents/orc-planner-mini-opus-5-med.md +1 -4
- package/templates/agents/orc-planner-mini-sonnet-5-high.md +2 -3
- package/templates/agents/orc-planner-opus-5-med.md +1 -4
- package/templates/agents/orc-recon-opus-5-low.md +1 -8
- package/templates/agents/orc-recon-sonnet-4-6-med.md +1 -8
- package/templates/agents/orc-retro-opus-5-med.md +6 -8
- package/templates/agents/orc-retro-sonnet-5-high.md +7 -8
- package/templates/agents/orc-reviewer-opus-5-low.md +96 -0
- package/templates/agents/orc-scout-opus-5-low.md +1 -6
- package/templates/agents/orc-scout-sonnet-4-6-high.md +35 -39
- package/templates/agents/orc-system-analyst-opus-5-high.md +1 -6
- package/templates/agents/orc-test-author-opus-5-med.md +4 -5
- package/templates/agents/orc-trace-writer-haiku-4-5.md +3 -7
- package/templates/agents/orc-verifier-opus-5-med.md +16 -8
- package/templates/agents/{orc-wiki-scanner-opus-4-8-high.md → orc-wiki-scanner-opus-5-low.md} +74 -79
- 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-fix.md +18 -0
- 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-wiki.md +64 -64
- package/templates/hooks/README.md +109 -7
- package/templates/hooks/orc-session-hook.js +339 -0
- package/templates/hooks/orc-statusline-render.js +317 -23
- package/templates/hooks/orc-statusline.js +165 -50
- package/templates/hooks/orc-subagent-line.js +23 -5
- package/templates/hooks/orc-weather-fetch.js +123 -0
- package/templates/skills/_shared/README.md +9 -0
- package/templates/skills/_shared/code-graph.md +47 -55
- package/templates/skills/_shared/config-precedence.md +3 -1
- package/templates/skills/_shared/extra-dispatch.md +78 -93
- package/templates/skills/_shared/gotchas.md +248 -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 +14 -14
- package/templates/skills/_shared/phases/README.md +142 -83
- package/templates/skills/_shared/phases/analyst-gates.md +10 -21
- 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 +24 -28
- 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 +447 -0
- package/templates/skills/_shared/phases/trace.md +66 -297
- 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 +106 -0
- package/templates/skills/_shared/smoke-gate.md +46 -28
- package/templates/skills/_shared/wait.md +1 -0
- package/templates/skills/context-combiner/SKILL.md +15 -44
- package/templates/skills/orc/README.md +2 -2
- package/templates/skills/orc/SKILL.md +35 -63
- package/templates/skills/orc/config.md +25 -27
- package/templates/skills/orc/examples/full-run-mock.md +2 -1
- package/templates/skills/orc/references/effort-and-mode.md +17 -17
- 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 +11 -12
- package/templates/skills/orc/references/ultra-mode.md +9 -7
- package/templates/skills/orc/schemas/checkpoint.md +122 -122
- 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-review-verify/SKILL.md +12 -53
- 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 +11 -22
- 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 +33 -67
- package/templates/skills/orc-analyze/schemas/report-audit.md +2 -1
- package/templates/skills/orc-analyze/schemas/report-prose.md +2 -1
- package/templates/skills/orc-analyze-mini/SKILL.md +35 -70
- package/templates/skills/orc-claude/SKILL.md +14 -14
- package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -65
- package/templates/skills/orc-diy/README.md +31 -0
- package/templates/skills/orc-diy/SKILL.md +27 -78
- package/templates/skills/orc-diy/references/blocks/pattern.md +18 -18
- package/templates/skills/orc-fast/SKILL.md +49 -75
- package/templates/skills/orc-fix/SKILL.md +110 -0
- package/templates/skills/orc-judge/SKILL.md +77 -82
- package/templates/skills/orc-mini/SKILL.md +64 -112
- package/templates/skills/orc-mini/examples/mini-run-mock.md +4 -2
- 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 +44 -3
- package/templates/skills/orc-quick/SKILL.md +77 -108
- package/templates/skills/orc-quick/references/dispatch-gate.md +18 -6
- package/templates/skills/orc-quick/references/gh-mode.md +50 -1
- package/templates/skills/orc-quick/references/look.md +3 -1
- package/templates/skills/orc-retro/SKILL.md +20 -19
- package/templates/skills/orc-retro/examples/retro-mock.md +17 -17
- 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 +14 -32
- package/templates/skills/orc-wait/SKILL.md +156 -163
- package/templates/skills/orc-wiki/README.md +325 -325
- package/templates/skills/orc-wiki/SKILL.md +195 -195
- package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -37
- package/templates/skills/orc-wiki/references/extra.md +2 -2
- package/templates/skills/orc-wiki/references/partial-refresh.md +276 -271
- package/templates/skills/orc-wiki/references/phases/phase-0.md +2 -7
- package/templates/skills/orc-wiki/references/phases/phase-1.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-2.md +4 -9
- package/templates/skills/orc-wiki/references/phases/phase-3.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-3c.md +4 -8
- package/templates/agents/orc-claude-writer-opus-5-med.md +0 -55
- package/templates/agents/orc-reviewer-opus-5-med.md +0 -60
- package/templates/agents/orc-wiki-scanner-opus-5-med.md +0 -81
package/README-id.md
CHANGED
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
*Terima permintaan → pahami → rencanakan → beri nilai → kerjakan paralel → periksa → uji → kirim.*
|
|
8
8
|
|
|
9
9
|

|
|
10
|
-

|
|
11
11
|

|
|
12
12
|

|
|
13
13
|

|
|
14
14
|

|
|
15
15
|
|
|
16
|
-
**Versi terbaru:
|
|
16
|
+
**Versi terbaru: v2.1.0** · diperbarui 02-10-2026 · [daftar perubahan lengkap](CHANGELOG.md)
|
|
17
17
|
|
|
18
18
|
**Ada di npm: [`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc)** — `npm i -g @azure-id/orc`
|
|
19
19
|
|
|
@@ -275,6 +275,7 @@ pemakaian 5 jam, pemakaian mingguan, dan beberapa hal lain.
|
|
|
275
275
|
| **`/orc-mini`** | Satu agen Sonnet 5, satu pemeriksaan build + tes, lalu kirim. Melewati review penuh dan pengujian. Satu baris **pembacaan kompleksitas** berisi angka menawarkan lane penuh kalau perubahannya lebih luas dari satu area. Bisa pindah ke alur penuh di tengah jalan kalau diminta. | [lihat](templates/skills/orc-mini/examples/mini-run-mock.md) |
|
|
276
276
|
| **`/orc-fast`** | Lane tercepat. Butuh wiki yang masih segar **dan** pola kode yang sudah tersimpan; kalau ada, ia melewati tahap analis dan perencana sepenuhnya. Kalau salah satu syarat tidak ada, ia mundur ke `/orc-mini` — obrolan tidak pernah berhenti. | [lihat](mock-run/orc-fast.md) |
|
|
277
277
|
| **`/orc-quick`** | Minta apa saja: perbaikan kecil, pertanyaan, mencari bug, menaikkan versi dependensi, komentar PR. Lihat → tanya sekali → kerjakan. **Selalu bertanya agen mana yang mau dipakai**, dan tidak ada pengaturan yang bisa mengubah itu. Satu **defect direproduksi merah dulu sebelum diperbaiki**. | [lihat](mock-run/orc-quick.md) |
|
|
278
|
+
| **`/orc-fix`** | Memperbaiki satu hal setelah review: isu Sonar, CI merah, atau bug yang ditemukan orang. Di dalam run yang sedang dijeda, ia hanya **mencatat** perbaikannya (satu observasi dan satu baris `FIX` di jejak run itu), jadi review yang melewatkannya ikut terhitung. Kalau tidak ada run yang terbuka, ia memperbaiki seperti `/orc-quick` dan bertanya agen mana yang dipakai. | [lihat](mock-run/orc-fix.md) |
|
|
278
279
|
| **`/orc-diy`** | Lane racikan Anda sendiri, disusun di terminal dengan `orc diy` lalu dikompilasi. Kalau belum disetel atau sudah basi, ia menolak jalan dan menawarkan `/orc` biasa. | [lihat](mock-run/orc-diy.md) |
|
|
279
280
|
|
|
280
281
|
### Memikirkan apa yang mau dibuat
|
|
@@ -665,9 +666,19 @@ dipublikasikan mengubahnya jadi angka. Risiko yang dikutip memaksa nilai minimal
|
|
|
665
666
|
model terkunci** — jadi apa yang benar-benar berjalan bisa diperiksa, bukan
|
|
666
667
|
sekadar diminta lewat kalimat.
|
|
667
668
|
|
|
669
|
+
Tabel bawaan (sejak v2.1.0):
|
|
670
|
+
|
|
671
|
+
| Nilai | Agen | Model · effort |
|
|
672
|
+
|---|---|---|
|
|
673
|
+
| `[0,21)` | `orc-executor-sonnet-5-low` | Sonnet 5 · low |
|
|
674
|
+
| `[21,31)` | `orc-executor-sonnet-5-med` | Sonnet 5 · medium |
|
|
675
|
+
| `[31,41)` | `orc-executor-sonnet-5-high` | Sonnet 5 · high |
|
|
676
|
+
| `[41,90)` | `orc-executor-opus-5-low` | Opus 5.5 · low |
|
|
677
|
+
| `[90,100]` | `orc-executor-opus-5-med` | Opus 5.5 · medium |
|
|
678
|
+
|
|
668
679
|
> **Aturan yang paling sering membuat orang bingung:** model sebuah subagen tidak
|
|
669
|
-
> akan pernah lebih tinggi daripada model sesi utama Anda.
|
|
670
|
-
> Opus 5.
|
|
680
|
+
> akan pernah lebih tinggi daripada model sesi utama Anda. Setiap pita mulai nilai
|
|
681
|
+
> 41 butuh sesi utama Opus 5.5.
|
|
671
682
|
|
|
672
683
|
**Penjelasan lengkap — pita nilainya, `opus5_only`, dan penjaga tingkat yang
|
|
673
684
|
dipasang `orc init`: [guides/model-selection.md](guides/model-selection.md).**
|
|
@@ -699,13 +710,13 @@ yang sama.
|
|
|
699
710
|
|
|
700
711
|
```
|
|
701
712
|
templates/
|
|
702
|
-
├── skills/
|
|
713
|
+
├── skills/ 34 folder skill, 41 berkas SKILL.md (satu lane boleh membawa
|
|
703
714
|
│ sub-skill) — lane di atas, plus yang tidak punya perintah
|
|
704
715
|
│ sendiri: context-combiner, orc-advisor, orc-judge,
|
|
705
716
|
│ orc-analyze-mini, dan _shared/ (kesepakatan lintas lane)
|
|
706
|
-
├── commands/
|
|
717
|
+
├── commands/ 33 perintah garis miring
|
|
707
718
|
├── hooks/ penjaga effort (PreToolUse) · peringatan statusline · catatan jejak
|
|
708
|
-
└── agents/
|
|
719
|
+
└── agents/ 50 subagen dengan model terkunci + MODEL-MAPPING.md
|
|
709
720
|
bin/cli.js pemasang, penyunting pengaturan, penyusun alur, pembaca status
|
|
710
721
|
pekerjaan, dan separuh pasti dari setiap lane. Setiap pembacaan
|
|
711
722
|
bisa menjawab --json
|
|
@@ -786,43 +797,46 @@ Bacalah sebagai catatan putaran itu, bukan sebagai audit terkini:
|
|
|
786
797
|
**Riwayat lengkap: [CHANGELOG.md](CHANGELOG.md)** — atau `orc changelog`, yang
|
|
787
798
|
hanya mencetak yang lebih baru dari versi yang Anda punya.
|
|
788
799
|
|
|
789
|
-
###
|
|
790
|
-
|
|
791
|
-
**
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
- **
|
|
795
|
-
|
|
796
|
-
ada di
|
|
797
|
-
- **
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
- **
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
**
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
yang baru. NAMA agent tidak berubah, jadi `rubric_bands_override`,
|
|
820
|
-
`fixed_executor` dan `opus5_only` tetap berjalan. Config yang masih menyebut
|
|
821
|
-
`claude-opus-5` tetap valid.
|
|
800
|
+
### v2.1.0 - review terhitung, tabel nilai naik, dan log lama bisa dihapus _(02-10-2026)_
|
|
801
|
+
|
|
802
|
+
- **Tabel nilai baru dengan lima pita.** Nilai 0–40 ke Sonnet 5 (low, medium,
|
|
803
|
+
high). Nilai 41–89 ke Opus 5.5 low, dan 90–100 ke Opus 5.5 medium. Haiku tidak
|
|
804
|
+
lagi ada di tabel. **Setiap pita mulai nilai 41 butuh sesi utama Opus 5.5.**
|
|
805
|
+
- **Sonnet 5 berjalan di `claude-sonnet-5-5`.** Tabel harga kembali benar.
|
|
806
|
+
- **Reviewer sekarang `orc-reviewer-opus-5-low`.** Di eval langsung, effort low
|
|
807
|
+
menemukan setiap cacat yang sengaja ditanam dan masih ada di diff.
|
|
808
|
+
- **Pemindai wiki dan penulis CLAUDE.md memakai Opus 5.5 low** (dulu Opus 4.8).
|
|
809
|
+
- **Review quality tidak lagi menulis "0 so far" setelah review sungguhan.** Ia
|
|
810
|
+
menghitung review dari jejak. Review yang bersih juga dihitung.
|
|
811
|
+
- **Aturan review milik proyek Anda.** Kalau CLAUDE.md atau AGENTS.md meminta
|
|
812
|
+
review lain (misalnya `/code-review`), lane bertanya "review ORC, review itu,
|
|
813
|
+
atau lewati". `orc review policy` menunjukkan apa yang ORC temukan.
|
|
814
|
+
- **Lane baru `/orc-fix`.** Ia mencatat perbaikan setelah review (Sonar, CI merah,
|
|
815
|
+
bug) dan siapa yang memasukkan bug itu. Kartu reviewer menampilkannya, dan panel
|
|
816
|
+
menampilkan "Fixes after review".
|
|
817
|
+
- **`orc clear logs`** menampilkan jejak dan folder run yang lama. `--apply`
|
|
818
|
+
menghapusnya. Tidak ada yang dihapus otomatis kecuali Anda menyetel
|
|
819
|
+
`log_retention_auto: on`.
|
|
820
|
+
- **Timer status line:** 1, 2, 3, 5 atau 10 detik. Di bawah 1 detik ditolak, karena
|
|
821
|
+
Claude Code tidak mendukungnya.
|
|
822
|
+
- **Perbaikan tab Behaviour:** dengan `habits: off` Anda tetap melihat Review quality
|
|
823
|
+
dan Gotchas, `/orc-fast` mencatat jawaban Anda, dan log jawaban menampilkan
|
|
824
|
+
pertanyaannya.
|
|
825
|
+
|
|
826
|
+
**Yang harus Anda lakukan:** `orc update`. Kalau Anda punya alur `orc diy` yang
|
|
827
|
+
sudah dikompilasi, jalankan `orc diy compile`. Kalau ada skrip yang menyebut
|
|
828
|
+
`orc-reviewer-opus-5-med`, ganti menjadi `orc-reviewer-opus-5-low`. Biayanya
|
|
829
|
+
berubah: baca CHANGELOG.
|
|
822
830
|
|
|
823
831
|
<details>
|
|
824
|
-
<summary><strong>Rilis sebelumnya</strong> —
|
|
825
|
-
|
|
832
|
+
<summary><strong>Rilis sebelumnya</strong> — 127 rilis, hanya judulnya. Teks lengkapnya (dalam bahasa Inggris) ada di <a href="CHANGELOG.md">CHANGELOG.md</a>.</summary>
|
|
833
|
+
|
|
834
|
+
- **v2.0.4** — design the status line to the last cell · _2026-09-30_
|
|
835
|
+
- **v2.0.3** — the status line you designed is the status line you see · _2026-09-30_
|
|
836
|
+
- **v2.0.2** — the lanes record what you answered, and the reviewer always gets the card · _2026-09-28_
|
|
837
|
+
- **v2.0.1** — the trace keeps the gate name, and the lanes find the habits rule · _2026-09-27_
|
|
838
|
+
- **v2.0.0** — the coding lanes remember what you fixed and how you work · _2026-09-27_
|
|
839
|
+
- **v1.9.2** — the code graph gets its own tab, and Opus 5 becomes Opus 5.5 · _2026-09-23_
|
|
826
840
|
- **v1.9.1** — the graph that was paid for and never asked · _2026-09-23_
|
|
827
841
|
- **v1.9.0** — the lean lanes learn to look before they leap · _2026-09-21_
|
|
828
842
|
- **v1.8.2** — the map that finds what a grep cannot · _2026-09-21_
|
package/README.md
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
*Intake → analyze → plan → score → parallel subagents → review → verify → ship.*
|
|
8
8
|
|
|
9
9
|

|
|
10
|
-

|
|
11
11
|

|
|
12
12
|

|
|
13
13
|

|
|
14
14
|

|
|
15
15
|

|
|
16
16
|
|
|
17
|
-
**Latest:
|
|
17
|
+
**Latest: v2.1.0** · updated 02-10-2026 · [full changelog](CHANGELOG.md)
|
|
18
18
|
|
|
19
19
|
**On npm: [`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc)** — `npm i -g @azure-id/orc`
|
|
20
20
|
|
|
@@ -255,6 +255,7 @@ ORC have terminal hook to see: Context Window %, 5 Hour usage %, Weekly usage %
|
|
|
255
255
|
| **`/orc-fast`** | The fastest lane. Needs a fresh wiki **and** a cached code pattern; then it skips the analyst and planner entirely. A missing prerequisite falls back to `/orc-mini` — the chat never stops. | [see it](mock-run/orc-fast.md) |
|
|
256
256
|
| **`/orc-quick`** | Ask for anything: a fix, a question, a defect hunt, a dependency bump, PR comments. Look → ask once → do. **It always asks which agent to dispatch**, and no setting can change that. A defect is **reproduced red before it is fixed**. | [see it](mock-run/orc-quick.md) |
|
|
257
257
|
| **`/orc-wait`** | Wall-clock pause without losing the run. You see the window is nearly full, type `/orc-wait 30`, and ORC hands the run back to disk, waits in detached hops that **cost zero tokens**, and picks up where it stopped. Three modes decide how much finishes first: `safe` · `soft` (forces the checkpoint) · `hard` (fastest, can lose an in-flight return). `/orc-wait block <reason>` tells it not to stop you at all. | — |
|
|
258
|
+
| **`/orc-fix`** | Fix one thing after a review: a Sonar issue, a red CI, a bug someone found. Inside a paused run it only **records** the fix (one observation and one `FIX` line in that run's trace), so the review that missed it is counted. With no run open, it fixes like `/orc-quick` and asks which agent to use. | [see it](mock-run/orc-fix.md) |
|
|
258
259
|
| **`/orc-diy`** | Your own lane, composed in the terminal with `orc diy` and compiled. Unconfigured or stale → it refuses and offers plain `/orc`. | [see it](mock-run/orc-diy.md) |
|
|
259
260
|
|
|
260
261
|
### Work out what to build
|
|
@@ -505,7 +506,8 @@ orc ui --stop # shut this project's server down
|
|
|
505
506
|
| Settings | every config key, grouped, each with its own control | staged edits, applied together |
|
|
506
507
|
| Runs | run history as an accordion: a row opens in place into state-of-play, resume prompt, checkpoint, trace tail | — |
|
|
507
508
|
| **Knowledge** | **five tabs**: the wiki's tier AND its **contents** (every doc, what it covers, how often it is read), coverage against your tracked files, the code patterns with the conflicts the codifier flagged, repair memory with a **preview-then-apply** prune, and a read-only view of the linked repos | `wiki sync`, `gotcha prune` |
|
|
508
|
-
| Stats | lane and agent usage, downgrades, and a **Cost** tab whose stacked bar keeps cache-read visible | — |
|
|
509
|
+
| Stats | lane and agent usage, downgrades, questions per run, and a **Cost** tab whose stacked bar keeps cache-read visible | — |
|
|
510
|
+
| **Behaviour** | the learning switch (Off · Observe · Propose), your habits with their evidence, the rhythm of your runs, the gotchas and the exact card the reviewer sees, review quality per category, and the answer log | `config set habits`, `habit accept` / `decline` / `forget`, `gotcha accept` |
|
|
509
511
|
| Flow | the compiled DIY flow, its gate, and a stepper of every phase in order | `diy set`, `diy compile`, presets |
|
|
510
512
|
| Crosslink | **Design** (the boundary as a graph) and **Settings** (each peer's freshness) | `crosslink add` / `remove` |
|
|
511
513
|
| Promises · Boundary · Self-serve | the pact ledger, the boundary cards, and the surfaces a non-developer can change | `pact check`, `pact sync`, `handoff set` |
|
|
@@ -616,8 +618,18 @@ fixed published formula turns them into a number. A cited risk forces a floor of
|
|
|
616
618
|
70. The score maps through a published table to a **named, model-pinned agent**,
|
|
617
619
|
so what ran is inspectable rather than requested in prose.
|
|
618
620
|
|
|
621
|
+
The default table (since v2.1.0):
|
|
622
|
+
|
|
623
|
+
| Score | Agent | Model · effort |
|
|
624
|
+
|---|---|---|
|
|
625
|
+
| `[0,21)` | `orc-executor-sonnet-5-low` | Sonnet 5 · low |
|
|
626
|
+
| `[21,31)` | `orc-executor-sonnet-5-med` | Sonnet 5 · medium |
|
|
627
|
+
| `[31,41)` | `orc-executor-sonnet-5-high` | Sonnet 5 · high |
|
|
628
|
+
| `[41,90)` | `orc-executor-opus-5-low` | Opus 5.5 · low |
|
|
629
|
+
| `[90,100]` | `orc-executor-opus-5-med` | Opus 5.5 · medium |
|
|
630
|
+
|
|
619
631
|
> **The rule that catches everyone:** a subagent's model can never be higher than
|
|
620
|
-
> your main session's.
|
|
632
|
+
> your main session's. Every band from score 41 needs an Opus 5.5 main session.
|
|
621
633
|
|
|
622
634
|
**Full detail — the bands, `opus5_only`, and the tier guard `orc init` installs:
|
|
623
635
|
[guides/model-selection.md](guides/model-selection.md).**
|
|
@@ -648,13 +660,13 @@ clobbers. `orc ui` ▸ Settings edits the same keys through the same validators.
|
|
|
648
660
|
|
|
649
661
|
```
|
|
650
662
|
templates/
|
|
651
|
-
├── skills/
|
|
663
|
+
├── skills/ 34 skill folders, 41 SKILL.md files (a lane may ship subskills) —
|
|
652
664
|
│ the lanes above, plus the ones with no command of their own:
|
|
653
665
|
│ context-combiner, orc-advisor, orc-judge, orc-analyze-mini,
|
|
654
666
|
│ and _shared/ (cross-lane contract prose)
|
|
655
|
-
├── commands/
|
|
667
|
+
├── commands/ 33 slash commands
|
|
656
668
|
├── hooks/ effort guard (PreToolUse) · statusline warning · behavior trace
|
|
657
|
-
└── agents/
|
|
669
|
+
└── agents/ 50 model-pinned subagents + MODEL-MAPPING.md
|
|
658
670
|
bin/cli.js installer, config editor, flow composer, run-state reader, and
|
|
659
671
|
the deterministic half of every lane. Every read speaks --json
|
|
660
672
|
bin/graph*.js the code graph: store, extraction, resolution + its cache and
|
|
@@ -663,7 +675,7 @@ bin/webui/ `orc ui` — the local control panel: css/ + js/ + i18n/<lang>
|
|
|
663
675
|
fixtures/, one file per layer and per panel. Zero deps, no build step
|
|
664
676
|
bin/mockrun-catalog.js the mocked-run catalogue (derived from the files on disk)
|
|
665
677
|
mock-run/ the mocked runs themselves — start at INDEX.md
|
|
666
|
-
guides/ configuration · model selection · documents · knowledge reads · other AI models
|
|
678
|
+
guides/ configuration · model selection · documents · knowledge reads · other AI models · habits and gotchas
|
|
667
679
|
```
|
|
668
680
|
|
|
669
681
|
The `orc` skill is a thin **spine**: it loads a reference or a subskill only when
|
|
@@ -685,6 +697,7 @@ Some lanes ship a full how-to next to the skill, in plain language:
|
|
|
685
697
|
| [ORC-PR-DRIVER](templates/skills/orc-pr-driver/README.md) | you have a stack plan and want to build, submit and merge it |
|
|
686
698
|
| [Rules](guides/rules.md) | you want the 65 anti-slop rules, the precedence ladder and the lint |
|
|
687
699
|
| [Configuration](guides/configuration.md) · [Model selection](guides/model-selection.md) | you want every key, or the scoring bands |
|
|
700
|
+
| [Habits and gotchas](guides/habits-and-gotchas.md) | you want to know how a habit is proposed, how to import Sonar, SARIF or PR history, and how to undo |
|
|
688
701
|
| [Other AI models](guides/extra-models.md) | you want part of the ladder to run somewhere other than Claude |
|
|
689
702
|
|
|
690
703
|
Every skill also ships its own `SKILL.md` and `references/`. The guides above are
|
|
@@ -728,41 +741,45 @@ a current audit: [EVAL-REPORT.md](EVAL-REPORT.md).
|
|
|
728
741
|
**Full history: [CHANGELOG.md](CHANGELOG.md)** — or `orc changelog`, which prints
|
|
729
742
|
only what is newer than the version you have.
|
|
730
743
|
|
|
731
|
-
###
|
|
732
|
-
|
|
733
|
-
**
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
- **
|
|
739
|
-
|
|
740
|
-
- **
|
|
741
|
-
|
|
742
|
-
- **
|
|
743
|
-
|
|
744
|
-
- **
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
- **
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
**
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
`opus5_only` keep working. A config that still names `claude-opus-5` is still
|
|
761
|
-
valid.
|
|
744
|
+
### v2.1.0 — the review counts, the score table moves up, and old logs can go _(2026-10-02)_
|
|
745
|
+
|
|
746
|
+
- **A new score table with five bands.** Scores 0–40 go to Sonnet 5 (low,
|
|
747
|
+
medium, high). Scores 41–89 go to Opus 5.5 low, and 90–100 to Opus 5.5 medium.
|
|
748
|
+
Haiku is no longer in the table. **Every band from 41 needs an Opus 5.5 main
|
|
749
|
+
session.**
|
|
750
|
+
- **Sonnet 5 runs on `claude-sonnet-5-5`.** The price table is correct again.
|
|
751
|
+
- **The reviewer is `orc-reviewer-opus-5-low`.** In the live eval, low effort
|
|
752
|
+
found every seeded defect that was still in the diff.
|
|
753
|
+
- **The wiki scanner and the CLAUDE.md writer use Opus 5.5 low** (they used Opus
|
|
754
|
+
4.8).
|
|
755
|
+
- **Review quality no longer says "0 so far" after real reviews.** It counts
|
|
756
|
+
reviews from the traces. A clean review counts too.
|
|
757
|
+
- **Your project's own review rule.** When CLAUDE.md or AGENTS.md asks for a
|
|
758
|
+
different review (for example `/code-review`), the lanes ask "ORC review, that
|
|
759
|
+
review, or skip". `orc review policy` shows what ORC found.
|
|
760
|
+
- **New lane `/orc-fix`.** It records a fix after a review (Sonar, a red CI, a
|
|
761
|
+
bug) and who added the bug. The reviewer card shows it, and the panel shows
|
|
762
|
+
"Fixes after review".
|
|
763
|
+
- **`orc clear logs`** shows old traces and run folders. `--apply` deletes them.
|
|
764
|
+
Nothing is deleted automatically unless you set `log_retention_auto: on`.
|
|
765
|
+
- **The status line timer:** 1, 2, 3, 5 or 10 seconds. Below 1 second is refused,
|
|
766
|
+
because Claude Code does not support it.
|
|
767
|
+
- **Behaviour tab fixes:** with `habits: off` you still see Review quality and
|
|
768
|
+
Gotchas, `/orc-fast` records your answers, and the answer log shows the question.
|
|
769
|
+
|
|
770
|
+
**What you have to do:** `orc update`. If you compiled an `orc diy` flow, run
|
|
771
|
+
`orc diy compile`. If a script names `orc-reviewer-opus-5-med`, change it to
|
|
772
|
+
`orc-reviewer-opus-5-low`. The cost changes: read the CHANGELOG.
|
|
762
773
|
|
|
763
774
|
<details>
|
|
764
|
-
<summary><strong>Earlier releases</strong> —
|
|
765
|
-
|
|
775
|
+
<summary><strong>Earlier releases</strong> — 127 of them, titles only. Full text in <a href="CHANGELOG.md">CHANGELOG.md</a>.</summary>
|
|
776
|
+
|
|
777
|
+
- **v2.0.4** — design the status line to the last cell · _2026-09-30_
|
|
778
|
+
- **v2.0.3** — the status line you designed is the status line you see · _2026-09-30_
|
|
779
|
+
- **v2.0.2** — the lanes record what you answered, and the reviewer always gets the card · _2026-09-28_
|
|
780
|
+
- **v2.0.1** — the trace keeps the gate name, and the lanes find the habits rule · _2026-09-27_
|
|
781
|
+
- **v2.0.0** — the coding lanes remember what you fixed and how you work · _2026-09-27_
|
|
782
|
+
- **v1.9.2** — the code graph gets its own tab, and Opus 5 becomes Opus 5.5 · _2026-09-23_
|
|
766
783
|
- **v1.9.1** — the graph that was paid for and never asked · _2026-09-23_
|
|
767
784
|
- **v1.9.0** — the lean lanes learn to look before they leap · _2026-09-21_
|
|
768
785
|
- **v1.8.2** — the map that finds what a grep cannot · _2026-09-21_
|
package/bin/build-agents.js
CHANGED
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* frontmatter (
|
|
6
|
-
*
|
|
7
|
-
* agents-src/executor.template.md
|
|
8
|
-
*
|
|
4
|
+
* Agent generator. Two sets, one rule: a file that differs from its siblings
|
|
5
|
+
* ONLY in frontmatter and the "You are … (<model>, <effort>)" line is GENERATED.
|
|
6
|
+
*
|
|
7
|
+
* 1. The 10 executors — agents-src/executor.template.md × VARIANTS
|
|
8
|
+
* (name/model/effort + score band).
|
|
9
|
+
* 2. The 8 model-twin pairs (v2.0.0 T15) — agents-src/twins/<family>.template.md
|
|
10
|
+
* × TWINS (name/model/effort/description + the `who` line). One body per
|
|
11
|
+
* family: before T15 each pair was two hand-kept copies that nothing
|
|
12
|
+
* checked against each other.
|
|
13
|
+
*
|
|
14
|
+
* Edit the template (or the table), run `npm run build:agents`, and every copy
|
|
15
|
+
* is stamped out identically. A model change is still a RENAME: a new row, not
|
|
16
|
+
* an edited one.
|
|
9
17
|
*
|
|
10
18
|
* Modes:
|
|
11
|
-
* node bin/build-agents.js write templates/agents/
|
|
19
|
+
* node bin/build-agents.js write both sets into templates/agents/
|
|
12
20
|
* node bin/build-agents.js --check fail if any generated file drifted from
|
|
13
|
-
*
|
|
21
|
+
* its template (runs in `npm run verify`
|
|
14
22
|
* and prepack — a hand-edit to a generated
|
|
15
|
-
*
|
|
23
|
+
* agent file fails the build)
|
|
16
24
|
*/
|
|
17
25
|
const fs = require("fs");
|
|
18
26
|
const path = require("path");
|
|
@@ -26,8 +34,9 @@ const OUT_DIR = path.join(ROOT, "templates", "agents");
|
|
|
26
34
|
// together). `effort: null` = a model with NO effort ladder (haiku): the
|
|
27
35
|
// generator omits the `effort:` frontmatter line entirely.
|
|
28
36
|
//
|
|
29
|
-
// v1.0.0 W4 — the table
|
|
30
|
-
// TWO, not three.
|
|
37
|
+
// v1.0.0 W4 — the table was SIX bands, not eight, and the `opus5_only` ladder is
|
|
38
|
+
// TWO, not three. v2.1.0 made the table FIVE bands (Sonnet 5 low/med/high, then
|
|
39
|
+
// Opus 5.5 low/med). Seven of these agents are named by NO default row:
|
|
31
40
|
// names them, and they ship anyway (D14). They stay reachable through
|
|
32
41
|
// `rubric_bands_override`, `orc diy` `fixed_executor` and `extra_fallback_agent`,
|
|
33
42
|
// and deleting a generated file that no row happens to name today would be a
|
|
@@ -36,19 +45,76 @@ const OUT_DIR = path.join(ROOT, "templates", "agents");
|
|
|
36
45
|
// lies is worse than one that admits it is unreachable by default.
|
|
37
46
|
const VARIANTS = [
|
|
38
47
|
{ name: "orc-executor-opus-5-med", model: "claude-opus-5-5", effort: "medium", band: "highest-complexity [90,100]" },
|
|
39
|
-
{ name: "orc-executor-opus-5-low", model: "claude-opus-5-5", effort: "low", band: "upper-complexity [
|
|
40
|
-
{ name: "orc-executor-sonnet-5-high", model: "claude-sonnet-5", effort: "high", band: "mid-complexity [
|
|
41
|
-
{ name: "orc-executor-sonnet-
|
|
42
|
-
{ name: "orc-executor-sonnet-
|
|
43
|
-
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
{ name: "orc-executor-
|
|
47
|
-
{ name: "orc-executor-
|
|
48
|
-
{ name: "orc-executor-opus-
|
|
49
|
-
{ name: "orc-executor-opus-4-
|
|
48
|
+
{ name: "orc-executor-opus-5-low", model: "claude-opus-5-5", effort: "low", band: "upper-complexity [41,90)" },
|
|
49
|
+
{ name: "orc-executor-sonnet-5-high", model: "claude-sonnet-5-5", effort: "high", band: "mid-complexity [31,41)" },
|
|
50
|
+
{ name: "orc-executor-sonnet-5-med", model: "claude-sonnet-5-5", effort: "medium", band: "low-complexity [21,31)" },
|
|
51
|
+
{ name: "orc-executor-sonnet-5-low", model: "claude-sonnet-5-5", effort: "low", band: "lowest-complexity [0,21)" },
|
|
52
|
+
// NAMED BY NO BAND since v1.0.0 W4 / v2.1.0 (D14) — kept on disk, dispatched
|
|
53
|
+
// only when a user names one explicitly.
|
|
54
|
+
{ name: "orc-executor-sonnet-4-6-high", model: "claude-sonnet-4-6", effort: "high", band: "none (opt-in only, see MODEL-MAPPING.md)" },
|
|
55
|
+
{ name: "orc-executor-sonnet-4-6-med", model: "claude-sonnet-4-6", effort: "medium", band: "none (opt-in only, see MODEL-MAPPING.md)" },
|
|
56
|
+
{ name: "orc-executor-haiku-4-5", model: "claude-haiku-4-5", effort: null, band: "none (opt-in only, see MODEL-MAPPING.md)" },
|
|
57
|
+
{ name: "orc-executor-opus-5-high", model: "claude-opus-5-5", effort: "high", band: "none (opt-in only, see MODEL-MAPPING.md)" },
|
|
58
|
+
{ name: "orc-executor-opus-4-8-high", model: "claude-opus-4-8", effort: "high", band: "none (opt-in only, see MODEL-MAPPING.md)" },
|
|
59
|
+
{ name: "orc-executor-opus-4-7-high", model: "claude-opus-4-7", effort: "high", band: "none (opt-in only, see MODEL-MAPPING.md)" },
|
|
60
|
+
{ name: "orc-executor-opus-4-7-med", model: "claude-opus-4-7", effort: "medium", band: "none (opt-in only, see MODEL-MAPPING.md)" },
|
|
50
61
|
];
|
|
51
62
|
|
|
63
|
+
// v2.0.0 T15 — the model twins. Each family is one template under
|
|
64
|
+
// agents-src/twins/; a row fills five placeholders: {{NAME}}, {{MODEL}},
|
|
65
|
+
// {{EFFORT}}, {{DESC}} (the one-line frontmatter description) and {{WHO}} (the
|
|
66
|
+
// "(Sonnet 5, high)" part of the "You are …" line — absent for a family whose
|
|
67
|
+
// body never names its own model). The pair is a runtime choice (`opus5_only`,
|
|
68
|
+
// the recon gate, the wiki tier ladder), so both halves always ship.
|
|
69
|
+
const TWIN_DIR = path.join(ROOT, "agents-src", "twins");
|
|
70
|
+
const TWINS = [
|
|
71
|
+
{ family: "analyze-mini", variants: [
|
|
72
|
+
{ name: "orc-analyze-mini-sonnet-5-high", model: "claude-sonnet-5-5", effort: "high", who: "Sonnet 5, high",
|
|
73
|
+
desc: "ORC mini System Analyst — claude-sonnet-5-5, high effort. Dispatched by /orc-mini and /orc-analyze-mini at analysis: single pass, no deep mode, no scouts." },
|
|
74
|
+
{ name: "orc-analyze-mini-opus-5-med", model: "claude-opus-5-5", effort: "medium", who: "Opus 5.5, medium",
|
|
75
|
+
desc: "ORC mini System Analyst — claude-opus-5-5, medium effort. Dispatched by /orc-mini and /orc-analyze-mini, instead of orc-analyze-mini-sonnet-5-high when `opus5_only: true`." },
|
|
76
|
+
] },
|
|
77
|
+
{ family: "planner-mini", variants: [
|
|
78
|
+
{ name: "orc-planner-mini-sonnet-5-high", model: "claude-sonnet-5-5", effort: "high", who: "Sonnet 5, high",
|
|
79
|
+
desc: "ORC mini Requirement Planner — claude-sonnet-5-5, high effort. Dispatched by /orc-mini at planning." },
|
|
80
|
+
{ name: "orc-planner-mini-opus-5-med", model: "claude-opus-5-5", effort: "medium", who: "Opus 5.5, medium",
|
|
81
|
+
desc: "ORC mini Requirement Planner — claude-opus-5-5, medium effort. Dispatched by /orc-mini at planning, instead of orc-planner-mini-sonnet-5-high when `opus5_only: true`." },
|
|
82
|
+
] },
|
|
83
|
+
{ family: "pattern-codifier", variants: [
|
|
84
|
+
{ name: "orc-pattern-codifier-sonnet-5-high", model: "claude-sonnet-5-5", effort: "high",
|
|
85
|
+
desc: "ORC Pattern Codifier — claude-sonnet-5-5, high effort. Dispatched by orc-pattern (lazy /orc miss, eager orc-wiki, or manual /orc-pattern) for ONE language." },
|
|
86
|
+
{ name: "orc-pattern-codifier-opus-5-med", model: "claude-opus-5-5", effort: "medium",
|
|
87
|
+
desc: "ORC Pattern Codifier — claude-opus-5-5, medium effort. Dispatched by orc-pattern, instead of orc-pattern-codifier-sonnet-5-high when `opus5_only: true`." },
|
|
88
|
+
] },
|
|
89
|
+
{ family: "recon", variants: [
|
|
90
|
+
{ name: "orc-recon-sonnet-4-6-med", model: "claude-sonnet-4-6", effort: "medium", who: "Sonnet 4.6, medium",
|
|
91
|
+
desc: "ORC Recon — claude-sonnet-4-6, medium effort. Dispatched by /orc-quick at the dispatch gate, for a read-only question. It never edits." },
|
|
92
|
+
{ name: "orc-recon-opus-5-low", model: "claude-opus-5-5", effort: "low", who: "Opus 5.5, low",
|
|
93
|
+
desc: "ORC Recon — claude-opus-5-5, low effort. Dispatched by /orc-quick at the dispatch gate, for a WIDE or SUBTLE read-only question. It never edits." },
|
|
94
|
+
] },
|
|
95
|
+
{ family: "retro", variants: [
|
|
96
|
+
{ name: "orc-retro-sonnet-5-high", model: "claude-sonnet-5-5", effort: "high", who: "Sonnet 5, high",
|
|
97
|
+
desc: "ORC Retro miner — claude-sonnet-5-5, high effort. Dispatched by /orc-retro to mine the behavior traces. Read-only, report-only." },
|
|
98
|
+
{ name: "orc-retro-opus-5-med", model: "claude-opus-5-5", effort: "medium", who: "Opus 5.5, medium",
|
|
99
|
+
desc: "ORC Retro miner — claude-opus-5-5, medium effort. Dispatched by /orc-retro, instead of orc-retro-sonnet-5-high when `opus5_only: true`. Read-only." },
|
|
100
|
+
] },
|
|
101
|
+
{ family: "scout", variants: [
|
|
102
|
+
{ name: "orc-scout-sonnet-4-6-high", model: "claude-sonnet-4-6", effort: "high", who: "Sonnet 4.6, high",
|
|
103
|
+
desc: "ORC Code Scout — claude-sonnet-4-6, high effort. Dispatched by orc in the analyst's DEEP mode (≤max_scouts in parallel), ONE coverage area each." },
|
|
104
|
+
{ name: "orc-scout-opus-5-low", model: "claude-opus-5-5", effort: "low", who: "Opus 5.5, low",
|
|
105
|
+
desc: "ORC Code Scout — claude-opus-5-5, low effort. Dispatched by orc in the analyst's DEEP mode, instead of orc-scout-sonnet-4-6-high when `opus5_only: true`." },
|
|
106
|
+
] },
|
|
107
|
+
{ family: "claude-writer", variants: [
|
|
108
|
+
{ name: "orc-claude-writer-opus-5-low", model: "claude-opus-5-5", effort: "low", who: "Opus 5.5, low",
|
|
109
|
+
desc: "ORC CLAUDE.md Writer — claude-opus-5-5, low effort. Dispatched by /orc-claude to create, update or refresh the repo-root CLAUDE.md." },
|
|
110
|
+
] },
|
|
111
|
+
{ family: "wiki-scanner", variants: [
|
|
112
|
+
{ name: "orc-wiki-scanner-opus-5-low", model: "claude-opus-5-5", effort: "low",
|
|
113
|
+
desc: "ORC Wiki Scanner — claude-opus-5-5, low effort. Dispatched by orc-wiki per scan-task (DEEP tier), ONE coverage area each." },
|
|
114
|
+
] },
|
|
115
|
+
];
|
|
116
|
+
|
|
117
|
+
|
|
52
118
|
// Line endings are NOT content here: .gitattributes stores these files with LF
|
|
53
119
|
// and checks them out native, so a Windows worktree is CRLF and a Linux one LF.
|
|
54
120
|
// The injected frontmatter line therefore borrows the TEMPLATE's own ending, and
|
|
@@ -68,17 +134,44 @@ function render(template, v) {
|
|
|
68
134
|
.replace(/\{\{BAND\}\}/g, v.band);
|
|
69
135
|
}
|
|
70
136
|
|
|
71
|
-
function
|
|
72
|
-
|
|
137
|
+
function renderTwin(template, v) {
|
|
138
|
+
return template
|
|
139
|
+
.replace(/\{\{NAME\}\}/g, v.name)
|
|
140
|
+
.replace(/\{\{MODEL\}\}/g, v.model)
|
|
141
|
+
.replace(/\{\{EFFORT\}\}/g, v.effort)
|
|
142
|
+
.replace(/\{\{DESC\}\}/g, v.desc)
|
|
143
|
+
.replace(/\{\{WHO\}\}/g, v.who || "");
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Every [template, row, renderer] the generator owns, executors first.
|
|
147
|
+
function jobs() {
|
|
73
148
|
const template = fs.readFileSync(TEMPLATE, "utf8");
|
|
74
149
|
if (/\{\{(?!NAME|MODEL|EFFORT_DESC|EFFORT_FM|BAND)\w/.test(template)) {
|
|
75
150
|
console.error("❌ build-agents: unknown {{placeholder}} in executor.template.md");
|
|
76
151
|
process.exit(1);
|
|
77
152
|
}
|
|
153
|
+
const out = VARIANTS.map((v) => ({ v, out: render(template, v), src: "agents-src/executor.template.md" }));
|
|
154
|
+
for (const fam of TWINS) {
|
|
155
|
+
const src = "agents-src/twins/" + fam.family + ".template.md";
|
|
156
|
+
const t = fs.readFileSync(path.join(TWIN_DIR, fam.family + ".template.md"), "utf8");
|
|
157
|
+
if (/\{\{(?!(?:NAME|MODEL|EFFORT|DESC|WHO)\}\})\w/.test(t)) {
|
|
158
|
+
console.error("❌ build-agents: unknown {{placeholder}} in " + src);
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
if (/\{\{WHO\}\}/.test(t) !==fam.variants.every((v) => v.who)) {
|
|
162
|
+
console.error("❌ build-agents: " + src + " and its TWINS rows disagree about {{WHO}}");
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
for (const v of fam.variants) out.push({ v, out: renderTwin(t, v), src });
|
|
166
|
+
}
|
|
167
|
+
return out;
|
|
168
|
+
}
|
|
78
169
|
|
|
170
|
+
function main() {
|
|
171
|
+
const checkMode = process.argv.includes("--check");
|
|
172
|
+
const all = jobs();
|
|
79
173
|
let drifted = 0;
|
|
80
|
-
for (const v of
|
|
81
|
-
const out = render(template, v);
|
|
174
|
+
for (const { v, out, src } of all) {
|
|
82
175
|
const dest = path.join(OUT_DIR, v.name + ".md");
|
|
83
176
|
if (checkMode) {
|
|
84
177
|
const current = fs.existsSync(dest) ? fs.readFileSync(dest, "utf8") : null;
|
|
@@ -86,8 +179,8 @@ function main() {
|
|
|
86
179
|
drifted++;
|
|
87
180
|
console.error(
|
|
88
181
|
`❌ generated agent drifted: templates/agents/${v.name}.md\n` +
|
|
89
|
-
`
|
|
90
|
-
` (or bin/build-agents.js
|
|
182
|
+
` This agent is GENERATED — edit ${src}\n` +
|
|
183
|
+
` (or the VARIANTS / TWINS table in bin/build-agents.js) and run: npm run build:agents`
|
|
91
184
|
);
|
|
92
185
|
}
|
|
93
186
|
} else {
|
|
@@ -98,12 +191,15 @@ function main() {
|
|
|
98
191
|
|
|
99
192
|
if (checkMode) {
|
|
100
193
|
if (drifted) process.exit(1);
|
|
101
|
-
|
|
194
|
+
const twins = all.length - VARIANTS.length;
|
|
195
|
+
console.log(
|
|
196
|
+
`✅ ORC executor agents OK — ${VARIANTS.length} files match the template; ${twins} model twins match agents-src/twins/.`
|
|
197
|
+
);
|
|
102
198
|
}
|
|
103
199
|
}
|
|
104
200
|
|
|
105
201
|
// Required by test/payload.test.js, which checks the line-ending rule above
|
|
106
202
|
// without writing to templates/agents/.
|
|
107
|
-
module.exports = { VARIANTS, render, lf, eolOf };
|
|
203
|
+
module.exports = { VARIANTS, TWINS, render, renderTwin, lf, eolOf };
|
|
108
204
|
|
|
109
205
|
if (require.main === module) main();
|