@mongrov/analytics 0.1.0-alpha.8 → 0.1.0-beta.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/README.md +47 -11
- package/dist/core/factory.d.ts.map +1 -1
- package/dist/core/factory.js +26 -0
- package/dist/core/factory.js.map +1 -1
- package/dist/core/schemas.js +18 -18
- package/dist/core/warehouse.d.ts.map +1 -1
- package/dist/core/warehouse.js +13 -1
- package/dist/core/warehouse.js.map +1 -1
- package/dist/tools/__fakes__/engine.d.ts +25 -0
- package/dist/tools/__fakes__/engine.d.ts.map +1 -0
- package/dist/tools/__fakes__/engine.js +37 -0
- package/dist/tools/__fakes__/engine.js.map +1 -0
- package/dist/tools/audit.d.ts +31 -0
- package/dist/tools/audit.d.ts.map +1 -0
- package/dist/tools/audit.js +157 -0
- package/dist/tools/audit.js.map +1 -0
- package/dist/tools/authorize.d.ts +36 -0
- package/dist/tools/authorize.d.ts.map +1 -0
- package/dist/tools/authorize.js +87 -0
- package/dist/tools/authorize.js.map +1 -0
- package/dist/tools/budget.d.ts +15 -0
- package/dist/tools/budget.d.ts.map +1 -0
- package/dist/tools/budget.js +64 -0
- package/dist/tools/budget.js.map +1 -0
- package/dist/tools/factory.d.ts +43 -0
- package/dist/tools/factory.d.ts.map +1 -0
- package/dist/tools/factory.js +137 -0
- package/dist/tools/factory.js.map +1 -0
- package/dist/tools/formatters.d.ts +17 -0
- package/dist/tools/formatters.d.ts.map +1 -0
- package/dist/tools/formatters.js +30 -0
- package/dist/tools/formatters.js.map +1 -0
- package/dist/tools/impls/activity.d.ts +15 -0
- package/dist/tools/impls/activity.d.ts.map +1 -0
- package/dist/tools/impls/activity.js +61 -0
- package/dist/tools/impls/activity.js.map +1 -0
- package/dist/tools/impls/anomaly.d.ts +21 -0
- package/dist/tools/impls/anomaly.d.ts.map +1 -0
- package/dist/tools/impls/anomaly.js +70 -0
- package/dist/tools/impls/anomaly.js.map +1 -0
- package/dist/tools/impls/compare.d.ts +21 -0
- package/dist/tools/impls/compare.d.ts.map +1 -0
- package/dist/tools/impls/compare.js +68 -0
- package/dist/tools/impls/compare.js.map +1 -0
- package/dist/tools/impls/hrv.d.ts +15 -0
- package/dist/tools/impls/hrv.d.ts.map +1 -0
- package/dist/tools/impls/hrv.js +36 -0
- package/dist/tools/impls/hrv.js.map +1 -0
- package/dist/tools/impls/insights.d.ts +18 -0
- package/dist/tools/impls/insights.d.ts.map +1 -0
- package/dist/tools/impls/insights.js +41 -0
- package/dist/tools/impls/insights.js.map +1 -0
- package/dist/tools/impls/sleep.d.ts +15 -0
- package/dist/tools/impls/sleep.d.ts.map +1 -0
- package/dist/tools/impls/sleep.js +43 -0
- package/dist/tools/impls/sleep.js.map +1 -0
- package/dist/tools/index.d.ts +13 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +21 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp/adapter.d.ts +33 -0
- package/dist/tools/mcp/adapter.d.ts.map +1 -0
- package/dist/tools/mcp/adapter.js +56 -0
- package/dist/tools/mcp/adapter.js.map +1 -0
- package/dist/tools/mcp/guard.d.ts +17 -0
- package/dist/tools/mcp/guard.d.ts.map +1 -0
- package/dist/tools/mcp/guard.js +22 -0
- package/dist/tools/mcp/guard.js.map +1 -0
- package/dist/tools/mcp/index.d.ts +20 -0
- package/dist/tools/mcp/index.d.ts.map +1 -0
- package/dist/tools/mcp/index.js +16 -0
- package/dist/tools/mcp/index.js.map +1 -0
- package/dist/tools/mcp/server.d.ts +39 -0
- package/dist/tools/mcp/server.d.ts.map +1 -0
- package/dist/tools/mcp/server.js +70 -0
- package/dist/tools/mcp/server.js.map +1 -0
- package/dist/tools/mcp/transports/http.d.ts +54 -0
- package/dist/tools/mcp/transports/http.d.ts.map +1 -0
- package/dist/tools/mcp/transports/http.js +133 -0
- package/dist/tools/mcp/transports/http.js.map +1 -0
- package/dist/tools/mcp/transports/stdio.d.ts +22 -0
- package/dist/tools/mcp/transports/stdio.d.ts.map +1 -0
- package/dist/tools/mcp/transports/stdio.js +19 -0
- package/dist/tools/mcp/transports/stdio.js.map +1 -0
- package/dist/tools/rate-limit.d.ts +26 -0
- package/dist/tools/rate-limit.d.ts.map +1 -0
- package/dist/tools/rate-limit.js +67 -0
- package/dist/tools/rate-limit.js.map +1 -0
- package/dist/tools/types.d.ts +121 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +16 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/wrap.d.ts +53 -0
- package/dist/tools/wrap.d.ts.map +1 -0
- package/dist/tools/wrap.js +135 -0
- package/dist/tools/wrap.js.map +1 -0
- package/package.json +21 -4
package/README.md
CHANGED
|
@@ -289,20 +289,40 @@ fake.failExecuteMatching(/^DELETE FROM /, new Error('retention sad'))
|
|
|
289
289
|
**Fake KV** — in-memory `KVStore` implementation with the backing map
|
|
290
290
|
exposed for direct assertions.
|
|
291
291
|
|
|
292
|
-
## Integration testing (
|
|
292
|
+
## Integration testing (live MinIO + Iceberg REST)
|
|
293
293
|
|
|
294
|
-
|
|
295
|
-
|
|
294
|
+
The `test:integration` script drives the shipped `createAnalytics()`
|
|
295
|
+
factory against a real docker-compose stack (MinIO + Tabular's
|
|
296
|
+
`iceberg-rest`). Six scenarios cover the T-18 (analytics-core) and
|
|
297
|
+
T-28 (analytics-sync) acceptance criteria:
|
|
296
298
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
299
|
+
| Suite | Cases |
|
|
300
|
+
|---|---|
|
|
301
|
+
| `src/core/__tests__/minio.integration.test.ts` | attach round-trip, reattach preserves rows, catalog-alias isolation, retention sweep respects watermark, token refresh at 75 % TTL |
|
|
302
|
+
| `src/sync/__tests__/push-fetch.integration.test.ts` | push local → fetch back into fresh engine, byte-equal round trip |
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
# One-shot (boots + tears down docker):
|
|
306
|
+
pnpm test:integration
|
|
307
|
+
|
|
308
|
+
# Iterative loop (keep the stack up between runs):
|
|
309
|
+
cd infra/analytics-minio && docker compose up -d --wait && cd ../..
|
|
310
|
+
INTEGRATION_STACK_EXTERNAL=1 pnpm test:integration
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
Details in
|
|
314
|
+
[`infra/analytics-minio/README.md`](./infra/analytics-minio/README.md)
|
|
315
|
+
(compose recipe, credentials, port map, image pins) and
|
|
316
|
+
[`src/__integration__/README.md`](./src/__integration__/README.md)
|
|
317
|
+
(harness architecture, divergences from prod, how to add a case).
|
|
304
318
|
|
|
305
|
-
|
|
319
|
+
**CI**: the top-level workflow runs the fast unit matrix and a
|
|
320
|
+
dedicated `analytics-integration` job that boots the compose stack in
|
|
321
|
+
docker. See `.github/workflows/ci.yml`.
|
|
322
|
+
|
|
323
|
+
`@duckdb/node-api` is a **devDependency** — it never enters the
|
|
324
|
+
shipped bundle. React Native consumers still ship
|
|
325
|
+
`react-native-duckdb` via the app-level `duckdbFactory`.
|
|
306
326
|
|
|
307
327
|
## Boundaries
|
|
308
328
|
|
|
@@ -451,6 +471,22 @@ Fixture exports used across mapper + firmware tests live at
|
|
|
451
471
|
Consumers writing their own regression tests can import them via a relative
|
|
452
472
|
path inside this workspace; they are excluded from the published `dist/`.
|
|
453
473
|
|
|
474
|
+
## AI tools (`@mongrov/analytics/tools`)
|
|
475
|
+
|
|
476
|
+
Six read-only AI SDK v4 tools (`getHRV`, `getSleepSummary`,
|
|
477
|
+
`getActivityTotal`, `compareTrend`, `detectAnomaly`, `getInsights`)
|
|
478
|
+
sit on top of the warehouse, wired through a
|
|
479
|
+
`rate → auth → execute → budget → audit` chain. See
|
|
480
|
+
[`src/tools/README.md`](./src/tools/README.md).
|
|
481
|
+
|
|
482
|
+
### MCP dev server (`@mongrov/analytics/tools/mcp`)
|
|
483
|
+
|
|
484
|
+
Same six tools, exposed over Model Context Protocol via stdio
|
|
485
|
+
(Claude Desktop) or HTTP with bearer auth (MCP Inspector, curl).
|
|
486
|
+
Dev-guarded (`shouldStartMcpServer()`) + `sideEffects: false` so
|
|
487
|
+
prod RN bundles drop the SDK. See
|
|
488
|
+
[`src/tools/mcp/README.md`](./src/tools/mcp/README.md).
|
|
489
|
+
|
|
454
490
|
## License
|
|
455
491
|
|
|
456
492
|
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/core/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,UAAU,CAAA;AAe7D,OAAO,KAAK,EAEV,eAAe,EACf,eAAe,EAIhB,MAAM,SAAS,CAAA;AA6BhB;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAoCD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,QAAQ,GAAE,uBAA4B,GACrC,eAAe,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/core/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,UAAU,CAAA;AAe7D,OAAO,KAAK,EAEV,eAAe,EACf,eAAe,EAIhB,MAAM,SAAS,CAAA;AA6BhB;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAoCD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,QAAQ,GAAE,uBAA4B,GACrC,eAAe,CAqNjB"}
|
package/dist/core/factory.js
CHANGED
|
@@ -138,8 +138,34 @@ export function createAnalytics(config, internal = {}) {
|
|
|
138
138
|
return;
|
|
139
139
|
await runRetentionSweep(db, catalog, { effectiveDays });
|
|
140
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Await a state that permits an ATTACH transition. `createAnalytics` starts
|
|
143
|
+
* the actor + sends OPEN synchronously; consumers that call `attach()`
|
|
144
|
+
* immediately race the `opening → ready` transition. xstate drops events
|
|
145
|
+
* from disallowed states, so without this guard the pending
|
|
146
|
+
* `waitForNextState('attached'|'error')` would never resolve.
|
|
147
|
+
*
|
|
148
|
+
* Polls instead of `waitForNextState` to sidestep the race between reading
|
|
149
|
+
* `currentState()` and installing the subscription: xstate can transition
|
|
150
|
+
* between the two calls, at which point `waitForNextState`'s skip-first
|
|
151
|
+
* logic swallows the transition we care about and blocks forever.
|
|
152
|
+
*/
|
|
153
|
+
async function ensureReadyForAttach() {
|
|
154
|
+
for (let i = 0; i < 1000; i++) { // ~10s cap
|
|
155
|
+
const s = currentState(actor);
|
|
156
|
+
if (s === 'ready' || s === 'attached')
|
|
157
|
+
return;
|
|
158
|
+
if (s === 'error') {
|
|
159
|
+
throw actor.getSnapshot().context.lastError
|
|
160
|
+
?? new AnalyticsError('engine_open_failed', 'engine transitioned to error before ready');
|
|
161
|
+
}
|
|
162
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
163
|
+
}
|
|
164
|
+
throw new AnalyticsError('engine_open_failed', 'engine never reached ready state within timeout');
|
|
165
|
+
}
|
|
141
166
|
const engine = {
|
|
142
167
|
async attach(ctx) {
|
|
168
|
+
await ensureReadyForAttach();
|
|
143
169
|
const pending = waitForNextState(actor, ['attached', 'error']);
|
|
144
170
|
actor.send({ type: 'ATTACH', ctx });
|
|
145
171
|
const final = await pending;
|
package/dist/core/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/core/factory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/core/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/core/schemas.js
CHANGED
|
@@ -39,11 +39,11 @@ export const SCHEMAS = Object.freeze({
|
|
|
39
39
|
family_id VARCHAR NOT NULL,
|
|
40
40
|
user_id VARCHAR NOT NULL,
|
|
41
41
|
device_id VARCHAR NOT NULL,
|
|
42
|
-
hrv_ms
|
|
43
|
-
stress
|
|
44
|
-
systolic_bp
|
|
45
|
-
diastolic_bp
|
|
46
|
-
vascular_aging
|
|
42
|
+
hrv_ms INTEGER,
|
|
43
|
+
stress INTEGER,
|
|
44
|
+
systolic_bp INTEGER,
|
|
45
|
+
diastolic_bp INTEGER,
|
|
46
|
+
vascular_aging INTEGER
|
|
47
47
|
) PARTITIONED BY (day(ts), user_id);`,
|
|
48
48
|
heart_rate: `CREATE TABLE heart_rate (
|
|
49
49
|
ts TIMESTAMP NOT NULL,
|
|
@@ -51,7 +51,7 @@ export const SCHEMAS = Object.freeze({
|
|
|
51
51
|
family_id VARCHAR NOT NULL,
|
|
52
52
|
user_id VARCHAR NOT NULL,
|
|
53
53
|
device_id VARCHAR NOT NULL,
|
|
54
|
-
bpm
|
|
54
|
+
bpm INTEGER NOT NULL
|
|
55
55
|
) PARTITIONED BY (day(ts), user_id);`,
|
|
56
56
|
spo2: `CREATE TABLE spo2 (
|
|
57
57
|
ts TIMESTAMP NOT NULL,
|
|
@@ -59,7 +59,7 @@ export const SCHEMAS = Object.freeze({
|
|
|
59
59
|
family_id VARCHAR NOT NULL,
|
|
60
60
|
user_id VARCHAR NOT NULL,
|
|
61
61
|
device_id VARCHAR NOT NULL,
|
|
62
|
-
spo2
|
|
62
|
+
spo2 INTEGER NOT NULL
|
|
63
63
|
) PARTITIONED BY (day(ts), user_id);`,
|
|
64
64
|
temperature: `CREATE TABLE temperature (
|
|
65
65
|
ts TIMESTAMP NOT NULL,
|
|
@@ -67,7 +67,7 @@ export const SCHEMAS = Object.freeze({
|
|
|
67
67
|
family_id VARCHAR NOT NULL,
|
|
68
68
|
user_id VARCHAR NOT NULL,
|
|
69
69
|
device_id VARCHAR NOT NULL,
|
|
70
|
-
temp_c
|
|
70
|
+
temp_c INTEGER NOT NULL
|
|
71
71
|
) PARTITIONED BY (day(ts), user_id);`,
|
|
72
72
|
activity: `CREATE TABLE activity (
|
|
73
73
|
ts TIMESTAMP NOT NULL,
|
|
@@ -109,7 +109,7 @@ export const SCHEMAS = Object.freeze({
|
|
|
109
109
|
family_id VARCHAR NOT NULL,
|
|
110
110
|
user_id VARCHAR NOT NULL,
|
|
111
111
|
device_id VARCHAR NOT NULL,
|
|
112
|
-
stage
|
|
112
|
+
stage INTEGER NOT NULL,
|
|
113
113
|
confidence DOUBLE
|
|
114
114
|
) PARTITIONED BY (day(ts), user_id);`,
|
|
115
115
|
sleep_raw: `CREATE TABLE sleep_raw (
|
|
@@ -119,8 +119,8 @@ export const SCHEMAS = Object.freeze({
|
|
|
119
119
|
family_id VARCHAR NOT NULL,
|
|
120
120
|
user_id VARCHAR NOT NULL,
|
|
121
121
|
device_id VARCHAR NOT NULL,
|
|
122
|
-
quality
|
|
123
|
-
unit_length
|
|
122
|
+
quality INTEGER NOT NULL,
|
|
123
|
+
unit_length INTEGER
|
|
124
124
|
) PARTITIONED BY (day(ts_session_start), user_id);`,
|
|
125
125
|
device_event: `CREATE TABLE device_event (
|
|
126
126
|
ts TIMESTAMP NOT NULL,
|
|
@@ -129,18 +129,18 @@ export const SCHEMAS = Object.freeze({
|
|
|
129
129
|
user_id VARCHAR NOT NULL,
|
|
130
130
|
device_id VARCHAR NOT NULL,
|
|
131
131
|
event_type VARCHAR NOT NULL,
|
|
132
|
-
payload
|
|
132
|
+
payload VARCHAR
|
|
133
133
|
) PARTITIONED BY (day(ts));`,
|
|
134
134
|
device_config: `CREATE TABLE device_config (
|
|
135
135
|
device_id VARCHAR NOT NULL,
|
|
136
136
|
brand VARCHAR NOT NULL,
|
|
137
137
|
family_id VARCHAR NOT NULL,
|
|
138
138
|
user_id VARCHAR NOT NULL,
|
|
139
|
-
data_type
|
|
140
|
-
interval_minutes
|
|
139
|
+
data_type INTEGER NOT NULL,
|
|
140
|
+
interval_minutes INTEGER NOT NULL,
|
|
141
141
|
start_time VARCHAR,
|
|
142
142
|
end_time VARCHAR,
|
|
143
|
-
weeks
|
|
143
|
+
weeks INTEGER,
|
|
144
144
|
valid_from TIMESTAMP NOT NULL,
|
|
145
145
|
valid_to TIMESTAMP,
|
|
146
146
|
PRIMARY KEY (device_id, data_type, valid_from)
|
|
@@ -155,7 +155,7 @@ export const SCHEMAS = Object.freeze({
|
|
|
155
155
|
severity VARCHAR NOT NULL,
|
|
156
156
|
title VARCHAR NOT NULL,
|
|
157
157
|
body TEXT,
|
|
158
|
-
evidence
|
|
158
|
+
evidence VARCHAR,
|
|
159
159
|
acknowledged_at TIMESTAMP
|
|
160
160
|
) PARTITIONED BY (day(ts));`,
|
|
161
161
|
sync_watermark: `CREATE TABLE sync_watermark (
|
|
@@ -168,12 +168,12 @@ export const SCHEMAS = Object.freeze({
|
|
|
168
168
|
PRIMARY KEY (brand, family_id, table_name, kind)
|
|
169
169
|
);`,
|
|
170
170
|
tool_call_audit: `CREATE TABLE tool_call_audit (
|
|
171
|
-
ts TIMESTAMP NOT NULL
|
|
171
|
+
ts TIMESTAMP NOT NULL,
|
|
172
172
|
brand VARCHAR NOT NULL,
|
|
173
173
|
family_id VARCHAR NOT NULL,
|
|
174
174
|
requester_user_id VARCHAR NOT NULL,
|
|
175
175
|
tool_name VARCHAR NOT NULL,
|
|
176
|
-
args
|
|
176
|
+
args VARCHAR NOT NULL,
|
|
177
177
|
result_bytes INTEGER,
|
|
178
178
|
result_row_count INTEGER,
|
|
179
179
|
latency_ms INTEGER,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warehouse.d.ts","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,WAAW,EAEX,WAAW,EACZ,MAAM,SAAS,CAAA;AAchB,mFAAmF;AACnF,MAAM,WAAW,UAAU;IACzB,mBAAmB,EAAE,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAA;IACX,WAAW,EAAE,WAAW,CAAA;IACxB,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAA;IACvB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,cAAc,EAAE,IAAI,CAAA;IACpB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"warehouse.d.ts","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,WAAW,EAEX,WAAW,EACZ,MAAM,SAAS,CAAA;AAchB,mFAAmF;AACnF,MAAM,WAAW,UAAU;IACzB,mBAAmB,EAAE,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAA;IACX,WAAW,EAAE,WAAW,CAAA;IACxB,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAA;IACvB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,cAAc,EAAE,IAAI,CAAA;IACpB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,YAAY,CAAC,CA8FvB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
package/dist/core/warehouse.js
CHANGED
|
@@ -71,9 +71,17 @@ export async function attachWarehouse(db, ctx, deps) {
|
|
|
71
71
|
catch (cause) {
|
|
72
72
|
throw new AnalyticsError('attach_failed', `CREATE SECRET failed for ${secretName}`, rootCause(cause));
|
|
73
73
|
}
|
|
74
|
-
// Step 4: ATTACH
|
|
74
|
+
// Step 4: ATTACH + pin the current schema to the `default` namespace.
|
|
75
|
+
//
|
|
76
|
+
// DuckDB's Iceberg attach does not select a namespace, so unqualified
|
|
77
|
+
// `<catalog>.<table>` DDL (see `schemas.ts` / `qualifyDdl`) would resolve
|
|
78
|
+
// against schema `""` and fail with `Schema with name "" not found`.
|
|
79
|
+
// Iceberg mandates 3-part names; picking `default` here lets the rest of
|
|
80
|
+
// the codebase keep the 2-part `<catalog>.<table>` shape it was written
|
|
81
|
+
// against. Callers that need a different namespace should attach directly.
|
|
75
82
|
try {
|
|
76
83
|
await db.execute(`ATTACH '${uri}' AS ${secretName} (TYPE ICEBERG);`);
|
|
84
|
+
await db.execute(`USE ${secretName}.default;`);
|
|
77
85
|
}
|
|
78
86
|
catch (cause) {
|
|
79
87
|
throw new AnalyticsError('attach_failed', `ATTACH failed for ${secretName}`, rootCause(cause));
|
|
@@ -106,6 +114,10 @@ export async function attachWarehouse(db, ctx, deps) {
|
|
|
106
114
|
export async function detachWarehouse(db, tenantId) {
|
|
107
115
|
const secretName = warehouseSecretName(tenantId);
|
|
108
116
|
try {
|
|
117
|
+
// DuckDB refuses to detach the current default database, and `attach`
|
|
118
|
+
// above pinned it to `${secretName}.default`. Reset to the in-memory
|
|
119
|
+
// catalog before detaching so DETACH succeeds.
|
|
120
|
+
await db.execute(`USE memory.main;`);
|
|
109
121
|
await db.execute(`DETACH ${secretName};`);
|
|
110
122
|
await db.execute(`DROP SECRET ${secretName};`);
|
|
111
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warehouse.js","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAUzC;;;;GAIG;AACH,SAAS,SAAS,CAAC,GAAY;IAC7B,IAAI,GAAG,YAAY,cAAc,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACjE,OAAO,GAAG,CAAC,KAAK,IAAI,GAAG,CAAA;IACzB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AA0BD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,OAAO,QAAQ,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAA;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAgB,EAChB,GAAkB,EAClB,IAAgB;IAEhB,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAEpD,wBAAwB;IACxB,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC1E,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CACtB,eAAe,EACf,kCAAkC,GAAG,CAAC,QAAQ,EAAE,EAChD,KAAK,CACN,CAAA;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,KAAoB,CAAA;IACxB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACnC,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACvB,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CACtB,qBAAqB,EACrB,gCAAgC,GAAG,CAAC,QAAQ,EAAE,EAC9C,KAAK,CACN,CAAA;IACH,CAAC;IAED,mCAAmC;IACnC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,OAAO,CACd,4BAA4B,UAAU,oDAAoD,EAC1F,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,CACvD,CAAA;IACH,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CACtB,eAAe,EACf,4BAA4B,UAAU,EAAE,EACxC,SAAS,CAAC,KAAK,CAAC,CACjB,CAAA;IACH,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"warehouse.js","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AnalyticsEngine } from '../../core/types';
|
|
2
|
+
/**
|
|
3
|
+
* Scriptable AnalyticsEngine fake for tool tests.
|
|
4
|
+
*
|
|
5
|
+
* Unlike the rules-side fake (single global queue), this fake supports
|
|
6
|
+
* per-SQL-substring row queues so multi-query tools (compare, activity)
|
|
7
|
+
* can script distinct responses per call.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const engine = createFakeEngine()
|
|
11
|
+
* engine.queueRows('FROM hrv', [{ day: '2026-07-08', avg_hrv: 45 }])
|
|
12
|
+
* engine.queueRows('FROM sleep_session', [...])
|
|
13
|
+
* // ...invoke tool...
|
|
14
|
+
* engine.calls.forEach(c => ...)
|
|
15
|
+
*/
|
|
16
|
+
export interface FakeEngine extends AnalyticsEngine {
|
|
17
|
+
readonly calls: {
|
|
18
|
+
sql: string;
|
|
19
|
+
params: Record<string, unknown>;
|
|
20
|
+
}[];
|
|
21
|
+
queueRows: (sqlSubstring: string, rows: unknown[]) => void;
|
|
22
|
+
setError: (err: Error | null) => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function createFakeEngine(): FakeEngine;
|
|
25
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/tools/__fakes__/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAW,SAAQ,eAAe;IACjD,QAAQ,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,CAAA;IAClE,SAAS,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;IAC1D,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;CACtC;AAED,wBAAgB,gBAAgB,IAAI,UAAU,CAkC7C"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export function createFakeEngine() {
|
|
2
|
+
const queues = [];
|
|
3
|
+
const calls = [];
|
|
4
|
+
let error = null;
|
|
5
|
+
const engine = {
|
|
6
|
+
async attach() { },
|
|
7
|
+
async detach() { },
|
|
8
|
+
async execute(sql, params) {
|
|
9
|
+
calls.push({ sql, params: params ?? {} });
|
|
10
|
+
if (error)
|
|
11
|
+
throw error;
|
|
12
|
+
const idx = queues.findIndex(q => sql.includes(q.substring));
|
|
13
|
+
if (idx === -1)
|
|
14
|
+
return [];
|
|
15
|
+
const [q] = queues.splice(idx, 1);
|
|
16
|
+
return q.rows;
|
|
17
|
+
},
|
|
18
|
+
stream() {
|
|
19
|
+
throw new Error('stream not implemented in fake');
|
|
20
|
+
},
|
|
21
|
+
createAppender() {
|
|
22
|
+
throw new Error('createAppender not implemented in fake');
|
|
23
|
+
},
|
|
24
|
+
state: 'attached',
|
|
25
|
+
lastError: null,
|
|
26
|
+
catalog: 'fake',
|
|
27
|
+
subscribe: () => () => { },
|
|
28
|
+
async setRetention() { },
|
|
29
|
+
async getLastAttach() { return null; },
|
|
30
|
+
async close() { },
|
|
31
|
+
calls,
|
|
32
|
+
queueRows(substring, rows) { queues.push({ substring, rows }); },
|
|
33
|
+
setError(err) { error = err; },
|
|
34
|
+
};
|
|
35
|
+
return engine;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/tools/__fakes__/engine.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAA6C,EAAE,CAAA;IAC3D,MAAM,KAAK,GAAuD,EAAE,CAAA;IACpE,IAAI,KAAK,GAAiB,IAAI,CAAA;IAE9B,MAAM,MAAM,GAAe;QACzB,KAAK,CAAC,MAAM,KAAI,CAAC;QACjB,KAAK,CAAC,MAAM,KAAI,CAAC;QACjB,KAAK,CAAC,OAAO,CAAI,GAAW,EAAE,MAAgC;YAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,CAAA;YACzC,IAAI,KAAK;gBAAE,MAAM,KAAK,CAAA;YACtB,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;YAC5D,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,OAAO,EAAS,CAAA;YAChC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACjC,OAAO,CAAC,CAAC,IAAW,CAAA;QACtB,CAAC;QACD,MAAM;YACJ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACnD,CAAC;QACD,cAAc;YACZ,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;QAC3D,CAAC;QACD,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC;QACzB,KAAK,CAAC,YAAY,KAAI,CAAC;QACvB,KAAK,CAAC,aAAa,KAAK,OAAO,IAAI,CAAA,CAAC,CAAC;QACrC,KAAK,CAAC,KAAK,KAAI,CAAC;QAChB,KAAK;QACL,SAAS,CAAC,SAAS,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA,CAAC,CAAC;QAC/D,QAAQ,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,CAAA,CAAC,CAAC;KAC9B,CAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batched writer for `tool_call_audit`.
|
|
3
|
+
*
|
|
4
|
+
* `record()` enqueues synchronously (non-blocking). The batch flushes
|
|
5
|
+
* whenever:
|
|
6
|
+
* - the pending queue reaches `batchSize` (default 10), or
|
|
7
|
+
* - the flush timer fires (`flushIntervalMs`, default 1000ms).
|
|
8
|
+
*
|
|
9
|
+
* `flush()` and `close()` are cooperative exit hooks — `close`
|
|
10
|
+
* additionally halts the timer.
|
|
11
|
+
*
|
|
12
|
+
* On flush failure the batch is retained and retried on the next
|
|
13
|
+
* tick. A defensive `MAX_CONSECUTIVE_FAILURES` cap drops the buffer
|
|
14
|
+
* after repeated errors to avoid unbounded growth on a stuck
|
|
15
|
+
* warehouse.
|
|
16
|
+
*
|
|
17
|
+
* SQL uses a single INSERT with a suffix-indexed VALUES tuple per
|
|
18
|
+
* row (`$p0_ts, $p0_brand, …, $p1_ts, …`). DuckDB honors named
|
|
19
|
+
* parameters in this form.
|
|
20
|
+
*/
|
|
21
|
+
import type { AnalyticsEngine } from '../core/types';
|
|
22
|
+
import type { AuditWriter, ToolsLogger } from './types';
|
|
23
|
+
export interface CreateAuditWriterConfig {
|
|
24
|
+
analytics: AnalyticsEngine;
|
|
25
|
+
enabled?: boolean;
|
|
26
|
+
batchSize?: number;
|
|
27
|
+
flushIntervalMs?: number;
|
|
28
|
+
logger?: ToolsLogger;
|
|
29
|
+
}
|
|
30
|
+
export declare function createAuditWriter(cfg: CreateAuditWriterConfig): AuditWriter;
|
|
31
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,KAAK,EAAc,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAoBnE,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,eAAe,CAAA;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,uBAAuB,GAAG,WAAW,CA6F3E"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batched writer for `tool_call_audit`.
|
|
3
|
+
*
|
|
4
|
+
* `record()` enqueues synchronously (non-blocking). The batch flushes
|
|
5
|
+
* whenever:
|
|
6
|
+
* - the pending queue reaches `batchSize` (default 10), or
|
|
7
|
+
* - the flush timer fires (`flushIntervalMs`, default 1000ms).
|
|
8
|
+
*
|
|
9
|
+
* `flush()` and `close()` are cooperative exit hooks — `close`
|
|
10
|
+
* additionally halts the timer.
|
|
11
|
+
*
|
|
12
|
+
* On flush failure the batch is retained and retried on the next
|
|
13
|
+
* tick. A defensive `MAX_CONSECUTIVE_FAILURES` cap drops the buffer
|
|
14
|
+
* after repeated errors to avoid unbounded growth on a stuck
|
|
15
|
+
* warehouse.
|
|
16
|
+
*
|
|
17
|
+
* SQL uses a single INSERT with a suffix-indexed VALUES tuple per
|
|
18
|
+
* row (`$p0_ts, $p0_brand, …, $p1_ts, …`). DuckDB honors named
|
|
19
|
+
* parameters in this form.
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_BATCH_SIZE = 10;
|
|
22
|
+
const DEFAULT_FLUSH_INTERVAL_MS = 1000;
|
|
23
|
+
const MAX_CONSECUTIVE_FAILURES = 5;
|
|
24
|
+
const COLUMNS = [
|
|
25
|
+
'ts',
|
|
26
|
+
'brand',
|
|
27
|
+
'family_id',
|
|
28
|
+
'requester_user_id',
|
|
29
|
+
'tool_name',
|
|
30
|
+
'args',
|
|
31
|
+
'result_bytes',
|
|
32
|
+
'result_row_count',
|
|
33
|
+
'latency_ms',
|
|
34
|
+
'outcome',
|
|
35
|
+
'error_message',
|
|
36
|
+
];
|
|
37
|
+
export function createAuditWriter(cfg) {
|
|
38
|
+
const enabled = cfg.enabled ?? true;
|
|
39
|
+
const batchSize = cfg.batchSize ?? DEFAULT_BATCH_SIZE;
|
|
40
|
+
const flushIntervalMs = cfg.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS;
|
|
41
|
+
const logger = cfg.logger;
|
|
42
|
+
const pending = [];
|
|
43
|
+
let timer = null;
|
|
44
|
+
let consecutiveFailures = 0;
|
|
45
|
+
let inFlight = null;
|
|
46
|
+
let closed = false;
|
|
47
|
+
function ensureTimer() {
|
|
48
|
+
if (timer || closed)
|
|
49
|
+
return;
|
|
50
|
+
timer = setInterval(() => {
|
|
51
|
+
void doFlush();
|
|
52
|
+
}, flushIntervalMs);
|
|
53
|
+
// Node timers are keep-alive by default; unref so a lingering
|
|
54
|
+
// audit writer doesn't block process exit.
|
|
55
|
+
if (typeof timer.unref === 'function') {
|
|
56
|
+
timer.unref();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function clearFlushTimer() {
|
|
60
|
+
if (!timer)
|
|
61
|
+
return;
|
|
62
|
+
clearInterval(timer);
|
|
63
|
+
timer = null;
|
|
64
|
+
}
|
|
65
|
+
async function doFlush() {
|
|
66
|
+
if (inFlight)
|
|
67
|
+
return inFlight;
|
|
68
|
+
if (pending.length === 0)
|
|
69
|
+
return;
|
|
70
|
+
const batch = pending.splice(0, pending.length);
|
|
71
|
+
inFlight = (async () => {
|
|
72
|
+
try {
|
|
73
|
+
await writeBatch(cfg.analytics, batch);
|
|
74
|
+
consecutiveFailures = 0;
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
consecutiveFailures += 1;
|
|
78
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
79
|
+
logger?.warn('audit flush failed', {
|
|
80
|
+
err: errMsg,
|
|
81
|
+
batchSize: batch.length,
|
|
82
|
+
consecutiveFailures,
|
|
83
|
+
});
|
|
84
|
+
if (consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {
|
|
85
|
+
logger?.error('audit flush cap reached, dropping batch', {
|
|
86
|
+
droppedRows: batch.length,
|
|
87
|
+
});
|
|
88
|
+
consecutiveFailures = 0;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// Retain: prepend so retry preserves order.
|
|
92
|
+
pending.unshift(...batch);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
inFlight = null;
|
|
97
|
+
}
|
|
98
|
+
})();
|
|
99
|
+
return inFlight;
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
record(entry) {
|
|
103
|
+
if (!enabled || closed)
|
|
104
|
+
return;
|
|
105
|
+
pending.push(entry);
|
|
106
|
+
ensureTimer();
|
|
107
|
+
if (pending.length >= batchSize) {
|
|
108
|
+
void doFlush();
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
async flush() {
|
|
112
|
+
if (!enabled)
|
|
113
|
+
return;
|
|
114
|
+
await doFlush();
|
|
115
|
+
// If the flush swallowed a failure and re-queued, drain once
|
|
116
|
+
// more so callers get a best-effort guarantee.
|
|
117
|
+
if (pending.length > 0) {
|
|
118
|
+
await doFlush();
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
async close() {
|
|
122
|
+
closed = true;
|
|
123
|
+
clearFlushTimer();
|
|
124
|
+
if (!enabled)
|
|
125
|
+
return;
|
|
126
|
+
await doFlush();
|
|
127
|
+
if (pending.length > 0) {
|
|
128
|
+
await doFlush();
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
async function writeBatch(analytics, batch) {
|
|
134
|
+
if (batch.length === 0)
|
|
135
|
+
return;
|
|
136
|
+
const tuples = [];
|
|
137
|
+
const params = {};
|
|
138
|
+
batch.forEach((entry, i) => {
|
|
139
|
+
const prefix = `p${i}`;
|
|
140
|
+
const placeholders = COLUMNS.map(col => `$${prefix}_${col}`);
|
|
141
|
+
tuples.push(`(${placeholders.join(', ')})`);
|
|
142
|
+
params[`${prefix}_ts`] = entry.ts;
|
|
143
|
+
params[`${prefix}_brand`] = entry.brand;
|
|
144
|
+
params[`${prefix}_family_id`] = entry.familyId;
|
|
145
|
+
params[`${prefix}_requester_user_id`] = entry.requesterUserId;
|
|
146
|
+
params[`${prefix}_tool_name`] = entry.toolName;
|
|
147
|
+
params[`${prefix}_args`] = JSON.stringify(entry.args);
|
|
148
|
+
params[`${prefix}_result_bytes`] = entry.resultBytes;
|
|
149
|
+
params[`${prefix}_result_row_count`] = entry.resultRowCount;
|
|
150
|
+
params[`${prefix}_latency_ms`] = entry.latencyMs;
|
|
151
|
+
params[`${prefix}_outcome`] = entry.outcome;
|
|
152
|
+
params[`${prefix}_error_message`] = entry.errorMessage;
|
|
153
|
+
});
|
|
154
|
+
const sql = `INSERT INTO tool_call_audit (${COLUMNS.join(', ')}) VALUES ${tuples.join(', ')}`;
|
|
155
|
+
await analytics.execute(sql, params);
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authorize hooks for analytics tools.
|
|
3
|
+
*
|
|
4
|
+
* `familyScopeAuthorize` — grants access iff `args.userId` is either
|
|
5
|
+
* the requester themselves or another member of the requester's
|
|
6
|
+
* family. When `config.familyMembersProvider` is supplied (the
|
|
7
|
+
* factory path since T-11), membership resolves via that provider;
|
|
8
|
+
* otherwise the legacy SQL path against a `family_member` table is
|
|
9
|
+
* used (kept for standalone hook usage and backwards compat).
|
|
10
|
+
*
|
|
11
|
+
* Both hooks fail closed on any error — provider throws, engine
|
|
12
|
+
* throws, missing/malformed args — return `false` rather than
|
|
13
|
+
* surfacing the error to the LLM.
|
|
14
|
+
*/
|
|
15
|
+
import type { AnalyticsEngine, FamilyMembersProvider } from '../core/types';
|
|
16
|
+
import type { AuthorizeFn } from './types';
|
|
17
|
+
export interface AuthorizeConfig {
|
|
18
|
+
/**
|
|
19
|
+
* When present, membership is resolved via the provider instead of
|
|
20
|
+
* SQL. This is the path wired by `createAnalyticsTools`.
|
|
21
|
+
*/
|
|
22
|
+
familyMembersProvider?: FamilyMembersProvider;
|
|
23
|
+
}
|
|
24
|
+
export declare function familyScopeAuthorize(analytics: AnalyticsEngine, config?: AuthorizeConfig): AuthorizeFn;
|
|
25
|
+
/**
|
|
26
|
+
* `orgScopeAuthorize` — parity with family scope but against an
|
|
27
|
+
* `org_member` table. Orgs are not first-class in v0.1.0; the ctx
|
|
28
|
+
* `familyId` is treated as the org id until org membership is wired
|
|
29
|
+
* through `RequestContext`.
|
|
30
|
+
*
|
|
31
|
+
* When `familyMembersProvider` is supplied, the same provider is
|
|
32
|
+
* consulted (v0.1.0 shim — a dedicated `orgMembersProvider` will
|
|
33
|
+
* split out once orgs land).
|
|
34
|
+
*/
|
|
35
|
+
export declare function orgScopeAuthorize(analytics: AnalyticsEngine, config?: AuthorizeConfig): AuthorizeFn;
|
|
36
|
+
//# sourceMappingURL=authorize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorize.d.ts","sourceRoot":"","sources":["../../src/tools/authorize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;CAC9C;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,eAAe,EAC1B,MAAM,GAAE,eAAoB,GAC3B,WAAW,CAmCb;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,eAAe,EAC1B,MAAM,GAAE,eAAoB,GAC3B,WAAW,CAmCb"}
|