@graphorin/server 0.5.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/CHANGELOG.md +7 -0
- package/LICENSE +21 -0
- package/README.md +116 -0
- package/dist/app.d.ts +174 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +684 -0
- package/dist/app.js.map +1 -0
- package/dist/commentary/audit-bridge.d.ts +57 -0
- package/dist/commentary/audit-bridge.d.ts.map +1 -0
- package/dist/commentary/audit-bridge.js +92 -0
- package/dist/commentary/audit-bridge.js.map +1 -0
- package/dist/commentary/built-in-patterns.d.ts +24 -0
- package/dist/commentary/built-in-patterns.d.ts.map +1 -0
- package/dist/commentary/built-in-patterns.js +62 -0
- package/dist/commentary/built-in-patterns.js.map +1 -0
- package/dist/commentary/index.d.ts +5 -0
- package/dist/commentary/index.js +5 -0
- package/dist/commentary/sanitizer.d.ts +37 -0
- package/dist/commentary/sanitizer.d.ts.map +1 -0
- package/dist/commentary/sanitizer.js +182 -0
- package/dist/commentary/sanitizer.js.map +1 -0
- package/dist/commentary/types.d.ts +120 -0
- package/dist/commentary/types.d.ts.map +1 -0
- package/dist/config.d.ts +760 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +217 -0
- package/dist/config.js.map +1 -0
- package/dist/consolidator/daemon.d.ts +88 -0
- package/dist/consolidator/daemon.d.ts.map +1 -0
- package/dist/consolidator/daemon.js +54 -0
- package/dist/consolidator/daemon.js.map +1 -0
- package/dist/consolidator/index.d.ts +2 -0
- package/dist/consolidator/index.js +3 -0
- package/dist/errors/index.d.ts +104 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +131 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/health/checks.d.ts +120 -0
- package/dist/health/checks.d.ts.map +1 -0
- package/dist/health/checks.js +127 -0
- package/dist/health/checks.js.map +1 -0
- package/dist/health/index.d.ts +3 -0
- package/dist/health/index.js +4 -0
- package/dist/health/routes.d.ts +66 -0
- package/dist/health/routes.d.ts.map +1 -0
- package/dist/health/routes.js +96 -0
- package/dist/health/routes.js.map +1 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/context.d.ts +66 -0
- package/dist/internal/context.d.ts.map +1 -0
- package/dist/internal/ids.js +21 -0
- package/dist/internal/ids.js.map +1 -0
- package/dist/internal/json.js +46 -0
- package/dist/internal/json.js.map +1 -0
- package/dist/lifecycle/hooks.d.ts +57 -0
- package/dist/lifecycle/hooks.d.ts.map +1 -0
- package/dist/lifecycle/index.d.ts +2 -0
- package/dist/lifecycle/index.js +3 -0
- package/dist/lifecycle/pre-bind.d.ts +38 -0
- package/dist/lifecycle/pre-bind.d.ts.map +1 -0
- package/dist/lifecycle/pre-bind.js +62 -0
- package/dist/lifecycle/pre-bind.js.map +1 -0
- package/dist/metrics/catalog.d.ts +34 -0
- package/dist/metrics/catalog.d.ts.map +1 -0
- package/dist/metrics/catalog.js +61 -0
- package/dist/metrics/catalog.js.map +1 -0
- package/dist/metrics/index.d.ts +3 -0
- package/dist/metrics/index.js +4 -0
- package/dist/metrics/registry.d.ts +63 -0
- package/dist/metrics/registry.d.ts.map +1 -0
- package/dist/metrics/registry.js +222 -0
- package/dist/metrics/registry.js.map +1 -0
- package/dist/middleware/audit.d.ts +47 -0
- package/dist/middleware/audit.d.ts.map +1 -0
- package/dist/middleware/audit.js +71 -0
- package/dist/middleware/audit.js.map +1 -0
- package/dist/middleware/auth.d.ts +50 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +164 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/cors.d.ts +15 -0
- package/dist/middleware/cors.d.ts.map +1 -0
- package/dist/middleware/cors.js +45 -0
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/csrf.d.ts +15 -0
- package/dist/middleware/csrf.d.ts.map +1 -0
- package/dist/middleware/csrf.js +77 -0
- package/dist/middleware/csrf.js.map +1 -0
- package/dist/middleware/idempotency.d.ts +41 -0
- package/dist/middleware/idempotency.d.ts.map +1 -0
- package/dist/middleware/idempotency.js +198 -0
- package/dist/middleware/idempotency.js.map +1 -0
- package/dist/middleware/index.d.ts +9 -0
- package/dist/middleware/index.js +10 -0
- package/dist/middleware/rate-limit.d.ts +17 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -0
- package/dist/middleware/rate-limit.js +47 -0
- package/dist/middleware/rate-limit.js.map +1 -0
- package/dist/middleware/request-state.d.ts +27 -0
- package/dist/middleware/request-state.d.ts.map +1 -0
- package/dist/middleware/request-state.js +42 -0
- package/dist/middleware/request-state.js.map +1 -0
- package/dist/middleware/scope.d.ts +24 -0
- package/dist/middleware/scope.d.ts.map +1 -0
- package/dist/middleware/scope.js +50 -0
- package/dist/middleware/scope.js.map +1 -0
- package/dist/registry/index.d.ts +135 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +96 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/replay/index.d.ts +2 -0
- package/dist/replay/index.js +3 -0
- package/dist/replay/routes.d.ts +46 -0
- package/dist/replay/routes.d.ts.map +1 -0
- package/dist/replay/routes.js +189 -0
- package/dist/replay/routes.js.map +1 -0
- package/dist/routes/agents.d.ts +41 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +213 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/audit.d.ts +57 -0
- package/dist/routes/audit.d.ts.map +1 -0
- package/dist/routes/audit.js +116 -0
- package/dist/routes/audit.js.map +1 -0
- package/dist/routes/auth.d.ts +26 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +54 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/health.d.ts +22 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +33 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/index.d.ts +10 -0
- package/dist/routes/index.js +12 -0
- package/dist/routes/mcp.d.ts +32 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +61 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/memory.d.ts +141 -0
- package/dist/routes/memory.d.ts.map +1 -0
- package/dist/routes/memory.js +102 -0
- package/dist/routes/memory.js.map +1 -0
- package/dist/routes/sessions.d.ts +54 -0
- package/dist/routes/sessions.d.ts.map +1 -0
- package/dist/routes/sessions.js +135 -0
- package/dist/routes/sessions.js.map +1 -0
- package/dist/routes/skills.d.ts +34 -0
- package/dist/routes/skills.d.ts.map +1 -0
- package/dist/routes/skills.js +54 -0
- package/dist/routes/skills.js.map +1 -0
- package/dist/routes/tokens.d.ts +25 -0
- package/dist/routes/tokens.d.ts.map +1 -0
- package/dist/routes/tokens.js +87 -0
- package/dist/routes/tokens.js.map +1 -0
- package/dist/routes/workflows.d.ts +27 -0
- package/dist/routes/workflows.d.ts.map +1 -0
- package/dist/routes/workflows.js +220 -0
- package/dist/routes/workflows.js.map +1 -0
- package/dist/runtime/run-state.d.ts +158 -0
- package/dist/runtime/run-state.d.ts.map +1 -0
- package/dist/runtime/run-state.js +182 -0
- package/dist/runtime/run-state.js.map +1 -0
- package/dist/sse/events.d.ts +44 -0
- package/dist/sse/events.d.ts.map +1 -0
- package/dist/sse/events.js +200 -0
- package/dist/sse/events.js.map +1 -0
- package/dist/sse/index.d.ts +2 -0
- package/dist/sse/index.js +3 -0
- package/dist/triggers/daemon.d.ts +74 -0
- package/dist/triggers/daemon.d.ts.map +1 -0
- package/dist/triggers/daemon.js +114 -0
- package/dist/triggers/daemon.js.map +1 -0
- package/dist/triggers/index.d.ts +3 -0
- package/dist/triggers/index.js +4 -0
- package/dist/triggers/routes.d.ts +21 -0
- package/dist/triggers/routes.d.ts.map +1 -0
- package/dist/triggers/routes.js +117 -0
- package/dist/triggers/routes.js.map +1 -0
- package/dist/ws/dispatcher.d.ts +169 -0
- package/dist/ws/dispatcher.d.ts.map +1 -0
- package/dist/ws/dispatcher.js +303 -0
- package/dist/ws/dispatcher.js.map +1 -0
- package/dist/ws/index.d.ts +6 -0
- package/dist/ws/index.js +7 -0
- package/dist/ws/replay-buffer.d.ts +47 -0
- package/dist/ws/replay-buffer.d.ts.map +1 -0
- package/dist/ws/replay-buffer.js +88 -0
- package/dist/ws/replay-buffer.js.map +1 -0
- package/dist/ws/subjects.d.ts +71 -0
- package/dist/ws/subjects.d.ts.map +1 -0
- package/dist/ws/subjects.js +112 -0
- package/dist/ws/subjects.js.map +1 -0
- package/dist/ws/ticket.d.ts +74 -0
- package/dist/ws/ticket.d.ts.map +1 -0
- package/dist/ws/ticket.js +112 -0
- package/dist/ws/ticket.js.map +1 -0
- package/dist/ws/upgrade.d.ts +63 -0
- package/dist/ws/upgrade.d.ts.map +1 -0
- package/dist/ws/upgrade.js +324 -0
- package/dist/ws/upgrade.js.map +1 -0
- package/package.json +156 -0
package/CHANGELOG.md
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Oleksiy Stepurenko
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# @graphorin/server
|
|
2
|
+
|
|
3
|
+
> Standalone server runtime for the [Graphorin](https://github.com/o-stepper/graphorin) framework.
|
|
4
|
+
|
|
5
|
+
[](./LICENSE)
|
|
6
|
+
[](https://nodejs.org)
|
|
7
|
+
|
|
8
|
+
- **Version:** v0.5.0
|
|
9
|
+
- **License:** [MIT](./LICENSE) (© 2026 Oleksiy Stepurenko)
|
|
10
|
+
- **Repository:** <https://github.com/o-stepper/graphorin/tree/main/packages/server>
|
|
11
|
+
- **Issues:** <https://github.com/o-stepper/graphorin/issues>
|
|
12
|
+
|
|
13
|
+
## What ships in v0.1 (Phases 14a + 14b + 14c)
|
|
14
|
+
|
|
15
|
+
`@graphorin/server` is the optional, first-class server runtime. Phase 14 is feature-complete: it ships the full HTTP surface, the lifecycle plumbing, the auth + scope + idempotency + audit middleware stack, the programmatic `createServer({...})` factory consumed by the `graphorin start` CLI binary in [`@graphorin/cli`](../cli/README.md), the `graphorin.protocol.v1` WebSocket transport with single-use ticket flow + per-subject replay buffer + delivery-layer commentary-phase trace sanitization, the Server-Sent-Events fallback for proxy-restricted clients, the durable triggers + consolidator daemon integration, the per-subsystem health rollup + `/v1/health/secrets` admin endpoint, the Prometheus `/v1/metrics` exposition, and the scope-enforced replay + audit verification endpoints.
|
|
16
|
+
|
|
17
|
+
| Capability | Detail |
|
|
18
|
+
|---|---|
|
|
19
|
+
| **HTTP server** | Built on [`hono@^4.12.0`](https://hono.dev/) and [`@hono/node-server@^1.19.0`](https://github.com/honojs/node-server). |
|
|
20
|
+
| **WebSocket** | Built on [`@hono/node-ws@^1.3.0`](https://github.com/honojs/middleware/tree/main/packages/node-ws); subprotocol `graphorin.protocol.v1`; bearer + ticket auth; per-subject replay buffer (default 1000 events / 5 min TTL); delivery-layer commentary-phase trace sanitization. Schemas live in [`@graphorin/protocol`](../protocol/README.md). |
|
|
21
|
+
| **SSE fallback** | `GET /v1/sessions/:id/events` for non-WebSocket-friendly clients (corporate proxies, restricted networks). Same sanitization, same `Last-Event-ID` resume semantics. |
|
|
22
|
+
| **Lifecycle hooks** | `beforeStart` → pre-bind validation → storage migrations → bind → triggers / consolidator daemons start → `onReady`; `SIGTERM` → `beforeShutdown` → daemons stop → drain → exit. |
|
|
23
|
+
| **Pre-bind validation** | Resolves every `*Ref` field via `@graphorin/security` resolvers before binding the listener; missing pepper / unresolvable `SecretRef` / missing encryption peer fail fast with typed errors. |
|
|
24
|
+
| **REST endpoints** | Agents (`run`, `stream`, `state`, `abort`, `resume`), workflows (`execute`, `resume`, `state`, `checkpoints`, `fork`), sessions, memory, skills, MCP, tokens, audit (`list`, `export`, `verify`), the `POST /v1/session/ws-ticket` browser ticket route, triggers (`list`, `get`, `fire`, `disable`, `prune`), replay (`runs/:runId/replay`, `sessions/:id/replay`), `/health`, `/health/secrets`, `/metrics`. Every side-effecting endpoint honours an `Idempotency-Key` per IETF draft-07. |
|
|
25
|
+
| **Auth / scope** | `Authorization: Bearer kru_<env>_v1_<...>` (HMAC-SHA256 + pepper) wired through `TokenVerifier` from `@graphorin/security`. Per-route scope grammar `<resource>:<action>[:<id>]`. WebSocket upgrade honours both bearer and the single-use ticket flow. |
|
|
26
|
+
| **Idempotency** | SQLite-backed `idempotency_records` + LRU read cache. Replays cached responses with `Idempotency-Replayed: true`; mismatched payloads return `409`. |
|
|
27
|
+
| **CORS / CSRF / rate limit** | Deny-by-default CORS; double-submit CSRF for browser flows; sliding-window per-IP rate limit. |
|
|
28
|
+
| **Audit middleware** | Forwards every authenticated request through `appendAudit` (`@graphorin/security/audit`) with attribution, route, status, and duration. `POST /v1/audit/verify` walks the SHA-256 hash chain and surfaces the integrity status. |
|
|
29
|
+
| **Triggers daemon** | Wraps `@graphorin/triggers` `Scheduler`; `beforeStart` loads every persisted `trigger_state` row + applies the per-trigger `catchupPolicy`; `beforeShutdown` stops the scheduler. Cron / interval / idle / event triggers survive process restarts. |
|
|
30
|
+
| **Consolidator daemon** | Lifecycle adapter for the `@graphorin/memory` consolidator runtime. Hard 10-second stop timeout so the daemon never hangs on a stuck phase. |
|
|
31
|
+
| **Health rollup** | `/v1/health` returns `{ status, version, uptimeSeconds, checks: { storage, embedder, secrets, encryption, consolidator, triggers, replayBuffer } }`. HTTP 200 on `'degraded'` (warn); HTTP 503 on `'failing'`. |
|
|
32
|
+
| **Secrets health** | `/v1/health/secrets` (scope `secrets:read`) returns the active store + fallback chain + downgrade reason per the secrets capability matrix. |
|
|
33
|
+
| **Prometheus metrics** | `/v1/metrics` text exposition v0.0.4 with `graphorin_*` prefix discipline. The canonical inventory covers agent runs, tool calls, provider tokens / cost, WAL size, idempotency hit ratio, trigger fires, redaction drops, consolidator queue depth / DLQ / budget, OAuth token freshness, replay buffer size, in-flight runs, server uptime, and a static `graphorin_build_info` gauge. |
|
|
34
|
+
| **Replay endpoints** | `POST /v1/runs/:runId/replay` and `POST /v1/sessions/:id/replay` enforce `traces:read:sanitized` (default) or `traces:read:raw` (admin); every invocation appends an audit chain entry. |
|
|
35
|
+
| **Graceful shutdown** | Drains in-flight runs within the configured timeout (default 30 s), preserves run state via `RunStateTracker`, propagates `AbortSignal` cancellation to handlers, tears down WebSocket subscriptions cleanly. |
|
|
36
|
+
| **No phone home** | Zero implicit network calls — verified by the repository-wide `pnpm run check-no-network` CI check. |
|
|
37
|
+
|
|
38
|
+
## Out of scope for Phase 14
|
|
39
|
+
|
|
40
|
+
- Multi-tenant runtime — **v0.3+**.
|
|
41
|
+
- OpenTelemetry metrics export (in addition to Prometheus) — post-MVP.
|
|
42
|
+
|
|
43
|
+
## Install
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
pnpm add @graphorin/server @graphorin/security @graphorin/store-sqlite \
|
|
47
|
+
@graphorin/protocol @graphorin/triggers hono @hono/node-server @hono/node-ws
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
> Other npm-registry-compatible package managers (`npm`, `yarn`, `bun`) work identically; the project itself is developed with [pnpm](https://pnpm.io/).
|
|
51
|
+
|
|
52
|
+
## Programmatic usage
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
import { createServer, defineConfig } from '@graphorin/server';
|
|
56
|
+
|
|
57
|
+
const server = await createServer({
|
|
58
|
+
config: defineConfig({
|
|
59
|
+
server: { host: '127.0.0.1', port: 8080 },
|
|
60
|
+
auth: { kind: 'token', pepperRef: 'keyring:graphorin_server_pepper' },
|
|
61
|
+
storage: { path: './.graphorin/data.db', mode: 'server' },
|
|
62
|
+
}),
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
server.agents.register({
|
|
66
|
+
id: 'echo',
|
|
67
|
+
description: 'Echoes its input back to the caller.',
|
|
68
|
+
agent: {
|
|
69
|
+
id: 'echo',
|
|
70
|
+
async run(input) {
|
|
71
|
+
return { input };
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
const { host, port } = await server.start();
|
|
77
|
+
console.error(`graphorin listening on http://${host}:${port}/v1`);
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## CLI
|
|
81
|
+
|
|
82
|
+
The `graphorin start` / `graphorin init` / `graphorin migrate` CLI ships from [`@graphorin/cli`](../cli/README.md).
|
|
83
|
+
|
|
84
|
+
## Configuration
|
|
85
|
+
|
|
86
|
+
Every field in `defineConfig({...})` is optional and falls back to a documented production-ready default. The full schema (Zod) is exported as `ServerConfigSchema` from `@graphorin/server/config` so operators can compose validation pipelines on top of the framework.
|
|
87
|
+
|
|
88
|
+
The most-frequently-touched options:
|
|
89
|
+
|
|
90
|
+
| Field | Default | Notes |
|
|
91
|
+
|---|---|---|
|
|
92
|
+
| `server.host` | `127.0.0.1` | Bind to `0.0.0.0` only behind a reverse proxy. |
|
|
93
|
+
| `server.port` | `8080` | |
|
|
94
|
+
| `server.basePath` | `/v1` | |
|
|
95
|
+
| `server.idempotency.requireKey` | `'warn'` | `'enforce'` is opt-in for production. |
|
|
96
|
+
| `server.idempotency.ttlSeconds` | `86400` | 24 hours. |
|
|
97
|
+
| `server.cors.allowOrigins` | `[]` | Deny by default; pass an explicit allowlist (or `['*']`). |
|
|
98
|
+
| `server.csrf.enabled` | `true` | Bearer-token requests are exempt. |
|
|
99
|
+
| `server.rateLimit.perIpRequests` | `60` | Per minute. |
|
|
100
|
+
| `server.shutdown.drainTimeoutMs` | `30000` | |
|
|
101
|
+
| `auth.kind` | `'token'` | Set to `'none'` only for trusted loopback environments. |
|
|
102
|
+
| `auth.pepperRef` | _(required for token auth)_ | A `SecretRef` pointing at the HMAC pepper. |
|
|
103
|
+
| `storage.path` | `'./.graphorin/data.db'` | |
|
|
104
|
+
| `storage.encryption.enabled` | `false` | Opt-in SQLCipher v4 via the `better-sqlite3-multiple-ciphers` peer. |
|
|
105
|
+
| `audit.enabled` | `false` | Opt-in mandatory-encrypted audit log per DEC-124. |
|
|
106
|
+
| `metrics.enabled` | `true` | Mounts `/v1/metrics` for Prometheus scraping. |
|
|
107
|
+
| `metrics.requireAuth` | `false` | Opt into the `admin:metrics:read` scope for stricter deployments. |
|
|
108
|
+
| `health.walWarnThresholdBytes` | `52428800` | 50 MB; storage check flips to `'warn'` above this. |
|
|
109
|
+
|
|
110
|
+
## Status
|
|
111
|
+
|
|
112
|
+
`@graphorin/server` is part of the Graphorin framework's `v0.5.0` pre-release. Once published, the package follows the lockstep release cadence shared by every `@graphorin/*` package on the `0.x` line.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
**Project Graphorin** · v0.5.0 · MIT License · © 2026 Oleksiy Stepurenko · <https://github.com/o-stepper/graphorin>
|
package/dist/app.d.ts
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { ServerConfigInput, ServerConfigSpec } from "./config.js";
|
|
2
|
+
import { ConsolidatorDaemon, ConsolidatorLike } from "./consolidator/daemon.js";
|
|
3
|
+
import { TriggersDaemon } from "./triggers/daemon.js";
|
|
4
|
+
import { HealthCheckOptions } from "./health/checks.js";
|
|
5
|
+
import { ServerVariables } from "./internal/context.js";
|
|
6
|
+
import { MetricRegistry } from "./metrics/registry.js";
|
|
7
|
+
import "./health/index.js";
|
|
8
|
+
import { LifecycleHooks } from "./lifecycle/hooks.js";
|
|
9
|
+
import "./lifecycle/index.js";
|
|
10
|
+
import { AgentRegistry, WorkflowRegistry } from "./registry/index.js";
|
|
11
|
+
import { ReplayApi } from "./replay/routes.js";
|
|
12
|
+
import "./replay/index.js";
|
|
13
|
+
import { WsDispatcher } from "./ws/dispatcher.js";
|
|
14
|
+
import { RunStateTracker } from "./runtime/run-state.js";
|
|
15
|
+
import { AuditApi } from "./routes/audit.js";
|
|
16
|
+
import { WsTicketStore } from "./ws/ticket.js";
|
|
17
|
+
import { McpApi } from "./routes/mcp.js";
|
|
18
|
+
import { MemoryApi } from "./routes/memory.js";
|
|
19
|
+
import { SessionApi } from "./routes/sessions.js";
|
|
20
|
+
import { SkillsApi } from "./routes/skills.js";
|
|
21
|
+
import "./routes/index.js";
|
|
22
|
+
import "./ws/index.js";
|
|
23
|
+
import { GraphorinSqliteStore } from "@graphorin/store-sqlite";
|
|
24
|
+
import { Hono } from "hono";
|
|
25
|
+
import * as _graphorin_triggers0 from "@graphorin/triggers";
|
|
26
|
+
|
|
27
|
+
//#region src/app.d.ts
|
|
28
|
+
|
|
29
|
+
declare function ensureStoreAuditBinding(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Public surface returned by {@link createServer}.
|
|
32
|
+
*
|
|
33
|
+
* @stable
|
|
34
|
+
*/
|
|
35
|
+
interface GraphorinServer {
|
|
36
|
+
readonly version: string;
|
|
37
|
+
readonly config: ServerConfigSpec;
|
|
38
|
+
readonly app: Hono<{
|
|
39
|
+
Variables: ServerVariables;
|
|
40
|
+
}>;
|
|
41
|
+
readonly agents: AgentRegistry;
|
|
42
|
+
readonly workflows: WorkflowRegistry;
|
|
43
|
+
readonly runs: RunStateTracker;
|
|
44
|
+
readonly listeningOn: {
|
|
45
|
+
readonly host: string;
|
|
46
|
+
readonly port: number;
|
|
47
|
+
} | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Optional WebSocket dispatcher exposed when `server.ws.enabled =
|
|
50
|
+
* true`. Route handlers + the agent / workflow runtimes call
|
|
51
|
+
* `dispatcher.emit(subject, event)` to fan out events to subscribed
|
|
52
|
+
* clients. Returns `undefined` when WS is disabled.
|
|
53
|
+
*/
|
|
54
|
+
readonly wsDispatcher: WsDispatcher | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Optional WebSocket ticket store exposed when `server.ws.enabled
|
|
57
|
+
* = true`. Surfaced primarily for tests; the
|
|
58
|
+
* `POST /v1/session/ws-ticket` route uses it transparently.
|
|
59
|
+
*/
|
|
60
|
+
readonly wsTickets: WsTicketStore | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Optional triggers daemon — populated when the operator wired a
|
|
63
|
+
* scheduler (or an in-process trigger surface) at construction
|
|
64
|
+
* time. Phase 14c integration.
|
|
65
|
+
*/
|
|
66
|
+
readonly triggers: TriggersDaemon | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* Optional consolidator daemon — populated when the operator
|
|
69
|
+
* supplied a `Consolidator` instance via `createServer({
|
|
70
|
+
* consolidator })`. Phase 14c integration.
|
|
71
|
+
*/
|
|
72
|
+
readonly consolidator: ConsolidatorDaemon | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* Phase 14c Prometheus registry. Always present; sample updates
|
|
75
|
+
* are observable via `metrics.snapshot()`.
|
|
76
|
+
*/
|
|
77
|
+
readonly metrics: MetricRegistry;
|
|
78
|
+
start(): Promise<{
|
|
79
|
+
readonly host: string;
|
|
80
|
+
readonly port: number;
|
|
81
|
+
}>;
|
|
82
|
+
stop(options?: {
|
|
83
|
+
readonly force?: boolean;
|
|
84
|
+
}): Promise<void>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Discriminated union accepted by `CreateServerOptions.triggers`. A
|
|
88
|
+
* caller may either supply a fully-built daemon (e.g. constructed
|
|
89
|
+
* around a custom `Scheduler`) or just the underlying scheduler — the
|
|
90
|
+
* server wraps it with {@link createTriggersDaemon} automatically.
|
|
91
|
+
*
|
|
92
|
+
* @stable
|
|
93
|
+
*/
|
|
94
|
+
type TriggersDaemonInput = {
|
|
95
|
+
readonly daemon: TriggersDaemon;
|
|
96
|
+
} | {
|
|
97
|
+
readonly scheduler: _graphorin_triggers0.Scheduler;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* @stable
|
|
101
|
+
*/
|
|
102
|
+
interface CreateServerOptions {
|
|
103
|
+
/** Loaded `graphorin.config.ts` payload — see `defineConfig({...})`. */
|
|
104
|
+
readonly config?: ServerConfigInput;
|
|
105
|
+
/**
|
|
106
|
+
* Optional pre-validated config. When supplied, `config` is ignored
|
|
107
|
+
* and the schema validation step is skipped. Useful for tests + the
|
|
108
|
+
* `graphorin migrate` CLI command which bypasses the listener.
|
|
109
|
+
*/
|
|
110
|
+
readonly validatedConfig?: ServerConfigSpec;
|
|
111
|
+
/** Pre-built SQLite store. Tests inject an in-memory store. */
|
|
112
|
+
readonly store?: GraphorinSqliteStore;
|
|
113
|
+
/** Optional pre-built tracker. Tests inject deterministic timing. */
|
|
114
|
+
readonly runs?: RunStateTracker;
|
|
115
|
+
/** Optional pre-built registries. */
|
|
116
|
+
readonly agents?: AgentRegistry;
|
|
117
|
+
readonly workflows?: WorkflowRegistry;
|
|
118
|
+
/** Optional in-process domain adapters wired into REST routes. */
|
|
119
|
+
readonly sessions?: SessionApi;
|
|
120
|
+
readonly memory?: MemoryApi;
|
|
121
|
+
readonly skills?: SkillsApi;
|
|
122
|
+
readonly mcp?: McpApi;
|
|
123
|
+
readonly audit?: AuditApi;
|
|
124
|
+
/**
|
|
125
|
+
* Optional consolidator surface (`@graphorin/memory`). Phase 14c
|
|
126
|
+
* starts/stops the runtime alongside the server lifecycle and
|
|
127
|
+
* surfaces its status through `/v1/health`.
|
|
128
|
+
*/
|
|
129
|
+
readonly consolidator?: ConsolidatorLike;
|
|
130
|
+
/**
|
|
131
|
+
* Optional triggers daemon — pass an existing one (e.g. built
|
|
132
|
+
* from `createScheduler`) or a triggers configuration the server
|
|
133
|
+
* should wrap with the daemon adapter.
|
|
134
|
+
*/
|
|
135
|
+
readonly triggers?: TriggersDaemonInput;
|
|
136
|
+
/**
|
|
137
|
+
* Optional replay API consumed by the scope-enforced replay
|
|
138
|
+
* endpoints. Phase 14c.
|
|
139
|
+
*/
|
|
140
|
+
readonly replay?: ReplayApi;
|
|
141
|
+
/**
|
|
142
|
+
* Optional probes that augment `/v1/health`. Provided by consumer
|
|
143
|
+
* code (e.g. `embedder` provides `embedderLoaded`).
|
|
144
|
+
*/
|
|
145
|
+
readonly healthProbes?: () => HealthCheckOptions | Promise<HealthCheckOptions>;
|
|
146
|
+
/**
|
|
147
|
+
* Optional Prometheus metric registry override. When omitted, the
|
|
148
|
+
* server constructs the canonical registry from
|
|
149
|
+
* {@link createServerMetricRegistry}.
|
|
150
|
+
*/
|
|
151
|
+
readonly metricRegistry?: MetricRegistry;
|
|
152
|
+
/** Lifecycle hook overrides. */
|
|
153
|
+
readonly hooks?: LifecycleHooks;
|
|
154
|
+
/** Wall-clock provider for tests. */
|
|
155
|
+
readonly now?: () => number;
|
|
156
|
+
/** Override the cipher peer probe. Tests inject a stub. */
|
|
157
|
+
readonly probeCipherPeer?: () => Promise<void>;
|
|
158
|
+
/** Override the package version reported on `/v1/health`. */
|
|
159
|
+
readonly version?: string;
|
|
160
|
+
/** Skip `applyProcessHardening` (tests). */
|
|
161
|
+
readonly skipHardening?: boolean;
|
|
162
|
+
/** Skip starting the actual listener (tests). */
|
|
163
|
+
readonly skipListen?: boolean;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Build a fully-wired Graphorin server. The returned handle is
|
|
167
|
+
* inert until `start()` is awaited.
|
|
168
|
+
*
|
|
169
|
+
* @stable
|
|
170
|
+
*/
|
|
171
|
+
declare function createServer(options?: CreateServerOptions): Promise<GraphorinServer>;
|
|
172
|
+
//#endregion
|
|
173
|
+
export { CreateServerOptions, GraphorinServer, TriggersDaemonInput, createServer, ensureStoreAuditBinding };
|
|
174
|
+
//# sourceMappingURL=app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","names":[],"sources":["../src/app.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmQiB,iBAxJD,uBAAA,CAAA,CAwJgB,EAAA,IAAA;;;;;;AAMf,UANA,eAAA,CAMA;EAQQ,SAAA,OAAA,EAAA,MAAA;EAMH,SAAA,MAAA,EAlBH,gBAkBG;EAMD,SAAA,GAAA,EAvBL,IAuBK,CAAA;IAMI,SAAA,EA7BS,eA6BT;EAKL,CAAA,CAAA;EACT,SAAA,MAAA,EAlCQ,aAkCR;EACqC,SAAA,SAAA,EAlC1B,gBAkC0B;EAAO,SAAA,IAAA,EAjCtC,eAiCsC;EAW3C,SAAA,WAAA,EAAmB;IAOd,SAAA,IAAA,EAAA,MAAmB;IAEhB,SAAA,IAAA,EAAA,MAAA;EAMS,CAAA,GAAA,SAAA;EAEV;;;;;;EASC,SAAA,YAAA,EA9DK,YA8DL,GAAA,SAAA;EACH;;;;;EAuBe,SAAA,SAAA,EAhFV,aAgFU,GAAA,SAAA;EAA6B;;;;;EAYnB,SAAA,QAAA,EAtFrB,cAsFqB,GAAA,SAAA;EAoBpB;;;;;yBApGG;;;;;oBAKL;WACT;;;;;;MACqC;;;;;;;;;;KAWpC,mBAAA;mBACW;;sBAAc,oBAAA,CACmB;;;;;UAKvC,mBAAA;;oBAEG;;;;;;6BAMS;;mBAEV;;kBAED;;oBAEE;uBACG;;sBAED;oBACF;oBACA;iBACH;mBACE;;;;;;0BAMO;;;;;;sBAMJ;;;;;oBAKF;;;;;gCAKY,qBAAqB,QAAQ;;;;;;4BAMjC;;mBAET;;;;mCAIgB;;;;;;;;;;;;;;iBAoBb,YAAA,WAAsB,sBAA2B,QAAQ"}
|