@cat-factory/node-server 0.158.1 → 0.160.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.
- package/dist/clientAddress.d.ts +19 -0
- package/dist/clientAddress.d.ts.map +1 -0
- package/dist/clientAddress.js +37 -0
- package/dist/clientAddress.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +15 -1
- package/dist/config.js.map +1 -1
- package/dist/container-core-deps.js +46 -19
- package/dist/container-core-deps.js.map +1 -1
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +12 -0
- package/dist/container.js.map +1 -1
- package/dist/db/schema.d.ts +1 -787
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +2 -100
- package/dist/db/schema.js.map +1 -1
- package/dist/db/tables/identity.d.ts +194 -0
- package/dist/db/tables/identity.d.ts.map +1 -1
- package/dist/db/tables/identity.js +32 -0
- package/dist/db/tables/identity.js.map +1 -1
- package/dist/db/tables/observability.d.ts +1132 -0
- package/dist/db/tables/observability.d.ts.map +1 -0
- package/dist/db/tables/observability.js +173 -0
- package/dist/db/tables/observability.js.map +1 -0
- package/dist/modelProvider.d.ts.map +1 -1
- package/dist/modelProvider.js +4 -3
- package/dist/modelProvider.js.map +1 -1
- package/dist/realtime.d.ts +2 -0
- package/dist/realtime.d.ts.map +1 -1
- package/dist/realtime.js +19 -4
- package/dist/realtime.js.map +1 -1
- package/dist/repositories/drizzle/accounts.d.ts +21 -1
- package/dist/repositories/drizzle/accounts.d.ts.map +1 -1
- package/dist/repositories/drizzle/accounts.js +120 -2
- package/dist/repositories/drizzle/accounts.js.map +1 -1
- package/dist/repositories/drizzle/execution.d.ts +18 -1
- package/dist/repositories/drizzle/execution.d.ts.map +1 -1
- package/dist/repositories/drizzle/execution.js +215 -3
- package/dist/repositories/drizzle/execution.js.map +1 -1
- package/dist/repositories/drizzle.d.ts +4 -1
- package/dist/repositories/drizzle.d.ts.map +1 -1
- package/dist/repositories/drizzle.js +5 -2
- package/dist/repositories/drizzle.js.map +1 -1
- package/dist/retention.d.ts +11 -1
- package/dist/retention.d.ts.map +1 -1
- package/dist/retention.js +15 -1
- package/dist/retention.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +7 -0
- package/dist/server.js.map +1 -1
- package/dist/wireCredentialServices.d.ts.map +1 -1
- package/dist/wireCredentialServices.js +4 -0
- package/dist/wireCredentialServices.js.map +1 -1
- package/drizzle/20260803200030_free_sauron/migration.sql +13 -0
- package/drizzle/20260803200030_free_sauron/snapshot.json +19159 -0
- package/drizzle/20260803212133_old_cardiac/migration.sql +10 -0
- package/drizzle/20260803212133_old_cardiac/snapshot.json +19304 -0
- package/drizzle/20260803222354_salty_albert_cleary/migration.sql +27 -0
- package/drizzle/20260803222354_salty_albert_cleary/snapshot.json +19417 -0
- package/drizzle/20260804081137_mean_sasquatch/migration.sql +5 -0
- package/drizzle/20260804081137_mean_sasquatch/snapshot.json +19472 -0
- package/package.json +20 -20
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../../src/db/tables/observability.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,SAAS,qDAAwB,CAAA;AAM9C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgD1B,CAAA;AAQD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBjC,CAAA;AAMD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB9B,CAAA;AAOD;;;;;GAKG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsBxB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc3B,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI9B,CAAA"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { bigint, index, integer, pgSchema, pgTable, primaryKey, text } from 'drizzle-orm/pg-core';
|
|
2
|
+
// The observability schema: the three append-heavy TELEMETRY sinks (one row per model call,
|
|
3
|
+
// per dispatched agent context, per web search a container agent performed) plus the two
|
|
4
|
+
// deployment-level PROJECTIONS the operator dashboard aggregates (settled gates, and the daily
|
|
5
|
+
// run rollup behind the long windows).
|
|
6
|
+
//
|
|
7
|
+
// Split out of `schema.ts` as a cohesive module (the `tables/` pattern the identity, settings
|
|
8
|
+
// and VCS groups already follow) when the platform projections pushed that file over its
|
|
9
|
+
// size budget: budgets are split triggers, never numbers to raise. Re-exported from
|
|
10
|
+
// `schema.ts`, so every `from '../db/schema.js'` importer is unchanged.
|
|
11
|
+
// Telemetry has a very different write profile from the transactional domain
|
|
12
|
+
// (append-heavy, high-volume, write-and-rarely-read, short retention), so it lives in
|
|
13
|
+
// its own `telemetry` Postgres schema rather than `public`. This is the Node analogue
|
|
14
|
+
// of the Cloudflare worker's separate TELEMETRY_DB D1 database. The schema is purely a
|
|
15
|
+
// namespace served by the same connection/pool; `migrate()` creates it on boot. The
|
|
16
|
+
// `llm_call_metrics` table and `agent_context_snapshots` table live here.
|
|
17
|
+
export const telemetry = pgSchema('telemetry');
|
|
18
|
+
// LLM observability sink (mirror of D1 migration 0026). One row per proxied
|
|
19
|
+
// container-agent model call: full prompt/response, output-limit headroom and the
|
|
20
|
+
// transport-vs-execution latency split. Pruned aggressively by retention (the full
|
|
21
|
+
// bodies make it heavy); booleans are integer 0/1 to match the SQLite store.
|
|
22
|
+
export const llmCallMetrics = telemetry.table('llm_call_metrics', {
|
|
23
|
+
id: text('id').primaryKey(),
|
|
24
|
+
workspace_id: text('workspace_id').notNull(),
|
|
25
|
+
execution_id: text('execution_id'),
|
|
26
|
+
agent_kind: text('agent_kind').notNull(),
|
|
27
|
+
provider: text('provider').notNull(),
|
|
28
|
+
model: text('model').notNull(),
|
|
29
|
+
created_at: bigint('created_at', { mode: 'number' }).notNull(),
|
|
30
|
+
streaming: integer('streaming').notNull().default(0),
|
|
31
|
+
// WHICH slice of the run spent the call (`agent` / `validation-repair` / … ), stamped by
|
|
32
|
+
// the harness that owns the phase boundary; '' is the unattributed slice, a real group in
|
|
33
|
+
// the rollup rather than a dropped row. `turn_index` is the harness's job-scoped `seq`,
|
|
34
|
+
// NULL where the producing channel has no turn concept (the proxy). Mirrors D1 migration
|
|
35
|
+
// 0004_llm_call_phase_turn. See docs/initiatives/token-burn-instrumentation.md.
|
|
36
|
+
phase: text('phase').notNull().default(''),
|
|
37
|
+
turn_index: integer('turn_index'),
|
|
38
|
+
message_count: integer('message_count').notNull().default(0),
|
|
39
|
+
tool_count: integer('tool_count').notNull().default(0),
|
|
40
|
+
request_max_tokens: integer('request_max_tokens'),
|
|
41
|
+
prompt_tokens: integer('prompt_tokens').notNull().default(0),
|
|
42
|
+
cache_read_tokens: integer('cache_read_tokens').notNull().default(0),
|
|
43
|
+
cache_write_tokens: integer('cache_write_tokens').notNull().default(0),
|
|
44
|
+
completion_tokens: integer('completion_tokens').notNull().default(0),
|
|
45
|
+
total_tokens: integer('total_tokens').notNull().default(0),
|
|
46
|
+
finish_reason: text('finish_reason'),
|
|
47
|
+
upstream_ms: integer('upstream_ms').notNull().default(0),
|
|
48
|
+
overhead_ms: integer('overhead_ms').notNull().default(0),
|
|
49
|
+
total_ms: integer('total_ms').notNull().default(0),
|
|
50
|
+
ok: integer('ok').notNull().default(1),
|
|
51
|
+
http_status: integer('http_status'),
|
|
52
|
+
error_message: text('error_message'),
|
|
53
|
+
// prompt_text is stored as a DELTA (only the messages this call appended beyond
|
|
54
|
+
// prompt_prefix_count); the full prompt is rebuilt on export. See D1 migration 0027.
|
|
55
|
+
prompt_text: text('prompt_text').notNull().default(''),
|
|
56
|
+
prompt_prefix_count: integer('prompt_prefix_count').notNull().default(0),
|
|
57
|
+
prompt_hash: text('prompt_hash').notNull().default(''),
|
|
58
|
+
response_text: text('response_text').notNull().default(''),
|
|
59
|
+
// The model's reasoning/"thinking" trace on a separate channel, when emitted (a
|
|
60
|
+
// reasoning model can spend its whole output budget here and return empty
|
|
61
|
+
// response_text). Mirrors D1 migration 0002_llm_reasoning_text.
|
|
62
|
+
reasoning_text: text('reasoning_text').notNull().default(''),
|
|
63
|
+
}, (t) => [
|
|
64
|
+
index('idx_llm_call_metrics_execution').on(t.workspace_id, t.execution_id, t.created_at),
|
|
65
|
+
index('idx_llm_call_metrics_created').on(t.created_at),
|
|
66
|
+
]);
|
|
67
|
+
// The complete, redacted context provided to one container-agent dispatch (per step
|
|
68
|
+
// attempt): the fully fragment-composed system + user prompts, the fragment bodies
|
|
69
|
+
// folded in, and the full content of the files injected into the container. Captures
|
|
70
|
+
// what proxy telemetry can't (the injected `.cat-context/*` files the agent reads via
|
|
71
|
+
// tools). JSON-shaped columns are text; pruned on the same retention window as
|
|
72
|
+
// llm_call_metrics. Mirrors the D1 agent_context_snapshots table column-for-column.
|
|
73
|
+
export const agentContextSnapshots = telemetry.table('agent_context_snapshots', {
|
|
74
|
+
id: text('id').primaryKey(),
|
|
75
|
+
workspace_id: text('workspace_id').notNull(),
|
|
76
|
+
execution_id: text('execution_id').notNull(),
|
|
77
|
+
agent_kind: text('agent_kind').notNull(),
|
|
78
|
+
step_index: integer('step_index').notNull(),
|
|
79
|
+
created_at: bigint('created_at', { mode: 'number' }).notNull(),
|
|
80
|
+
model: text('model'),
|
|
81
|
+
harness: text('harness'),
|
|
82
|
+
system_prompt: text('system_prompt').notNull().default(''),
|
|
83
|
+
user_prompt: text('user_prompt').notNull().default(''),
|
|
84
|
+
// JSON arrays: [{id, body}] and [{path, title, url, content}].
|
|
85
|
+
fragments: text('fragments').notNull().default('[]'),
|
|
86
|
+
context_files: text('context_files').notNull().default('[]'),
|
|
87
|
+
// Redacted structural bits (repo/branch, webSearch, infra, decisions, revision).
|
|
88
|
+
extras: text('extras').notNull().default('{}'),
|
|
89
|
+
}, (t) => [
|
|
90
|
+
index('idx_agent_context_snapshots_execution').on(t.workspace_id, t.execution_id, t.created_at),
|
|
91
|
+
index('idx_agent_context_snapshots_created').on(t.created_at),
|
|
92
|
+
]);
|
|
93
|
+
// One web search a container agent performed through the backend search proxy. Recorded
|
|
94
|
+
// best-effort (gated by the same LLM_RECORD_PROMPTS + storeAgentContext double switch as
|
|
95
|
+
// agent_context_snapshots) and pruned on the same retention window. Mirrors the D1
|
|
96
|
+
// agent_search_queries table column-for-column.
|
|
97
|
+
export const agentSearchQueries = telemetry.table('agent_search_queries', {
|
|
98
|
+
id: text('id').primaryKey(),
|
|
99
|
+
workspace_id: text('workspace_id').notNull(),
|
|
100
|
+
execution_id: text('execution_id').notNull(),
|
|
101
|
+
agent_kind: text('agent_kind').notNull(),
|
|
102
|
+
// The upstream backend that served the search (`brave` | `searxng`), or null.
|
|
103
|
+
provider: text('provider'),
|
|
104
|
+
query: text('query').notNull().default(''),
|
|
105
|
+
result_count: integer('result_count').notNull().default(0),
|
|
106
|
+
created_at: bigint('created_at', { mode: 'number' }).notNull(),
|
|
107
|
+
}, (t) => [
|
|
108
|
+
index('idx_agent_search_queries_execution').on(t.workspace_id, t.execution_id, t.created_at),
|
|
109
|
+
index('idx_agent_search_queries_created').on(t.created_at),
|
|
110
|
+
]);
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
// Platform-operator observability projections (mirrors D1 migration 0079). Both are read by
|
|
113
|
+
// the account-scoped dashboard rollups; see the D1 migration for the full rationale.
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
/**
|
|
116
|
+
* One flat row per SETTLED polling gate, so the gate / CI-fixer attempt statistics are an
|
|
117
|
+
* ordinary aggregate over columns rather than a `jsonb_array_elements` expansion of the run's
|
|
118
|
+
* internal `steps[].gate.*` shape. The id is derived by the writer (`<runId>:<stepIndex>:
|
|
119
|
+
* <outcome>`) so a driver replay collapses onto one row.
|
|
120
|
+
*/
|
|
121
|
+
export const gateOutcomes = pgTable('gate_outcomes', {
|
|
122
|
+
id: text('id').primaryKey(),
|
|
123
|
+
workspace_id: text('workspace_id').notNull(),
|
|
124
|
+
execution_id: text('execution_id').notNull(),
|
|
125
|
+
block_id: text('block_id').notNull(),
|
|
126
|
+
gate_kind: text('gate_kind').notNull(),
|
|
127
|
+
helper_kind: text('helper_kind'),
|
|
128
|
+
outcome: text('outcome').notNull(),
|
|
129
|
+
attempts: integer('attempts').notNull().default(0),
|
|
130
|
+
max_attempts: integer('max_attempts').notNull().default(0),
|
|
131
|
+
helper_failures: integer('helper_failures').notNull().default(0),
|
|
132
|
+
duration_ms: bigint('duration_ms', { mode: 'number' }),
|
|
133
|
+
created_at: bigint('created_at', { mode: 'number' }).notNull(),
|
|
134
|
+
}, (t) => [
|
|
135
|
+
// The rollup's access path: this account's workspaces, settled since T.
|
|
136
|
+
index('idx_gate_outcomes_workspace_created').on(t.workspace_id, t.created_at),
|
|
137
|
+
// The retention prune's access path (a global range delete, not workspace-scoped).
|
|
138
|
+
index('idx_gate_outcomes_created').on(t.created_at),
|
|
139
|
+
]);
|
|
140
|
+
/**
|
|
141
|
+
* The daily rollup of `agent_runs` behind the dashboard's `30d` / `90d` windows. `failure_kind`
|
|
142
|
+
* carries '' (never NULL) for a non-failed status because it is part of the primary key, and a
|
|
143
|
+
* NULL there would not deduplicate a re-run bucket; the repository maps it back to null at the
|
|
144
|
+
* read boundary. Rewritten in place on each sweep, never appended: the current day's counts are
|
|
145
|
+
* not final, so they must be corrected rather than frozen.
|
|
146
|
+
*/
|
|
147
|
+
export const platformRunDays = pgTable('platform_run_days', {
|
|
148
|
+
workspace_id: text('workspace_id').notNull(),
|
|
149
|
+
day_start: bigint('day_start', { mode: 'number' }).notNull(),
|
|
150
|
+
status: text('status').notNull(),
|
|
151
|
+
failure_kind: text('failure_kind').notNull().default(''),
|
|
152
|
+
run_count: integer('run_count').notNull(),
|
|
153
|
+
}, (t) => [
|
|
154
|
+
primaryKey({ columns: [t.workspace_id, t.day_start, t.status, t.failure_kind] }),
|
|
155
|
+
// The prune's access path; the account-scoped read rides the primary key's leading columns.
|
|
156
|
+
index('idx_platform_run_days_day').on(t.day_start),
|
|
157
|
+
]);
|
|
158
|
+
/**
|
|
159
|
+
* How far the daily-rollup SWEEP has covered. A fact about the sweep, so it cannot be derived
|
|
160
|
+
* from the rolled-up rows: `MAX(day_start)` cannot tell an idle account from a wedged pass, nor
|
|
161
|
+
* a brand-new account from a rollup that has never run, and those call for opposite responses.
|
|
162
|
+
*
|
|
163
|
+
* DEPLOYMENT-scoped (one row per rollup, no tenant dimension) because one pass covers every
|
|
164
|
+
* workspace, and carrying only a day boundary and a timestamp it holds no tenant data. Written
|
|
165
|
+
* in the same transaction as the rewrite it describes. NOT workspace-scoped, hence absent from
|
|
166
|
+
* `WORKSPACE_SCOPED_TABLES` and from the retention prune.
|
|
167
|
+
*/
|
|
168
|
+
export const platformRollupState = pgTable('platform_rollup_state', {
|
|
169
|
+
rollup: text('rollup').primaryKey(),
|
|
170
|
+
through_day: bigint('through_day', { mode: 'number' }).notNull(),
|
|
171
|
+
updated_at: bigint('updated_at', { mode: 'number' }).notNull(),
|
|
172
|
+
});
|
|
173
|
+
//# sourceMappingURL=observability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../../../src/db/tables/observability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelProvider.d.ts","sourceRoot":"","sources":["../src/modelProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AACzF,OAAO,EAAE,KAAK,qBAAqB,EAAqB,MAAM,qBAAqB,CAAA;AAMnF,OAAO,EACL,KAAK,qBAAqB,EAI3B,MAAM,qBAAqB,CAAA;AAe5B;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,CAAA;AAEpD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,sBAAsB,EAAE,mBAAmB,GAC1C,gBAAgB,GAAG,SAAS,CA2B9B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAE3F;AAED,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,mBAAmB,CAAC,EAAE,yBAAyB,GAC9C,qBAAqB,
|
|
1
|
+
{"version":3,"file":"modelProvider.d.ts","sourceRoot":"","sources":["../src/modelProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AACzF,OAAO,EAAE,KAAK,qBAAqB,EAAqB,MAAM,qBAAqB,CAAA;AAMnF,OAAO,EACL,KAAK,qBAAqB,EAI3B,MAAM,qBAAqB,CAAA;AAe5B;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,CAAA;AAEpD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,sBAAsB,EAAE,mBAAmB,GAC1C,gBAAgB,GAAG,SAAS,CA2B9B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAE3F;AAED,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,mBAAmB,CAAC,EAAE,yBAAyB,GAC9C,qBAAqB,CAyCvB"}
|
package/dist/modelProvider.js
CHANGED
|
@@ -81,9 +81,10 @@ export function createNodeModelProviderResolver(env, apiKeys, localModelEndpoint
|
|
|
81
81
|
apiKeys,
|
|
82
82
|
baseUrlFor: (provider) => baseUrlForNode(provider, env),
|
|
83
83
|
extraRegistries,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
// The service itself, so the endpoint read and the transport carrying the deployment's
|
|
85
|
+
// loopback/LAN policy (re-validated on every redirect hop, SEC-2/SEC-3) cannot come from
|
|
86
|
+
// two different places.
|
|
87
|
+
localRunners: localModelEndpoints,
|
|
87
88
|
});
|
|
88
89
|
}
|
|
89
90
|
//# sourceMappingURL=modelProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelProvider.js","sourceRoot":"","sources":["../src/modelProvider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"modelProvider.js","sourceRoot":"","sources":["../src/modelProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/realtime.d.ts
CHANGED
|
@@ -130,6 +130,8 @@ export declare class NodeEventPublisher implements ExecutionEventPublisher {
|
|
|
130
130
|
*/
|
|
131
131
|
export interface MachineSubscribeDeps {
|
|
132
132
|
accountOf: AccountOfWorkspace;
|
|
133
|
+
/** The machine-node roster's revocation read (SEC-5); a revoked node's subscribe is refused. */
|
|
134
|
+
isRevoked?: (nodeId: string) => Promise<boolean>;
|
|
133
135
|
}
|
|
134
136
|
/**
|
|
135
137
|
* Attach the real-time WebSocket transport to a running Node HTTP server: accept
|
package/dist/realtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EACV,KAAK,EACL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,iBAAiB,EAElB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,MAAM,EACZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"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"}
|
package/dist/realtime.js
CHANGED
|
@@ -190,9 +190,10 @@ const HEARTBEAT_INTERVAL_MS = 30_000;
|
|
|
190
190
|
/**
|
|
191
191
|
* Status-line reasons for a refused machine subscription. Keyed by the exact statuses
|
|
192
192
|
* {@link authorizeMachineSubscribe} can return, so a new verdict status fails `tsc` here rather
|
|
193
|
-
* than writing `undefined` into a raw HTTP status line
|
|
194
|
-
*
|
|
195
|
-
*
|
|
193
|
+
* than writing `undefined` into a raw HTTP status line (a `Partial` here would trade the
|
|
194
|
+
* compile-time guarantee for a runtime `undefined`). `503` is reached when the machine-node
|
|
195
|
+
* roster cannot be read, which fails closed rather than serving a possibly-revoked node, and is
|
|
196
|
+
* also this listener's answer if the handshake throws for any other reason.
|
|
196
197
|
*/
|
|
197
198
|
const MACHINE_REJECT_REASON = {
|
|
198
199
|
403: 'Forbidden',
|
|
@@ -247,12 +248,26 @@ export function attachRealtime(server, hub, auth, log, machineSubscribe) {
|
|
|
247
248
|
token: request.headers.authorization,
|
|
248
249
|
workspaceId,
|
|
249
250
|
accountOf: machineSubscribe.accountOf,
|
|
250
|
-
|
|
251
|
+
isRevoked: machineSubscribe.isRevoked,
|
|
252
|
+
})
|
|
253
|
+
.then((verdict) => {
|
|
251
254
|
if (!verdict.ok) {
|
|
252
255
|
reject(socket, verdict.status, MACHINE_REJECT_REASON[verdict.status]);
|
|
253
256
|
return;
|
|
254
257
|
}
|
|
255
258
|
accept(request, socket, head, workspaceId, cid);
|
|
259
|
+
})
|
|
260
|
+
// An upgrade has no error handler above it: an unhandled rejection here takes the
|
|
261
|
+
// whole process down (Node's default) and leaves the socket hanging open, so the
|
|
262
|
+
// handshake must settle every path itself. `authorizeMachineSubscribe` already
|
|
263
|
+
// converts a roster read failure into a 503 verdict; this is the backstop for
|
|
264
|
+
// anything a future input adds.
|
|
265
|
+
.catch((error) => {
|
|
266
|
+
logger.error('machine event subscribe: handshake failed', {
|
|
267
|
+
workspaceId,
|
|
268
|
+
err: describeError(error),
|
|
269
|
+
});
|
|
270
|
+
reject(socket, 503, MACHINE_REJECT_REASON[503]);
|
|
256
271
|
});
|
|
257
272
|
return;
|
|
258
273
|
}
|
package/dist/realtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,aAAa,GAId,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAGL,gCAAgC,
|
|
1
|
+
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AccountInvitationRecord, AccountInvitationRepository, AccountRecord, AccountRepository, AccountSettingsPatch, EmailConnectionRecord, EmailConnectionRepository, IdentityProvider, Membership, MembershipRepository, PasswordResetTokenRecord, PasswordResetTokenRepository, PasswordResetTokenStatus, UserIdentityRecord, UserRecord, UserRepository } from '@cat-factory/kernel';
|
|
1
|
+
import type { AccountInvitationRecord, AccountInvitationRepository, AccountRecord, AccountRepository, AccountSettingsPatch, AuthAttemptRecord, AuthAttemptRepository, EmailConnectionRecord, EmailConnectionRepository, IdentityProvider, MachineNodeMint, MachineNodeMintOutcome, MachineNodeRecord, MachineNodeRepository, Membership, MembershipRepository, PasswordResetTokenRecord, PasswordResetTokenRepository, PasswordResetTokenStatus, UserIdentityRecord, UserRecord, UserRepository } from '@cat-factory/kernel';
|
|
2
2
|
import type { DrizzleDb } from '../../db/client.js';
|
|
3
3
|
export declare class DrizzleAccountRepository implements AccountRepository {
|
|
4
4
|
private readonly db;
|
|
@@ -52,6 +52,26 @@ export declare class DrizzlePasswordResetTokenRepository implements PasswordRese
|
|
|
52
52
|
consume(id: string): Promise<boolean>;
|
|
53
53
|
deleteExpired(before: number): Promise<number>;
|
|
54
54
|
}
|
|
55
|
+
/** Postgres auth-attempt ledger for the password-endpoint throttle (SEC-4). Mirror of the D1 repo. */
|
|
56
|
+
export declare class DrizzleAuthAttemptRepository implements AuthAttemptRepository {
|
|
57
|
+
private readonly db;
|
|
58
|
+
constructor(db: DrizzleDb);
|
|
59
|
+
record(attempt: AuthAttemptRecord): Promise<void>;
|
|
60
|
+
countByKeySince(key: string, sinceMs: number): Promise<number>;
|
|
61
|
+
countByIpSince(ip: string, sinceMs: number): Promise<number>;
|
|
62
|
+
deleteOlderThan(epochMs: number): Promise<number>;
|
|
63
|
+
}
|
|
64
|
+
/** Postgres machine-node roster + revocation tombstones (SEC-5). Mirror of the D1 repo. */
|
|
65
|
+
export declare class DrizzleMachineNodeRepository implements MachineNodeRepository {
|
|
66
|
+
private readonly db;
|
|
67
|
+
constructor(db: DrizzleDb);
|
|
68
|
+
recordMint(mint: MachineNodeMint): Promise<MachineNodeMintOutcome>;
|
|
69
|
+
get(nodeId: string): Promise<MachineNodeRecord | null>;
|
|
70
|
+
listByUser(userId: string): Promise<MachineNodeRecord[]>;
|
|
71
|
+
revoke(nodeId: string, revokedAt: number, revokedByUserId: string): Promise<boolean>;
|
|
72
|
+
isRevoked(nodeId: string): Promise<boolean>;
|
|
73
|
+
deleteExpired(before: number): Promise<number>;
|
|
74
|
+
}
|
|
55
75
|
export declare class DrizzleEmailConnectionRepository implements EmailConnectionRepository {
|
|
56
76
|
private readonly db;
|
|
57
77
|
constructor(db: DrizzleDb);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/repositories/drizzle/accounts.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,uBAAuB,EACvB,2BAA2B,EAC3B,aAAa,EACb,iBAAiB,EAEjB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/repositories/drizzle/accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
// is the SAME shared mapping the D1 repos use (@cat-factory/server), so behaviour
|
|
4
4
|
// matches across stores; this layer only owns the Drizzle queries. Assembled into the
|
|
5
5
|
// CoreRepositories set by ./drizzle.ts (the barrel).
|
|
6
|
-
import { and, desc, eq, inArray, isNull, lt } from 'drizzle-orm';
|
|
7
|
-
import {
|
|
6
|
+
import { and, count, desc, eq, gte, inArray, isNull, lt, sql } from 'drizzle-orm';
|
|
7
|
+
import { randomUUID } from 'node:crypto';
|
|
8
|
+
import { accountInvitations, accounts, authAttempts, emailConnections, machineNodes, memberships, passwordResetTokens, userIdentities, users, } from '../../db/schema.js';
|
|
8
9
|
function rowToAccount(row) {
|
|
9
10
|
return {
|
|
10
11
|
id: row.id,
|
|
@@ -382,6 +383,123 @@ export class DrizzlePasswordResetTokenRepository {
|
|
|
382
383
|
return result.rowCount ?? 0;
|
|
383
384
|
}
|
|
384
385
|
}
|
|
386
|
+
/** Postgres auth-attempt ledger for the password-endpoint throttle (SEC-4). Mirror of the D1 repo. */
|
|
387
|
+
export class DrizzleAuthAttemptRepository {
|
|
388
|
+
db;
|
|
389
|
+
constructor(db) {
|
|
390
|
+
this.db = db;
|
|
391
|
+
}
|
|
392
|
+
async record(attempt) {
|
|
393
|
+
await this.db.insert(authAttempts).values({
|
|
394
|
+
id: `atmpt_${randomUUID()}`,
|
|
395
|
+
key: attempt.key,
|
|
396
|
+
ip: attempt.ip,
|
|
397
|
+
at: attempt.at,
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
async countByKeySince(key, sinceMs) {
|
|
401
|
+
const [row] = await this.db
|
|
402
|
+
.select({ n: count() })
|
|
403
|
+
.from(authAttempts)
|
|
404
|
+
.where(and(eq(authAttempts.key, key), gte(authAttempts.at, sinceMs)));
|
|
405
|
+
return row?.n ?? 0;
|
|
406
|
+
}
|
|
407
|
+
async countByIpSince(ip, sinceMs) {
|
|
408
|
+
const [row] = await this.db
|
|
409
|
+
.select({ n: count() })
|
|
410
|
+
.from(authAttempts)
|
|
411
|
+
.where(and(eq(authAttempts.ip, ip), gte(authAttempts.at, sinceMs)));
|
|
412
|
+
return row?.n ?? 0;
|
|
413
|
+
}
|
|
414
|
+
async deleteOlderThan(epochMs) {
|
|
415
|
+
const result = await this.db.delete(authAttempts).where(lt(authAttempts.at, epochMs));
|
|
416
|
+
return result.rowCount ?? 0;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
function rowToMachineNode(row) {
|
|
420
|
+
return {
|
|
421
|
+
nodeId: row.node_id,
|
|
422
|
+
userId: row.user_id,
|
|
423
|
+
accountIds: JSON.parse(row.account_ids),
|
|
424
|
+
createdAt: row.created_at,
|
|
425
|
+
lastMintedAt: row.last_minted_at,
|
|
426
|
+
expiresAt: row.expires_at,
|
|
427
|
+
revokedAt: row.revoked_at,
|
|
428
|
+
revokedByUserId: row.revoked_by,
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
/** Postgres machine-node roster + revocation tombstones (SEC-5). Mirror of the D1 repo. */
|
|
432
|
+
export class DrizzleMachineNodeRepository {
|
|
433
|
+
db;
|
|
434
|
+
constructor(db) {
|
|
435
|
+
this.db = db;
|
|
436
|
+
}
|
|
437
|
+
async recordMint(mint) {
|
|
438
|
+
// The upsert refreshes only the mint-shaped columns: `user_id`, `created_at` and the
|
|
439
|
+
// revocation tombstone never change here. `GREATEST` keeps `expires_at` the latest exp
|
|
440
|
+
// ever signed, so a shorter re-mint cannot make the roster forget a longer token.
|
|
441
|
+
//
|
|
442
|
+
// `setWhere` is what makes ownership atomic rather than check-then-write: a concurrent
|
|
443
|
+
// first mint of the same node id by another user updates nothing instead of stamping its
|
|
444
|
+
// scope onto the winner's row, and a revoked id can never be resurrected.
|
|
445
|
+
const result = await this.db
|
|
446
|
+
.insert(machineNodes)
|
|
447
|
+
.values({
|
|
448
|
+
node_id: mint.nodeId,
|
|
449
|
+
user_id: mint.userId,
|
|
450
|
+
account_ids: JSON.stringify(mint.accountIds),
|
|
451
|
+
created_at: mint.mintedAt,
|
|
452
|
+
last_minted_at: mint.mintedAt,
|
|
453
|
+
expires_at: mint.expiresAt,
|
|
454
|
+
})
|
|
455
|
+
.onConflictDoUpdate({
|
|
456
|
+
target: machineNodes.node_id,
|
|
457
|
+
set: {
|
|
458
|
+
account_ids: JSON.stringify(mint.accountIds),
|
|
459
|
+
last_minted_at: mint.mintedAt,
|
|
460
|
+
expires_at: sql `GREATEST(${machineNodes.expires_at}, ${mint.expiresAt})`,
|
|
461
|
+
},
|
|
462
|
+
setWhere: and(eq(machineNodes.user_id, mint.userId), isNull(machineNodes.revoked_at)),
|
|
463
|
+
});
|
|
464
|
+
// A guarded no-op and a successful refresh are both "no error", so the write count is the
|
|
465
|
+
// only thing that distinguishes them.
|
|
466
|
+
return (result.rowCount ?? 0) > 0 ? 'recorded' : 'refused';
|
|
467
|
+
}
|
|
468
|
+
async get(nodeId) {
|
|
469
|
+
const [row] = await this.db.select().from(machineNodes).where(eq(machineNodes.node_id, nodeId));
|
|
470
|
+
return row ? rowToMachineNode(row) : null;
|
|
471
|
+
}
|
|
472
|
+
async listByUser(userId) {
|
|
473
|
+
const rows = await this.db
|
|
474
|
+
.select()
|
|
475
|
+
.from(machineNodes)
|
|
476
|
+
.where(eq(machineNodes.user_id, userId))
|
|
477
|
+
.orderBy(desc(machineNodes.last_minted_at));
|
|
478
|
+
return rows.map(rowToMachineNode);
|
|
479
|
+
}
|
|
480
|
+
async revoke(nodeId, revokedAt, revokedByUserId) {
|
|
481
|
+
// Idempotent kill switch: only the FIRST revocation writes (the tombstone keeps its
|
|
482
|
+
// original timestamp/actor), but re-revoking an already-revoked node still reports true.
|
|
483
|
+
const result = await this.db
|
|
484
|
+
.update(machineNodes)
|
|
485
|
+
.set({ revoked_at: revokedAt, revoked_by: revokedByUserId })
|
|
486
|
+
.where(and(eq(machineNodes.node_id, nodeId), isNull(machineNodes.revoked_at)));
|
|
487
|
+
if ((result.rowCount ?? 0) > 0)
|
|
488
|
+
return true;
|
|
489
|
+
return (await this.get(nodeId)) !== null;
|
|
490
|
+
}
|
|
491
|
+
async isRevoked(nodeId) {
|
|
492
|
+
const [row] = await this.db
|
|
493
|
+
.select({ revoked_at: machineNodes.revoked_at })
|
|
494
|
+
.from(machineNodes)
|
|
495
|
+
.where(eq(machineNodes.node_id, nodeId));
|
|
496
|
+
return row?.revoked_at != null;
|
|
497
|
+
}
|
|
498
|
+
async deleteExpired(before) {
|
|
499
|
+
const result = await this.db.delete(machineNodes).where(lt(machineNodes.expires_at, before));
|
|
500
|
+
return result.rowCount ?? 0;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
385
503
|
function rowToEmailConnection(row) {
|
|
386
504
|
return {
|
|
387
505
|
accountId: row.account_id,
|