@essentialai/cogent-server 3.4.3 → 3.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.
@@ -23,13 +23,15 @@ export declare function clientIp(c: {
23
23
  *
24
24
  * POST / -> Create a new session (maps to /api/sessions via app.route)
25
25
  * POST /:sessionId/join -> Join an existing session
26
+ * GET /resolve/:label -> Resolve a PUBLIC label to its session UUID
27
+ * POST /resolve -> Resolve a label to its session UUID (Org_ID-scoped for business)
26
28
  *
27
29
  * Both endpoints are unauthenticated (they issue tokens, not consume them).
28
30
  *
29
31
  * @param multiTenant When true, Org_ID (the 3rd join credential) is enforced
30
32
  * for channels created with one. When false (free relay),
31
33
  * Org_ID is ignored entirely and behavior is unchanged.
32
- * @param rateLimiter Throttles repeated failed joins (brute-force lockout).
34
+ * @param rateLimiter Throttles repeated failed joins and resolves (brute-force lockout).
33
35
  */
34
36
  export declare function createSessionRoutes(sessionStore: SessionStore, authService: AuthService, multiTenant: boolean, rateLimiter: JoinRateLimiter): Hono<ServerEnv>;
35
37
  //# sourceMappingURL=sessions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAW5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,aAAa,CAAC;AAIzD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE;IAAE,GAAG,EAAE;QAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAS7F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,OAAO,EACpB,WAAW,EAAE,eAAe,GAC3B,IAAI,CAAC,SAAS,CAAC,CAwNjB"}
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAY5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,aAAa,CAAC;AAIzD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE;IAAE,GAAG,EAAE;QAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAS7F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,OAAO,EACpB,WAAW,EAAE,eAAe,GAC3B,IAAI,CAAC,SAAS,CAAC,CAmQjB"}
@@ -1,6 +1,6 @@
1
1
  import { Hono } from "hono";
2
2
  import { zValidator } from "@hono/zod-validator";
3
- import { BridgeError, ErrorCode, CreateSessionRequestSchema, JoinSessionRequestSchema, generateSessionId, generateSessionLabel, isValidSessionLabel, } from "@essentialai/cogent";
3
+ import { BridgeError, ErrorCode, CreateSessionRequestSchema, JoinSessionRequestSchema, ResolveSessionRequestSchema, generateSessionId, generateSessionLabel, isValidSessionLabel, } from "@essentialai/cogent";
4
4
  import { JoinRateLimiter } from "../services/join-rate-limiter.js";
5
5
  import { validationHook, honoSchema } from "./validation-hook.js";
6
6
  import { logOrgEvent } from "../services/obs-log.js";
@@ -31,13 +31,15 @@ export function clientIp(c) {
31
31
  *
32
32
  * POST / -> Create a new session (maps to /api/sessions via app.route)
33
33
  * POST /:sessionId/join -> Join an existing session
34
+ * GET /resolve/:label -> Resolve a PUBLIC label to its session UUID
35
+ * POST /resolve -> Resolve a label to its session UUID (Org_ID-scoped for business)
34
36
  *
35
37
  * Both endpoints are unauthenticated (they issue tokens, not consume them).
36
38
  *
37
39
  * @param multiTenant When true, Org_ID (the 3rd join credential) is enforced
38
40
  * for channels created with one. When false (free relay),
39
41
  * Org_ID is ignored entirely and behavior is unchanged.
40
- * @param rateLimiter Throttles repeated failed joins (brute-force lockout).
42
+ * @param rateLimiter Throttles repeated failed joins and resolves (brute-force lockout).
41
43
  */
42
44
  export function createSessionRoutes(sessionStore, authService, multiTenant, rateLimiter) {
43
45
  const sessions = new Hono();
@@ -118,6 +120,39 @@ export function createSessionRoutes(sessionStore, authService, multiTenant, rate
118
120
  }
119
121
  return c.json({ sessionId, label });
120
122
  });
123
+ /**
124
+ * POST /resolve - Org_ID-scoped label → session UUID lookup.
125
+ *
126
+ * The public GET /resolve resolves the public scope only. Business channels'
127
+ * labels live under their org scope and are deliberately invisible there. With
128
+ * the Org_ID supplied here we compute the scope and look up the business label;
129
+ * without it, this resolves the public scope (free channels). The returned
130
+ * sessionId is useless without the channel secret (join still verifies it), so
131
+ * this leaks nothing actionable. A wrong/absent Org_ID yields the SAME generic
132
+ * 404 as a non-existent label (enumeration-safe). The Org_ID is never logged.
133
+ */
134
+ sessions.post("/resolve", zValidator("json", honoSchema(ResolveSessionRequestSchema), validationHook), async (c) => {
135
+ const { label, orgId } = c.req.valid("json");
136
+ const orgScope = orgId ? authService.hashToken(orgId) : undefined;
137
+ // Brute-force throttle (Business control; free relay path is unchanged).
138
+ // Key on the ORG SCOPE + label so one org's failed resolves can never lock
139
+ // out another org that happens to use the same channel name (per-org
140
+ // isolation, FR6). Free/public lookups (no Org_ID) share the public bucket.
141
+ const rlKey = `resolve:${orgScope ?? "public"}:${label}`;
142
+ const sourceKey = JoinRateLimiter.sourceKey(clientIp(c), rlKey);
143
+ const channelKey = JoinRateLimiter.channelKey(rlKey);
144
+ if (multiTenant)
145
+ rateLimiter.check(sourceKey, channelKey);
146
+ const sessionId = sessionStore.getSessionIdByLabel(label, orgScope);
147
+ if (!sessionId) {
148
+ if (multiTenant)
149
+ rateLimiter.recordFailure(sourceKey, channelKey);
150
+ throw new BridgeError(ErrorCode.SESSION_NOT_FOUND, `No session with label "${label}"`, "Check the channel name and Org_ID");
151
+ }
152
+ if (multiTenant)
153
+ rateLimiter.recordSuccess(sourceKey);
154
+ return c.json({ sessionId, label });
155
+ });
121
156
  /**
122
157
  * POST /:sessionId/join - Join an existing session.
123
158
  *
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EACL,WAAW,EACX,SAAS,EACT,0BAA0B,EAC1B,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,CAA4D;IACnF,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC5C,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAA0B,EAC1B,WAAwB,EACxB,WAAoB,EACpB,WAA4B;IAE5B,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAa,CAAC;IAEvC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CACX,GAAG,EACH,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,0BAA0B,CAAC,EAAE,cAAc,CAAC,EAC1E,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAErD,6BAA6B;QAC7B,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QAEtC,yEAAyE;QACzE,qEAAqE;QACrE,0EAA0E;QAC1E,uEAAuE;QACvE,MAAM,GAAG,GACP,WAAW,IAAI,KAAK;YAClB,CAAC,CAAC;gBACE,MAAM,EAAE,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC3C,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;aACpC;YACH,CAAC,CAAC,SAAS,CAAC;QAEhB,gFAAgF;QAChF,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;gBACzC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;oBACtD,YAAY,GAAG,SAAS,CAAC;oBACzB,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY;gBAAE,YAAY,GAAG,oBAAoB,EAAE,CAAC,CAAC,kCAAkC;QAC9F,CAAC;QAED,6CAA6C;QAC7C,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAExD,2DAA2D;QAC3D,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC;QAEzD,gCAAgC;QAChC,MAAM,UAAU,GAAe;YAC7B,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,kEAAkE;QAClE,MAAM,SAAS,GACb,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YACrD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;YACzB,SAAS,CAAC;QAEZ,sBAAsB;QACtB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,aAAa,CAC9C,SAAS,EACT,YAAY,EACZ,UAAU,EACV,UAAU,EACV,SAAS,EACT,GAAG,CACJ,CAAC;QAEF,OAAO,CAAC,CAAC,IAAI,CACX;YACE,SAAS;YACT,KAAK;YACL,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,EACD,GAAG,CACJ,CAAC;IACJ,CAAC,CACF,CAAC;IAEF;;;;;;;;;OASG;IACH,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,6FAA6F,EAAE,EACxG,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,MAAM,SAAS,GAAG,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,WAAW,CACnB,SAAS,CAAC,iBAAiB,EAC3B,0BAA0B,KAAK,GAAG,EAClC,4CAA4C,CAC7C,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CACX,kBAAkB,EAClB,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,wBAAwB,CAAC,EAAE,cAAc,CAAC,EACxE,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE9C,qEAAqE;QACrE,qEAAqE;QACrE,yEAAyE;QACzE,yEAAyE;QACzE,uEAAuE;QACvE,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,WAAW;YAAE,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAE1D,sBAAsB;QACtB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CACnB,SAAS,CAAC,iBAAiB,EAC3B,WAAW,SAAS,YAAY,EAChC,8CAA8C,CAC/C,CAAC;QACJ,CAAC;QAED,uEAAuE;QACvE,0EAA0E;QAC1E,2EAA2E;QAC3E,uEAAuE;QACvE,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;QAEnD,sEAAsE;QACtE,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,uEAAuE;QACvE,qCAAqC;QACrC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,UAAU;YACtB,CAAC,CAAC,MAAM,WAAW,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,SAAmB,CAAC;YAC1E,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,OAAO,GAAG,QAAQ,IAAI,KAAK,CAAC;QAElC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,WAAW;gBAAE,WAAW,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAClE,wEAAwE;YACxE,yEAAyE;YACzE,qEAAqE;YACrE,WAAW,CAAC;gBACV,KAAK,EAAE,cAAc;gBACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;gBAClC,SAAS;gBACT,OAAO,EAAE,qBAAqB;gBAC9B,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE;aACtC,CAAC,CAAC;YACH,yEAAyE;YACzE,yEAAyE;YACzE,MAAM,UAAU;gBACd,CAAC,CAAC,IAAI,WAAW,CACb,SAAS,CAAC,kBAAkB,EAC5B,qBAAqB,EACrB,sCAAsC,CACvC;gBACH,CAAC,CAAC,IAAI,WAAW,CACb,SAAS,CAAC,kBAAkB,EAC5B,wBAAwB,EACxB,iEAAiE,CAClE,CAAC;QACR,CAAC;QAED,wEAAwE;QACxE,IAAI,WAAW;YAAE,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEtD,sDAAsD;QACtD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC;QACzD,MAAM,UAAU,GAAe;YAC7B,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,+BAA+B;QAC/B,MAAM,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAEnD,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,SAAS;YACT,KAAK;YACL,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC1B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM;SAC7C,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAInC,sCAAsC;AACtC,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,CAAC;CACf;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CAsBlC,CAAC"}
1
+ {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAInC,sCAAsC;AACtC,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,CAAC;CACf;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CAwBlC,CAAC"}
@@ -5,7 +5,7 @@ import { globalStyles } from "../styles/theme.js";
5
5
  * Base HTML shell with head, meta tags, Google Fonts, and global styles.
6
6
  * Wraps every page with consistent document structure.
7
7
  */
8
- export const Layout = ({ title, children }) => (_jsxs("html", { lang: "en", children: [_jsxs("head", { children: [_jsx("meta", { charset: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }), _jsxs("title", { children: [title, " | COGENT"] }), _jsx(Style, {}), _jsx("link", { rel: "stylesheet", href: "https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap" }), _jsx("link", { rel: "icon", href: "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><rect width='16' height='16' rx='2' fill='%230d1117'/><path d='M12 3H5a2 2 0 00-2 2v6a2 2 0 002 2h7v-2H5V5h7V3z' fill='%2300ff41'/></svg>" }), _jsx("script", { async: true, src: "https://www.googletagmanager.com/gtag/js?id=G-6DKTK06CZT" }), _jsx("script", { dangerouslySetInnerHTML: {
8
+ export const Layout = ({ title, children }) => (_jsxs("html", { lang: "en", children: [_jsxs("head", { children: [_jsx("meta", { charset: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }), _jsxs("title", { children: [title, " \u00B7 Cogent"] }), _jsx(Style, {}), _jsx("link", { rel: "preconnect", href: "https://fonts.googleapis.com" }), _jsx("link", { rel: "preconnect", href: "https://fonts.gstatic.com", crossorigin: "" }), _jsx("link", { rel: "stylesheet", href: "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600;9..144,700&family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500;600&display=swap" }), _jsx("link", { rel: "icon", href: "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><rect width='16' height='16' rx='3' fill='%230a0c0f'/><circle cx='8' cy='8' r='3.4' fill='%23c9f24e'/></svg>" }), _jsx("script", { async: true, src: "https://www.googletagmanager.com/gtag/js?id=G-6DKTK06CZT" }), _jsx("script", { dangerouslySetInnerHTML: {
9
9
  __html: `window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','G-6DKTK06CZT');`
10
10
  } })] }), _jsx("body", { class: globalStyles, children: children })] }));
11
11
  //# sourceMappingURL=Layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/ui/components/Layout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAoB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAC9D,gBAAM,IAAI,EAAC,IAAI,aACb,2BACE,eAAM,OAAO,EAAC,OAAO,GAAG,EACxB,eAAM,IAAI,EAAC,UAAU,EAAC,OAAO,EAAC,qCAAqC,GAAG,EACtE,4BAAQ,KAAK,iBAAkB,EAC/B,KAAC,KAAK,KAAG,EACT,eACE,GAAG,EAAC,YAAY,EAChB,IAAI,EAAC,mFAAmF,GACxF,EACF,eACE,GAAG,EAAC,MAAM,EACV,IAAI,EAAC,0NAA0N,GAC/N,EACF,iBAAQ,KAAK,QAAC,GAAG,EAAC,0DAA0D,GAAG,EAC/E,iBAAQ,uBAAuB,EAAE;wBAC/B,MAAM,EAAE,uIAAuI;qBAChJ,GAAI,IACA,EACP,eAAM,KAAK,EAAE,YAAY,YAAG,QAAQ,GAAQ,IACvC,CACR,CAAC"}
1
+ {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/ui/components/Layout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAoB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAC9D,gBAAM,IAAI,EAAC,IAAI,aACb,2BACE,eAAM,OAAO,EAAC,OAAO,GAAG,EACxB,eAAM,IAAI,EAAC,UAAU,EAAC,OAAO,EAAC,qCAAqC,GAAG,EACtE,4BAAQ,KAAK,sBAAkB,EAC/B,KAAC,KAAK,KAAG,EACT,eAAM,GAAG,EAAC,YAAY,EAAC,IAAI,EAAC,8BAA8B,GAAG,EAC7D,eAAM,GAAG,EAAC,YAAY,EAAC,IAAI,EAAC,2BAA2B,EAAC,WAAW,EAAC,EAAE,GAAG,EACzE,eACE,GAAG,EAAC,YAAY,EAChB,IAAI,EAAC,gLAAgL,GACrL,EACF,eACE,GAAG,EAAC,MAAM,EACV,IAAI,EAAC,6LAA6L,GAClM,EACF,iBAAQ,KAAK,QAAC,GAAG,EAAC,0DAA0D,GAAG,EAC/E,iBAAQ,uBAAuB,EAAE;wBAC/B,MAAM,EAAE,uIAAuI;qBAChJ,GAAI,IACA,EACP,eAAM,KAAK,EAAE,YAAY,YAAG,QAAQ,GAAQ,IACvC,CACR,CAAC"}
@@ -33,5 +33,5 @@ const contentArea = css `
33
33
  * Terminal-styled container with optional header bar (colored dots + title)
34
34
  * and padded content area. Used to wrap code blocks and guide sections.
35
35
  */
36
- export const Terminal = ({ title, children }) => (_jsxs("div", { class: terminalWrapper, children: [title && (_jsxs("div", { class: headerBar, children: [_jsx("span", { class: dot, style: "background: #f85149;" }), _jsx("span", { class: dot, style: "background: #e3b341;" }), _jsx("span", { class: dot, style: "background: #00ff41;" }), _jsx("span", { class: titleText, children: title })] })), _jsx("div", { class: contentArea, children: children })] }));
36
+ export const Terminal = ({ title, children }) => (_jsxs("div", { class: terminalWrapper, children: [title && (_jsxs("div", { class: headerBar, children: [_jsx("span", { class: dot, style: `background: ${colors.red};` }), _jsx("span", { class: dot, style: `background: ${colors.amber};` }), _jsx("span", { class: dot, style: `background: ${colors.green};` }), _jsx("span", { class: titleText, children: title })] })), _jsx("div", { class: contentArea, children: children })] }));
37
37
  //# sourceMappingURL=Terminal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Terminal.js","sourceRoot":"","sources":["../../../src/ui/components/Terminal.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,eAAe,GAA2B,GAAG,CAAA;gBACnC,MAAM,CAAC,UAAU;sBACX,MAAM,CAAC,MAAM;;;CAGlC,CAAC;AAEF,MAAM,SAAS,GAA2B,GAAG,CAAA;;;6BAGhB,MAAM,CAAC,MAAM;;;;CAIzC,CAAC;AAEF,MAAM,GAAG,GAA2B,GAAG,CAAA;;;;;CAKtC,CAAC;AAEF,MAAM,SAAS,GAA2B,GAAG,CAAA;WAClC,MAAM,CAAC,SAAS;;;CAG1B,CAAC;AAEF,MAAM,WAAW,GAA2B,GAAG,CAAA;;CAE9C,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAsB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAClE,eAAK,KAAK,EAAE,eAAe,aACxB,KAAK,IAAI,CACR,eAAK,KAAK,EAAE,SAAS,aACnB,eAAM,KAAK,EAAE,GAAG,EAAE,KAAK,EAAC,sBAAsB,GAAG,EACjD,eAAM,KAAK,EAAE,GAAG,EAAE,KAAK,EAAC,sBAAsB,GAAG,EACjD,eAAM,KAAK,EAAE,GAAG,EAAE,KAAK,EAAC,sBAAsB,GAAG,EACjD,eAAM,KAAK,EAAE,SAAS,YAAG,KAAK,GAAQ,IAClC,CACP,EACD,cAAK,KAAK,EAAE,WAAW,YAAG,QAAQ,GAAO,IACrC,CACP,CAAC"}
1
+ {"version":3,"file":"Terminal.js","sourceRoot":"","sources":["../../../src/ui/components/Terminal.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,eAAe,GAA2B,GAAG,CAAA;gBACnC,MAAM,CAAC,UAAU;sBACX,MAAM,CAAC,MAAM;;;CAGlC,CAAC;AAEF,MAAM,SAAS,GAA2B,GAAG,CAAA;;;6BAGhB,MAAM,CAAC,MAAM;;;;CAIzC,CAAC;AAEF,MAAM,GAAG,GAA2B,GAAG,CAAA;;;;;CAKtC,CAAC;AAEF,MAAM,SAAS,GAA2B,GAAG,CAAA;WAClC,MAAM,CAAC,SAAS;;;CAG1B,CAAC;AAEF,MAAM,WAAW,GAA2B,GAAG,CAAA;;CAE9C,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAsB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAClE,eAAK,KAAK,EAAE,eAAe,aACxB,KAAK,IAAI,CACR,eAAK,KAAK,EAAE,SAAS,aACnB,eAAM,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,MAAM,CAAC,GAAG,GAAG,GAAI,EACzD,eAAM,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,MAAM,CAAC,KAAK,GAAG,GAAI,EAC3D,eAAM,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,MAAM,CAAC,KAAK,GAAG,GAAI,EAC3D,eAAM,KAAK,EAAE,SAAS,YAAG,KAAK,GAAQ,IAClC,CACP,EACD,cAAK,KAAK,EAAE,WAAW,YAAG,QAAQ,GAAO,IACrC,CACP,CAAC"}
@@ -5,8 +5,8 @@ interface LandingPageProps {
5
5
  stats: ServerStats;
6
6
  }
7
7
  /**
8
- * Full landing page with hero, live stats, installation instructions,
9
- * connection guide, and SSE script for real-time stat updates.
8
+ * Full landing page with editorial hero + CTA, live stats, installation
9
+ * instructions, connection guide, and SSE script for real-time stat updates.
10
10
  */
11
11
  export declare const LandingPage: FC<LandingPageProps>;
12
12
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"LandingPage.d.ts","sourceRoot":"","sources":["../../../src/ui/pages/LandingPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAMnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEnE,2CAA2C;AAC3C,UAAU,gBAAgB;IACxB,KAAK,EAAE,WAAW,CAAC;CACpB;AAsMD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAsQ5C,CAAC"}
1
+ {"version":3,"file":"LandingPage.d.ts","sourceRoot":"","sources":["../../../src/ui/pages/LandingPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAMnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEnE,2CAA2C;AAC3C,UAAU,gBAAgB;IACxB,KAAK,EAAE,WAAW,CAAC;CACpB;AAmPD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAyP5C,CAAC"}
@@ -3,7 +3,7 @@ import { css } from "hono/css";
3
3
  import { Layout } from "../components/Layout.js";
4
4
  import { StatCard } from "../components/StatCard.js";
5
5
  import { Terminal } from "../components/Terminal.js";
6
- import { colors, cursorBlink } from "../styles/theme.js";
6
+ import { colors } from "../styles/theme.js";
7
7
  // --- Styles ---
8
8
  const container = css `
9
9
  max-width: 960px;
@@ -12,67 +12,119 @@ const container = css `
12
12
  `;
13
13
  const heroSection = css `
14
14
  text-align: center;
15
- padding: 3rem 0 2rem;
16
- `;
17
- const heroTitle = css `
18
- font-size: 2.5rem;
19
- font-weight: 700;
15
+ padding: 4rem 0 2.5rem;
16
+ background: radial-gradient(ellipse 60% 60% at 50% 0%, ${colors.accentSoft}, transparent 70%);
17
+ `;
18
+ const kicker = css `
19
+ font-family: ${"'Geist Mono', ui-monospace, monospace"};
20
+ font-size: 0.72rem;
21
+ letter-spacing: 0.18em;
22
+ text-transform: uppercase;
20
23
  color: ${colors.green};
21
- margin: 0 0 0.75rem 0;
24
+ margin: 0 0 1.1rem 0;
22
25
  `;
23
- const asciiLogo = css `
24
- font-size: 0.45rem;
25
- line-height: 1.15;
26
- margin: 0;
27
- color: ${colors.green};
28
- font-family: inherit;
29
- display: inline-block;
30
- text-align: left;
26
+ const heroTitle = css `
27
+ font-size: clamp(2.3rem, 5.2vw, 3.6rem);
28
+ color: ${colors.text};
29
+ margin: 0 auto 1rem;
30
+ max-width: 18ch;
31
31
  `;
32
32
  const heroSubtitle = css `
33
- font-size: 1rem;
33
+ font-size: 1.05rem;
34
34
  color: ${colors.textMuted};
35
- margin: 0;
35
+ margin: 0 auto;
36
+ max-width: 46ch;
37
+ line-height: 1.6;
36
38
  `;
37
- const cursor = css `
38
- display: inline-block;
39
- width: 3px;
40
- height: 2.85rem;
39
+ const ctaRow = css `
40
+ display: flex;
41
+ gap: 0.85rem;
42
+ flex-wrap: wrap;
43
+ justify-content: center;
44
+ margin: 2.2rem 0 1.1rem;
45
+ `;
46
+ const ctaPrimary = css `
47
+ display: inline-flex;
48
+ align-items: center;
41
49
  background: ${colors.green};
42
- margin-left: 4px;
43
- vertical-align: bottom;
44
- animation: ${cursorBlink} 1s step-end infinite;
50
+ color: ${colors.textOnAccent};
51
+ font-weight: 600;
52
+ font-size: 0.95rem;
53
+ padding: 0.8rem 1.6rem;
54
+ border-radius: 999px;
55
+ box-shadow: 0 0 0 1px ${colors.borderGlow}, 0 10px 44px -14px rgba(201, 242, 78, 0.28);
56
+ transition: background 0.2s, transform 0.2s;
57
+ &:hover {
58
+ background: ${colors.greenHover};
59
+ text-decoration: none;
60
+ transform: translateY(-1px);
61
+ }
62
+ `;
63
+ const ctaSecondary = css `
64
+ display: inline-flex;
65
+ align-items: center;
66
+ color: ${colors.text};
67
+ font-weight: 500;
68
+ font-size: 0.95rem;
69
+ padding: 0.8rem 1.5rem;
70
+ border: 1px solid ${colors.border};
71
+ border-radius: 999px;
72
+ transition: border-color 0.2s, color 0.2s;
73
+ &:hover {
74
+ border-color: ${colors.green};
75
+ color: ${colors.text};
76
+ text-decoration: none;
77
+ }
78
+ `;
79
+ const teamUpsell = css `
80
+ margin: 1.4rem 0 0;
81
+ font-size: 0.88rem;
82
+ color: ${colors.textMuted};
83
+ & a {
84
+ color: ${colors.green};
85
+ font-weight: 600;
86
+ }
87
+ `;
88
+ const byline = css `
89
+ margin: 0.6rem 0 0;
90
+ font-size: 0.8rem;
91
+ color: ${colors.textFaint};
92
+ & a {
93
+ color: inherit;
94
+ }
45
95
  `;
46
96
  const statsRow = css `
47
97
  display: flex;
48
98
  gap: 1.5rem;
49
99
  flex-wrap: wrap;
50
100
  justify-content: center;
51
- margin: 2rem 0 3rem;
101
+ margin: 1.5rem 0 3.5rem;
52
102
  `;
53
103
  const section = css `
54
104
  margin-bottom: 2.5rem;
55
105
  `;
56
106
  const sectionTitle = css `
57
- font-size: 1.1rem;
107
+ font-size: 1.4rem;
58
108
  color: ${colors.text};
59
109
  margin: 0 0 1rem 0;
60
- font-weight: 700;
110
+ font-weight: 600;
61
111
  `;
62
112
  const codeBlock = css `
63
113
  background: ${colors.bg};
64
114
  border: 1px solid ${colors.border};
65
- border-radius: 4px;
115
+ border-radius: 8px;
66
116
  padding: 1rem;
67
117
  color: ${colors.green};
68
- font-size: 0.9rem;
118
+ font-family: ${"'Geist Mono', ui-monospace, monospace"};
119
+ font-size: 0.88rem;
69
120
  overflow-x: auto;
70
121
  white-space: pre;
71
122
  margin: 0.75rem 0;
72
123
  `;
73
124
  const noteText = css `
74
125
  color: ${colors.textMuted};
75
- font-size: 0.85rem;
126
+ font-size: 0.9rem;
127
+ line-height: 1.6;
76
128
  margin: 0.75rem 0;
77
129
  `;
78
130
  const stepNumber = css `
@@ -81,6 +133,7 @@ const stepNumber = css `
81
133
  `;
82
134
  const stepCommand = css `
83
135
  color: ${colors.green};
136
+ font-family: ${"'Geist Mono', ui-monospace, monospace"};
84
137
  `;
85
138
  const stepLine = css `
86
139
  margin: 0.75rem 0;
@@ -88,41 +141,43 @@ const stepLine = css `
88
141
  `;
89
142
  const promptChar = css `
90
143
  color: ${colors.textMuted};
144
+ font-family: ${"'Geist Mono', ui-monospace, monospace"};
91
145
  margin-right: 0.5rem;
92
146
  `;
93
147
  const howToLink = css `
94
148
  display: block;
95
149
  background: ${colors.bgCard};
96
150
  border: 1px solid ${colors.border};
97
- border-radius: 8px;
151
+ border-radius: 12px;
98
152
  padding: 1.5rem 2rem;
99
153
  text-align: center;
100
154
  text-decoration: none;
101
155
  transition: border-color 0.2s;
102
- margin-bottom: 2.5rem;
156
+ margin-bottom: 1.25rem;
103
157
  &:hover {
104
158
  border-color: ${colors.green};
105
159
  text-decoration: none;
106
160
  }
107
161
  `;
108
162
  const howToTitle = css `
109
- font-size: 1.1rem;
163
+ font-size: 1.05rem;
110
164
  color: ${colors.green};
111
- font-weight: 700;
165
+ font-weight: 600;
112
166
  margin: 0 0 0.5rem 0;
113
167
  `;
114
168
  const howToDesc = css `
115
- font-size: 0.85rem;
169
+ font-size: 0.88rem;
116
170
  color: ${colors.textMuted};
117
171
  margin: 0;
172
+ line-height: 1.6;
118
173
  `;
119
174
  const footer = css `
120
175
  text-align: center;
121
- padding: 2rem 0;
122
- color: ${colors.textMuted};
123
- font-size: 0.8rem;
176
+ padding: 2.5rem 0 2rem;
177
+ color: ${colors.textFaint};
178
+ font-size: 0.82rem;
124
179
  border-top: 1px solid ${colors.border};
125
- margin-top: 2rem;
180
+ margin-top: 3rem;
126
181
  `;
127
182
  const platformGrid = css `
128
183
  display: grid;
@@ -133,7 +188,7 @@ const platformGrid = css `
133
188
  const platformCard = css `
134
189
  background: ${colors.bgCard};
135
190
  border: 1px solid ${colors.border};
136
- border-radius: 8px;
191
+ border-radius: 12px;
137
192
  padding: 1.25rem 1.5rem;
138
193
  transition: border-color 0.2s;
139
194
  &:hover {
@@ -141,30 +196,17 @@ const platformCard = css `
141
196
  }
142
197
  & h3 {
143
198
  font-size: 1rem;
144
- font-weight: 700;
145
- color: ${colors.green};
199
+ font-weight: 600;
200
+ color: ${colors.text};
146
201
  margin: 0 0 0.5rem 0;
147
- font-family: inherit;
148
202
  }
149
203
  & p {
150
- font-size: 0.85rem;
204
+ font-size: 0.88rem;
151
205
  color: ${colors.textMuted};
152
206
  margin: 0;
153
- line-height: 1.5;
207
+ line-height: 1.55;
154
208
  }
155
209
  `;
156
- // --- JSON config snippet for manual setup ---
157
- const mcpConfigSnippet = `{
158
- "mcpServers": {
159
- "cogent-bridge": {
160
- "command": "npx",
161
- "args": ["-y", "@essentialai/cogent-bridge"],
162
- "env": {
163
- "COGENT_ENDPOINT": "https://cogent.tools"
164
- }
165
- }
166
- }
167
- }`;
168
210
  // --- SSE inline script ---
169
211
  const sseScript = `
170
212
  const es = new EventSource('/ui/stats/stream');
@@ -177,16 +219,11 @@ const sseScript = `
177
219
  });
178
220
  `;
179
221
  /**
180
- * Full landing page with hero, live stats, installation instructions,
181
- * connection guide, and SSE script for real-time stat updates.
222
+ * Full landing page with editorial hero + CTA, live stats, installation
223
+ * instructions, connection guide, and SSE script for real-time stat updates.
182
224
  */
183
- export const LandingPage = ({ stats }) => (_jsx(Layout, { title: "COGENT", children: _jsxs("div", { class: container, children: [_jsxs("div", { class: heroSection, children: [_jsxs("h1", { class: heroTitle, children: [_jsx("pre", { class: asciiLogo, children: ` ██████╗ ██████╗ ██████╗ ███████╗███╗ ██╗████████╗
184
- ██╔════╝██╔═══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝
185
- ██║ ██║ ██║██║ ███╗█████╗ ██╔██╗ ██║ ██║
186
- ██║ ██║ ██║██║ ██║██╔══╝ ██║╚██╗██║ ██║
187
- ╚██████╗╚██████╔╝╚██████╔╝███████╗██║ ╚████║ ██║
188
- ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝` }), _jsx("span", { class: cursor })] }), _jsx("p", { class: heroSubtitle, children: "Real-time relay for AI coding agents \u2014 Claude Code, OpenAI Codex, and Slack" }), _jsxs("p", { class: heroSubtitle, style: "margin-top: 0.5rem; font-size: 0.8rem;", children: ["by ", _jsx("a", { href: "https://essentialai.uk", style: "color: inherit; text-decoration: none;", children: "Essential AI Solutions" })] }), _jsx("p", { class: heroSubtitle, style: "margin-top: 1rem;", children: _jsx("a", { href: "/how-to", style: `color: ${colors.green}; font-weight: 700;`, children: "How-To Guide \u2192" }) })] }), _jsxs("div", { class: statsRow, children: [_jsx(StatCard, { id: "stat-sessions", value: stats.activeSessions, label: "Active Sessions" }), _jsx(StatCard, { id: "stat-agents", value: stats.connectedAgents, label: "Connected Agents" }), _jsx(StatCard, { id: "stat-messages", value: stats.totalMessagesRelayed, label: "Messages Relayed" })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "Install via Plugin Marketplace (Recommended)" }), _jsxs(Terminal, { title: "Two Commands \u2014 Full Setup", children: [_jsx("p", { class: noteText, children: "Install the plugin with slash commands, auto-discovery, and cloud relay:" }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "claude plugin marketplace add https://github.com/eaisdevelopment/cogent.git" })] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "claude plugin install cogent@cogent" })] }), _jsxs("p", { class: noteText, children: ["Restart Claude Code. Use ", _jsx("span", { class: stepCommand, children: "/cogent:register" }), " to join the bridge \u2014 session discovery, registration, and message protocol are handled automatically."] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "Alternative: Manual MCP Setup" }), _jsxs(Terminal, { title: "MCP Tools Only (No Slash Commands)", children: [_jsx("p", { class: noteText, children: "Or use a single command to register the MCP server directly:" }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "claude mcp add cogent -e COGENT_ENDPOINT=https://cogent.tools -s user -- npx -y @essentialai/cogent-bridge" })] }), _jsxs("p", { class: noteText, children: ["This gives you the six ", _jsx("span", { class: stepCommand, children: "cogent_" }), " MCP tools. For slash commands (", _jsx("span", { class: stepCommand, children: "/cogent:register" }), ", etc.), use the Plugin Marketplace above."] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "OpenAI Codex" }), _jsxs(Terminal, { title: "Add COGENT to Codex", children: [_jsx("p", { class: noteText, children: "Register the Cogent MCP server (works on all Codex CLI versions):" }), _jsx("pre", { class: codeBlock, children: `codex mcp add cogent \\
225
+ export const LandingPage = ({ stats }) => (_jsx(Layout, { title: "Real-time relay for AI coding agents", children: _jsxs("div", { class: container, children: [_jsxs("div", { class: heroSection, children: [_jsx("p", { class: kicker, children: "Free \u00B7 Open Relay" }), _jsx("h1", { class: heroTitle, children: "Real-time relay for your AI coding agents" }), _jsx("p", { class: heroSubtitle, children: "Claude Code, OpenAI Codex, and Slack \u2014 one shared channel, instant messages. Free and open-source." }), _jsxs("div", { class: ctaRow, children: [_jsx("a", { href: "#install", class: ctaPrimary, children: "Get started \u2014 free \u2192" }), _jsx("a", { href: "/how-to", class: ctaSecondary, children: "Read the How-To" })] }), _jsxs("p", { class: teamUpsell, children: ["Running a team?", " ", _jsx("a", { href: "https://portal.cogent.tools", children: "Cogent Team" }), " adds organizations, SSO & billing \u2192"] }), _jsxs("p", { class: byline, children: ["by ", _jsx("a", { href: "https://essentialai.uk", children: "Essential AI Solutions" })] })] }), _jsxs("div", { class: statsRow, children: [_jsx(StatCard, { id: "stat-sessions", value: stats.activeSessions, label: "Active Sessions" }), _jsx(StatCard, { id: "stat-agents", value: stats.connectedAgents, label: "Connected Agents" }), _jsx(StatCard, { id: "stat-messages", value: stats.totalMessagesRelayed, label: "Messages Relayed" })] }), _jsxs("div", { class: section, id: "install", children: [_jsx("h2", { class: sectionTitle, children: "Install via Plugin Marketplace (Recommended)" }), _jsxs(Terminal, { title: "Two Commands \u2014 Full Setup", children: [_jsx("p", { class: noteText, children: "Install the plugin with slash commands, auto-discovery, and cloud relay:" }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "claude plugin marketplace add https://github.com/eaisdevelopment/cogent.git" })] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "claude plugin install cogent@cogent" })] }), _jsxs("p", { class: noteText, children: ["Restart Claude Code. Use ", _jsx("span", { class: stepCommand, children: "/cogent:register" }), " to join the bridge \u2014 session discovery, registration, and message protocol are handled automatically."] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "Alternative: Manual MCP Setup" }), _jsxs(Terminal, { title: "MCP Tools Only (No Slash Commands)", children: [_jsx("p", { class: noteText, children: "Or use a single command to register the MCP server directly:" }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "claude mcp add cogent -e COGENT_ENDPOINT=https://cogent.tools -s user -- npx -y @essentialai/cogent-bridge" })] }), _jsxs("p", { class: noteText, children: ["This gives you the six ", _jsx("span", { class: stepCommand, children: "cogent_" }), " MCP tools. For slash commands (", _jsx("span", { class: stepCommand, children: "/cogent:register" }), ", etc.), use the Plugin Marketplace above."] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "OpenAI Codex" }), _jsxs(Terminal, { title: "Add Cogent to Codex", children: [_jsx("p", { class: noteText, children: "Register the Cogent MCP server (works on all Codex CLI versions):" }), _jsx("pre", { class: codeBlock, children: `codex mcp add cogent \\
189
226
  --env COGENT_ENDPOINT=https://cogent.tools \\
190
227
  --env COGENT_PLATFORM=codex \\
191
- -- npx -y @essentialai/cogent-bridge` }), _jsxs("p", { class: noteText, children: ["Restart Codex. This gives you the six ", _jsx("span", { class: stepCommand, children: "cogent_" }), " MCP tools. Use ", _jsx("span", { class: stepCommand, children: "cogent_register_peer" }), " to join the bridge."] }), _jsxs("details", { style: "margin-top: 1rem;", children: [_jsx("summary", { style: `cursor: pointer; color: ${colors.textMuted}; font-size: 0.85rem;`, children: "Plugin Marketplace (Codex CLI 0.133.0+)" }), _jsxs("div", { style: "margin-top: 0.75rem;", children: [_jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "codex plugin marketplace add eaisdevelopment/cogent" })] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "codex plugin add cogent@cogent" })] }), _jsx("p", { class: noteText, children: "Adds skills + MCP tools in one step. Requires Codex CLI 0.133.0 or newer." })] })] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "Updating to the Latest Version" }), _jsxs(Terminal, { title: "Stay Up to Date", children: [_jsxs("p", { class: noteText, children: [_jsx("span", { class: stepNumber, children: "Plugin Marketplace:" }), " Re-run the install command to pull the latest version:"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "claude plugin marketplace add https://github.com/eaisdevelopment/cogent.git" })] }), _jsxs("p", { class: noteText, children: [_jsx("span", { class: stepNumber, children: "Manual MCP / Claude Desktop:" }), " If you used ", _jsx("span", { class: stepCommand, children: "npx -y @essentialai/cogent-bridge" }), ", you already get the latest version automatically on each restart. No action needed."] }), _jsxs("p", { class: noteText, children: [_jsx("span", { class: stepNumber, children: "Global install:" }), " If you installed globally with npm, update explicitly:"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "npm update -g @essentialai/cogent-bridge" })] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "Quick Start" }), _jsxs(Terminal, { title: "Quick Start", children: [_jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "1." }), " Create a channel with a friendly name"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Create a Cogent channel called "my-project" with secret "team-secret"` })] }), _jsxs("p", { class: noteText, children: ["Returns a channel name (e.g., ", _jsx("span", { class: stepCommand, children: "my-project" }), ") and a secret to share. Omit the name to auto-generate one (e.g., ", _jsx("span", { class: stepCommand, children: "swift-fox-a3f1" }), ")."] }), _jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "2." }), " Join from another Claude Code instance using the channel name"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Join Cogent channel "my-project" with secret "team-secret"` })] }), _jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "3." }), " Start communicating"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Register as "backend" and send a message to "frontend"` })] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "Supported Platforms" }), _jsxs("div", { class: platformGrid, children: [_jsxs("div", { class: platformCard, children: [_jsx("h3", { children: "\u26A1 Claude Code" }), _jsx("p", { children: "Full auto-relay \u2014 Claude sessions respond automatically to inbound messages." })] }), _jsxs("div", { class: platformCard, children: [_jsx("h3", { children: "\uD83E\uDD16 OpenAI Codex" }), _jsx("p", { children: "Channel messaging \u2014 Codex agents send and receive via MCP tools. Auto-relay via plugin (v3.4+)." })] }), _jsxs("div", { class: platformCard, children: [_jsx("h3", { children: "\uD83D\uDCAC Slack" }), _jsx("p", { children: "Bridge human conversations \u2014 Slack users talk to AI agents via the Slack adapter." })] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "Slack Integration (NEW)" }), _jsxs(Terminal, { title: "Bridge Slack Channels to COGENT", children: [_jsx("p", { class: noteText, children: "Connect your Slack workspace to COGENT so humans and AI agents communicate in the same channel." }), _jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "1." }), " Install the Cogent Bridge Slack app in your workspace"] }), _jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "2." }), " In any Slack channel, run:"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "/" }), _jsx("span", { class: stepCommand, children: "cogent map <sessionId> <secret>" })] }), _jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "3." }), " Messages flow bidirectionally \u2014 Slack users and CC agents share the same conversation"] }), _jsxs("p", { class: noteText, children: ["Slash commands: ", _jsx("span", { class: stepCommand, children: "/cogent peers" }), " (list all peers), ", _jsx("span", { class: stepCommand, children: "/cogent send @backend msg" }), " (targeted message), ", _jsx("span", { class: stepCommand, children: "/cogent status" }), " (session health)"] })] })] }), _jsxs("a", { href: "/how-to", class: howToLink, children: [_jsx("div", { class: howToTitle, children: "How Teams Deliver Faster with Cogent \u2192" }), _jsx("p", { class: howToDesc, children: "Real-world use cases, command examples, and best practices for parallel development, cross-team bug fixes, API contract negotiation, and more." })] }), _jsxs("a", { href: "/faq", class: howToLink, children: [_jsx("div", { class: howToTitle, children: "FAQ & Troubleshooting \u2192" }), _jsx("p", { class: howToDesc, children: "Common setup issues, message flow troubleshooting, version compatibility, and solutions for Slack bridge configuration." })] }), _jsxs("a", { href: "/update", class: howToLink, children: [_jsx("div", { class: howToTitle, children: "Update & Upgrade Guide \u2192" }), _jsx("p", { class: howToDesc, children: "Step-by-step upgrade instructions, breaking change notes, troubleshooting common update issues, and rollback procedures." })] }), _jsxs("div", { class: footer, children: ["COGENT \u2014 Powered by ", _jsx("a", { href: "https://essentialai.uk", style: "color: inherit;", children: "Essential AI Solutions Ltd." }), " \u2014 ", _jsx("a", { href: "/", style: "color: inherit;", children: "cogent.tools" })] }), _jsx("script", { dangerouslySetInnerHTML: { __html: sseScript } })] }) }));
228
+ -- npx -y @essentialai/cogent-bridge` }), _jsxs("p", { class: noteText, children: ["Restart Codex. This gives you the six ", _jsx("span", { class: stepCommand, children: "cogent_" }), " MCP tools. Use ", _jsx("span", { class: stepCommand, children: "cogent_register_peer" }), " to join the bridge."] }), _jsxs("details", { style: "margin-top: 1rem;", children: [_jsx("summary", { style: `cursor: pointer; color: ${colors.textMuted}; font-size: 0.85rem;`, children: "Plugin Marketplace (Codex CLI 0.133.0+)" }), _jsxs("div", { style: "margin-top: 0.75rem;", children: [_jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "codex plugin marketplace add eaisdevelopment/cogent" })] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "codex plugin add cogent@cogent" })] }), _jsx("p", { class: noteText, children: "Adds skills + MCP tools in one step. Requires Codex CLI 0.133.0 or newer." })] })] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "Updating to the Latest Version" }), _jsxs(Terminal, { title: "Stay Up to Date", children: [_jsxs("p", { class: noteText, children: [_jsx("span", { class: stepNumber, children: "Plugin Marketplace:" }), " Re-run the install command to pull the latest version:"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "claude plugin marketplace add https://github.com/eaisdevelopment/cogent.git" })] }), _jsxs("p", { class: noteText, children: [_jsx("span", { class: stepNumber, children: "Manual MCP / Claude Desktop:" }), " If you used ", _jsx("span", { class: stepCommand, children: "npx -y @essentialai/cogent-bridge" }), ", you already get the latest version automatically on each restart. No action needed."] }), _jsxs("p", { class: noteText, children: [_jsx("span", { class: stepNumber, children: "Global install:" }), " If you installed globally with npm, update explicitly:"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "npm update -g @essentialai/cogent-bridge" })] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "Quick Start" }), _jsxs(Terminal, { title: "Quick Start", children: [_jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "1." }), " Create a channel with a friendly name"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Create a Cogent channel called "my-project" with secret "team-secret"` })] }), _jsxs("p", { class: noteText, children: ["Returns a channel name (e.g., ", _jsx("span", { class: stepCommand, children: "my-project" }), ") and a secret to share. Omit the name to auto-generate one (e.g., ", _jsx("span", { class: stepCommand, children: "swift-fox-a3f1" }), ")."] }), _jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "2." }), " Join from another Claude Code instance using the channel name"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Join Cogent channel "my-project" with secret "team-secret"` })] }), _jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "3." }), " Start communicating"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Register as "backend" and send a message to "frontend"` })] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "Supported Platforms" }), _jsxs("div", { class: platformGrid, children: [_jsxs("div", { class: platformCard, children: [_jsx("h3", { children: "\u26A1 Claude Code" }), _jsx("p", { children: "Full auto-relay \u2014 Claude sessions respond automatically to inbound messages." })] }), _jsxs("div", { class: platformCard, children: [_jsx("h3", { children: "\uD83E\uDD16 OpenAI Codex" }), _jsx("p", { children: "Channel messaging \u2014 Codex agents send and receive via MCP tools. Auto-relay via plugin (v3.4+)." })] }), _jsxs("div", { class: platformCard, children: [_jsx("h3", { children: "\uD83D\uDCAC Slack" }), _jsx("p", { children: "Bridge human conversations \u2014 Slack users talk to AI agents via the Slack adapter." })] })] })] }), _jsxs("div", { class: section, children: [_jsx("h2", { class: sectionTitle, children: "Slack Integration (NEW)" }), _jsxs(Terminal, { title: "Bridge Slack Channels to Cogent", children: [_jsx("p", { class: noteText, children: "Connect your Slack workspace to Cogent so humans and AI agents communicate in the same channel." }), _jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "1." }), " Install the Cogent Bridge Slack app in your workspace"] }), _jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "2." }), " In any Slack channel, run:"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "/" }), _jsx("span", { class: stepCommand, children: "cogent map <sessionId> <secret>" })] }), _jsxs("div", { class: stepLine, children: [_jsx("span", { class: stepNumber, children: "3." }), " Messages flow bidirectionally \u2014 Slack users and CC agents share the same conversation"] }), _jsxs("p", { class: noteText, children: ["Slash commands: ", _jsx("span", { class: stepCommand, children: "/cogent peers" }), " (list all peers), ", _jsx("span", { class: stepCommand, children: "/cogent send @backend msg" }), " (targeted message), ", _jsx("span", { class: stepCommand, children: "/cogent status" }), " (session health)"] })] })] }), _jsxs("a", { href: "/how-to", class: howToLink, children: [_jsx("div", { class: howToTitle, children: "How Teams Deliver Faster with Cogent \u2192" }), _jsx("p", { class: howToDesc, children: "Real-world use cases, command examples, and best practices for parallel development, cross-team bug fixes, API contract negotiation, and more." })] }), _jsxs("a", { href: "/faq", class: howToLink, children: [_jsx("div", { class: howToTitle, children: "FAQ & Troubleshooting \u2192" }), _jsx("p", { class: howToDesc, children: "Common setup issues, message flow troubleshooting, version compatibility, and solutions for Slack bridge configuration." })] }), _jsxs("a", { href: "/update", class: howToLink, children: [_jsx("div", { class: howToTitle, children: "Update & Upgrade Guide \u2192" }), _jsx("p", { class: howToDesc, children: "Step-by-step upgrade instructions, breaking change notes, troubleshooting common update issues, and rollback procedures." })] }), _jsxs("div", { class: footer, children: ["Cogent \u2014 by ", _jsx("a", { href: "https://essentialai.uk", style: "color: inherit;", children: "Essential AI Solutions Ltd." }), " \u2014 ", _jsx("a", { href: "/", style: "color: inherit;", children: "cogent.tools" })] }), _jsx("script", { dangerouslySetInnerHTML: { __html: sseScript } })] }) }));
192
229
  //# sourceMappingURL=LandingPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LandingPage.js","sourceRoot":"","sources":["../../../src/ui/pages/LandingPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LandingPage.js","sourceRoot":"","sources":["../../../src/ui/pages/LandingPage.tsx"],"names":[],"mappings":"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"}
@@ -1,33 +1,46 @@
1
1
  import { css, keyframes } from "hono/css";
2
2
  /**
3
- * Terminal-aesthetic color palette.
4
- * Dark background with Matrix green accent, muted text, and subtle borders.
3
+ * "Engineered Editorial" palette — synced with the Cogent portal design tokens
4
+ * (cogent-business/web/src/design/tokens.css): a dark ink canvas, a single sharp
5
+ * citron accent (deliberately NOT purple), warm off-white text, monospace for
6
+ * technical identifiers. Key names are kept stable (e.g. `green`) for backwards
7
+ * compatibility with existing pages; `green` is now the citron accent.
5
8
  */
6
9
  export declare const colors: {
7
- readonly bg: "#0d1117";
8
- readonly bgCard: "#161b22";
9
- readonly bgTerminal: "#0a0a0a";
10
- readonly text: "#c9d1d9";
11
- readonly textMuted: "#8b949e";
12
- readonly green: "#00ff41";
13
- readonly cyan: "#58a6ff";
14
- readonly amber: "#e3b341";
15
- readonly red: "#f85149";
16
- readonly border: "#30363d";
17
- readonly borderGlow: "#00ff4133";
18
- readonly platformCc: "#58a6ff";
19
- readonly platformCodex: "#39d353";
10
+ readonly bg: "#0a0c0f";
11
+ readonly bgCard: "#14181d";
12
+ readonly bgTerminal: "#07080a";
13
+ readonly bgRaised: "#1d232a";
14
+ readonly text: "#eceae3";
15
+ readonly textMuted: "#a6adb6";
16
+ readonly textFaint: "#828a94";
17
+ readonly green: "#c9f24e";
18
+ readonly greenHover: "#d7ff66";
19
+ readonly greenPress: "#b2db3e";
20
+ readonly accentSoft: "rgba(201, 242, 78, 0.12)";
21
+ readonly textOnAccent: "#0b1300";
22
+ readonly cyan: "#74e4d8";
23
+ readonly amber: "#f2c14e";
24
+ readonly red: "#f76e6e";
25
+ readonly border: "#262d35";
26
+ readonly borderHover: "#455059";
27
+ readonly borderGlow: "rgba(201, 242, 78, 0.32)";
28
+ readonly platformCc: "#74e4d8";
29
+ readonly platformCodex: "#74e3a0";
20
30
  readonly platformSlack: "#a371f7";
21
- readonly platformGchat: "#3fb950";
22
- readonly platformWeb: "#d29922";
23
- readonly modeObserver: "#d29922";
24
- readonly modeAgent: "#39d353";
31
+ readonly platformGchat: "#74e3a0";
32
+ readonly platformWeb: "#f2c14e";
33
+ readonly modeObserver: "#f2c14e";
34
+ readonly modeAgent: "#74e3a0";
25
35
  };
26
36
  /**
27
- * Monospace font stack for the terminal aesthetic.
37
+ * Font stacks synced with the portal: Geist for body/UI, Fraunces for editorial
38
+ * display headings, Geist Mono for technical identifiers and code.
28
39
  */
29
40
  export declare const fonts: {
30
- readonly mono: "'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'SF Mono', monospace";
41
+ readonly sans: "'Geist', system-ui, -apple-system, sans-serif";
42
+ readonly display: "'Fraunces', Georgia, 'Times New Roman', serif";
43
+ readonly mono: "'Geist Mono', 'JetBrains Mono', ui-monospace, monospace";
31
44
  };
32
45
  /**
33
46
  * Cursor blink keyframe animation -- opacity toggle at 50%.
@@ -36,7 +49,7 @@ export declare const fonts: {
36
49
  export declare const cursorBlink: ReturnType<typeof keyframes>;
37
50
  /**
38
51
  * Global styles using Hono's css helper with :-hono-global selector.
39
- * Sets box-sizing, font, background, text color, link color, and selection.
52
+ * Sans body, editorial serif headings, monospace for code, citron links/selection.
40
53
  */
41
54
  export declare const globalStyles: ReturnType<typeof css>;
42
55
  //# sourceMappingURL=theme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/ui/styles/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;CAoBT,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,KAAK;;CAER,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,UAAU,CAAC,OAAO,SAAS,CAGpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,UAAU,CAAC,OAAO,GAAG,CA2B/C,CAAC"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/ui/styles/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;;;GAMG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BT,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,KAAK;;;;CAIR,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,UAAU,CAAC,OAAO,SAAS,CAGpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,UAAU,CAAC,OAAO,GAAG,CA2C/C,CAAC"}
@@ -1,34 +1,47 @@
1
1
  import { css, keyframes } from "hono/css";
2
2
  /**
3
- * Terminal-aesthetic color palette.
4
- * Dark background with Matrix green accent, muted text, and subtle borders.
3
+ * "Engineered Editorial" palette — synced with the Cogent portal design tokens
4
+ * (cogent-business/web/src/design/tokens.css): a dark ink canvas, a single sharp
5
+ * citron accent (deliberately NOT purple), warm off-white text, monospace for
6
+ * technical identifiers. Key names are kept stable (e.g. `green`) for backwards
7
+ * compatibility with existing pages; `green` is now the citron accent.
5
8
  */
6
9
  export const colors = {
7
- bg: "#0d1117",
8
- bgCard: "#161b22",
9
- bgTerminal: "#0a0a0a",
10
- text: "#c9d1d9",
11
- textMuted: "#8b949e",
12
- green: "#00ff41",
13
- cyan: "#58a6ff",
14
- amber: "#e3b341",
15
- red: "#f85149",
16
- border: "#30363d",
17
- borderGlow: "#00ff4133",
18
- // Platform colors (v3.3.0)
19
- platformCc: "#58a6ff", // cyan — Claude Code
20
- platformCodex: "#39d353", // green — OpenAI Codex
21
- platformSlack: "#a371f7", // purple — Slack
22
- platformGchat: "#3fb950", // green-alt — Google Chat
23
- platformWeb: "#d29922", // amber — Web
24
- modeObserver: "#d29922", // amber — observer mode
25
- modeAgent: "#39d353", // green agent mode
10
+ bg: "#0a0c0f", // ink-900 — page background
11
+ bgCard: "#14181d", // ink-800 — surface / card
12
+ bgTerminal: "#07080a", // ink-1000 — code / terminal
13
+ bgRaised: "#1d232a", // ink-700 — raised surface / inputs
14
+ text: "#eceae3", // warm off-white
15
+ textMuted: "#a6adb6",
16
+ textFaint: "#828a94", // ~4.6:1 on bg — clears WCAG AA small text
17
+ green: "#c9f24e", // PRIMARY ACCENT — citron (key kept for compatibility)
18
+ greenHover: "#d7ff66",
19
+ greenPress: "#b2db3e",
20
+ accentSoft: "rgba(201, 242, 78, 0.12)",
21
+ textOnAccent: "#0b1300",
22
+ cyan: "#74e4d8",
23
+ amber: "#f2c14e",
24
+ red: "#f76e6e",
25
+ border: "#262d35", // ink-600
26
+ borderHover: "#455059", // ink-400
27
+ borderGlow: "rgba(201, 242, 78, 0.32)",
28
+ // Platform colorsfunctional brand identifiers (Slack stays its brand purple).
29
+ platformCc: "#74e4d8", // cyan — Claude Code
30
+ platformCodex: "#74e3a0", // green — OpenAI Codex
31
+ platformSlack: "#a371f7", // purple — Slack (brand badge)
32
+ platformGchat: "#74e3a0", // green-alt — Google Chat
33
+ platformWeb: "#f2c14e", // amber — Web
34
+ modeObserver: "#f2c14e", // amber — observer mode
35
+ modeAgent: "#74e3a0", // green — agent mode
26
36
  };
27
37
  /**
28
- * Monospace font stack for the terminal aesthetic.
38
+ * Font stacks synced with the portal: Geist for body/UI, Fraunces for editorial
39
+ * display headings, Geist Mono for technical identifiers and code.
29
40
  */
30
41
  export const fonts = {
31
- mono: "'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'SF Mono', monospace",
42
+ sans: "'Geist', system-ui, -apple-system, sans-serif",
43
+ display: "'Fraunces', Georgia, 'Times New Roman', serif",
44
+ mono: "'Geist Mono', 'JetBrains Mono', ui-monospace, monospace",
32
45
  };
33
46
  /**
34
47
  * Cursor blink keyframe animation -- opacity toggle at 50%.
@@ -40,7 +53,7 @@ export const cursorBlink = keyframes `
40
53
  `;
41
54
  /**
42
55
  * Global styles using Hono's css helper with :-hono-global selector.
43
- * Sets box-sizing, font, background, text color, link color, and selection.
56
+ * Sans body, editorial serif headings, monospace for code, citron links/selection.
44
57
  */
45
58
  export const globalStyles = css `
46
59
  :-hono-global {
@@ -48,17 +61,33 @@ export const globalStyles = css `
48
61
  box-sizing: border-box;
49
62
  }
50
63
  html {
51
- font-family: ${fonts.mono};
52
- font-size: 14px;
64
+ font-family: ${fonts.sans};
65
+ font-size: 15px;
53
66
  background: ${colors.bg};
54
67
  color: ${colors.text};
68
+ -webkit-font-smoothing: antialiased;
69
+ text-rendering: optimizeLegibility;
55
70
  }
56
71
  body {
57
72
  margin: 0;
58
73
  padding: 0;
74
+ line-height: 1.6;
75
+ }
76
+ h1,
77
+ h2 {
78
+ font-family: ${fonts.display};
79
+ font-weight: 600;
80
+ letter-spacing: -0.02em;
81
+ line-height: 1.08;
82
+ }
83
+ pre,
84
+ code,
85
+ kbd,
86
+ samp {
87
+ font-family: ${fonts.mono};
59
88
  }
60
89
  a {
61
- color: ${colors.cyan};
90
+ color: ${colors.green};
62
91
  text-decoration: none;
63
92
  }
64
93
  a:hover {
@@ -66,7 +95,7 @@ export const globalStyles = css `
66
95
  }
67
96
  ::selection {
68
97
  background: ${colors.green};
69
- color: ${colors.bgTerminal};
98
+ color: ${colors.textOnAccent};
70
99
  }
71
100
  }
72
101
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/ui/styles/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,EAAE,EAAE,SAAS;IACb,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;IACpB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,SAAS;IACd,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,WAAW;IACvB,2BAA2B;IAC3B,UAAU,EAAE,SAAS,EAAQ,qBAAqB;IAClD,aAAa,EAAE,SAAS,EAAK,uBAAuB;IACpD,aAAa,EAAE,SAAS,EAAK,iBAAiB;IAC9C,aAAa,EAAE,SAAS,EAAK,0BAA0B;IACvD,WAAW,EAAE,SAAS,EAAO,cAAc;IAC3C,YAAY,EAAE,SAAS,EAAM,wBAAwB;IACrD,SAAS,EAAE,SAAS,EAAS,qBAAqB;CAC1C,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,sEAAsE;CACpE,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAiC,SAAS,CAAA;;;CAGjE,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAA2B,GAAG,CAAA;;;;;;qBAMlC,KAAK,CAAC,IAAI;;oBAEX,MAAM,CAAC,EAAE;eACd,MAAM,CAAC,IAAI;;;;;;;eAOX,MAAM,CAAC,IAAI;;;;;;;oBAON,MAAM,CAAC,KAAK;eACjB,MAAM,CAAC,UAAU;;;CAG/B,CAAC"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/ui/styles/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,EAAE,EAAE,SAAS,EAAE,4BAA4B;IAC3C,MAAM,EAAE,SAAS,EAAE,2BAA2B;IAC9C,UAAU,EAAE,SAAS,EAAE,6BAA6B;IACpD,QAAQ,EAAE,SAAS,EAAE,oCAAoC;IACzD,IAAI,EAAE,SAAS,EAAE,iBAAiB;IAClC,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS,EAAE,2CAA2C;IACjE,KAAK,EAAE,SAAS,EAAE,uDAAuD;IACzE,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,0BAA0B;IACtC,YAAY,EAAE,SAAS;IACvB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,SAAS;IACd,MAAM,EAAE,SAAS,EAAE,UAAU;IAC7B,WAAW,EAAE,SAAS,EAAE,UAAU;IAClC,UAAU,EAAE,0BAA0B;IACtC,iFAAiF;IACjF,UAAU,EAAE,SAAS,EAAE,qBAAqB;IAC5C,aAAa,EAAE,SAAS,EAAE,uBAAuB;IACjD,aAAa,EAAE,SAAS,EAAE,+BAA+B;IACzD,aAAa,EAAE,SAAS,EAAE,0BAA0B;IACpD,WAAW,EAAE,SAAS,EAAE,cAAc;IACtC,YAAY,EAAE,SAAS,EAAE,wBAAwB;IACjD,SAAS,EAAE,SAAS,EAAE,qBAAqB;CACnC,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,+CAA+C;IACrD,OAAO,EAAE,+CAA+C;IACxD,IAAI,EAAE,yDAAyD;CACvD,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAiC,SAAS,CAAA;;;CAGjE,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAA2B,GAAG,CAAA;;;;;;qBAMlC,KAAK,CAAC,IAAI;;oBAEX,MAAM,CAAC,EAAE;eACd,MAAM,CAAC,IAAI;;;;;;;;;;;qBAWL,KAAK,CAAC,OAAO;;;;;;;;;qBASb,KAAK,CAAC,IAAI;;;eAGhB,MAAM,CAAC,KAAK;;;;;;;oBAOP,MAAM,CAAC,KAAK;eACjB,MAAM,CAAC,YAAY;;;CAGjC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@essentialai/cogent-server",
3
- "version": "3.4.3",
3
+ "version": "3.5.0",
4
4
  "description": "Cogent relay server with session management and bearer auth",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",