@opengeni/api-router 0.22.2 → 0.26.1

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 (124) hide show
  1. package/dist/app.d.ts +2 -2
  2. package/dist/app.js +1 -1
  3. package/dist/auth/managed-auth.d.ts +0 -30
  4. package/dist/browser-controller-authority.d.ts +43 -0
  5. package/dist/browser-state-authority.d.ts +27 -0
  6. package/dist/{chunk-HWXJW5C7.js → chunk-JIKNR5YL.js} +27993 -14546
  7. package/dist/chunk-JIKNR5YL.js.map +1 -0
  8. package/dist/codemode.d.ts +23 -0
  9. package/dist/editable-artifact-live-hints.d.ts +11 -0
  10. package/dist/editable-artifact-native-kernel.d.ts +37 -0
  11. package/dist/editable-artifact-office-import.d.ts +22 -0
  12. package/dist/editable-artifact-production.d.ts +29 -0
  13. package/dist/editable-artifact-websocket.d.ts +49 -0
  14. package/dist/editable-artifact-workspace-files.d.ts +23 -0
  15. package/dist/github-browser-flow.d.ts +6 -0
  16. package/dist/http/cors.d.ts +1 -0
  17. package/dist/http/sse.d.ts +2 -0
  18. package/dist/index.d.ts +3 -2
  19. package/dist/index.js +1824 -30
  20. package/dist/index.js.map +1 -1
  21. package/dist/integrations/api-integrations.d.ts +24 -0
  22. package/dist/integrations/atlassian.d.ts +176 -0
  23. package/dist/integrations/github-skill-source.d.ts +5 -0
  24. package/dist/integrations/google-drive.d.ts +85 -0
  25. package/dist/integrations/oauth-client.d.ts +30 -1
  26. package/dist/integrations/provider-oauth.d.ts +19 -0
  27. package/dist/integrations/slack-bot.d.ts +4 -0
  28. package/dist/integrations/slack-interactions.d.ts +14 -2
  29. package/dist/integrations/social-api.d.ts +2 -1
  30. package/dist/mcp/editable-artifact-query-schema.d.ts +4 -0
  31. package/dist/mcp/editable-artifacts.d.ts +13 -0
  32. package/dist/mcp/receipts.d.ts +28 -0
  33. package/dist/mcp/scheduled-task-view.d.ts +518 -0
  34. package/dist/mcp/server.d.ts +14 -3
  35. package/dist/memory-slack-delivery.d.ts +9 -0
  36. package/dist/routes/api-integrations.d.ts +8 -0
  37. package/dist/routes/browser-identities.d.ts +5 -0
  38. package/dist/routes/browser-sessions.d.ts +6 -0
  39. package/dist/routes/company-profile.d.ts +3 -0
  40. package/dist/routes/computer-sessions.d.ts +6 -0
  41. package/dist/routes/editable-artifacts.d.ts +44 -0
  42. package/dist/routes/integration-features.d.ts +3 -0
  43. package/dist/routes/memory-slack-publications.d.ts +6 -0
  44. package/dist/routes/plugins.d.ts +8 -0
  45. package/dist/routes/sessions.d.ts +17 -2
  46. package/dist/routes/skills.d.ts +6 -0
  47. package/dist/routes/video-generation.d.ts +3 -0
  48. package/dist/sandbox/auth-callout.d.ts +2 -0
  49. package/dist/sandbox/channel-a.d.ts +59 -2
  50. package/dist/sandbox/metrics-ingestion.d.ts +6 -1
  51. package/dist/sandbox/viewer.d.ts +4 -2
  52. package/dist/temporal-schedule-cleanup.d.ts +26 -0
  53. package/package.json +19 -14
  54. package/src/app.ts +277 -41
  55. package/src/auth/managed-auth.ts +0 -16
  56. package/src/browser-controller-authority.ts +137 -0
  57. package/src/browser-state-authority.ts +236 -0
  58. package/src/codemode.ts +186 -0
  59. package/src/editable-artifact-live-hints.ts +64 -0
  60. package/src/editable-artifact-native-kernel.ts +659 -0
  61. package/src/editable-artifact-office-import.ts +230 -0
  62. package/src/editable-artifact-production.ts +419 -0
  63. package/src/editable-artifact-websocket.ts +311 -0
  64. package/src/editable-artifact-workspace-files.ts +186 -0
  65. package/src/github-browser-flow.ts +35 -6
  66. package/src/http/auth.ts +2 -0
  67. package/src/http/cors.ts +3 -0
  68. package/src/http/sse.ts +101 -6
  69. package/src/index.ts +147 -23
  70. package/src/integrations/api-integrations.ts +350 -0
  71. package/src/integrations/atlassian.ts +1621 -0
  72. package/src/integrations/github-skill-source.ts +142 -0
  73. package/src/integrations/google-drive.ts +1000 -64
  74. package/src/integrations/oauth-client.ts +159 -89
  75. package/src/integrations/provider-oauth.ts +777 -0
  76. package/src/integrations/slack-bot.ts +31 -2
  77. package/src/integrations/slack-interactions.ts +610 -42
  78. package/src/integrations/social-api.ts +11 -0
  79. package/src/mcp/documents.ts +74 -26
  80. package/src/mcp/editable-artifact-query-schema.ts +236 -0
  81. package/src/mcp/editable-artifacts.ts +448 -0
  82. package/src/mcp/receipts.ts +95 -0
  83. package/src/mcp/scheduled-task-view.ts +642 -0
  84. package/src/mcp/server.ts +1718 -310
  85. package/src/memory-slack-delivery.ts +209 -0
  86. package/src/observability.ts +3 -3
  87. package/src/routes/api-integrations.ts +407 -0
  88. package/src/routes/api-keys.ts +7 -1
  89. package/src/routes/browser-identities.ts +136 -0
  90. package/src/routes/browser-sessions.ts +2543 -0
  91. package/src/routes/codex.ts +7 -4
  92. package/src/routes/company-profile.ts +255 -0
  93. package/src/routes/computer-sessions.ts +1247 -0
  94. package/src/routes/connections.ts +358 -102
  95. package/src/routes/documents.ts +22 -3
  96. package/src/routes/editable-artifacts.ts +1159 -0
  97. package/src/routes/enrollments.ts +54 -12
  98. package/src/routes/environments.ts +60 -11
  99. package/src/routes/files.ts +277 -65
  100. package/src/routes/github.ts +18 -2
  101. package/src/routes/install.ts +38 -2
  102. package/src/routes/integration-features.ts +258 -0
  103. package/src/routes/machines.ts +1 -1
  104. package/src/routes/memory-slack-publications.ts +216 -0
  105. package/src/routes/packs.ts +437 -7
  106. package/src/routes/plugins.ts +751 -0
  107. package/src/routes/rigs.ts +77 -20
  108. package/src/routes/scheduled-tasks.ts +94 -42
  109. package/src/routes/sessions.ts +475 -234
  110. package/src/routes/skills.ts +174 -0
  111. package/src/routes/transcription-recordings.ts +65 -33
  112. package/src/routes/video-generation.ts +132 -0
  113. package/src/routes/workspaces.ts +46 -24
  114. package/src/sandbox/auth-callout.ts +16 -4
  115. package/src/sandbox/channel-a.ts +809 -85
  116. package/src/sandbox/enrollment.ts +13 -3
  117. package/src/sandbox/machines.ts +1 -1
  118. package/src/sandbox/metrics-ingestion.ts +121 -3
  119. package/src/sandbox/rematerialize.ts +35 -47
  120. package/src/sandbox/viewer.ts +58 -29
  121. package/src/temporal-schedule-cleanup.ts +135 -0
  122. package/dist/chunk-HWXJW5C7.js.map +0 -1
  123. package/dist/mcp/toolspace.d.ts +0 -62
  124. package/src/mcp/toolspace.ts +0 -1186
@@ -1,7 +1,8 @@
1
- import { type SessionAuthorizationOperation } from "@opengeni/contracts";
1
+ import { ClientSessionEvent, SteerSessionMessageRequest, type SessionAuthorizationOperation } from "@opengeni/contracts";
2
+ import { type SessionDiscoveryCursor } from "@opengeni/db";
2
3
  import type { Context, Hono } from "hono";
3
4
  import type { ApiRouteDeps } from "@opengeni/core";
4
- import { type ViewerServices } from "../sandbox/viewer";
5
+ import { type ViewerServices } from "../sandbox/viewer.js";
5
6
  type SessionRouteDeps = ApiRouteDeps & Pick<ViewerServices, "establishSandboxSession">;
6
7
  export declare function registerSessionRoutes(app: Hono, deps: SessionRouteDeps): void;
7
8
  /**
@@ -10,6 +11,20 @@ export declare function registerSessionRoutes(app: Hono, deps: SessionRouteDeps)
10
11
  * host-managed mode; standalone deployments never consult this classifier.
11
12
  */
12
13
  export declare function sessionAuthorizationOperationForHttp(method: string, pathname: string, sessionId: string): SessionAuthorizationOperation | null;
14
+ export type AgentTopologyCursorEnvelope = {
15
+ cursor: SessionDiscoveryCursor;
16
+ parentSessionId: string | null;
17
+ search: string | null;
18
+ };
19
+ export declare function encodeAgentTopologyCursor(value: AgentTopologyCursorEnvelope): string;
20
+ export declare function agentTopologyQuery(query: Record<string, string>): {
21
+ limit: number;
22
+ parentSessionId: string | null;
23
+ search: string | undefined;
24
+ cursor: SessionDiscoveryCursor | undefined;
25
+ };
13
26
  /** Stable, value-free JSON errors for only the create-session boundary. */
14
27
  export declare function sessionCreateErrorResponse(c: Context, error: unknown): Response;
28
+ export declare function parseSessionEventAdmission(raw: unknown): ClientSessionEvent;
29
+ export declare function parseSteerSessionAdmission(raw: unknown): SteerSessionMessageRequest;
15
30
  export {};
@@ -0,0 +1,6 @@
1
+ import { type ApiRouteDeps, type GitHubSkillSourceClient } from "@opengeni/core";
2
+ import type { Hono } from "hono";
3
+ export type SkillRouteOverrides = Readonly<{
4
+ github?: GitHubSkillSourceClient;
5
+ }>;
6
+ export declare function registerSkillRoutes(app: Hono, deps: ApiRouteDeps, overrides?: SkillRouteOverrides): void;
@@ -0,0 +1,3 @@
1
+ import { type ApiRouteDeps } from "@opengeni/core";
2
+ import type { Hono } from "hono";
3
+ export declare function registerVideoGenerationRoutes(app: Hono, deps: ApiRouteDeps): void;
@@ -4,6 +4,8 @@ import { type ResponderConnection } from "@opengeni/events";
4
4
  import type { Observability } from "@opengeni/observability";
5
5
  /** The NATS subject nats-server publishes authorization requests on (ADR-26). */
6
6
  export declare const AUTH_CALLOUT_SUBJECT = "$SYS.REQ.USER.AUTH";
7
+ /** Keep live NATS credentials short-lived while never outliving the bearer. */
8
+ export declare const NATS_USER_JWT_TTL_SECONDS: number;
7
9
  export interface AuthCalloutDeps {
8
10
  db: Database;
9
11
  settings: Settings;
@@ -3,27 +3,73 @@ import type { Session } from "@opengeni/contracts";
3
3
  import { type Database, type LeaseSnapshot } from "@opengeni/db";
4
4
  import { type EventBus } from "@opengeni/events";
5
5
  import { type Observability } from "@opengeni/observability";
6
- import { SandboxChannelAService, type RoutingSandboxSession } from "@opengeni/runtime/sandbox";
6
+ import { SandboxChannelAService, type ChannelASession, type EstablishedSandboxSession, type RoutingSandboxSession } from "@opengeni/runtime/sandbox";
7
7
  export type ChannelAServices = {
8
8
  db: Database;
9
9
  settings: Settings;
10
10
  bus: EventBus;
11
11
  observability?: Observability | undefined;
12
12
  };
13
+ export type ChannelAOperation = "fs.list" | "fs.list-batch" | "fs.read" | "fs.write" | "fs.delete" | "fs.move" | "fs.mkdir" | "git.status" | "git.diff" | "git.read-batch" | "git.log" | "git.show" | "terminal.exec" | "terminal.pty.open" | "terminal.pty.write" | "terminal.pty.resize" | "terminal.pty.close" | "browser.create" | "browser.resume" | "browser.suspend" | "browser.end" | "browser.read" | "browser.control" | "browser.attach" | "computer.create" | "computer.end" | "computer.read" | "computer.control" | "computer.attach";
13
14
  export type ChannelAContext = {
14
15
  accountId: string;
15
16
  workspaceId: string;
16
17
  session: Session;
17
18
  subjectId: string;
19
+ /** Cancel lifecycle waiting when the originating HTTP request disconnects. */
20
+ waitSignal?: AbortSignal | undefined;
21
+ /** Bounded route identity for metrics and safe operator diagnostics. */
22
+ operation?: ChannelAOperation | undefined;
23
+ };
24
+ export type ChannelAOperationFailureReason = "request_cancelled" | "provider_read_busy" | "provider_unavailable" | "lifecycle_conflict" | "request_rejected" | "unexpected";
25
+ export type ChannelAOperationFailureDiagnostic = {
26
+ reason: ChannelAOperationFailureReason;
27
+ status: number;
28
+ errorCode: "sandbox_channel_a_cancelled" | "sandbox_channel_a_provider_busy" | "sandbox_channel_a_provider_unavailable" | "sandbox_channel_a_lifecycle_conflict" | "sandbox_channel_a_operation_failed";
18
29
  };
19
30
  export type ChannelAHandle = {
20
31
  service: SandboxChannelAService;
21
32
  /** Connected Machine homes deliberately have no cloud lease. Durable PTYs
22
33
  * require a real home-provider lease and reject this null case. */
23
34
  lease: LeaseSnapshot | null;
35
+ /** Exact placement-home session established under this request's lease or
36
+ * Connected Machine fence. Unlike routingSession, this never follows a later
37
+ * active-sandbox pointer and is safe for placement-bound controllers. */
38
+ homeSession: ChannelASession;
24
39
  routingSession: RoutingSandboxSession;
25
40
  requestId: string;
26
41
  };
42
+ export type EstablishedHandleCacheKind = "read" | "process" | "none";
43
+ export declare function isChannelAHandleCacheEntryFresh(lastUsedAtMonotonicMs: number, nowMonotonicMs: number, idleTtlMs?: number): boolean;
44
+ export declare function isChannelAProcessHandleCacheEntryFresh(lastUsedAtMonotonicMs: number, nowMonotonicMs: number, idleTtlMs?: number): boolean;
45
+ /** Reuse the exact lease-fenced provider handle across API-direct surfaces.
46
+ * Stream capability negotiation and the first Files/Changes reads commonly run
47
+ * back-to-back; sharing this handle avoids paying the same Modal resume twice. */
48
+ export declare function establishCachedChannelAHandle(workspaceId: string, sessionId: string, lease: LeaseSnapshot, establish: () => Promise<EstablishedSandboxSession>): Promise<EstablishedSandboxSession>;
49
+ /**
50
+ * Run independent, side-effect-free Channel-A reads concurrently without
51
+ * releasing the direct-request holder while sibling provider commands are
52
+ * still settling. A typed temporary-unavailable failure is retried exactly
53
+ * once after every first attempt has settled; validation, conflict, not-found,
54
+ * and unknown failures are never replayed.
55
+ */
56
+ export declare function runConcurrentChannelAReads<T>(operations: readonly (() => Promise<T>)[]): Promise<T[]>;
57
+ type ChannelAReadRecoveryOptions = {
58
+ /** Modal may expose one more stale command-router route after the first
59
+ * successful handle rebuild. Keep this closed and statically bounded. */
60
+ maxFreshHandleRetries?: 1 | 2;
61
+ /** Never start another provider attempt after the originating request ends. */
62
+ waitSignal?: AbortSignal | undefined;
63
+ };
64
+ /** Retry a side-effect-free Channel-A read only after the caller has discarded
65
+ * and freshly re-established its provider handle. The ordinary provider-neutral
66
+ * contract allows one retry; Modal opts into one additional rebuild because a
67
+ * command-router rollover can outlive the first replacement handle. Provider
68
+ * commands are never replayed for validation/conflict/unknown errors, mutation
69
+ * routes never call this helper, and request cancellation stops recovery before
70
+ * another provider command begins. */
71
+ export declare function runChannelAReadWithFreshHandleRetry<T>(run: () => Promise<T>, refreshHandle: (attempt: 1 | 2) => Promise<void>, options?: ChannelAReadRecoveryOptions): Promise<T>;
72
+ export declare function shouldEvictChannelAHandleAfterError(error: unknown, cacheKind: EstablishedHandleCacheKind): boolean;
27
73
  /**
28
74
  * Run a Channel-A op against a live box, API-direct. Acquires an exact direct holder
29
75
  * (warming the box when cold), resumes by id, builds the service, runs `fn`, and
@@ -34,6 +80,17 @@ export type ChannelAHandle = {
34
80
  * otherwise). A `backend:none` session has no box -> 409 before touching it.
35
81
  */
36
82
  export declare function withChannelA<T>(services: ChannelAServices, ctx: ChannelAContext, fn: (handle: ChannelAHandle) => Promise<T>): Promise<T>;
83
+ /** Read-only API-direct seam. Separate requests for the same exact live Modal
84
+ * instance are serialized across API replicas; each request's batched reads
85
+ * remain concurrent behind that one distributed boundary. A typed temporary
86
+ * provider-channel failure gets one retry only after rebuilding the exact
87
+ * lease-fenced handle. */
88
+ export declare function withChannelARead<T>(services: ChannelAServices, ctx: ChannelAContext, fn: (handle: ChannelAHandle) => Promise<T>): Promise<T>;
37
89
  /** Map the service's typed errors to HTTP status (the §5.3 matrix). Re-throws an
38
90
  * already-HTTPException unchanged. */
39
- export declare function mapChannelAError(error: unknown): unknown;
91
+ export declare function mapChannelAError(error: unknown, waitSignal?: AbortSignal): unknown;
92
+ export declare function isChannelARequestCancellation(error: unknown, waitSignal?: AbortSignal): boolean;
93
+ /** Structural classification only: exact provider exception text, codes, URLs,
94
+ * and identifiers never cross the telemetry boundary. */
95
+ export declare function channelAOperationFailureDiagnostic(error: unknown, waitSignal?: AbortSignal): ChannelAOperationFailureDiagnostic;
96
+ export {};
@@ -1,7 +1,8 @@
1
1
  import { type Database, type MachineMetricsSample } from "@opengeni/db";
2
+ import { type AttachedBrowserInventorySnapshot as AttachedBrowserInventoryContractValue } from "@opengeni/contracts";
2
3
  import { type EventBus } from "@opengeni/events";
3
4
  import type { Observability } from "@opengeni/observability";
4
- import { Hello, type MetricsSample } from "@opengeni/agent-proto";
5
+ import { Hello, type AttachedBrowserInventorySnapshot as WireAttachedBrowserInventorySnapshot, type MetricsSample } from "@opengeni/agent-proto";
5
6
  /** The wildcard subject the agent event plane publishes heartbeats on. */
6
7
  export declare const AGENT_EVENTS_SUBJECT = "agent.*.*.events";
7
8
  /** The wildcard subject the agent publishes its connect Hello on. */
@@ -27,6 +28,10 @@ export declare function parseAgentHelloSubject(subject: string): {
27
28
  * GPU plane; cpu/mem/disk 0 is a legitimate reading the dashboard shows as 0).
28
29
  */
29
30
  export declare function wireSampleToDbSample(wire: MetricsSample): MachineMetricsSample;
31
+ /** Validate and project one wire inventory before it reaches durable browser
32
+ * discovery. Unknown enum values and unsafe uint64 counters reject the whole
33
+ * authoritative snapshot instead of partially disconnecting good endpoints. */
34
+ export declare function wireAttachedBrowserInventoryToContract(wire: WireAttachedBrowserInventorySnapshot): AttachedBrowserInventoryContractValue;
30
35
  /**
31
36
  * Ingest ONE decoded heartbeat for an enrolled machine. Resolves the enrollment's
32
37
  * accountId (needed for the RLS-scoped writes) from the enrollment row; an
@@ -65,6 +65,8 @@ export declare function attachViewer(services: ViewerServices, input: {
65
65
  workspaceId: string;
66
66
  session: Session;
67
67
  viewerId?: string;
68
+ /** Cancel lifecycle waiting when the originating HTTP request disconnects. */
69
+ waitSignal?: AbortSignal;
68
70
  }): Promise<ViewerAttachResult>;
69
71
  export type SessionGroupReadinessHold = {
70
72
  lease: LeaseSnapshot;
@@ -149,7 +151,7 @@ export type MintDesktopStreamInput = {
149
151
  session: Session;
150
152
  /** The viewer holder id the scoped token is minted for. */
151
153
  viewerId: string;
152
- /** The live lease (must be warm/draining — the box is up). A selfhosted-active
154
+ /** The live lease (must be holder-confirmed warm). A selfhosted-active
153
155
  * session may have no Modal group lease; omit and the selfhosted branch handles it. */
154
156
  lease?: LeaseSnapshot;
155
157
  /** The epoch the CALLER last observed the URL minted under. When the live
@@ -196,7 +198,7 @@ export type MintTerminalStreamInput = {
196
198
  session: Session;
197
199
  /** The viewer holder / principal id the scoped token is minted for. */
198
200
  viewerId: string;
199
- /** The live lease (must be warm/draining — the box is up). A selfhosted-active
201
+ /** The live lease (must be holder-confirmed warm). A selfhosted-active
200
202
  * session may have no Modal group lease; omit and the selfhosted branch handles it. */
201
203
  lease?: LeaseSnapshot;
202
204
  /** Test seam: override how the box is re-established by id (see
@@ -0,0 +1,26 @@
1
+ import { type Database, type TemporalScheduleCleanupClaim } from "@opengeni/db";
2
+ import type { Observability } from "@opengeni/observability";
3
+ type TemporalScheduleCleanupDependencies = {
4
+ db: Database;
5
+ deleteSchedule: (temporalScheduleId: string) => Promise<void>;
6
+ observability?: Pick<Observability, "info" | "warn" | "error">;
7
+ };
8
+ export type TemporalScheduleCleanupBatchResult = {
9
+ claimed: number;
10
+ deleted: number;
11
+ failed: number;
12
+ stale: number;
13
+ };
14
+ /** Settle exact claims concurrently; every external delete is idempotent. */
15
+ export declare function processTemporalScheduleCleanupClaims(deps: TemporalScheduleCleanupDependencies, claims: readonly TemporalScheduleCleanupClaim[]): Promise<TemporalScheduleCleanupBatchResult>;
16
+ /** Claim and process one globally bounded batch. */
17
+ export declare function drainTemporalScheduleCleanupOutbox(deps: TemporalScheduleCleanupDependencies): Promise<TemporalScheduleCleanupBatchResult>;
18
+ /**
19
+ * Start one non-overlapping reconciliation loop. PostgreSQL claims coordinate
20
+ * replicas; an API crash merely delays the exact row until its short claim
21
+ * expires.
22
+ */
23
+ export declare function startTemporalScheduleCleanupPump(deps: TemporalScheduleCleanupDependencies, options?: {
24
+ intervalMs?: number;
25
+ }): () => Promise<void>;
26
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeni/api-router",
3
- "version": "0.22.2",
3
+ "version": "0.26.1",
4
4
  "description": "OpenGeni HTTP surface: the Hono adapter/router (createApp), routes, MCP HTTP transport, and HTTP access adapters over @opengeni/core. An engine-distribution surface — its runtime closure includes engine-internal packages.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -41,25 +41,30 @@
41
41
  "@aws-sdk/client-s3": "^3.1044.0",
42
42
  "@aws-sdk/s3-request-presigner": "^3.1044.0",
43
43
  "@hono/zod-validator": "^0.7.6",
44
+ "@llamaindex/liteparse": "^1.5.3",
44
45
  "@modelcontextprotocol/sdk": "^1.29.0",
45
- "@opengeni/agent-proto": "^0.3.0",
46
- "@opengeni/codex": "^0.2.11",
47
- "@opengeni/config": "^0.11.0",
48
- "@opengeni/contracts": "^0.39.0",
49
- "@opengeni/core": "^0.21.2",
50
- "@opengeni/db": "^0.28.1",
51
- "@opengeni/documents": "^0.5.10",
52
- "@opengeni/events": "^0.3.80",
53
- "@opengeni/github": "^0.4.31",
54
- "@opengeni/network": "^0.2.0",
55
- "@opengeni/observability": "^0.5.0",
56
- "@opengeni/runtime": "^0.18.17",
57
- "@opengeni/storage": "^0.2.68",
46
+ "@opengeni/agent-proto": "^0.4.0",
47
+ "@opengeni/artifact-tool": "^0.2.2",
48
+ "@opengeni/capabilities": "^0.1.1",
49
+ "@opengeni/codemode": "^0.2.2",
50
+ "@opengeni/codex": "^0.2.15",
51
+ "@opengeni/config": "^0.13.2",
52
+ "@opengeni/contracts": "^0.44.1",
53
+ "@opengeni/core": "^0.24.1",
54
+ "@opengeni/db": "^0.31.1",
55
+ "@opengeni/documents": "^0.5.32",
56
+ "@opengeni/events": "^0.3.103",
57
+ "@opengeni/github": "^0.4.50",
58
+ "@opengeni/network": "^0.2.2",
59
+ "@opengeni/observability": "^0.6.2",
60
+ "@opengeni/runtime": "^0.19.2",
61
+ "@opengeni/storage": "^0.2.87",
58
62
  "@temporalio/client": "^1.17.0",
59
63
  "better-auth": "^1.6.14",
60
64
  "hono": "^4.12.18",
61
65
  "pg": "^8.21.0",
62
66
  "resend": "^6.12.4",
67
+ "sharp": "^0.34.5",
63
68
  "stripe": "^22.2.0",
64
69
  "zod": "^4.2.1"
65
70
  },