@jungjaehoon/mama-os 0.21.0 → 0.22.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 (129) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +12 -4
  3. package/dist/agent/agent-loop.d.ts.map +1 -1
  4. package/dist/agent/agent-loop.js +76 -11
  5. package/dist/agent/agent-loop.js.map +1 -1
  6. package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
  7. package/dist/agent/code-act/host-bridge.js +74 -0
  8. package/dist/agent/code-act/host-bridge.js.map +1 -1
  9. package/dist/agent/codex-mcp-process.d.ts +1 -0
  10. package/dist/agent/codex-mcp-process.d.ts.map +1 -1
  11. package/dist/agent/codex-mcp-process.js +3 -2
  12. package/dist/agent/codex-mcp-process.js.map +1 -1
  13. package/dist/agent/gateway-tool-executor.d.ts +16 -1
  14. package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
  15. package/dist/agent/gateway-tool-executor.js +148 -2
  16. package/dist/agent/gateway-tool-executor.js.map +1 -1
  17. package/dist/agent/gateway-tools.md +6 -1
  18. package/dist/agent/model-runner.d.ts +8 -0
  19. package/dist/agent/model-runner.d.ts.map +1 -1
  20. package/dist/agent/model-runner.js.map +1 -1
  21. package/dist/agent/persistent-cli-adapter.d.ts +6 -0
  22. package/dist/agent/persistent-cli-adapter.d.ts.map +1 -1
  23. package/dist/agent/persistent-cli-adapter.js +21 -10
  24. package/dist/agent/persistent-cli-adapter.js.map +1 -1
  25. package/dist/agent/tool-registry.d.ts.map +1 -1
  26. package/dist/agent/tool-registry.js +32 -1
  27. package/dist/agent/tool-registry.js.map +1 -1
  28. package/dist/agent/types.d.ts +26 -2
  29. package/dist/agent/types.d.ts.map +1 -1
  30. package/dist/agent/types.js.map +1 -1
  31. package/dist/api/index.d.ts +1 -1
  32. package/dist/api/index.d.ts.map +1 -1
  33. package/dist/api/index.js +15 -13
  34. package/dist/api/index.js.map +1 -1
  35. package/dist/api/operator-handler.d.ts +2 -0
  36. package/dist/api/operator-handler.d.ts.map +1 -1
  37. package/dist/api/operator-handler.js +23 -5
  38. package/dist/api/operator-handler.js.map +1 -1
  39. package/dist/api/operator-summary.d.ts +3 -0
  40. package/dist/api/operator-summary.d.ts.map +1 -0
  41. package/dist/api/operator-summary.js +72 -0
  42. package/dist/api/operator-summary.js.map +1 -0
  43. package/dist/api/operator-tasks-handler.d.ts +7 -0
  44. package/dist/api/operator-tasks-handler.d.ts.map +1 -0
  45. package/dist/api/operator-tasks-handler.js +165 -0
  46. package/dist/api/operator-tasks-handler.js.map +1 -0
  47. package/dist/cli/commands/start.d.ts.map +1 -1
  48. package/dist/cli/commands/start.js +62 -12
  49. package/dist/cli/commands/start.js.map +1 -1
  50. package/dist/cli/runtime/agent-loop-init.d.ts +2 -1
  51. package/dist/cli/runtime/agent-loop-init.d.ts.map +1 -1
  52. package/dist/cli/runtime/agent-loop-init.js +16 -8
  53. package/dist/cli/runtime/agent-loop-init.js.map +1 -1
  54. package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
  55. package/dist/cli/runtime/api-routes-init.js +129 -13
  56. package/dist/cli/runtime/api-routes-init.js.map +1 -1
  57. package/dist/cli/runtime/gateway-init.d.ts.map +1 -1
  58. package/dist/cli/runtime/gateway-init.js +3 -1
  59. package/dist/cli/runtime/gateway-init.js.map +1 -1
  60. package/dist/cli/runtime/memory-agent-init.d.ts +2 -1
  61. package/dist/cli/runtime/memory-agent-init.d.ts.map +1 -1
  62. package/dist/cli/runtime/memory-agent-init.js +15 -3
  63. package/dist/cli/runtime/memory-agent-init.js.map +1 -1
  64. package/dist/connectors/framework/types.d.ts +8 -0
  65. package/dist/connectors/framework/types.d.ts.map +1 -1
  66. package/dist/connectors/slack/index.d.ts.map +1 -1
  67. package/dist/connectors/slack/index.js +3 -1
  68. package/dist/connectors/slack/index.js.map +1 -1
  69. package/dist/connectors/trello/index.d.ts.map +1 -1
  70. package/dist/connectors/trello/index.js +6 -2
  71. package/dist/connectors/trello/index.js.map +1 -1
  72. package/dist/db/agent-store.d.ts +5 -0
  73. package/dist/db/agent-store.d.ts.map +1 -1
  74. package/dist/db/agent-store.js +6 -3
  75. package/dist/db/agent-store.js.map +1 -1
  76. package/dist/db/migrations/agent-activity-tool-name.d.ts +8 -0
  77. package/dist/db/migrations/agent-activity-tool-name.d.ts.map +1 -0
  78. package/dist/db/migrations/agent-activity-tool-name.js +24 -0
  79. package/dist/db/migrations/agent-activity-tool-name.js.map +1 -0
  80. package/dist/envelope/run-guard.d.ts +10 -0
  81. package/dist/envelope/run-guard.d.ts.map +1 -0
  82. package/dist/envelope/run-guard.js +19 -0
  83. package/dist/envelope/run-guard.js.map +1 -0
  84. package/dist/multi-agent/agent-event-bus.d.ts +4 -0
  85. package/dist/multi-agent/agent-event-bus.d.ts.map +1 -1
  86. package/dist/multi-agent/agent-event-bus.js.map +1 -1
  87. package/dist/multi-agent/dashboard-agent-persona.d.ts.map +1 -1
  88. package/dist/multi-agent/dashboard-agent-persona.js +18 -5
  89. package/dist/multi-agent/dashboard-agent-persona.js.map +1 -1
  90. package/dist/multi-agent/runtime-process.d.ts +4 -2
  91. package/dist/multi-agent/runtime-process.d.ts.map +1 -1
  92. package/dist/multi-agent/runtime-process.js +7 -4
  93. package/dist/multi-agent/runtime-process.js.map +1 -1
  94. package/dist/operator/action-verifier.d.ts +50 -0
  95. package/dist/operator/action-verifier.d.ts.map +1 -0
  96. package/dist/operator/action-verifier.js +68 -0
  97. package/dist/operator/action-verifier.js.map +1 -0
  98. package/dist/operator/board-reconcile.d.ts +62 -0
  99. package/dist/operator/board-reconcile.d.ts.map +1 -0
  100. package/dist/operator/board-reconcile.js +160 -0
  101. package/dist/operator/board-reconcile.js.map +1 -0
  102. package/dist/operator/board-slot-instructions.d.ts +8 -0
  103. package/dist/operator/board-slot-instructions.d.ts.map +1 -1
  104. package/dist/operator/board-slot-instructions.js +25 -1
  105. package/dist/operator/board-slot-instructions.js.map +1 -1
  106. package/dist/operator/operator-trigger-loop.d.ts +15 -2
  107. package/dist/operator/operator-trigger-loop.d.ts.map +1 -1
  108. package/dist/operator/operator-trigger-loop.js +40 -1
  109. package/dist/operator/operator-trigger-loop.js.map +1 -1
  110. package/dist/operator/report-scheduler.d.ts +23 -0
  111. package/dist/operator/report-scheduler.d.ts.map +1 -1
  112. package/dist/operator/report-scheduler.js +56 -8
  113. package/dist/operator/report-scheduler.js.map +1 -1
  114. package/dist/operator/situation-report.d.ts +5 -1
  115. package/dist/operator/situation-report.d.ts.map +1 -1
  116. package/dist/operator/situation-report.js +12 -2
  117. package/dist/operator/situation-report.js.map +1 -1
  118. package/dist/operator/task-ledger.d.ts +96 -0
  119. package/dist/operator/task-ledger.d.ts.map +1 -0
  120. package/dist/operator/task-ledger.js +277 -0
  121. package/dist/operator/task-ledger.js.map +1 -0
  122. package/package.json +1 -1
  123. package/public/ui/assets/index-CKOJQYXA.css +1 -0
  124. package/public/ui/assets/index-OSgiwL24.js +62 -0
  125. package/public/ui/index.html +3 -2
  126. package/public/ui/theme-init.js +20 -0
  127. package/public/viewer/viewer.html +12 -28
  128. package/public/ui/assets/index-BDsaQNGd.js +0 -62
  129. package/public/ui/assets/index-C4URnm_X.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"situation-report.js","sourceRoot":"","sources":["../../src/operator/situation-report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"situation-report.js","sourceRoot":"","sources":["../../src/operator/situation-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * TaskLedger - the operator-owned native work-item ledger (M8 Task 0.1).
3
+ *
4
+ * Ports the SHAPE of Kagemusha's proven task store (11 columns: id/title/status/
5
+ * priority/deadline/source/auto_created/confirmed/timestamps) plus `assignee`
6
+ * and an idempotency key. Implements the pre-existing `TaskSource` interface
7
+ * (operator-interfaces.ts) so the board projects ONE task model, not two.
8
+ *
9
+ * Reconcile runs create/update rows through the task_create/task_update gateway
10
+ * tools; the pipeline board slot is a projection of `list({order:
11
+ * 'deadline_priority'})`. The AGENT makes every judgment about what becomes a
12
+ * task; this store only persists.
13
+ *
14
+ * Schema-extension note: CREATE TABLE IF NOT EXISTS is a no-op on existing
15
+ * tables. Any post-ship column addition needs an explicit ALTER TABLE guarded
16
+ * by a PRAGMA table_info check, added to runMigration().
17
+ *
18
+ * The db handle is SHARED with TriggerRegistry and owned by the caller
19
+ * (start.ts opens and closes it once) - deliberately no close() here.
20
+ */
21
+ import type { SQLiteDatabase } from '../sqlite.js';
22
+ import type { OperatorTask, TaskSource } from './operator-interfaces.js';
23
+ export declare const TASK_STATUSES: readonly ["pending", "in_progress", "review", "blocked", "done", "cancelled"];
24
+ export type TaskStatus = (typeof TASK_STATUSES)[number];
25
+ export declare const TASK_PRIORITIES: readonly ["high", "normal", "low"];
26
+ export type TaskPriority = (typeof TASK_PRIORITIES)[number];
27
+ /** Extended record: satisfies OperatorTask (numeric deadline) and carries the ISO original. */
28
+ export interface TaskRecord extends OperatorTask {
29
+ status: TaskStatus;
30
+ priority: TaskPriority;
31
+ /** ISO YYYY-MM-DD as stored; `deadline` (OperatorTask) is its UTC-midnight epoch ms. */
32
+ deadlineIso: string | null;
33
+ assignee: string | null;
34
+ sourceChannel: string | null;
35
+ sourceEventId: string | null;
36
+ latestEvent: string | null;
37
+ autoCreated: boolean;
38
+ confirmed: boolean;
39
+ }
40
+ export interface CreateTaskInput {
41
+ title: string;
42
+ status?: TaskStatus;
43
+ priority?: TaskPriority;
44
+ assignee?: string;
45
+ /** ISO YYYY-MM-DD */
46
+ deadline?: string;
47
+ /** channelKey: "<connector>:<channelId>" */
48
+ source_channel?: string;
49
+ /** Idempotency key from the connector event; duplicate (channel, event) UPSERTS. */
50
+ source_event_id?: string;
51
+ latest_event?: string;
52
+ confirmed?: boolean;
53
+ }
54
+ export interface UpdateTaskInput {
55
+ status?: TaskStatus;
56
+ priority?: TaskPriority;
57
+ assignee?: string | null;
58
+ deadline?: string | null;
59
+ latest_event?: string;
60
+ confirmed?: boolean;
61
+ title?: string;
62
+ }
63
+ export interface ListTasksFilter {
64
+ status?: TaskStatus;
65
+ channel?: string;
66
+ search?: string;
67
+ limit?: number;
68
+ /** 'deadline_priority' = deadline asc NULLS LAST, then high>normal>low, then id. */
69
+ order?: 'deadline_priority' | 'updated';
70
+ }
71
+ export declare class TaskLedger implements TaskSource {
72
+ private db;
73
+ constructor(db: SQLiteDatabase);
74
+ private runMigration;
75
+ /** TaskSource conformance: open items in canonical board order. */
76
+ getTasks(): OperatorTask[];
77
+ countOpenUnconfirmed(): number;
78
+ list(filter?: ListTasksFilter): TaskRecord[];
79
+ getById(id: number): TaskRecord | null;
80
+ /**
81
+ * Create a task. Idempotent under at-least-once delivery: a duplicate
82
+ * (source_channel, source_event_id) UPSERTS - the existing row gets the new
83
+ * latest_event (and title stays) instead of a near-duplicate row appearing.
84
+ */
85
+ create(input: CreateTaskInput): TaskRecord;
86
+ update(id: number, patch: UpdateTaskInput): TaskRecord;
87
+ /** Stable hash over ordered rows - the Phase-2 verifier's ledger snapshot. */
88
+ payloadHash(): string;
89
+ /** contract_no_update: silence as a verifiable judgment, scoped to one reconcile run. */
90
+ recordNoUpdate(scope: string, reason: string): {
91
+ id: number;
92
+ };
93
+ /** Max no-update note id, optionally scoped - the verifier's note snapshot. */
94
+ maxNoUpdateId(scope?: string): number;
95
+ }
96
+ //# sourceMappingURL=task-ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-ledger.d.ts","sourceRoot":"","sources":["../../src/operator/task-ledger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+ /**
3
+ * TaskLedger - the operator-owned native work-item ledger (M8 Task 0.1).
4
+ *
5
+ * Ports the SHAPE of Kagemusha's proven task store (11 columns: id/title/status/
6
+ * priority/deadline/source/auto_created/confirmed/timestamps) plus `assignee`
7
+ * and an idempotency key. Implements the pre-existing `TaskSource` interface
8
+ * (operator-interfaces.ts) so the board projects ONE task model, not two.
9
+ *
10
+ * Reconcile runs create/update rows through the task_create/task_update gateway
11
+ * tools; the pipeline board slot is a projection of `list({order:
12
+ * 'deadline_priority'})`. The AGENT makes every judgment about what becomes a
13
+ * task; this store only persists.
14
+ *
15
+ * Schema-extension note: CREATE TABLE IF NOT EXISTS is a no-op on existing
16
+ * tables. Any post-ship column addition needs an explicit ALTER TABLE guarded
17
+ * by a PRAGMA table_info check, added to runMigration().
18
+ *
19
+ * The db handle is SHARED with TriggerRegistry and owned by the caller
20
+ * (start.ts opens and closes it once) - deliberately no close() here.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.TaskLedger = exports.TASK_PRIORITIES = exports.TASK_STATUSES = void 0;
24
+ const node_crypto_1 = require("node:crypto");
25
+ exports.TASK_STATUSES = [
26
+ 'pending',
27
+ 'in_progress',
28
+ 'review',
29
+ 'blocked',
30
+ 'done',
31
+ 'cancelled',
32
+ ];
33
+ exports.TASK_PRIORITIES = ['high', 'normal', 'low'];
34
+ const ISO_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
35
+ function isoToEpochMs(iso) {
36
+ if (!iso)
37
+ return null;
38
+ const ms = Date.parse(`${iso}T00:00:00Z`);
39
+ return Number.isNaN(ms) ? null : ms;
40
+ }
41
+ function assertEnum(value, allowed, field) {
42
+ if (!allowed.includes(value)) {
43
+ throw new Error(`${field} must be one of ${allowed.join('|')}, got: ${value}`);
44
+ }
45
+ }
46
+ function assertIsoDate(value, field) {
47
+ const match = ISO_DATE_PATTERN.exec(value);
48
+ if (!match) {
49
+ throw new Error(`${field} must be an ISO date (YYYY-MM-DD), got: ${value}`);
50
+ }
51
+ const [year, month, day] = value.split('-').map(Number);
52
+ const date = new Date(Date.UTC(year, month - 1, day));
53
+ const isRoundTrip = date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;
54
+ if (!isRoundTrip) {
55
+ throw new Error(`${field} must be an ISO date (YYYY-MM-DD), got: ${value}`);
56
+ }
57
+ }
58
+ function rowToRecord(row) {
59
+ return {
60
+ id: row.id,
61
+ title: row.title,
62
+ status: row.status,
63
+ priority: row.priority,
64
+ deadline: isoToEpochMs(row.deadline),
65
+ deadlineIso: row.deadline,
66
+ assignee: row.assignee,
67
+ sourceChannel: row.source_channel,
68
+ sourceEventId: row.source_event_id,
69
+ latestEvent: row.latest_event,
70
+ autoCreated: row.auto_created === 1,
71
+ confirmed: row.confirmed === 1,
72
+ createdAt: row.created_at,
73
+ updatedAt: row.updated_at,
74
+ };
75
+ }
76
+ class TaskLedger {
77
+ db;
78
+ constructor(db) {
79
+ this.db = db;
80
+ this.runMigration();
81
+ }
82
+ runMigration() {
83
+ this.db.exec(`
84
+ CREATE TABLE IF NOT EXISTS operator_tasks (
85
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
86
+ title TEXT NOT NULL,
87
+ status TEXT NOT NULL DEFAULT 'pending'
88
+ CHECK (status IN ('pending','in_progress','review','blocked','done','cancelled')),
89
+ priority TEXT NOT NULL DEFAULT 'normal' CHECK (priority IN ('high','normal','low')),
90
+ assignee TEXT,
91
+ deadline TEXT,
92
+ source_channel TEXT,
93
+ source_event_id TEXT,
94
+ latest_event TEXT,
95
+ auto_created INTEGER NOT NULL DEFAULT 1,
96
+ confirmed INTEGER NOT NULL DEFAULT 0,
97
+ created_at INTEGER NOT NULL,
98
+ updated_at INTEGER NOT NULL
99
+ );
100
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_operator_tasks_source
101
+ ON operator_tasks(source_channel, source_event_id)
102
+ WHERE source_event_id IS NOT NULL;
103
+ CREATE INDEX IF NOT EXISTS idx_operator_tasks_status ON operator_tasks(status);
104
+ CREATE INDEX IF NOT EXISTS idx_operator_tasks_deadline ON operator_tasks(deadline);
105
+
106
+ CREATE TABLE IF NOT EXISTS operator_no_update_notes (
107
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
108
+ scope TEXT NOT NULL,
109
+ reason TEXT NOT NULL,
110
+ created_at INTEGER NOT NULL
111
+ );
112
+ CREATE INDEX IF NOT EXISTS idx_operator_no_update_scope
113
+ ON operator_no_update_notes(scope, id);
114
+ `);
115
+ }
116
+ /** TaskSource conformance: open items in canonical board order. */
117
+ getTasks() {
118
+ return this.list({ order: 'deadline_priority' });
119
+ }
120
+ countOpenUnconfirmed() {
121
+ const row = this.db
122
+ .prepare(`SELECT COUNT(*) AS count
123
+ FROM operator_tasks
124
+ WHERE auto_created = 1
125
+ AND confirmed = 0
126
+ AND status NOT IN ('done', 'cancelled')`)
127
+ .get();
128
+ return row.count;
129
+ }
130
+ list(filter = {}) {
131
+ const where = [];
132
+ const params = [];
133
+ if (filter.status) {
134
+ where.push('status = ?');
135
+ params.push(filter.status);
136
+ }
137
+ if (filter.channel) {
138
+ where.push('source_channel = ?');
139
+ params.push(filter.channel);
140
+ }
141
+ if (filter.search) {
142
+ where.push('(title LIKE ? OR latest_event LIKE ? OR assignee LIKE ?)');
143
+ const like = `%${filter.search}%`;
144
+ params.push(like, like, like);
145
+ }
146
+ const order = filter.order === 'updated'
147
+ ? 'updated_at DESC, id DESC'
148
+ : // deadline asc NULLS LAST, then priority high>normal>low, then id.
149
+ // LIMIT applies AFTER ordering so the true top-N is returned.
150
+ `CASE WHEN deadline IS NULL THEN 1 ELSE 0 END ASC, deadline ASC,
151
+ CASE priority WHEN 'high' THEN 0 WHEN 'normal' THEN 1 ELSE 2 END ASC, id ASC`;
152
+ const rawLimit = Number(filter.limit);
153
+ const limit = Number.isFinite(rawLimit) ? Math.max(1, Math.min(200, Math.floor(rawLimit))) : 50;
154
+ const rows = this.db
155
+ .prepare(`SELECT * FROM operator_tasks
156
+ ${where.length > 0 ? `WHERE ${where.join(' AND ')}` : ''}
157
+ ORDER BY ${order}
158
+ LIMIT ?`)
159
+ .all(...params, limit);
160
+ return rows.map(rowToRecord);
161
+ }
162
+ getById(id) {
163
+ const row = this.db.prepare(`SELECT * FROM operator_tasks WHERE id = ?`).get(id);
164
+ return row ? rowToRecord(row) : null;
165
+ }
166
+ /**
167
+ * Create a task. Idempotent under at-least-once delivery: a duplicate
168
+ * (source_channel, source_event_id) UPSERTS - the existing row gets the new
169
+ * latest_event (and title stays) instead of a near-duplicate row appearing.
170
+ */
171
+ create(input) {
172
+ if (!input.title || input.title.trim() === '') {
173
+ throw new Error('task title must be a non-empty string');
174
+ }
175
+ if (input.status !== undefined)
176
+ assertEnum(input.status, exports.TASK_STATUSES, 'status');
177
+ if (input.priority !== undefined)
178
+ assertEnum(input.priority, exports.TASK_PRIORITIES, 'priority');
179
+ if (input.deadline !== undefined)
180
+ assertIsoDate(input.deadline, 'deadline');
181
+ const now = Date.now();
182
+ if (input.source_channel && input.source_event_id) {
183
+ const existing = this.db
184
+ .prepare(`SELECT * FROM operator_tasks WHERE source_channel = ? AND source_event_id = ?`)
185
+ .get(input.source_channel, input.source_event_id);
186
+ if (existing) {
187
+ // Upsert carries every provided field EXCEPT title (the original naming
188
+ // stays stable across retries; movement and state updates flow through).
189
+ return this.update(existing.id, {
190
+ ...(input.status !== undefined ? { status: input.status } : {}),
191
+ ...(input.priority !== undefined ? { priority: input.priority } : {}),
192
+ ...(input.assignee !== undefined ? { assignee: input.assignee } : {}),
193
+ ...(input.deadline !== undefined ? { deadline: input.deadline } : {}),
194
+ ...(input.confirmed !== undefined ? { confirmed: input.confirmed } : {}),
195
+ ...(input.latest_event !== undefined ? { latest_event: input.latest_event } : {}),
196
+ });
197
+ }
198
+ }
199
+ const result = this.db
200
+ .prepare(`INSERT INTO operator_tasks
201
+ (title, status, priority, assignee, deadline, source_channel, source_event_id,
202
+ latest_event, auto_created, confirmed, created_at, updated_at)
203
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
204
+ .run(input.title.trim(), input.status ?? 'pending', input.priority ?? 'normal', input.assignee ?? null, input.deadline ?? null, input.source_channel ?? null, input.source_event_id ?? null, input.latest_event ?? null, 1, input.confirmed ? 1 : 0, now, now);
205
+ const created = this.getById(Number(result.lastInsertRowid));
206
+ if (!created)
207
+ throw new Error('task_create: inserted row could not be read back');
208
+ return created;
209
+ }
210
+ update(id, patch) {
211
+ const existing = this.getById(id);
212
+ if (!existing)
213
+ throw new Error(`task_update: no task with id ${id}`);
214
+ if (patch.status !== undefined)
215
+ assertEnum(patch.status, exports.TASK_STATUSES, 'status');
216
+ if (patch.priority !== undefined)
217
+ assertEnum(patch.priority, exports.TASK_PRIORITIES, 'priority');
218
+ if (patch.deadline !== undefined && patch.deadline !== null) {
219
+ assertIsoDate(patch.deadline, 'deadline');
220
+ }
221
+ if (patch.title !== undefined && patch.title.trim() === '') {
222
+ throw new Error('task title must be a non-empty string');
223
+ }
224
+ const sets = ['updated_at = ?'];
225
+ const params = [Date.now()];
226
+ const assign = (column, value) => {
227
+ sets.push(`${column} = ?`);
228
+ params.push(value);
229
+ };
230
+ if (patch.title !== undefined)
231
+ assign('title', patch.title.trim());
232
+ if (patch.status !== undefined)
233
+ assign('status', patch.status);
234
+ if (patch.priority !== undefined)
235
+ assign('priority', patch.priority);
236
+ if (patch.assignee !== undefined)
237
+ assign('assignee', patch.assignee);
238
+ if (patch.deadline !== undefined)
239
+ assign('deadline', patch.deadline);
240
+ if (patch.latest_event !== undefined)
241
+ assign('latest_event', patch.latest_event);
242
+ if (patch.confirmed !== undefined)
243
+ assign('confirmed', patch.confirmed ? 1 : 0);
244
+ this.db.prepare(`UPDATE operator_tasks SET ${sets.join(', ')} WHERE id = ?`).run(...params, id);
245
+ return this.getById(id);
246
+ }
247
+ /** Stable hash over ordered rows - the Phase-2 verifier's ledger snapshot. */
248
+ payloadHash() {
249
+ const rows = this.db
250
+ .prepare(`SELECT id, title, status, priority, assignee, deadline, latest_event, confirmed,
251
+ updated_at
252
+ FROM operator_tasks ORDER BY id ASC`)
253
+ .all();
254
+ return (0, node_crypto_1.createHash)('sha256').update(JSON.stringify(rows)).digest('hex');
255
+ }
256
+ /** contract_no_update: silence as a verifiable judgment, scoped to one reconcile run. */
257
+ recordNoUpdate(scope, reason) {
258
+ if (!scope || !reason) {
259
+ throw new Error('contract_no_update requires both scope and reason');
260
+ }
261
+ const result = this.db
262
+ .prepare(`INSERT INTO operator_no_update_notes (scope, reason, created_at) VALUES (?, ?, ?)`)
263
+ .run(scope, reason, Date.now());
264
+ return { id: Number(result.lastInsertRowid) };
265
+ }
266
+ /** Max no-update note id, optionally scoped - the verifier's note snapshot. */
267
+ maxNoUpdateId(scope) {
268
+ const row = (scope
269
+ ? this.db
270
+ .prepare(`SELECT MAX(id) AS max_id FROM operator_no_update_notes WHERE scope = ?`)
271
+ .get(scope)
272
+ : this.db.prepare(`SELECT MAX(id) AS max_id FROM operator_no_update_notes`).get());
273
+ return row.max_id ?? 0;
274
+ }
275
+ }
276
+ exports.TaskLedger = TaskLedger;
277
+ //# sourceMappingURL=task-ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-ledger.js","sourceRoot":"","sources":["../../src/operator/task-ledger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jungjaehoon/mama-os",
3
- "version": "0.21.0",
3
+ "version": "0.22.0",
4
4
  "description": "MAMA OS - Local AI Runtime. Your scattered knowledge, organized by AI agents that never sleep.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-4xl:56rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--radius-lg:.5rem;--radius-xl:.75rem;--shadow-xs:0 1px 2px #0000000d;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg:#f1f1f1;--color-surface:#fff;--color-surface-hover:#f7f7f7;--color-surface-selected:#f3f3f3;--color-surface-secondary:#f7f7f7;--color-sidebar:#ebebeb;--color-sidebar-hover:#e0e0e0;--color-sidebar-active:#fafafa;--color-sidebar-border:#e3e3e3;--color-agent:#6366f1;--color-agent-hover:#4f46e5;--color-agent-light:#eef2ff;--color-on-agent:#fff;--color-text:#1a1a1a;--color-text-secondary:#616161;--color-text-tertiary:#8a8a8a;--color-border:#e3e3e3;--color-success:#047b5d;--color-warning:#ffb800;--color-danger:#d72c0d;--color-success-soft:#e7f5f0;--color-success-text:#04664e;--color-warning-soft:#fff4d6;--color-warning-text:#805c00;--shadow-drawer:-12px 0 32px #0000002e}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.fixed{position:fixed}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.z-50{z-index:50}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-full{height:100%}.min-h-0{min-height:0}.min-h-full{min-height:100%}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-7{width:calc(var(--spacing) * 7)}.w-60{width:calc(var(--spacing) * 60)}.w-full{width:100%}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-48{max-width:calc(var(--spacing) * 48)}.max-w-80{max-width:calc(var(--spacing) * 80)}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:0}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-64{min-width:calc(var(--spacing) * 64)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.rotate-90{rotate:90deg}.cursor-pointer{cursor:pointer}.scroll-mt-4{scroll-margin-top:calc(var(--spacing) * 4)}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border{border-color:var(--color-border)}.border-sidebar-border{border-color:var(--color-sidebar-border)}.bg-agent{background-color:var(--color-agent)}.bg-agent-hover{background-color:var(--color-agent-hover)}.bg-agent-light{background-color:var(--color-agent-light)}.bg-bg{background-color:var(--color-bg)}.bg-danger{background-color:var(--color-danger)}.bg-sidebar{background-color:var(--color-sidebar)}.bg-sidebar-active{background-color:var(--color-sidebar-active)}.bg-success-soft{background-color:var(--color-success-soft)}.bg-surface{background-color:var(--color-surface)}.bg-surface-hover{background-color:var(--color-surface-hover)}.bg-surface-secondary{background-color:var(--color-surface-secondary)}.bg-surface-selected{background-color:var(--color-surface-selected)}.bg-warning-soft{background-color:var(--color-warning-soft)}.p-4{padding:calc(var(--spacing) * 4)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pb-1{padding-bottom:var(--spacing)}.pb-14{padding-bottom:calc(var(--spacing) * 14)}.pl-1{padding-left:var(--spacing)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-agent{color:var(--color-agent)}.text-agent-hover{color:var(--color-agent-hover)}.text-danger{color:var(--color-danger)}.text-on-agent{color:var(--color-on-agent)}.text-success{color:var(--color-success)}.text-success-text{color:var(--color-success-text)}.text-text{color:var(--color-text)}.text-text-secondary{color:var(--color-text-secondary)}.text-text-tertiary{color:var(--color-text-tertiary)}.text-warning-text{color:var(--color-warning-text)}.uppercase{text-transform:uppercase}.underline-offset-2{text-underline-offset:2px}.shadow-\[var\(--shadow-xs\)\]{--tw-shadow:var(--shadow-xs);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}@media(hover:hover){.hover\:bg-agent-hover:hover{background-color:var(--color-agent-hover)}.hover\:bg-sidebar-hover:hover{background-color:var(--color-sidebar-hover)}.hover\:bg-surface-hover:hover{background-color:var(--color-surface-hover)}.hover\:bg-surface-selected:hover{background-color:var(--color-surface-selected)}.hover\:text-text:hover{color:var(--color-text)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-agent:focus{--tw-ring-color:var(--color-agent)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-row{flex-direction:row}.sm\:items-end{align-items:flex-end}.sm\:justify-between{justify-content:space-between}}@media(min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:pb-0{padding-bottom:0}}.dark\:bg-agent:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-agent)}.dark\:text-agent:where([data-theme=dark],[data-theme=dark] *){color:var(--color-agent)}.dark\:text-text-tertiary:where([data-theme=dark],[data-theme=dark] *){color:var(--color-text-tertiary)}}:root{color-scheme:light}:root[data-theme=dark]{color-scheme:dark;--color-bg:#141414;--color-surface:#1e1e1e;--color-surface-hover:#292929;--color-surface-selected:#303030;--color-surface-secondary:#292929;--color-sidebar:#191919;--color-sidebar-hover:#282828;--color-sidebar-active:#303030;--color-sidebar-border:#343434;--color-agent:#a5b4fc;--color-agent-hover:#c7d2fe;--color-agent-light:#2b315a;--color-on-agent:#1a1a3a;--color-text:#f5f5f5;--color-text-secondary:#c4c4c4;--color-text-tertiary:#9b9b9b;--color-border:#3a3a3a;--color-success:#5ee0b3;--color-warning:#ffd166;--color-danger:#ff8f7a;--color-success-soft:#173b30;--color-success-text:#7ce8c3;--color-warning-soft:#4a3814;--color-warning-text:#ffdb7d;--shadow-xs:0 1px 2px #00000059;--shadow-drawer:-12px 0 32px #0000008c}html,body,#root{height:100%}body{background-color:var(--color-bg);color:var(--color-text);overflow-x:hidden}:where(a[href],button,input,select,textarea,summary,[tabindex]:not([tabindex="-1"])):focus-visible{outline:2px solid var(--color-agent);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.trigger-drawer{border:0;border-left:1px solid var(--color-border);background:var(--color-surface);width:min(100%,32rem);height:100dvh;max-height:100dvh;color:var(--color-text);box-shadow:var(--shadow-drawer);margin:0 0 0 auto;padding:0;overflow:hidden}.trigger-drawer::backdrop{background:#1a1a1a61}@supports (color:color-mix(in lab,red,red)){.trigger-drawer::backdrop{background:color-mix(in srgb,var(--color-text) 38%,transparent)}}.report-summary{margin-bottom:12px}.summary-title{color:var(--color-text);margin-bottom:4px;font-size:14px;font-weight:600}.summary-stats{color:var(--color-text-secondary);font-size:12px}.stat-highlight{color:var(--color-agent);font-weight:700}.report-section-title{color:var(--color-text);margin:4px 0 10px;font-size:13px;font-weight:600}.report-card{border:1px solid var(--color-border);background:var(--color-surface);border-radius:10px;margin-bottom:8px;padding:10px 12px}.card-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.card-title{color:var(--color-text);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:13px;font-weight:600;overflow:hidden}.card-badge{border-radius:999px;flex-shrink:0;padding:2px 8px;font-size:11px;font-weight:500}.badge-danger{color:var(--color-danger);background:#d72c0d1f}@supports (color:color-mix(in lab,red,red)){.badge-danger{background:color-mix(in srgb,var(--color-danger) 12%,transparent)}}.badge-warning{color:var(--color-warning-text);background:#ffb80029}@supports (color:color-mix(in lab,red,red)){.badge-warning{background:color-mix(in srgb,var(--color-warning) 16%,transparent)}}.badge-info{color:var(--color-agent);background:var(--color-agent-light)}.badge-success{color:var(--color-success);background:#047b5d1f}@supports (color:color-mix(in lab,red,red)){.badge-success{background:color-mix(in srgb,var(--color-success) 12%,transparent)}}.card-tags{flex-wrap:wrap;gap:4px;margin-top:4px;display:flex}.tag{background:var(--color-surface-secondary);color:var(--color-text-tertiary);border-radius:999px;padding:1px 6px;font-size:10px}.tag-channel{background:var(--color-agent-light);color:var(--color-agent)}.card-action{color:var(--color-text-secondary);margin-top:6px;font-size:12px}.card-action:before{content:"→ ";color:var(--color-agent)}.report-table{border-collapse:collapse;width:100%;min-width:640px;font-size:12px}.report-slot-content{overflow-wrap:anywhere;min-width:0;max-width:100%;overflow-x:auto}.report-table th{text-align:left;color:var(--color-text-tertiary);border-bottom:1px solid var(--color-border);padding:6px 8px;font-weight:600}.report-table td{border-bottom:1px solid var(--color-border);color:var(--color-text-secondary);padding:6px 8px}.report-table tr:last-child td{border-bottom:none}.task-table{border-collapse:collapse;width:100%;min-width:1040px}.task-table th{border-bottom:1px solid var(--color-border);background:var(--color-surface-secondary);color:var(--color-text-secondary);text-align:left;white-space:nowrap;padding:10px 12px;font-size:11px;font-weight:600}:root[data-theme=dark] .task-table th{color:var(--color-text-tertiary)}.task-reference-link{color:var(--color-agent-hover);text-underline-offset:2px;font-weight:600;text-decoration:underline}:root[data-theme=dark] .task-reference-link{color:var(--color-agent)}.task-reference-link:hover{color:var(--color-agent-hover)}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}