hanoman 0.1.6 → 0.1.7
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 +14 -113
- package/dist/server.js +199 -1623
- package/package.json +1 -1
- package/prisma/migrations/20260731180000_drop_errors_sdk_crossaudit/migration.sql +58 -0
- package/prisma/schema.prisma +4 -88
- package/web/assets/{index-DB8a8_aD.js → index-BWyQwoAk.js} +1536 -1537
- package/web/index.html +1 -1
package/package.json
CHANGED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
-- SPEC-384 · ADR-0092 · cabut error monitoring (SPEC-249/254/269/271/276/296) dan cross-audit
|
|
2
|
+
-- (SPEC-337). Pemantauan error produksi pindah ke Uptrace; data di bawah ini tak punya pembaca
|
|
3
|
+
-- lagi. DESTRUKTIF & TAK BISA DIBATALKAN.
|
|
4
|
+
--
|
|
5
|
+
-- Byte source-map hidup di HANOMAN_UPLOAD_DIR dengan nama opaque `<uuid>.map` — DIREKTORI YANG
|
|
6
|
+
-- SAMA dengan lampiran tiket. Migration SQL tak bisa menyentuh filesystem, jadi pembersihannya
|
|
7
|
+
-- adalah langkah runbook manual yang dijalankan SEBELUM migration ini: baca
|
|
8
|
+
-- `SELECT storageKey FROM SourceMapArtifact` lalu hapus tepat berkas-berkas itu (JANGAN direktorinya
|
|
9
|
+
-- — lampiran tiket ikut hilang). Lihat internal/docs/operations/production.md. Melewatkannya hanya
|
|
10
|
+
-- menyisakan byte inert.
|
|
11
|
+
|
|
12
|
+
-- `defer_foreign_keys` wajib berpasangan dengan `foreign_keys=OFF` di sini: Spec & Ticket memegang
|
|
13
|
+
-- FK ke "Project", dan rebuild di bawah menjatuhkan tabel itu sebelum penggantinya bernama sama.
|
|
14
|
+
-- Idiom yang sama dipakai migration SPEC-408.
|
|
15
|
+
PRAGMA foreign_keys=OFF;
|
|
16
|
+
PRAGMA defer_foreign_keys=ON;
|
|
17
|
+
|
|
18
|
+
-- 1. Tabel. ErrorEvent dulu (FK → ErrorGroup).
|
|
19
|
+
DROP TABLE IF EXISTS "ErrorEvent";
|
|
20
|
+
DROP TABLE IF EXISTS "SourceMapArtifact";
|
|
21
|
+
DROP TABLE IF EXISTS "ErrorGroup";
|
|
22
|
+
DROP TABLE IF EXISTS "ProjectLink";
|
|
23
|
+
|
|
24
|
+
-- 2. Project kehilangan kolom DSN. Table rebuild (pola Prisma untuk SQLite), bukan DROP COLUMN:
|
|
25
|
+
-- berkas DB ini bisa dibuka SQLite versi mana pun yang dibawa instalasi npm pengguna.
|
|
26
|
+
CREATE TABLE "new_Project" (
|
|
27
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
28
|
+
"name" TEXT NOT NULL,
|
|
29
|
+
"desc" TEXT NOT NULL,
|
|
30
|
+
"kind" TEXT NOT NULL,
|
|
31
|
+
"repoDir" TEXT,
|
|
32
|
+
"gitRemote" TEXT,
|
|
33
|
+
"stack" TEXT NOT NULL DEFAULT '',
|
|
34
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
35
|
+
"version" INTEGER NOT NULL DEFAULT 0,
|
|
36
|
+
"updatedAt" DATETIME NOT NULL,
|
|
37
|
+
"helpEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
38
|
+
"schedulerOptIn" BOOLEAN NOT NULL DEFAULT false,
|
|
39
|
+
"leadOptIn" BOOLEAN NOT NULL DEFAULT false
|
|
40
|
+
);
|
|
41
|
+
INSERT INTO "new_Project" ("id","name","desc","kind","repoDir","gitRemote","stack","createdAt","version","updatedAt","helpEnabled","schedulerOptIn","leadOptIn")
|
|
42
|
+
SELECT "id","name","desc","kind","repoDir","gitRemote","stack","createdAt","version","updatedAt","helpEnabled","schedulerOptIn","leadOptIn" FROM "Project";
|
|
43
|
+
DROP TABLE "Project";
|
|
44
|
+
ALTER TABLE "new_Project" RENAME TO "Project";
|
|
45
|
+
|
|
46
|
+
-- 3. Baris yang nilainya tak lagi sah menurut zod. Dibiarkan hidup, ia menggagalkan pembacaan
|
|
47
|
+
-- daftar notifikasi / backlog dengan galat parse — bukan dengan pesan yang berguna.
|
|
48
|
+
DELETE FROM "Notification" WHERE "type" = 'error';
|
|
49
|
+
-- Spec bersumber cross-audit DINORMALKAN, bukan dihapus: backlog item-nya pekerjaan nyata dengan
|
|
50
|
+
-- branch & dokumen; yang hilang cuma label asalnya.
|
|
51
|
+
UPDATE "Spec" SET "source" = 'audit' WHERE "source" = 'cross-audit';
|
|
52
|
+
DELETE FROM "SyncLog" WHERE "entity" = 'errorGroup';
|
|
53
|
+
DELETE FROM "SyncOutbox" WHERE "entity" = 'errorGroup';
|
|
54
|
+
DELETE FROM "SyncConflict" WHERE "entity" = 'errorGroup';
|
|
55
|
+
DELETE FROM "SchedulerQueueItem" WHERE "source" = 'errors';
|
|
56
|
+
|
|
57
|
+
PRAGMA foreign_keys=ON;
|
|
58
|
+
PRAGMA defer_foreign_keys=OFF;
|
package/prisma/schema.prisma
CHANGED
|
@@ -18,35 +18,11 @@ model Project {
|
|
|
18
18
|
createdAt DateTime @default(now())
|
|
19
19
|
version Int @default(0) // SPEC-213 · version-stamp sync (ADR-0045)
|
|
20
20
|
updatedAt DateTime @updatedAt
|
|
21
|
-
ingestKeyHash String? // SPEC-249 · sha256(ingest key) hex; null = monitoring off. TAK PERNAH ke client.
|
|
22
|
-
ingestKeyPrefix String? // SPEC-249 · ~12-16 char awal key untuk hint UI (bukan rahasia)
|
|
23
21
|
helpEnabled Boolean @default(false) // SPEC-253 · opt-in Help Center publik
|
|
24
22
|
schedulerOptIn Boolean @default(false) // SPEC-294 · ADR-0072 · opt-in scheduler otonom (LOCAL — tak masuk FIELDS sync)
|
|
25
23
|
leadOptIn Boolean @default(false) // SPEC-409 · ADR-0091 · opt-in hanoman-lead (LOCAL — cermin schedulerOptIn)
|
|
26
24
|
specs Spec[]
|
|
27
|
-
errorGroups ErrorGroup[]
|
|
28
25
|
tickets Ticket[]
|
|
29
|
-
sourceMaps SourceMapArtifact[] // SPEC-276 · source-map ter-upload per release (symbolication)
|
|
30
|
-
linksOut ProjectLink[] @relation("ProjectLinkFrom") // SPEC-337 · project ini bergantung pada …
|
|
31
|
-
linksIn ProjectLink[] @relation("ProjectLinkTo") // SPEC-337 · … yang bergantung pada project ini
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// SPEC-337 · ADR-0075 · relasi integrasi/dependency BERARAH antar project: from BERGANTUNG PADA to.
|
|
35
|
-
// LOCAL-only (tak masuk SYNCED): id cuid + unique pasangan bertabrakan saat upsert-by-id lintas device.
|
|
36
|
-
// onUpdate: Cascade → rename project (ADR-0064) merambat gratis; tak ada ref longgar baru.
|
|
37
|
-
model ProjectLink {
|
|
38
|
-
id String @id @default(cuid())
|
|
39
|
-
fromProjectId String
|
|
40
|
-
toProjectId String
|
|
41
|
-
kind String // api | sdk | data | event | lainnya (zLinkKind)
|
|
42
|
-
note String @default("") // bentuk integrasinya — disalin apa adanya ke prompt sesi audit lintas
|
|
43
|
-
createdAt DateTime @default(now())
|
|
44
|
-
updatedAt DateTime @updatedAt
|
|
45
|
-
from Project @relation("ProjectLinkFrom", fields: [fromProjectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
46
|
-
to Project @relation("ProjectLinkTo", fields: [toProjectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
47
|
-
|
|
48
|
-
@@unique([fromProjectId, toProjectId])
|
|
49
|
-
@@index([toProjectId])
|
|
50
26
|
}
|
|
51
27
|
|
|
52
28
|
model Spec {
|
|
@@ -310,7 +286,7 @@ model SchedulerQueueItem {
|
|
|
310
286
|
id String @id @default(cuid())
|
|
311
287
|
specId String @unique
|
|
312
288
|
projectId String
|
|
313
|
-
source String // backlog |
|
|
289
|
+
source String // backlog | triase (asal checker) — SPEC-384 · `errors` dicabut (ADR-0092)
|
|
314
290
|
priority String // tinggi | sedang | rendah (urutan drain)
|
|
315
291
|
status String @default("queued") // queued | launched | done | failed
|
|
316
292
|
sessionId String?
|
|
@@ -327,7 +303,7 @@ model SchedulerQueueItem {
|
|
|
327
303
|
//
|
|
328
304
|
// LOCAL-ONLY (tak disync, cermin SessionHistory/SchedulerQueueItem): barisnya menunjuk sesi tmux &
|
|
329
305
|
// worktree di MESIN INI — menyiarkannya ke hub akan mengirim rujukan yang tak ada di sana. Tanpa
|
|
330
|
-
// `version`/notifySynced. Tak ada FK ke Project: sesi VPS
|
|
306
|
+
// `version`/notifySynced. Tak ada FK ke Project: sesi VPS memakai projectId sintetis
|
|
331
307
|
// (konvensi yang sama dipakai SessionResult & SessionHistory).
|
|
332
308
|
model LeadDecision {
|
|
333
309
|
id String @id @default(cuid())
|
|
@@ -361,68 +337,8 @@ model RuntimeConfig {
|
|
|
361
337
|
updatedAt DateTime @updatedAt
|
|
362
338
|
}
|
|
363
339
|
|
|
364
|
-
// SPEC-249 · ADR-0060 · grup error per project (fingerprint dedup). SPEC-268/ADR-0066: agregat
|
|
365
|
-
// grup kini tersync (version-stamp); ErrorEvent mentah tetap server-local (tak disync).
|
|
366
|
-
model ErrorGroup {
|
|
367
|
-
id String @id @default(cuid())
|
|
368
|
-
projectId String
|
|
369
|
-
fingerprint String
|
|
370
|
-
type String
|
|
371
|
-
message String
|
|
372
|
-
sampleStack String?
|
|
373
|
-
sampleFrames Json? // SPEC-276 · ADR-0070 · frame mentah sample (disymbolikasi saat display)
|
|
374
|
-
release String? // SPEC-276 · ADR-0070 · release terakhir (korelasi build + surface di UI)
|
|
375
|
-
environment String
|
|
376
|
-
status String @default("new") // new | escalated | resolved
|
|
377
|
-
count Int @default(0)
|
|
378
|
-
firstSeenAt DateTime @default(now())
|
|
379
|
-
lastSeenAt DateTime @default(now())
|
|
380
|
-
specId String?
|
|
381
|
-
createdAt DateTime @default(now())
|
|
382
|
-
updatedAt DateTime @updatedAt
|
|
383
|
-
version Int @default(0) // SPEC-268 · version-stamp sync (ADR-0066)
|
|
384
|
-
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
|
385
|
-
events ErrorEvent[]
|
|
386
|
-
|
|
387
|
-
@@unique([projectId, fingerprint])
|
|
388
|
-
@@index([projectId, lastSeenAt])
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
// SPEC-249 · ADR-0060 · kejadian error mentah, dipangkas retensi (cap per grup + umur).
|
|
392
|
-
model ErrorEvent {
|
|
393
|
-
id String @id @default(cuid())
|
|
394
|
-
groupId String
|
|
395
|
-
projectId String
|
|
396
|
-
type String
|
|
397
|
-
message String
|
|
398
|
-
stack String?
|
|
399
|
-
frames Json? // SPEC-276 · ADR-0070 · frame terstruktur mentah dari SDK
|
|
400
|
-
environment String
|
|
401
|
-
release String?
|
|
402
|
-
context Json?
|
|
403
|
-
receivedAt DateTime @default(now())
|
|
404
|
-
group ErrorGroup @relation(fields: [groupId], references: [id], onDelete: Cascade)
|
|
405
|
-
|
|
406
|
-
@@index([groupId, receivedAt])
|
|
407
|
-
@@index([projectId, receivedAt])
|
|
408
|
-
}
|
|
409
340
|
|
|
410
|
-
// SPEC-276 · ADR-0070 · source-map ter-upload per release untuk symbolication. Byte map di
|
|
411
|
-
// HANOMAN_UPLOAD_DIR (server-local, TAK disync — cermin TicketAttachment biner & ErrorEvent).
|
|
412
|
-
model SourceMapArtifact {
|
|
413
|
-
id String @id @default(cuid())
|
|
414
|
-
projectId String
|
|
415
|
-
release String
|
|
416
|
-
filename String // basename artifact hasil-build (mis. index-4f3a2b.js) yang dipetakan map ini
|
|
417
|
-
debugId String?
|
|
418
|
-
storageKey String // berkas opaque (uuid.map) di upload dir
|
|
419
|
-
size Int
|
|
420
|
-
createdAt DateTime @default(now())
|
|
421
|
-
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
|
422
341
|
|
|
423
|
-
@@unique([projectId, release, filename])
|
|
424
|
-
@@index([projectId, release])
|
|
425
|
-
}
|
|
426
342
|
|
|
427
343
|
// SPEC-253 · ADR-0062 · tiket keluhan Help Center. SPEC-268/ADR-0066: metadata tiket kini tersync
|
|
428
344
|
// (version-stamp); lampiran (TicketAttachment, file biner) tetap server-local (tak disync).
|
|
@@ -437,7 +353,7 @@ model Ticket {
|
|
|
437
353
|
status String @default("new") // new | accepted | rejected (zTicketStatus)
|
|
438
354
|
accessKeyHash String @unique // sha256(kunci opaque) — lookup cek status. Plaintext hanya sekali.
|
|
439
355
|
shareToken String? @unique // SPEC-293 · token bagikan link status publik (hnm_shr_…); operator → pelapor
|
|
440
|
-
specId String? // soft-link Spec hasil promosi
|
|
356
|
+
specId String? // soft-link Spec hasil promosi
|
|
441
357
|
createdAt DateTime @default(now())
|
|
442
358
|
updatedAt DateTime @updatedAt
|
|
443
359
|
version Int @default(0) // SPEC-268 · version-stamp sync (ADR-0066)
|
|
@@ -452,7 +368,7 @@ model Ticket {
|
|
|
452
368
|
model TicketAttachment {
|
|
453
369
|
id String @id @default(cuid())
|
|
454
370
|
ticketId String
|
|
455
|
-
projectId String // denormal — isolasi & query murah
|
|
371
|
+
projectId String // denormal — isolasi & query murah
|
|
456
372
|
filename String // nama asli tersanitasi (display saja)
|
|
457
373
|
mimeType String // image/png | image/jpeg | image/webp
|
|
458
374
|
size Int
|