@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.
Files changed (204) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +116 -0
  4. package/dist/app.d.ts +174 -0
  5. package/dist/app.d.ts.map +1 -0
  6. package/dist/app.js +684 -0
  7. package/dist/app.js.map +1 -0
  8. package/dist/commentary/audit-bridge.d.ts +57 -0
  9. package/dist/commentary/audit-bridge.d.ts.map +1 -0
  10. package/dist/commentary/audit-bridge.js +92 -0
  11. package/dist/commentary/audit-bridge.js.map +1 -0
  12. package/dist/commentary/built-in-patterns.d.ts +24 -0
  13. package/dist/commentary/built-in-patterns.d.ts.map +1 -0
  14. package/dist/commentary/built-in-patterns.js +62 -0
  15. package/dist/commentary/built-in-patterns.js.map +1 -0
  16. package/dist/commentary/index.d.ts +5 -0
  17. package/dist/commentary/index.js +5 -0
  18. package/dist/commentary/sanitizer.d.ts +37 -0
  19. package/dist/commentary/sanitizer.d.ts.map +1 -0
  20. package/dist/commentary/sanitizer.js +182 -0
  21. package/dist/commentary/sanitizer.js.map +1 -0
  22. package/dist/commentary/types.d.ts +120 -0
  23. package/dist/commentary/types.d.ts.map +1 -0
  24. package/dist/config.d.ts +760 -0
  25. package/dist/config.d.ts.map +1 -0
  26. package/dist/config.js +217 -0
  27. package/dist/config.js.map +1 -0
  28. package/dist/consolidator/daemon.d.ts +88 -0
  29. package/dist/consolidator/daemon.d.ts.map +1 -0
  30. package/dist/consolidator/daemon.js +54 -0
  31. package/dist/consolidator/daemon.js.map +1 -0
  32. package/dist/consolidator/index.d.ts +2 -0
  33. package/dist/consolidator/index.js +3 -0
  34. package/dist/errors/index.d.ts +104 -0
  35. package/dist/errors/index.d.ts.map +1 -0
  36. package/dist/errors/index.js +131 -0
  37. package/dist/errors/index.js.map +1 -0
  38. package/dist/health/checks.d.ts +120 -0
  39. package/dist/health/checks.d.ts.map +1 -0
  40. package/dist/health/checks.js +127 -0
  41. package/dist/health/checks.js.map +1 -0
  42. package/dist/health/index.d.ts +3 -0
  43. package/dist/health/index.js +4 -0
  44. package/dist/health/routes.d.ts +66 -0
  45. package/dist/health/routes.d.ts.map +1 -0
  46. package/dist/health/routes.js +96 -0
  47. package/dist/health/routes.js.map +1 -0
  48. package/dist/index.d.ts +88 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +86 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/internal/context.d.ts +66 -0
  53. package/dist/internal/context.d.ts.map +1 -0
  54. package/dist/internal/ids.js +21 -0
  55. package/dist/internal/ids.js.map +1 -0
  56. package/dist/internal/json.js +46 -0
  57. package/dist/internal/json.js.map +1 -0
  58. package/dist/lifecycle/hooks.d.ts +57 -0
  59. package/dist/lifecycle/hooks.d.ts.map +1 -0
  60. package/dist/lifecycle/index.d.ts +2 -0
  61. package/dist/lifecycle/index.js +3 -0
  62. package/dist/lifecycle/pre-bind.d.ts +38 -0
  63. package/dist/lifecycle/pre-bind.d.ts.map +1 -0
  64. package/dist/lifecycle/pre-bind.js +62 -0
  65. package/dist/lifecycle/pre-bind.js.map +1 -0
  66. package/dist/metrics/catalog.d.ts +34 -0
  67. package/dist/metrics/catalog.d.ts.map +1 -0
  68. package/dist/metrics/catalog.js +61 -0
  69. package/dist/metrics/catalog.js.map +1 -0
  70. package/dist/metrics/index.d.ts +3 -0
  71. package/dist/metrics/index.js +4 -0
  72. package/dist/metrics/registry.d.ts +63 -0
  73. package/dist/metrics/registry.d.ts.map +1 -0
  74. package/dist/metrics/registry.js +222 -0
  75. package/dist/metrics/registry.js.map +1 -0
  76. package/dist/middleware/audit.d.ts +47 -0
  77. package/dist/middleware/audit.d.ts.map +1 -0
  78. package/dist/middleware/audit.js +71 -0
  79. package/dist/middleware/audit.js.map +1 -0
  80. package/dist/middleware/auth.d.ts +50 -0
  81. package/dist/middleware/auth.d.ts.map +1 -0
  82. package/dist/middleware/auth.js +164 -0
  83. package/dist/middleware/auth.js.map +1 -0
  84. package/dist/middleware/cors.d.ts +15 -0
  85. package/dist/middleware/cors.d.ts.map +1 -0
  86. package/dist/middleware/cors.js +45 -0
  87. package/dist/middleware/cors.js.map +1 -0
  88. package/dist/middleware/csrf.d.ts +15 -0
  89. package/dist/middleware/csrf.d.ts.map +1 -0
  90. package/dist/middleware/csrf.js +77 -0
  91. package/dist/middleware/csrf.js.map +1 -0
  92. package/dist/middleware/idempotency.d.ts +41 -0
  93. package/dist/middleware/idempotency.d.ts.map +1 -0
  94. package/dist/middleware/idempotency.js +198 -0
  95. package/dist/middleware/idempotency.js.map +1 -0
  96. package/dist/middleware/index.d.ts +9 -0
  97. package/dist/middleware/index.js +10 -0
  98. package/dist/middleware/rate-limit.d.ts +17 -0
  99. package/dist/middleware/rate-limit.d.ts.map +1 -0
  100. package/dist/middleware/rate-limit.js +47 -0
  101. package/dist/middleware/rate-limit.js.map +1 -0
  102. package/dist/middleware/request-state.d.ts +27 -0
  103. package/dist/middleware/request-state.d.ts.map +1 -0
  104. package/dist/middleware/request-state.js +42 -0
  105. package/dist/middleware/request-state.js.map +1 -0
  106. package/dist/middleware/scope.d.ts +24 -0
  107. package/dist/middleware/scope.d.ts.map +1 -0
  108. package/dist/middleware/scope.js +50 -0
  109. package/dist/middleware/scope.js.map +1 -0
  110. package/dist/registry/index.d.ts +135 -0
  111. package/dist/registry/index.d.ts.map +1 -0
  112. package/dist/registry/index.js +96 -0
  113. package/dist/registry/index.js.map +1 -0
  114. package/dist/replay/index.d.ts +2 -0
  115. package/dist/replay/index.js +3 -0
  116. package/dist/replay/routes.d.ts +46 -0
  117. package/dist/replay/routes.d.ts.map +1 -0
  118. package/dist/replay/routes.js +189 -0
  119. package/dist/replay/routes.js.map +1 -0
  120. package/dist/routes/agents.d.ts +41 -0
  121. package/dist/routes/agents.d.ts.map +1 -0
  122. package/dist/routes/agents.js +213 -0
  123. package/dist/routes/agents.js.map +1 -0
  124. package/dist/routes/audit.d.ts +57 -0
  125. package/dist/routes/audit.d.ts.map +1 -0
  126. package/dist/routes/audit.js +116 -0
  127. package/dist/routes/audit.js.map +1 -0
  128. package/dist/routes/auth.d.ts +26 -0
  129. package/dist/routes/auth.d.ts.map +1 -0
  130. package/dist/routes/auth.js +54 -0
  131. package/dist/routes/auth.js.map +1 -0
  132. package/dist/routes/health.d.ts +22 -0
  133. package/dist/routes/health.d.ts.map +1 -0
  134. package/dist/routes/health.js +33 -0
  135. package/dist/routes/health.js.map +1 -0
  136. package/dist/routes/index.d.ts +10 -0
  137. package/dist/routes/index.js +12 -0
  138. package/dist/routes/mcp.d.ts +32 -0
  139. package/dist/routes/mcp.d.ts.map +1 -0
  140. package/dist/routes/mcp.js +61 -0
  141. package/dist/routes/mcp.js.map +1 -0
  142. package/dist/routes/memory.d.ts +141 -0
  143. package/dist/routes/memory.d.ts.map +1 -0
  144. package/dist/routes/memory.js +102 -0
  145. package/dist/routes/memory.js.map +1 -0
  146. package/dist/routes/sessions.d.ts +54 -0
  147. package/dist/routes/sessions.d.ts.map +1 -0
  148. package/dist/routes/sessions.js +135 -0
  149. package/dist/routes/sessions.js.map +1 -0
  150. package/dist/routes/skills.d.ts +34 -0
  151. package/dist/routes/skills.d.ts.map +1 -0
  152. package/dist/routes/skills.js +54 -0
  153. package/dist/routes/skills.js.map +1 -0
  154. package/dist/routes/tokens.d.ts +25 -0
  155. package/dist/routes/tokens.d.ts.map +1 -0
  156. package/dist/routes/tokens.js +87 -0
  157. package/dist/routes/tokens.js.map +1 -0
  158. package/dist/routes/workflows.d.ts +27 -0
  159. package/dist/routes/workflows.d.ts.map +1 -0
  160. package/dist/routes/workflows.js +220 -0
  161. package/dist/routes/workflows.js.map +1 -0
  162. package/dist/runtime/run-state.d.ts +158 -0
  163. package/dist/runtime/run-state.d.ts.map +1 -0
  164. package/dist/runtime/run-state.js +182 -0
  165. package/dist/runtime/run-state.js.map +1 -0
  166. package/dist/sse/events.d.ts +44 -0
  167. package/dist/sse/events.d.ts.map +1 -0
  168. package/dist/sse/events.js +200 -0
  169. package/dist/sse/events.js.map +1 -0
  170. package/dist/sse/index.d.ts +2 -0
  171. package/dist/sse/index.js +3 -0
  172. package/dist/triggers/daemon.d.ts +74 -0
  173. package/dist/triggers/daemon.d.ts.map +1 -0
  174. package/dist/triggers/daemon.js +114 -0
  175. package/dist/triggers/daemon.js.map +1 -0
  176. package/dist/triggers/index.d.ts +3 -0
  177. package/dist/triggers/index.js +4 -0
  178. package/dist/triggers/routes.d.ts +21 -0
  179. package/dist/triggers/routes.d.ts.map +1 -0
  180. package/dist/triggers/routes.js +117 -0
  181. package/dist/triggers/routes.js.map +1 -0
  182. package/dist/ws/dispatcher.d.ts +169 -0
  183. package/dist/ws/dispatcher.d.ts.map +1 -0
  184. package/dist/ws/dispatcher.js +303 -0
  185. package/dist/ws/dispatcher.js.map +1 -0
  186. package/dist/ws/index.d.ts +6 -0
  187. package/dist/ws/index.js +7 -0
  188. package/dist/ws/replay-buffer.d.ts +47 -0
  189. package/dist/ws/replay-buffer.d.ts.map +1 -0
  190. package/dist/ws/replay-buffer.js +88 -0
  191. package/dist/ws/replay-buffer.js.map +1 -0
  192. package/dist/ws/subjects.d.ts +71 -0
  193. package/dist/ws/subjects.d.ts.map +1 -0
  194. package/dist/ws/subjects.js +112 -0
  195. package/dist/ws/subjects.js.map +1 -0
  196. package/dist/ws/ticket.d.ts +74 -0
  197. package/dist/ws/ticket.d.ts.map +1 -0
  198. package/dist/ws/ticket.js +112 -0
  199. package/dist/ws/ticket.js.map +1 -0
  200. package/dist/ws/upgrade.d.ts +63 -0
  201. package/dist/ws/upgrade.d.ts.map +1 -0
  202. package/dist/ws/upgrade.js +324 -0
  203. package/dist/ws/upgrade.js.map +1 -0
  204. package/package.json +156 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # @graphorin/server
2
+
3
+ ## 0.1.0
4
+
5
+ Initial release. See the workspace root `CHANGELOG.md` for the full
6
+ release notes; the per-package changelog is generated by Changesets
7
+ and tracks subsequent updates.
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: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
6
+ [![Node.js: 22+](https://img.shields.io/badge/Node.js-22%2B-43853d.svg)](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"}