hanoman 0.9.18 → 0.9.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 +63 -167
- package/dist/server.js +418 -639
- package/docs/agent-integration.md +9 -53
- package/package.json +1 -1
- package/prisma/migrations/20261007120000_project_memory/migration.sql +54 -0
- package/prisma/migrations/20261007130000_memory_sync/migration.sql +32 -0
- package/prisma/migrations/20261010070000_remove_memory_changelog/migration.sql +40 -0
- package/prisma/schema.prisma +3 -25
- package/web/assets/{DalangHanomanScreen-C1Ivdj4r.js → DalangHanomanScreen-DqzYitwv.js} +1 -1
- package/web/assets/{DocPreviewModal-Cw69hQk1.js → DocPreviewModal-Chk-jQ51.js} +1 -1
- package/web/assets/{DocsWorkspace--9rvckps.js → DocsWorkspace-DuNVIjTg.js} +1 -1
- package/web/assets/{IdeScreen-DxNG9eLb.js → IdeScreen-BZGVyFT5.js} +1 -1
- package/web/assets/{LeadScreen-CV3Lgbyd.js → LeadScreen-35VgddUo.js} +1 -1
- package/web/assets/{ReviewScreen-JLPOS52f.js → ReviewScreen-EkG8ywTU.js} +1 -1
- package/web/assets/{SchedulerScreen-UhxWcCtY.js → SchedulerScreen-ClaLLB8Y.js} +1 -1
- package/web/assets/SettingsScreen-liOlVCeT.js +62 -0
- package/web/assets/{TeamScreen-D24DsEwn.js → TeamScreen-Dzl6Ruju.js} +1 -1
- package/web/assets/{TerminalScreen-3nSnkwTy.js → TerminalScreen-CK3SzzgP.js} +1 -1
- package/web/assets/{TriageScreen-Dw6EqWar.js → TriageScreen-EtBRNg-t.js} +1 -1
- package/web/assets/{VpsScreen-C_rNhMi5.js → VpsScreen-9qeTHo1w.js} +1 -1
- package/web/assets/index-D5w059cP.js +1063 -0
- package/web/assets/{live-DHIFZVo0.js → live-Bz-jmiWI.js} +1 -1
- package/web/index.html +1 -1
- package/web/assets/ChangelogScreen-Bj1KreGh.js +0 -1
- package/web/assets/SettingsScreen-D3nVVnsZ.js +0 -62
- package/web/assets/index-DHVdBKua.js +0 -1053
package/dist/build-info.json
CHANGED
package/dist/cli.js
CHANGED
|
@@ -4166,13 +4166,14 @@ var init_spec_source = __esm({
|
|
|
4166
4166
|
function resolveMethod(id) {
|
|
4167
4167
|
return (id ? METHODS[id] : void 0) ?? METHODS[DEFAULT_METHOD];
|
|
4168
4168
|
}
|
|
4169
|
-
var DEFAULT_METHOD, VERIFICATION_GATE, MATT_CLAUSE, METHODS, METHOD_IDS, uniq, PLAN_DIRS, SPEC_DIRS;
|
|
4169
|
+
var DEFAULT_METHOD, VERIFICATION_GATE, MATT_CLAUSE, AGENT_SKILLS_CLAUSE, METHODS, METHOD_IDS, uniq, PLAN_DIRS, SPEC_DIRS;
|
|
4170
4170
|
var init_method_catalog = __esm({
|
|
4171
4171
|
"../shared/src/method-catalog.ts"() {
|
|
4172
4172
|
"use strict";
|
|
4173
4173
|
DEFAULT_METHOD = "superpowers";
|
|
4174
4174
|
VERIFICATION_GATE = "superpowers:verification-before-completion";
|
|
4175
4175
|
MATT_CLAUSE = "Skill mattpocock yang kontraknya mewawancarai manusia (`/grill-me`, `/to-spec`, `/triage`) JANGAN dipakai: pakai primitif model-invoked-nya untuk menguji rancanganmu sendiri, bukan untuk mewawancarai siapa pun. Hal yang masih ambigu dan akan mempengaruhi hasil tetap JANGAN diputuskan sendiri \u2014 bila kamu agen fase, daftarkan di `Keputusan terbuka:` laporanmu; bila tidak, ajukan lewat jalur tanya di klausa otonomi prompt ini. `to-tickets` di fase Plan dipakai HANYA sebagai penghasil berkas plan berkotak `- [ ]` di `docs/matt/plans/`, BUKAN penerbit tiket \u2014 hanoman sendiri adalah issue tracker-nya, jadi jangan menulis ke tracker eksternal mana pun.";
|
|
4176
|
+
AGENT_SKILLS_CLAUSE = "Pakai skill Agent Skills langsung sesuai fase, bukan slash-command atau meta-router `using-agent-skills`. Kontrak fase, instruksi project/pengguna, dan jalur keputusan/review hanoman tetap berlaku: `spec-driven-development` hanya menyusun spec pada fase Spec, jangan menjalankan Plan atau Execute dari fase itu. Simpan spec di `docs/agent-skills/specs/` dan plan beserta SELURUH checklist task `- [ ]` di `docs/agent-skills/plans/`, dengan id backlog pada nama berkas; ini menggantikan default `SPEC.md`, `tasks/plan.md`, dan `tasks/todo.md` upstream. Jangan menimpa plan lain yang belum tuntas atau membuat tiket di tracker eksternal: hanoman adalah issue tracker-nya. Centang task di berkas plan yang sama setelah implementasi dan verifikasi. Hal ambigu yang mempengaruhi hasil mengikuti jalur tanya prompt ini; bila kamu agen fase, daftarkan di `Keputusan terbuka:` laporanmu.";
|
|
4176
4177
|
METHODS = {
|
|
4177
4178
|
// Isi `PHASE_SKILLS` (SPEC-166) dipindah APA ADANYA. Objective & Spec adalah keluaran skill
|
|
4178
4179
|
// brainstorming yang di-invoke di fase Brainstorm — sengaja tak punya entri sendiri. Fase reverse
|
|
@@ -4253,6 +4254,44 @@ var init_method_catalog = __esm({
|
|
|
4253
4254
|
"codex plugin add superpowers@openai-curated"
|
|
4254
4255
|
]
|
|
4255
4256
|
}
|
|
4257
|
+
},
|
|
4258
|
+
"agent-skills": {
|
|
4259
|
+
id: "agent-skills",
|
|
4260
|
+
label: "Agent Skills (Addy Osmani)",
|
|
4261
|
+
planDir: "docs/agent-skills/plans",
|
|
4262
|
+
specDir: "docs/agent-skills/specs",
|
|
4263
|
+
phaseSkills: {
|
|
4264
|
+
Brainstorm: ["agent-skills:idea-refine"],
|
|
4265
|
+
Spec: ["agent-skills:spec-driven-development"],
|
|
4266
|
+
Audit: [
|
|
4267
|
+
"agent-skills:debugging-and-error-recovery",
|
|
4268
|
+
"agent-skills:code-review-and-quality"
|
|
4269
|
+
],
|
|
4270
|
+
Plan: ["agent-skills:planning-and-task-breakdown"],
|
|
4271
|
+
Execute: [
|
|
4272
|
+
"agent-skills:incremental-implementation",
|
|
4273
|
+
"agent-skills:test-driven-development",
|
|
4274
|
+
"agent-skills:code-review-and-quality"
|
|
4275
|
+
],
|
|
4276
|
+
Verifikasi: [VERIFICATION_GATE]
|
|
4277
|
+
},
|
|
4278
|
+
exitSkills: [VERIFICATION_GATE],
|
|
4279
|
+
extraClause: AGENT_SKILLS_CLAUSE,
|
|
4280
|
+
requires: ["agent-skills", "superpowers"],
|
|
4281
|
+
// Manifest upstream: marketplace Claude = addy-agent-skills, Codex = agent-skills.
|
|
4282
|
+
install: {
|
|
4283
|
+
claude: [
|
|
4284
|
+
"claude plugin marketplace add addyosmani/agent-skills",
|
|
4285
|
+
"claude plugin install agent-skills@addy-agent-skills",
|
|
4286
|
+
"claude plugin marketplace add obra/superpowers-marketplace",
|
|
4287
|
+
"claude plugin install superpowers@superpowers-marketplace"
|
|
4288
|
+
],
|
|
4289
|
+
codex: [
|
|
4290
|
+
"codex plugin marketplace add addyosmani/agent-skills",
|
|
4291
|
+
"codex plugin add agent-skills@agent-skills",
|
|
4292
|
+
"codex plugin add superpowers@openai-curated"
|
|
4293
|
+
]
|
|
4294
|
+
}
|
|
4256
4295
|
}
|
|
4257
4296
|
};
|
|
4258
4297
|
METHOD_IDS = Object.keys(METHODS);
|
|
@@ -4786,7 +4825,7 @@ function cmpVersion(a, b) {
|
|
|
4786
4825
|
}
|
|
4787
4826
|
return 0;
|
|
4788
4827
|
}
|
|
4789
|
-
var zProject, zBriefPayload, zQaPayload, zGoalPayload, zSpecBlocker, zSourceChange, zManualDone, zSpec, zSpecListItem, zSpecSlim, NOTIFY_SOUNDS, zCodex, CODEX_DEFAULTS, zSourceCommon, zScheduler, SCHEDULER_DEFAULTS, zGoal, GOAL_DEFAULTS, zConflict, CONFLICT_DEFAULTS,
|
|
4828
|
+
var zProject, zBriefPayload, zQaPayload, zGoalPayload, zSpecBlocker, zSourceChange, zManualDone, zSpec, zSpecListItem, zSpecSlim, NOTIFY_SOUNDS, zCodex, CODEX_DEFAULTS, zSourceCommon, zScheduler, SCHEDULER_DEFAULTS, zGoal, GOAL_DEFAULTS, zConflict, CONFLICT_DEFAULTS, zLeadEngine, zLead, LEAD_DEFAULTS, zPortalChat, PORTAL_CHAT_DEFAULTS, zPhaseCell, PHASE_OVERRIDE_LIMITS, zPhaseOverride, zPhaseOverrides, zFlowOrchestration, zOrchestration, ORCHESTRATION_DEFAULTS, zSetting, zNotification, zDocFile, zDeviceTokenView;
|
|
4790
4829
|
var init_entities = __esm({
|
|
4791
4830
|
"../shared/src/entities.ts"() {
|
|
4792
4831
|
"use strict";
|
|
@@ -4954,7 +4993,6 @@ var init_entities = __esm({
|
|
|
4954
4993
|
effort: external_exports.string().default("xhigh")
|
|
4955
4994
|
});
|
|
4956
4995
|
CONFLICT_DEFAULTS = zConflict.parse({});
|
|
4957
|
-
CHANGELOG_ENGINE_DEFAULTS = zAgentEngine.parse({});
|
|
4958
4996
|
zLeadEngine = zAgentEngine;
|
|
4959
4997
|
zLead = external_exports.object({
|
|
4960
4998
|
enabled: external_exports.boolean().default(false),
|
|
@@ -5075,8 +5113,6 @@ var init_entities = __esm({
|
|
|
5075
5113
|
// SPEC-409 · ADR-0091 · hanoman-lead (default mati)
|
|
5076
5114
|
telegram: zTelegramSettings.default(TELEGRAM_DEFAULTS),
|
|
5077
5115
|
// SPEC-476 · ADR-0096 · gateway Telegram (default mati)
|
|
5078
|
-
changelog: zAgentEngine.default(CHANGELOG_ENGINE_DEFAULTS),
|
|
5079
|
-
// SPEC-518 · agen pembuat changelog (opt-in, mati)
|
|
5080
5116
|
portalChat: zPortalChat.default(PORTAL_CHAT_DEFAULTS),
|
|
5081
5117
|
// SPEC-854 · ADR-0130 · chat portal klien (opt-in, mati)
|
|
5082
5118
|
orchestration: zOrchestration.default(ORCHESTRATION_DEFAULTS),
|
|
@@ -7527,6 +7563,7 @@ var init_api = __esm({
|
|
|
7527
7563
|
qaAttachments: (pid, rid) => `${API}/projects/${encodeURIComponent(pid)}/qa/reports/${encodeURIComponent(rid)}/attachments`,
|
|
7528
7564
|
qaAttachment: (pid, rid, aid) => `${API}/projects/${encodeURIComponent(pid)}/qa/reports/${encodeURIComponent(rid)}/attachments/${encodeURIComponent(aid)}`,
|
|
7529
7565
|
qaFindingBacklog: (pid, rid, fid) => `${API}/projects/${encodeURIComponent(pid)}/qa/reports/${encodeURIComponent(rid)}/findings/${encodeURIComponent(fid)}/backlog`,
|
|
7566
|
+
qaFindingSession: (pid, rid, fid) => `${API}/projects/${encodeURIComponent(pid)}/qa/reports/${encodeURIComponent(rid)}/findings/${encodeURIComponent(fid)}/session`,
|
|
7530
7567
|
qaReportBacklog: (pid, rid) => `${API}/projects/${encodeURIComponent(pid)}/qa/reports/${encodeURIComponent(rid)}/backlog`,
|
|
7531
7568
|
qaCasesImport: (pid, rid) => `${API}/projects/${encodeURIComponent(pid)}/qa/reports/${encodeURIComponent(rid)}/cases/import`,
|
|
7532
7569
|
qaImport: (pid) => `${API}/projects/${encodeURIComponent(pid)}/qa/import`,
|
|
@@ -7577,10 +7614,6 @@ var init_api = __esm({
|
|
|
7577
7614
|
// SPEC-471 · ADR-0095 · tarik & triase issue GitHub (di belakang gate cookie, capability `support`).
|
|
7578
7615
|
// hanoman TIDAK PERNAH menulis ke GitHub — tak ada path komentar/close di sini, dan itu disengaja.
|
|
7579
7616
|
githubPull: (id) => `${API}/projects/${encodeURIComponent(id)}/github/pull`,
|
|
7580
|
-
// SPEC-516 · ADR-0105 · changelog per project
|
|
7581
|
-
changelog: (id) => `${API}/projects/${encodeURIComponent(id)}/changelog`,
|
|
7582
|
-
changelogSources: (id) => `${API}/projects/${encodeURIComponent(id)}/changelog/sources`,
|
|
7583
|
-
changelogItem: (id, cid) => `${API}/projects/${encodeURIComponent(id)}/changelog/${encodeURIComponent(cid)}`,
|
|
7584
7617
|
githubIssues: (id) => `${API}/projects/${encodeURIComponent(id)}/github/issues`,
|
|
7585
7618
|
githubIssuesAccept: `${API}/github-issues/accept`,
|
|
7586
7619
|
githubIssueAccept: (id) => `${API}/github-issues/${encodeURIComponent(id)}/accept`,
|
|
@@ -9457,7 +9490,7 @@ var init_docs = __esm({
|
|
|
9457
9490
|
required: ["project", "prd"]
|
|
9458
9491
|
}),
|
|
9459
9492
|
// `breakdown` hidup di berkas route docs.ts, TAPI `capabilityForRoute` memetakan sub-path
|
|
9460
|
-
// `projects/:id/*` yang tak terdaftar ke `projects:*` — hanya `docs
|
|
9493
|
+
// `projects/:id/*` yang tak terdaftar ke `projects:*` — hanya `docs` dan `prds`
|
|
9461
9494
|
// yang dipetakan ke `docs:*`. Menuliskannya `docs:read` membuat uji kontrak merah, dan itulah
|
|
9462
9495
|
// yang terjadi saat tool ini pertama ditulis.
|
|
9463
9496
|
mode: "read",
|
|
@@ -9470,116 +9503,6 @@ var init_docs = __esm({
|
|
|
9470
9503
|
query: query({ prd: s(a.prd) })
|
|
9471
9504
|
}),
|
|
9472
9505
|
shape: (raw) => raw
|
|
9473
|
-
},
|
|
9474
|
-
{
|
|
9475
|
-
name: "hanoman_changelog_sources",
|
|
9476
|
-
title: "Sumber changelog yang tersedia",
|
|
9477
|
-
description: "Bahan mentah yang bisa dipakai membuat changelog: daftar tag git, HEAD, dan rentang backlog yang sudah selesai. Panggil ini SEBELUM hanoman_changelog_create \u2014 ia memberitahu mode mana yang mungkin (`hasRepo: false` berarti mode commit & version tak akan jalan) dan `defaultRange` yang masuk akal.",
|
|
9478
|
-
inputSchema: obj({ properties: { project: PROJECT }, required: ["project"] }),
|
|
9479
|
-
mode: "read",
|
|
9480
|
-
capability: "docs:read",
|
|
9481
|
-
samplePath: "/projects/hanoman/changelog/sources",
|
|
9482
|
-
sampleMethod: "GET",
|
|
9483
|
-
build: (a) => ({ method: "GET", path: `/projects/${enc(String(a.project))}/changelog/sources` }),
|
|
9484
|
-
shape: (raw) => raw
|
|
9485
|
-
},
|
|
9486
|
-
{
|
|
9487
|
-
name: "hanoman_changelog_list",
|
|
9488
|
-
title: "Daftar changelog project",
|
|
9489
|
-
description: "Changelog yang sudah dibuat untuk sebuah project, terbaru dulu, berhalaman. `q` menyaring judul & isi.",
|
|
9490
|
-
inputSchema: obj({
|
|
9491
|
-
properties: {
|
|
9492
|
-
project: PROJECT,
|
|
9493
|
-
q: str("Kata kunci penyaring judul & isi changelog. Kosongkan untuk semua."),
|
|
9494
|
-
page: int("Halaman, mulai 1.", { minimum: 1 }),
|
|
9495
|
-
limit: int("Item per halaman.", { minimum: 1, maximum: 200 })
|
|
9496
|
-
},
|
|
9497
|
-
required: ["project"]
|
|
9498
|
-
}),
|
|
9499
|
-
mode: "read",
|
|
9500
|
-
capability: "docs:read",
|
|
9501
|
-
samplePath: "/projects/hanoman/changelog",
|
|
9502
|
-
sampleMethod: "GET",
|
|
9503
|
-
build: (a) => ({
|
|
9504
|
-
method: "GET",
|
|
9505
|
-
path: `/projects/${enc(String(a.project))}/changelog`,
|
|
9506
|
-
query: query({ q: s(a.q), page: n(a.page)?.toString(), limit: n(a.limit)?.toString() })
|
|
9507
|
-
}),
|
|
9508
|
-
shape: (raw) => raw
|
|
9509
|
-
},
|
|
9510
|
-
{
|
|
9511
|
-
name: "hanoman_changelog_get",
|
|
9512
|
-
title: "Baca satu changelog",
|
|
9513
|
-
description: "Satu entri changelog beserta isinya, dicari menurut id di dalam project tersebut.",
|
|
9514
|
-
inputSchema: obj({
|
|
9515
|
-
properties: { project: PROJECT, changelog: str("Id changelog, dari hanoman_changelog_list.") },
|
|
9516
|
-
required: ["project", "changelog"]
|
|
9517
|
-
}),
|
|
9518
|
-
mode: "read",
|
|
9519
|
-
capability: "docs:read",
|
|
9520
|
-
samplePath: "/projects/hanoman/changelog/c1",
|
|
9521
|
-
sampleMethod: "GET",
|
|
9522
|
-
build: (a) => ({ method: "GET", path: `/projects/${enc(String(a.project))}/changelog/${enc(String(a.changelog))}` }),
|
|
9523
|
-
shape: (raw) => raw
|
|
9524
|
-
},
|
|
9525
|
-
{
|
|
9526
|
-
name: "hanoman_changelog_create",
|
|
9527
|
-
title: "Buat changelog",
|
|
9528
|
-
description: "Membuat changelog baru dari salah satu dari tiga sumber. `mode` menentukan field mana yang WAJIB menyertainya: `backlog` memakai rentang tanggal (`from`/`to`, boleh kosong = seluruhnya), `commit` memakai dua sha, `version` memakai tag. Server menjawab 422 bila sumbernya tak tersedia \u2014 panggil hanoman_changelog_sources lebih dulu.",
|
|
9529
|
-
inputSchema: obj({
|
|
9530
|
-
properties: {
|
|
9531
|
-
project: PROJECT,
|
|
9532
|
-
mode: enumStr(["backlog", "commit", "version"], "Sumber changelog. Field yang menyertainya ditentukan nilai ini."),
|
|
9533
|
-
from: str("Mode `backlog`: tanggal awal `YYYY-MM-DD`. Kosongkan untuk tanpa batas awal."),
|
|
9534
|
-
to: str("Mode `backlog`: tanggal akhir `YYYY-MM-DD`. Harus >= `from`."),
|
|
9535
|
-
fromSha: str("Mode `commit`: sha awal, minimal 4 karakter."),
|
|
9536
|
-
toSha: str("Mode `commit`: sha akhir, minimal 4 karakter."),
|
|
9537
|
-
fromTag: str("Mode `version`: tag awal. Kosongkan untuk mulai dari tag terawal."),
|
|
9538
|
-
toTag: str("Mode `version`: tag akhir. WAJIB.")
|
|
9539
|
-
},
|
|
9540
|
-
required: ["project", "mode"],
|
|
9541
|
-
// Skema ketat DI KLIEN: validator SDK menolak pasangan yang salah sebelum permintaan lahir,
|
|
9542
|
-
// jadi agen dibimbing ke panggilan yang sah alih-alih menemukannya lewat 400 (ADR-0099 #2).
|
|
9543
|
-
allOf: [
|
|
9544
|
-
{
|
|
9545
|
-
if: { properties: { mode: { const: "backlog" } }, required: ["mode"] },
|
|
9546
|
-
then: { properties: { from: { type: "string" }, to: { type: "string" } } }
|
|
9547
|
-
},
|
|
9548
|
-
{
|
|
9549
|
-
if: { properties: { mode: { const: "commit" } }, required: ["mode"] },
|
|
9550
|
-
then: { required: ["fromSha", "toSha"] }
|
|
9551
|
-
},
|
|
9552
|
-
{
|
|
9553
|
-
if: { properties: { mode: { const: "version" } }, required: ["mode"] },
|
|
9554
|
-
then: { required: ["toTag"] }
|
|
9555
|
-
}
|
|
9556
|
-
]
|
|
9557
|
-
}),
|
|
9558
|
-
mode: "write",
|
|
9559
|
-
capability: "docs:write",
|
|
9560
|
-
samplePath: "/projects/hanoman/changelog",
|
|
9561
|
-
sampleMethod: "POST",
|
|
9562
|
-
build: (a) => {
|
|
9563
|
-
const mode = String(a.mode);
|
|
9564
|
-
const body = mode === "commit" ? { mode, fromSha: String(a.fromSha), toSha: String(a.toSha) } : mode === "version" ? { mode, ...s(a.fromTag) ? { fromTag: s(a.fromTag) } : {}, toTag: String(a.toTag) } : { mode, ...s(a.from) ? { from: s(a.from) } : {}, ...s(a.to) ? { to: s(a.to) } : {} };
|
|
9565
|
-
return { method: "POST", path: `/projects/${enc(String(a.project))}/changelog`, body };
|
|
9566
|
-
},
|
|
9567
|
-
shape: (raw) => raw
|
|
9568
|
-
},
|
|
9569
|
-
{
|
|
9570
|
-
name: "hanoman_changelog_delete",
|
|
9571
|
-
title: "Hapus changelog (BERBAHAYA)",
|
|
9572
|
-
description: "BERBAHAYA \u2014 menghapus satu entri changelog secara permanen. Isinya tak tersimpan di tempat lain: changelog lahir dari generator dan tak bisa dipulihkan tanpa membuatnya ulang. Hanya muncul saat tingkat `--danger` menyala.",
|
|
9573
|
-
inputSchema: obj({
|
|
9574
|
-
properties: { project: PROJECT, changelog: str("Id changelog yang akan dihapus.") },
|
|
9575
|
-
required: ["project", "changelog"]
|
|
9576
|
-
}),
|
|
9577
|
-
mode: "danger",
|
|
9578
|
-
capability: "docs:write",
|
|
9579
|
-
samplePath: "/projects/hanoman/changelog/c1",
|
|
9580
|
-
sampleMethod: "DELETE",
|
|
9581
|
-
build: (a) => ({ method: "DELETE", path: `/projects/${enc(String(a.project))}/changelog/${enc(String(a.changelog))}` }),
|
|
9582
|
-
shape: (raw) => raw
|
|
9583
9506
|
}
|
|
9584
9507
|
];
|
|
9585
9508
|
}
|
|
@@ -12317,6 +12240,18 @@ var init_qa2 = __esm({
|
|
|
12317
12240
|
build: (a) => ({ method: "PATCH", path: `${one(a)}/findings/${enc(String(a.finding))}`, body: findingBody(a) }),
|
|
12318
12241
|
shape: (raw) => raw
|
|
12319
12242
|
},
|
|
12243
|
+
{
|
|
12244
|
+
name: "hanoman_qa_finding_start_session",
|
|
12245
|
+
title: "Kerjakan temuan QA langsung",
|
|
12246
|
+
description: "Membuka sesi agen terisolasi dari temuan QA tanpa membuat backlog, membawa langkah uji dan lampiran. Memerlukan qa:write DAN sessions:write. Klik ulang memakai sesi aktif yang sama. Temuan wontfix atau sudah terkait backlog ditolak; laporan closed boleh.",
|
|
12247
|
+
inputSchema: obj({ properties: { project: PROJECT3, report: REPORT, finding: FINDING }, required: ["project", "report", "finding"] }),
|
|
12248
|
+
mode: "write",
|
|
12249
|
+
capability: "qa:write",
|
|
12250
|
+
samplePath: "/projects/p1/qa/reports/r1/findings/f1/session",
|
|
12251
|
+
sampleMethod: "POST",
|
|
12252
|
+
build: (a) => ({ method: "POST", path: `${one(a)}/findings/${enc(String(a.finding))}/session`, body: {} }),
|
|
12253
|
+
shape: (raw) => raw
|
|
12254
|
+
},
|
|
12320
12255
|
{
|
|
12321
12256
|
name: "hanoman_qa_finding_to_backlog",
|
|
12322
12257
|
title: "Kirim temuan QA ke backlog",
|
|
@@ -12482,7 +12417,7 @@ var init_mcp = __esm({
|
|
|
12482
12417
|
init_mcp_shape();
|
|
12483
12418
|
init_mcp_catalog();
|
|
12484
12419
|
init_mcp_catalog();
|
|
12485
|
-
MCP_TOOL_SCHEMA_VERSION =
|
|
12420
|
+
MCP_TOOL_SCHEMA_VERSION = 2;
|
|
12486
12421
|
MCP_INSTRUCTIONS = [
|
|
12487
12422
|
`hanoman \u2014 orchestrator backlog + dashboard. Skema tool versi ${MCP_TOOL_SCHEMA_VERSION}.`,
|
|
12488
12423
|
"",
|
|
@@ -12495,42 +12430,6 @@ var init_mcp = __esm({
|
|
|
12495
12430
|
}
|
|
12496
12431
|
});
|
|
12497
12432
|
|
|
12498
|
-
// ../shared/src/changelog.ts
|
|
12499
|
-
var CHANGELOG_MODES, zChangelogMode, zDay, zChangelogRequest, zChangelogView;
|
|
12500
|
-
var init_changelog = __esm({
|
|
12501
|
-
"../shared/src/changelog.ts"() {
|
|
12502
|
-
"use strict";
|
|
12503
|
-
init_zod();
|
|
12504
|
-
CHANGELOG_MODES = ["backlog", "commit", "version"];
|
|
12505
|
-
zChangelogMode = external_exports.enum(CHANGELOG_MODES);
|
|
12506
|
-
zDay = external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/, "format tanggal harus YYYY-MM-DD");
|
|
12507
|
-
zChangelogRequest = external_exports.discriminatedUnion("mode", [
|
|
12508
|
-
external_exports.object({ mode: external_exports.literal("backlog"), from: zDay.optional(), to: zDay.optional() }),
|
|
12509
|
-
external_exports.object({ mode: external_exports.literal("commit"), fromSha: external_exports.string().trim().min(4), toSha: external_exports.string().trim().min(4) }),
|
|
12510
|
-
external_exports.object({ mode: external_exports.literal("version"), fromTag: external_exports.string().trim().min(1).optional(), toTag: external_exports.string().trim().min(1) })
|
|
12511
|
-
]).superRefine((v, ctx) => {
|
|
12512
|
-
if (v.mode === "backlog" && v.from && v.to && v.from > v.to)
|
|
12513
|
-
ctx.addIssue({
|
|
12514
|
-
code: external_exports.ZodIssueCode.custom,
|
|
12515
|
-
path: ["from"],
|
|
12516
|
-
message: "rentang tanggal terbalik \u2014 `from` harus lebih awal atau sama dengan `to`"
|
|
12517
|
-
});
|
|
12518
|
-
});
|
|
12519
|
-
zChangelogView = external_exports.object({
|
|
12520
|
-
id: external_exports.string(),
|
|
12521
|
-
projectId: external_exports.string(),
|
|
12522
|
-
mode: zChangelogMode,
|
|
12523
|
-
title: external_exports.string(),
|
|
12524
|
-
params: external_exports.unknown(),
|
|
12525
|
-
body: external_exports.string(),
|
|
12526
|
-
generator: external_exports.enum(["agent", "fallback"]),
|
|
12527
|
-
warning: external_exports.string().nullable(),
|
|
12528
|
-
itemCount: external_exports.number().int(),
|
|
12529
|
-
createdAt: external_exports.string()
|
|
12530
|
-
});
|
|
12531
|
-
}
|
|
12532
|
-
});
|
|
12533
|
-
|
|
12534
12433
|
// ../shared/src/terminal-workspace.ts
|
|
12535
12434
|
var zSessionId, zTrackSizes, zTerminalGroup, zTerminalWorkspaceV1, zTerminalWorkspaceWrite, zTerminalWorkspaceSnapshot;
|
|
12536
12435
|
var init_terminal_workspace = __esm({
|
|
@@ -12795,7 +12694,6 @@ var init_src = __esm({
|
|
|
12795
12694
|
init_mcp();
|
|
12796
12695
|
init_auto_merge();
|
|
12797
12696
|
init_handled_by();
|
|
12798
|
-
init_changelog();
|
|
12799
12697
|
init_cron_expr();
|
|
12800
12698
|
init_terminal_workspace();
|
|
12801
12699
|
init_terminal_io();
|
|
@@ -34882,6 +34780,7 @@ function createCaller(cfg, fetchImpl) {
|
|
|
34882
34780
|
const init = {
|
|
34883
34781
|
method: req.method,
|
|
34884
34782
|
headers: {
|
|
34783
|
+
...req.headers ?? {},
|
|
34885
34784
|
Authorization: `Bearer ${cfg.token}`,
|
|
34886
34785
|
Accept: "application/json",
|
|
34887
34786
|
...req.body !== void 0 ? { "Content-Type": "application/json" } : {}
|
|
@@ -34975,9 +34874,9 @@ Butuh capability \`${tool.capability}\` pada agent token.` : tool.description,
|
|
|
34975
34874
|
problems: cfg.problems
|
|
34976
34875
|
}, cfg.maxBytes));
|
|
34977
34876
|
}
|
|
34978
|
-
const
|
|
34979
|
-
if (!
|
|
34980
|
-
const r = await call(
|
|
34877
|
+
const built = tool.build(args);
|
|
34878
|
+
if (!built) return text(`Tool ${tool.name} tak punya panggilan REST.`, true);
|
|
34879
|
+
const r = await call(built, tool.name);
|
|
34981
34880
|
if (!r.ok) return text(r.message, true);
|
|
34982
34881
|
return text(renderResult(tool.shape(r.body, args), cfg.maxBytes));
|
|
34983
34882
|
}
|
|
@@ -35292,9 +35191,6 @@ var init_migrate_pg = __esm({
|
|
|
35292
35191
|
// ADR-0159 · AgentInvocation sesudah CustomAgent: `customAgentId` menunjuk ke sana (tanpa FK).
|
|
35293
35192
|
// LOCAL-only dan lazimnya TIDAK ada di sumber Postgres lama — jalur 42P01 = nol baris.
|
|
35294
35193
|
"AgentInvocation",
|
|
35295
|
-
// SPEC-516 · ADR-0105 · Changelog sesudah Project (FK projectId). Tabel ini LOCAL-only dan
|
|
35296
|
-
// lazimnya TIDAK ada di sumber Postgres lama — jalur 42P01 memperlakukannya sebagai nol baris.
|
|
35297
|
-
"Changelog",
|
|
35298
35194
|
// SPEC-617 · ADR-0110 · ClientProjectAccess sesudah User DAN Project (FK ke keduanya).
|
|
35299
35195
|
"User",
|
|
35300
35196
|
"ClientProjectAccess",
|
|
@@ -35319,7 +35215,7 @@ var init_migrate_pg = __esm({
|
|
|
35319
35215
|
"SyncConflict",
|
|
35320
35216
|
"SyncTombstone",
|
|
35321
35217
|
// SPEC-1215 · ADR-0166 · LOCAL-only, tanpa FK. Tabel ini tak ada di sumber Postgres lama — jalur
|
|
35322
|
-
// 42P01 memperlakukannya sebagai nol baris (cermin AgentInvocation
|
|
35218
|
+
// 42P01 memperlakukannya sebagai nol baris (cermin AgentInvocation). Tetap WAJIB
|
|
35323
35219
|
// terdaftar: test migrate-pg menuntut PG_ORDER = seluruh model DMMF.
|
|
35324
35220
|
"LogEntry",
|
|
35325
35221
|
"LogCursor",
|
|
@@ -35347,7 +35243,7 @@ var init_migrate_pg = __esm({
|
|
|
35347
35243
|
"TicketAttachment",
|
|
35348
35244
|
// SPEC-843 · ADR-0124 · SpecAttachment WAJIB sesudah Spec (FK specId, cascade). Tabel ini
|
|
35349
35245
|
// LOCAL-only dan lazimnya TIDAK ada di sumber Postgres lama — jalur 42P01 memperlakukannya
|
|
35350
|
-
// sebagai nol baris, cermin
|
|
35246
|
+
// sebagai nol baris, cermin SessionHistory.
|
|
35351
35247
|
"SpecAttachment",
|
|
35352
35248
|
// SPEC-471 · ADR-0095 · GithubIssue sesudah Project (FK projectId) DAN sesudah Spec: `specId`
|
|
35353
35249
|
// memang tanpa FK, tapi memindahkannya lebih awal membuat urutan tabel tak lagi mencerminkan
|
|
@@ -35363,7 +35259,7 @@ var init_migrate_pg = __esm({
|
|
|
35363
35259
|
"WebhookDelivery",
|
|
35364
35260
|
// Workspace QA · ADR-0174 · QaReport sesudah Project (FK projectId, cascade); QaCase/QaFinding/
|
|
35365
35261
|
// QaAttachment sesudah QaReport (FK reportId, cascade). Keempatnya LOCAL-only dan TIDAK ada di
|
|
35366
|
-
// sumber Postgres lama — jalur 42P01 memperlakukannya sebagai nol baris (cermin
|
|
35262
|
+
// sumber Postgres lama — jalur 42P01 memperlakukannya sebagai nol baris (cermin SessionHistory).
|
|
35367
35263
|
"QaReport",
|
|
35368
35264
|
"QaCase",
|
|
35369
35265
|
"QaFinding",
|