@lotiai/composer 0.2.0 → 0.2.2

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 (189) hide show
  1. package/dist/build-config/index.d.ts +52 -0
  2. package/dist/build-config/index.d.ts.map +1 -0
  3. package/dist/build-config/index.js +66 -0
  4. package/dist/build-config/index.js.map +1 -0
  5. package/dist/build-config/loader.d.ts +80 -0
  6. package/dist/build-config/loader.d.ts.map +1 -0
  7. package/dist/build-config/loader.js +238 -0
  8. package/dist/build-config/loader.js.map +1 -0
  9. package/dist/build-config/schema.d.ts +101 -0
  10. package/dist/build-config/schema.d.ts.map +1 -0
  11. package/dist/build-config/schema.js +94 -0
  12. package/dist/build-config/schema.js.map +1 -0
  13. package/dist/cli/commands/dev-temporal.d.ts +15 -0
  14. package/dist/cli/commands/dev-temporal.d.ts.map +1 -0
  15. package/dist/cli/commands/dev-temporal.js +68 -0
  16. package/dist/cli/commands/dev-temporal.js.map +1 -0
  17. package/dist/cli/commands/dev.d.ts +21 -0
  18. package/dist/cli/commands/dev.d.ts.map +1 -0
  19. package/dist/cli/commands/dev.js +421 -0
  20. package/dist/cli/commands/dev.js.map +1 -0
  21. package/dist/cli/commands/profiles.d.ts +15 -0
  22. package/dist/cli/commands/profiles.d.ts.map +1 -0
  23. package/dist/cli/commands/profiles.js +69 -0
  24. package/dist/cli/commands/profiles.js.map +1 -0
  25. package/dist/cli/index.d.ts +21 -0
  26. package/dist/cli/index.d.ts.map +1 -0
  27. package/dist/cli/index.js +44 -0
  28. package/dist/cli/index.js.map +1 -0
  29. package/dist/index.d.ts +15 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +57 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/internal/async/build/workflow-factory.d.ts +212 -0
  34. package/dist/internal/async/build/workflow-factory.d.ts.map +1 -0
  35. package/dist/internal/async/build/workflow-factory.js +533 -0
  36. package/dist/internal/async/build/workflow-factory.js.map +1 -0
  37. package/dist/internal/async/build-scripts/utils/common.d.ts +28 -0
  38. package/dist/internal/async/build-scripts/utils/common.d.ts.map +1 -0
  39. package/dist/internal/async/build-scripts/utils/common.js +50 -0
  40. package/dist/internal/async/build-scripts/utils/common.js.map +1 -0
  41. package/dist/internal/async/build-scripts/utils/import-module.d.ts +19 -0
  42. package/dist/internal/async/build-scripts/utils/import-module.d.ts.map +1 -0
  43. package/dist/internal/async/build-scripts/utils/import-module.js +80 -0
  44. package/dist/internal/async/build-scripts/utils/import-module.js.map +1 -0
  45. package/dist/internal/async/build-scripts/utils/type-guards.d.ts +123 -0
  46. package/dist/internal/async/build-scripts/utils/type-guards.d.ts.map +1 -0
  47. package/dist/internal/async/build-scripts/utils/type-guards.js +145 -0
  48. package/dist/internal/async/build-scripts/utils/type-guards.js.map +1 -0
  49. package/dist/internal/async/config/cleanup-policy.d.ts +50 -0
  50. package/dist/internal/async/config/cleanup-policy.d.ts.map +1 -0
  51. package/dist/internal/async/config/cleanup-policy.js +20 -0
  52. package/dist/internal/async/config/cleanup-policy.js.map +1 -0
  53. package/dist/internal/async/config/worker-profiles.d.ts +172 -0
  54. package/dist/internal/async/config/worker-profiles.d.ts.map +1 -0
  55. package/dist/internal/async/config/worker-profiles.js +275 -0
  56. package/dist/internal/async/config/worker-profiles.js.map +1 -0
  57. package/dist/internal/async/execute/temporal-client.d.ts +182 -0
  58. package/dist/internal/async/execute/temporal-client.d.ts.map +1 -0
  59. package/dist/internal/async/execute/temporal-client.js +190 -0
  60. package/dist/internal/async/execute/temporal-client.js.map +1 -0
  61. package/dist/internal/async/execute/workflow-execution.d.ts +98 -0
  62. package/dist/internal/async/execute/workflow-execution.d.ts.map +1 -0
  63. package/dist/internal/async/execute/workflow-execution.js +191 -0
  64. package/dist/internal/async/execute/workflow-execution.js.map +1 -0
  65. package/dist/internal/async/metrics/task-queue-metrics.d.ts +74 -0
  66. package/dist/internal/async/metrics/task-queue-metrics.d.ts.map +1 -0
  67. package/dist/internal/async/metrics/task-queue-metrics.js +155 -0
  68. package/dist/internal/async/metrics/task-queue-metrics.js.map +1 -0
  69. package/dist/internal/async/register/activity-worker.d.ts +123 -0
  70. package/dist/internal/async/register/activity-worker.d.ts.map +1 -0
  71. package/dist/internal/async/register/activity-worker.js +355 -0
  72. package/dist/internal/async/register/activity-worker.js.map +1 -0
  73. package/dist/internal/async/register/generate-workflow-source.d.ts +43 -0
  74. package/dist/internal/async/register/generate-workflow-source.d.ts.map +1 -0
  75. package/dist/internal/async/register/generate-workflow-source.js +193 -0
  76. package/dist/internal/async/register/generate-workflow-source.js.map +1 -0
  77. package/dist/internal/async/register/workflow-worker.d.ts +125 -0
  78. package/dist/internal/async/register/workflow-worker.d.ts.map +1 -0
  79. package/dist/internal/async/register/workflow-worker.js +215 -0
  80. package/dist/internal/async/register/workflow-worker.js.map +1 -0
  81. package/dist/internal/async/register-scripts/start-activity-worker.d.ts +70 -0
  82. package/dist/internal/async/register-scripts/start-activity-worker.d.ts.map +1 -0
  83. package/dist/internal/async/register-scripts/start-activity-worker.js +75 -0
  84. package/dist/internal/async/register-scripts/start-activity-worker.js.map +1 -0
  85. package/dist/internal/async/register-scripts/start-all-workers.d.ts +81 -0
  86. package/dist/internal/async/register-scripts/start-all-workers.d.ts.map +1 -0
  87. package/dist/internal/async/register-scripts/start-all-workers.js +84 -0
  88. package/dist/internal/async/register-scripts/start-all-workers.js.map +1 -0
  89. package/dist/internal/async/register-scripts/start-workflow-worker.d.ts +69 -0
  90. package/dist/internal/async/register-scripts/start-workflow-worker.d.ts.map +1 -0
  91. package/dist/internal/async/register-scripts/start-workflow-worker.js +74 -0
  92. package/dist/internal/async/register-scripts/start-workflow-worker.js.map +1 -0
  93. package/dist/internal/async/register-scripts/sync-schedules-cli.d.ts +28 -0
  94. package/dist/internal/async/register-scripts/sync-schedules-cli.d.ts.map +1 -0
  95. package/dist/internal/async/register-scripts/sync-schedules-cli.js +124 -0
  96. package/dist/internal/async/register-scripts/sync-schedules-cli.js.map +1 -0
  97. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.d.ts +55 -0
  98. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.d.ts.map +1 -0
  99. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.js +146 -0
  100. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.js.map +1 -0
  101. package/dist/internal/async/register-scripts/sync-schedules.d.ts +68 -0
  102. package/dist/internal/async/register-scripts/sync-schedules.d.ts.map +1 -0
  103. package/dist/internal/async/register-scripts/sync-schedules.js +83 -0
  104. package/dist/internal/async/register-scripts/sync-schedules.js.map +1 -0
  105. package/dist/internal/async/schedule/constants.d.ts +10 -0
  106. package/dist/internal/async/schedule/constants.d.ts.map +1 -0
  107. package/dist/internal/async/schedule/constants.js +13 -0
  108. package/dist/internal/async/schedule/constants.js.map +1 -0
  109. package/dist/internal/async/schedule/define-schedule.d.ts +192 -0
  110. package/dist/internal/async/schedule/define-schedule.d.ts.map +1 -0
  111. package/dist/internal/async/schedule/define-schedule.js +79 -0
  112. package/dist/internal/async/schedule/define-schedule.js.map +1 -0
  113. package/dist/internal/async/schedule/index.d.ts +3 -0
  114. package/dist/internal/async/schedule/index.d.ts.map +1 -0
  115. package/dist/internal/async/schedule/index.js +9 -0
  116. package/dist/internal/async/schedule/index.js.map +1 -0
  117. package/dist/internal/async/schedule/schedule-definition-schema.d.ts +64 -0
  118. package/dist/internal/async/schedule/schedule-definition-schema.d.ts.map +1 -0
  119. package/dist/internal/async/schedule/schedule-definition-schema.js +77 -0
  120. package/dist/internal/async/schedule/schedule-definition-schema.js.map +1 -0
  121. package/dist/internal/async/schedule/sync-schedules.d.ts +71 -0
  122. package/dist/internal/async/schedule/sync-schedules.d.ts.map +1 -0
  123. package/dist/internal/async/schedule/sync-schedules.js +231 -0
  124. package/dist/internal/async/schedule/sync-schedules.js.map +1 -0
  125. package/dist/internal/async/utils/ensure-namespace.d.ts +16 -0
  126. package/dist/internal/async/utils/ensure-namespace.d.ts.map +1 -0
  127. package/dist/internal/async/utils/ensure-namespace.js +64 -0
  128. package/dist/internal/async/utils/ensure-namespace.js.map +1 -0
  129. package/dist/internal/async/utils/find-package-root.d.ts +9 -0
  130. package/dist/internal/async/utils/find-package-root.d.ts.map +1 -0
  131. package/dist/internal/async/utils/find-package-root.js +28 -0
  132. package/dist/internal/async/utils/find-package-root.js.map +1 -0
  133. package/dist/internal/async/utils/is-composer-error.d.ts +14 -0
  134. package/dist/internal/async/utils/is-composer-error.d.ts.map +1 -0
  135. package/dist/internal/async/utils/is-composer-error.js +17 -0
  136. package/dist/internal/async/utils/is-composer-error.js.map +1 -0
  137. package/dist/internal/context-provider.d.ts +316 -0
  138. package/dist/internal/context-provider.d.ts.map +1 -0
  139. package/dist/internal/context-provider.js +12 -0
  140. package/dist/internal/context-provider.js.map +1 -0
  141. package/dist/internal/create-composer.d.ts +57 -0
  142. package/dist/internal/create-composer.d.ts.map +1 -0
  143. package/dist/internal/create-composer.js +125 -0
  144. package/dist/internal/create-composer.js.map +1 -0
  145. package/dist/internal/dag-sync-fanout.d.ts +79 -0
  146. package/dist/internal/dag-sync-fanout.d.ts.map +1 -0
  147. package/dist/internal/dag-sync-fanout.js +59 -0
  148. package/dist/internal/dag-sync-fanout.js.map +1 -0
  149. package/dist/internal/dag-sync-step.d.ts +230 -0
  150. package/dist/internal/dag-sync-step.d.ts.map +1 -0
  151. package/dist/internal/dag-sync-step.js +159 -0
  152. package/dist/internal/dag-sync-step.js.map +1 -0
  153. package/dist/internal/dag-sync-workflow.d.ts +535 -0
  154. package/dist/internal/dag-sync-workflow.d.ts.map +1 -0
  155. package/dist/internal/dag-sync-workflow.js +843 -0
  156. package/dist/internal/dag-sync-workflow.js.map +1 -0
  157. package/dist/internal/defaults.d.ts +24 -0
  158. package/dist/internal/defaults.d.ts.map +1 -0
  159. package/dist/internal/defaults.js +102 -0
  160. package/dist/internal/defaults.js.map +1 -0
  161. package/dist/internal/errors.d.ts +109 -0
  162. package/dist/internal/errors.d.ts.map +1 -0
  163. package/dist/internal/errors.js +212 -0
  164. package/dist/internal/errors.js.map +1 -0
  165. package/dist/internal/index.d.ts +9 -0
  166. package/dist/internal/index.d.ts.map +1 -0
  167. package/dist/internal/index.js +22 -0
  168. package/dist/internal/index.js.map +1 -0
  169. package/dist/internal/observability.d.ts +63 -0
  170. package/dist/internal/observability.d.ts.map +1 -0
  171. package/dist/internal/observability.js +323 -0
  172. package/dist/internal/observability.js.map +1 -0
  173. package/dist/internal/types.d.ts +80 -0
  174. package/dist/internal/types.d.ts.map +1 -0
  175. package/dist/internal/types.js +9 -0
  176. package/dist/internal/types.js.map +1 -0
  177. package/dist/internal/workflow-planning.d.ts +107 -0
  178. package/dist/internal/workflow-planning.d.ts.map +1 -0
  179. package/dist/internal/workflow-planning.js +216 -0
  180. package/dist/internal/workflow-planning.js.map +1 -0
  181. package/dist/schedule-sync.d.ts +17 -0
  182. package/dist/schedule-sync.d.ts.map +1 -0
  183. package/dist/schedule-sync.js +22 -0
  184. package/dist/schedule-sync.js.map +1 -0
  185. package/dist/temporal-naming.d.ts +27 -0
  186. package/dist/temporal-naming.d.ts.map +1 -0
  187. package/dist/temporal-naming.js +33 -0
  188. package/dist/temporal-naming.js.map +1 -0
  189. package/package.json +29 -17
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Dev:Up and Dev:Down Commands
3
+ *
4
+ * Start and stop the Temporal development server using the docker-compose file
5
+ * bundled with the @lotiai/composer package. This allows consumers to run
6
+ * `npx @lotiai/composer dev:up` without needing to manage compose files themselves.
7
+ */
8
+ import type { CommandModule } from "yargs";
9
+ interface DevTemporalOptions {
10
+ detach: boolean;
11
+ }
12
+ export declare const devUpCommand: CommandModule<object, DevTemporalOptions>;
13
+ export declare const devDownCommand: CommandModule<object, object>;
14
+ export {};
15
+ //# sourceMappingURL=dev-temporal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-temporal.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev-temporal.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAsB3C,UAAU,kBAAkB;IAC1B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,MAAM,EAAE,kBAAkB,CAsBlE,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAYxD,CAAC"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /**
3
+ * Dev:Up and Dev:Down Commands
4
+ *
5
+ * Start and stop the Temporal development server using the docker-compose file
6
+ * bundled with the @lotiai/composer package. This allows consumers to run
7
+ * `npx @lotiai/composer dev:up` without needing to manage compose files themselves.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.devDownCommand = exports.devUpCommand = void 0;
11
+ const node_child_process_1 = require("node:child_process");
12
+ const node_path_1 = require("node:path");
13
+ /**
14
+ * Resolves the path to the docker-compose.temporal.yml file shipped with
15
+ * the @lotiai/composer package. Uses __dirname so the path is correct whether
16
+ * the CLI is run from node_modules or from the source repo.
17
+ */
18
+ function getComposeFilePath() {
19
+ // __dirname at runtime is dist/cli/commands/; the compose file is at the package root
20
+ return (0, node_path_1.resolve)(__dirname, "..", "..", "..", "docker-compose.temporal.yml");
21
+ }
22
+ /**
23
+ * Runs `docker compose` with the given arguments, forwarding stdio to the terminal.
24
+ */
25
+ function dockerCompose(args) {
26
+ const composeFile = getComposeFilePath();
27
+ (0, node_child_process_1.execFileSync)("docker", ["compose", "-f", composeFile, ...args], {
28
+ stdio: "inherit",
29
+ });
30
+ }
31
+ exports.devUpCommand = {
32
+ command: "dev:up",
33
+ describe: "Start the Temporal development server (PostgreSQL, Temporal, Temporal UI)",
34
+ builder: (yargs) => yargs.option("detach", {
35
+ alias: "d",
36
+ type: "boolean",
37
+ default: true,
38
+ description: "Run containers in the background",
39
+ }),
40
+ handler: (argv) => {
41
+ try {
42
+ const args = ["up"];
43
+ if (argv.detach) {
44
+ args.push("-d");
45
+ }
46
+ dockerCompose(args);
47
+ }
48
+ catch (error) {
49
+ console.error("Failed to start Temporal:", error instanceof Error ? error.message : error);
50
+ process.exit(1);
51
+ }
52
+ },
53
+ };
54
+ exports.devDownCommand = {
55
+ command: "dev:down",
56
+ describe: "Stop the Temporal development server",
57
+ builder: (yargs) => yargs,
58
+ handler: () => {
59
+ try {
60
+ dockerCompose(["down"]);
61
+ }
62
+ catch (error) {
63
+ console.error("Failed to stop Temporal:", error instanceof Error ? error.message : error);
64
+ process.exit(1);
65
+ }
66
+ },
67
+ };
68
+ //# sourceMappingURL=dev-temporal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-temporal.js","sourceRoot":"","sources":["../../../src/cli/commands/dev-temporal.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,2DAAkD;AAClD,yCAAoC;AAGpC;;;;GAIG;AACH,SAAS,kBAAkB;IACzB,sFAAsF;IACtF,OAAO,IAAA,mBAAO,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,6BAA6B,CAAC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,IAAA,iCAAY,EAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,EAAE;QAC9D,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;AACL,CAAC;AAMY,QAAA,YAAY,GAA8C;IACrE,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,2EAA2E;IACrF,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;QACrB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,kCAAkC;KAChD,CAAC;IACJ,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC;AAEW,QAAA,cAAc,GAAkC;IAC3D,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,sCAAsC;IAChD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;IACzB,OAAO,EAAE,GAAG,EAAE;QACZ,IAAI,CAAC;YACH,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Dev Command
3
+ *
4
+ * Development watch mode for Composer async workflows.
5
+ * Watches for TypeScript file changes, then:
6
+ * 1. Compiles TypeScript
7
+ * 2. Restarts Temporal workers (workers load definitions at startup)
8
+ *
9
+ * Works in both standalone projects and monorepos. The watch root is
10
+ * auto-detected by walking up from cwd to find `pnpm-lock.yaml`, and
11
+ * watch patterns are configured via `dev.watchPatterns` in the build config.
12
+ */
13
+ import type { CommandModule } from "yargs";
14
+ interface DevOptions {
15
+ config?: string;
16
+ verbose: boolean;
17
+ workerScript?: string;
18
+ }
19
+ export declare const devCommand: CommandModule<object, DevOptions>;
20
+ export {};
21
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,MAAM,EAAE,UAAU,CA6CxD,CAAC"}
@@ -0,0 +1,421 @@
1
+ "use strict";
2
+ /**
3
+ * Dev Command
4
+ *
5
+ * Development watch mode for Composer async workflows.
6
+ * Watches for TypeScript file changes, then:
7
+ * 1. Compiles TypeScript
8
+ * 2. Restarts Temporal workers (workers load definitions at startup)
9
+ *
10
+ * Works in both standalone projects and monorepos. The watch root is
11
+ * auto-detected by walking up from cwd to find `pnpm-lock.yaml`, and
12
+ * watch patterns are configured via `dev.watchPatterns` in the build config.
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.devCommand = void 0;
49
+ const node_child_process_1 = require("node:child_process");
50
+ const node_path_1 = require("node:path");
51
+ const index_1 = require("../../build-config/index");
52
+ exports.devCommand = {
53
+ command: "dev",
54
+ describe: "Start development watch mode (compile, restart workers on changes)",
55
+ builder: (yargs) => yargs
56
+ .option("config", {
57
+ alias: "c",
58
+ type: "string",
59
+ description: "Path to composer.build-config.ts (auto-detected if not specified)",
60
+ })
61
+ .option("verbose", {
62
+ type: "boolean",
63
+ default: false,
64
+ description: "Enable verbose output",
65
+ })
66
+ .option("worker-script", {
67
+ type: "string",
68
+ description: "Path to the compiled start-all-workers .js script (relative to cwd). Overrides dev.startAllWorkersJsScript in config.",
69
+ }),
70
+ handler: async (argv) => {
71
+ const { config: configPath, verbose, workerScript: workerScriptArg } = argv;
72
+ if (verbose) {
73
+ console.log("Loading configuration...");
74
+ }
75
+ const { config } = await (0, index_1.loadBuildConfig)(configPath ? { configPath } : undefined);
76
+ // Resolve worker script: CLI arg > config > error
77
+ const workerScriptRelative = workerScriptArg ?? config.dev?.startAllWorkersJsScript;
78
+ if (!workerScriptRelative) {
79
+ console.error("Error: No worker script specified. Provide --worker-script or set dev.startAllWorkersJsScript in composer.build-config.ts.");
80
+ process.exit(1);
81
+ }
82
+ if (verbose) {
83
+ console.log(` workerScript: ${workerScriptRelative}`);
84
+ }
85
+ await runDevMode(config, workerScriptRelative, verbose);
86
+ },
87
+ };
88
+ // ─── Dev Mode Implementation ───────────────────────────────────────────────────
89
+ // Ported from packages/composer/scripts/watch-and-run.ts with config-driven
90
+ // worker script resolution.
91
+ // Track state
92
+ let workerProcess = null;
93
+ let debounceTimeout = null;
94
+ let isRebuilding = false;
95
+ let isShuttingDown = false; // For double Ctrl+C force kill pattern
96
+ let watcher = null; // Module-level so shutdown() can close it
97
+ const DEBOUNCE_MS = 300; // Wait for multi-file saves to complete
98
+ /**
99
+ * Spawn a process and return its exit code.
100
+ */
101
+ async function spawnWithExitCode(command, args, description) {
102
+ return new Promise((resolve) => {
103
+ const startTime = Date.now();
104
+ const proc = (0, node_child_process_1.spawn)(command, args, {
105
+ stdio: "inherit",
106
+ cwd: process.cwd(),
107
+ });
108
+ proc.on("close", (code) => {
109
+ const duration = ((Date.now() - startTime) / 1000).toFixed(1);
110
+ if (code === 0) {
111
+ console.log(`[checkmark] ${description} (${duration}s)\n`);
112
+ }
113
+ else {
114
+ console.error(`[x] ${description} failed with code ${code}\n`);
115
+ }
116
+ resolve(code ?? 1);
117
+ });
118
+ proc.on("error", (err) => {
119
+ console.error(`[x] ${description} error:`, err.message);
120
+ resolve(1);
121
+ });
122
+ });
123
+ }
124
+ /**
125
+ * Compile TypeScript via `tsc --build`.
126
+ *
127
+ * Resolves `tsc` from the `typescript` package bundled as a direct dependency
128
+ * of @lotiai/composer, so it works regardless of whether the consumer has
129
+ * `typescript` installed or `tsc` on PATH.
130
+ *
131
+ * This follows project references in tsconfig.json, so in a monorepo it
132
+ * compiles the current package and all its transitive dependencies.
133
+ */
134
+ async function compile() {
135
+ const tscPath = require.resolve("typescript/bin/tsc");
136
+ console.log("Compiling TypeScript (tsc --build)...");
137
+ const exitCode = await spawnWithExitCode(process.execPath, [tscPath, "--build"], "Compilation");
138
+ return exitCode === 0;
139
+ }
140
+ /**
141
+ * Stop the currently running workers
142
+ */
143
+ async function stopWorkers() {
144
+ if (!workerProcess)
145
+ return;
146
+ return new Promise((resolve) => {
147
+ console.log("Stopping workers...");
148
+ // TODO: stdio stream destruction before SIGTERM may be unnecessary -- the
149
+ // 'exit' handler + SIGKILL fallback should ensure cleanup. Try removing
150
+ // the stream destruction and verify that stopWorkers() still resolves
151
+ // promptly (look for: the promise hanging because stdout/stderr keep
152
+ // the event loop alive after the child is killed).
153
+ if (workerProcess.stdout) {
154
+ workerProcess.stdout.removeAllListeners();
155
+ workerProcess.stdout.destroy();
156
+ }
157
+ if (workerProcess.stderr) {
158
+ workerProcess.stderr.removeAllListeners();
159
+ workerProcess.stderr.destroy();
160
+ }
161
+ // Try graceful shutdown first
162
+ workerProcess.kill("SIGTERM");
163
+ const timeout = setTimeout(() => {
164
+ // Force kill if still running after 5s
165
+ if (workerProcess && !workerProcess.killed) {
166
+ console.log("Force killing workers...");
167
+ workerProcess.kill("SIGKILL");
168
+ }
169
+ }, 5000);
170
+ workerProcess.on("exit", () => {
171
+ clearTimeout(timeout);
172
+ workerProcess = null;
173
+ console.log("[checkmark] Workers stopped\n");
174
+ resolve();
175
+ });
176
+ });
177
+ }
178
+ /**
179
+ * Start the Temporal workers
180
+ */
181
+ async function startWorkers(workerScriptPath) {
182
+ console.log("Starting workers...");
183
+ // Track worker readiness
184
+ // We wait for Temporal SDK's "Worker state changed" logs with state: 'RUNNING'
185
+ // This ensures workflow bundles are compiled and workers are actually polling
186
+ let workflowWorkerReady = false;
187
+ let activityWorkerReady = false;
188
+ let outputBuffer = ""; // Buffer to accumulate multi-line JSON logs from Temporal
189
+ const readyPromise = new Promise((resolve, reject) => {
190
+ const timeout = setTimeout(() => {
191
+ reject(new Error("Workers failed to start within 30 seconds"));
192
+ }, 30000);
193
+ const checkReady = () => {
194
+ if (workflowWorkerReady && activityWorkerReady) {
195
+ clearTimeout(timeout);
196
+ resolve();
197
+ }
198
+ };
199
+ workerProcess = (0, node_child_process_1.spawn)("node", [workerScriptPath], {
200
+ stdio: ["inherit", "pipe", "pipe"],
201
+ env: {
202
+ ...process.env,
203
+ FORCE_COLOR: "1", // Preserve colors when piping output
204
+ },
205
+ });
206
+ // Parse stdout/stderr to detect when workers are actually ready
207
+ // We check both streams because Temporal logs can go to either
208
+ const parseWorkerOutput = (output) => {
209
+ // Add to buffer and keep last 5000 chars to avoid unbounded growth
210
+ outputBuffer += output;
211
+ if (outputBuffer.length > 5000) {
212
+ outputBuffer = outputBuffer.slice(-5000);
213
+ }
214
+ // Detect readiness from composer's own log messages, which are emitted
215
+ // regardless of the task queue names configured by the consumer.
216
+ if (outputBuffer.includes("Workflow Workers ready")) {
217
+ if (!workflowWorkerReady) {
218
+ console.log(" -> Workflow Worker now RUNNING");
219
+ workflowWorkerReady = true;
220
+ checkReady();
221
+ }
222
+ }
223
+ if (outputBuffer.includes("Activity Workers ready")) {
224
+ if (!activityWorkerReady) {
225
+ console.log(" -> Activity Worker now RUNNING");
226
+ activityWorkerReady = true;
227
+ checkReady();
228
+ }
229
+ }
230
+ };
231
+ workerProcess.stdout?.on("data", (data) => {
232
+ const output = data.toString();
233
+ parseWorkerOutput(output);
234
+ process.stdout.write(output);
235
+ });
236
+ workerProcess.stderr?.on("data", (data) => {
237
+ const output = data.toString();
238
+ parseWorkerOutput(output);
239
+ process.stderr.write(output);
240
+ });
241
+ workerProcess.on("error", (err) => {
242
+ clearTimeout(timeout);
243
+ reject(err);
244
+ });
245
+ workerProcess.on("exit", (code, signal) => {
246
+ clearTimeout(timeout);
247
+ if (signal !== "SIGTERM" && signal !== "SIGKILL") {
248
+ console.error(`Workers exited unexpectedly (code: ${code}, signal: ${signal})`);
249
+ }
250
+ workerProcess = null;
251
+ });
252
+ });
253
+ try {
254
+ await readyPromise;
255
+ console.log("\nTemporal Ready\n");
256
+ }
257
+ catch (error) {
258
+ console.error("Worker startup failed:", error);
259
+ throw error;
260
+ }
261
+ }
262
+ /**
263
+ * Full rebuild: compile -> restart
264
+ */
265
+ async function rebuild(workerScriptPath, _verbose, trigger) {
266
+ if (isRebuilding) {
267
+ console.log("Skipping rebuild (already in progress)...\n");
268
+ return;
269
+ }
270
+ isRebuilding = true;
271
+ const startTime = Date.now();
272
+ console.log("\n-------------------------------------------");
273
+ if (trigger) {
274
+ console.log(`Change detected: ${trigger}`);
275
+ }
276
+ console.log("Rebuilding...\n");
277
+ try {
278
+ const compileSuccess = await compile();
279
+ if (!compileSuccess) {
280
+ console.error("Compilation failed. Fix errors and save to retry.");
281
+ console.log("Still watching for changes...\n");
282
+ return;
283
+ }
284
+ await stopWorkers();
285
+ await startWorkers(workerScriptPath);
286
+ const totalTime = ((Date.now() - startTime) / 1000).toFixed(1);
287
+ console.log(`Total rebuild time: ${totalTime}s`);
288
+ console.log("Watching for changes...\n");
289
+ }
290
+ catch (error) {
291
+ console.error("Rebuild error:", error);
292
+ console.log("Still watching for changes...\n");
293
+ }
294
+ finally {
295
+ isRebuilding = false;
296
+ }
297
+ }
298
+ /**
299
+ * Graceful shutdown
300
+ */
301
+ async function shutdown() {
302
+ // Force kill on second Ctrl+C
303
+ if (isShuttingDown) {
304
+ console.log("\n\nForce killing all processes...");
305
+ // Force kill worker process immediately
306
+ if (workerProcess && !workerProcess.killed) {
307
+ workerProcess.kill("SIGKILL");
308
+ }
309
+ // TODO: setImmediate wrapping process.exit may be unnecessary -- process.exit()
310
+ // is synchronous and setImmediate does not reliably flush stdout. Try
311
+ // replacing with direct process.exit() and verify shutdown still works
312
+ // cleanly (check for truncated log output on exit).
313
+ setImmediate(() => process.exit(1));
314
+ return; // Don't proceed with graceful shutdown
315
+ }
316
+ isShuttingDown = true;
317
+ console.log("\n\nShutting down watch mode... (Press Ctrl+C again to force quit)");
318
+ // Set a timeout to force exit if graceful shutdown hangs
319
+ // This ensures we always exit even if watcher or workers don't close cleanly
320
+ const forceExitTimeout = setTimeout(() => {
321
+ console.log("\nGraceful shutdown timed out, forcing exit...");
322
+ process.exit(1);
323
+ }, 10000); // 10 second timeout
324
+ try {
325
+ // Clear any pending debounce
326
+ if (debounceTimeout) {
327
+ clearTimeout(debounceTimeout);
328
+ }
329
+ // Close file watcher
330
+ if (watcher) {
331
+ // Remove all listeners before closing to prevent them keeping event loop alive
332
+ watcher.removeAllListeners();
333
+ await watcher.close();
334
+ }
335
+ // Stop workers gracefully
336
+ await stopWorkers();
337
+ clearTimeout(forceExitTimeout);
338
+ console.log("Shutdown complete");
339
+ // TODO: setImmediate wrapping process.exit may be unnecessary -- process.exit()
340
+ // is synchronous and setImmediate does not reliably flush stdout. Try
341
+ // replacing with direct process.exit() and verify shutdown still works
342
+ // cleanly (check for truncated log output on exit).
343
+ setImmediate(() => process.exit(0));
344
+ }
345
+ catch (error) {
346
+ clearTimeout(forceExitTimeout);
347
+ console.error("Shutdown error:", error);
348
+ // TODO: setImmediate wrapping process.exit may be unnecessary -- process.exit()
349
+ // is synchronous and setImmediate does not reliably flush stdout. Try
350
+ // replacing with direct process.exit() and verify shutdown still works
351
+ // cleanly (check for truncated log output on exit).
352
+ setImmediate(() => process.exit(1));
353
+ }
354
+ }
355
+ /**
356
+ * Main dev mode entry point
357
+ */
358
+ async function runDevMode(config, workerScriptRelative, verbose) {
359
+ // Dynamic import to keep chokidar as an optional devDependency
360
+ const chokidar = await Promise.resolve().then(() => __importStar(require("chokidar")));
361
+ const workerScriptPath = (0, node_path_1.resolve)(process.cwd(), workerScriptRelative);
362
+ // watchPatterns are already resolved to absolute paths by the config loader
363
+ const watchPatterns = config.dev.watchPatterns;
364
+ console.log("Starting Composer Development Mode...\n");
365
+ console.log(`Watching: ${watchPatterns.join(", ")}`);
366
+ console.log("Excludes: dist/, node_modules/, *.gen.{ts,json}");
367
+ console.log("\nRuntime discovery mode: workers import compiled .js files directly");
368
+ console.log("");
369
+ // Handle file change with debouncing
370
+ const handleFileChange = (path) => {
371
+ if (debounceTimeout) {
372
+ clearTimeout(debounceTimeout);
373
+ }
374
+ // Debounce: wait for editor to finish saving multiple files
375
+ debounceTimeout = setTimeout(() => {
376
+ const relativePath = path.replace(`${process.cwd()}/`, "");
377
+ rebuild(workerScriptPath, verbose, relativePath);
378
+ }, DEBOUNCE_MS);
379
+ };
380
+ // Initial build - be forgiving for dev mode, allow starting with errors
381
+ console.log("Initial setup...\n");
382
+ const compileSuccess = await compile();
383
+ if (!compileSuccess) {
384
+ console.error("Initial compilation failed.");
385
+ console.log(" Fix errors and save to retry.\n");
386
+ console.log("Starting watch mode anyway...\n");
387
+ }
388
+ // Only start workers if compilation succeeded
389
+ if (compileSuccess) {
390
+ await startWorkers(workerScriptPath);
391
+ console.log("Watching for changes...\n");
392
+ }
393
+ else {
394
+ console.log("Initial setup incomplete. Workers not started.");
395
+ console.log(" Fix errors and save to complete setup.");
396
+ console.log("Watching for changes...\n");
397
+ }
398
+ // Setup file watcher (patterns are already absolute from config loader)
399
+ watcher = chokidar.watch(watchPatterns, {
400
+ persistent: true,
401
+ ignoreInitial: true,
402
+ ignored: [
403
+ "**/node_modules/**",
404
+ "**/dist/**",
405
+ "**/*.gen.ts",
406
+ "**/*.gen.json",
407
+ "**/coverage/**",
408
+ "**/test-results/**",
409
+ ],
410
+ });
411
+ watcher.on("change", handleFileChange);
412
+ watcher.on("add", handleFileChange);
413
+ watcher.on("error", (error) => {
414
+ console.error("Watcher error:", error);
415
+ });
416
+ // Setup shutdown handlers
417
+ // Wrap shutdown() in arrow function with void to properly handle async without waiting
418
+ process.on("SIGINT", () => void shutdown());
419
+ process.on("SIGTERM", () => void shutdown());
420
+ }
421
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Profiles Command
3
+ *
4
+ * Resolves effective worker profile deployment topology for an environment,
5
+ * including dedicated profiles and fallback queue routing.
6
+ */
7
+ import type { CommandModule } from "yargs";
8
+ interface ProfilesOptions {
9
+ config?: string;
10
+ env: string;
11
+ json: boolean;
12
+ }
13
+ export declare const profilesCommand: CommandModule<object, ProfilesOptions>;
14
+ export {};
15
+ //# sourceMappingURL=profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;CACf;AAED,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,MAAM,EAAE,eAAe,CAiElE,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * Profiles Command
4
+ *
5
+ * Resolves effective worker profile deployment topology for an environment,
6
+ * including dedicated profiles and fallback queue routing.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.profilesCommand = void 0;
10
+ const index_1 = require("../../build-config/index");
11
+ const worker_profiles_1 = require("../../internal/async/config/worker-profiles");
12
+ exports.profilesCommand = {
13
+ command: "profiles",
14
+ describe: "Resolve worker profile deployment and fallback queues for an environment",
15
+ builder: (yargs) => yargs
16
+ .option("config", {
17
+ alias: "c",
18
+ type: "string",
19
+ description: "Path to composer.build-config.ts (auto-detected if not specified)",
20
+ })
21
+ .option("env", {
22
+ type: "string",
23
+ demandOption: true,
24
+ description: "Environment to resolve (for example: local, preview, prod)",
25
+ })
26
+ .option("json", {
27
+ type: "boolean",
28
+ default: false,
29
+ description: "Output machine-readable JSON",
30
+ }),
31
+ handler: async (argv) => {
32
+ const { config: configPath, env, json } = argv;
33
+ try {
34
+ const { config } = await (0, index_1.loadBuildConfig)(configPath ? { configPath } : undefined);
35
+ const resolved = (0, worker_profiles_1.resolveProfilesForEnvironment)(env, config);
36
+ if (json) {
37
+ console.log(JSON.stringify(resolved, null, 2));
38
+ return;
39
+ }
40
+ console.log(`Environment: ${env}`);
41
+ console.log("\nDedicated profiles:");
42
+ for (const profile of Object.keys(worker_profiles_1.WORKER_PROFILES)) {
43
+ const dedicated = resolved.dedicatedProfiles[profile];
44
+ if (!dedicated) {
45
+ continue;
46
+ }
47
+ console.log(` - ${profile} (${dedicated.taskQueue}) cpu=${dedicated.resources.cpu} memory=${dedicated.resources.memory} maxConcurrentActivities=${dedicated.resources.maxConcurrentActivities} initial=${dedicated.resources.initialCount} max=${dedicated.resources.maxCount}`);
48
+ }
49
+ console.log("\nFallback queues:");
50
+ let hasFallbacks = false;
51
+ for (const profile of Object.keys(worker_profiles_1.WORKER_PROFILES)) {
52
+ const queues = resolved.fallbackQueues[profile];
53
+ if (!queues || queues.length === 0) {
54
+ continue;
55
+ }
56
+ hasFallbacks = true;
57
+ console.log(` - ${profile}: ${queues.join(", ")}`);
58
+ }
59
+ if (!hasFallbacks) {
60
+ console.log(" - none");
61
+ }
62
+ }
63
+ catch (error) {
64
+ console.error("Failed to resolve profiles:", error instanceof Error ? error.message : error);
65
+ process.exit(1);
66
+ }
67
+ },
68
+ };
69
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../src/cli/commands/profiles.ts"],"names":[],"mappings":"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"}