hanoman 0.3.3 → 0.5.0
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 +269 -9
- package/dist/server.js +3408 -1695
- package/docs/agent-integration.md +4 -0
- package/package.json +1 -1
- package/prisma/migrations/20260914120000_agent_invocation_phase/migration.sql +3 -0
- package/prisma/migrations/20260915120000_log_terpusat/migration.sql +34 -0
- package/prisma/schema.prisma +42 -0
- package/web/assets/{ChangelogScreen-D_-RmJkz.js → ChangelogScreen-CqVppy70.js} +1 -1
- package/web/assets/{DalangHanomanScreen-pVfnLx9z.js → DalangHanomanScreen-DRFC8ZdR.js} +1 -1
- package/web/assets/{DocPreviewModal-ZFjISCL0.js → DocPreviewModal-Di28IHju.js} +1 -1
- package/web/assets/{DocsWorkspace-Vp_vik3v.js → DocsWorkspace-DY0x50eq.js} +1 -1
- package/web/assets/{IdeScreen-DQSRs3fr.js → IdeScreen-BpSi7o5r.js} +1 -1
- package/web/assets/{LeadScreen-Bv5LiudD.js → LeadScreen-BRzdha5a.js} +1 -1
- package/web/assets/{ReviewScreen-Cime4Tci.js → ReviewScreen-D2SwZTqF.js} +1 -1
- package/web/assets/{SchedulerScreen-DKmRNbTs.js → SchedulerScreen-w6hID1yX.js} +1 -1
- package/web/assets/SettingsScreen-DC4OFYQ-.js +62 -0
- package/web/assets/{TeamScreen-5ugoXsOv.js → TeamScreen-D0W-oNAi.js} +1 -1
- package/web/assets/TerminalScreen-B2keWEDd.js +9 -0
- package/web/assets/{TriageScreen-BajACF5K.js → TriageScreen-CmVGUNpA.js} +1 -1
- package/web/assets/{VpsScreen-C7muNRX5.js → VpsScreen-BKoJ_dAB.js} +1 -1
- package/web/assets/{diff-view-CsZPBznT.js → diff-view-B_pIZnWa.js} +1 -1
- package/web/assets/index-C_-gADIr.js +923 -0
- package/web/assets/{live-DVDstDzi.js → live-DJzk8BTb.js} +1 -1
- package/web/index.html +1 -1
- package/web/assets/SettingsScreen-Bh8XhyVQ.js +0 -62
- package/web/assets/TerminalScreen-DsAn5dlH.js +0 -9
- package/web/assets/index-DI7G_sit.js +0 -923
package/dist/build-info.json
CHANGED
package/dist/cli.js
CHANGED
|
@@ -4412,6 +4412,128 @@ var init_auto_merge = __esm({
|
|
|
4412
4412
|
}
|
|
4413
4413
|
});
|
|
4414
4414
|
|
|
4415
|
+
// ../shared/src/relay.ts
|
|
4416
|
+
function utf8Bytes(s2) {
|
|
4417
|
+
let n2 = 0;
|
|
4418
|
+
for (let i = 0; i < s2.length; i++) {
|
|
4419
|
+
const cp = s2.codePointAt(i);
|
|
4420
|
+
n2 += cpBytes(cp);
|
|
4421
|
+
if (cp > 65535) i++;
|
|
4422
|
+
}
|
|
4423
|
+
return n2;
|
|
4424
|
+
}
|
|
4425
|
+
var RELAY_PART_MAX_BYTES, RELAY_RESPONSE_MAX_BYTES, RELAY_REASSEMBLY_MAX_BYTES, RELAY_REQUEST_BODY_MAX_BYTES, RELAY_CREDIT_INITIAL, RELAY_CREDIT_REFILL_BELOW, RELAY_SOCKET_MAX_BUFFERED, RELAY_UNSUPPORTED_RETRY_MS, REMOTE_CAPABILITIES, zRemoteCapability, zRemoteControl, REMOTE_CONTROL_DEFAULTS, cpBytes, zRelayActor, zId, UNSAFE_PATH, zRelayPath, zPart, RELAY_METHODS, zWelcome, zReq, zCancel, zOpen, zHubData, zCredit, zClose, zHubToClientFrame, zHello, zRes, zGeometryFields, zOpened, zGeometry, zClientData, zClientToHubFrame, zRemoteControlPut;
|
|
4426
|
+
var init_relay = __esm({
|
|
4427
|
+
"../shared/src/relay.ts"() {
|
|
4428
|
+
"use strict";
|
|
4429
|
+
init_zod();
|
|
4430
|
+
RELAY_PART_MAX_BYTES = 32 * 1024;
|
|
4431
|
+
RELAY_RESPONSE_MAX_BYTES = 1024 * 1024;
|
|
4432
|
+
RELAY_REASSEMBLY_MAX_BYTES = 1024 * 1024;
|
|
4433
|
+
RELAY_REQUEST_BODY_MAX_BYTES = 32 * 1024;
|
|
4434
|
+
RELAY_CREDIT_INITIAL = 256 * 1024;
|
|
4435
|
+
RELAY_CREDIT_REFILL_BELOW = 64 * 1024;
|
|
4436
|
+
RELAY_SOCKET_MAX_BUFFERED = 1024 * 1024;
|
|
4437
|
+
RELAY_UNSUPPORTED_RETRY_MS = 30 * 6e4;
|
|
4438
|
+
REMOTE_CAPABILITIES = [
|
|
4439
|
+
"sessions:read",
|
|
4440
|
+
"sessions:write",
|
|
4441
|
+
"sessions:spawn",
|
|
4442
|
+
"backlog:read",
|
|
4443
|
+
"backlog:write",
|
|
4444
|
+
"ide:read"
|
|
4445
|
+
];
|
|
4446
|
+
zRemoteCapability = external_exports.enum(REMOTE_CAPABILITIES);
|
|
4447
|
+
zRemoteControl = external_exports.object({
|
|
4448
|
+
enabled: external_exports.boolean().default(false),
|
|
4449
|
+
capabilities: external_exports.array(zRemoteCapability).default([])
|
|
4450
|
+
});
|
|
4451
|
+
REMOTE_CONTROL_DEFAULTS = { enabled: false, capabilities: [] };
|
|
4452
|
+
cpBytes = (cp) => cp < 128 ? 1 : cp < 2048 ? 2 : cp < 65536 ? 3 : 4;
|
|
4453
|
+
zRelayActor = external_exports.object({
|
|
4454
|
+
hubOrigin: external_exports.string().min(1).max(200),
|
|
4455
|
+
userId: external_exports.string().min(1).max(200),
|
|
4456
|
+
email: external_exports.string().min(1).max(320)
|
|
4457
|
+
}).strict();
|
|
4458
|
+
zId = external_exports.string().min(1).max(64);
|
|
4459
|
+
UNSAFE_PATH = /(^|\/)\.\.?(\/|$)|%2e|%2f|%5c|\\|[?#]/i;
|
|
4460
|
+
zRelayPath = external_exports.string().max(2048).regex(/^\/api\//).refine((p3) => !UNSAFE_PATH.test(p3), "path relay tak sah");
|
|
4461
|
+
zPart = external_exports.string().refine((s2) => utf8Bytes(s2) <= RELAY_PART_MAX_BYTES, "part relay > 32 KiB");
|
|
4462
|
+
RELAY_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE"];
|
|
4463
|
+
zWelcome = external_exports.object({ t: external_exports.literal("welcome"), v: external_exports.literal(1), protocol: external_exports.number().int(), version: external_exports.string().max(40) }).strict();
|
|
4464
|
+
zReq = external_exports.object({
|
|
4465
|
+
t: external_exports.literal("req"),
|
|
4466
|
+
id: zId,
|
|
4467
|
+
method: external_exports.enum(RELAY_METHODS),
|
|
4468
|
+
path: zRelayPath,
|
|
4469
|
+
query: external_exports.string().max(2048).optional(),
|
|
4470
|
+
body: external_exports.unknown().optional(),
|
|
4471
|
+
actor: zRelayActor
|
|
4472
|
+
}).strict();
|
|
4473
|
+
zCancel = external_exports.object({ t: external_exports.literal("cancel"), id: zId }).strict();
|
|
4474
|
+
zOpen = external_exports.object({ t: external_exports.literal("open"), sid: zId, path: zRelayPath, mode: external_exports.enum(["read", "write"]), actor: zRelayActor }).strict();
|
|
4475
|
+
zHubData = external_exports.object({ t: external_exports.literal("data"), sid: zId, d: zPart }).strict();
|
|
4476
|
+
zCredit = external_exports.object({ t: external_exports.literal("credit"), sid: zId, n: external_exports.number().int().min(1).max(4 * 1024 * 1024) }).strict();
|
|
4477
|
+
zClose = external_exports.object({ t: external_exports.literal("close"), sid: zId, code: external_exports.number().int().min(1e3).max(4999), reason: external_exports.string().max(120).optional() }).strict();
|
|
4478
|
+
zHubToClientFrame = external_exports.discriminatedUnion("t", [zWelcome, zReq, zCancel, zOpen, zHubData, zCredit, zClose]);
|
|
4479
|
+
zHello = external_exports.object({
|
|
4480
|
+
t: external_exports.literal("hello"),
|
|
4481
|
+
v: external_exports.literal(1),
|
|
4482
|
+
// Sengaja number, bukan literal: hub harus bisa MELIHAT protokol yang beda untuk menutup 4001
|
|
4483
|
+
// dan menampilkan "protocol-mismatch", bukan membuang frame-nya senyap.
|
|
4484
|
+
protocol: external_exports.number().int(),
|
|
4485
|
+
version: external_exports.string().max(40),
|
|
4486
|
+
capabilities: external_exports.array(zRemoteCapability).max(REMOTE_CAPABILITIES.length)
|
|
4487
|
+
}).strict();
|
|
4488
|
+
zRes = external_exports.object({
|
|
4489
|
+
t: external_exports.literal("res"),
|
|
4490
|
+
id: zId,
|
|
4491
|
+
status: external_exports.number().int().min(100).max(599).optional(),
|
|
4492
|
+
contentType: external_exports.string().max(200).optional(),
|
|
4493
|
+
part: zPart,
|
|
4494
|
+
end: external_exports.boolean()
|
|
4495
|
+
}).strict();
|
|
4496
|
+
zGeometryFields = { cols: external_exports.number().int().min(1).max(1e3), rows: external_exports.number().int().min(1).max(1e3) };
|
|
4497
|
+
zOpened = external_exports.object({ t: external_exports.literal("opened"), sid: zId, geometry: external_exports.object(zGeometryFields).strict().optional() }).strict();
|
|
4498
|
+
zGeometry = external_exports.object({ t: external_exports.literal("geometry"), sid: zId, ...zGeometryFields }).strict();
|
|
4499
|
+
zClientData = external_exports.object({ t: external_exports.literal("data"), sid: zId, d: zPart, more: external_exports.literal(true).optional() }).strict();
|
|
4500
|
+
zClientToHubFrame = external_exports.discriminatedUnion("t", [zHello, zRes, zOpened, zGeometry, zClientData, zClose]);
|
|
4501
|
+
zRemoteControlPut = external_exports.object({
|
|
4502
|
+
control: external_exports.object({ enabled: external_exports.boolean(), capabilities: external_exports.array(external_exports.string().max(40)).max(20) }).strict().optional(),
|
|
4503
|
+
logs: external_exports.object({ event: external_exports.boolean(), server: external_exports.boolean(), transcript: external_exports.boolean() }).strict().optional()
|
|
4504
|
+
}).strict();
|
|
4505
|
+
}
|
|
4506
|
+
});
|
|
4507
|
+
|
|
4508
|
+
// ../shared/src/logs.ts
|
|
4509
|
+
var LOG_LANES, zLogLane, LOG_LEVELS, zLogLevel, LOG_MSG_MAX_BYTES, LOG_DATA_MAX_BYTES, LOG_SHIPPING_DEFAULTS, zLogShipping, LOG_RETENTION_DEFAULTS, days, zLogRetention;
|
|
4510
|
+
var init_logs = __esm({
|
|
4511
|
+
"../shared/src/logs.ts"() {
|
|
4512
|
+
"use strict";
|
|
4513
|
+
init_zod();
|
|
4514
|
+
LOG_LANES = ["event", "server", "transcript"];
|
|
4515
|
+
zLogLane = external_exports.enum(LOG_LANES);
|
|
4516
|
+
LOG_LEVELS = ["debug", "info", "warn", "error"];
|
|
4517
|
+
zLogLevel = external_exports.enum(LOG_LEVELS);
|
|
4518
|
+
LOG_MSG_MAX_BYTES = 4 * 1024;
|
|
4519
|
+
LOG_DATA_MAX_BYTES = 8 * 1024;
|
|
4520
|
+
LOG_SHIPPING_DEFAULTS = { event: true, server: false, transcript: false };
|
|
4521
|
+
zLogShipping = external_exports.object({
|
|
4522
|
+
event: external_exports.boolean().default(true),
|
|
4523
|
+
server: external_exports.boolean().default(false),
|
|
4524
|
+
transcript: external_exports.boolean().default(false)
|
|
4525
|
+
});
|
|
4526
|
+
LOG_RETENTION_DEFAULTS = { eventDays: 90, serverDays: 7, transcriptDays: 30, maxBytes: 256 * 1024 ** 2 };
|
|
4527
|
+
days = (d) => external_exports.number().int().min(1).max(365).default(d);
|
|
4528
|
+
zLogRetention = external_exports.object({
|
|
4529
|
+
eventDays: days(90),
|
|
4530
|
+
serverDays: days(7),
|
|
4531
|
+
transcriptDays: days(30),
|
|
4532
|
+
maxBytes: external_exports.number().int().min(16 * 1024 ** 2).max(4 * 1024 ** 3).default(256 * 1024 ** 2)
|
|
4533
|
+
});
|
|
4534
|
+
}
|
|
4535
|
+
});
|
|
4536
|
+
|
|
4415
4537
|
// ../shared/src/entities.ts
|
|
4416
4538
|
function cmpVersion(a, b) {
|
|
4417
4539
|
const pa = a.split(".").map(Number);
|
|
@@ -4422,7 +4544,7 @@ function cmpVersion(a, b) {
|
|
|
4422
4544
|
}
|
|
4423
4545
|
return 0;
|
|
4424
4546
|
}
|
|
4425
|
-
var zProject, zBriefPayload, zQaPayload, zGoalPayload, zSpecBlocker, zSourceChange, zManualDone, zSpec, NOTIFY_SOUNDS, zCodex, CODEX_DEFAULTS, zSourceCommon, zScheduler, SCHEDULER_DEFAULTS, zGoal, GOAL_DEFAULTS, zConflict, CONFLICT_DEFAULTS, CHANGELOG_ENGINE_DEFAULTS, zLeadEngine, zLead, LEAD_DEFAULTS, zPortalChat, PORTAL_CHAT_DEFAULTS, zSetting, zNotification, zDocFile, zDeviceTokenView;
|
|
4547
|
+
var zProject, zBriefPayload, zQaPayload, zGoalPayload, zSpecBlocker, zSourceChange, zManualDone, zSpec, NOTIFY_SOUNDS, zCodex, CODEX_DEFAULTS, zSourceCommon, zScheduler, SCHEDULER_DEFAULTS, zGoal, GOAL_DEFAULTS, zConflict, CONFLICT_DEFAULTS, CHANGELOG_ENGINE_DEFAULTS, zLeadEngine, zLead, LEAD_DEFAULTS, zPortalChat, PORTAL_CHAT_DEFAULTS, zPhaseCell, zFlowOrchestration, zOrchestration, ORCHESTRATION_DEFAULTS, zSetting, zNotification, zDocFile, zDeviceTokenView;
|
|
4426
4548
|
var init_entities = __esm({
|
|
4427
4549
|
"../shared/src/entities.ts"() {
|
|
4428
4550
|
"use strict";
|
|
@@ -4432,6 +4554,8 @@ var init_entities = __esm({
|
|
|
4432
4554
|
init_agent_engine();
|
|
4433
4555
|
init_auto_merge();
|
|
4434
4556
|
init_method_catalog();
|
|
4557
|
+
init_relay();
|
|
4558
|
+
init_logs();
|
|
4435
4559
|
zProject = external_exports.object({
|
|
4436
4560
|
id: external_exports.string(),
|
|
4437
4561
|
name: external_exports.string(),
|
|
@@ -4630,6 +4754,27 @@ var init_entities = __esm({
|
|
|
4630
4754
|
timeoutSec: external_exports.number().int().min(10).max(900).default(180)
|
|
4631
4755
|
});
|
|
4632
4756
|
PORTAL_CHAT_DEFAULTS = zPortalChat.parse({});
|
|
4757
|
+
zPhaseCell = external_exports.object({
|
|
4758
|
+
model: external_exports.string().nullable().default(null),
|
|
4759
|
+
effort: external_exports.string().nullable().default(null)
|
|
4760
|
+
});
|
|
4761
|
+
zFlowOrchestration = external_exports.object({
|
|
4762
|
+
enabled: external_exports.boolean().default(true),
|
|
4763
|
+
claude: external_exports.record(external_exports.string(), zPhaseCell).default({}),
|
|
4764
|
+
codex: external_exports.record(external_exports.string(), zPhaseCell).default({})
|
|
4765
|
+
});
|
|
4766
|
+
zOrchestration = external_exports.object({
|
|
4767
|
+
feature: zFlowOrchestration.default({}),
|
|
4768
|
+
qa: zFlowOrchestration.default({}),
|
|
4769
|
+
scaffold: zFlowOrchestration.default({}),
|
|
4770
|
+
reverse: zFlowOrchestration.default({}),
|
|
4771
|
+
prd: zFlowOrchestration.default({}),
|
|
4772
|
+
audit: zFlowOrchestration.default({}),
|
|
4773
|
+
breakdown: zFlowOrchestration.default({}),
|
|
4774
|
+
goal: zFlowOrchestration.default({}),
|
|
4775
|
+
no_effort: zFlowOrchestration.default({})
|
|
4776
|
+
});
|
|
4777
|
+
ORCHESTRATION_DEFAULTS = zOrchestration.parse({});
|
|
4633
4778
|
zSetting = external_exports.object({
|
|
4634
4779
|
model: external_exports.string().default("claude-opus-5"),
|
|
4635
4780
|
effort: external_exports.string().default("xhigh"),
|
|
@@ -4672,6 +4817,17 @@ var init_entities = __esm({
|
|
|
4672
4817
|
// SPEC-518 · agen pembuat changelog (opt-in, mati)
|
|
4673
4818
|
portalChat: zPortalChat.default(PORTAL_CHAT_DEFAULTS),
|
|
4674
4819
|
// SPEC-854 · ADR-0130 · chat portal klien (opt-in, mati)
|
|
4820
|
+
orchestration: zOrchestration.default(ORCHESTRATION_DEFAULTS),
|
|
4821
|
+
// ADR-0164 · orkestrasi subagent per fase (default aktif)
|
|
4822
|
+
// SPEC-1215 · ADR-0165/0166 · LOCAL-only (setting tak ada di SYNCED) dan TAK ditulis `PUT /settings`
|
|
4823
|
+
// (routes/settings.ts mempertahankan nilai tersimpan). Pengelolanya `PUT /api/remote-control` dan,
|
|
4824
|
+
// kelak, `PUT /api/logs/retention` — keduanya COOKIE_ONLY.
|
|
4825
|
+
remoteControl: zRemoteControl.default(REMOTE_CONTROL_DEFAULTS),
|
|
4826
|
+
// grant kendali jarak jauh (default mati)
|
|
4827
|
+
logShipping: zLogShipping.default(LOG_SHIPPING_DEFAULTS),
|
|
4828
|
+
// lajur log ke hub (SPEC-1217)
|
|
4829
|
+
logRetention: zLogRetention.default(LOG_RETENTION_DEFAULTS),
|
|
4830
|
+
// retensi log di hub (SPEC-1217)
|
|
4675
4831
|
// SPEC-881 · ADR-0136 · sidik jari isi bawaan yang TERAKHIR ditulis seed di mesin ini, per nama
|
|
4676
4832
|
// agen. Dipakai seed untuk membedakan "belum pernah disunting operator" dari "sudah". WAJIB
|
|
4677
4833
|
// dideklarasikan di sini: zod membuang kunci tak dikenal dan `PUT /settings` menulis balik hasil
|
|
@@ -4716,6 +4872,31 @@ var init_entities = __esm({
|
|
|
4716
4872
|
}
|
|
4717
4873
|
});
|
|
4718
4874
|
|
|
4875
|
+
// ../shared/src/orchestration.ts
|
|
4876
|
+
var PHASE_AGENT_PREFIX, isPhaseAgentName;
|
|
4877
|
+
var init_orchestration = __esm({
|
|
4878
|
+
"../shared/src/orchestration.ts"() {
|
|
4879
|
+
"use strict";
|
|
4880
|
+
PHASE_AGENT_PREFIX = "hanoman-fase-";
|
|
4881
|
+
isPhaseAgentName = (name) => name.startsWith(PHASE_AGENT_PREFIX);
|
|
4882
|
+
}
|
|
4883
|
+
});
|
|
4884
|
+
|
|
4885
|
+
// ../shared/src/orchestration-plan.ts
|
|
4886
|
+
function codexNativeAgentsSupported(version3) {
|
|
4887
|
+
const parsed = version3 ? /(\d+)\.(\d+)\.(\d+)/.exec(version3)?.[0] : null;
|
|
4888
|
+
return parsed ? cmpVersion(parsed, CODEX_NATIVE_AGENTS_MIN_CLIENT) >= 0 : false;
|
|
4889
|
+
}
|
|
4890
|
+
var CODEX_NATIVE_AGENTS_MIN_CLIENT;
|
|
4891
|
+
var init_orchestration_plan = __esm({
|
|
4892
|
+
"../shared/src/orchestration-plan.ts"() {
|
|
4893
|
+
"use strict";
|
|
4894
|
+
init_entities();
|
|
4895
|
+
init_orchestration();
|
|
4896
|
+
CODEX_NATIVE_AGENTS_MIN_CLIENT = "0.151.0";
|
|
4897
|
+
}
|
|
4898
|
+
});
|
|
4899
|
+
|
|
4719
4900
|
// ../shared/src/agent.ts
|
|
4720
4901
|
var CAPABILITY_IDS, zCapability, zCapabilityInfo, zAgentTokenView, zAgentTokenCreate, zAgentTokenPatch;
|
|
4721
4902
|
var init_agent = __esm({
|
|
@@ -4819,6 +5000,7 @@ var init_custom_agent = __esm({
|
|
|
4819
5000
|
"../shared/src/custom-agent.ts"() {
|
|
4820
5001
|
"use strict";
|
|
4821
5002
|
init_zod();
|
|
5003
|
+
init_orchestration();
|
|
4822
5004
|
AGENT_RUNTIMES = ["claude", "codex"];
|
|
4823
5005
|
zAgentRuntime = external_exports.enum(AGENT_RUNTIMES);
|
|
4824
5006
|
AGENT_ACTIVATIONS = ["always", "smart"];
|
|
@@ -4858,7 +5040,9 @@ var init_custom_agent = __esm({
|
|
|
4858
5040
|
});
|
|
4859
5041
|
zCreateCustomAgentFields = external_exports.object({
|
|
4860
5042
|
projectId: external_exports.string().nullable().optional(),
|
|
4861
|
-
|
|
5043
|
+
// ADR-0164 · awalan agen fase dicadangkan — registry native berkunci nama, jadi custom agent
|
|
5044
|
+
// bernama sama akan menimpa agen fase sesi orchestrator tanpa satu pun galat.
|
|
5045
|
+
name: external_exports.string().regex(AGENT_NAME_RE).refine((n2) => !isPhaseAgentName(n2), { message: `awalan ${PHASE_AGENT_PREFIX} dicadangkan untuk agen fase hanoman` }),
|
|
4862
5046
|
description: external_exports.string().trim().min(1).max(500),
|
|
4863
5047
|
instructions: external_exports.string().trim().min(1).max(2e4),
|
|
4864
5048
|
tools: external_exports.array(external_exports.string()).nullable().optional(),
|
|
@@ -6596,6 +6780,8 @@ var init_api = __esm({
|
|
|
6596
6780
|
// SPEC-213 · device token + activity log
|
|
6597
6781
|
deviceTokens: `${API}/device-tokens`,
|
|
6598
6782
|
deviceToken: (id) => `${API}/device-tokens/${id}`,
|
|
6783
|
+
// SPEC-1215 · ADR-0165 · grant kendali jarak jauh mesin ini (cookie-only)
|
|
6784
|
+
remoteControl: `${API}/remote-control`,
|
|
6599
6785
|
sessionResults: (projectId) => `${API}/session-results${projectId ? `?projectId=${encodeURIComponent(projectId)}` : ""}`,
|
|
6600
6786
|
// SPEC-215 · config runtime
|
|
6601
6787
|
config: `${API}/config`,
|
|
@@ -11356,11 +11542,12 @@ var init_session_ask = __esm({
|
|
|
11356
11542
|
});
|
|
11357
11543
|
|
|
11358
11544
|
// ../shared/src/presence.ts
|
|
11359
|
-
var PRESENCE_PROTOCOL, MAX_PRESENCE_SESSIONS, PRESENCE_MAX_FRAME_BYTES, zPresenceSession, zPresenceFrame;
|
|
11545
|
+
var PRESENCE_PROTOCOL, MAX_PRESENCE_SESSIONS, PRESENCE_MAX_FRAME_BYTES, zPresenceSession, zPresenceFrame, zCapacityFrame;
|
|
11360
11546
|
var init_presence = __esm({
|
|
11361
11547
|
"../shared/src/presence.ts"() {
|
|
11362
11548
|
"use strict";
|
|
11363
11549
|
init_zod();
|
|
11550
|
+
init_session_admission();
|
|
11364
11551
|
PRESENCE_PROTOCOL = 1;
|
|
11365
11552
|
MAX_PRESENCE_SESSIONS = 100;
|
|
11366
11553
|
PRESENCE_MAX_FRAME_BYTES = 32 * 1024;
|
|
@@ -11380,6 +11567,11 @@ var init_presence = __esm({
|
|
|
11380
11567
|
v: external_exports.literal(PRESENCE_PROTOCOL),
|
|
11381
11568
|
sessions: external_exports.array(zPresenceSession).max(MAX_PRESENCE_SESSIONS)
|
|
11382
11569
|
}).strict();
|
|
11570
|
+
zCapacityFrame = external_exports.object({
|
|
11571
|
+
t: external_exports.literal("capacity"),
|
|
11572
|
+
v: external_exports.literal(PRESENCE_PROTOCOL),
|
|
11573
|
+
admission: zLaunchStatus
|
|
11574
|
+
}).strict();
|
|
11383
11575
|
}
|
|
11384
11576
|
});
|
|
11385
11577
|
|
|
@@ -11408,6 +11600,8 @@ var init_src = __esm({
|
|
|
11408
11600
|
init_method_status();
|
|
11409
11601
|
init_agent_engine();
|
|
11410
11602
|
init_entities();
|
|
11603
|
+
init_orchestration();
|
|
11604
|
+
init_orchestration_plan();
|
|
11411
11605
|
init_agent();
|
|
11412
11606
|
init_custom_agent();
|
|
11413
11607
|
init_builtin_agents();
|
|
@@ -11439,6 +11633,8 @@ var init_src = __esm({
|
|
|
11439
11633
|
init_session_dialog();
|
|
11440
11634
|
init_session_ask();
|
|
11441
11635
|
init_presence();
|
|
11636
|
+
init_relay();
|
|
11637
|
+
init_logs();
|
|
11442
11638
|
init_pending();
|
|
11443
11639
|
init_team();
|
|
11444
11640
|
init_model_catalog();
|
|
@@ -11651,10 +11847,6 @@ var init_runtime_profile = __esm({
|
|
|
11651
11847
|
});
|
|
11652
11848
|
|
|
11653
11849
|
// ../runner/src/codex-agent-config.ts
|
|
11654
|
-
function codexNativeAgentsSupported(version3) {
|
|
11655
|
-
const parsed = version3 ? /(\d+)\.(\d+)\.(\d+)/.exec(version3)?.[0] : null;
|
|
11656
|
-
return parsed ? cmpVersion(parsed, CODEX_NATIVE_AGENTS_MIN_CLIENT) >= 0 : false;
|
|
11657
|
-
}
|
|
11658
11850
|
function codexNativeVersionProbe(env, codexBin = env.HANOMAN_CODEX_BIN ?? "codex") {
|
|
11659
11851
|
const sandbox = env.HANOMAN_SESSION_SANDBOX ?? (resolveHardening(env) ? "required" : "off");
|
|
11660
11852
|
if (sandbox !== "podman") return { bin: codexBin, args: ["--version"] };
|
|
@@ -11675,14 +11867,13 @@ function codexNativeVersionProbe(env, codexBin = env.HANOMAN_CODEX_BIN ?? "codex
|
|
|
11675
11867
|
]
|
|
11676
11868
|
};
|
|
11677
11869
|
}
|
|
11678
|
-
var
|
|
11870
|
+
var shellQuote;
|
|
11679
11871
|
var init_codex_agent_config = __esm({
|
|
11680
11872
|
"../runner/src/codex-agent-config.ts"() {
|
|
11681
11873
|
"use strict";
|
|
11682
11874
|
init_src();
|
|
11683
11875
|
init_custom_agents();
|
|
11684
11876
|
init_runtime_profile();
|
|
11685
|
-
CODEX_NATIVE_AGENTS_MIN_CLIENT = "0.151.0";
|
|
11686
11877
|
shellQuote = (value) => `'${value.replaceAll("'", "'\\''")}'`;
|
|
11687
11878
|
}
|
|
11688
11879
|
});
|
|
@@ -11704,6 +11895,33 @@ var init_agent_definition = __esm({
|
|
|
11704
11895
|
}
|
|
11705
11896
|
});
|
|
11706
11897
|
|
|
11898
|
+
// ../runner/src/phase-agents.ts
|
|
11899
|
+
var PHASE_AGENT_RULES, PHASE_AGENT_REPORT;
|
|
11900
|
+
var init_phase_agents = __esm({
|
|
11901
|
+
"../runner/src/phase-agents.ts"() {
|
|
11902
|
+
"use strict";
|
|
11903
|
+
init_src();
|
|
11904
|
+
init_prompt();
|
|
11905
|
+
init_reverse_standard();
|
|
11906
|
+
PHASE_AGENT_RULES = [
|
|
11907
|
+
"Batas peran fase:",
|
|
11908
|
+
"- JANGAN menulis `$HANOMAN_PHASE_FILE` \u2014 orchestrator satu-satunya penulis marker fase.",
|
|
11909
|
+
"- JANGAN `git push` \u2014 push milik orchestrator. Commit artefak fasemu sendiri sebelum melapor.",
|
|
11910
|
+
`- JANGAN memanggil agen berawalan \`${PHASE_AGENT_PREFIX}\`. Custom agent lain boleh dipanggil bila relevan.`,
|
|
11911
|
+
"- Kerjakan HANYA fase ini; fase lain dikerjakan agen fasenya sendiri."
|
|
11912
|
+
].join("\n");
|
|
11913
|
+
PHASE_AGENT_REPORT = [
|
|
11914
|
+
"Kontrak laporan (wajib, di akhir):",
|
|
11915
|
+
"- Baris pertama: `Status: selesai | sebagian | terhalang`.",
|
|
11916
|
+
"- `Artefak:` path berkas yang kamu tulis/ubah.",
|
|
11917
|
+
"- `Bukti:` perintah yang dijalankan beserta hasil yang benar-benar kamu baca.",
|
|
11918
|
+
"- `Pertanyaan untuk manusia:` (opsional) SATU pertanyaan; bila ada, berhenti di situ.",
|
|
11919
|
+
"- `Rekomendasi fase:` (opsional) mis. `jalur-cepat` sesudah Audit qa.",
|
|
11920
|
+
"Klaim tanpa bukti bukan bukti. Maksimal 1200 kata."
|
|
11921
|
+
].join("\n");
|
|
11922
|
+
}
|
|
11923
|
+
});
|
|
11924
|
+
|
|
11707
11925
|
// ../runner/src/custom-agent-eval-evidence.ts
|
|
11708
11926
|
var init_custom_agent_eval_evidence = __esm({
|
|
11709
11927
|
"../runner/src/custom-agent-eval-evidence.ts"() {
|
|
@@ -12158,6 +12376,41 @@ var init_sandbox_probe = __esm({
|
|
|
12158
12376
|
}
|
|
12159
12377
|
});
|
|
12160
12378
|
|
|
12379
|
+
// ../runner/src/subagent-statusline.ts
|
|
12380
|
+
var SUBAGENT_STATUSLINE_SCRIPT;
|
|
12381
|
+
var init_subagent_statusline = __esm({
|
|
12382
|
+
"../runner/src/subagent-statusline.ts"() {
|
|
12383
|
+
"use strict";
|
|
12384
|
+
init_src();
|
|
12385
|
+
SUBAGENT_STATUSLINE_SCRIPT = [
|
|
12386
|
+
'const fs = require("node:fs");',
|
|
12387
|
+
"const labelsPath = process.argv[2];",
|
|
12388
|
+
'let raw = "";',
|
|
12389
|
+
'process.stdin.setEncoding("utf8");',
|
|
12390
|
+
'process.stdin.on("data", (c) => { raw += c; });',
|
|
12391
|
+
'process.stdin.on("end", () => {',
|
|
12392
|
+
" try {",
|
|
12393
|
+
' const labels = JSON.parse(fs.readFileSync(labelsPath, "utf8"));',
|
|
12394
|
+
" const tasks = JSON.parse(raw).tasks || [];",
|
|
12395
|
+
" const rows = [];",
|
|
12396
|
+
" for (const t of tasks) {",
|
|
12397
|
+
' if (!t || typeof t.id !== "string" || typeof t.model !== "string") continue;',
|
|
12398
|
+
' const parts = [t.label || t.description || "subagent", labels[t.model] || t.model];',
|
|
12399
|
+
' if (typeof t.effort === "string") parts.push(t.effort);',
|
|
12400
|
+
' if (typeof t.startTime === "number") {',
|
|
12401
|
+
" const s = Math.max(0, Math.round((Date.now() - t.startTime) / 1000));",
|
|
12402
|
+
' parts.push(s >= 60 ? Math.floor(s / 60) + "m" + String(s % 60).padStart(2, "0") + "s" : s + "s");',
|
|
12403
|
+
" }",
|
|
12404
|
+
' if (typeof t.tokenCount === "number" && t.tokenCount > 0) parts.push(Math.round(t.tokenCount / 1000) + "k tok");',
|
|
12405
|
+
' rows.push(JSON.stringify({ id: t.id, content: parts.join(" \xB7 ") }));',
|
|
12406
|
+
" }",
|
|
12407
|
+
' if (rows.length) process.stdout.write(rows.join("\\n") + "\\n");',
|
|
12408
|
+
" } catch {}",
|
|
12409
|
+
"});"
|
|
12410
|
+
].join("\n");
|
|
12411
|
+
}
|
|
12412
|
+
});
|
|
12413
|
+
|
|
12161
12414
|
// ../runner/src/index.ts
|
|
12162
12415
|
var init_src2 = __esm({
|
|
12163
12416
|
"../runner/src/index.ts"() {
|
|
@@ -12173,6 +12426,7 @@ var init_src2 = __esm({
|
|
|
12173
12426
|
init_agent_cli();
|
|
12174
12427
|
init_custom_agents();
|
|
12175
12428
|
init_agent_definition();
|
|
12429
|
+
init_phase_agents();
|
|
12176
12430
|
init_agent_readonly();
|
|
12177
12431
|
init_codex_agent_config();
|
|
12178
12432
|
init_custom_agent_eval();
|
|
@@ -12185,6 +12439,7 @@ var init_src2 = __esm({
|
|
|
12185
12439
|
init_config_env();
|
|
12186
12440
|
init_runtime_profile();
|
|
12187
12441
|
init_sandbox_probe();
|
|
12442
|
+
init_subagent_statusline();
|
|
12188
12443
|
}
|
|
12189
12444
|
});
|
|
12190
12445
|
|
|
@@ -33843,6 +34098,11 @@ var init_migrate_pg = __esm({
|
|
|
33843
34098
|
"SyncState",
|
|
33844
34099
|
"SyncConflict",
|
|
33845
34100
|
"SyncTombstone",
|
|
34101
|
+
// SPEC-1215 · ADR-0166 · LOCAL-only, tanpa FK. Tabel ini tak ada di sumber Postgres lama — jalur
|
|
34102
|
+
// 42P01 memperlakukannya sebagai nol baris (cermin AgentInvocation/Changelog). Tetap WAJIB
|
|
34103
|
+
// terdaftar: test migrate-pg menuntut PG_ORDER = seluruh model DMMF.
|
|
34104
|
+
"LogEntry",
|
|
34105
|
+
"LogCursor",
|
|
33846
34106
|
// SPEC-485 · ADR-0102 · LeadFlow SEBELUM LeadDecision: `flowId` menunjuk ke sana. Tanpa FK, tapi
|
|
33847
34107
|
// urutan tabel harus tetap mencerminkan arah tautannya bagi pembaca berikutnya.
|
|
33848
34108
|
// SPEC-646 · ADR-0112 · SchedulerCron SEBELUM SchedulerCronRun: `cronId` menunjuk ke sana. Tanpa
|