@mono-agent/web 0.20.11 → 0.21.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 (70) hide show
  1. package/README.md +397 -68
  2. package/dist/contracts.d.ts +437 -8
  3. package/dist/contracts.d.ts.map +1 -1
  4. package/dist/contracts.js +2 -0
  5. package/dist/contracts.js.map +1 -1
  6. package/dist/cron-reply-context.d.ts +27 -0
  7. package/dist/cron-reply-context.d.ts.map +1 -0
  8. package/dist/cron-reply-context.js +241 -0
  9. package/dist/cron-reply-context.js.map +1 -0
  10. package/dist/discovery.d.ts +1 -0
  11. package/dist/discovery.d.ts.map +1 -1
  12. package/dist/discovery.js +8 -6
  13. package/dist/discovery.js.map +1 -1
  14. package/dist/effort-ladder.d.ts +111 -0
  15. package/dist/effort-ladder.d.ts.map +1 -0
  16. package/dist/effort-ladder.js +155 -0
  17. package/dist/effort-ladder.js.map +1 -0
  18. package/dist/index.d.ts +3 -3
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/long-lived-fetch.d.ts +5 -0
  23. package/dist/long-lived-fetch.d.ts.map +1 -0
  24. package/dist/long-lived-fetch.js +22 -0
  25. package/dist/long-lived-fetch.js.map +1 -0
  26. package/dist/monitor-reply.d.ts +10 -0
  27. package/dist/monitor-reply.d.ts.map +1 -0
  28. package/dist/monitor-reply.js +67 -0
  29. package/dist/monitor-reply.js.map +1 -0
  30. package/dist/notification-client.d.ts +11 -2
  31. package/dist/notification-client.d.ts.map +1 -1
  32. package/dist/notification-client.js +5 -4
  33. package/dist/notification-client.js.map +1 -1
  34. package/dist/notification-ingress.d.ts +8 -1
  35. package/dist/notification-ingress.d.ts.map +1 -1
  36. package/dist/notification-ingress.js +28 -6
  37. package/dist/notification-ingress.js.map +1 -1
  38. package/dist/operator-client.d.ts +35 -2
  39. package/dist/operator-client.d.ts.map +1 -1
  40. package/dist/operator-client.js +276 -9
  41. package/dist/operator-client.js.map +1 -1
  42. package/dist/server.d.ts +42 -1
  43. package/dist/server.d.ts.map +1 -1
  44. package/dist/server.js +679 -52
  45. package/dist/server.js.map +1 -1
  46. package/dist/service.d.ts +299 -18
  47. package/dist/service.d.ts.map +1 -1
  48. package/dist/service.js +1915 -160
  49. package/dist/service.js.map +1 -1
  50. package/dist/store-migrations.d.ts +23 -0
  51. package/dist/store-migrations.d.ts.map +1 -0
  52. package/dist/store-migrations.js +212 -0
  53. package/dist/store-migrations.js.map +1 -0
  54. package/dist/store.d.ts +389 -21
  55. package/dist/store.d.ts.map +1 -1
  56. package/dist/store.js +2087 -245
  57. package/dist/store.js.map +1 -1
  58. package/package.json +9 -8
  59. package/webapp/dist/assets/{assistant-ui-BzN2E6n6.js → assistant-ui-pZmGxIp2.js} +16 -16
  60. package/webapp/dist/assets/index-6uQ7TVQe.css +1 -0
  61. package/webapp/dist/assets/index-CsSMjSgW.js +156 -0
  62. package/webapp/dist/assets/{markdown-Vq23xgh7.js → markdown-Du5t10ja.js} +1 -1
  63. package/webapp/dist/badge-96.png +0 -0
  64. package/webapp/dist/index.html +26 -6
  65. package/webapp/dist/manifest.webmanifest +1 -1
  66. package/webapp/dist/notification-sw.js +3 -1
  67. package/webapp/dist/sw.js +1 -1
  68. package/webapp/dist/{workbox-9c191d2f.js → workbox-2fbc6a65.js} +1 -1
  69. package/webapp/dist/assets/index-BT463dRM.css +0 -1
  70. package/webapp/dist/assets/index-Co-qDQPq.js +0 -155
@@ -0,0 +1,212 @@
1
+ import { WebConsoleError } from "./errors.js";
2
+ function columns(database, table) {
3
+ return new Set(database.prepare(`PRAGMA table_info(${table})`).all()
4
+ .map((column) => column.name));
5
+ }
6
+ /** All identifiers and definitions passed here are source-owned constants. */
7
+ function addColumn(database, table, name, definition) {
8
+ if (!columns(database, table).has(name)) {
9
+ database.exec(`ALTER TABLE ${table} ADD COLUMN ${name} ${definition}`);
10
+ }
11
+ }
12
+ function assertColumns(database, table, required) {
13
+ const actual = columns(database, table);
14
+ if (required.some((name) => !actual.has(name)))
15
+ throw new Error("Missing migration column.");
16
+ }
17
+ /** Exact column order; `index_info` cannot see sort direction, so no index here uses DESC. */
18
+ function assertIndex(database, index, expected) {
19
+ const actual = database.prepare(`PRAGMA index_info(${index})`).all().map((column) => column.name);
20
+ if (actual.join(",") !== expected.join(","))
21
+ throw new Error("Invalid migration index.");
22
+ }
23
+ /** Read-path lookup indexes; bootstrap DDL creates them, so the step only asserts them. */
24
+ const THREAD_READ_INDEXES = [
25
+ ["messages_by_turn", ["turn_id"]],
26
+ ["turns_by_thread_started", ["thread_id", "started_at"]],
27
+ ];
28
+ // Versions 1, 3, 4, 7, 8 and 13 were bootstrap-only layouts. Keep their DDL in
29
+ // initialize, before these fixups; never invent or renumber a historical step.
30
+ export const WEB_STORAGE_MIGRATIONS = Object.freeze([
31
+ { version: 2, name: "thread-trigger-kind", up: ({ database, originalVersion }) => {
32
+ // This was deliberately == 1, not < 2: fresh bootstrap already has it.
33
+ if (originalVersion === 1)
34
+ addColumn(database, "threads", "trigger_kind", "TEXT CHECK (trigger_kind IN ('cron', 'webhook'))");
35
+ } },
36
+ { version: 5, name: "cron-channel-adoption", up: ({ migrateCronChannels }) => migrateCronChannels() },
37
+ { version: 6, name: "cron-overview-truncation", up: ({ database }) => {
38
+ addColumn(database, "cron_overviews", "jobs_truncated", "INTEGER NOT NULL DEFAULT 0 CHECK (jobs_truncated IN (0, 1))");
39
+ } },
40
+ { version: 9, name: "message-search-backfill", up: ({ backfillMessageSearch }) => backfillMessageSearch() },
41
+ { version: 10, name: "attachment-origin", up: ({ database }) => {
42
+ addColumn(database, "attachments", "origin", "TEXT NOT NULL DEFAULT 'upload' CHECK (origin IN ('upload', 'reply'))");
43
+ } },
44
+ { version: 11, name: "thread-run-overrides", up: ({ database }) => {
45
+ addColumn(database, "threads", "run_model", "TEXT");
46
+ addColumn(database, "threads", "run_effort", "TEXT");
47
+ } },
48
+ { version: 12, name: "agent-providers", up: ({ database }) => {
49
+ addColumn(database, "agents", "providers_json", "TEXT");
50
+ } },
51
+ { version: 14, name: "monitor-delivery-tombstones", up: ({ originalVersion, migrateMonitorWakeDeliveries }) => {
52
+ if (originalVersion === 13)
53
+ migrateMonitorWakeDeliveries();
54
+ } },
55
+ { version: 15, name: "monitor-delivery-projection", up: ({ database }) => {
56
+ addColumn(database, "monitor_wake_deliveries", "projection_json", "TEXT");
57
+ } },
58
+ { version: 16, name: "agent-discovery-presence", up: ({ database }) => {
59
+ addColumn(database, "agents", "discovered", "INTEGER NOT NULL DEFAULT 1 CHECK (discovered IN (0, 1))");
60
+ } },
61
+ { version: 17, name: "agent-run-overrides", up: ({ database }) => {
62
+ // This table is created by the unchanged bootstrap DDL, including upgrades.
63
+ assertColumns(database, "agent_run_overrides", ["source_id", "model", "effort", "updated_at"]);
64
+ } },
65
+ { version: 18, name: "message-sequence-repair", up: ({ database }) => {
66
+ // Two shipped schema-17 layouts exist; never reset an existing sequence.
67
+ addColumn(database, "messages", "seq", "INTEGER NOT NULL DEFAULT 0");
68
+ } },
69
+ { version: 19, name: "silent-cron-projections", up: ({ database, suppressSilentCronHistory }) => {
70
+ addColumn(database, "messages", "cron_suppressed", "INTEGER NOT NULL DEFAULT 0 CHECK (cron_suppressed IN (0,1))");
71
+ suppressSilentCronHistory();
72
+ } },
73
+ { version: 20, name: "agent-provider-auth-capability", up: ({ database }) => {
74
+ addColumn(database, "agents", "supports_provider_auth", "INTEGER NOT NULL DEFAULT 0 CHECK (supports_provider_auth IN (0, 1))");
75
+ } },
76
+ { version: 21, name: "turn-route-attribution", up: ({ database }) => {
77
+ addColumn(database, "turns", "requested_model", "TEXT");
78
+ addColumn(database, "turns", "requested_effort", "TEXT");
79
+ addColumn(database, "turns", "effective_effort", "TEXT");
80
+ addColumn(database, "turns", "routing_json", "TEXT NOT NULL DEFAULT '{\"transitions\":[],\"retries\":[]}'");
81
+ } },
82
+ { version: 22, name: "live-input-dispatch-marker", up: ({ database }) => {
83
+ addColumn(database, "live_inputs", "dispatch_started_at", "TEXT");
84
+ } },
85
+ { version: 23, name: "web-submission-ledger", up: ({ database }) => {
86
+ assertColumns(database, "web_submissions", [
87
+ "thread_id", "submission_id", "payload_sha256", "outcome", "reason", "message_id", "turn_id", "input_id", "created_at",
88
+ ]);
89
+ } },
90
+ { version: 24, name: "thread-read-indexes", up: ({ database }) => {
91
+ // latestRunState scans turns by thread and probes messages by turn for
92
+ // every mapped thread; without these, long histories dominate list/detail.
93
+ for (const [index, expected] of THREAD_READ_INDEXES)
94
+ assertIndex(database, index, expected);
95
+ } },
96
+ { version: 25, name: "cron-reply-operations", up: ({ database }) => {
97
+ assertColumns(database, "cron_reply_operations", [
98
+ "operation_id", "source_id", "job_id", "run_id", "thread_id", "conversation_id",
99
+ "provenance_message_id", "result_message_id", "idempotency_key", "state", "snapshot_kind",
100
+ "snapshot_text", "snapshot_sha256", "title", "run_model", "run_effort", "canonical_status",
101
+ "failure_reason", "created_at", "completed_at", "failed_at", "tombstoned_at",
102
+ ]);
103
+ } },
104
+ ].map((step) => Object.freeze(step)));
105
+ export const WEB_STORAGE_SCHEMA_VERSION = WEB_STORAGE_MIGRATIONS.at(-1).version;
106
+ /** Called before bootstrap DDL, and by the runner for direct internal callers. */
107
+ export function validateWebStorageMigrationRegistry(migrations = WEB_STORAGE_MIGRATIONS) {
108
+ const names = new Set();
109
+ let previous = 0;
110
+ if (migrations.length === 0)
111
+ throw invalidRegistry();
112
+ for (const migration of migrations) {
113
+ if (!Number.isSafeInteger(migration.version) || migration.version <= previous
114
+ || !/^[a-z][a-z0-9-]*$/u.test(migration.name) || names.has(migration.name)
115
+ || typeof migration.up !== "function")
116
+ throw invalidRegistry();
117
+ previous = migration.version;
118
+ names.add(migration.name);
119
+ }
120
+ }
121
+ function invalidRegistry() {
122
+ return new WebConsoleError("storage_corrupt", "Invalid web storage migration registry.", 500);
123
+ }
124
+ export function runWebStorageMigrations(context, migrations = WEB_STORAGE_MIGRATIONS) {
125
+ validateWebStorageMigrationRegistry(migrations);
126
+ for (const migration of migrations) {
127
+ if (context.originalVersion >= migration.version)
128
+ continue;
129
+ try {
130
+ migration.up(context);
131
+ }
132
+ catch {
133
+ // SQLite/adapter errors may contain stored text. Only identify our step.
134
+ throw new WebConsoleError("storage_corrupt", `Web storage migration ${migration.version} (${migration.name}) failed.`, 500);
135
+ }
136
+ }
137
+ validateWebStorageShape(context.database);
138
+ }
139
+ /** Validate effects, not just the scalar stamp, including current-version opens. */
140
+ export function validateWebStorageShape(database) {
141
+ try {
142
+ const required = {
143
+ agents: ["cron_read", "cron_actions", "ask_by_id", "providers_json", "discovered", "supports_provider_auth"],
144
+ threads: ["trigger_kind", "run_model", "run_effort"],
145
+ cron_overviews: ["jobs_truncated"],
146
+ attachments: ["origin"],
147
+ monitor_wake_deliveries: ["projection_json", "thread_id", "payload_sha256"],
148
+ notification_deliveries: ["message_id", "job_id", "run_id"],
149
+ agent_run_overrides: ["source_id", "model", "effort", "updated_at"],
150
+ messages: ["seq", "cron_suppressed"],
151
+ turns: ["requested_model", "requested_effort", "effective_effort", "routing_json"],
152
+ live_inputs: ["dispatch_started_at"],
153
+ web_submissions: [
154
+ "thread_id", "submission_id", "payload_sha256", "outcome", "reason", "message_id", "turn_id", "input_id", "created_at",
155
+ ],
156
+ cron_reply_operations: [
157
+ "operation_id", "source_id", "job_id", "run_id", "thread_id", "conversation_id",
158
+ "idempotency_key", "state", "snapshot_kind", "snapshot_text", "snapshot_sha256",
159
+ ],
160
+ };
161
+ for (const [table, names] of Object.entries(required))
162
+ assertColumns(database, table, names);
163
+ const seq = database.prepare("PRAGMA table_info(messages)").all().find((column) => column.name === "seq");
164
+ if (seq?.type !== "INTEGER" || seq.notnull !== 1 || seq.dflt_value !== "0")
165
+ throw new Error("Invalid sequence column.");
166
+ const suppressed = database.prepare("PRAGMA table_info(messages)").all().find((column) => column.name === "cron_suppressed");
167
+ const messageDdl = database.prepare("SELECT sql FROM sqlite_master WHERE name = 'messages'").get();
168
+ if (suppressed?.type !== "INTEGER" || suppressed.notnull !== 1 || suppressed.dflt_value !== "0"
169
+ || !/CHECK\s*\(cron_suppressed\s+IN\s*\(0,\s*1\)\)/iu.test(messageDdl.sql)
170
+ || database.prepare("SELECT 1 FROM messages WHERE cron_suppressed NOT IN (0,1) LIMIT 1").get() !== undefined) {
171
+ throw new Error("Invalid cron suppression column.");
172
+ }
173
+ const routing = database.prepare("PRAGMA table_info(turns)").all().find((column) => column.name === "routing_json");
174
+ if (routing?.type !== "TEXT" || routing.notnull !== 1
175
+ || routing.dflt_value !== `'${JSON.stringify({ transitions: [], retries: [] })}'`) {
176
+ throw new Error("Invalid routing column.");
177
+ }
178
+ const dispatchStartedAt = database.prepare("PRAGMA table_info(live_inputs)").all().find((column) => column.name === "dispatch_started_at");
179
+ if (dispatchStartedAt?.type !== "TEXT" || dispatchStartedAt.notnull !== 0) {
180
+ throw new Error("Invalid live-input dispatch marker.");
181
+ }
182
+ for (const [index, expected] of [
183
+ ["messages_by_thread", ["thread_id", "created_at"]],
184
+ ["cron_run_messages_by_order", ["source_id", "job_id", "ordered_at", "sequence", "run_id"]],
185
+ ["monitor_wake_deliveries_by_thread", ["thread_id", "created_at"]],
186
+ ["notification_deliveries_by_thread", ["thread_id"]],
187
+ ...THREAD_READ_INDEXES,
188
+ ["cron_reply_operations_one_pending_run", ["source_id", "job_id", "run_id"]],
189
+ ])
190
+ assertIndex(database, index, expected);
191
+ for (const [table, from, target, onDelete] of [
192
+ ["agent_run_overrides", "source_id", "agents", "CASCADE"],
193
+ ["messages", "turn_id", "turns", "CASCADE"],
194
+ ["attachments", "message_id", "messages", "CASCADE"],
195
+ ["monitor_wake_deliveries", "thread_id", "threads", "SET NULL"],
196
+ ["monitor_wake_deliveries", "turn_id", "turns", "SET NULL"],
197
+ ["cron_run_messages", "message_id", "messages", "CASCADE"],
198
+ ["web_submissions", "thread_id", "threads", "CASCADE"],
199
+ ]) {
200
+ const keys = database.prepare(`PRAGMA foreign_key_list(${table})`).all();
201
+ if (!keys.some((key) => key.from === from && key.table === target && key.to === (target === "agents" ? "source_id" : "id")
202
+ && key.on_delete === onDelete))
203
+ throw new Error("Invalid migration foreign key.");
204
+ }
205
+ if (database.prepare("PRAGMA foreign_key_check").all().length > 0)
206
+ throw new Error("Invalid retained reference.");
207
+ }
208
+ catch {
209
+ throw new WebConsoleError("storage_corrupt", "Web storage migration postconditions failed.", 500);
210
+ }
211
+ }
212
+ //# sourceMappingURL=store-migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-migrations.js","sourceRoot":"","sources":["../src/store-migrations.ts"],"names":[],"mappings":"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"}