hanoman 0.1.9 → 0.1.10

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.9",
3
- "sha": "fbea930",
4
- "builtAt": "2026-07-31T23:44:47.571Z"
2
+ "version": "0.1.10",
3
+ "sha": "db30c30",
4
+ "builtAt": "2026-08-01T02:45:06.324Z"
5
5
  }
package/dist/cli.js CHANGED
@@ -4600,6 +4600,36 @@ var init_custom_agent = __esm({
4600
4600
  }
4601
4601
  });
4602
4602
 
4603
+ // ../shared/src/github.ts
4604
+ var zGithubIssueStatus, zNormalIssue, zGithubIssueView;
4605
+ var init_github = __esm({
4606
+ "../shared/src/github.ts"() {
4607
+ "use strict";
4608
+ init_zod();
4609
+ zGithubIssueStatus = external_exports.enum(["new", "accepted", "rejected"]);
4610
+ zNormalIssue = external_exports.object({
4611
+ number: external_exports.number().int().positive(),
4612
+ title: external_exports.string(),
4613
+ body: external_exports.string(),
4614
+ authorLogin: external_exports.string(),
4615
+ labels: external_exports.array(external_exports.string()),
4616
+ url: external_exports.string(),
4617
+ issueState: external_exports.enum(["open", "closed"]),
4618
+ issueCreatedAt: external_exports.string(),
4619
+ // ISO-8601 apa adanya dari GitHub
4620
+ issueUpdatedAt: external_exports.string()
4621
+ });
4622
+ zGithubIssueView = zNormalIssue.extend({
4623
+ id: external_exports.string(),
4624
+ projectId: external_exports.string(),
4625
+ repoSlug: external_exports.string(),
4626
+ status: zGithubIssueStatus,
4627
+ specId: external_exports.string().nullable(),
4628
+ pulledAt: external_exports.string()
4629
+ });
4630
+ }
4631
+ });
4632
+
4603
4633
  // ../shared/src/lead.ts
4604
4634
  var zLeadGate, zLeadKind, zLeadConfidence, zLeadStatus, LEAD_ACTIONS, zLeadAction, zLeadVerdict, zLeadAsk, zLeadOverride;
4605
4635
  var init_lead = __esm({
@@ -5211,6 +5241,14 @@ var init_api = __esm({
5211
5241
  ticketUnlink: (id) => `${API}/tickets/${id}/unlink`,
5212
5242
  // SPEC-271 · lepas tautan backlog
5213
5243
  ticketReject: (id) => `${API}/tickets/${id}/reject`,
5244
+ // SPEC-471 · ADR-0095 · tarik & triase issue GitHub (di belakang gate cookie, capability `support`).
5245
+ // hanoman TIDAK PERNAH menulis ke GitHub — tak ada path komentar/close di sini, dan itu disengaja.
5246
+ githubPull: (id) => `${API}/projects/${encodeURIComponent(id)}/github/pull`,
5247
+ githubIssues: (id) => `${API}/projects/${encodeURIComponent(id)}/github/issues`,
5248
+ githubIssuesAccept: `${API}/github-issues/accept`,
5249
+ githubIssueAccept: (id) => `${API}/github-issues/${encodeURIComponent(id)}/accept`,
5250
+ githubIssueReject: (id) => `${API}/github-issues/${encodeURIComponent(id)}/reject`,
5251
+ githubIssueUnlink: (id) => `${API}/github-issues/${encodeURIComponent(id)}/unlink`,
5214
5252
  // SPEC-361 · ADR-0078 · unduh dokumen: query ditempelkan ke URL endpoint dokumen yang sudah ada
5215
5253
  // (tak ada endpoint ekspor terpisah). `base` bisa sudah membawa query, mis. ideFile(?path=…).
5216
5254
  download: (base, fmt) => `${base}${base.includes("?") ? "&" : "?"}download=${fmt}`
@@ -5373,6 +5411,28 @@ var init_config_registry = __esm({
5373
5411
  // vps
5374
5412
  { key: "HANOMAN_SSH_KEY_DIR", group: "vps", label: "Dir key SSH", kind: "path", apply: "new-session", category: "knob", help: "Default ~/.hanoman." },
5375
5413
  { key: "HANOMAN_SSH_BIN", group: "vps", label: "Biner ssh", kind: "path", apply: "new-session", category: "knob", default: "ssh" },
5414
+ // github (SPEC-471 · ADR-0095 · tarik issue → backlog). Dua mode auth, satu jalur kode:
5415
+ // `gh` memakai keyring mesin; bila GITHUB_TOKEN diisi ia diteruskan sebagai GH_TOKEN ke
5416
+ // proses gh DAN dipakai jalur REST (hub VPS yang tak punya keyring).
5417
+ {
5418
+ key: "GITHUB_TOKEN",
5419
+ group: "github",
5420
+ label: "GitHub token",
5421
+ kind: "secret",
5422
+ apply: "live",
5423
+ category: "credential",
5424
+ help: "PAT scope `repo` (atau `public_repo`). Kosong = andalkan `gh auth login` di mesin ini."
5425
+ },
5426
+ {
5427
+ key: "HANOMAN_GH_BIN",
5428
+ group: "github",
5429
+ label: "Biner gh",
5430
+ kind: "path",
5431
+ apply: "live",
5432
+ category: "knob",
5433
+ default: "gh",
5434
+ help: "Absen = tarik issue lewat HTTPS langsung ke api.github.com."
5435
+ },
5376
5436
  // runtime
5377
5437
  { key: "HANOMAN_EVENTS_TICK_MS", group: "runtime", label: "Interval events (ms)", kind: "int", apply: "live", category: "knob", default: "1000", min: 100 },
5378
5438
  { key: "HANOMAN_UPDATE_FETCH", group: "runtime", label: "Deteksi update saat boot", kind: "bool", apply: "live", category: "knob", default: "1" },
@@ -5465,6 +5525,7 @@ var init_src = __esm({
5465
5525
  init_entities();
5466
5526
  init_agent();
5467
5527
  init_custom_agent();
5528
+ init_github();
5468
5529
  init_lead();
5469
5530
  init_dto();
5470
5531
  init_api();
@@ -5960,6 +6021,12 @@ function doctorReport(p) {
5960
6021
  { mark: p.tmux ? "\u2713" : "\u2717", text: p.tmux ?? "tmux \u2014 TAK ADA (wajib: sesi agen hidup di tmux)", fatal: !p.tmux },
5961
6022
  { mark: p.claude ? "\u2713" : "\xB7", text: p.claude ? `claude ${p.claude}` : "claude \u2014 tak ada", fatal: false },
5962
6023
  { mark: p.codex ? "\u2713" : "\xB7", text: p.codex ? `codex ${p.codex}` : "codex \u2014 tak ada", fatal: false },
6024
+ // SPEC-471 · ADR-0095 · `gh` opsional: tanpa dia tarik issue jatuh ke HTTPS + GITHUB_TOKEN.
6025
+ {
6026
+ mark: p.gh ? "\u2713" : "\xB7",
6027
+ text: p.gh ? `gh ${p.gh}` : "gh \u2014 tak ada (tarik issue akan lewat HTTP + GITHUB_TOKEN)",
6028
+ fatal: false
6029
+ },
5963
6030
  { mark: p.homeWritable ? "\u2713" : "\u2717", text: `data dir ${p.homeWritable ? "bisa ditulis" : "TAK bisa ditulis"}`, fatal: !p.homeWritable },
5964
6031
  { mark: p.web ? "\u2713" : "!", text: p.web ? "aset dashboard ada" : "aset dashboard tak ada \u2014 API jalan, dashboard tidak", fatal: false },
5965
6032
  { mark: "\xB7", text: `db ${p.db}`, fatal: false }
@@ -6000,6 +6067,7 @@ async function doctor(_argv, ctx) {
6000
6067
  tmux: version("tmux", ["-V"]),
6001
6068
  claude: version(ctx.env.HANOMAN_CLAUDE_BIN ?? "claude", ["--version"]),
6002
6069
  codex: version(ctx.env.HANOMAN_CODEX_BIN ?? "codex", ["--version"]),
6070
+ gh: version(ctx.env.HANOMAN_GH_BIN ?? "gh", ["--version"]),
6003
6071
  homeWritable,
6004
6072
  web: layout.web !== null,
6005
6073
  db
@@ -6204,7 +6272,11 @@ var init_migrate_pg = __esm({
6204
6272
  "RuntimeConfig",
6205
6273
  "LeadDecision",
6206
6274
  "Ticket",
6207
- "TicketAttachment"
6275
+ "TicketAttachment",
6276
+ // SPEC-471 · ADR-0095 · GithubIssue sesudah Project (FK projectId) DAN sesudah Spec: `specId`
6277
+ // memang tanpa FK, tapi memindahkannya lebih awal membuat urutan tabel tak lagi mencerminkan
6278
+ // arah tautannya bagi pembaca berikutnya.
6279
+ "GithubIssue"
6208
6280
  ];
6209
6281
  CHUNK = 200;
6210
6282
  INT8_OID = 20;