@frankieai/server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,87 @@
1
+ import {
2
+ createControlApp
3
+ } from "./chunk-ZY4JZVCI.js";
4
+ import {
5
+ API_TOOL_PREFIX,
6
+ ConfigError,
7
+ MCP_TOOL_PREFIX,
8
+ MemoryRateLimiter,
9
+ MemoryTenantStore,
10
+ ModelResolutionError,
11
+ OpenApiError,
12
+ SingleTenantStore,
13
+ TenantRegistry,
14
+ applyEnvOverrides,
15
+ buildApiTools,
16
+ buildForwardedHeaders,
17
+ buildSystemPrompt,
18
+ collectTools,
19
+ connectMcpTools,
20
+ createFrankieApp,
21
+ createMcpHostApp,
22
+ loadConfigFromFile,
23
+ loadResolvedConfig,
24
+ loadSpec,
25
+ matchPath,
26
+ modelHasApi,
27
+ resolveModel,
28
+ resolveSecrets,
29
+ runTurn
30
+ } from "./chunk-2YYKRPT7.js";
31
+ import {
32
+ AuthError,
33
+ FileTenantStore,
34
+ MemorySessionStore,
35
+ PostgresSessionStore,
36
+ PostgresTenantStore,
37
+ TokenService,
38
+ anonymousUser,
39
+ isOriginAllowed,
40
+ newSessionId,
41
+ resolveStores,
42
+ resolveTenantStore,
43
+ safeEqual,
44
+ toPublicTenant
45
+ } from "./chunk-ACXNDAOM.js";
46
+ export {
47
+ API_TOOL_PREFIX,
48
+ AuthError,
49
+ ConfigError,
50
+ FileTenantStore,
51
+ MCP_TOOL_PREFIX,
52
+ MemoryRateLimiter,
53
+ MemorySessionStore,
54
+ MemoryTenantStore,
55
+ ModelResolutionError,
56
+ OpenApiError,
57
+ PostgresSessionStore,
58
+ PostgresTenantStore,
59
+ SingleTenantStore,
60
+ TenantRegistry,
61
+ TokenService,
62
+ anonymousUser,
63
+ applyEnvOverrides,
64
+ buildApiTools,
65
+ buildForwardedHeaders,
66
+ buildSystemPrompt,
67
+ collectTools,
68
+ connectMcpTools,
69
+ createControlApp,
70
+ createFrankieApp,
71
+ createMcpHostApp,
72
+ isOriginAllowed,
73
+ loadConfigFromFile,
74
+ loadResolvedConfig,
75
+ loadSpec,
76
+ matchPath,
77
+ modelHasApi,
78
+ newSessionId,
79
+ resolveModel,
80
+ resolveSecrets,
81
+ resolveStores,
82
+ resolveTenantStore,
83
+ runTurn,
84
+ safeEqual,
85
+ toPublicTenant
86
+ };
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/server.js ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ConfigError,
4
+ ModelResolutionError,
5
+ createFrankieApp,
6
+ loadResolvedConfig
7
+ } from "./chunk-2YYKRPT7.js";
8
+ import {
9
+ resolveStores
10
+ } from "./chunk-ACXNDAOM.js";
11
+
12
+ // src/server.ts
13
+ import { serve } from "@hono/node-server";
14
+ async function main() {
15
+ const port = Number(process.env["PORT"] ?? 8080);
16
+ const host = process.env["HOST"] ?? "0.0.0.0";
17
+ const multiTenant = Boolean(process.env["DATABASE_URL"] || process.env["FRANKIE_TENANTS_DIR"]);
18
+ let app;
19
+ let describe = "single-tenant";
20
+ try {
21
+ if (multiTenant) {
22
+ const resolved = await resolveStores();
23
+ describe = `multi-tenant (${resolved.describe})`;
24
+ app = createFrankieApp({ tenants: resolved.tenants, sessions: resolved.sessions });
25
+ } else {
26
+ app = createFrankieApp({ resolved: await loadResolvedConfig() });
27
+ }
28
+ } catch (error) {
29
+ if (error instanceof ConfigError || error instanceof ModelResolutionError) {
30
+ console.error(`[frankie] ${error.message}`);
31
+ process.exit(1);
32
+ }
33
+ throw error;
34
+ }
35
+ serve({ fetch: app.fetch, port, hostname: host }, () => {
36
+ console.log(
37
+ JSON.stringify({
38
+ ts: (/* @__PURE__ */ new Date()).toISOString(),
39
+ level: "info",
40
+ event: "listening",
41
+ mode: describe,
42
+ url: `http://${host}:${port}`
43
+ })
44
+ );
45
+ });
46
+ }
47
+ void main();
48
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { serve } from \"@hono/node-server\";\nimport { createFrankieApp } from \"./app.js\";\nimport { ModelResolutionError } from \"./agent/models.js\";\nimport { ConfigError, loadResolvedConfig } from \"./config.js\";\nimport { resolveStores } from \"./control/resolve-store.js\";\n\nasync function main(): Promise<void> {\n const port = Number(process.env[\"PORT\"] ?? 8080);\n const host = process.env[\"HOST\"] ?? \"0.0.0.0\";\n\n // Two shapes, one binary. With DATABASE_URL (or FRANKIE_TENANTS_DIR) set, this\n // serves every tenant the control plane wrote, resolved by publishable key —\n // the hosted, multi-tenant shape. Otherwise it loads one frankie.config.json,\n // the self-hosted, single-tenant shape.\n const multiTenant = Boolean(process.env[\"DATABASE_URL\"] || process.env[\"FRANKIE_TENANTS_DIR\"]);\n let app;\n let describe = \"single-tenant\";\n try {\n if (multiTenant) {\n const resolved = await resolveStores();\n describe = `multi-tenant (${resolved.describe})`;\n app = createFrankieApp({ tenants: resolved.tenants, sessions: resolved.sessions });\n } else {\n app = createFrankieApp({ resolved: await loadResolvedConfig() });\n }\n } catch (error) {\n if (error instanceof ConfigError || error instanceof ModelResolutionError) {\n console.error(`[frankie] ${error.message}`);\n process.exit(1);\n }\n throw error;\n }\n\n serve({ fetch: app.fetch, port, hostname: host }, () => {\n console.log(\n JSON.stringify({\n ts: new Date().toISOString(),\n level: \"info\",\n event: \"listening\",\n mode: describe,\n url: `http://${host}:${port}`,\n }),\n );\n });\n}\n\nvoid main();\n"],"mappings":";;;;;;;;;;;;AACA,SAAS,aAAa;AAMtB,eAAe,OAAsB;AACnC,QAAM,OAAO,OAAO,QAAQ,IAAI,MAAM,KAAK,IAAI;AAC/C,QAAM,OAAO,QAAQ,IAAI,MAAM,KAAK;AAMpC,QAAM,cAAc,QAAQ,QAAQ,IAAI,cAAc,KAAK,QAAQ,IAAI,qBAAqB,CAAC;AAC7F,MAAI;AACJ,MAAI,WAAW;AACf,MAAI;AACF,QAAI,aAAa;AACf,YAAM,WAAW,MAAM,cAAc;AACrC,iBAAW,iBAAiB,SAAS,QAAQ;AAC7C,YAAM,iBAAiB,EAAE,SAAS,SAAS,SAAS,UAAU,SAAS,SAAS,CAAC;AAAA,IACnF,OAAO;AACL,YAAM,iBAAiB,EAAE,UAAU,MAAM,mBAAmB,EAAE,CAAC;AAAA,IACjE;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,eAAe,iBAAiB,sBAAsB;AACzE,cAAQ,MAAM,aAAa,MAAM,OAAO,EAAE;AAC1C,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,UAAM;AAAA,EACR;AAEA,QAAM,EAAE,OAAO,IAAI,OAAO,MAAM,UAAU,KAAK,GAAG,MAAM;AACtD,YAAQ;AAAA,MACN,KAAK,UAAU;AAAA,QACb,KAAI,oBAAI,KAAK,GAAE,YAAY;AAAA,QAC3B,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK,UAAU,IAAI,IAAI,IAAI;AAAA,MAC7B,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAEA,KAAK,KAAK;","names":[]}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@frankieai/server",
3
+ "version": "0.1.0",
4
+ "description": "Frankie cloud agent server — auth, sessions, MCP wiring and streaming for the embedded onboarding agent.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "bin": {
15
+ "frankie-server": "./dist/server.js",
16
+ "frankie-control": "./dist/control-server.js"
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "dependencies": {
22
+ "@earendil-works/pi-agent-core": "0.85.1",
23
+ "@earendil-works/pi-ai": "0.85.1",
24
+ "@hono/node-server": "^1.13.0",
25
+ "@modelcontextprotocol/sdk": "^1.12.0",
26
+ "hono": "^4.13.0",
27
+ "jose": "^6.0.0",
28
+ "yaml": "^2.9.0",
29
+ "zod": "^4.0.0",
30
+ "pg": "^8.13.0",
31
+ "@frankieai/core": "0.1.0"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^22.10.0",
35
+ "tsup": "^8.5.0",
36
+ "typescript": "^5.7.0",
37
+ "vitest": "^3.0.0",
38
+ "@types/pg": "^8.11.10",
39
+ "pg-mem": "^3.0.5"
40
+ },
41
+ "module": "./dist/index.js",
42
+ "scripts": {
43
+ "build": "tsup",
44
+ "dev": "tsup --watch",
45
+ "start": "node dist/server.js",
46
+ "typecheck": "tsc -p tsconfig.json --noEmit",
47
+ "test": "vitest run",
48
+ "start:control": "node dist/control-server.js"
49
+ }
50
+ }