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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.5",
3
- "sha": "5ae0e2b",
4
- "builtAt": "2026-07-31T02:00:54.075Z"
2
+ "version": "0.1.7",
3
+ "sha": "33ae716",
4
+ "builtAt": "2026-07-31T15:10:07.810Z"
5
5
  }
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, zErrorStatus, zTicketCategory, zTicketStatus, zLinkKind, VERIFY_SCOPES, zVerifyScope;
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", "cross-audit", "help", "goal"]);
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
- type: external_exports.enum(["done", "decision", "error", "ticket", "fail"]).default("done"),
4506
- // SPEC-249 · +error; SPEC-253 · +ticket; SPEC-298 · +fail (sesi scheduler gagal/limit)
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, zCreateLink, zUpdateProject, zCreateSpec, zPatchSpec, zIntegrate, zSessionSummary, zProjectView, zSchedulerQueueItem, zSchedulerSourceView, zSchedulerSessionView, zSchedulerState, 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, zStackFrame, zSymbolicatedFrame, zSourceMapUpload, zIngestPayload, zErrorGroupView, zErrorEventView, zErrorGroupDetail, zIngestKeyView, zTicketView, zTicketAttachmentView, zTicketDetail, zTicketEditInput, zHelpInfo, zPublicTicketStatus;
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
- zFlow = external_exports.enum(["feature", "qa", "scaffold", "reverse", "prd", "audit", "breakdown", "cross-audit", "goal"]);
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
- "ErrorGroup",
6071
- "ErrorEvent",
6072
- "SourceMapArtifact",
6132
+ "LeadDecision",
6073
6133
  "Ticket",
6074
6134
  "TicketAttachment"
6075
6135
  ];