hanoman 0.1.18 → 0.1.20
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 +80 -8
- package/dist/server.js +366 -66
- package/docs/agent-integration.md +5 -2
- package/package.json +1 -1
- package/prisma/schema.prisma +1 -1
- package/web/assets/{index-BrlNu5Qe.js → index-BJTj--gG.js} +1546 -1546
- package/web/index.html +1 -1
package/dist/build-info.json
CHANGED
package/dist/cli.js
CHANGED
|
@@ -63,6 +63,25 @@ var init_verify_scope = __esm({
|
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
65
|
|
|
66
|
+
// ../runner/src/code-style.ts
|
|
67
|
+
var CODE_STYLE_CLAUSE;
|
|
68
|
+
var init_code_style = __esm({
|
|
69
|
+
"../runner/src/code-style.ts"() {
|
|
70
|
+
"use strict";
|
|
71
|
+
CODE_STYLE_CLAUSE = [
|
|
72
|
+
"Gaya kode \u2014 berlaku setiap kali kamu menulis atau mengubah kode:",
|
|
73
|
+
"- Tulis kode yang rapi dan mengikuti idiom, penamaan, serta struktur kode di sekitarnya.",
|
|
74
|
+
" Kodemu harus terbaca seperti kode yang sudah ada di berkas itu, bukan seperti tempelan.",
|
|
75
|
+
"- Jangan menulis komentar yang cuma mengulang apa yang sudah dinyatakan kode.",
|
|
76
|
+
"- Komentar hanya untuk hal yang TIDAK terbaca dari kode: alasan/why sebuah keputusan,",
|
|
77
|
+
" trade-off yang diambil, workaround beserta rujukan SPEC/ADR-nya, atau invariant yang tak",
|
|
78
|
+
" kelihatan. Komentar semacam itu justru berharga \u2014 jangan ikut dibuang.",
|
|
79
|
+
"- Jangan menambahkan komentar pembatas seksi, header berhiasan, atau narasi langkah demi langkah.",
|
|
80
|
+
"- Jangan meninggalkan kode mati atau kode yang dikomentari. Hapus saja; riwayat git yang menyimpannya."
|
|
81
|
+
].join("\n");
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
|
|
66
85
|
// ../runner/src/goal-spec.ts
|
|
67
86
|
var init_goal_spec = __esm({
|
|
68
87
|
"../runner/src/goal-spec.ts"() {
|
|
@@ -77,6 +96,7 @@ var init_prompt = __esm({
|
|
|
77
96
|
"use strict";
|
|
78
97
|
init_reverse_standard();
|
|
79
98
|
init_verify_scope();
|
|
99
|
+
init_code_style();
|
|
80
100
|
init_goal_spec();
|
|
81
101
|
ESCALATION_CONTRACT = [
|
|
82
102
|
"REKOMENDASI ESKALASI (wajib, terbaca mesin). Di bagian akhir dokumen audit, tulis bagian",
|
|
@@ -4418,7 +4438,7 @@ var init_auto_merge = __esm({
|
|
|
4418
4438
|
});
|
|
4419
4439
|
|
|
4420
4440
|
// ../shared/src/entities.ts
|
|
4421
|
-
var zProject, zBriefPayload, zQaPayload, zGoalPayload, zSpecBlocker, zSpec, NOTIFY_SOUNDS, zCodex, CODEX_DEFAULTS, zSourceCommon, zScheduler, SCHEDULER_DEFAULTS, zGoal, GOAL_DEFAULTS, zConflict, CONFLICT_DEFAULTS, zLeadEngine, zLead, LEAD_DEFAULTS, zSetting, zNotification, zDocFile, zDeviceTokenView;
|
|
4441
|
+
var zProject, zBriefPayload, zQaPayload, zGoalPayload, zSpecBlocker, zSpec, NOTIFY_SOUNDS, zCodex, CODEX_DEFAULTS, zSourceCommon, zScheduler, SCHEDULER_DEFAULTS, zGoal, GOAL_DEFAULTS, zConflict, CONFLICT_DEFAULTS, CHANGELOG_ENGINE_DEFAULTS, zLeadEngine, zLead, LEAD_DEFAULTS, zSetting, zNotification, zDocFile, zDeviceTokenView;
|
|
4422
4442
|
var init_entities = __esm({
|
|
4423
4443
|
"../shared/src/entities.ts"() {
|
|
4424
4444
|
"use strict";
|
|
@@ -4547,6 +4567,7 @@ var init_entities = __esm({
|
|
|
4547
4567
|
effort: external_exports.string().default("xhigh")
|
|
4548
4568
|
});
|
|
4549
4569
|
CONFLICT_DEFAULTS = zConflict.parse({});
|
|
4570
|
+
CHANGELOG_ENGINE_DEFAULTS = zAgentEngine.parse({});
|
|
4550
4571
|
zLeadEngine = zAgentEngine;
|
|
4551
4572
|
zLead = external_exports.object({
|
|
4552
4573
|
enabled: external_exports.boolean().default(false),
|
|
@@ -4618,8 +4639,10 @@ var init_entities = __esm({
|
|
|
4618
4639
|
// SPEC-383 · ADR-0081 · default sesi konflik rebase/merge
|
|
4619
4640
|
lead: zLead.default(LEAD_DEFAULTS),
|
|
4620
4641
|
// SPEC-409 · ADR-0091 · hanoman-lead (default mati)
|
|
4621
|
-
telegram: zTelegramSettings.default(TELEGRAM_DEFAULTS)
|
|
4642
|
+
telegram: zTelegramSettings.default(TELEGRAM_DEFAULTS),
|
|
4622
4643
|
// SPEC-476 · ADR-0096 · gateway Telegram (default mati)
|
|
4644
|
+
changelog: zAgentEngine.default(CHANGELOG_ENGINE_DEFAULTS)
|
|
4645
|
+
// SPEC-518 · agen pembuat changelog (opt-in, mati)
|
|
4623
4646
|
});
|
|
4624
4647
|
zNotification = external_exports.object({
|
|
4625
4648
|
id: external_exports.string(),
|
|
@@ -4922,8 +4945,19 @@ var init_lead = __esm({
|
|
|
4922
4945
|
}
|
|
4923
4946
|
});
|
|
4924
4947
|
|
|
4948
|
+
// ../shared/src/prd-status.ts
|
|
4949
|
+
var PRD_STATUSES, zPrdStatus;
|
|
4950
|
+
var init_prd_status = __esm({
|
|
4951
|
+
"../shared/src/prd-status.ts"() {
|
|
4952
|
+
"use strict";
|
|
4953
|
+
init_zod();
|
|
4954
|
+
PRD_STATUSES = ["draft", "dieskalasi", "terwujud"];
|
|
4955
|
+
zPrdStatus = external_exports.enum(PRD_STATUSES);
|
|
4956
|
+
}
|
|
4957
|
+
});
|
|
4958
|
+
|
|
4925
4959
|
// ../shared/src/dto.ts
|
|
4926
|
-
var zIssueDeviceToken, zSessionResult, zSessionHistory, zCreateProject, zProjectId, zRenameProject, zUpdateProject, zCreateSpec, zPatchSpec, zIntegrate, zSessionSummary, zProjectView, zSchedulerQueueItem, zSchedulerSourceView, zSchedulerSessionView, 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, zLogin, zSignup, zChangePassword, zVpsCheck, zMarkNa, zMarkNaBulk, zAttest, zRemediate, UPDATE_RESTART_EXIT, zUpdateApplyBody, zTicketView, zTicketAttachmentView, zTicketDetail, zTicketEditInput, zHelpInfo, zPublicTicketStatus;
|
|
4960
|
+
var zIssueDeviceToken, zSessionResult, zSessionHistory, zCreateProject, zProjectId, zRenameProject, zUpdateProject, zCreateSpec, zPatchSpec, 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, zLogin, zSignup, zChangePassword, zVpsCheck, zMarkNa, zMarkNaBulk, zAttest, zRemediate, UPDATE_RESTART_EXIT, zUpdateApplyBody, zTicketView, zTicketAttachmentView, zTicketDetail, zTicketEditInput, zHelpInfo, zPublicTicketStatus;
|
|
4927
4961
|
var init_dto = __esm({
|
|
4928
4962
|
"../shared/src/dto.ts"() {
|
|
4929
4963
|
"use strict";
|
|
@@ -4931,6 +4965,7 @@ var init_dto = __esm({
|
|
|
4931
4965
|
init_entities();
|
|
4932
4966
|
init_lead();
|
|
4933
4967
|
init_auto_merge();
|
|
4968
|
+
init_prd_status();
|
|
4934
4969
|
init_enums();
|
|
4935
4970
|
zIssueDeviceToken = external_exports.object({ name: external_exports.string().min(1) });
|
|
4936
4971
|
zSessionResult = external_exports.object({
|
|
@@ -5075,12 +5110,21 @@ var init_dto = __esm({
|
|
|
5075
5110
|
decision: external_exports.boolean(),
|
|
5076
5111
|
exited: external_exports.boolean()
|
|
5077
5112
|
});
|
|
5113
|
+
zSchedulerQueueCounts = external_exports.object({
|
|
5114
|
+
queued: external_exports.number().int(),
|
|
5115
|
+
launched: external_exports.number().int(),
|
|
5116
|
+
done: external_exports.number().int(),
|
|
5117
|
+
failed: external_exports.number().int(),
|
|
5118
|
+
// SPEC-522 · `canceled` adalah nilai kelima `status`; hitungannya ikut supaya panel bisa
|
|
5119
|
+
// menampilkan seksi "Dibatalkan" tanpa memuat daftarnya.
|
|
5120
|
+
canceled: external_exports.number().int()
|
|
5121
|
+
});
|
|
5078
5122
|
zSchedulerState = external_exports.object({
|
|
5079
5123
|
config: zScheduler,
|
|
5080
5124
|
cap: external_exports.number(),
|
|
5081
5125
|
liveCount: external_exports.number(),
|
|
5082
5126
|
sources: external_exports.array(zSchedulerSourceView),
|
|
5083
|
-
|
|
5127
|
+
queueCounts: zSchedulerQueueCounts,
|
|
5084
5128
|
sessions: external_exports.array(zSchedulerSessionView)
|
|
5085
5129
|
});
|
|
5086
5130
|
zLeadDecisionView = external_exports.object({
|
|
@@ -5188,7 +5232,13 @@ var init_dto = __esm({
|
|
|
5188
5232
|
title: external_exports.string(),
|
|
5189
5233
|
live: external_exports.boolean(),
|
|
5190
5234
|
projectId: external_exports.string(),
|
|
5191
|
-
projectName: external_exports.string()
|
|
5235
|
+
projectName: external_exports.string(),
|
|
5236
|
+
// SPEC-520 · status TURUNAN dari backlog yang lahir dari PRD ini (ADR-0018/0019) — bukan
|
|
5237
|
+
// kolom, bukan prosa di dalam dokumennya. `live` di atas menjawab pertanyaan LAIN
|
|
5238
|
+
// (freshest-wins dari worktree sesi prd hidup) dan sengaja tetap ortogonal.
|
|
5239
|
+
status: zPrdStatus,
|
|
5240
|
+
specCount: external_exports.number().int().nonnegative(),
|
|
5241
|
+
doneCount: external_exports.number().int().nonnegative()
|
|
5192
5242
|
});
|
|
5193
5243
|
zBreakdownItem = external_exports.object({
|
|
5194
5244
|
title: external_exports.string().min(1),
|
|
@@ -5233,9 +5283,10 @@ var init_dto = __esm({
|
|
|
5233
5283
|
// pipeline claude). DIDAHULUKAN: z.object non-strict membuang key asing, jadi bila varian
|
|
5234
5284
|
// longgar {project,flow?} lebih dulu, {project,shell:true} akan lolos sbg plain (shell dibuang).
|
|
5235
5285
|
external_exports.object({ project: external_exports.string(), shell: external_exports.literal(true) }),
|
|
5236
|
-
//
|
|
5237
|
-
//
|
|
5238
|
-
|
|
5286
|
+
// SPEC-166 · "reverse" = sesi project-level di worktree-nya sendiri, menyusun Source of Truth
|
|
5287
|
+
// dari kode. TANPA override runtime: sesi project-level mengikuti Setting.agent (ADR-0074).
|
|
5288
|
+
// Terminal biasa (tanpa flow) kini punya variannya SENDIRI di bawah — lihat SPEC-517.
|
|
5289
|
+
external_exports.object({ project: external_exports.string(), flow: external_exports.literal("reverse") }),
|
|
5239
5290
|
// SPEC-210 · sesi prd project-level di worktree sendiri; menghasilkan dokumen PRD dari brief.
|
|
5240
5291
|
// SPEC-340 · ADR-0076 · eskalasi audit → PRD: branchFrom = branch audit (worktree lahir dari sana,
|
|
5241
5292
|
// resolveCommit + fallback origin/<rev>), fromAudit = id spec audit (isi dokumennya disematkan ke
|
|
@@ -5252,6 +5303,18 @@ var init_dto = __esm({
|
|
|
5252
5303
|
// SPEC-222 · scaffold: sesi project-level from-scratch, menyusun SoT dari ide. Tanpa brief
|
|
5253
5304
|
// (diseed dari Project.desc), tanpa Spec — cermin reverse.
|
|
5254
5305
|
external_exports.object({ project: external_exports.string(), flow: external_exports.literal("scaffold") }),
|
|
5306
|
+
// SPEC-517 · terminal agen biasa: agen (claude|codex) + model + effort boleh dipilih PER SESI,
|
|
5307
|
+
// seperti picker Start backlog (ADR-0061/0074). Kosong → default global (Setting).
|
|
5308
|
+
// `flow: z.undefined()` BUKAN hiasan: varian ini permisif dan diletakkan SESUDAH semua varian
|
|
5309
|
+
// ber-flow, jadi tanpa gerbang itu body flow yang CACAT ({project, flow:"prd"} tanpa brief)
|
|
5310
|
+
// akan lolos ke sini dan melahirkan terminal biasa secara senyap alih-alih dijawab 400.
|
|
5311
|
+
external_exports.object({
|
|
5312
|
+
project: external_exports.string(),
|
|
5313
|
+
flow: external_exports.undefined(),
|
|
5314
|
+
agent: zAgent.optional(),
|
|
5315
|
+
model: external_exports.string().optional(),
|
|
5316
|
+
effort: external_exports.string().optional()
|
|
5317
|
+
}),
|
|
5255
5318
|
// SPEC-252 · ADR-0061 — model & effort per SESI: override opsional saat Start; kosong → global.
|
|
5256
5319
|
// SPEC-332 · ADR-0073 — mode goal per SESI: `goal` undefined → ikut Setting.goal.enabled,
|
|
5257
5320
|
// false → mati walau global nyala; `goalCondition` kosong → template global → default bawaan.
|
|
@@ -5501,6 +5564,12 @@ var init_api = __esm({
|
|
|
5501
5564
|
// SPEC-299 · panel scheduler (daun #6) — konsumen read-only fondasi SPEC-294/ADR-0072.
|
|
5502
5565
|
schedulerConfig: `${API}/scheduler/config`,
|
|
5503
5566
|
schedulerState: `${API}/scheduler/state`,
|
|
5567
|
+
// SPEC-522 · ADR-0106 · batalkan / antre lagi SATU baris antrean. Di bawah prefix `scheduler`
|
|
5568
|
+
// supaya capability-nya turunan peta yang sudah ada (settings, MENURUT METHOD) — tanpa baris peta baru.
|
|
5569
|
+
schedulerQueueCancel: (id) => `${API}/scheduler/queue/${encodeURIComponent(id)}/cancel`,
|
|
5570
|
+
schedulerQueueRequeue: (id) => `${API}/scheduler/queue/${encodeURIComponent(id)}/requeue`,
|
|
5571
|
+
// SPEC-523 · antrean sebagai daftar berhalaman (page/limit + status), lepas dari `state`.
|
|
5572
|
+
schedulerQueue: `${API}/scheduler/queue`,
|
|
5504
5573
|
// SPEC-409 · ADR-0091 · hanoman-lead. Semua HTTP (polling) — tak ada kanal WS baru (AC-26).
|
|
5505
5574
|
leadConfig: `${API}/lead/config`,
|
|
5506
5575
|
leadStatus: `${API}/lead/status`,
|
|
@@ -6907,6 +6976,7 @@ var init_src = __esm({
|
|
|
6907
6976
|
init_api();
|
|
6908
6977
|
init_coverage();
|
|
6909
6978
|
init_ticket_status();
|
|
6979
|
+
init_prd_status();
|
|
6910
6980
|
init_session_kind();
|
|
6911
6981
|
init_config();
|
|
6912
6982
|
init_config_registry();
|
|
@@ -6924,6 +6994,7 @@ var init_custom_agents = __esm({
|
|
|
6924
6994
|
"../runner/src/custom-agents.ts"() {
|
|
6925
6995
|
"use strict";
|
|
6926
6996
|
init_src();
|
|
6997
|
+
init_code_style();
|
|
6927
6998
|
}
|
|
6928
6999
|
});
|
|
6929
7000
|
|
|
@@ -7006,6 +7077,7 @@ var init_src2 = __esm({
|
|
|
7006
7077
|
init_agent_cli();
|
|
7007
7078
|
init_custom_agents();
|
|
7008
7079
|
init_verify_scope();
|
|
7080
|
+
init_code_style();
|
|
7009
7081
|
init_paths();
|
|
7010
7082
|
init_telegram_operator();
|
|
7011
7083
|
}
|