hanoman 0.1.5 → 0.1.7
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 +177 -117
- package/dist/server.js +1520 -1636
- package/package.json +1 -1
- package/prisma/migrations/20260731000000_spec_created_started_at/migration.sql +43 -0
- package/prisma/migrations/20260731120000_lead_decision/migration.sql +33 -0
- package/prisma/migrations/20260731180000_drop_errors_sdk_crossaudit/migration.sql +58 -0
- package/prisma/schema.prisma +44 -87
- package/web/assets/{index-CeJYUp36.js → index-BWyQwoAk.js} +1530 -1531
- package/web/index.html +1 -1
package/dist/build-info.json
CHANGED
package/dist/cli.js
CHANGED
|
@@ -4337,29 +4337,27 @@ var init_zod = __esm({
|
|
|
4337
4337
|
});
|
|
4338
4338
|
|
|
4339
4339
|
// ../shared/src/enums.ts
|
|
4340
|
-
var zStage, zSpecSource, zDocStatus, zPriority, zProjectKind, zAgent, zSeverity,
|
|
4340
|
+
var zStage, zSpecSource, zDocStatus, zPriority, zProjectKind, zAgent, zSeverity, zTicketCategory, zTicketStatus, VERIFY_SCOPES, zVerifyScope;
|
|
4341
4341
|
var init_enums = __esm({
|
|
4342
4342
|
"../shared/src/enums.ts"() {
|
|
4343
4343
|
"use strict";
|
|
4344
4344
|
init_zod();
|
|
4345
4345
|
zStage = external_exports.enum(["brainstorming", "objective", "spec-ready", "planned", "executing", "done"]);
|
|
4346
|
-
zSpecSource = external_exports.enum(["brief", "qa", "audit", "
|
|
4346
|
+
zSpecSource = external_exports.enum(["brief", "qa", "audit", "help", "goal"]);
|
|
4347
4347
|
zDocStatus = external_exports.enum(["ok", "drift", "broken"]);
|
|
4348
4348
|
zPriority = external_exports.enum(["tinggi", "sedang", "rendah"]);
|
|
4349
4349
|
zProjectKind = external_exports.enum(["from-scratch", "existing"]);
|
|
4350
4350
|
zAgent = external_exports.enum(["claude", "codex"]);
|
|
4351
4351
|
zSeverity = external_exports.enum(["critical", "major", "minor"]);
|
|
4352
|
-
zErrorStatus = external_exports.enum(["new", "escalated", "resolved"]);
|
|
4353
4352
|
zTicketCategory = external_exports.enum(["bug", "fitur", "pertanyaan", "lainnya"]);
|
|
4354
4353
|
zTicketStatus = external_exports.enum(["new", "accepted", "rejected"]);
|
|
4355
|
-
zLinkKind = external_exports.enum(["api", "sdk", "data", "event", "lainnya"]);
|
|
4356
4354
|
VERIFY_SCOPES = ["changed", "full"];
|
|
4357
4355
|
zVerifyScope = external_exports.enum(VERIFY_SCOPES);
|
|
4358
4356
|
}
|
|
4359
4357
|
});
|
|
4360
4358
|
|
|
4361
4359
|
// ../shared/src/entities.ts
|
|
4362
|
-
var zProject, zBriefPayload, zQaPayload, zGoalPayload, zSpec, NOTIFY_SOUNDS, zCodex, CODEX_DEFAULTS, zSourceCommon, zScheduler, SCHEDULER_DEFAULTS, zGoal, GOAL_DEFAULTS, zConflict, CONFLICT_DEFAULTS, zSetting, zNotification, zDocFile, zDeviceTokenView;
|
|
4360
|
+
var zProject, zBriefPayload, zQaPayload, zGoalPayload, zSpec, NOTIFY_SOUNDS, zCodex, CODEX_DEFAULTS, zSourceCommon, zScheduler, SCHEDULER_DEFAULTS, zGoal, GOAL_DEFAULTS, zConflict, CONFLICT_DEFAULTS, zLeadEngine, zLead, LEAD_DEFAULTS, zSetting, zNotification, zDocFile, zDeviceTokenView;
|
|
4363
4361
|
var init_entities = __esm({
|
|
4364
4362
|
"../shared/src/entities.ts"() {
|
|
4365
4363
|
"use strict";
|
|
@@ -4394,9 +4392,7 @@ var init_entities = __esm({
|
|
|
4394
4392
|
expected: external_exports.string(),
|
|
4395
4393
|
actual: external_exports.string(),
|
|
4396
4394
|
env: external_exports.string(),
|
|
4397
|
-
fromAudit: external_exports.string().optional()
|
|
4398
|
-
// SPEC-244 · qa dinaikkan dari audit → sinyal skip fase Audit (ADR-0059)
|
|
4399
|
-
fromErrorGroup: external_exports.string().optional()
|
|
4395
|
+
fromAudit: external_exports.string().optional()
|
|
4400
4396
|
});
|
|
4401
4397
|
zGoalPayload = external_exports.object({
|
|
4402
4398
|
goal: external_exports.string(),
|
|
@@ -4417,8 +4413,12 @@ var init_entities = __esm({
|
|
|
4417
4413
|
// SPEC-407 · +goal
|
|
4418
4414
|
branchFrom: external_exports.string().nullable(),
|
|
4419
4415
|
// SPEC-143 · null = default project (main)
|
|
4420
|
-
baseSha: external_exports.string().nullable()
|
|
4416
|
+
baseSha: external_exports.string().nullable(),
|
|
4421
4417
|
// SPEC-186 · null = belum pernah ada sesi (belum dimulai)
|
|
4418
|
+
// SPEC-408 · ADR-0090 · stempel waktu backlog (ISO string di wire — kolom DateTime di DB).
|
|
4419
|
+
// `startedAt` null = belum pernah dikerjakan; ia tak pernah ditulis ulang saat sesi dilanjutkan.
|
|
4420
|
+
createdAt: external_exports.string(),
|
|
4421
|
+
startedAt: external_exports.string().nullable()
|
|
4422
4422
|
});
|
|
4423
4423
|
NOTIFY_SOUNDS = [
|
|
4424
4424
|
"off",
|
|
@@ -4453,7 +4453,6 @@ var init_entities = __esm({
|
|
|
4453
4453
|
// dikonsumsi daun #5
|
|
4454
4454
|
sources: external_exports.object({
|
|
4455
4455
|
backlog: external_exports.object({ ...zSourceCommon, everyMin: external_exports.number().int().min(1).default(15) }).default({}),
|
|
4456
|
-
errors: external_exports.object({ ...zSourceCommon, everyMin: external_exports.number().int().min(1).default(15), minCount: external_exports.number().int().min(1).default(5) }).default({}),
|
|
4457
4456
|
triase: external_exports.object({ ...zSourceCommon, everyMin: external_exports.number().int().min(1).default(30) }).default({})
|
|
4458
4457
|
}).default({})
|
|
4459
4458
|
});
|
|
@@ -4471,6 +4470,35 @@ var init_entities = __esm({
|
|
|
4471
4470
|
effort: external_exports.string().default("xhigh")
|
|
4472
4471
|
});
|
|
4473
4472
|
CONFLICT_DEFAULTS = zConflict.parse({});
|
|
4473
|
+
zLeadEngine = external_exports.object({
|
|
4474
|
+
enabled: external_exports.boolean().default(false),
|
|
4475
|
+
agent: zAgent.default("claude"),
|
|
4476
|
+
model: external_exports.string().default("claude-opus-5"),
|
|
4477
|
+
effort: external_exports.string().default("xhigh")
|
|
4478
|
+
});
|
|
4479
|
+
zLead = external_exports.object({
|
|
4480
|
+
enabled: external_exports.boolean().default(false),
|
|
4481
|
+
// master switch (AC-30)
|
|
4482
|
+
paused: external_exports.boolean().default(false),
|
|
4483
|
+
// rem darurat global (AC-27)
|
|
4484
|
+
pausedProjects: external_exports.array(external_exports.string()).default([]),
|
|
4485
|
+
// rem per project (AC-15/US-4)
|
|
4486
|
+
everyMin: external_exports.number().int().min(1).max(1440).default(5),
|
|
4487
|
+
// denyut proaktif (OQ-2)
|
|
4488
|
+
// SPEC-432 · batas waktu satu putusan (AC-4/35). Default 120 dtk MELAWAN prompt lead sendiri
|
|
4489
|
+
// ("kumpulkan bukti dulu: SoT, ADR, plan, kode, riwayat git") dan kalah: satu keputusan `order`
|
|
4490
|
+
// nyata terukur 306 dtk pada claude-opus-5 · xhigh, jadi 7/7 baris jejak operator berstatus
|
|
4491
|
+
// `gagal`. 600 dtk memberi kelonggaran di atas ongkos terukur itu; yang memangkas ongkosnya
|
|
4492
|
+
// sendiri adalah paragraf anggaran waktu di `leadPrompt` (306 dtk → 101 dtk).
|
|
4493
|
+
timeoutSec: external_exports.number().int().min(10).max(900).default(600),
|
|
4494
|
+
// AC-11 / OQ-10 · berapa jawaban otomatis berturut-turut untuk SATU sesi sebelum lead berhenti.
|
|
4495
|
+
maxAutoAnswers: external_exports.number().int().min(1).max(20).default(3),
|
|
4496
|
+
// OQ-3 · syarat objektif sebelum lead boleh mengintegrasikan ke branch utama. Default MENYALA:
|
|
4497
|
+
// risiko "kode masuk main tanpa mata manusia" diterima sadar, tapi syaratnya tetap terukur.
|
|
4498
|
+
requireGreenBeforeIntegrate: external_exports.boolean().default(true),
|
|
4499
|
+
engine: zLeadEngine.default({})
|
|
4500
|
+
});
|
|
4501
|
+
LEAD_DEFAULTS = zLead.parse({});
|
|
4474
4502
|
zSetting = external_exports.object({
|
|
4475
4503
|
model: external_exports.string().default("claude-opus-5"),
|
|
4476
4504
|
effort: external_exports.string().default("xhigh"),
|
|
@@ -4497,13 +4525,18 @@ var init_entities = __esm({
|
|
|
4497
4525
|
// SPEC-338 · ADR-0074 · model/effort codex
|
|
4498
4526
|
verifyScope: zVerifyScope.default("changed"),
|
|
4499
4527
|
// SPEC-376 · ADR-0080 · scope verifikasi sesi
|
|
4500
|
-
conflict: zConflict.default(CONFLICT_DEFAULTS)
|
|
4528
|
+
conflict: zConflict.default(CONFLICT_DEFAULTS),
|
|
4501
4529
|
// SPEC-383 · ADR-0081 · default sesi konflik rebase/merge
|
|
4530
|
+
lead: zLead.default(LEAD_DEFAULTS)
|
|
4531
|
+
// SPEC-409 · ADR-0091 · hanoman-lead (default mati)
|
|
4502
4532
|
});
|
|
4503
4533
|
zNotification = external_exports.object({
|
|
4504
4534
|
id: external_exports.string(),
|
|
4505
|
-
|
|
4506
|
-
// SPEC-
|
|
4535
|
+
// SPEC-253 · +ticket; SPEC-298 · +fail (sesi scheduler gagal/limit)
|
|
4536
|
+
// SPEC-409 · +lead (ADR-0091): keputusan berbobot / ragu / tindakan terkunci ditolak. MEMBERI
|
|
4537
|
+
// TAHU, bukan meminta izin — tak ada pekerjaan yang menunggu notifikasi ini dibaca (AC-25).
|
|
4538
|
+
// SPEC-384 · −error (ADR-0092) · dicabut bersama error monitoring.
|
|
4539
|
+
type: external_exports.enum(["done", "decision", "ticket", "fail", "lead"]).default("done"),
|
|
4507
4540
|
specId: external_exports.string().nullable(),
|
|
4508
4541
|
sessionId: external_exports.string().nullable(),
|
|
4509
4542
|
title: external_exports.string(),
|
|
@@ -4553,7 +4586,13 @@ var init_agent = __esm({
|
|
|
4553
4586
|
"support:read",
|
|
4554
4587
|
"support:write",
|
|
4555
4588
|
"notifications:read",
|
|
4556
|
-
"notifications:write"
|
|
4589
|
+
"notifications:write",
|
|
4590
|
+
// SPEC-409 · ADR-0091 · minta putusan ke hanoman-lead + baca jejak keputusan. Domain TERSENDIRI,
|
|
4591
|
+
// bukan menumpang prefix baca yang sudah ada: meminta putusan adalah operasi TULIS (ia melahirkan
|
|
4592
|
+
// baris jejak & bisa menggerakkan sesi), dan SPEC-405 sudah membuktikan apa yang terjadi saat
|
|
4593
|
+
// endpoint tulis menumpang prefix status yang dipetakan tanpa melihat method (AC-5).
|
|
4594
|
+
"lead:read",
|
|
4595
|
+
"lead:write"
|
|
4557
4596
|
];
|
|
4558
4597
|
zCapability = external_exports.enum(CAPABILITY_IDS);
|
|
4559
4598
|
zCapabilityInfo = external_exports.object({
|
|
@@ -4587,13 +4626,77 @@ var init_agent = __esm({
|
|
|
4587
4626
|
}
|
|
4588
4627
|
});
|
|
4589
4628
|
|
|
4629
|
+
// ../shared/src/lead.ts
|
|
4630
|
+
var zLeadGate, zLeadKind, zLeadConfidence, zLeadStatus, LEAD_ACTIONS, zLeadAction, zLeadVerdict, zLeadAsk, zLeadOverride;
|
|
4631
|
+
var init_lead = __esm({
|
|
4632
|
+
"../shared/src/lead.ts"() {
|
|
4633
|
+
"use strict";
|
|
4634
|
+
init_zod();
|
|
4635
|
+
zLeadGate = external_exports.enum(["contract", "detected", "pulse"]);
|
|
4636
|
+
zLeadKind = external_exports.enum(["answer", "order", "collision", "quality", "refusal"]);
|
|
4637
|
+
zLeadConfidence = external_exports.enum(["tinggi", "sedang", "ragu"]);
|
|
4638
|
+
zLeadStatus = external_exports.enum(["berlaku", "ditimpa", "dibatalkan", "gagal"]);
|
|
4639
|
+
LEAD_ACTIONS = [
|
|
4640
|
+
"none",
|
|
4641
|
+
// keputusan murni jawaban; tak ada tindakan menyusul
|
|
4642
|
+
"answer-session",
|
|
4643
|
+
// ketik jawaban ke pane sesi (pintu deteksi otomatis)
|
|
4644
|
+
"start-session",
|
|
4645
|
+
// mulai sesi untuk sebuah backlog (lewat antrean scheduler)
|
|
4646
|
+
"stop-session",
|
|
4647
|
+
// hentikan sesi — worktree DIBIARKAN utuh (AC-32a)
|
|
4648
|
+
"resume-session",
|
|
4649
|
+
// lanjutkan sesi terputus (jalur ADR-0084)
|
|
4650
|
+
"restart-session",
|
|
4651
|
+
// ulangi pekerjaan dari awal
|
|
4652
|
+
"order-queue",
|
|
4653
|
+
// tata urutan antrean yang sudah ada (ADR-0072) — bukan antrean kedua
|
|
4654
|
+
"hold-work",
|
|
4655
|
+
// tunda satu pekerjaan karena tabrakan area kerja
|
|
4656
|
+
"push-branch",
|
|
4657
|
+
// dorong perubahan ke branch
|
|
4658
|
+
"integrate-main",
|
|
4659
|
+
// integrasikan ke branch utama (risiko yang diterima sadar, PRD §Risiko)
|
|
4660
|
+
"run-migration"
|
|
4661
|
+
// jalankan migration pada basis data LOKAL operator
|
|
4662
|
+
];
|
|
4663
|
+
zLeadAction = external_exports.enum(LEAD_ACTIONS);
|
|
4664
|
+
zLeadVerdict = external_exports.object({
|
|
4665
|
+
decision: external_exports.string().min(1),
|
|
4666
|
+
reason: external_exports.string().min(1),
|
|
4667
|
+
refs: external_exports.array(external_exports.string()).default([]),
|
|
4668
|
+
confidence: zLeadConfidence.default("sedang"),
|
|
4669
|
+
// Sengaja `string`, BUKAN `zLeadAction`: tindakan di luar allowlist harus bisa MASUK supaya
|
|
4670
|
+
// server menolaknya secara sadar — mencatat penolakan & menotifikasi operator (AC-33). Kalau
|
|
4671
|
+
// enum yang menyaring di sini, permintaan "deploy ke produksi" hanya akan tampak sebagai
|
|
4672
|
+
// keluaran rusak, dan justru peristiwa paling layak dilaporkan itulah yang hilang dari jejak.
|
|
4673
|
+
action: external_exports.string().default("none"),
|
|
4674
|
+
/** Teks yang benar-benar diketik ke pane sesi (pintu deteksi otomatis). */
|
|
4675
|
+
reply: external_exports.string().default("")
|
|
4676
|
+
});
|
|
4677
|
+
zLeadAsk = external_exports.object({
|
|
4678
|
+
projectId: external_exports.string().min(1),
|
|
4679
|
+
specId: external_exports.string().nullish(),
|
|
4680
|
+
sessionId: external_exports.string().nullish(),
|
|
4681
|
+
question: external_exports.string().min(1).max(8e3),
|
|
4682
|
+
options: external_exports.array(external_exports.string().max(2e3)).max(20).default([]),
|
|
4683
|
+
context: external_exports.string().max(2e4).default("")
|
|
4684
|
+
});
|
|
4685
|
+
zLeadOverride = external_exports.object({
|
|
4686
|
+
answer: external_exports.string().min(1).max(8e3),
|
|
4687
|
+
reason: external_exports.string().max(8e3).default("")
|
|
4688
|
+
});
|
|
4689
|
+
}
|
|
4690
|
+
});
|
|
4691
|
+
|
|
4590
4692
|
// ../shared/src/dto.ts
|
|
4591
|
-
var zIssueDeviceToken, zSessionResult, zSessionHistory, zCreateProject, zProjectId, zRenameProject,
|
|
4693
|
+
var zIssueDeviceToken, zSessionResult, zSessionHistory, zCreateProject, zProjectId, zRenameProject, zUpdateProject, zCreateSpec, zPatchSpec, zIntegrate, zSessionSummary, zProjectView, zSchedulerQueueItem, zSchedulerSourceView, zSchedulerSessionView, zSchedulerState, zLeadDecisionView, 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;
|
|
4592
4694
|
var init_dto = __esm({
|
|
4593
4695
|
"../shared/src/dto.ts"() {
|
|
4594
4696
|
"use strict";
|
|
4595
4697
|
init_zod();
|
|
4596
4698
|
init_entities();
|
|
4699
|
+
init_lead();
|
|
4597
4700
|
init_enums();
|
|
4598
4701
|
zIssueDeviceToken = external_exports.object({ name: external_exports.string().min(1) });
|
|
4599
4702
|
zSessionResult = external_exports.object({
|
|
@@ -4637,11 +4740,6 @@ var init_dto = __esm({
|
|
|
4637
4740
|
});
|
|
4638
4741
|
zProjectId = external_exports.string().regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/, "slug tak sah");
|
|
4639
4742
|
zRenameProject = external_exports.object({ newId: zProjectId });
|
|
4640
|
-
zCreateLink = external_exports.object({
|
|
4641
|
-
to: external_exports.string().min(1),
|
|
4642
|
-
kind: zLinkKind,
|
|
4643
|
-
note: external_exports.string().max(2e3).optional()
|
|
4644
|
-
});
|
|
4645
4743
|
zUpdateProject = external_exports.object({
|
|
4646
4744
|
name: external_exports.string().min(1).optional(),
|
|
4647
4745
|
desc: external_exports.string().optional(),
|
|
@@ -4649,8 +4747,10 @@ var init_dto = __esm({
|
|
|
4649
4747
|
// SPEC-213 · set git remote resmi project
|
|
4650
4748
|
repoDir: external_exports.string().nullable().optional(),
|
|
4651
4749
|
// SPEC-217 · path default/server editable (null = kosongkan)
|
|
4652
|
-
schedulerOptIn: external_exports.boolean().optional()
|
|
4750
|
+
schedulerOptIn: external_exports.boolean().optional(),
|
|
4653
4751
|
// SPEC-294 · opt-in scheduler otonom (lokal, tak disync)
|
|
4752
|
+
leadOptIn: external_exports.boolean().optional()
|
|
4753
|
+
// SPEC-409 · ADR-0091 · opt-in hanoman-lead (lokal, tak disync)
|
|
4654
4754
|
});
|
|
4655
4755
|
zCreateSpec = external_exports.object({
|
|
4656
4756
|
project: external_exports.string(),
|
|
@@ -4692,13 +4792,11 @@ var init_dto = __esm({
|
|
|
4692
4792
|
session: zSessionSummary,
|
|
4693
4793
|
activity: external_exports.string(),
|
|
4694
4794
|
commit: external_exports.string(),
|
|
4695
|
-
monitoringEnabled: external_exports.boolean().default(false),
|
|
4696
|
-
// SPEC-249 · error monitoring aktif (ingest key ada)
|
|
4697
|
-
ingestKeyPrefix: external_exports.string().nullable().default(null),
|
|
4698
|
-
// SPEC-249 · hint prefix DSN (bukan hash/rahasia)
|
|
4699
4795
|
helpEnabled: external_exports.boolean().default(false),
|
|
4700
4796
|
// SPEC-253 · Help Center publik aktif
|
|
4701
|
-
schedulerOptIn: external_exports.boolean().default(false)
|
|
4797
|
+
schedulerOptIn: external_exports.boolean().default(false),
|
|
4798
|
+
// SPEC-294 · opt-in scheduler otonom
|
|
4799
|
+
leadOptIn: external_exports.boolean().default(false)
|
|
4702
4800
|
});
|
|
4703
4801
|
zSchedulerQueueItem = external_exports.object({
|
|
4704
4802
|
id: external_exports.string(),
|
|
@@ -4716,8 +4814,6 @@ var init_dto = __esm({
|
|
|
4716
4814
|
id: external_exports.string(),
|
|
4717
4815
|
enabled: external_exports.boolean(),
|
|
4718
4816
|
everyMin: external_exports.number(),
|
|
4719
|
-
minCount: external_exports.number().optional(),
|
|
4720
|
-
// hanya errors
|
|
4721
4817
|
lastRunAt: external_exports.string().nullable(),
|
|
4722
4818
|
nextRunAt: external_exports.string().nullable()
|
|
4723
4819
|
});
|
|
@@ -4738,7 +4834,51 @@ var init_dto = __esm({
|
|
|
4738
4834
|
queue: external_exports.array(zSchedulerQueueItem),
|
|
4739
4835
|
sessions: external_exports.array(zSchedulerSessionView)
|
|
4740
4836
|
});
|
|
4741
|
-
|
|
4837
|
+
zLeadDecisionView = external_exports.object({
|
|
4838
|
+
id: external_exports.string(),
|
|
4839
|
+
projectId: external_exports.string(),
|
|
4840
|
+
specId: external_exports.string().nullable(),
|
|
4841
|
+
sessionId: external_exports.string().nullable(),
|
|
4842
|
+
gate: zLeadGate,
|
|
4843
|
+
kind: zLeadKind,
|
|
4844
|
+
question: external_exports.string(),
|
|
4845
|
+
answer: external_exports.string(),
|
|
4846
|
+
reason: external_exports.string(),
|
|
4847
|
+
refs: external_exports.array(external_exports.string()),
|
|
4848
|
+
confidence: zLeadConfidence,
|
|
4849
|
+
action: zLeadAction,
|
|
4850
|
+
status: zLeadStatus,
|
|
4851
|
+
weighty: external_exports.boolean(),
|
|
4852
|
+
supersededById: external_exports.string().nullable(),
|
|
4853
|
+
createdAt: external_exports.string()
|
|
4854
|
+
});
|
|
4855
|
+
zLeadAnswer = external_exports.object({
|
|
4856
|
+
id: external_exports.string(),
|
|
4857
|
+
decision: external_exports.string(),
|
|
4858
|
+
reason: external_exports.string(),
|
|
4859
|
+
refs: external_exports.array(external_exports.string()),
|
|
4860
|
+
confidence: zLeadConfidence,
|
|
4861
|
+
action: zLeadAction
|
|
4862
|
+
});
|
|
4863
|
+
zLeadProjectStatus = external_exports.object({
|
|
4864
|
+
projectId: external_exports.string(),
|
|
4865
|
+
name: external_exports.string(),
|
|
4866
|
+
optIn: external_exports.boolean(),
|
|
4867
|
+
paused: external_exports.boolean(),
|
|
4868
|
+
decisions24h: external_exports.number(),
|
|
4869
|
+
openSessions: external_exports.number()
|
|
4870
|
+
});
|
|
4871
|
+
zLeadStatusView = external_exports.object({
|
|
4872
|
+
config: zLead,
|
|
4873
|
+
projects: external_exports.array(zLeadProjectStatus),
|
|
4874
|
+
queue: external_exports.array(zSchedulerQueueItem),
|
|
4875
|
+
deciding: external_exports.array(external_exports.string()),
|
|
4876
|
+
// id sesi yang sedang disusun keputusannya (AC-3)
|
|
4877
|
+
waiting: external_exports.array(external_exports.string()),
|
|
4878
|
+
// id sesi ber-marker keputusan terisi
|
|
4879
|
+
lastPulseAt: external_exports.string().nullable()
|
|
4880
|
+
});
|
|
4881
|
+
zFlow = external_exports.enum(["feature", "qa", "scaffold", "reverse", "prd", "audit", "breakdown", "goal"]);
|
|
4742
4882
|
zPrdBrief = external_exports.object({
|
|
4743
4883
|
title: external_exports.string().min(1),
|
|
4744
4884
|
context: external_exports.string(),
|
|
@@ -4813,8 +4953,6 @@ var init_dto = __esm({
|
|
|
4813
4953
|
}),
|
|
4814
4954
|
// SPEC-273 · sesi breakdown project-level: pecah SATU PRD (prdPath) → manifest N backlog.
|
|
4815
4955
|
external_exports.object({ project: external_exports.string(), flow: external_exports.literal("breakdown"), prdPath: external_exports.string().min(1) }),
|
|
4816
|
-
// SPEC-337 · ADR-0075 · sesi audit lintas project LEPAS (tanya-jawab): tanpa Spec, tanpa fase.
|
|
4817
|
-
external_exports.object({ project: external_exports.string(), flow: external_exports.literal("cross-audit") }),
|
|
4818
4956
|
// SPEC-222 · scaffold: sesi project-level from-scratch, menyusun SoT dari ide. Tanpa brief
|
|
4819
4957
|
// (diseed dari Project.desc), tanpa Spec — cermin reverse.
|
|
4820
4958
|
external_exports.object({ project: external_exports.string(), flow: external_exports.literal("scaffold") }),
|
|
@@ -4886,75 +5024,6 @@ var init_dto = __esm({
|
|
|
4886
5024
|
zRemediate = external_exports.object({ items: external_exports.array(external_exports.string()).min(1).max(64) });
|
|
4887
5025
|
UPDATE_RESTART_EXIT = 75;
|
|
4888
5026
|
zUpdateApplyBody = external_exports.object({ confirm: external_exports.boolean().optional() });
|
|
4889
|
-
zStackFrame = external_exports.object({
|
|
4890
|
-
function: external_exports.string().max(500).optional(),
|
|
4891
|
-
filename: external_exports.string().max(2e3).optional(),
|
|
4892
|
-
lineno: external_exports.number().int().optional(),
|
|
4893
|
-
colno: external_exports.number().int().optional(),
|
|
4894
|
-
in_app: external_exports.boolean().optional()
|
|
4895
|
-
});
|
|
4896
|
-
zSymbolicatedFrame = zStackFrame.extend({
|
|
4897
|
-
source: external_exports.string().optional(),
|
|
4898
|
-
sourceLine: external_exports.number().int().optional(),
|
|
4899
|
-
sourceColumn: external_exports.number().int().optional(),
|
|
4900
|
-
contextLine: external_exports.string().optional(),
|
|
4901
|
-
preContext: external_exports.array(external_exports.string()).optional(),
|
|
4902
|
-
postContext: external_exports.array(external_exports.string()).optional(),
|
|
4903
|
-
symbolicated: external_exports.boolean()
|
|
4904
|
-
});
|
|
4905
|
-
zSourceMapUpload = external_exports.object({
|
|
4906
|
-
release: external_exports.string().min(1).max(200),
|
|
4907
|
-
artifacts: external_exports.array(external_exports.object({
|
|
4908
|
-
filename: external_exports.string().min(1).max(2e3),
|
|
4909
|
-
map: external_exports.string().min(1),
|
|
4910
|
-
debugId: external_exports.string().max(200).optional()
|
|
4911
|
-
})).min(1).max(200)
|
|
4912
|
-
});
|
|
4913
|
-
zIngestPayload = external_exports.object({
|
|
4914
|
-
type: external_exports.string().min(1).max(500),
|
|
4915
|
-
message: external_exports.string().min(1),
|
|
4916
|
-
stack: external_exports.string().optional(),
|
|
4917
|
-
frames: external_exports.array(zStackFrame).max(200).optional(),
|
|
4918
|
-
// SPEC-276 · opsional → kompatibel mundur
|
|
4919
|
-
environment: external_exports.string().max(120).optional(),
|
|
4920
|
-
release: external_exports.string().max(200).optional(),
|
|
4921
|
-
context: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
4922
|
-
});
|
|
4923
|
-
zErrorGroupView = external_exports.object({
|
|
4924
|
-
id: external_exports.string(),
|
|
4925
|
-
projectId: external_exports.string(),
|
|
4926
|
-
type: external_exports.string(),
|
|
4927
|
-
message: external_exports.string(),
|
|
4928
|
-
environment: external_exports.string(),
|
|
4929
|
-
status: zErrorStatus,
|
|
4930
|
-
count: external_exports.number().int(),
|
|
4931
|
-
firstSeenAt: external_exports.string(),
|
|
4932
|
-
lastSeenAt: external_exports.string(),
|
|
4933
|
-
specId: external_exports.string().nullable(),
|
|
4934
|
-
release: external_exports.string().nullable()
|
|
4935
|
-
// SPEC-276 · release terakhir grup (korelasi build)
|
|
4936
|
-
});
|
|
4937
|
-
zErrorEventView = external_exports.object({
|
|
4938
|
-
id: external_exports.string(),
|
|
4939
|
-
type: external_exports.string(),
|
|
4940
|
-
message: external_exports.string(),
|
|
4941
|
-
stack: external_exports.string().nullable(),
|
|
4942
|
-
environment: external_exports.string(),
|
|
4943
|
-
release: external_exports.string().nullable(),
|
|
4944
|
-
receivedAt: external_exports.string()
|
|
4945
|
-
});
|
|
4946
|
-
zErrorGroupDetail = zErrorGroupView.extend({
|
|
4947
|
-
sampleStack: external_exports.string().nullable(),
|
|
4948
|
-
sampleFrames: external_exports.array(zSymbolicatedFrame).nullable(),
|
|
4949
|
-
// SPEC-276 · frame tersimbolikasi (bila map ada)
|
|
4950
|
-
events: external_exports.array(zErrorEventView)
|
|
4951
|
-
});
|
|
4952
|
-
zIngestKeyView = external_exports.object({
|
|
4953
|
-
enabled: external_exports.boolean(),
|
|
4954
|
-
prefix: external_exports.string().nullable(),
|
|
4955
|
-
key: external_exports.string().optional(),
|
|
4956
|
-
dsnUrl: external_exports.string().optional()
|
|
4957
|
-
});
|
|
4958
5027
|
zTicketView = external_exports.object({
|
|
4959
5028
|
id: external_exports.string(),
|
|
4960
5029
|
projectId: external_exports.string(),
|
|
@@ -5128,6 +5197,12 @@ var init_api = __esm({
|
|
|
5128
5197
|
// SPEC-299 · panel scheduler (daun #6) — konsumen read-only fondasi SPEC-294/ADR-0072.
|
|
5129
5198
|
schedulerConfig: `${API}/scheduler/config`,
|
|
5130
5199
|
schedulerState: `${API}/scheduler/state`,
|
|
5200
|
+
// SPEC-409 · ADR-0091 · hanoman-lead. Semua HTTP (polling) — tak ada kanal WS baru (AC-26).
|
|
5201
|
+
leadConfig: `${API}/lead/config`,
|
|
5202
|
+
leadStatus: `${API}/lead/status`,
|
|
5203
|
+
leadDecisions: `${API}/lead/decisions`,
|
|
5204
|
+
leadDecisionOverride: (id) => `${API}/lead/decisions/${encodeURIComponent(id)}/override`,
|
|
5205
|
+
leadDecisionCancel: (id) => `${API}/lead/decisions/${encodeURIComponent(id)}/cancel`,
|
|
5131
5206
|
// SPEC-268 · ADR-0066 · pemicu sync manual (cookie-authed)
|
|
5132
5207
|
syncNow: `${API}/sync/now`,
|
|
5133
5208
|
// SPEC-270 · ADR-0067 · antrean konflik rekonsil (cookie-authed)
|
|
@@ -5137,15 +5212,6 @@ var init_api = __esm({
|
|
|
5137
5212
|
agentTokens: `${API}/agent-tokens`,
|
|
5138
5213
|
agentToken: (id) => `${API}/agent-tokens/${id}`,
|
|
5139
5214
|
agentCapabilities: `${API}/agent-tokens/capabilities`,
|
|
5140
|
-
// SPEC-249 · error monitoring. ingest publik ber-DSN (bypass gate cookie, ADR-0060).
|
|
5141
|
-
ingest: (slug) => `${API}/ingest/${encodeURIComponent(slug)}`,
|
|
5142
|
-
errors: `${API}/errors`,
|
|
5143
|
-
errorsGuide: `${API}/errors/integration-guide`,
|
|
5144
|
-
error: (id) => `${API}/errors/${id}`,
|
|
5145
|
-
errorEscalate: (id) => `${API}/errors/${id}/escalate`,
|
|
5146
|
-
errorUnlink: (id) => `${API}/errors/${id}/unlink`,
|
|
5147
|
-
// SPEC-271 · lepas tautan backlog
|
|
5148
|
-
projectIngestKey: (id) => `${API}/projects/${encodeURIComponent(id)}/ingest-key`,
|
|
5149
5215
|
// SPEC-253 · Help Center publik (bypass gate cookie; otorisasi helpEnabled + kunci opaque tiket).
|
|
5150
5216
|
help: (slug) => `${API}/help/${encodeURIComponent(slug)}`,
|
|
5151
5217
|
helpTickets: (slug) => `${API}/help/${encodeURIComponent(slug)}/tickets`,
|
|
@@ -5159,9 +5225,6 @@ var init_api = __esm({
|
|
|
5159
5225
|
ticketUnlink: (id) => `${API}/tickets/${id}/unlink`,
|
|
5160
5226
|
// SPEC-271 · lepas tautan backlog
|
|
5161
5227
|
ticketReject: (id) => `${API}/tickets/${id}/reject`,
|
|
5162
|
-
// SPEC-337 · ADR-0075 · relasi integrasi antar project (LOCAL-only) + log lintas project.
|
|
5163
|
-
projectLinks: (id) => `${API}/projects/${encodeURIComponent(id)}/links`,
|
|
5164
|
-
projectLink: (id, linkId) => `${API}/projects/${encodeURIComponent(id)}/links/${encodeURIComponent(linkId)}`,
|
|
5165
5228
|
// SPEC-361 · ADR-0078 · unduh dokumen: query ditempelkan ke URL endpoint dokumen yang sudah ada
|
|
5166
5229
|
// (tak ada endpoint ekspor terpisah). `base` bisa sudah membawa query, mis. ideFile(?path=…).
|
|
5167
5230
|
download: (base, fmt) => `${base}${base.includes("?") ? "&" : "?"}download=${fmt}`
|
|
@@ -5241,7 +5304,6 @@ var init_session_kind = __esm({
|
|
|
5241
5304
|
"prd",
|
|
5242
5305
|
"scaffold",
|
|
5243
5306
|
"breakdown",
|
|
5244
|
-
"cross-audit",
|
|
5245
5307
|
"vps",
|
|
5246
5308
|
"shell",
|
|
5247
5309
|
"worktree",
|
|
@@ -5416,6 +5478,7 @@ var init_src2 = __esm({
|
|
|
5416
5478
|
init_enums();
|
|
5417
5479
|
init_entities();
|
|
5418
5480
|
init_agent();
|
|
5481
|
+
init_lead();
|
|
5419
5482
|
init_dto();
|
|
5420
5483
|
init_api();
|
|
5421
5484
|
init_coverage();
|
|
@@ -6047,7 +6110,6 @@ var init_migrate_pg = __esm({
|
|
|
6047
6110
|
init_start();
|
|
6048
6111
|
PG_ORDER = [
|
|
6049
6112
|
"Project",
|
|
6050
|
-
"ProjectLink",
|
|
6051
6113
|
"Spec",
|
|
6052
6114
|
"Setting",
|
|
6053
6115
|
"Notification",
|
|
@@ -6067,9 +6129,7 @@ var init_migrate_pg = __esm({
|
|
|
6067
6129
|
"SyncConflict",
|
|
6068
6130
|
"SchedulerQueueItem",
|
|
6069
6131
|
"RuntimeConfig",
|
|
6070
|
-
"
|
|
6071
|
-
"ErrorEvent",
|
|
6072
|
-
"SourceMapArtifact",
|
|
6132
|
+
"LeadDecision",
|
|
6073
6133
|
"Ticket",
|
|
6074
6134
|
"TicketAttachment"
|
|
6075
6135
|
];
|