hanoman 0.1.39 → 0.1.41
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 +25 -3
- package/dist/server.js +594 -241
- package/docs/agent-integration.md +5 -1
- package/package.json +1 -1
- package/prisma/migrations/20260815120000_sync_tombstone/migration.sql +14 -0
- package/prisma/migrations/20260815130000_spec_manual_done/migration.sql +9 -0
- package/prisma/schema.prisma +32 -0
- package/web/assets/{index-BzBNb9qp.js → index-BLt4wnhB.js} +1548 -1547
- package/web/assets/{index-DeGA9N3Z.css → index-BeFLNV7l.css} +1 -1
- package/web/index.html +2 -2
package/dist/build-info.json
CHANGED
package/dist/cli.js
CHANGED
|
@@ -4411,7 +4411,7 @@ var init_auto_merge = __esm({
|
|
|
4411
4411
|
});
|
|
4412
4412
|
|
|
4413
4413
|
// ../shared/src/entities.ts
|
|
4414
|
-
var zProject, zBriefPayload, zQaPayload, zGoalPayload, zSpecBlocker, zSourceChange, zSpec, NOTIFY_SOUNDS, zCodex, CODEX_DEFAULTS, zSourceCommon, zScheduler, SCHEDULER_DEFAULTS, zGoal, GOAL_DEFAULTS, zConflict, CONFLICT_DEFAULTS, CHANGELOG_ENGINE_DEFAULTS, zLeadEngine, zLead, LEAD_DEFAULTS, zSetting, zNotification, zDocFile, zDeviceTokenView;
|
|
4414
|
+
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, zSetting, zNotification, zDocFile, zDeviceTokenView;
|
|
4415
4415
|
var init_entities = __esm({
|
|
4416
4416
|
"../shared/src/entities.ts"() {
|
|
4417
4417
|
"use strict";
|
|
@@ -4469,6 +4469,11 @@ var init_entities = __esm({
|
|
|
4469
4469
|
by: external_exports.string(),
|
|
4470
4470
|
payload: external_exports.unknown().optional()
|
|
4471
4471
|
});
|
|
4472
|
+
zManualDone = external_exports.object({
|
|
4473
|
+
at: external_exports.string(),
|
|
4474
|
+
by: external_exports.string(),
|
|
4475
|
+
reason: external_exports.string().optional()
|
|
4476
|
+
});
|
|
4472
4477
|
zSpec = external_exports.object({
|
|
4473
4478
|
id: external_exports.string(),
|
|
4474
4479
|
projectId: external_exports.string(),
|
|
@@ -4500,7 +4505,10 @@ var init_entities = __esm({
|
|
|
4500
4505
|
// SPEC-546 · ADR-0109 · jejak konversi type. `.default([])` menjaga respons/klien versi lama
|
|
4501
4506
|
// tetap parse; kolom DB-nya `Json?` sehingga baris yang belum pernah dikonversi mengirim
|
|
4502
4507
|
// `null` — pemakai UI menulis `spec.sourceHistory ?? []`, cermin `blockedBy`.
|
|
4503
|
-
sourceHistory: external_exports.array(zSourceChange).default([])
|
|
4508
|
+
sourceHistory: external_exports.array(zSourceChange).default([]),
|
|
4509
|
+
// SPEC-804 · ADR-0120 · terisi hanya bila item ditandai selesai manual; null = selesai lewat
|
|
4510
|
+
// sesi atau belum selesai. `.nullable().default(null)` menjaga respons/klien versi lama parse.
|
|
4511
|
+
manualDone: zManualDone.nullable().default(null)
|
|
4504
4512
|
});
|
|
4505
4513
|
NOTIFY_SOUNDS = [
|
|
4506
4514
|
"off",
|
|
@@ -5008,7 +5016,7 @@ var init_cron_expr = __esm({
|
|
|
5008
5016
|
});
|
|
5009
5017
|
|
|
5010
5018
|
// ../shared/src/dto.ts
|
|
5011
|
-
var zIssueDeviceToken, zSessionResult, zSessionHistory, zCreateProject, zProjectId, zRenameProject, zUpdateProject, zCreateSpec, zPatchSpec, zChangeSpecSource, zIntegrate, zSessionSummary, zProjectView, zSchedulerQueueItem, zSchedulerSourceView, zSchedulerSessionView, zSchedulerQueueCounts, zSchedulerState, zLeadDecisionView, zLeadFlowView, zLeadAnswer, zLeadProjectStatus, zLeadStatusView, zFlow, zPrdBrief, zPrdDoc, zBreakdownItem, zBreakdownDoc, zBatchCreateSpec, zEscalationTarget, zEscalationPrefill, zAuditEscalation, zAuditEscalationView, zTerminalSession, zDocFileContent, zDocIndexCat, zDocIndex, HOST_RE, USER_RE, zCreateVps, zPatchVps, USER_ROLES, zUserRole, zLogin, zSignup, zSetup, zChangePassword, zCreateClientAccount, zUpdateClientAccount, zVpsCheck, zMarkNa, zMarkNaBulk, zAttest, zRemediate, UPDATE_RESTART_EXIT, zUpdateApplyBody, zTicketView, zTicketAttachmentView, zTicketDetail, zTicketEditInput, zHelpInfo, zPublicTicketStatus, zCronExpr, zCreateCron, zPatchCron, zSchedulerCron, zSchedulerCronRun;
|
|
5019
|
+
var zIssueDeviceToken, zSessionResult, zSessionHistory, zCreateProject, zProjectId, zRenameProject, zUpdateProject, zCreateSpec, zPatchSpec, zChangeSpecSource, zMarkSpecDone, zIntegrate, zSessionSummary, zProjectView, zSchedulerQueueItem, zSchedulerSourceView, zSchedulerSessionView, zSchedulerQueueCounts, zSchedulerState, zLeadDecisionView, zLeadFlowView, zLeadAnswer, zLeadProjectStatus, zLeadStatusView, zFlow, zPrdBrief, zPrdDoc, zBreakdownItem, zBreakdownDoc, zBatchCreateSpec, zEscalationTarget, zEscalationPrefill, zAuditEscalation, zAuditEscalationView, zTerminalSession, zDocFileContent, zDocIndexCat, zDocIndex, HOST_RE, USER_RE, zCreateVps, zPatchVps, USER_ROLES, zUserRole, zLogin, zSignup, zSetup, zChangePassword, zCreateClientAccount, zUpdateClientAccount, zVpsCheck, zMarkNa, zMarkNaBulk, zAttest, zRemediate, UPDATE_RESTART_EXIT, zUpdateApplyBody, zTicketView, zTicketAttachmentView, zTicketDetail, zTicketEditInput, zHelpInfo, zPublicTicketStatus, zCronExpr, zCreateCron, zPatchCron, zSchedulerCron, zSchedulerCronRun;
|
|
5012
5020
|
var init_dto = __esm({
|
|
5013
5021
|
"../shared/src/dto.ts"() {
|
|
5014
5022
|
"use strict";
|
|
@@ -5115,6 +5123,10 @@ var init_dto = __esm({
|
|
|
5115
5123
|
if (o.payload !== void 0 && !payloadMatchesSource(o.source, o.payload))
|
|
5116
5124
|
ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: ["payload"], message: "bentuk payload tak cocok dengan source" });
|
|
5117
5125
|
});
|
|
5126
|
+
zMarkSpecDone = external_exports.object({
|
|
5127
|
+
reason: external_exports.string().trim().max(280).optional(),
|
|
5128
|
+
confirm: external_exports.boolean().optional()
|
|
5129
|
+
});
|
|
5118
5130
|
zIntegrate = external_exports.object({
|
|
5119
5131
|
op: external_exports.enum(["merge", "rebase"]),
|
|
5120
5132
|
target: external_exports.string().regex(/^(local|origin):.+/)
|
|
@@ -5586,6 +5598,8 @@ var init_api = __esm({
|
|
|
5586
5598
|
specIntegrate: (id) => `${API}/specs/${id}/integrate`,
|
|
5587
5599
|
// SPEC-546 · ADR-0109 · ubah type/source item in-place (operasi khusus, bukan field PATCH).
|
|
5588
5600
|
specSource: (id) => `${API}/specs/${id}/source`,
|
|
5601
|
+
// SPEC-804 · ADR-0120 · tandai item selesai manual (operasi khusus, bukan field PATCH).
|
|
5602
|
+
specDone: (id) => `${API}/specs/${id}/done`,
|
|
5589
5603
|
specReview: (id) => `${API}/specs/${id}/review`,
|
|
5590
5604
|
specReviewFile: (id, path) => `${API}/specs/${id}/review/${path}`,
|
|
5591
5605
|
settings: `${API}/settings`,
|
|
@@ -5753,6 +5767,8 @@ var init_api = __esm({
|
|
|
5753
5767
|
syncNow: `${API}/sync/now`,
|
|
5754
5768
|
// SPEC-270 · ADR-0067 · antrean konflik rekonsil (cookie-authed)
|
|
5755
5769
|
syncConflicts: `${API}/sync/conflicts`,
|
|
5770
|
+
// SPEC-799 · ADR-0119 · penghapusan yang menunggu jendela online (cookie-only, cermin syncNow).
|
|
5771
|
+
syncPending: `${API}/sync/pending`,
|
|
5756
5772
|
syncConflictResolve: (entity, recordId) => `${API}/sync/conflicts/${encodeURIComponent(entity)}/${encodeURIComponent(recordId)}/resolve`,
|
|
5757
5773
|
// SPEC-257 · ADR-0065 · agent token (kelola cookie-only) + katalog capability
|
|
5758
5774
|
agentTokens: `${API}/agent-tokens`,
|
|
@@ -6150,6 +6166,9 @@ var init_webhook = __esm({
|
|
|
6150
6166
|
"autoMerge",
|
|
6151
6167
|
"createdAt",
|
|
6152
6168
|
"startedAt",
|
|
6169
|
+
// SPEC-804 · ADR-0120 · penerima harus bisa membedakan "selesai lewat sesi" dari "ditandai
|
|
6170
|
+
// manusia" tanpa mendiff dua amplop. Peristiwanya tetap `spec.stage_changed`.
|
|
6171
|
+
"manualDone",
|
|
6153
6172
|
"updatedAt"
|
|
6154
6173
|
],
|
|
6155
6174
|
projectIdField: "projectId",
|
|
@@ -6188,6 +6207,7 @@ var init_webhook = __esm({
|
|
|
6188
6207
|
autoMerge: null,
|
|
6189
6208
|
createdAt: "2026-08-01T02:10:00.000Z",
|
|
6190
6209
|
startedAt: "2026-08-01T02:12:31.000Z",
|
|
6210
|
+
manualDone: null,
|
|
6191
6211
|
updatedAt: "2026-08-01T09:41:22.000Z"
|
|
6192
6212
|
}
|
|
6193
6213
|
},
|
|
@@ -29187,11 +29207,13 @@ var init_migrate_pg = __esm({
|
|
|
29187
29207
|
"VpsItemState",
|
|
29188
29208
|
"SessionResult",
|
|
29189
29209
|
"SessionHistory",
|
|
29210
|
+
// SPEC-799 · ADR-0119 · SyncTombstone LOCAL-only, tanpa FK; letaknya bersama tabel sync lain.
|
|
29190
29211
|
"SyncLog",
|
|
29191
29212
|
"LocalBinding",
|
|
29192
29213
|
"SyncOutbox",
|
|
29193
29214
|
"SyncState",
|
|
29194
29215
|
"SyncConflict",
|
|
29216
|
+
"SyncTombstone",
|
|
29195
29217
|
// SPEC-485 · ADR-0102 · LeadFlow SEBELUM LeadDecision: `flowId` menunjuk ke sana. Tanpa FK, tapi
|
|
29196
29218
|
// urutan tabel harus tetap mencerminkan arah tautannya bagi pembaca berikutnya.
|
|
29197
29219
|
// SPEC-646 · ADR-0112 · SchedulerCron SEBELUM SchedulerCronRun: `cronId` menunjuk ke sana. Tanpa
|