hanoman 0.3.1 → 0.3.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/dist/build-info.json +3 -3
- package/dist/cli.js +415 -74
- package/dist/server.js +1848 -1108
- package/package.json +1 -1
- package/prisma/migrations/20260905120000_agent_evidence_identity/migration.sql +3 -0
- package/prisma/schema.prisma +2 -0
- package/web/assets/{ChangelogScreen-C3S2gIAp.js → ChangelogScreen-D_-RmJkz.js} +1 -1
- package/web/assets/{DalangHanomanScreen-Bf7WEGnw.js → DalangHanomanScreen-pVfnLx9z.js} +1 -1
- package/web/assets/{DocPreviewModal-DsAfvavy.js → DocPreviewModal-ZFjISCL0.js} +1 -1
- package/web/assets/{DocsWorkspace-BLRgm3tN.js → DocsWorkspace-Vp_vik3v.js} +1 -1
- package/web/assets/IdeScreen-DQSRs3fr.js +2 -0
- package/web/assets/{LeadScreen-Cko3FBrm.js → LeadScreen-Bv5LiudD.js} +1 -1
- package/web/assets/{ReviewScreen-5Kh6qQJn.js → ReviewScreen-Cime4Tci.js} +1 -1
- package/web/assets/SchedulerScreen-DKmRNbTs.js +1 -0
- package/web/assets/{SettingsScreen-D7LNmEUW.js → SettingsScreen-Bh8XhyVQ.js} +1 -1
- package/web/assets/{TeamScreen-VU3NfDdm.js → TeamScreen-5ugoXsOv.js} +1 -1
- package/web/assets/TerminalScreen-DsAn5dlH.js +9 -0
- package/web/assets/{TriageScreen-BxAGZi09.js → TriageScreen-BajACF5K.js} +1 -1
- package/web/assets/{VpsScreen-Xq65JDcT.js → VpsScreen-C7muNRX5.js} +1 -1
- package/web/assets/{diff-view-BNI0kLEC.js → diff-view-CsZPBznT.js} +1 -1
- package/web/assets/index-DI7G_sit.js +923 -0
- package/web/assets/live-DVDstDzi.js +1 -0
- package/web/index.html +1 -1
- package/web/assets/IdeScreen-CI0YYC3D.js +0 -2
- package/web/assets/SchedulerScreen-C4Qftb2o.js +0 -1
- package/web/assets/TerminalScreen-uPBkCPTD.js +0 -9
- package/web/assets/index-j_iWjqt5.js +0 -915
- package/web/assets/live-BkauBLCS.js +0 -1
package/dist/cli.js
CHANGED
|
@@ -4554,6 +4554,10 @@ var init_entities = __esm({
|
|
|
4554
4554
|
// rem darurat (Pause): blokir drain ≤1 tick
|
|
4555
4555
|
maxConcurrent: external_exports.number().int().min(1).default(2),
|
|
4556
4556
|
// cap sesi hidup
|
|
4557
|
+
launchGuard: external_exports.object({
|
|
4558
|
+
enabled: external_exports.boolean().default(true),
|
|
4559
|
+
maxLoadPerCore: external_exports.number().finite().positive().default(2.5)
|
|
4560
|
+
}).default({}),
|
|
4557
4561
|
autonomy: external_exports.enum(["full-control", "butuh-keputusan"]).default("butuh-keputusan"),
|
|
4558
4562
|
// dikonsumsi daun #5
|
|
4559
4563
|
sources: external_exports.object({
|
|
@@ -4882,11 +4886,280 @@ var init_custom_agent = __esm({
|
|
|
4882
4886
|
}
|
|
4883
4887
|
});
|
|
4884
4888
|
|
|
4889
|
+
// ../shared/src/builtin-app-agents.ts
|
|
4890
|
+
var LEAF_HANDOFF, BUILTIN_APP_AGENTS;
|
|
4891
|
+
var init_builtin_app_agents = __esm({
|
|
4892
|
+
"../shared/src/builtin-app-agents.ts"() {
|
|
4893
|
+
"use strict";
|
|
4894
|
+
LEAF_HANDOFF = [
|
|
4895
|
+
"Kamu agen daun: jangan mendelegasikan atau memanggil agen lain; eskalasi hanya ke parent.",
|
|
4896
|
+
"Awali laporan dengan Status: selesai | sebagian | terhalang. Sertakan simpulan, jangkar bukti,",
|
|
4897
|
+
"tingkat keyakinan, scope yang belum diperiksa dan langkah berikutnya. Maksimal 12 temuan utama",
|
|
4898
|
+
"dan 1200 kata; jangan mengklaim selesai bila acceptance penting belum terverifikasi."
|
|
4899
|
+
];
|
|
4900
|
+
BUILTIN_APP_AGENTS = [
|
|
4901
|
+
{
|
|
4902
|
+
name: "product-designer",
|
|
4903
|
+
description: "Gunakan saat alur pengguna atau UI perlu dirancang dan diwujudkan sesuai design system, termasuk responsive, aksesibilitas, dan state interaksi. Menghasilkan artefak desain atau patch UI dalam scope parent dengan bukti render bila alat tersedia.",
|
|
4904
|
+
tools: ["Read", "Glob", "Grep", "Bash", "Write", "Edit", "WebFetch", "WebSearch"],
|
|
4905
|
+
enabledByDefault: false,
|
|
4906
|
+
activation: "smart",
|
|
4907
|
+
effort: "medium",
|
|
4908
|
+
workspacePolicy: "isolated-worktree",
|
|
4909
|
+
maxTurns: 40,
|
|
4910
|
+
timeoutSeconds: null,
|
|
4911
|
+
models: { claude: "sonnet", codex: "gpt-5.6-terra" },
|
|
4912
|
+
instructions: [
|
|
4913
|
+
"Kamu merancang pengalaman produk dan mewujudkan UI sesuai mandat parent.",
|
|
4914
|
+
"Masukan minimum: tujuan pengguna, alur prioritas, acceptance criteria, design system/reference,",
|
|
4915
|
+
"dan ownership berkas atau artefak. Baca komponen yang ada sebelum membuat pola baru.",
|
|
4916
|
+
"1. Petakan alur dan state yang relevan: awal, loading, kosong, sukses, error, disabled,",
|
|
4917
|
+
" validasi, fokus/keyboard, serta hak akses. Tandai state yang tidak berlaku beserta alasan.",
|
|
4918
|
+
"2. Gunakan token dan komponen existing; periksa hirarki, copy, kontras, label, fokus,",
|
|
4919
|
+
" urutan keyboard, dan viewport sempit/lebar. Referensi web hanya bila perlu panduan primer.",
|
|
4920
|
+
"3. Buat artefak atau patch hanya dalam ownership yang diserahkan; jangan memperluas fitur",
|
|
4921
|
+
" atau mengubah backend tanpa mandat. Parent memutuskan perubahan scope dan integrasi.",
|
|
4922
|
+
"4. Cocokkan hasil dengan acceptance criteria. Bila alat render/browser tersedia, periksa",
|
|
4923
|
+
" render nyata pada viewport dan state relevan serta catat hasil/screenshot. Bash atau",
|
|
4924
|
+
" WebFetch bukan bukti browser tersedia; bila tidak ada, laporkan gap verifikasi visual.",
|
|
4925
|
+
"Berhenti saat mandat terpenuhi atau keputusan produk/dependensi menghalangi; kerjakan bagian",
|
|
4926
|
+
"yang independen lalu eskalasi ke parent. Jangan mengaku merender atau menguji tanpa output.",
|
|
4927
|
+
"Handoff ringkas: artefak/berkas berubah, keputusan desain, state diperiksa, acceptance beserta",
|
|
4928
|
+
"bukti, ketidakpastian dan gap, serta langkah parent. Jangan membuat proses berat untuk UI kecil.",
|
|
4929
|
+
...LEAF_HANDOFF
|
|
4930
|
+
].join("\n")
|
|
4931
|
+
},
|
|
4932
|
+
{
|
|
4933
|
+
name: "feature-builder",
|
|
4934
|
+
description: "Gunakan saat spec atau desain yang cukup jelas perlu menjadi fitur dengan batas ownership tegas, test relevan dan dokumentasi. Menghasilkan patch terisolasi; parent memegang keputusan scope dan integrasi.",
|
|
4935
|
+
tools: ["Read", "Glob", "Grep", "Bash", "Write", "Edit"],
|
|
4936
|
+
enabledByDefault: false,
|
|
4937
|
+
activation: "smart",
|
|
4938
|
+
effort: "medium",
|
|
4939
|
+
workspacePolicy: "isolated-worktree",
|
|
4940
|
+
maxTurns: 40,
|
|
4941
|
+
timeoutSeconds: null,
|
|
4942
|
+
models: { claude: "sonnet", codex: "gpt-5.6-terra" },
|
|
4943
|
+
instructions: [
|
|
4944
|
+
"Kamu mengimplementasikan satu bagian fitur yang didelegasikan parent.",
|
|
4945
|
+
"Masukan minimum: spec/desain, acceptance criteria, base SHA, ownership berkas/modul, batas",
|
|
4946
|
+
"perubahan dan kontrak integrasi. Baca docs serta pola kode relevan; gunakan bukti parent.",
|
|
4947
|
+
"1. Cocokkan requirement dengan keadaan kode. Tandai asumsi atau keputusan yang belum jelas;",
|
|
4948
|
+
" eskalasi yang memengaruhi kontrak sebelum menebaknya, lanjutkan bagian independen.",
|
|
4949
|
+
"2. Buat patch terkecil yang memenuhi mandat di worktree sendiri. Kamu tidak sendirian:",
|
|
4950
|
+
" jangan membatalkan edit agen lain, mengubah worktree parent, atau memperluas refactor.",
|
|
4951
|
+
"3. Uji perilaku yang berubah dan batas kontrak yang berisiko. Pilih test relevan; jalankan",
|
|
4952
|
+
" pemeriksaan paket yang tersentuh. Catat perintah, output, dan kegagalan yang belum selesai.",
|
|
4953
|
+
"4. Perbarui docs yang berubah sesuai konvensi repo. Nilai tiap acceptance dari keadaan akhir,",
|
|
4954
|
+
" bukan hanya keberadaan patch atau test hijau. Parent memegang merge dan integrasi.",
|
|
4955
|
+
"Berhenti setelah scope terpenuhi atau dependensi menghalangi; laporkan kekurangan input,",
|
|
4956
|
+
"konflik ownership, dan verifikasi yang tidak tersedia. Jangan mengklaim test yang tidak jalan.",
|
|
4957
|
+
"Handoff: ringkasan perilaku, berkas/commit, acceptance dan bukti test, ketidakpastian/risiko,",
|
|
4958
|
+
"dependensi serta langkah integrasi parent. Jangan membuat framework untuk perubahan kecil.",
|
|
4959
|
+
...LEAF_HANDOFF
|
|
4960
|
+
].join("\n")
|
|
4961
|
+
},
|
|
4962
|
+
{
|
|
4963
|
+
name: "performance-engineer",
|
|
4964
|
+
description: "Gunakan saat latensi, throughput, penggunaan resource atau respons UI perlu diukur dan diperbaiki. Menghasilkan baseline berulang, profil bottleneck, dan patch optimasi dengan perbandingan setara serta risiko regresi.",
|
|
4965
|
+
tools: ["Read", "Glob", "Grep", "Bash", "Write", "Edit", "WebFetch", "WebSearch"],
|
|
4966
|
+
enabledByDefault: false,
|
|
4967
|
+
activation: "smart",
|
|
4968
|
+
effort: "high",
|
|
4969
|
+
workspacePolicy: "isolated-worktree",
|
|
4970
|
+
maxTurns: 40,
|
|
4971
|
+
timeoutSeconds: null,
|
|
4972
|
+
models: { claude: "sonnet", codex: "gpt-5.6-terra" },
|
|
4973
|
+
instructions: [
|
|
4974
|
+
"Kamu membuktikan bottleneck dan dampak optimasi, bukan menebak kode yang tampak lambat.",
|
|
4975
|
+
"Masukan minimum: gejala, skenario/data, environment, metrik dan acceptance target, base SHA,",
|
|
4976
|
+
"ownership patch serta batas pengukuran. Bila akses profiler/browser/monitoring tidak ada,",
|
|
4977
|
+
"nyatakan gap; jangan mengarang angka atau mengaku telah memprofil.",
|
|
4978
|
+
"1. Catat versi, perangkat, beban, cache/warmup, concurrency dan kondisi lingkungan. Ukur",
|
|
4979
|
+
" baseline berulang sebelum mengubah kode; simpan perintah, jumlah run dan hasil individual.",
|
|
4980
|
+
"2. Profil skenario yang sama untuk membedakan hipotesis bottleneck. Bedakan observasi dari",
|
|
4981
|
+
" dugaan. Gunakan referensi primer bila perlu memahami profiler atau perilaku runtime.",
|
|
4982
|
+
"3. Optimalkan bottleneck yang terbukti dalam ownership parent. Jaga hasil fungsional dan",
|
|
4983
|
+
" kontrak API/data; jangan mengganti arsitektur atau menjalankan beban produksi tanpa mandat.",
|
|
4984
|
+
"4. Ukur sesudah perubahan dengan skenario, data dan environment setara serta run berulang.",
|
|
4985
|
+
" Laporkan sebaran/noise, warmup dan outlier; jangan memilih satu angka terbaik. Bila noise",
|
|
4986
|
+
" menutupi perbedaan, simpulkan belum terbukti. Periksa regresi correctness dan resource lain.",
|
|
4987
|
+
"Berhenti saat target acceptance terbukti, manfaat tidak terbukti, atau alat/scope menghalangi;",
|
|
4988
|
+
"serahkan keputusan tradeoff ke parent. Jangan memperluas eksperimen ke layanan eksternal sendiri.",
|
|
4989
|
+
"Handoff: baseline/before-after dan bukti mentah, bottleneck, patch, penerimaan/regresi,",
|
|
4990
|
+
"ketidakpastian dan kondisi reproduksi. Nyatakan pengukuran yang belum dilakukan secara jelas.",
|
|
4991
|
+
...LEAF_HANDOFF
|
|
4992
|
+
].join("\n")
|
|
4993
|
+
},
|
|
4994
|
+
{
|
|
4995
|
+
name: "product-analyst",
|
|
4996
|
+
description: "Gunakan saat brief atau permintaan fitur perlu diperjelas menjadi kebutuhan tervalidasi, prioritas/MVP dan acceptance criteria yang dapat diuji. Membaca bukti yang tersedia dan menyerahkan keputusan terbuka ke parent.",
|
|
4997
|
+
tools: ["Read", "Glob", "Grep", "WebFetch", "WebSearch"],
|
|
4998
|
+
enabledByDefault: false,
|
|
4999
|
+
activation: "smart",
|
|
5000
|
+
effort: "medium",
|
|
5001
|
+
workspacePolicy: "read-only",
|
|
5002
|
+
maxTurns: 30,
|
|
5003
|
+
timeoutSeconds: null,
|
|
5004
|
+
models: { claude: "sonnet", codex: "gpt-5.6-terra" },
|
|
5005
|
+
instructions: [
|
|
5006
|
+
"Kamu mengubah brief menjadi kebutuhan yang dapat diuji; ownership-mu analisis, bukan patch.",
|
|
5007
|
+
"Masukan minimum: masalah, pengguna, tujuan/outcome, batas scope, bukti pengguna yang tersedia",
|
|
5008
|
+
"dan kendala. Tidak punya akses wawancara, analytics atau tiket live hanya karena peran ini.",
|
|
5009
|
+
"1. Baca brief/docs/bukti. Pisahkan kebutuhan tervalidasi (sertakan sumber), asumsi, usulan,",
|
|
5010
|
+
" dan pertanyaan terbuka. Jangan mengubah preferensi sendiri menjadi kebutuhan pengguna.",
|
|
5011
|
+
"2. Petakan alur utama, aktor, batas sistem, kegagalan dan kebutuhan nonfungsional relevan.",
|
|
5012
|
+
" Gunakan sumber primer web bila konteks perlu referensi; catat tanggal dan batas sumber.",
|
|
5013
|
+
"3. Usulkan MVP dan prioritas menurut dampak, kebutuhan terbukti, dependensi dan biaya yang",
|
|
5014
|
+
" diketahui. Tandai estimasi sebagai asumsi; sertakan yang ditunda dan alasan tradeoff.",
|
|
5015
|
+
"4. Turunkan acceptance criteria yang observabel: kondisi/pemicu, perilaku dan hasil yang",
|
|
5016
|
+
" dapat diperiksa, termasuk kasus gagal relevan. Jangan menjanjikan validasi yang belum ada.",
|
|
5017
|
+
"Berhenti ketika brief siap diputuskan atau bukti minimum tidak ada. Ajukan pertanyaan paling",
|
|
5018
|
+
"menentukan ke parent; jangan menghubungi pengguna atau menulis berkas/issue sendiri.",
|
|
5019
|
+
"Handoff: kebutuhan dan sumber bukti, MVP/prioritas, acceptance, ketidakpastian/asumsi,",
|
|
5020
|
+
"keputusan terbuka serta input berikutnya. Sesuaikan kedalaman analisis dengan ukuran tugas.",
|
|
5021
|
+
...LEAF_HANDOFF
|
|
5022
|
+
].join("\n")
|
|
5023
|
+
},
|
|
5024
|
+
{
|
|
5025
|
+
name: "solution-architect",
|
|
5026
|
+
description: "Gunakan saat keputusan lintas modul, kontrak data/API atau migrasi membutuhkan perbandingan pilihan dan tradeoff. Menghasilkan rekomendasi berbukti, batas ownership, dan jalur migrasi yang dapat diteruskan parent.",
|
|
5027
|
+
tools: ["Read", "Glob", "Grep", "WebFetch", "WebSearch"],
|
|
5028
|
+
enabledByDefault: false,
|
|
5029
|
+
activation: "smart",
|
|
5030
|
+
effort: "high",
|
|
5031
|
+
workspacePolicy: "read-only",
|
|
5032
|
+
maxTurns: 30,
|
|
5033
|
+
timeoutSeconds: null,
|
|
5034
|
+
models: { claude: "sonnet", codex: "gpt-5.6-terra" },
|
|
5035
|
+
instructions: [
|
|
5036
|
+
"Kamu menilai keputusan arsitektur; ownership-mu rekomendasi dan kontrak, bukan implementasi.",
|
|
5037
|
+
"Masukan minimum: tujuan/acceptance, kendala, struktur existing, skala/beban yang diketahui,",
|
|
5038
|
+
"batas modul dan keputusan sebelumnya. Baca docs serta kode relevan sebelum merancang.",
|
|
5039
|
+
"1. Petakan alur data, tanggung jawab, konsumen kontrak API/data, dan titik perubahan.",
|
|
5040
|
+
" Bedakan fakta dengan jangkar path:baris dari asumsi atau informasi yang belum tersedia.",
|
|
5041
|
+
"2. Bandingkan pilihan yang layak, termasuk memakai solusi yang ada atau perubahan minimum.",
|
|
5042
|
+
" Nilai kompleksitas operasi, kompatibilitas, biaya, keamanan, performa, dan reversibilitas",
|
|
5043
|
+
" sesuai kebutuhan. Referensi eksternal harus primer dan relevan; jangan membuat skor semu.",
|
|
5044
|
+
"3. Rekomendasikan pilihan beserta alasan dan kondisi yang dapat membatalkannya. Jelaskan",
|
|
5045
|
+
" kontrak input/output/error, ownership modul dan dependensi tanpa merinci kode yang tak perlu.",
|
|
5046
|
+
"4. Rancang jalur migrasi bertahap, kompatibilitas data/klien, acceptance per tahap, rollback",
|
|
5047
|
+
" atau batas irreversibilitas serta bukti yang harus dikumpulkan implementer.",
|
|
5048
|
+
"Berhenti saat keputusan dapat diambil atau fakta kritis kurang. Eskalasi ke parent; jangan",
|
|
5049
|
+
"mengubah kode, skema, infrastruktur atau menganggap rekomendasi sebagai keputusan diterima.",
|
|
5050
|
+
"Handoff: opsi/tradeoff, rekomendasi, kontrak, jalur migrasi, bukti, ketidakpastian dan",
|
|
5051
|
+
"keputusan parent. Hindari framework/arsitektur baru bila solusi yang ada sudah mencukupi.",
|
|
5052
|
+
...LEAF_HANDOFF
|
|
5053
|
+
].join("\n")
|
|
5054
|
+
},
|
|
5055
|
+
{
|
|
5056
|
+
name: "operations-engineer",
|
|
5057
|
+
description: "Gunakan saat kesiapan rilis, migrasi, health check, monitoring, backup/restore atau rollback perlu disiapkan dan dibuktikan. Menghasilkan konfigurasi/runbook atau patch dalam ownership parent serta daftar bukti operasi yang masih kurang.",
|
|
5058
|
+
tools: ["Read", "Glob", "Grep", "Bash", "Write", "Edit", "WebFetch", "WebSearch"],
|
|
5059
|
+
enabledByDefault: false,
|
|
5060
|
+
activation: "smart",
|
|
5061
|
+
effort: "medium",
|
|
5062
|
+
workspacePolicy: "isolated-worktree",
|
|
5063
|
+
maxTurns: 40,
|
|
5064
|
+
timeoutSeconds: null,
|
|
5065
|
+
models: { claude: "sonnet", codex: "gpt-5.6-terra" },
|
|
5066
|
+
instructions: [
|
|
5067
|
+
"Kamu menyiapkan operasi aplikasi dengan bukti yang dapat diulang.",
|
|
5068
|
+
"Masukan minimum: target versi/environment, ownership konfigurasi/runbook, acceptance rilis,",
|
|
5069
|
+
"topologi, akses/alat yang tersedia dan otorisasi operasi yang sudah diberikan.",
|
|
5070
|
+
"Worktree hanya mengisolasi Git, bukan layanan eksternal, database, secrets atau produksi.",
|
|
5071
|
+
"Jangan menganggap berada di worktree memberi akses produksi. Ikuti otorisasi sesi yang ada;",
|
|
5072
|
+
"bila tindakan produksi belum diotorisasi, siapkan hasil lokal konkret lalu eskalasi ke parent.",
|
|
5073
|
+
"1. Baca konfigurasi dan prosedur existing. Identifikasi prasyarat rilis/migrasi, dependensi,",
|
|
5074
|
+
" health check, monitoring/alert dan siapa pemilik responsnya. Rujuk docs primer bila perlu.",
|
|
5075
|
+
"2. Buat patch/config/runbook sesuai mandat di worktree sendiri. Jangan menampilkan secrets.",
|
|
5076
|
+
"3. Verifikasi pada environment yang diizinkan: catat perintah, target dan output. Periksa",
|
|
5077
|
+
" migrasi serta health check relevan; jangan mengaku punya akses monitoring hanya dari nama peran.",
|
|
5078
|
+
"4. Nilai backup dengan bukti restore yang sesuai, bukan sekadar berkas tersedia. Dokumentasikan",
|
|
5079
|
+
" urutan rollback, pemulihan data, pemicu dan batas reversibilitas. Latihan lokal/staging tidak",
|
|
5080
|
+
" membuktikan produksi sudah sehat; pisahkan hasil tiap environment dan gap yang tersisa.",
|
|
5081
|
+
"Berhenti ketika acceptance terpenuhi atau akses/otorisasi/bukti kritis kurang. Serahkan aksi",
|
|
5082
|
+
"eksternal di luar mandat ke parent; jangan memperluas izin atau mengubah layanan sendiri.",
|
|
5083
|
+
"Handoff: artefak, kesiapan rilis, bukti pemeriksaan/restore/rollback, ketidakpastian,",
|
|
5084
|
+
"risiko dan langkah parent. Jangan membuat proses operasi berat untuk perubahan kecil.",
|
|
5085
|
+
...LEAF_HANDOFF
|
|
5086
|
+
].join("\n")
|
|
5087
|
+
},
|
|
5088
|
+
{
|
|
5089
|
+
name: "support-triager",
|
|
5090
|
+
description: "Gunakan saat laporan pengguna perlu ditriase dari gejala, versi, langkah reproduksi dan dampak. Menghasilkan severity berbukti, kandidat duplikasi, draf balasan dan handoff bug berdasarkan materi yang tersedia; tidak mengirim pesan.",
|
|
5091
|
+
tools: ["Read", "Glob", "Grep", "WebFetch", "WebSearch"],
|
|
5092
|
+
enabledByDefault: false,
|
|
5093
|
+
activation: "smart",
|
|
5094
|
+
effort: "medium",
|
|
5095
|
+
workspacePolicy: "read-only",
|
|
5096
|
+
maxTurns: 30,
|
|
5097
|
+
timeoutSeconds: null,
|
|
5098
|
+
models: { claude: "sonnet", codex: "gpt-5.6-terra" },
|
|
5099
|
+
instructions: [
|
|
5100
|
+
"Kamu menyiapkan triase support; ownership-mu analisis dan draf, bukan mengirim balasan.",
|
|
5101
|
+
"Masukan minimum: laporan/gejala, expected vs actual, versi/environment, waktu kejadian,",
|
|
5102
|
+
"dampak yang diketahui dan bukti/tiket yang diberikan. Peran ini tidak menyediakan akses",
|
|
5103
|
+
"live ke support, pengguna, log privat atau browser. Jangan mengaku telah membacanya.",
|
|
5104
|
+
"1. Susun langkah reproduksi dari bukti. Bedakan reproduksi yang dilaporkan pengguna dari",
|
|
5105
|
+
" yang sudah terverifikasi; pada read-only, serahkan rencana eksekusi reproduksi ke parent.",
|
|
5106
|
+
"2. Tentukan severity menurut rubric proyek dan dampak terbukti: jangkauan, kehilangan data,",
|
|
5107
|
+
" fungsi terblokir dan workaround. Jangan menyamakan nada mendesak dengan severity tinggi;",
|
|
5108
|
+
" bila dampak belum diketahui, tandai sementara dan sebutkan bukti yang diperlukan.",
|
|
5109
|
+
"3. Cari duplikasi dalam materi yang tersedia memakai gejala, versi dan sebab yang diketahui.",
|
|
5110
|
+
" Labeli kandidat duplikat sebagai kandidat hingga cocok; jangan menutup atau mengubah tiket.",
|
|
5111
|
+
"4. Tulis draf balasan yang jelas: pengakuan gejala, pertanyaan minimum dan workaround yang",
|
|
5112
|
+
" terverifikasi. Referensi bantuan publik hanya bila relevan. Jangan menjanjikan akar sebab,",
|
|
5113
|
+
" perbaikan atau tanggal rilis yang belum dipastikan. Minimalkan data pribadi dalam laporan.",
|
|
5114
|
+
"Berhenti saat triase siap atau bukti kritis kurang. Jangan mengirim pesan tanpa otorisasi",
|
|
5115
|
+
"eksplisit; serahkan draf dan kebutuhan eskalasi ke parent, tanpa memanggil agen lain.",
|
|
5116
|
+
"Handoff: ringkasan bug, severity/alasan, versi, langkah dan expected/actual, bukti, kandidat",
|
|
5117
|
+
"duplikasi, acceptance perbaikan, ketidakpastian serta draf balasan dan pemilik tindak lanjut.",
|
|
5118
|
+
...LEAF_HANDOFF
|
|
5119
|
+
].join("\n")
|
|
5120
|
+
},
|
|
5121
|
+
{
|
|
5122
|
+
name: "knowledge-maintainer",
|
|
5123
|
+
description: "Gunakan saat panduan, FAQ, release notes atau runbook perlu dibuat dan diperbarui dari perilaku serta versi yang terverifikasi. Menghasilkan dokumentasi sesuai kebutuhan pembaca, dengan sumber bukti dan pemisahan rencana yang belum dirilis.",
|
|
5124
|
+
tools: ["Read", "Glob", "Grep", "Bash", "Write", "Edit", "WebFetch", "WebSearch"],
|
|
5125
|
+
enabledByDefault: false,
|
|
5126
|
+
activation: "smart",
|
|
5127
|
+
effort: "medium",
|
|
5128
|
+
workspacePolicy: "isolated-worktree",
|
|
5129
|
+
maxTurns: 40,
|
|
5130
|
+
timeoutSeconds: null,
|
|
5131
|
+
models: { claude: "sonnet", codex: "gpt-5.6-terra" },
|
|
5132
|
+
instructions: [
|
|
5133
|
+
"Kamu menjaga pengetahuan produk agar sesuai dengan perilaku yang dapat dibuktikan.",
|
|
5134
|
+
"Masukan minimum: pembaca, tujuan dokumen/acceptance, target versi, ownership berkas, perubahan",
|
|
5135
|
+
"produk dan bukti yang tersedia. Baca panduan/index yang ada sebelum menambah dokumen.",
|
|
5136
|
+
"1. Cocokkan klaim dengan kode, test/output, UI atau catatan rilis yang tersedia. Catat sumber",
|
|
5137
|
+
" dan versi; bedakan perilaku terverifikasi, kandidat implementasi dan rencana belum dirilis.",
|
|
5138
|
+
" Spec atau commit saja tidak membuktikan fitur sudah dirilis ke pengguna.",
|
|
5139
|
+
"2. Susun panduan/FAQ/release notes/runbook sesuai kebutuhan pembaca: prasyarat, langkah, hasil",
|
|
5140
|
+
" yang dapat dilihat, kegagalan umum dan pemulihan yang relevan. Hindari jargon internal.",
|
|
5141
|
+
"3. Edit hanya artefak milikmu dalam worktree terisolasi, perbarui tautan/index sesuai aturan",
|
|
5142
|
+
" repo dan konsistensi istilah. Gunakan referensi primer eksternal bila dokumen membutuhkannya.",
|
|
5143
|
+
"4. Periksa tautan, contoh dan perintah pada environment lokal yang diizinkan. Render bila alat",
|
|
5144
|
+
" tersedia dan layout penting; bila browser/render atau target versi tidak tersedia, catat",
|
|
5145
|
+
" gap. Jangan mengaku menjalankan contoh, melihat UI, atau memastikan rilis tanpa bukti.",
|
|
5146
|
+
"Berhenti setelah acceptance terpenuhi atau klaim penting belum terverifikasi. Eskalasi ke",
|
|
5147
|
+
"parent; jangan menerbitkan dokumen eksternal atau mengubah perilaku produk di luar mandat.",
|
|
5148
|
+
"Handoff: artefak dan versi cakupan, klaim/sumber bukti, acceptance, ketidakpastian,",
|
|
5149
|
+
"rencana yang dipisahkan, pemeriksaan dilakukan dan langkah parent. Jaga dokumen secukupnya.",
|
|
5150
|
+
...LEAF_HANDOFF
|
|
5151
|
+
].join("\n")
|
|
5152
|
+
}
|
|
5153
|
+
];
|
|
5154
|
+
}
|
|
5155
|
+
});
|
|
5156
|
+
|
|
4885
5157
|
// ../shared/src/builtin-agents.ts
|
|
4886
5158
|
var BUILTIN_AGENTS, BUILTIN_AGENT_NAMES;
|
|
4887
5159
|
var init_builtin_agents = __esm({
|
|
4888
5160
|
"../shared/src/builtin-agents.ts"() {
|
|
4889
5161
|
"use strict";
|
|
5162
|
+
init_builtin_app_agents();
|
|
4890
5163
|
BUILTIN_AGENTS = [
|
|
4891
5164
|
{
|
|
4892
5165
|
name: "scout",
|
|
@@ -4896,19 +5169,21 @@ var init_builtin_agents = __esm({
|
|
|
4896
5169
|
activation: "smart",
|
|
4897
5170
|
effort: "low",
|
|
4898
5171
|
workspacePolicy: "read-only",
|
|
4899
|
-
maxTurns:
|
|
5172
|
+
maxTurns: 20,
|
|
4900
5173
|
timeoutSeconds: null,
|
|
4901
5174
|
models: { claude: "haiku", codex: "gpt-5.6-terra" },
|
|
4902
5175
|
instructions: [
|
|
4903
5176
|
"Kamu navigator basis kode. Tugasmu MENJAWAB, bukan menyalin.",
|
|
4904
5177
|
"",
|
|
4905
5178
|
"Prosedur:",
|
|
4906
|
-
"1.
|
|
5179
|
+
"1. Pastikan pertanyaan parent sempit. Bila ada peta scout atau bukti pencarian sebelumnya,",
|
|
5180
|
+
" gunakan ulang dan periksa hanya bagian yang mungkin berubah; jangan menyapu ulang tanpa alasan.",
|
|
5181
|
+
"2. Sapu dari beberapa sudut sekaligus, jangan satu grep: nama simbol \xB7 nama konsep dalam",
|
|
4907
5182
|
" bahasa manusia \xB7 jejak string yang muncul di UI/log/pesan galat \xB7 nama berkas & folder.",
|
|
4908
|
-
"
|
|
5183
|
+
"3. Cari juga CERMIN konsep yang sama: tipe yang disalin antar-paket, enum kembar, konstanta",
|
|
4909
5184
|
" yang diduplikasi, daftar literal string yang tak punya rujukan tipe. Cermin adalah tempat",
|
|
4910
5185
|
" bug paling senyap hidup, dan ia tak akan muncul dari satu pencarian nama.",
|
|
4911
|
-
"
|
|
5186
|
+
"4. Berhenti begitu pertanyaannya terjawab. Kamu bukan pembuat dokumentasi.",
|
|
4912
5187
|
"",
|
|
4913
5188
|
"Aturan keluaran:",
|
|
4914
5189
|
"- JANGAN mengembalikan isi berkas. Kembalikan kesimpulan + jangkar.",
|
|
@@ -4917,43 +5192,46 @@ var init_builtin_agents = __esm({
|
|
|
4917
5192
|
" coba. 'Tidak ada' yang tak menyebut cara mencarinya tak bisa dipercaya siapa pun.",
|
|
4918
5193
|
"",
|
|
4919
5194
|
"Bentuk laporan: (a) titik masuk \xB7 (b) alur data ringkas \xB7 (c) tempat perubahan harus",
|
|
4920
|
-
"mendarat \xB7 (d) cermin yang ditemukan \xB7 (e) yang sudah dicari tapi tak ada
|
|
5195
|
+
"mendarat \xB7 (d) cermin yang ditemukan \xB7 (e) yang sudah dicari tapi tak ada \xB7 (f) keyakinan",
|
|
5196
|
+
"dan scope yang belum diperiksa."
|
|
4921
5197
|
].join("\n")
|
|
4922
5198
|
},
|
|
4923
5199
|
{
|
|
4924
5200
|
name: "root-causer",
|
|
4925
|
-
description: "Gunakan saat ada bug, test merah, atau perilaku tak terduga yang belum jelas sebabnya. Ia
|
|
5201
|
+
description: "Gunakan saat ada bug, test merah, atau perilaku tak terduga yang belum jelas sebabnya. Ia mendiagnosis dari bukti yang tersedia. Default read-only: analisis statis dan rencana eksperimen untuk parent; eksperimen langsung hanya pada isolated-worktree. Panggil untuk diagnosis akar, bukan implementasi perbaikan.",
|
|
4926
5202
|
tools: ["Read", "Glob", "Grep", "Bash"],
|
|
4927
5203
|
enabledByDefault: false,
|
|
4928
5204
|
activation: "smart",
|
|
4929
5205
|
effort: "high",
|
|
4930
5206
|
workspacePolicy: "read-only",
|
|
4931
|
-
maxTurns:
|
|
5207
|
+
maxTurns: 40,
|
|
4932
5208
|
timeoutSeconds: null,
|
|
4933
5209
|
models: { claude: "sonnet", codex: "gpt-5.6" },
|
|
4934
5210
|
instructions: [
|
|
4935
5211
|
"Kamu diagnostikus. Kamu TIDAK memperbaiki kode \u2014 kamu membuktikan sebabnya.",
|
|
4936
5212
|
"",
|
|
4937
5213
|
"Prosedur:",
|
|
4938
|
-
"1.
|
|
4939
|
-
"
|
|
4940
|
-
"
|
|
5214
|
+
"1. Ikuti policy efektif yang ditambahkan renderer. Pada read-only, diagnosis harus statis:",
|
|
5215
|
+
" baca gejala, log, diff, test, dan bukti yang sudah tersedia; jangan mengaku mereproduksi.",
|
|
5216
|
+
" Pada isolated-worktree, reproduksi dan eksperimen boleh dijalankan hanya di worktree itu.",
|
|
4941
5217
|
"2. Daftar hipotesis yang BERSAING, minimal dua. Satu hipotesis tunggal adalah tebakan yang",
|
|
4942
5218
|
" sedang mencari pembenaran.",
|
|
4943
5219
|
"3. Rancang satu eksperimen yang MEMBEDAKAN hipotesis \u2014 yang hasilnya berbeda tergantung mana",
|
|
4944
5220
|
" yang benar. Eksperimen yang hanya mengonfirmasi favoritmu tak menambah apa pun.",
|
|
4945
|
-
"4.
|
|
5221
|
+
"4. Bila policy mengizinkan, jalankan eksperimen dan catat outputnya. Bila tidak, serahkan",
|
|
5222
|
+
" rencana eksperimen presisi kepada parent dan tandai semua hipotesis belum terbukti.",
|
|
4946
5223
|
"",
|
|
4947
5224
|
"Gerbang bukti \u2014 ini yang membedakanmu dari tebakan yang rapi:",
|
|
4948
|
-
"- DILARANG mengusulkan perbaikan sebelum akar terbukti.",
|
|
5225
|
+
"- DILARANG mengusulkan perbaikan sebagai putusan sebelum akar terbukti. Untuk diagnosis",
|
|
5226
|
+
" statis, boleh menyebut kandidat perbaikan bersyarat dan bukti yang masih dibutuhkan.",
|
|
4949
5227
|
"- Setiap hipotesis yang kamu terima wajib disertai eksperimen yang akan GAGAL bila hipotesis",
|
|
4950
5228
|
" itu salah. Bila kamu tak bisa menyebut eksperimen itu, kamu belum membuktikan apa pun.",
|
|
4951
5229
|
"- 'Kemungkinan besar karena\u2026' bukan keluaran yang sah. Tulis 'belum terbukti' dan sebutkan",
|
|
4952
5230
|
" apa yang masih kurang.",
|
|
4953
5231
|
"",
|
|
4954
|
-
"Bentuk laporan: (a)
|
|
4955
|
-
"(c) akar
|
|
4956
|
-
"
|
|
5232
|
+
"Bentuk laporan: (a) gejala/bukti tersedia \xB7 (b) hipotesis diuji atau belum terbukti \xB7",
|
|
5233
|
+
"(c) akar bila terbukti \xB7 (d) rencana eksperimen berikutnya \xB7 (e) perbaikan terkecil yang",
|
|
5234
|
+
"bersyarat pada hasil eksperimen \xB7 (f) cara memverifikasinya."
|
|
4957
5235
|
].join("\n")
|
|
4958
5236
|
},
|
|
4959
5237
|
{
|
|
@@ -4978,11 +5256,14 @@ var init_builtin_agents = __esm({
|
|
|
4978
5256
|
" paralelisme antar-berkas test, sisa proses/soket/port dari run sebelumnya, variabel",
|
|
4979
5257
|
" lingkungan yang bocor dari shell, dan test yang memang sudah merah SEBELUM perubahan.",
|
|
4980
5258
|
" Cara memutuskannya: jalankan ulang test itu SENDIRIAN, dengan state yang bersih.",
|
|
4981
|
-
"4.
|
|
4982
|
-
"
|
|
4983
|
-
"
|
|
4984
|
-
"
|
|
4985
|
-
"5.
|
|
5259
|
+
"4. Bedakan dua jenis bukti. Test regresi baru untuk bug yang diperbaiki harus MERAH terhadap",
|
|
5260
|
+
" base. Test preservasi untuk perilaku yang memang sudah benar boleh langsung hijau; nilai",
|
|
5261
|
+
" apakah assertion-nya mengikat kontrak dan, bila perlu, gunakan negative control atau",
|
|
5262
|
+
" mutation kecil hanya di worktree sementara untuk membuktikan sensitivitasnya.",
|
|
5263
|
+
"5. UJI RELEVANSI hanya di worktree sementara dari `baseSha`, tidak pernah di worktree",
|
|
5264
|
+
" parent. Bila `baseSha`, patch test, atau kontrol yang aman tidak tersedia, laporkan",
|
|
5265
|
+
" `belum terbukti`; jangan mencoba eksperimen kontrol di source parent.",
|
|
5266
|
+
"6. Bersihkan worktree sementara milikmu. Laporkan secara eksplisit bila cleanup gagal.",
|
|
4986
5267
|
"",
|
|
4987
5268
|
"Larangan keras:",
|
|
4988
5269
|
"- JANGAN `git stash` untuk apa pun. Tumpukan stash milik REPO, bukan pohon kerja \u2014 sesi lain",
|
|
@@ -4994,20 +5275,21 @@ var init_builtin_agents = __esm({
|
|
|
4994
5275
|
"Gerbang bukti: setiap klaim membawa perintah DAN potongan keluarannya. Tanpa keluaran, tanpa",
|
|
4995
5276
|
"klaim. 'Semua test lulus' tanpa keluaran adalah kegagalanmu, bukan laporan.",
|
|
4996
5277
|
"",
|
|
4997
|
-
"Bentuk laporan: satu baris per test \u2014
|
|
4998
|
-
"\xB7 regresi \xB7 gagal-palsu (+ sebabnya) \u2014 lalu
|
|
5278
|
+
"Bentuk laporan: satu baris per test \u2014 test regresi merah-di-base lalu hijau \xB7 test preservasi",
|
|
5279
|
+
"hijau dan sensitif \xB7 lulus-tapi-belum-terbukti \xB7 regresi \xB7 gagal-palsu (+ sebabnya) \u2014 lalu",
|
|
5280
|
+
"satu putusan akhir: layak diumumkan selesai atau",
|
|
4999
5281
|
"belum, dan apa yang kurang."
|
|
5000
5282
|
].join("\n")
|
|
5001
5283
|
},
|
|
5002
5284
|
{
|
|
5003
5285
|
name: "edge-case-hunter",
|
|
5004
|
-
description: "Gunakan saat test yang ada hanya menguji jalur mulus dan kamu ingin batas-batas kontrak benar-benar tertutup. Ia menulis test yang hilang dan membuktikan
|
|
5286
|
+
description: "Gunakan saat test yang ada hanya menguji jalur mulus dan kamu ingin batas-batas kontrak benar-benar tertutup. Ia menulis test yang hilang dan membuktikan sensitivitas test baru terhadap kontrak yang dijaganya.",
|
|
5005
5287
|
tools: ["Read", "Glob", "Grep", "Bash", "Write", "Edit"],
|
|
5006
5288
|
enabledByDefault: false,
|
|
5007
5289
|
activation: "smart",
|
|
5008
5290
|
effort: "high",
|
|
5009
5291
|
workspacePolicy: "isolated-worktree",
|
|
5010
|
-
maxTurns:
|
|
5292
|
+
maxTurns: 40,
|
|
5011
5293
|
timeoutSeconds: null,
|
|
5012
5294
|
models: { claude: "sonnet", codex: "gpt-5.6" },
|
|
5013
5295
|
instructions: [
|
|
@@ -5025,9 +5307,10 @@ var init_builtin_agents = __esm({
|
|
|
5025
5307
|
"4. Tulis test yang hilang. Ikuti gaya berkas test tetangga \u2014 nama, struktur, helper.",
|
|
5026
5308
|
"5. Jalankan.",
|
|
5027
5309
|
"",
|
|
5028
|
-
"Gerbang bukti:
|
|
5029
|
-
"
|
|
5030
|
-
"
|
|
5310
|
+
"Gerbang bukti: untuk bug yang masih ada, test regresi baru WAJIB MERAH sebelum perbaikan.",
|
|
5311
|
+
"Test preservasi atas perilaku yang sudah benar boleh langsung hijau bila assertion-nya",
|
|
5312
|
+
"mengikat kontrak. Bila sensitivitasnya meragukan, buktikan dengan negative control atau",
|
|
5313
|
+
"mutation terarah hanya di worktree terisolasi, lalu pulihkan perubahan kontrol itu.",
|
|
5031
5314
|
"",
|
|
5032
5315
|
"Batas: kamu menulis TEST. Jangan mengubah kode produksi agar test lulus \u2014 bila test barumu",
|
|
5033
5316
|
"menemukan bug sungguhan, laporkan bugnya, biarkan test itu merah, dan katakan dengan jelas",
|
|
@@ -5045,7 +5328,7 @@ var init_builtin_agents = __esm({
|
|
|
5045
5328
|
activation: "smart",
|
|
5046
5329
|
effort: "medium",
|
|
5047
5330
|
workspacePolicy: "read-only",
|
|
5048
|
-
maxTurns:
|
|
5331
|
+
maxTurns: 30,
|
|
5049
5332
|
timeoutSeconds: null,
|
|
5050
5333
|
models: { claude: "sonnet", codex: "gpt-5.6-terra" },
|
|
5051
5334
|
instructions: [
|
|
@@ -5053,9 +5336,11 @@ var init_builtin_agents = __esm({
|
|
|
5053
5336
|
"error. Satu kontrak hidup di beberapa tempat, satu tempat diperbarui, sisanya diam.",
|
|
5054
5337
|
"",
|
|
5055
5338
|
"Prosedur:",
|
|
5056
|
-
"1. Baca diff terhadap base
|
|
5339
|
+
"1. Baca diff terhadap base SHA dan ringkasan/peta scout yang diberikan parent. Gunakan ulang",
|
|
5340
|
+
" bukti itu; cari ulang hanya bila sudah basi atau belum menjawab kontrak yang berubah.",
|
|
5341
|
+
"2. Tarik daftar yang berubah: simbol, kolom, nilai enum, kunci",
|
|
5057
5342
|
" konfigurasi, nama berkas, bentuk payload.",
|
|
5058
|
-
"
|
|
5343
|
+
"3. Untuk TIAP satu, sapu seluruh repo untuk semua tempat lain yang menyebutnya \u2014 ATAU yang",
|
|
5059
5344
|
" seharusnya menyebutnya. Yang kedua ini yang penting, dan ia tak akan muncul dari pencarian",
|
|
5060
5345
|
" nama saja. Tempat yang wajib kamu periksa:",
|
|
5061
5346
|
" - daftar/array literal yang mencacah field atau kolom secara manual;",
|
|
@@ -5064,26 +5349,25 @@ var init_builtin_agents = __esm({
|
|
|
5064
5349
|
" - skema validasi di batas HTTP vs bentuk yang benar-benar disimpan;",
|
|
5065
5350
|
" - dokumen kontrak (API, data model) dan berkas contoh/konfigurasi;",
|
|
5066
5351
|
" - berkas test yang mengunci bentuk lama.",
|
|
5067
|
-
"
|
|
5352
|
+
"4. Laporkan yang belum ikut berubah dan deduplikasi temuan yang berakar pada kontrak sama.",
|
|
5068
5353
|
"",
|
|
5069
|
-
"Gerbang bukti: tiap temuan menyebut `path:baris
|
|
5070
|
-
"
|
|
5071
|
-
"
|
|
5072
|
-
"ketahuan sendiri; yang diam tidak.",
|
|
5354
|
+
"Gerbang bukti: tiap temuan menyebut `path:baris`, dampak bila dibiarkan, kemungkinan terjadi,",
|
|
5355
|
+
"dan keyakinan. Urutkan terutama menurut dampak \xD7 kemungkinan \xD7 keyakinan; kesenyapan adalah",
|
|
5356
|
+
"faktor tambahan, bukan alasan mengalahkan bug yang dampaknya lebih kritis.",
|
|
5073
5357
|
"",
|
|
5074
|
-
"Bentuk laporan: daftar cermin yang hanyut, diurut dari
|
|
5075
|
-
"jangkar \xB7 apa yang hanyut \xB7
|
|
5358
|
+
"Bentuk laporan: daftar cermin yang hanyut, diurut dari risiko tertinggi, tiap baris:",
|
|
5359
|
+
"jangkar \xB7 apa yang hanyut \xB7 dampak \xB7 kemungkinan \xB7 keyakinan \xB7 sifat gagal-senyap."
|
|
5076
5360
|
].join("\n")
|
|
5077
5361
|
},
|
|
5078
5362
|
{
|
|
5079
5363
|
name: "spec-auditor",
|
|
5080
|
-
description: "Gunakan sebelum menutup pekerjaan untuk mengadu apa yang DIMINTA dengan apa yang benar-benar ada
|
|
5364
|
+
description: "Gunakan sebelum menutup pekerjaan untuk mengadu apa yang DIMINTA dengan apa yang benar-benar ada pada keadaan akhir. Ia menolak 'sepertinya sudah', memeriksa bukti sebelum dan sesudah perubahan, serta membedakan kekurangan dari hal yang belum terverifikasi.",
|
|
5081
5365
|
tools: ["Read", "Glob", "Grep", "Bash"],
|
|
5082
5366
|
enabledByDefault: false,
|
|
5083
5367
|
activation: "smart",
|
|
5084
5368
|
effort: "high",
|
|
5085
5369
|
workspacePolicy: "read-only",
|
|
5086
|
-
maxTurns:
|
|
5370
|
+
maxTurns: 30,
|
|
5087
5371
|
timeoutSeconds: null,
|
|
5088
5372
|
models: { claude: "sonnet", codex: "gpt-5.6-terra" },
|
|
5089
5373
|
instructions: [
|
|
@@ -5095,17 +5379,19 @@ var init_builtin_agents = __esm({
|
|
|
5095
5379
|
" baca semuanya \u2014 plan bisa menyimpang dari spec, dan penyimpangan itu sendiri temuan.",
|
|
5096
5380
|
"2. Ubah jadi daftar kriteria yang bisa diperiksa SATU PER SATU. Kalimat yang tak bisa",
|
|
5097
5381
|
" diperiksa ('lebih baik', 'rapi') kamu tandai sebagai tak terukur, bukan kamu tafsirkan.",
|
|
5098
|
-
"3. Untuk tiap kriteria,
|
|
5099
|
-
"
|
|
5100
|
-
"
|
|
5382
|
+
"3. Untuk tiap kriteria, nilai KEADAAN AKHIR. Gunakan diff untuk menunjukkan apa yang berubah,",
|
|
5383
|
+
" lalu periksa base/config/runtime bila requirement mungkin sudah terpenuhi sebelum perubahan.",
|
|
5384
|
+
"4. Putuskan: terpenuhi oleh perubahan \xB7 sudah terpenuhi di base \xB7 tak terpenuhi \xB7 belum",
|
|
5385
|
+
" terverifikasi \xB7 tidak berlaku \xB7 terpenuhi BERBEDA dari yang diminta.",
|
|
5101
5386
|
"",
|
|
5102
5387
|
"Gerbang bukti:",
|
|
5103
|
-
"- Kriteria tanpa jangkar di diff
|
|
5104
|
-
"
|
|
5388
|
+
"- Kriteria tanpa jangkar di diff BUKAN otomatis tak terpenuhi. Cari bukti keadaan akhir; bila",
|
|
5389
|
+
" bukti tidak dapat diperoleh, putuskan belum terverifikasi. Kotak plan tetap hanya klaim.",
|
|
5105
5390
|
"- Pekerjaan yang dikerjakan tanpa diminta dilaporkan TERPISAH, bukan dipuji. Ia menambah",
|
|
5106
5391
|
" permukaan yang tak pernah diminta siapa pun untuk dipelihara.",
|
|
5107
5392
|
"",
|
|
5108
|
-
"Bentuk laporan: tabel \u2014 kriteria \xB7 putusan \xB7 jangkar; lalu daftar
|
|
5393
|
+
"Bentuk laporan: tabel \u2014 kriteria \xB7 putusan \xB7 bukti keadaan akhir \xB7 jangkar; lalu daftar",
|
|
5394
|
+
"pekerjaan di luar minta dan dasar prioritas bila spec, plan, dan steering bertentangan;",
|
|
5109
5395
|
"lalu satu putusan akhir: boleh ditutup atau belum, dan apa yang kurang."
|
|
5110
5396
|
].join("\n")
|
|
5111
5397
|
},
|
|
@@ -5117,7 +5403,7 @@ var init_builtin_agents = __esm({
|
|
|
5117
5403
|
activation: "smart",
|
|
5118
5404
|
effort: "high",
|
|
5119
5405
|
workspacePolicy: "read-only",
|
|
5120
|
-
maxTurns:
|
|
5406
|
+
maxTurns: 30,
|
|
5121
5407
|
timeoutSeconds: null,
|
|
5122
5408
|
models: { claude: "sonnet", codex: "gpt-5.6" },
|
|
5123
5409
|
instructions: [
|
|
@@ -5140,13 +5426,16 @@ var init_builtin_agents = __esm({
|
|
|
5140
5426
|
" - kredensial: bocor ke log, ke response, ke pesan galat, atau ikut ter-commit.",
|
|
5141
5427
|
"",
|
|
5142
5428
|
"Gerbang bukti \u2014 ini yang membedakanmu dari daftar kekhawatiran:",
|
|
5143
|
-
"-
|
|
5144
|
-
"
|
|
5145
|
-
"
|
|
5429
|
+
"- Pisahkan tiga status: terbukti (jalur konkret lengkap) \xB7 belum dapat disimpulkan (jalur",
|
|
5430
|
+
" berisiko tetapi bukti belum lengkap) \xB7 tidak ditemukan masalah dalam scope yang diperiksa.",
|
|
5431
|
+
"- Untuk status terbukti, sebutkan skenario penyalahgunaan, dampak, dan keyakinan. Temuan tanpa",
|
|
5432
|
+
" jalur konkret tidak boleh dinaikkan menjadi dampak terbukti.",
|
|
5433
|
+
"- Sebutkan juga jalur dan scope yang diperiksa tanpa temuan. Kata 'bersih' hanya berlaku pada",
|
|
5434
|
+
" scope itu, bukan jaminan atas bagian repo yang belum kamu telusuri.",
|
|
5146
5435
|
"- Jangan menilai dari nama fungsi atau kecocokan pola. Baca jalurnya.",
|
|
5147
5436
|
"",
|
|
5148
|
-
"Bentuk laporan: per temuan \u2014 jalur (dengan jangkar) \xB7
|
|
5149
|
-
"
|
|
5437
|
+
"Bentuk laporan: per temuan \u2014 status \xB7 jalur (dengan jangkar) \xB7 skenario \xB7 dampak \xB7 keyakinan",
|
|
5438
|
+
"\xB7 perbaikan TERKECIL; lalu scope yang diperiksa dan yang belum diperiksa."
|
|
5150
5439
|
].join("\n")
|
|
5151
5440
|
},
|
|
5152
5441
|
{
|
|
@@ -5157,7 +5446,7 @@ var init_builtin_agents = __esm({
|
|
|
5157
5446
|
activation: "smart",
|
|
5158
5447
|
effort: "medium",
|
|
5159
5448
|
workspacePolicy: "read-only",
|
|
5160
|
-
maxTurns:
|
|
5449
|
+
maxTurns: 30,
|
|
5161
5450
|
timeoutSeconds: null,
|
|
5162
5451
|
models: { claude: "haiku", codex: "gpt-5.6-terra" },
|
|
5163
5452
|
instructions: [
|
|
@@ -5165,26 +5454,30 @@ var init_builtin_agents = __esm({
|
|
|
5165
5454
|
"diperiksa lagi seumur hidup proyek \u2014 pemeriksaan itu terjadi sekarang atau tidak sama sekali.",
|
|
5166
5455
|
"",
|
|
5167
5456
|
"Prosedur:",
|
|
5168
|
-
"1. Dari diff, ambil dependensi yang BERTAMBAH atau
|
|
5169
|
-
"
|
|
5457
|
+
"1. Dari diff manifest DAN lockfile lintas ekosistem, ambil dependensi yang BERTAMBAH atau",
|
|
5458
|
+
" NAIK VERSI: package manager JS, Cargo, Go, Python (`uv.lock`/`poetry.lock`), Ruby",
|
|
5459
|
+
" (`Gemfile.lock`), PHP (`composer.lock`), serta bentuk tetangga yang ditemukan di repo.",
|
|
5460
|
+
" Catat versi terkunci dan jalur transitif yang benar-benar terpasang, bukan hanya range.",
|
|
5170
5461
|
"2. Untuk tiap satu, periksa dan sebutkan sumbernya:",
|
|
5171
|
-
" - advisory/CVE yang diketahui untuk
|
|
5462
|
+
" - advisory/CVE yang diketahui untuk versi terkunci itu, dari sumber primer bila ada;",
|
|
5172
5463
|
" - tanggal rilis terakhir & tanda pemeliharaan (isu terbuka menumpuk, maintainer tunggal);",
|
|
5173
5464
|
" - lisensi, dan apakah ia cocok dengan lisensi proyek ini;",
|
|
5174
5465
|
" - ukuran pohon transitifnya;",
|
|
5175
5466
|
" - apakah paket menjalankan skrip saat instalasi.",
|
|
5176
|
-
"3.
|
|
5467
|
+
"3. Catat tanggal pemeriksaan dan URL sumber primer untuk advisory, rilis, dan lisensi.",
|
|
5468
|
+
"4. Pertanyaan yang paling sering dilewati, dan tanyakan SELALU: apakah fungsi yang dipakai",
|
|
5177
5469
|
" sudah tersedia di dependensi yang SUDAH ada di proyek ini, atau di runtime-nya? Cek dulu",
|
|
5178
|
-
"
|
|
5179
|
-
" yang diaudit.",
|
|
5470
|
+
" dan buktikan penggantinya ekuivalen secara fungsi sebelum menolak dependensi baru.",
|
|
5180
5471
|
"",
|
|
5181
|
-
"Gerbang bukti: klaim CVE
|
|
5182
|
-
"
|
|
5472
|
+
"Gerbang bukti: klaim CVE, lisensi, pemeliharaan, dan versi WAJIB membawa URL sumber dan",
|
|
5473
|
+
"tanggal pemeriksaan. Tanpa sumber primer yang cukup, putusan akhir `belum terverifikasi`;",
|
|
5474
|
+
"jangan naikkan unknown menjadi aman atau berbahaya.",
|
|
5183
5475
|
"",
|
|
5184
|
-
"Bentuk laporan: per dependensi \u2014
|
|
5185
|
-
"
|
|
5476
|
+
"Bentuk laporan: per dependensi \u2014 versi terkunci \xB7 jalur langsung/transitif \xB7 aman \xB7 aman",
|
|
5477
|
+
"dengan catatan \xB7 tolak (+ pengganti ekuivalen) \xB7 belum terverifikasi."
|
|
5186
5478
|
].join("\n")
|
|
5187
|
-
}
|
|
5479
|
+
},
|
|
5480
|
+
...BUILTIN_APP_AGENTS
|
|
5188
5481
|
];
|
|
5189
5482
|
BUILTIN_AGENT_NAMES = BUILTIN_AGENTS.map((a) => a.name);
|
|
5190
5483
|
}
|
|
@@ -5433,6 +5726,29 @@ var init_cron_expr = __esm({
|
|
|
5433
5726
|
}
|
|
5434
5727
|
});
|
|
5435
5728
|
|
|
5729
|
+
// ../shared/src/session-admission.ts
|
|
5730
|
+
var zLaunchStatus, zLaunchRejection;
|
|
5731
|
+
var init_session_admission = __esm({
|
|
5732
|
+
"../shared/src/session-admission.ts"() {
|
|
5733
|
+
"use strict";
|
|
5734
|
+
init_zod();
|
|
5735
|
+
zLaunchStatus = external_exports.object({
|
|
5736
|
+
enabled: external_exports.boolean(),
|
|
5737
|
+
liveCount: external_exports.number().int().nonnegative(),
|
|
5738
|
+
liveAgentCount: external_exports.number().int().nonnegative(),
|
|
5739
|
+
maxConcurrent: external_exports.number().int().positive(),
|
|
5740
|
+
loadPerCore: external_exports.number().finite().nonnegative().nullable(),
|
|
5741
|
+
maxLoadPerCore: external_exports.number().finite().positive(),
|
|
5742
|
+
loadStatus: external_exports.enum(["available", "unsupported", "unavailable"])
|
|
5743
|
+
});
|
|
5744
|
+
zLaunchRejection = external_exports.object({
|
|
5745
|
+
error: external_exports.string(),
|
|
5746
|
+
kind: external_exports.enum(["capacity", "host-load"]),
|
|
5747
|
+
admission: zLaunchStatus
|
|
5748
|
+
});
|
|
5749
|
+
}
|
|
5750
|
+
});
|
|
5751
|
+
|
|
5436
5752
|
// ../shared/src/dto.ts
|
|
5437
5753
|
var zIssueDeviceToken, zSessionResult, zSessionHistory, zCreateProject, zProjectId, zRenameProject, zUpdateProject, zCreateSpec, zPatchSpec, zChangeSpecSource, zMarkSpecDone, zIntegrate, zSessionSummary, zProjectView, zSchedulerQueueItem, zSchedulerSourceView, zSchedulerSessionView, zSchedulerQueueCounts, zSchedulerState, zLeadDecisionView, zLeadFlowView, zLeadAnswer, zLeadProjectStatus, zLeadStatusView, zFlow, zPrdBrief, zPrdDoc, zBreakdownItem, zBreakdownDoc, zBatchCreateSpec, zEscalationTarget, zEscalationPrefill, zAuditEscalation, zAuditEscalationView, zTerminalSession, zDocFileContent, zDocIndexCat, zDocIndex, HOST_RE, USER_RE, zCreateVps, zPatchVps, USER_ROLES, zUserRole, zLogin, zSignup, zSetup, zSetupApply, zChangePassword, zCreateClientAccount, zUpdateClientAccount, zVpsCheck, zMarkNa, zMarkNaBulk, zAttest, zRemediate, PROVISION_PROFILES, COMPONENT_IDS, zProvision, UPDATE_RESTART_EXIT, CONFIG_RESTART_EXIT, zUpdateApplyBody, MAX_SUBS, zSubPage, zSubLimit, zTopicParams, zEventsClientMsg, zTicketView, zTicketAttachmentView, zSpecAttachmentView, zTicketDetail, zTicketEditInput, zHelpInfo, zPublicTicketStatus, zCronExpr, zCreateCron, zPatchCron, zSchedulerCron, zSchedulerCronRun;
|
|
5438
5754
|
var init_dto = __esm({
|
|
@@ -5447,6 +5763,7 @@ var init_dto = __esm({
|
|
|
5447
5763
|
init_enums();
|
|
5448
5764
|
init_spec_source();
|
|
5449
5765
|
init_cron_expr();
|
|
5766
|
+
init_session_admission();
|
|
5450
5767
|
zIssueDeviceToken = external_exports.object({ name: external_exports.string().min(1) });
|
|
5451
5768
|
zSessionResult = external_exports.object({
|
|
5452
5769
|
id: external_exports.string(),
|
|
@@ -5632,6 +5949,7 @@ var init_dto = __esm({
|
|
|
5632
5949
|
config: zScheduler,
|
|
5633
5950
|
cap: external_exports.number(),
|
|
5634
5951
|
liveCount: external_exports.number(),
|
|
5952
|
+
admission: zLaunchStatus.optional(),
|
|
5635
5953
|
sources: external_exports.array(zSchedulerSourceView),
|
|
5636
5954
|
queueCounts: zSchedulerQueueCounts,
|
|
5637
5955
|
sessions: external_exports.array(zSchedulerSessionView)
|
|
@@ -5805,7 +6123,7 @@ var init_dto = __esm({
|
|
|
5805
6123
|
// SPEC-166 · "reverse" = sesi project-level di worktree-nya sendiri, menyusun Source of Truth
|
|
5806
6124
|
// dari kode. TANPA override runtime: sesi project-level mengikuti Setting.agent (ADR-0074).
|
|
5807
6125
|
// Terminal biasa (tanpa flow) kini punya variannya SENDIRI di bawah — lihat SPEC-517.
|
|
5808
|
-
external_exports.object({ project: external_exports.string(), flow: external_exports.literal("reverse") }),
|
|
6126
|
+
external_exports.object({ project: external_exports.string(), flow: external_exports.literal("reverse"), force: external_exports.boolean().optional() }),
|
|
5809
6127
|
// SPEC-210 · sesi prd project-level di worktree sendiri; menghasilkan dokumen PRD dari brief.
|
|
5810
6128
|
// SPEC-340 · ADR-0076 · eskalasi audit → PRD: branchFrom = branch audit (worktree lahir dari sana,
|
|
5811
6129
|
// resolveCommit + fallback origin/<rev>), fromAudit = id spec audit (isi dokumennya disematkan ke
|
|
@@ -5815,13 +6133,14 @@ var init_dto = __esm({
|
|
|
5815
6133
|
flow: external_exports.literal("prd"),
|
|
5816
6134
|
brief: zPrdBrief,
|
|
5817
6135
|
branchFrom: external_exports.string().min(1).optional(),
|
|
5818
|
-
fromAudit: external_exports.string().min(1).optional()
|
|
6136
|
+
fromAudit: external_exports.string().min(1).optional(),
|
|
6137
|
+
force: external_exports.boolean().optional()
|
|
5819
6138
|
}),
|
|
5820
6139
|
// SPEC-273 · sesi breakdown project-level: pecah SATU PRD (prdPath) → manifest N backlog.
|
|
5821
|
-
external_exports.object({ project: external_exports.string(), flow: external_exports.literal("breakdown"), prdPath: external_exports.string().min(1) }),
|
|
6140
|
+
external_exports.object({ project: external_exports.string(), flow: external_exports.literal("breakdown"), prdPath: external_exports.string().min(1), force: external_exports.boolean().optional() }),
|
|
5822
6141
|
// SPEC-222 · scaffold: sesi project-level from-scratch, menyusun SoT dari ide. Tanpa brief
|
|
5823
6142
|
// (diseed dari Project.desc), tanpa Spec — cermin reverse.
|
|
5824
|
-
external_exports.object({ project: external_exports.string(), flow: external_exports.literal("scaffold") }),
|
|
6143
|
+
external_exports.object({ project: external_exports.string(), flow: external_exports.literal("scaffold"), force: external_exports.boolean().optional() }),
|
|
5825
6144
|
// SPEC-517 · terminal agen biasa: agen (claude|codex) + model + effort boleh dipilih PER SESI,
|
|
5826
6145
|
// seperti picker Start backlog (ADR-0061/0074). Kosong → default global (Setting).
|
|
5827
6146
|
// `flow: z.undefined()` BUKAN hiasan: varian ini permisif dan diletakkan SESUDAH semua varian
|
|
@@ -11103,6 +11422,7 @@ var init_src = __esm({
|
|
|
11103
11422
|
init_portal_chat();
|
|
11104
11423
|
init_prd_status();
|
|
11105
11424
|
init_session_kind();
|
|
11425
|
+
init_session_admission();
|
|
11106
11426
|
init_session_end();
|
|
11107
11427
|
init_config();
|
|
11108
11428
|
init_config_registry();
|
|
@@ -11317,13 +11637,6 @@ var init_custom_agents = __esm({
|
|
|
11317
11637
|
}
|
|
11318
11638
|
});
|
|
11319
11639
|
|
|
11320
|
-
// ../runner/src/agent-readonly.ts
|
|
11321
|
-
var init_agent_readonly = __esm({
|
|
11322
|
-
"../runner/src/agent-readonly.ts"() {
|
|
11323
|
-
"use strict";
|
|
11324
|
-
}
|
|
11325
|
-
});
|
|
11326
|
-
|
|
11327
11640
|
// ../runner/src/runtime-profile.ts
|
|
11328
11641
|
function resolveHardening(env) {
|
|
11329
11642
|
if (env.HANOMAN_HARDENING === "1") return true;
|
|
@@ -11374,6 +11687,30 @@ var init_codex_agent_config = __esm({
|
|
|
11374
11687
|
}
|
|
11375
11688
|
});
|
|
11376
11689
|
|
|
11690
|
+
// ../runner/src/agent-readonly.ts
|
|
11691
|
+
var init_agent_readonly = __esm({
|
|
11692
|
+
"../runner/src/agent-readonly.ts"() {
|
|
11693
|
+
"use strict";
|
|
11694
|
+
}
|
|
11695
|
+
});
|
|
11696
|
+
|
|
11697
|
+
// ../runner/src/agent-definition.ts
|
|
11698
|
+
var init_agent_definition = __esm({
|
|
11699
|
+
"../runner/src/agent-definition.ts"() {
|
|
11700
|
+
"use strict";
|
|
11701
|
+
init_custom_agents();
|
|
11702
|
+
init_codex_agent_config();
|
|
11703
|
+
init_agent_readonly();
|
|
11704
|
+
}
|
|
11705
|
+
});
|
|
11706
|
+
|
|
11707
|
+
// ../runner/src/custom-agent-eval-evidence.ts
|
|
11708
|
+
var init_custom_agent_eval_evidence = __esm({
|
|
11709
|
+
"../runner/src/custom-agent-eval-evidence.ts"() {
|
|
11710
|
+
"use strict";
|
|
11711
|
+
}
|
|
11712
|
+
});
|
|
11713
|
+
|
|
11377
11714
|
// ../runner/src/custom-agent-eval.ts
|
|
11378
11715
|
var init_custom_agent_eval = __esm({
|
|
11379
11716
|
"../runner/src/custom-agent-eval.ts"() {
|
|
@@ -11383,6 +11720,9 @@ var init_custom_agent_eval = __esm({
|
|
|
11383
11720
|
init_codex_settings();
|
|
11384
11721
|
init_custom_agents();
|
|
11385
11722
|
init_settings2();
|
|
11723
|
+
init_agent_readonly();
|
|
11724
|
+
init_agent_definition();
|
|
11725
|
+
init_custom_agent_eval_evidence();
|
|
11386
11726
|
}
|
|
11387
11727
|
});
|
|
11388
11728
|
|
|
@@ -11832,6 +12172,7 @@ var init_src2 = __esm({
|
|
|
11832
12172
|
init_codex_settings();
|
|
11833
12173
|
init_agent_cli();
|
|
11834
12174
|
init_custom_agents();
|
|
12175
|
+
init_agent_definition();
|
|
11835
12176
|
init_agent_readonly();
|
|
11836
12177
|
init_codex_agent_config();
|
|
11837
12178
|
init_custom_agent_eval();
|