@cat-factory/worker 0.141.1 → 0.143.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/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/config/auth.d.ts.map +1 -1
- package/dist/infrastructure/config/auth.js +6 -0
- package/dist/infrastructure/config/auth.js.map +1 -1
- package/dist/infrastructure/config/retention.d.ts.map +1 -1
- package/dist/infrastructure/config/retention.js +6 -0
- package/dist/infrastructure/config/retention.js.map +1 -1
- package/dist/infrastructure/container-assembly.d.ts.map +1 -1
- package/dist/infrastructure/container-assembly.js +70 -7
- package/dist/infrastructure/container-assembly.js.map +1 -1
- package/dist/infrastructure/container-model-resolver.d.ts.map +1 -1
- package/dist/infrastructure/container-model-resolver.js +4 -3
- package/dist/infrastructure/container-model-resolver.js.map +1 -1
- package/dist/infrastructure/env.d.ts +12 -0
- package/dist/infrastructure/env.d.ts.map +1 -1
- package/dist/infrastructure/env.js.map +1 -1
- package/dist/infrastructure/repositories/D1AuthAttemptRepository.d.ts +16 -0
- package/dist/infrastructure/repositories/D1AuthAttemptRepository.d.ts.map +1 -0
- package/dist/infrastructure/repositories/D1AuthAttemptRepository.js +37 -0
- package/dist/infrastructure/repositories/D1AuthAttemptRepository.js.map +1 -0
- package/dist/infrastructure/repositories/D1GateOutcomeRepository.d.ts +12 -0
- package/dist/infrastructure/repositories/D1GateOutcomeRepository.d.ts.map +1 -0
- package/dist/infrastructure/repositories/D1GateOutcomeRepository.js +64 -0
- package/dist/infrastructure/repositories/D1GateOutcomeRepository.js.map +1 -0
- package/dist/infrastructure/repositories/D1MachineNodeRepository.d.ts +16 -0
- package/dist/infrastructure/repositories/D1MachineNodeRepository.d.ts.map +1 -0
- package/dist/infrastructure/repositories/D1MachineNodeRepository.js +83 -0
- package/dist/infrastructure/repositories/D1MachineNodeRepository.js.map +1 -0
- package/dist/infrastructure/repositories/D1PlatformMetricsRepository.d.ts +6 -1
- package/dist/infrastructure/repositories/D1PlatformMetricsRepository.d.ts.map +1 -1
- package/dist/infrastructure/repositories/D1PlatformMetricsRepository.js +124 -0
- package/dist/infrastructure/repositories/D1PlatformMetricsRepository.js.map +1 -1
- package/dist/infrastructure/wireCredentialServices.d.ts.map +1 -1
- package/dist/infrastructure/wireCredentialServices.js +4 -0
- package/dist/infrastructure/wireCredentialServices.js.map +1 -1
- package/dist/infrastructure/workflows/retention.d.ts +29 -2
- package/dist/infrastructure/workflows/retention.d.ts.map +1 -1
- package/dist/infrastructure/workflows/retention.js +19 -2
- package/dist/infrastructure/workflows/retention.js.map +1 -1
- package/migrations/0077_machine_nodes.sql +20 -0
- package/migrations/0078_auth_attempts.sql +16 -0
- package/migrations/0079_gate_outcomes_and_run_days.sql +82 -0
- package/package.json +18 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../../src/infrastructure/workflows/retention.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../../src/infrastructure/workflows/retention.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-- The machine-node roster + revocation tombstones (SEC-5 / security-hardening item 8).
|
|
2
|
+
-- One row per nodeId a mothership has minted a machine token for: recording the mint is
|
|
3
|
+
-- what makes "revoke MY node" checkable (without a roster a revoke endpoint either trusts
|
|
4
|
+
-- a caller-supplied nodeId or cannot exist). `revoked_at` is a tombstone consulted by the
|
|
5
|
+
-- shared machine gate on every /internal/* call; it is never cleared, and a revoked
|
|
6
|
+
-- node_id can never be re-minted. Rows past `expires_at` (the latest signed exp, which no
|
|
7
|
+
-- token for the node can outlive) are pruned by the retention sweep.
|
|
8
|
+
-- Mirrors the Node Drizzle `machineNodes` table (db/tables/identity.ts); keep in step.
|
|
9
|
+
CREATE TABLE machine_nodes (
|
|
10
|
+
node_id TEXT PRIMARY KEY,
|
|
11
|
+
user_id TEXT NOT NULL,
|
|
12
|
+
account_ids TEXT NOT NULL,
|
|
13
|
+
created_at INTEGER NOT NULL,
|
|
14
|
+
last_minted_at INTEGER NOT NULL,
|
|
15
|
+
expires_at INTEGER NOT NULL,
|
|
16
|
+
revoked_at INTEGER,
|
|
17
|
+
revoked_by TEXT
|
|
18
|
+
);
|
|
19
|
+
CREATE INDEX idx_machine_nodes_user ON machine_nodes (user_id);
|
|
20
|
+
CREATE INDEX idx_machine_nodes_expiry ON machine_nodes (expires_at);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-- The durable auth-attempt ledger behind the password-endpoint throttle (SEC-4 /
|
|
2
|
+
-- durable-auth-rate-limiting.md). The in-process Map it replaces was per isolate, so the
|
|
3
|
+
-- effective brute-force cap was `MAX_ATTEMPTS x isolates`; this table is the
|
|
4
|
+
-- cross-replica window. One row per attempt, counted per bucket key (`<ip>:<email>`) AND
|
|
5
|
+
-- per client IP (the cross-email credential-stuffing aggregate), pruned aggressively by
|
|
6
|
+
-- the retention sweep (rows are junk minutes after the window closes).
|
|
7
|
+
-- Mirrors the Node Drizzle `authAttempts` table (db/tables/identity.ts); keep in step.
|
|
8
|
+
CREATE TABLE auth_attempts (
|
|
9
|
+
id TEXT PRIMARY KEY,
|
|
10
|
+
key TEXT NOT NULL,
|
|
11
|
+
ip TEXT NOT NULL,
|
|
12
|
+
at INTEGER NOT NULL
|
|
13
|
+
);
|
|
14
|
+
CREATE INDEX idx_auth_attempts_key ON auth_attempts (key, at);
|
|
15
|
+
CREATE INDEX idx_auth_attempts_ip ON auth_attempts (ip, at);
|
|
16
|
+
CREATE INDEX idx_auth_attempts_at ON auth_attempts (at);
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
-- Two queryable projections behind the operator dashboard
|
|
2
|
+
-- (docs/initiatives/platform-operator-observability.md, slices 4b and 7).
|
|
3
|
+
--
|
|
4
|
+
-- `gate_outcomes`: one flat row per SETTLED polling gate. The live gate state (`attempts`,
|
|
5
|
+
-- `attemptLog`, the escalation phase) lives inside the per-run `detail` JSON blob as
|
|
6
|
+
-- `steps[].gate.*`, which is right for the run window and unusable for a rollup: aggregating it
|
|
7
|
+
-- would mean `json_each` here and `jsonb_array_elements` on Postgres, both reaching into the
|
|
8
|
+
-- engine's internal step-serialization shape, and neither expressible as one GROUP BY. So the
|
|
9
|
+
-- engine writes the terminal verdict as columns and the rollup is an ordinary aggregate.
|
|
10
|
+
--
|
|
11
|
+
-- The id is DERIVED by the writer as `<runId>:<stepIndex>:<outcome>` rather than minted, so the
|
|
12
|
+
-- durable drivers' replays collapse onto one row instead of inflating every statistic the table
|
|
13
|
+
-- exists to report; a step re-run that ends DIFFERENTLY still records its own row.
|
|
14
|
+
CREATE TABLE gate_outcomes (
|
|
15
|
+
id TEXT NOT NULL,
|
|
16
|
+
workspace_id TEXT NOT NULL,
|
|
17
|
+
execution_id TEXT NOT NULL,
|
|
18
|
+
block_id TEXT NOT NULL,
|
|
19
|
+
gate_kind TEXT NOT NULL, -- the gate step's agent kind (`ci`, `conflicts`, …)
|
|
20
|
+
helper_kind TEXT, -- the escalation agent (`ci-fixer`, …), or NULL
|
|
21
|
+
outcome TEXT NOT NULL, -- 'passed' | 'exhausted'
|
|
22
|
+
attempts INTEGER NOT NULL DEFAULT 0, -- helper dispatches spent (0 = precheck-clean)
|
|
23
|
+
max_attempts INTEGER NOT NULL DEFAULT 0,
|
|
24
|
+
helper_failures INTEGER NOT NULL DEFAULT 0, -- helper jobs that themselves failed
|
|
25
|
+
duration_ms INTEGER, -- gate entry → verdict, NULL when unknown
|
|
26
|
+
created_at INTEGER NOT NULL,
|
|
27
|
+
PRIMARY KEY (id)
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
-- The rollup's access path: every read is "this account's workspaces, settled since T".
|
|
31
|
+
CREATE INDEX idx_gate_outcomes_workspace_created ON gate_outcomes (workspace_id, created_at);
|
|
32
|
+
-- The retention prune's access path (a global range delete, not workspace-scoped).
|
|
33
|
+
CREATE INDEX idx_gate_outcomes_created ON gate_outcomes (created_at);
|
|
34
|
+
|
|
35
|
+
-- `platform_run_days`: the daily rollup of `agent_runs` that serves the dashboard's `30d` and
|
|
36
|
+
-- `90d` windows. Those windows exist BECAUSE of this table: scanning a quarter of every run the
|
|
37
|
+
-- deployment ever made, on each dashboard load and each alert sweep, is the cost the rollup
|
|
38
|
+
-- removes, and it produces a series nobody can read at finer resolution anyway.
|
|
39
|
+
--
|
|
40
|
+
-- `failure_kind` uses '' (never NULL) for a non-failed status, because it is part of the primary
|
|
41
|
+
-- key: SQLite permits NULLs in a PK and does NOT treat two of them as equal, so a nullable column
|
|
42
|
+
-- here would let the same bucket be inserted repeatedly and silently double-count the day. The
|
|
43
|
+
-- repository maps '' back to NULL at the read boundary, so the port's shape is unaffected.
|
|
44
|
+
--
|
|
45
|
+
-- Rewritten in place by the sweep (DELETE the recomputed window, then INSERT it), never appended:
|
|
46
|
+
-- a day's counts are not final until the day is over, so the current day must be CORRECTED on
|
|
47
|
+
-- each pass. The DELETE is what makes it a rewrite: a run's `status` mutates in place while its
|
|
48
|
+
-- `created_at` stays put, so an upsert alone would leave the `(day, 'running')` bucket of a run
|
|
49
|
+
-- that has since settled standing beside its new `(day, 'done')` one, and count it twice forever.
|
|
50
|
+
CREATE TABLE platform_run_days (
|
|
51
|
+
workspace_id TEXT NOT NULL,
|
|
52
|
+
day_start INTEGER NOT NULL, -- UTC-midnight epoch ms
|
|
53
|
+
status TEXT NOT NULL,
|
|
54
|
+
failure_kind TEXT NOT NULL DEFAULT '', -- '' for every status but 'failed' (see above)
|
|
55
|
+
run_count INTEGER NOT NULL,
|
|
56
|
+
PRIMARY KEY (workspace_id, day_start, status, failure_kind)
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
-- The prune's access path; the account-scoped read rides the primary key's leading columns.
|
|
60
|
+
CREATE INDEX idx_platform_run_days_day ON platform_run_days (day_start);
|
|
61
|
+
|
|
62
|
+
-- `platform_rollup_state`: how far the SWEEP has covered, which is a fact about the sweep and
|
|
63
|
+
-- therefore cannot be derived from the rolled-up rows.
|
|
64
|
+
--
|
|
65
|
+
-- `MAX(day_start)` over `platform_run_days` was the obvious-looking answer and is ambiguous in
|
|
66
|
+
-- both directions: for an account, an idle fortnight and a wedged sweep return the same value,
|
|
67
|
+
-- and NO rows at all describes a brand-new account exactly as well as a rollup that has never
|
|
68
|
+
-- run. Both readings call for opposite operator responses, so the dashboard must not be left to
|
|
69
|
+
-- guess between them (an un-materialised rollup and an idle quarter are the "absent is not zero"
|
|
70
|
+
-- pair this whole projection exists to keep apart).
|
|
71
|
+
--
|
|
72
|
+
-- One row per rollup, DEPLOYMENT-scoped rather than per account: the pass covers every workspace
|
|
73
|
+
-- at once, so its coverage has no tenant dimension, and it carries no tenant data (a day
|
|
74
|
+
-- boundary and a timestamp). Written in the SAME transaction as the rewrite it describes, so it
|
|
75
|
+
-- can never claim coverage the rows do not have. NOT workspace-scoped, so deliberately absent
|
|
76
|
+
-- from the delete cascade and from the retention prune.
|
|
77
|
+
CREATE TABLE platform_rollup_state (
|
|
78
|
+
rollup TEXT NOT NULL, -- 'run_days'
|
|
79
|
+
through_day INTEGER NOT NULL, -- newest UTC-midnight day boundary the pass covered
|
|
80
|
+
updated_at INTEGER NOT NULL,
|
|
81
|
+
PRIMARY KEY (rollup)
|
|
82
|
+
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/worker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.143.0",
|
|
4
4
|
"description": "Reusable Cloudflare Worker library (Hono + D1) exposing the Agent Architecture Board core: the `createApp()` Hono factory, the default fetch/scheduled/queue handler, and the Durable Object + Workflow classes. Deployments (see deploy/backend) supply the wrangler.toml + config and re-export these.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -42,22 +42,22 @@
|
|
|
42
42
|
"pino": "^10.3.1",
|
|
43
43
|
"valibot": "^1.4.2",
|
|
44
44
|
"workers-ai-provider": "^4.0.0",
|
|
45
|
-
"@cat-factory/agents": "0.106.
|
|
46
|
-
"@cat-factory/caching": "0.13.
|
|
47
|
-
"@cat-factory/
|
|
48
|
-
"@cat-factory/
|
|
49
|
-
"@cat-factory/eks": "0.1.
|
|
50
|
-
"@cat-factory/
|
|
51
|
-
"@cat-factory/
|
|
52
|
-
"@cat-factory/
|
|
53
|
-
"@cat-factory/observability-langfuse": "0.9.
|
|
54
|
-
"@cat-factory/observability-otel": "0.
|
|
55
|
-
"@cat-factory/
|
|
56
|
-
"@cat-factory/
|
|
57
|
-
"@cat-factory/
|
|
58
|
-
"@cat-factory/provider-cloudflare": "0.7.
|
|
59
|
-
"@cat-factory/
|
|
60
|
-
"@cat-factory/
|
|
45
|
+
"@cat-factory/agents": "0.106.8",
|
|
46
|
+
"@cat-factory/caching": "0.13.9",
|
|
47
|
+
"@cat-factory/contracts": "0.221.0",
|
|
48
|
+
"@cat-factory/consensus": "0.13.35",
|
|
49
|
+
"@cat-factory/eks": "0.1.209",
|
|
50
|
+
"@cat-factory/integrations": "0.121.1",
|
|
51
|
+
"@cat-factory/kernel": "0.223.0",
|
|
52
|
+
"@cat-factory/gitlab": "0.15.14",
|
|
53
|
+
"@cat-factory/observability-langfuse": "0.9.52",
|
|
54
|
+
"@cat-factory/observability-otel": "0.7.0",
|
|
55
|
+
"@cat-factory/prompt-fragments": "0.15.46",
|
|
56
|
+
"@cat-factory/server": "0.204.0",
|
|
57
|
+
"@cat-factory/orchestration": "0.192.0",
|
|
58
|
+
"@cat-factory/provider-cloudflare": "0.7.361",
|
|
59
|
+
"@cat-factory/spend": "0.13.11",
|
|
60
|
+
"@cat-factory/gates": "0.8.55"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@cloudflare/vitest-pool-workers": "^0.20.1",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"typescript": "7.0.2",
|
|
66
66
|
"vitest": "^4.1.10",
|
|
67
67
|
"wrangler": "^4.118.0",
|
|
68
|
-
"@cat-factory/conformance": "0.
|
|
68
|
+
"@cat-factory/conformance": "0.21.0"
|
|
69
69
|
},
|
|
70
70
|
"scripts": {
|
|
71
71
|
"build": "tsc -b tsconfig.build.json",
|