@jungjaehoon/mama-os 0.32.3 → 0.34.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.
Files changed (105) hide show
  1. package/README.md +15 -17
  2. package/dist/agent/os-agent-capabilities.md +2 -2
  3. package/dist/api/graph-api.d.ts +4 -4
  4. package/dist/api/graph-api.d.ts.map +1 -1
  5. package/dist/api/graph-api.js +47 -78
  6. package/dist/api/graph-api.js.map +1 -1
  7. package/dist/api/index.d.ts +10 -0
  8. package/dist/api/index.d.ts.map +1 -1
  9. package/dist/api/index.js +9 -2
  10. package/dist/api/index.js.map +1 -1
  11. package/dist/api/operator-handler.d.ts +1 -1
  12. package/dist/api/operator-handler.js +1 -1
  13. package/dist/api/runtime-status-handler.d.ts +41 -0
  14. package/dist/api/runtime-status-handler.d.ts.map +1 -0
  15. package/dist/api/runtime-status-handler.js +55 -0
  16. package/dist/api/runtime-status-handler.js.map +1 -0
  17. package/dist/cli/commands/start.d.ts.map +1 -1
  18. package/dist/cli/commands/start.js +58 -23
  19. package/dist/cli/commands/start.js.map +1 -1
  20. package/dist/cli/runtime/api-routes-init.d.ts +2 -0
  21. package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
  22. package/dist/cli/runtime/api-routes-init.js +62 -1
  23. package/dist/cli/runtime/api-routes-init.js.map +1 -1
  24. package/dist/cli/runtime/api-server-init.d.ts +12 -1
  25. package/dist/cli/runtime/api-server-init.d.ts.map +1 -1
  26. package/dist/cli/runtime/api-server-init.js +54 -0
  27. package/dist/cli/runtime/api-server-init.js.map +1 -1
  28. package/dist/cli/runtime/utilities.d.ts +1 -1
  29. package/dist/cli/runtime/utilities.d.ts.map +1 -1
  30. package/dist/cli/runtime/utilities.js +3 -1
  31. package/dist/cli/runtime/utilities.js.map +1 -1
  32. package/dist/gateways/message-router.d.ts +4 -0
  33. package/dist/gateways/message-router.d.ts.map +1 -1
  34. package/dist/gateways/message-router.js +62 -13
  35. package/dist/gateways/message-router.js.map +1 -1
  36. package/dist/gateways/owner-report-inbox.d.ts +40 -0
  37. package/dist/gateways/owner-report-inbox.d.ts.map +1 -0
  38. package/dist/gateways/owner-report-inbox.js +128 -0
  39. package/dist/gateways/owner-report-inbox.js.map +1 -0
  40. package/dist/gateways/report-projection-v1.d.ts +41 -0
  41. package/dist/gateways/report-projection-v1.d.ts.map +1 -0
  42. package/dist/gateways/report-projection-v1.js +160 -0
  43. package/dist/gateways/report-projection-v1.js.map +1 -0
  44. package/dist/gateways/session-store.d.ts +22 -0
  45. package/dist/gateways/session-store.d.ts.map +1 -1
  46. package/dist/gateways/session-store.js +76 -3
  47. package/dist/gateways/session-store.js.map +1 -1
  48. package/dist/gateways/telegram-message-ledger.d.ts +10 -0
  49. package/dist/gateways/telegram-message-ledger.d.ts.map +1 -1
  50. package/dist/gateways/telegram-message-ledger.js +23 -2
  51. package/dist/gateways/telegram-message-ledger.js.map +1 -1
  52. package/dist/gateways/telegram-report-context-store.d.ts +193 -0
  53. package/dist/gateways/telegram-report-context-store.d.ts.map +1 -0
  54. package/dist/gateways/telegram-report-context-store.js +612 -0
  55. package/dist/gateways/telegram-report-context-store.js.map +1 -0
  56. package/dist/gateways/telegram.d.ts +9 -0
  57. package/dist/gateways/telegram.d.ts.map +1 -1
  58. package/dist/gateways/telegram.js +100 -0
  59. package/dist/gateways/telegram.js.map +1 -1
  60. package/dist/gateways/types.d.ts +12 -0
  61. package/dist/gateways/types.d.ts.map +1 -1
  62. package/dist/multi-agent/dashboard-agent-persona.js +2 -2
  63. package/dist/operator/board-slot-instructions.d.ts +1 -1
  64. package/dist/operator/board-slot-instructions.js +1 -1
  65. package/dist/operator/operator-trigger-loop.d.ts +17 -1
  66. package/dist/operator/operator-trigger-loop.d.ts.map +1 -1
  67. package/dist/operator/operator-trigger-loop.js +87 -23
  68. package/dist/operator/operator-trigger-loop.js.map +1 -1
  69. package/dist/operator/report-delivery-coordinator.d.ts +82 -0
  70. package/dist/operator/report-delivery-coordinator.d.ts.map +1 -0
  71. package/dist/operator/report-delivery-coordinator.js +123 -0
  72. package/dist/operator/report-delivery-coordinator.js.map +1 -0
  73. package/dist/operator/situation-report.d.ts +7 -0
  74. package/dist/operator/situation-report.d.ts.map +1 -1
  75. package/dist/operator/situation-report.js +12 -0
  76. package/dist/operator/situation-report.js.map +1 -1
  77. package/package.json +1 -2
  78. package/public/viewer/js/modules/system.js +183 -0
  79. package/public/viewer/js/utils/ui-commands.js +4 -9
  80. package/public/viewer/log-viewer.html +2 -192
  81. package/public/viewer/operator/operator.css +1 -0
  82. package/public/viewer/operator/operator.js +14830 -0
  83. package/public/viewer/src/modules/system.ts +242 -0
  84. package/public/viewer/src/utils/ui-commands.ts +4 -8
  85. package/public/viewer/sw.js +44 -10
  86. package/public/viewer/viewer.css +338 -331
  87. package/public/viewer/viewer.html +388 -1472
  88. package/public/ui/assets/index-BDXDGEV6.js +0 -62
  89. package/public/ui/assets/index-po2tN0xq.css +0 -1
  90. package/public/ui/index.html +0 -14
  91. package/public/ui/theme-init.js +0 -20
  92. package/public/viewer/js/modules/agents.js +0 -1153
  93. package/public/viewer/js/modules/chat.js +0 -1993
  94. package/public/viewer/js/modules/connector-feed.js +0 -352
  95. package/public/viewer/js/modules/dashboard.js +0 -456
  96. package/public/viewer/js/modules/entity-audit.js +0 -106
  97. package/public/viewer/js/modules/entity-review.js +0 -66
  98. package/public/viewer/js/modules/settings.js +0 -1257
  99. package/public/viewer/src/modules/agents.ts +0 -1302
  100. package/public/viewer/src/modules/chat.ts +0 -2426
  101. package/public/viewer/src/modules/connector-feed.ts +0 -391
  102. package/public/viewer/src/modules/dashboard.ts +0 -498
  103. package/public/viewer/src/modules/entity-audit.ts +0 -154
  104. package/public/viewer/src/modules/entity-review.ts +0 -175
  105. package/public/viewer/src/modules/settings.ts +0 -1547
@@ -0,0 +1,193 @@
1
+ /**
2
+ * TG-05/TG-06: Telegram owner-report context inbox store.
3
+ *
4
+ * The messenger SQLite database is the single report-context authority for
5
+ * owner-report delivery events and turn-consumption receipts
6
+ * (docs/development/telegram-outbound-context-inbox-design.md, Decision 4).
7
+ */
8
+ import type { SQLiteDatabase } from '../sqlite.js';
9
+ export type ReportContextEventState = 'prepared_retryable' | 'prepared_definite_rejection' | 'delivered' | 'cancelled';
10
+ export interface ReportContextTarget {
11
+ source: 'telegram';
12
+ channelId: string;
13
+ }
14
+ export interface ReportContextReservationInput {
15
+ deliveryId: string;
16
+ target: ReportContextTarget;
17
+ mode: 'digest' | 'full';
18
+ occurrence: Record<string, unknown>;
19
+ provenance?: Record<string, unknown>;
20
+ text: string;
21
+ payloadIdentity: string;
22
+ }
23
+ export interface ReportContextEvent {
24
+ seq: number;
25
+ deliveryId: string;
26
+ state: ReportContextEventState;
27
+ }
28
+ export interface ReportContextEventDetail extends ReportContextEvent {
29
+ attemptCount: number;
30
+ nextAttemptAt: string | null;
31
+ leaseUntil: string | null;
32
+ rejectionReason: string | null;
33
+ cancelReason: string | null;
34
+ }
35
+ export interface TelegramReportContextStoreOptions {
36
+ nowIso?: () => string;
37
+ /**
38
+ * TG-05 Slice K (design Decision 8): when set, the constructor solely
39
+ * migrates the legacy V2 carry file (last-full-report.json) into the
40
+ * event/legacy-restoration tables and renames the source `.migrated`.
41
+ * No component reads or writes V2 afterward.
42
+ */
43
+ legacyCarryPath?: string;
44
+ /** Design Decision 5 live capacity (prepared-or-unconsumed) per target. */
45
+ liveRowCapPerTarget?: number;
46
+ liveByteCapPerTarget?: number;
47
+ /** Retained exact-text capacity per target before consumed rows compact. */
48
+ retainedRowCapPerTarget?: number;
49
+ retainedByteCapPerTarget?: number;
50
+ }
51
+ export declare class TelegramReportContextStore {
52
+ private readonly db;
53
+ private readonly nowIso;
54
+ private readonly liveRowCap;
55
+ private readonly liveByteCap;
56
+ private readonly retainedRowCap;
57
+ private readonly retainedByteCap;
58
+ constructor(db: SQLiteDatabase, options?: TelegramReportContextStoreOptions);
59
+ /**
60
+ * TG-05 Slice K: migrate the legacy V2 carry file. Unconsumed -> a
61
+ * delivered-pending event (even past the old 24h TTL); consumed -> a
62
+ * target-scoped legacy restoration record carrying the EXACT old prefix
63
+ * bytes. Transactionally insert/verify, commit, then atomically rename the
64
+ * source `.migrated`. Invalid files are quarantined and never injected.
65
+ */
66
+ private migrateLegacyCarry;
67
+ /**
68
+ * Idempotently insert the exact prepared report before any external send.
69
+ * A replay of the same delivery ID must carry the identical payload; any
70
+ * divergence is an identity conflict and never silently overwrites.
71
+ */
72
+ reserve(input: ReportContextReservationInput): ReportContextEvent;
73
+ /**
74
+ * Atomically transition a confirmed send to `delivered`. Idempotent: an
75
+ * already-delivered row keeps its original delivery time so crash-recovery
76
+ * replays converge instead of rewriting history.
77
+ */
78
+ markDelivered(deliveryId: string, deliveredAtIso: string): void;
79
+ /**
80
+ * Compare-and-swap attempt lease: exactly one holder may execute a Telegram
81
+ * send at a time. A live lease excludes every new claim - another worker,
82
+ * another tick, or the same owner - and an expired lease is recoverable
83
+ * after restart. Returns null when no claim is possible.
84
+ */
85
+ claimAttempt(deliveryId: string, owner: string, nowIso: string, leaseUntilIso: string): {
86
+ deliveryId: string;
87
+ owner: string;
88
+ leaseUntilIso: string;
89
+ } | null;
90
+ /**
91
+ * Safe cancellation (design Decision 3): permitted only from
92
+ * prepared_definite_rejection - the one state where the Telegram ledger
93
+ * proves definite non-acceptance and no attempt lease is live. Ambiguous or
94
+ * confirmed acceptance can never be cancelled. Replay on an already
95
+ * cancelled row is a converging no-op that keeps the first audit record.
96
+ */
97
+ cancel(deliveryId: string, reason: string, operatorTimeIso: string): void;
98
+ /**
99
+ * Explicit operator reactivation of a definite rejection after conditions
100
+ * are corrected (for example the bot was unblocked). Same delivery ID, same
101
+ * immutable target; the row becomes immediately recoverable.
102
+ */
103
+ reactivate(deliveryId: string): void;
104
+ /**
105
+ * Delivered reports not yet consumed by an owner turn, for one exact
106
+ * target, oldest first. This is the pending-projection source; one chat can
107
+ * never read another target's reports.
108
+ */
109
+ listDeliveredPending(target: ReportContextTarget): Array<{
110
+ seq: number;
111
+ deliveryId: string;
112
+ mode: 'digest' | 'full';
113
+ deliveredAtIso: string;
114
+ text: string;
115
+ }>;
116
+ /**
117
+ * Committed receipts for the given source-message references, in the input
118
+ * order. Only text-bearing receipts are returned; a compacted receipt no
119
+ * longer restores.
120
+ */
121
+ listReceiptsByRefs(refs: string[]): Array<{
122
+ sourceMessageRef: string;
123
+ deliveryIds: string[];
124
+ projectionText: string;
125
+ committedAtIso: string;
126
+ }>;
127
+ /**
128
+ * Legacy V2 restorations for one target, eligible for fresh-session history
129
+ * (30 days after consumption, design Decision 8). Restoration text is
130
+ * JSON-decoded back to the exact legacy prefix string.
131
+ */
132
+ listLegacyRestorations(target: ReportContextTarget, nowIso: string): Array<{
133
+ deliveryId: string;
134
+ consumedAtIso: string;
135
+ deliveredAtIso: string;
136
+ restorationText: string;
137
+ }>;
138
+ private compactRetained;
139
+ private enforceLiveCapacity;
140
+ /**
141
+ * Design Decision 5: explicit two-step operator action (token flow lives at
142
+ * the API layer). Archives ONLY already-delivered pending rows up to and
143
+ * including `throughSeq`, records the audit fields, and removes them from
144
+ * pending projection and live capacity. Never Telegram cancellation.
145
+ */
146
+ archiveDelivered(target: ReportContextTarget, throughSeq: number, actor: string, reason: string, nowIso: string): string[];
147
+ /** Live usage for the status surface; warn at 80% of either bound. */
148
+ liveUsage(target: ReportContextTarget): {
149
+ rows: number;
150
+ bytes: number;
151
+ rowCap: number;
152
+ byteCap: number;
153
+ warn: boolean;
154
+ };
155
+ /**
156
+ * Tombstone GC (design Decision 4): identity tombstones are retained up to
157
+ * 365 days with a global count cap. No tombstone younger than Telegram's
158
+ * seven-day replay window is ever pruned; beyond that floor the oldest
159
+ * terminal tombstones go first. Returns the number of removed rows.
160
+ */
161
+ pruneTombstones(nowIso: string, options?: {
162
+ maxTombstones?: number;
163
+ }): number;
164
+ /** Read one event's attempt/terminal detail; null when unknown. */
165
+ getEvent(deliveryId: string): ReportContextEventDetail | null;
166
+ /**
167
+ * Record a retryable send failure: keep the row nonterminal, stamp the next
168
+ * attempt time, and release the lease. Only the current lease holder may
169
+ * reshape backoff - a stale worker's outcome must not race a live one.
170
+ */
171
+ scheduleRetry(deliveryId: string, owner: string, nextAttemptAtIso: string): void;
172
+ /**
173
+ * Record a definite Telegram non-acceptance. The row stays pinned in the
174
+ * ledger (nonterminal) and is never automatically retried; only an explicit
175
+ * operator action may reactivate it (design Decision 3).
176
+ */
177
+ markDefiniteRejection(deliveryId: string, owner: string, reason: string): void;
178
+ /**
179
+ * Startup/tick recovery: prepared_retryable rows that are due (no future
180
+ * retry scheduled) and not held by a live attempt lease, oldest first.
181
+ */
182
+ listRecoverable(nowIso: string): ReportContextEvent[];
183
+ /**
184
+ * Startup ledger reconciliation input: every nonterminal row must hold a
185
+ * Telegram-ledger pin, every terminal row must not (design Decision 2).
186
+ */
187
+ listPinReconciliation(): {
188
+ nonterminal: string[];
189
+ terminal: string[];
190
+ };
191
+ private runMigration;
192
+ }
193
+ //# sourceMappingURL=telegram-report-context-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-report-context-store.d.ts","sourceRoot":"","sources":["../../src/gateways/telegram-report-context-store.ts"],"names":[],"mappings":"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"}