@cogitator-ai/deploy 0.4.8 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +66 -31
  2. package/dist/analyzer.d.ts +91 -9
  3. package/dist/analyzer.d.ts.map +1 -1
  4. package/dist/analyzer.js +573 -93
  5. package/dist/analyzer.js.map +1 -1
  6. package/dist/deployer.d.ts +15 -2
  7. package/dist/deployer.d.ts.map +1 -1
  8. package/dist/deployer.js +18 -8
  9. package/dist/deployer.js.map +1 -1
  10. package/dist/generator.d.ts +10 -2
  11. package/dist/generator.d.ts.map +1 -1
  12. package/dist/generator.js +15 -3
  13. package/dist/generator.js.map +1 -1
  14. package/dist/index.d.ts +3 -2
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/providers/artifacts.d.ts.map +1 -1
  19. package/dist/providers/artifacts.js +2 -1
  20. package/dist/providers/artifacts.js.map +1 -1
  21. package/dist/providers/docker.d.ts +17 -0
  22. package/dist/providers/docker.d.ts.map +1 -1
  23. package/dist/providers/docker.js +63 -8
  24. package/dist/providers/docker.js.map +1 -1
  25. package/dist/providers/fly.d.ts +2 -0
  26. package/dist/providers/fly.d.ts.map +1 -1
  27. package/dist/providers/fly.js +43 -2
  28. package/dist/providers/fly.js.map +1 -1
  29. package/dist/templates/docker-compose.d.ts.map +1 -1
  30. package/dist/templates/docker-compose.js +23 -15
  31. package/dist/templates/docker-compose.js.map +1 -1
  32. package/dist/templates/dockerfile.d.ts +31 -2
  33. package/dist/templates/dockerfile.d.ts.map +1 -1
  34. package/dist/templates/dockerfile.js +144 -45
  35. package/dist/templates/dockerfile.js.map +1 -1
  36. package/dist/templates/fly-toml.d.ts.map +1 -1
  37. package/dist/templates/fly-toml.js +65 -31
  38. package/dist/templates/fly-toml.js.map +1 -1
  39. package/dist/templates/health.d.ts +9 -2
  40. package/dist/templates/health.d.ts.map +1 -1
  41. package/dist/templates/health.js +24 -2
  42. package/dist/templates/health.js.map +1 -1
  43. package/dist/utils/text.d.ts +9 -0
  44. package/dist/utils/text.d.ts.map +1 -0
  45. package/dist/utils/text.js +19 -0
  46. package/dist/utils/text.js.map +1 -0
  47. package/dist/volumes.d.ts +10 -0
  48. package/dist/volumes.d.ts.map +1 -0
  49. package/dist/volumes.js +21 -0
  50. package/dist/volumes.js.map +1 -0
  51. package/package.json +6 -4
@@ -1,8 +1,30 @@
1
1
  /** Where the server adapters (express, fastify, hono, koa) answer health checks when mounted at their default `/cogitator` base path. */
2
2
  export const DEFAULT_HEALTH_PATH = '/cogitator/health';
3
- /** The health check path for `config`, always starting with a slash. */
3
+ const SERVER_HEALTH_PATHS = {
4
+ express: DEFAULT_HEALTH_PATH,
5
+ fastify: DEFAULT_HEALTH_PATH,
6
+ hono: DEFAULT_HEALTH_PATH,
7
+ koa: DEFAULT_HEALTH_PATH,
8
+ tetsu: '/health',
9
+ };
10
+ /**
11
+ * The health check path of `config`, always starting with a slash:
12
+ * `health.path`, else the path the detected server adapter answers on. A
13
+ * worker has none, and neither has a server whose path is unknown (a Next.js
14
+ * app, a plain HTTP framework), which then gets no health check.
15
+ */
4
16
  export function healthPath(config) {
5
- const path = config.health?.path ?? DEFAULT_HEALTH_PATH;
17
+ if ((config.kind ?? 'server') === 'worker')
18
+ return undefined;
19
+ const path = config.health?.path ??
20
+ (config.server ? SERVER_HEALTH_PATHS[config.server] : undefined) ??
21
+ (config.kind === undefined ? DEFAULT_HEALTH_PATH : undefined);
22
+ if (!path)
23
+ return undefined;
6
24
  return path.startsWith('/') ? path : `/${path}`;
7
25
  }
26
+ /** Whether the deployment answers HTTP: every server, and a worker that sets a port. */
27
+ export function servesHttp(config) {
28
+ return (config.kind ?? 'server') === 'server' || config.port !== undefined;
29
+ }
8
30
  //# sourceMappingURL=health.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/templates/health.ts"],"names":[],"mappings":"AAEA,yIAAyI;AACzI,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEvD,wEAAwE;AACxE,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,mBAAmB,CAAC;IACxD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/templates/health.ts"],"names":[],"mappings":"AAEA,yIAAyI;AACzI,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEvD,MAAM,mBAAmB,GAA0C;IACjE,OAAO,EAAE,mBAAmB;IAC5B,OAAO,EAAE,mBAAmB;IAC5B,IAAI,EAAE,mBAAmB;IACzB,GAAG,EAAE,mBAAmB;IACxB,KAAK,EAAE,SAAS;CACjB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC7D,MAAM,IAAI,GACR,MAAM,CAAC,MAAM,EAAE,IAAI;QACnB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAChE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `value` without the `char` characters it ends with. A loop rather than a `/x+$/` regular
3
+ * expression, which backtracks in quadratic time over a long run of `char` followed by
4
+ * anything else.
5
+ */
6
+ export declare function trimTrailing(value: string, char: string): string;
7
+ /** `value` without the `char` characters it starts or ends with, in linear time. */
8
+ export declare function trimEdges(value: string, char: string): string;
9
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,oFAAoF;AACpF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7D"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * `value` without the `char` characters it ends with. A loop rather than a `/x+$/` regular
3
+ * expression, which backtracks in quadratic time over a long run of `char` followed by
4
+ * anything else.
5
+ */
6
+ export function trimTrailing(value, char) {
7
+ let end = value.length;
8
+ while (end > 0 && value[end - 1] === char)
9
+ end--;
10
+ return value.slice(0, end);
11
+ }
12
+ /** `value` without the `char` characters it starts or ends with, in linear time. */
13
+ export function trimEdges(value, char) {
14
+ let start = 0;
15
+ while (start < value.length && value[start] === char)
16
+ start++;
17
+ return trimTrailing(value.slice(start), char);
18
+ }
19
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,IAAY;IACtD,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI;QAAE,GAAG,EAAE,CAAC;IACjD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,IAAY;IACnD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI;QAAE,KAAK,EAAE,CAAC;IAC9D,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { DeployVolume } from '@cogitator-ai/types';
2
+ /** The app directory in the image, where relative paths of the running app resolve. */
3
+ export declare const APP_DIR = "/app";
4
+ /** A Fly and Docker volume name for `volume`: lowercase letters, digits and underscores, 30 at most. */
5
+ export declare function volumeName(volume: DeployVolume): string;
6
+ /** Where `volume` is mounted in the container. */
7
+ export declare function volumeMountPath(volume: DeployVolume): string;
8
+ /** Paths of volumes inside the project, kept out of the image so local data never ships. */
9
+ export declare function projectVolumePaths(volumes: readonly DeployVolume[] | undefined): string[];
10
+ //# sourceMappingURL=volumes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volumes.d.ts","sourceRoot":"","sources":["../src/volumes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,uFAAuF;AACvF,eAAO,MAAM,OAAO,SAAS,CAAC;AAE9B,wGAAwG;AACxG,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAMvD;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAE5D;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAKzF"}
@@ -0,0 +1,21 @@
1
+ import { posix } from 'node:path';
2
+ import { trimEdges, trimTrailing } from './utils/text.js';
3
+ /** The app directory in the image, where relative paths of the running app resolve. */
4
+ export const APP_DIR = '/app';
5
+ /** A Fly and Docker volume name for `volume`: lowercase letters, digits and underscores, 30 at most. */
6
+ export function volumeName(volume) {
7
+ const words = trimEdges((volume.name ?? volume.path).toLowerCase().replace(/[^a-z0-9]+/g, '_'), '_');
8
+ return trimTrailing(words.slice(0, 30), '_') || 'data';
9
+ }
10
+ /** Where `volume` is mounted in the container. */
11
+ export function volumeMountPath(volume) {
12
+ return posix.isAbsolute(volume.path) ? volume.path : posix.join(APP_DIR, volume.path);
13
+ }
14
+ /** Paths of volumes inside the project, kept out of the image so local data never ships. */
15
+ export function projectVolumePaths(volumes) {
16
+ return (volumes ?? [])
17
+ .map((volume) => posix.normalize(volume.path))
18
+ .filter((path) => !posix.isAbsolute(path) && !path.startsWith('..'))
19
+ .map((path) => trimTrailing(path, '/'));
20
+ }
21
+ //# sourceMappingURL=volumes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volumes.js","sourceRoot":"","sources":["../src/volumes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE1D,uFAAuF;AACvF,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC;AAE9B,wGAAwG;AACxG,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,MAAM,KAAK,GAAG,SAAS,CACrB,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,EACtE,GAAG,CACJ,CAAC;IACF,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC;AACzD,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACxF,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,kBAAkB,CAAC,OAA4C;IAC7E,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;SACnB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC7C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACnE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogitator-ai/deploy",
3
- "version": "0.4.8",
3
+ "version": "0.6.0",
4
4
  "description": "One-command deployment for Cogitator agents",
5
5
  "keywords": [
6
6
  "cogitator",
@@ -16,15 +16,17 @@
16
16
  "exports": {
17
17
  ".": {
18
18
  "types": "./dist/index.d.ts",
19
- "import": "./dist/index.js"
19
+ "import": "./dist/index.js",
20
+ "default": "./dist/index.js"
20
21
  }
21
22
  },
22
23
  "files": [
23
24
  "dist"
24
25
  ],
25
26
  "dependencies": {
26
- "@cogitator-ai/types": "0.35.0",
27
- "@cogitator-ai/config": "0.11.8"
27
+ "@cogitator-ai/types": "0.37.0",
28
+ "@cogitator-ai/config": "0.12.1",
29
+ "yaml": "^2.9.1"
28
30
  },
29
31
  "devDependencies": {
30
32
  "@types/node": "^22.20.4",