@prostgles/prostgles 2.3.6-dev.1787160729 → 2.3.6-dev.1787240381

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 (64) hide show
  1. package/client/build/js/main.bundle.js +1 -1
  2. package/dist/server/package.json +1 -1
  3. package/dist/server/src/ConnectionManager/ConnectionManager.d.ts.map +1 -1
  4. package/dist/server/src/ConnectionManager/ConnectionManager.js +2 -0
  5. package/dist/server/src/ConnectionManager/ConnectionManager.js.map +1 -1
  6. package/dist/server/src/ConnectionManager/applyStartupSchemaConfig.d.ts +7 -1
  7. package/dist/server/src/ConnectionManager/applyStartupSchemaConfig.d.ts.map +1 -1
  8. package/dist/server/src/ConnectionManager/applyStartupSchemaConfig.js +17 -7
  9. package/dist/server/src/ConnectionManager/applyStartupSchemaConfig.js.map +1 -1
  10. package/dist/server/src/ConnectionManager/parseTableConfig.js +2 -2
  11. package/dist/server/src/ConnectionManager/parseTableConfig.js.map +1 -1
  12. package/dist/server/src/ConnectionManager/startConnection.d.ts.map +1 -1
  13. package/dist/server/src/ConnectionManager/startConnection.js +6 -2
  14. package/dist/server/src/ConnectionManager/startConnection.js.map +1 -1
  15. package/dist/server/src/McpHub/ProstglesMcpHub/ProstglesMCPServers/Documents.mcp.js +2 -2
  16. package/dist/server/src/McpHub/ProstglesMcpHub/ProstglesMCPServers/Documents.mcp.js.map +1 -1
  17. package/dist/server/src/McpHub/ProstglesMcpHub/ProstglesMCPServers/Web/Web.mcp.js +3 -3
  18. package/dist/server/src/McpHub/ProstglesMcpHub/ProstglesMCPServers/Web/Web.mcp.js.map +1 -1
  19. package/dist/server/src/ServiceManager/ServiceManager.d.ts +9 -6
  20. package/dist/server/src/ServiceManager/ServiceManager.d.ts.map +1 -1
  21. package/dist/server/src/ServiceManager/ServiceManager.js +36 -12
  22. package/dist/server/src/ServiceManager/ServiceManager.js.map +1 -1
  23. package/dist/server/src/ServiceManager/ServiceManager.spec.js +34 -2
  24. package/dist/server/src/ServiceManager/ServiceManager.spec.js.map +1 -1
  25. package/dist/server/src/ServiceManager/ServiceManagerTypes.d.ts +1 -1
  26. package/dist/server/src/ServiceManager/buildService.js +1 -1
  27. package/dist/server/src/ServiceManager/buildService.js.map +1 -1
  28. package/dist/server/src/ServiceManager/enableService.d.ts +3 -2
  29. package/dist/server/src/ServiceManager/enableService.d.ts.map +1 -1
  30. package/dist/server/src/ServiceManager/enableService.js.map +1 -1
  31. package/dist/server/src/ServiceManager/getServiceEndpoints.d.ts.map +1 -1
  32. package/dist/server/src/ServiceManager/getServiceEndpoints.js +9 -1
  33. package/dist/server/src/ServiceManager/getServiceEndpoints.js.map +1 -1
  34. package/dist/server/src/ServiceManager/getServiceManager.d.ts +685 -0
  35. package/dist/server/src/ServiceManager/getServiceManager.d.ts.map +1 -0
  36. package/dist/server/src/ServiceManager/getServiceManager.js +24 -0
  37. package/dist/server/src/ServiceManager/getServiceManager.js.map +1 -0
  38. package/dist/server/src/ServiceManager/initialiseServices.d.ts.map +1 -1
  39. package/dist/server/src/ServiceManager/initialiseServices.js +3 -2
  40. package/dist/server/src/ServiceManager/initialiseServices.js.map +1 -1
  41. package/dist/server/src/cli/cliTemplateFiles.js +35 -9
  42. package/dist/server/src/cli/cliTemplateFiles.js.map +1 -1
  43. package/dist/server/src/init/prostglesOnReady.d.ts +0 -678
  44. package/dist/server/src/init/prostglesOnReady.d.ts.map +1 -1
  45. package/dist/server/src/init/prostglesOnReady.js +11 -16
  46. package/dist/server/src/init/prostglesOnReady.js.map +1 -1
  47. package/dist/server/src/schemaConfig.d.ts +19 -4
  48. package/dist/server/src/schemaConfig.d.ts.map +1 -1
  49. package/dist/server/src/schemaConfig.js +6 -1
  50. package/dist/server/src/schemaConfig.js.map +1 -1
  51. package/dist/server/src/serverFunctions/adminServerFunctions/mcpServerFunctions.js +3 -3
  52. package/dist/server/src/serverFunctions/adminServerFunctions/mcpServerFunctions.js.map +1 -1
  53. package/dist/server/src/serverFunctions/adminServerFunctions/stateServerAdminFunctions.d.ts.map +1 -1
  54. package/dist/server/src/serverFunctions/adminServerFunctions/stateServerAdminFunctions.js +3 -3
  55. package/dist/server/src/serverFunctions/adminServerFunctions/stateServerAdminFunctions.js.map +1 -1
  56. package/dist/server/src/services.d.ts +2 -1
  57. package/dist/server/src/services.d.ts.map +1 -1
  58. package/dist/server/src/services.js +3 -1
  59. package/dist/server/src/services.js.map +1 -1
  60. package/package.json +1 -1
  61. package/dist/server/src/cli/getCliAgentsFile.d.ts +0 -2
  62. package/dist/server/src/cli/getCliAgentsFile.d.ts.map +0 -1
  63. package/dist/server/src/cli/getCliAgentsFile.js +0 -100
  64. package/dist/server/src/cli/getCliAgentsFile.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getServiceManager.d.ts","sourceRoot":"","sources":["../../../../src/ServiceManager/getServiceManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAI/B,eAAO,MAAM,wBAAwB,GAAU,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAatD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,kBAAkB,SAAS,eAAe,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,OAOxC,cAAc,CACrC,OAAO,iBAAiB,GAAG,kBAAkB,CAEhD,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getServiceManager = exports.initializeServiceManager = void 0;
4
+ const path_1 = require("path");
5
+ const ServiceManager_1 = require("./ServiceManager");
6
+ const ServiceManagerTypes_1 = require("./ServiceManagerTypes");
7
+ let serviceManager;
8
+ const initializeServiceManager = async (dbs) => {
9
+ const isNew = !serviceManager;
10
+ serviceManager ??= await ServiceManager_1.ServiceManager.create({
11
+ services: ServiceManagerTypes_1.prostglesServices,
12
+ serviceRoot: (0, path_1.resolve)(__dirname, "../../../../src/ServiceManager/services"),
13
+ }, dbs);
14
+ return { serviceManager, isNew };
15
+ };
16
+ exports.initializeServiceManager = initializeServiceManager;
17
+ const getServiceManager = () => {
18
+ if (!serviceManager) {
19
+ throw new Error("ServiceManager is not available before Prostgles startup.");
20
+ }
21
+ return serviceManager;
22
+ };
23
+ exports.getServiceManager = getServiceManager;
24
+ //# sourceMappingURL=getServiceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getServiceManager.js","sourceRoot":"","sources":["../../../../src/ServiceManager/getServiceManager.ts"],"names":[],"mappings":";;;AACA,+BAA+B;AAC/B,qDAAkD;AAClD,+DAG+B;AAE/B,IAAI,cAAoE,CAAC;AAElE,MAAM,wBAAwB,GAAG,KAAK,EAAE,GAAQ,EAAE,EAAE;IACzD,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC;IAC9B,cAAc,KAAK,MAAM,+BAAc,CAAC,MAAM,CAC5C;QACE,QAAQ,EAAE,uCAAiB;QAC3B,WAAW,EAAE,IAAA,cAAO,EAClB,SAAS,EACT,yCAAyC,CAC1C;KACF,EACD,GAAG,CACJ,CAAC;IACF,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC,CAAC;AAbW,QAAA,wBAAwB,4BAanC;AAEK,MAAM,iBAAiB,GAAG,GAE7B,EAAE;IACJ,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,cAEN,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,iBAAiB,qBAW5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"initialiseServices.d.ts","sourceRoot":"","sources":["../../../../src/ServiceManager/initialiseServices.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC;AAK9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,eAAO,MAAM,kBAAkB,GAC7B,gBAAgB,cAAc,EAC9B,KAAK,GAAG,kBA4CT,CAAC"}
1
+ {"version":3,"file":"initialiseServices.d.ts","sourceRoot":"","sources":["../../../../src/ServiceManager/initialiseServices.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,eAAO,MAAM,kBAAkB,GAC7B,gBAAgB,cAAc,EAC9B,KAAK,GAAG,kBA0CT,CAAC"}
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.initialiseServices = void 0;
4
- const ServiceManagerTypes_1 = require("./ServiceManagerTypes");
5
4
  const initialiseServices = async (serviceManager, dbs) => {
6
5
  await dbs.services
7
- .insertMany(Object.entries(ServiceManagerTypes_1.prostglesServices).map(([name, service]) => ({
6
+ .insertMany(Object.entries(serviceManager.services).map(([name, service]) => ({
8
7
  name,
9
8
  label: service.label,
10
9
  icon: service.icon,
@@ -19,6 +18,8 @@ const initialiseServices = async (serviceManager, dbs) => {
19
18
  void dbs.services.find({ status: "running" }).then((services) => {
20
19
  const activeServiceNames = [];
21
20
  services.forEach((service) => {
21
+ if (!Object.hasOwn(serviceManager.services, service.name))
22
+ return;
22
23
  activeServiceNames.push(service.name);
23
24
  console.log("Re-enabling service on startup: ", service.name);
24
25
  serviceManager
@@ -1 +1 @@
1
- {"version":3,"file":"initialiseServices.js","sourceRoot":"","sources":["../../../../src/ServiceManager/initialiseServices.ts"],"names":[],"mappings":";;;AAGA,+DAG+B;AAGxB,MAAM,kBAAkB,GAAG,KAAK,EACrC,cAA8B,EAC9B,GAAQ,EACR,EAAE;IACF,MAAM,GAAG,CAAC,QAAQ;SACf,UAAU,CACT,MAAM,CAAC,OAAO,CAAC,uCAAqD,CAAC,CAAC,GAAG,CACvE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAClB,CAAC;QACC,IAAI;QACJ,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI;QAC9C,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,SAAS;KAClB,CAA0C,CAC9C,EACD;QACE,UAAU,EAAE,WAAW;KACxB,CACF;SACA,IAAI,CAAC,GAAG,EAAE;QACT,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC9D,MAAM,kBAAkB,GAAa,EAAE,CAAC;YACxC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC9D,cAAc;qBACX,aAAa,CACZ,OAAO,CAAC,IAAsC,EAC9C,GAAG,EAAE,GAAE,CAAC,CACT;qBACA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE;gBACvD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC9C,OAAO,CAAC,GAAG,CACT,gDAAgD,EAChD,WAAW,CACZ,CAAC;oBACF,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AA9CW,QAAA,kBAAkB,sBA8C7B"}
1
+ {"version":3,"file":"initialiseServices.js","sourceRoot":"","sources":["../../../../src/ServiceManager/initialiseServices.ts"],"names":[],"mappings":";;;AAKO,MAAM,kBAAkB,GAAG,KAAK,EACrC,cAA8B,EAC9B,GAAQ,EACR,EAAE;IACF,MAAM,GAAG,CAAC,QAAQ;SACf,UAAU,CACT,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,CACzC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAClB,CAAC;QACC,IAAI;QACJ,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI;QAC9C,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,SAAS;KAClB,CAA0C,CAC9C,EACD;QACE,UAAU,EAAE,WAAW;KACxB,CACF;SACA,IAAI,CAAC,GAAG,EAAE;QACT,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC9D,MAAM,kBAAkB,GAAa,EAAE,CAAC;YACxC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC;oBAAE,OAAO;gBAClE,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC9D,cAAc;qBACX,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC;qBACrC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE;gBACvD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC9C,OAAO,CAAC,GAAG,CACT,gDAAgD,EAChD,WAAW,CACZ,CAAC;oBACF,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AA5CW,QAAA,kBAAkB,sBA4C7B"}
@@ -66,6 +66,7 @@ const getCliTemplateFiles = ({ configId }) => ({
66
66
  "index.ts": `
67
67
  import { defineConfig } from "@prostgles/prostgles";
68
68
  import type { DBGeneratedSchema } from "../${exports.generatedFolderName}/DBGeneratedSchema";
69
+ import { serviceManagerConfig } from "./serviceManager";
69
70
 
70
71
  const prostgles = defineConfig<DBGeneratedSchema>();
71
72
 
@@ -74,6 +75,7 @@ const getCliTemplateFiles = ({ configId }) => ({
74
75
  connection: {
75
76
  table_options: {},
76
77
  },
78
+ services: serviceManagerConfig,
77
79
  tableConfig: {},
78
80
  });`,
79
81
  [servicesFolderName]: {
@@ -82,18 +84,28 @@ const getCliTemplateFiles = ({ configId }) => ({
82
84
  import type { ProstglesService } from "@prostgles/prostgles/services";
83
85
 
84
86
  export const myService = {
85
- buildContext: "myService",
86
87
  icon: "Extension",
87
88
  label: "My service",
88
89
  description: "Example local Docker service.",
89
90
  port: 8080,
90
91
  healthCheck: { endpoint: "/health" },
91
- endpoints: {},
92
+ endpoints: {
93
+ "/hey": {
94
+ method: "GET",
95
+ inputSchema: undefined,
96
+ description: "Service info endpoint",
97
+ outputSchema: "string",
98
+ },
99
+ },
92
100
  } as const satisfies ProstglesService;`,
93
101
  src: {
94
102
  Dockerfile: `
95
103
  FROM python:3.13-alpine
96
104
 
105
+ WORKDIR /app
106
+ RUN printf 'service-ok' > health
107
+ RUN printf 'Hello from myService!' > hey
108
+
97
109
  EXPOSE 8080
98
110
 
99
111
  CMD ["python", "-m", "http.server", "8080", "--bind", "0.0.0.0"]`,
@@ -101,14 +113,16 @@ const getCliTemplateFiles = ({ configId }) => ({
101
113
  },
102
114
  },
103
115
  "serviceManager.ts": `
104
- import { ServiceManager } from "@prostgles/prostgles/services";
116
+ import type { ServiceManagerConfig } from "@prostgles/prostgles/services";
105
117
  import { myService } from "./services/myService/myService.service";
106
118
  import path from "node:path";
107
119
 
108
- export const serviceManager = new ServiceManager({
109
- services: { myService },
120
+ export const services = { myService };
121
+
122
+ export const serviceManagerConfig = {
123
+ services,
110
124
  serviceRoot: path.resolve(__dirname, "..", "..", "src", "services"),
111
- });`,
125
+ } satisfies ServiceManagerConfig<typeof services>;`,
112
126
  },
113
127
  [testsFolderName]: {
114
128
  "deployment.test.ts": `
@@ -297,6 +311,7 @@ const schemaConfigGuidance = {
297
311
  joins: "Use `joins` only for relationships that cannot be inferred from foreign keys.",
298
312
  onInitSQL: "Use `onInitSQL` only for SQL initialization that cannot be expressed by `tableConfig`.",
299
313
  onMount: "Use `onMount` for startup integration work and return cleanup logic when resources are opened.",
314
+ services: "Register Docker-backed runtimes with `services` so Prostgles can expose and control them.",
300
315
  tableConfig: "Define tables and columns in `tableConfig`, including constraints and indexes.",
301
316
  tableConfigMigrations: "For schema changes that transform existing data, increment `tableConfigMigrations.version` and use `onMigrate`.",
302
317
  tableHooks: "Define `tableHooks` as a separate top-level config property.",
@@ -309,9 +324,13 @@ const connectionGuidance = {
309
324
  table_options: "Populate `connection.table_options` for every user-facing table so data renders clearly. Add useful labels and icons, column renderers and styles, and a practical `card` layout with header, subheader, avatar, and visible columns where appropriate.",
310
325
  };
311
326
  const getCliAgentsFile = () => `
312
- # Prostgles configuration
327
+ # Prostgles application
313
328
 
314
- Build the application around the typed Prostgles schema config.
329
+ This repository is a Prostgles config project: a typed TypeScript definition of a PostgreSQL-backed application or internal tool. Prostgles is the framework, not the application itself. It makes internal tools easier to build by providing the web UI, authentication, realtime transport, database connections, and deployment lifecycle; the user decides what the application does and this repository defines it.
330
+
331
+ This project owns the application's database schema and behavior: permissions, display options, workspaces, server functions, hooks, migrations, and optional Docker services. There is normally no separate frontend or HTTP server to build; Prostgles derives the database UI and typed client API from this config.
332
+
333
+ Treat \`src/index.ts\` as the composition root. Keep feature definitions in focused modules under \`src/\`, then assemble them into the default-exported config. Treat \`generated/DBGeneratedSchema.ts\` as generated output: use its types, but do not hand-edit it. Keep credentials and database URLs in \`.env\`, never in the config.
315
334
 
316
335
  ## Config structure
317
336
 
@@ -324,10 +343,17 @@ const getCliAgentsFile = () => `
324
343
  - ${schemaConfigGuidance.watchSchemaType}
325
344
  - ${schemaConfigGuidance.onInitSQL} ${schemaConfigGuidance.onMount}
326
345
 
346
+ ## Services
347
+
348
+ - If a server function needs a non-Node.js runtime or system dependencies, implement that work as a service instead of running it directly in the function.
349
+ - Define services under \`src/services/<serviceName>/\`, with the typed \`*.service.ts\` definition beside a \`src/\` Docker build context. Declare a health check and typed endpoints for every operation the app calls.
350
+ - Register each service in \`src/serviceManager.ts\` and expose its config through the top-level \`services\` property. Service names must not collide with built-in Prostgles services or another app service.
351
+ - Use the \`serviceManager\` provided to \`onMount\` and call \`getServiceWithRetries(serviceName)\` before using an endpoint. This is the host-owned instance shown in the Prostgles Services UI; do not construct another \`ServiceManager\`.
352
+
327
353
  ## Typed database object
328
354
 
329
355
  - The Prostgles \`dbo\` object available in \`onMount\`, \`tableHooks\`, and server functions is \`DBOFullyTyped<DBGeneratedSchema>\`. Table names, columns, filters, selects, inserts, updates, and results are fully typed.
330
- - Keep the schema generic connected when moving code into separate modules. Use \`ProstglesOnMount<DBGeneratedSchema>\` for \`onMount\`, \`TableHooks<DBGeneratedSchema>\` for hooks, and the typed function definers for functions.
356
+ - Keep the schema generic connected when moving code into separate modules. Use \`ProstglesOnMount<DBGeneratedSchema, typeof services>\` for an \`onMount\` module that uses app services, \`TableHooks<DBGeneratedSchema>\` for hooks, and the typed function definers for functions.
331
357
  - Prefer typed \`dbo\` table handlers and let TypeScript infer values. Casts should be very rare; before adding one, check the table definition, JSONB schema, generated schema, and helper generic.
332
358
  - Every table and view handler supports realtime \`subscribe\` and \`subscribeOne\`, for example \`dbo.orders.subscribe(filter, params, onData)\`. Prefer subscriptions over polling the database. Keep the returned subscription handler and call \`unsubscribe()\` during cleanup; an \`onMount\` callback can return that cleanup function.
333
359
 
@@ -1 +1 @@
1
- {"version":3,"file":"cliTemplateFiles.js","sourceRoot":"","sources":["../../../../src/cli/cliTemplateFiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cliTemplateFiles.js","sourceRoot":"","sources":["../../../../src/cli/cliTemplateFiles.ts"],"names":[],"mappings":";;;;AAAA,yCAA0C;AAC1C,mCAAqC;AAErC,8EAA6C;AAC7C,qDAAwD;AACxD,+BAAqC;AACrC,2BAA8C;AAEvC,MAAM,oBAAoB,GAAG,CAAC,EACnC,QAAQ,EACR,UAAU,GAIX,EAAE,EAAE;IACH,eAAe,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AARW,QAAA,oBAAoB,wBAQ/B;AAEW,QAAA,aAAa,GAAG,KAAK,CAAC;AACtB,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAC/C,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AACzB,QAAA,iBAAiB,GAAG;IAC/B,WAAW;IACX,cAAc;IACd,cAAc;IACd,YAAY;IACZ,kBAAkB;CACV,CAAC;AAMX,MAAM,eAAe,GAAG,CAAC,UAAkB,EAAE,WAAwB,EAAE,EAAE;IACvE,KAAK,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAClE,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,iBAAiB,GAAG,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAA,cAAS,EAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,IAAA,kBAAa,EAAC,QAAQ,EAAE,IAAA,iBAAS,EAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,IAAA,cAAS,EAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,EAAE,QAAQ,EAAwB,EAAE,EAAE,CACjE,CAAC;IACC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI;IACxE,eAAe,EACb,IAAI,CAAC,SAAS,CACZ;QACE,eAAe,EAAE;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,gBAAgB,EAAE,QAAQ;YAC1B,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,OAAO;YACf,eAAe,EAAE,IAAI;YACrB,gCAAgC,EAAE,IAAI;YACtC,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI;YACZ,mBAAmB,EAAE,IAAI;SAC1B;QACD,OAAO,EAAE,CAAC,qBAAa,EAAE,2BAAmB,EAAE,eAAe,CAAC;QAC9D,OAAO,EAAE,CAAC,GAAG,qBAAa,kBAAkB,CAAC;KAC9C,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;IACV,WAAW,EAAE,gBAAgB,EAAE;IAC/B,CAAC,2BAAmB,CAAC,EAAE;QACrB,sBAAsB,EACpB,wFAAwF;KAC3F;IACD,CAAC,qBAAa,CAAC,EAAE;QACf,GAAG,IAAA,6BAAW,EAAC,yBAAiB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QACvE,UAAU,EAAE;;qDAEmC,2BAAmB;;;;;;gBAMxD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;;;YAM5B;QACN,CAAC,kBAAkB,CAAC,EAAE;YACpB,SAAS,EAAE;gBACT,sBAAsB,EAAE;;;;;;;;;;;;;;;;;mDAiBiB;gBACzC,GAAG,EAAE;oBACH,UAAU,EAAE;;;;;;;;;+EASuD;iBACpE;aACF;SACF;QACD,mBAAmB,EAAE;;;;;;;;;;2DAUgC;KACtD;IACD,CAAC,eAAe,CAAC,EAAE;QACjB,oBAAoB,EAAE;;;;;;;;;;wBAUJ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;YAqBpC;KACP;IACD,mBAAmB,EAAE,YAAY;IACjC,YAAY,EAAE;;;;;YAKN;IACR,cAAc,EAAE;;;sBAGE,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;;;;;;uEAMY,QAAQ;;;;6DAIlB;CAC1D,CAAU,CAAC;AAEd,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE;QACP,KAAK,EAAE,6CAA6C;QACpD,GAAG,EAAE,0BAA0B;QAC/B,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,gBAAgB;QAC5B,KAAK,EAAE,4BAA4B;QACnC,IAAI,EAAE,mFAAmF;KAC1F;IACD,YAAY,EAAE,EAAE,CAAC,sBAAW,CAAC,IAAI,CAAC,EAAE,IAAI,sBAAW,CAAC,OAAO,EAAE,EAAE;IAC/D,eAAe,EAAE;QACf,GAAG,IAAA,0BAAQ,EAAC,sBAAW,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,CAAC;QACrD,GAAG,IAAA,0BAAQ,EAAC,sBAAW,CAAC,eAAe,EAAE;YACvC,YAAY;YACZ,QAAQ;YACR,wBAAwB;YACxB,mBAAmB;YACnB,aAAa;SACd,CAAC;KACH;IACD,OAAO,EAAE;QACP,aAAa,EAAE;YACb,KAAK,EAAE,8BAA8B;YACrC,OAAO,EAAE,4BAA4B;SACtC;KACF;CACF,CAAC,CAAC;AACH,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAgCL,qBAAa;;;;;;;;;;WAUlB,2BAAmB;;;eAGf,kBAAkB;;;;;;;;iBAQhB,qBAAa,eAAe,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6BtD,yBAAiB;KAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC;KAC/B,GAAG,CACF,CAAC,UAAU,EAAE,EAAE,CACb,uBAAuB,UAAU,QAAQ,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAC1E;KACA,IAAI,CAAC,SAAS,CAAC;KACjB,CAAC;AAUN;;;GAGG;AACH,MAAM,oBAAoB,GAAG;IAC3B,cAAc,EACZ,iGAAiG;IACnG,UAAU,EACR,mGAAmG;IACrG,cAAc,EACZ,+FAA+F;IACjG,SAAS,EACP,4GAA4G;IAC9G,EAAE,EAAE,oEAAoE;IACxE,KAAK,EACH,+EAA+E;IACjF,SAAS,EACP,wFAAwF;IAC1F,OAAO,EACL,gGAAgG;IAClG,QAAQ,EACN,2FAA2F;IAC7F,WAAW,EACT,gFAAgF;IAClF,qBAAqB,EACnB,iHAAiH;IACnH,UAAU,EAAE,8DAA8D;IAC1E,eAAe,EACb,+EAA+E;IACjF,UAAU,EACR,0FAA0F;CAC9D,CAAC;AAEjC,MAAM,kBAAkB,GAAG;IACzB,gBAAgB,EACd,gFAAgF;IAClF,eAAe,EACb,wEAAwE;IAC1E,aAAa,EACX,yPAAyP;CAC/N,CAAC;AAE/B,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;MAazB,oBAAoB,CAAC,EAAE;MACvB,oBAAoB,CAAC,UAAU,IAAI,kBAAkB,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,eAAe;MAC5G,oBAAoB,CAAC,cAAc;MACnC,oBAAoB,CAAC,cAAc;MACnC,oBAAoB,CAAC,eAAe;MACpC,oBAAoB,CAAC,SAAS,IAAI,oBAAoB,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmC9D,oBAAoB,CAAC,WAAW,IAAI,oBAAoB,CAAC,qBAAqB;MAC9E,oBAAoB,CAAC,UAAU;MAC/B,kBAAkB,CAAC,aAAa;;;MAGhC,oBAAoB,CAAC,KAAK;;;;MAI1B,oBAAoB,CAAC,UAAU;;;;;;;;;;;;;MAa/B,oBAAoB,CAAC,SAAS;;;;;oFAKgD,CAAC"}