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.
- package/dist/build-info.json +3 -3
- package/dist/cli.js +73 -1
- package/dist/server.js +784 -64
- package/package.json +1 -1
- package/prisma/migrations/20260801170000_github_issue/migration.sql +31 -0
- package/prisma/schema.prisma +33 -0
- package/web/assets/{index-D5MU9hT6.js → index-CXJBr-3-.js} +1523 -1523
- package/web/index.html +1 -1
package/dist/build-info.json
CHANGED
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;
|