hanoman 0.9.34 → 0.9.36
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 +79 -13
- package/dist/server.js +235 -94
- package/package.json +1 -1
- package/web/assets/{DalangHanomanScreen-BwBpu2_P.js → DalangHanomanScreen-NmpJIcg6.js} +1 -1
- package/web/assets/{DocPreviewModal-z4u5bA7e.js → DocPreviewModal-DK597e3s.js} +1 -1
- package/web/assets/{DocsWorkspace-CtD3uuCo.js → DocsWorkspace-BQX-HlzW.js} +1 -1
- package/web/assets/{IdeScreen-D-jOfQ5p.js → IdeScreen-LeUPaFsS.js} +1 -1
- package/web/assets/{LeadScreen-BzauaH1t.js → LeadScreen-BVCKv46y.js} +1 -1
- package/web/assets/{ReviewScreen-CMhrSnaH.js → ReviewScreen-C6NcJChq.js} +1 -1
- package/web/assets/{SchedulerScreen-h9C8CMSA.js → SchedulerScreen-2AH0R3TJ.js} +1 -1
- package/web/assets/{SettingsScreen-DrV1eN2q.js → SettingsScreen-B4SVzh9m.js} +3 -3
- package/web/assets/{TeamScreen-DQ7DBfil.js → TeamScreen-6XEfuZUm.js} +1 -1
- package/web/assets/{TerminalScreen-BecrzSkO.js → TerminalScreen-DubD6vT-.js} +1 -1
- package/web/assets/{TriageScreen-jtTZsaK5.js → TriageScreen-BYJxyCar.js} +1 -1
- package/web/assets/{VpsScreen-v5UmXGHF.js → VpsScreen-Df37dgKx.js} +1 -1
- package/web/assets/{fields-B0XXQmkb.js → fields-C94HI0V8.js} +1 -1
- package/web/assets/{index-kLq09yz-.js → index-BeFSh2Ba.js} +207 -207
- package/web/assets/{live-wjfa6DIz.js → live-5ezoV9Fs.js} +1 -1
- package/web/assets/{sched-lead-shared-BfF2ZYfo.js → sched-lead-shared-BpZu6N2A.js} +1 -1
- package/web/assets/{settings-rebase-BMeQSp64.js → settings-rebase-DaTGgcuO.js} +1 -1
- package/web/index.html +1 -1
package/dist/build-info.json
CHANGED
package/dist/cli.js
CHANGED
|
@@ -4137,7 +4137,7 @@ var init_enums = __esm({
|
|
|
4137
4137
|
zSeverity = external_exports.enum(["critical", "major", "minor"]);
|
|
4138
4138
|
zTicketCategory = external_exports.enum(["bug", "fitur", "pertanyaan", "lainnya"]);
|
|
4139
4139
|
zTicketStatus = external_exports.enum(["new", "accepted", "rejected"]);
|
|
4140
|
-
VERIFY_SCOPES = ["changed", "full"];
|
|
4140
|
+
VERIFY_SCOPES = ["changed", "full", "none"];
|
|
4141
4141
|
zVerifyScope = external_exports.enum(VERIFY_SCOPES);
|
|
4142
4142
|
}
|
|
4143
4143
|
});
|
|
@@ -4192,6 +4192,8 @@ var init_method_catalog = __esm({
|
|
|
4192
4192
|
"superpowers:test-driven-development",
|
|
4193
4193
|
VERIFICATION_GATE
|
|
4194
4194
|
],
|
|
4195
|
+
// ADR-0230 · fase Review resmi: audit spec & plan vs diff + gerbang verifikasi.
|
|
4196
|
+
Review: ["superpowers:requesting-code-review", VERIFICATION_GATE],
|
|
4195
4197
|
// SPEC-407 · fase `Goal` sengaja TANPA skill: seluruh inti flow itu membebaskan sesi dari
|
|
4196
4198
|
// proses kaku. Yang tetap dijaga cuma pintu keluarnya.
|
|
4197
4199
|
Verifikasi: [VERIFICATION_GATE]
|
|
@@ -4235,6 +4237,8 @@ var init_method_catalog = __esm({
|
|
|
4235
4237
|
"mattpocock-skills:tdd",
|
|
4236
4238
|
"mattpocock-skills:code-review"
|
|
4237
4239
|
],
|
|
4240
|
+
// ADR-0230 · fase Review resmi: audit spec & plan vs diff + gerbang verifikasi.
|
|
4241
|
+
Review: ["mattpocock-skills:code-review", VERIFICATION_GATE],
|
|
4238
4242
|
Verifikasi: [VERIFICATION_GATE]
|
|
4239
4243
|
},
|
|
4240
4244
|
exitSkills: [VERIFICATION_GATE],
|
|
@@ -4275,6 +4279,8 @@ var init_method_catalog = __esm({
|
|
|
4275
4279
|
"agent-skills:test-driven-development",
|
|
4276
4280
|
"agent-skills:code-review-and-quality"
|
|
4277
4281
|
],
|
|
4282
|
+
// ADR-0230 · fase Review resmi: audit spec & plan vs diff + gerbang verifikasi.
|
|
4283
|
+
Review: ["agent-skills:code-review-and-quality", VERIFICATION_GATE],
|
|
4278
4284
|
Verifikasi: [VERIFICATION_GATE]
|
|
4279
4285
|
},
|
|
4280
4286
|
exitSkills: [VERIFICATION_GATE],
|
|
@@ -4791,7 +4797,7 @@ var init_logs = __esm({
|
|
|
4791
4797
|
function phaseAgentName(phase) {
|
|
4792
4798
|
return PHASE_AGENT_PREFIX + phase.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
4793
4799
|
}
|
|
4794
|
-
var ORCHESTRATION_FLOWS, FLOW_PHASES, PHASE_AGENT_PREFIX, isPhaseAgentName, EXECUTE_MODE_FLOWS, REVIEWER_CELL;
|
|
4800
|
+
var ORCHESTRATION_FLOWS, FLOW_PHASES, PHASE_AGENT_PREFIX, isPhaseAgentName, EXECUTE_MODE_FLOWS, REVIEWER_CELL, REVIEWER_FLOWS;
|
|
4795
4801
|
var init_orchestration = __esm({
|
|
4796
4802
|
"../shared/src/orchestration.ts"() {
|
|
4797
4803
|
"use strict";
|
|
@@ -4807,8 +4813,9 @@ var init_orchestration = __esm({
|
|
|
4807
4813
|
"no_effort"
|
|
4808
4814
|
];
|
|
4809
4815
|
FLOW_PHASES = {
|
|
4810
|
-
|
|
4811
|
-
|
|
4816
|
+
// ADR-0230 · `Review` = fase resmi sesudah Execute (dulu langkah R di dalam Execute, ADR-0170 #4).
|
|
4817
|
+
feature: ["Brainstorm", "Objective", "Spec", "Plan", "Execute", "Review"],
|
|
4818
|
+
qa: ["Audit", "Spec", "Plan", "Execute", "Review"],
|
|
4812
4819
|
scaffold: ["Brainstorm", "Objective", "Doc index"],
|
|
4813
4820
|
reverse: ["Scan", "Docs teknis", "Wawancara", "Konvensi & index", "Serah terima"],
|
|
4814
4821
|
prd: ["Brainstorm", "PRD"],
|
|
@@ -4830,6 +4837,9 @@ var init_orchestration = __esm({
|
|
|
4830
4837
|
ORCHESTRATION_FLOWS.filter((f) => FLOW_PHASES[f].some((p3) => p3 === "Execute" || p3 === "Goal"))
|
|
4831
4838
|
);
|
|
4832
4839
|
REVIEWER_CELL = "Review";
|
|
4840
|
+
REVIEWER_FLOWS = new Set(
|
|
4841
|
+
ORCHESTRATION_FLOWS.filter((f) => FLOW_PHASES[f].includes(REVIEWER_CELL))
|
|
4842
|
+
);
|
|
4833
4843
|
}
|
|
4834
4844
|
});
|
|
4835
4845
|
|
|
@@ -4840,7 +4850,7 @@ var init_runtime_defaults = __esm({
|
|
|
4840
4850
|
"use strict";
|
|
4841
4851
|
init_orchestration();
|
|
4842
4852
|
init_zod();
|
|
4843
|
-
RUNTIME_DEFAULTS_VERSION = "2026-
|
|
4853
|
+
RUNTIME_DEFAULTS_VERSION = "2026-10-25-v1";
|
|
4844
4854
|
zRuntimeDefaultState = external_exports.enum(["seeded", "user"]);
|
|
4845
4855
|
zBuiltinRuntimeDefaults = external_exports.object({
|
|
4846
4856
|
version: external_exports.string().default(RUNTIME_DEFAULTS_VERSION),
|
|
@@ -4873,14 +4883,16 @@ var init_runtime_defaults = __esm({
|
|
|
4873
4883
|
Objective: cell("sonnet", "medium"),
|
|
4874
4884
|
Spec: cell("opus", "high"),
|
|
4875
4885
|
Plan: cell("opus", "high"),
|
|
4876
|
-
Execute: cell("sonnet", "high")
|
|
4886
|
+
Execute: cell("sonnet", "high"),
|
|
4887
|
+
Review: cell("opus", "high")
|
|
4877
4888
|
},
|
|
4878
4889
|
{
|
|
4879
4890
|
Brainstorm: cell("gpt-5.6-terra", "medium"),
|
|
4880
4891
|
Objective: cell("gpt-5.6-terra", "medium"),
|
|
4881
4892
|
Spec: cell("gpt-5.6-sol", "high"),
|
|
4882
4893
|
Plan: cell("gpt-5.6-sol", "high"),
|
|
4883
|
-
Execute: cell("gpt-5.6-terra", "high")
|
|
4894
|
+
Execute: cell("gpt-5.6-terra", "high"),
|
|
4895
|
+
Review: cell("gpt-5.6-sol", "high")
|
|
4884
4896
|
}
|
|
4885
4897
|
),
|
|
4886
4898
|
qa: flow(
|
|
@@ -4888,13 +4900,15 @@ var init_runtime_defaults = __esm({
|
|
|
4888
4900
|
Audit: cell("opus", "high"),
|
|
4889
4901
|
Spec: cell("opus", "high"),
|
|
4890
4902
|
Plan: cell("sonnet", "high"),
|
|
4891
|
-
Execute: cell("sonnet", "high")
|
|
4903
|
+
Execute: cell("sonnet", "high"),
|
|
4904
|
+
Review: cell("opus", "high")
|
|
4892
4905
|
},
|
|
4893
4906
|
{
|
|
4894
4907
|
Audit: cell("gpt-5.6-sol", "high"),
|
|
4895
4908
|
Spec: cell("gpt-5.6-sol", "high"),
|
|
4896
4909
|
Plan: cell("gpt-5.6-terra", "high"),
|
|
4897
|
-
Execute: cell("gpt-5.6-terra", "high")
|
|
4910
|
+
Execute: cell("gpt-5.6-terra", "high"),
|
|
4911
|
+
Review: cell("gpt-5.6-sol", "high")
|
|
4898
4912
|
}
|
|
4899
4913
|
),
|
|
4900
4914
|
scaffold: flow(
|
|
@@ -11628,7 +11642,7 @@ var init_sessions = __esm({
|
|
|
11628
11642
|
effort: str("Effort. Kosong = default global."),
|
|
11629
11643
|
goal: bool("Mode goal per-sesi. Kosong = ikut setelan global."),
|
|
11630
11644
|
goalCondition: str("Kondisi selesai mode goal (maks 4000 karakter)."),
|
|
11631
|
-
verifyScope: enumStr(["changed", "full"], "Scope verifikasi. Kosong = ikut setelan global."),
|
|
11645
|
+
verifyScope: enumStr(["changed", "full", "none"], "Scope verifikasi: changed = hanya yang berubah, full = seluruh project, none = jangan jalankan test. Kosong = ikut setelan global."),
|
|
11632
11646
|
method: str("Metode workflow. Id tak dikenal jatuh ke default, bukan ditolak."),
|
|
11633
11647
|
phaseOverrides: {
|
|
11634
11648
|
type: "object",
|
|
@@ -15171,7 +15185,11 @@ var init_session_ask = __esm({
|
|
|
15171
15185
|
});
|
|
15172
15186
|
zTurnEnd = external_exports.object({
|
|
15173
15187
|
hook_event_name: external_exports.literal("Stop"),
|
|
15174
|
-
turn_id
|
|
15188
|
+
// ADR-0231 · codex mengirim `turn_id`; Stop claude (sesi bertanya lewat teks) tidak — ia membawa
|
|
15189
|
+
// `prompt_id` dan `background_tasks`.
|
|
15190
|
+
turn_id: external_exports.string().min(1).optional(),
|
|
15191
|
+
prompt_id: external_exports.string().optional(),
|
|
15192
|
+
background_tasks: external_exports.array(external_exports.object({ status: external_exports.string().optional() }).passthrough()).optional(),
|
|
15175
15193
|
last_assistant_message: external_exports.string().optional(),
|
|
15176
15194
|
// Codex menyalakan bendera ini saat Stop dipicu oleh hook Stop lain. Melayani giliran yang
|
|
15177
15195
|
// dibangkitkan gate mode goal (ADR-0074) berarti lead menjawab dirinya sendiri.
|
|
@@ -15314,7 +15332,7 @@ var init_reverse_standard = __esm({
|
|
|
15314
15332
|
});
|
|
15315
15333
|
|
|
15316
15334
|
// ../runner/src/verify-scope.ts
|
|
15317
|
-
var CHANGED;
|
|
15335
|
+
var CHANGED, NONE;
|
|
15318
15336
|
var init_verify_scope = __esm({
|
|
15319
15337
|
"../runner/src/verify-scope.ts"() {
|
|
15320
15338
|
"use strict";
|
|
@@ -15355,6 +15373,25 @@ var init_verify_scope = __esm({
|
|
|
15355
15373
|
"tipe/kontrak bersama, skema, atau berkas yang diimpor banyak modul), perluas scope seperlunya",
|
|
15356
15374
|
"dan katakan alasannya. Ini panduan biaya, bukan larangan."
|
|
15357
15375
|
].join("\n");
|
|
15376
|
+
NONE = [
|
|
15377
|
+
"Scope verifikasi: TANPA menjalankan test. Operator memilih mode ini karena perangkatnya tak",
|
|
15378
|
+
"kuat menjalankan test \u2014 run sebelumnya membuat mesin tersendat.",
|
|
15379
|
+
"",
|
|
15380
|
+
"- JANGAN menjalankan test apa pun: `pnpm test`, `vitest` (termasuk `--changed`/`related`),",
|
|
15381
|
+
" `jest`, `pytest`, `go test`, Playwright/e2e, maupun skrip yang memanggilnya. Aturan ini",
|
|
15382
|
+
' MENIMPA instruksi skill/metode (mis. TDD "jalankan test, lihat merah lalu hijau"), instruksi',
|
|
15383
|
+
" fase Verifikasi/review, dan Definition of Done repo target.",
|
|
15384
|
+
"- Menulis atau memperbarui berkas test tetap boleh \u2014 hanya jangan menjalankannya.",
|
|
15385
|
+
"- JANGAN build, lint seluruh repo, boot server + curl, atau smoke end-to-end.",
|
|
15386
|
+
"- Typecheck: paling banyak SEKALI di akhir, hanya untuk paket yang tersentuh",
|
|
15387
|
+
" (mis. `pnpm --filter ./server typecheck`). JANGAN `pnpm -r typecheck`.",
|
|
15388
|
+
'- Verifikasi dengan MEMBACA: telusuri diff-mu (`git diff "$HANOMAN_BASE_SHA"...HEAD`,',
|
|
15389
|
+
" `git status --porcelain`), periksa pemanggil, tipe, dan cabang error dengan grep/baca berkas.",
|
|
15390
|
+
"- Laporan: nyatakan terang bahwa test TIDAK dijalankan (scope verifikasi `none`) dan sebut berkas",
|
|
15391
|
+
" test yang perlu dijalankan manusia. Jangan pernah mengklaim test hijau.",
|
|
15392
|
+
"",
|
|
15393
|
+
"Menjalankan test adalah tugas MANUSIA sebelum merge, bukan tugas sesi."
|
|
15394
|
+
].join("\n");
|
|
15358
15395
|
}
|
|
15359
15396
|
});
|
|
15360
15397
|
|
|
@@ -15385,7 +15422,7 @@ var init_goal_spec = __esm({
|
|
|
15385
15422
|
});
|
|
15386
15423
|
|
|
15387
15424
|
// ../runner/src/prompt.ts
|
|
15388
|
-
var DECIDER, ASK_ROUTE, AMBIGUOUS, AUTONOMY_CLAUSE, AUTONOMY_CLAUSE_FULL, ESCALATION_CONTRACT, PROJECT_METHOD, REVERSE_PHASE_GUIDE, SCAFFOLD_PHASE_GUIDE;
|
|
15425
|
+
var DECIDER, ASK_ROUTE, ASK_ESCALATION_TOOL, ASK_DECISIONS_TOOL, AMBIGUOUS, AUTONOMY_CLAUSE, AUTONOMY_CLAUSE_FULL, ESCALATION_CONTRACT, PROJECT_METHOD, REVERSE_PHASE_GUIDE, SCAFFOLD_PHASE_GUIDE;
|
|
15389
15426
|
var init_prompt = __esm({
|
|
15390
15427
|
"../runner/src/prompt.ts"() {
|
|
15391
15428
|
"use strict";
|
|
@@ -15396,6 +15433,8 @@ var init_prompt = __esm({
|
|
|
15396
15433
|
init_goal_spec();
|
|
15397
15434
|
DECIDER = "hanoman-lead bila aktif untuk project ini, selain itu manusia";
|
|
15398
15435
|
ASK_ROUTE = `ajukan lewat AskUserQuestion bila agenmu punya tool itu (paling banyak 4 pertanyaan per panggilan \u2014 pecah sisanya ke panggilan berikutnya); bila tidak, tanyakan di terminal ini sekaligus, tiap pertanyaan bernomor dan diakhiri \`?\` beserta opsinya, lalu tunggu jawabannya. Tak ada batas jumlah pertanyaan: selama masih ambigu dan akan mempengaruhi hasil, tanyakan. Yang menjawab ditentukan hanoman \u2014 ${DECIDER}; jangan menjawabnya sendiri.`;
|
|
15436
|
+
ASK_ESCALATION_TOOL = "tanyakan lewat AskUserQuestion";
|
|
15437
|
+
ASK_DECISIONS_TOOL = "lewat AskUserQuestion \u2014 tool itu memuat paling banyak 4 pertanyaan per panggilan, jadi pecah sisanya ke panggilan berikutnya sampai semuanya terjawab";
|
|
15399
15438
|
AMBIGUOUS = "hal yang masih ambigu dan akan mempengaruhi hasil (data model, kontrak API, scope, perilaku yang terlihat pengguna, atau asumsi yang terpaksa kamu ambil agar bisa lanjut)";
|
|
15400
15439
|
AUTONOMY_CLAUSE = `Jalankan seluruh pipeline sampai tuntas tanpa berhenti di batas antar-fase. Checkpoint "review"/"approval"/"need review" milik skill superpowers BUKAN titik berhenti di sini \u2014 lanjut saja ke fase berikutnya. Berhenti HANYA untuk ${AMBIGUOUS}: JANGAN memutuskannya sendiri, ${ASK_ROUTE} Selain itu, terus lanjut.`;
|
|
15401
15440
|
AUTONOMY_CLAUSE_FULL = `Kamu diluncurkan scheduler \u2014 mungkin tak ada manusia yang sedang menonton terminal ini. Tembus seluruh pipeline sampai stage \`done\`, lalu commit & push: checkpoint "review"/"approval" milik skill BUKAN titik berhenti dan jangan menunggu persetujuan siapa pun. Tetapi JANGAN memutuskan sendiri ${AMBIGUOUS}: ${ASK_ROUTE} Catat keputusan penting di pesan commit. Merge ke branch utama tetap dilakukan manusia, bukan kamu.`;
|
|
@@ -15511,6 +15550,7 @@ var init_agent_readonly = __esm({
|
|
|
15511
15550
|
});
|
|
15512
15551
|
|
|
15513
15552
|
// ../runner/src/custom-agents.ts
|
|
15553
|
+
var ASK_RELAY_TOOL;
|
|
15514
15554
|
var init_custom_agents = __esm({
|
|
15515
15555
|
"../runner/src/custom-agents.ts"() {
|
|
15516
15556
|
"use strict";
|
|
@@ -15518,6 +15558,31 @@ var init_custom_agents = __esm({
|
|
|
15518
15558
|
init_code_style();
|
|
15519
15559
|
init_prompt();
|
|
15520
15560
|
init_agent_readonly();
|
|
15561
|
+
ASK_RELAY_TOOL = "ajukan semuanya lewat AskUserQuestion (pecah per 4 pertanyaan), lalu teruskan jawabannya lewat SendMessage ke agent ID yang sama";
|
|
15562
|
+
}
|
|
15563
|
+
});
|
|
15564
|
+
|
|
15565
|
+
// ../runner/src/ask-via.ts
|
|
15566
|
+
var NO_TOOL, TEXT_ASK_ROUTE, SWAPS;
|
|
15567
|
+
var init_ask_via = __esm({
|
|
15568
|
+
"../runner/src/ask-via.ts"() {
|
|
15569
|
+
"use strict";
|
|
15570
|
+
init_prompt();
|
|
15571
|
+
init_custom_agents();
|
|
15572
|
+
NO_TOOL = "JANGAN memakai AskUserQuestion (juga bila sebuah skill menyuruhnya)";
|
|
15573
|
+
TEXT_ASK_ROUTE = `${NO_TOOL}: tanyakan di terminal ini sekaligus dalam satu pesan, tiap pertanyaan bernomor dan diakhiri \`?\` beserta opsi, rekomendasi dan alasannya, lalu berhenti dan tunggu jawabannya. Tak ada batas jumlah pertanyaan: selama masih ambigu dan akan mempengaruhi hasil, tanyakan. Yang menjawab ditentukan hanoman \u2014 ${DECIDER}; jangan menjawabnya sendiri.`;
|
|
15574
|
+
SWAPS = [
|
|
15575
|
+
[ASK_ROUTE, TEXT_ASK_ROUTE],
|
|
15576
|
+
[
|
|
15577
|
+
ASK_DECISIONS_TOOL,
|
|
15578
|
+
`di terminal ini sekaligus dalam satu pesan (${NO_TOOL}), tiap pertanyaan bernomor dan diakhiri \`?\` beserta opsi, rekomendasi dan alasannya, lalu berhenti dan tunggu jawaban`
|
|
15579
|
+
],
|
|
15580
|
+
[
|
|
15581
|
+
ASK_RELAY_TOOL,
|
|
15582
|
+
`ajukan semuanya di terminal ini (${NO_TOOL}; bernomor, tiap pertanyaan diakhiri \`?\`), lalu teruskan jawabannya lewat SendMessage ke agent ID yang sama`
|
|
15583
|
+
],
|
|
15584
|
+
[ASK_ESCALATION_TOOL, `tanyakan di terminal ini (${NO_TOOL}) lalu berhenti dan tunggu jawaban`]
|
|
15585
|
+
];
|
|
15521
15586
|
}
|
|
15522
15587
|
});
|
|
15523
15588
|
|
|
@@ -16171,6 +16236,7 @@ var init_src2 = __esm({
|
|
|
16171
16236
|
init_codex_settings();
|
|
16172
16237
|
init_agent_cli();
|
|
16173
16238
|
init_custom_agents();
|
|
16239
|
+
init_ask_via();
|
|
16174
16240
|
init_agent_definition();
|
|
16175
16241
|
init_phase_agents();
|
|
16176
16242
|
init_agent_readonly();
|